code: def infer_storage_type(self, in_stype):
          
          for i, stype in enumerate(in_stype):
              assert stype == _STORAGE_TYPE_ID_TO_STR[_STORAGE_TYPE_DEFAULT], \
              "Default infer_storage_type implementation doesnt allow non default stypes: " \
              "found non default stype '%s' for in_stype[%d]. Please implement " \
              "infer_storage_type and infer_storage_type_backward interface " \
              "in your custom operator if you have non-default input/output stypes" % (stype, i)
          return in_stype, \
                 [_STORAGE_TYPE_ID_TO_STR[_STORAGE_TYPE_DEFAULT]]*len(self.list_outputs()), \
                 [_STORAGE_TYPE_ID_TO_STR[_STORAGE_TYPE_DEFAULT]]*len(self.list_auxiliary_states())
docs: infer_storage_type interface. Used to infer storage type of
          inputs and outputs in the forward pass. When this interface is not implemented,
          all stypes will be inferred as default.
  
          Parameters
          ----------
          in_stype : list of stypes, valid stypes are default, row_sparse and
              csr
  
          Returns
          -------
          in_stype : list
              list of argument stypes.
          out_stype : list
              list of output types calculated from in_stype,
              in the same order as declared in list_outputs.
          aux_type : Optional, list
              list of aux types calculated from in_stype,
              in the same order as declared in list_auxiliary_states.