code: def element_wise(self, func, *args, **kwargs):
          
          s = self.shape
          emat = [func(o, *args, **kwargs) for o in self.matrix.ravel()]
          return Matrix(np_array(emat).reshape(s))
docs: Apply a function to each matrix element and return the result in a
          new operator matrix of the same shape.
  
          Args:
              func (FunctionType): A function to be applied to each element. It
                  must take the element as its first argument.
              args: Additional positional arguments to be passed to `func`
              kwargs: Additional keyword arguments to be passed to `func`
  
          Returns:
              Matrix: Matrix with results of `func`, applied element-wise.