docs: def fapply(f, x, tz=False):
      '''
      fapply(f,x) yields the result of applying f either to x, if x is a normal value or array, or to
        x.data if x is a sparse matrix. Does not modify x (unless f modifiex x).
  
      The optional argument tz (default: False) may be set to True to specify that, if x is a sparse 
      matrix that contains at least 1 element that is a sparse-zero, then f(0) should replace all the
      sparse-zeros in x (unless f(0) == 0).
      '''
      if sps.issparse(x):
          y = x.copy()
          y.data = f(x.data)
          if tz and y.getnnz() < np.prod(y.shape):
              z = f(np.array(0))
              if z != 0:
                  y = y.toarray()
                  y[y == 0] = z
          return y
      else: return f(x)