; docformat = 'idl'
;+
; NAME:
;	ajs_linspace
;
;
; PURPOSE:
;	This function returns an array of points equally (linearly)
;	spaced between two extremes (as Python's numpy.linspace or Matlab).
;
;
; CATEGORY:
;
;
;
; CALLING SEQUENCE:
;	Result = ajs_linspace(start, stop)
;
;
; INPUTS:
;	start	First point in output array
;	stop	Last point in output array
;
; OPTIONAL INPUTS:
;	num	Number of points in output array (default 51, or 50 bincentres)
;
;
; KEYWORD PARAMETERS:
;	bincentres	Set /bincentres to return centres of bins
;			bounded by start and stop
;
;
; OUTPUTS:
;	Returns array of floating point numbers, or double-precision if
;	either start or stop is double precision
;
;
; OPTIONAL OUTPUTS:
;	step	Step size used
;
;
; COMMON BLOCKS:
;
;
;
; SIDE EFFECTS:
;
;
;
; RESTRICTIONS:
;
;
;
; PROCEDURE:
;
;
;
; EXAMPLE:
;	Result = ajs_linspace(10, 20)
;
;
; MODIFICATION HISTORY:
;	17 Jan 2008 Created, Anthony Smith
;-
FUNCTION ajs_linspace, start, stop, num, step=step, bincentres=bincentres
  compile_opt idl2
  IF n_elements(num) EQ 0 THEN $
     IF keyword_set(bincentres) THEN $
        num = 50 $
     ELSE $
        num = 51
  IF (size(start, /type) EQ 5) OR (size(stop, /type) EQ 5) THEN BEGIN
      integers = dindgen(num)   ; Double precision
      num = double(num)
  ENDIF ELSE BEGIN
      integers = findgen(num)   ; Floating point 
      num = float(num)
  ENDELSE
  IF keyword_set(bincentres) THEN BEGIN
      step = (stop - start) / num
      start = start + step / 2
      stop = stop - step / 2
  ENDIF ELSE $
     step = (stop - start) / (num - 1.)
  linspace_array = start + integers * step
  return, linspace_array
END