class_docstr: Construct a multi-dimensional "meshgrid".
  
  ``grid = nd_grid()`` creates an instance which will return a mesh-grid
  when indexed.  The dimension and number of the output arrays are equal
  to the number of indexing dimensions.  If the step length is not a
  complex number, then the stop is not inclusive.
  
  However, if the step length is a **complex number** (e.g. 5j), then the
  integer part of its magnitude is interpreted as specifying the
  number of points to create between the start and stop values, where
  the stop value **is inclusive**.
  
  If instantiated with an argument of ``sparse=True``, the mesh-grid is
  open (or not fleshed out) so that only one-dimension of each returned
  argument is greater than 1.
  
  Parameters
  ----------
  sparse : bool, optional
      Whether the grid is sparse or not. Default is False.
  
  Notes
  -----
  Two instances of `nd_grid` are made available in the NumPy namespace,
  `mgrid` and `ogrid`, approximately defined as::
  
      mgrid = nd_grid(sparse=False)
      ogrid = nd_grid(sparse=True)
  
  Users should use these pre-defined instances instead of using `nd_grid`
  directly.
class_docstr_tok: ["Construct","a","multi-dimensional","``","meshgrid","''",".","``","grid","=","nd_grid","(",")","``","creates","an","instance","which","will","return","a","mesh-grid","when","indexed",".","The","dimension","and","number","of","the","output","arrays","are","equal","to","the","number","of","indexing","dimensions",".","If","the","step","length","is","not","a","complex","number",",","then","the","stop","is","not","inclusive",".","However",",","if","the","step","length","is","a","*","*","complex","number","*","*","(","e.g",".","5j",")",",","then","the","integer","part","of","its","magnitude","is","interpreted","as","specifying","the","number","of","points","to","create","between","the","start","and","stop","values",",","where","the","stop","value","*","*","is","inclusive","*","*",".","If","instantiated","with","an","argument","of","``","sparse=True","``",",","the","mesh-grid","is","open","(","or","not","fleshed","out",")","so","that","only","one-dimension","of","each","returned","argument","is","greater","than","1",".","Parameters","--","--","--","--","--","sparse",":","bool",",","optional","Whether","the","grid","is","sparse","or","not",".","Default","is","False",".","Notes","--","--","-","Two","instances","of","`","nd_grid","`","are","made","available","in","the","NumPy","namespace",",","`","mgrid","`","and","`","ogrid","`",",","approximately","defined","as",":",":","mgrid","=","nd_grid","(","sparse=False",")","ogrid","=","nd_grid","(","sparse=True",")","Users","should","use","these","pre-defined","instances","instead","of","using","`","nd_grid","`","directly","."]
code: def __init__(self, sparse=False):
      self.sparse = sparse
  
imports: from __future__ import division, absolute_import, print_function
  import functools
  import sys
  import math
  import numpy.core.numeric
  from numpy.core.numeric import asarray, ScalarType, array, alltrue, cumprod, arange, ndim
  from numpy.core.numerictypes import find_common_type, issubdtype
  import numpy.matrixlib
  from .function_base import diff
  from numpy.core.multiarray import ravel_multi_index, unravel_index
  from numpy.core.overrides import set_module
  from numpy.core import overrides, linspace
  from numpy.lib.stride_tricks import as_strided
label_desc: Use image node_id 1 to create a new nd_grid object from inherited base classes: object with example: obj = nd_grid(sparse)