code: def tspace_type(space, impl, dtype=None):
      
      field_type = type(getattr(space, 'field', None))
  
      if dtype is None:
          pass
      elif is_real_floating_dtype(dtype):
          if field_type is None or field_type == ComplexNumbers:
              raise TypeError('real floating data type {!r} requires space '
                              'field to be of type RealNumbers, got {}'
                              ''.format(dtype, field_type))
      elif is_complex_floating_dtype(dtype):
          if field_type is None or field_type == RealNumbers:
              raise TypeError('complex floating data type {!r} requires space '
                              'field to be of type ComplexNumbers, got {!r}'
                              ''.format(dtype, field_type))
      elif is_numeric_dtype(dtype):
          if field_type == ComplexNumbers:
              raise TypeError('non-floating data type {!r} requires space field '
                              'to be of type RealNumbers, got {!r}'
                              .format(dtype, field_type))
  
      try:
          return tensor_space_impl(impl)
      except ValueError:
          raise NotImplementedError('no corresponding tensor space available '
                                    'for space {!r} and implementation {!r}'
                                    ''.format(space, impl))
docs: Select the correct corresponding tensor space.
  
      Parameters
      ----------
      space : `LinearSpace`
          Template space from which to infer an adequate tensor space. If
          it has a ``field`` attribute, ``dtype`` must be consistent with it.
      impl : string
          Implementation backend for the tensor space.
      dtype : optional
          Data type which the space is supposed to use. If ``None`` is
          given, the space type is purely determined from ``space`` and
          ``impl``. Otherwise, it must be compatible with the
          field of ``space``.
  
      Returns
      -------
      stype : type
          Space type selected after the space's field, the backend and
          the data type.