code: def isfixed(ds):
      """Contains no variable dimensions
  
      >>> isfixed('10 * int')
      True
      >>> isfixed('var * int')
      False
      >>> isfixed('10 * {name: string, amount: int}')
      True
      >>> isfixed('10 * {name: string, amounts: var * int}')
      False
      """
      ds = dshape(ds)
      if isinstance(ds[0], TypeVar):
          return None  # don't know
      if isinstance(ds[0], Var):
          return False
      if isinstance(ds[0], Record):
          return all(map(isfixed, ds[0].types))
      if len(ds) > 1:
          return isfixed(ds.subarray(1))
      return True
  
file_path: datashader/datashader/datashape/predicates.py
imports: import numpy
  from .util import collect, dshape
  from .internal_utils import remove
  from .coretypes import DataShape, Fixed, Var, Ellipsis, Record, Unit, date_, datetime_, TypeVar, to_numpy_dtype, Categorical
  from .typesets import floating, boolean
label_desc: Use image node_id 6 for calling a global function with example usage: isfixed(ds) and returns: True, None, False, all, isfixed