code: def _construct_return_type(self, result, axes=None):
          
          ndim = getattr(result, 'ndim', None)
  
          # need to assume they are the same
          if ndim is None:
              if isinstance(result, dict):
                  ndim = getattr(list(result.values())[0], 'ndim', 0)
  
                  # have a dict, so top-level is +1 dim
                  if ndim != 0:
                      ndim += 1
  
          # scalar
          if ndim == 0:
              return Series(result)
  
          # same as self
          elif self.ndim == ndim:
              # return the construction dictionary for these axes
              if axes is None:
                  return self._constructor(result)
              return self._constructor(result, **self._construct_axes_dict())
  
          # sliced
          elif self.ndim == ndim + 1:
              if axes is None:
                  return self._constructor_sliced(result)
              return self._constructor_sliced(
                  result, **self._extract_axes_for_slice(self, axes))
  
          raise ValueError('invalid _construct_return_type [self->{self}] '
                           '[result->{result}]'.format(self=self, result=result))
docs: Return the type for the ndim of the result.