code: def reshape(self, *args, **kwargs):
      shape = check_shape(args, self.shape)
      order, copy = check_reshape_kwargs(kwargs)
  
      # Return early if reshape is not required
      if shape == self.shape:
          if copy:
              return self.copy()
          else:
              return self
  
      new = self._lil_container(shape, dtype=self.dtype)
  
      if order == "C":
          ncols = self.shape[1]
          for i, row in enumerate(self.rows):
              for col, j in enumerate(row):
                  new_r, new_c = np.unravel_index(i * ncols + j, shape)
                  new[new_r, new_c] = self[i, j]
      elif order == "F":
          nrows = self.shape[0]
          for i, row in enumerate(self.rows):
              for col, j in enumerate(row):
                  new_r, new_c = np.unravel_index(
                      i + j * nrows, shape, order
                  )
                  new[new_r, new_c] = self[i, j]
      else:
          raise ValueError("'order' must be 'C' or 'F'")
  
      return new
  
imports: from bisect import bisect_left
  import numpy
  from ._matrix import spmatrix
  from ._base import _spbase, sparray, issparse
  from ._index import IndexMixin, INT_TYPES, _broadcast_arrays
  from ._sputils import getdtype, isshape, isscalarlike, upcast_scalar, check_shape, check_reshape_kwargs
  from .None import _csparsetools
label_desc: Use image node_id 31 for calling the _lil_base obj's underlying member method code with example usage: obj.reshape() and returns: new, self, self