'mutations' is passed in then all mutating operators will be
        replaced with their non-mutating equivalents. If
        'mutations_and_views' is passed in, then additionally, all
        aliasing operators will be replaced with their non-aliasing
        equivalents. Default: 'mutations'.
Returns:
      Returns a new "functionalized" function. It takes the same
      inputs as "func", and has the same behavior, but any mutations
      (and optionally aliasing) performed on intermeidate tensors in
      the function will be removed.
Return type:
      Callable
functionalize will also remove mutations (and views) that were
   performed on function inputs. However to preserve semantics,
   functionalize will "fix up" the mutations after the transform has
   finished running, by detecting if any tensor inputs "should have"
   been mutated, and copying the new data back to the inputs if
   necessary.
Example:
  >>> import torch
