code: def _reconstruct_object(typ, obj, axes, dtype):
      
      try:
          typ = typ.type
      except AttributeError:
          pass
  
      res_t = np.result_type(obj.dtype, dtype)
  
      if (not isinstance(typ, partial) and
              issubclass(typ, pd.core.generic.PandasObject)):
          return typ(obj, dtype=res_t, **axes)
  
      # special case for pathological things like ~True/~False
      if hasattr(res_t, 'type') and typ == np.bool_ and res_t != np.bool_:
          ret_value = res_t.type(obj)
      else:
          ret_value = typ(obj).astype(res_t)
          # The condition is to distinguish 0-dim array (returned in case of
          # scalar) and 1 element array
          # e.g. np.array(0) and np.array([0])
          if len(obj.shape) == 1 and len(obj) == 1:
              if not isinstance(ret_value, np.ndarray):
                  ret_value = np.array([ret_value]).astype(res_t)
  
      return ret_value
docs: Reconstruct an object given its type, raw value, and possibly empty
      (None) axes.
  
      Parameters
      ----------
      typ : object
          A type
      obj : object
          The value to use in the type constructor
      axes : dict
          The axes to use to construct the resulting pandas object
  
      Returns
      -------
      ret : typ
          An object of type ``typ`` with the value `obj` and possible axes
          `axes`.