class_docstr: Turn a function into a Module by keeping the vars it uses.
class_docstr_tok: ["Turn","a","function","into","a","Module","by","keeping","the","vars","it","uses","."]
docstr: Function constructor.
  
  Args:
      f: the function or the module to represent.
      vc: the VarCollection of variables used by the function.
docstr_tok: ["Function","constructor",".","Args",":","f",":","the","function","or","the","module","to","represent",".","vc",":","the","VarCollection","of","variables","used","by","the","function","."]
code: def __init__(self, f: Callable, vc: VarCollection):
      """Function constructor.
  
      Args:
          f: the function or the module to represent.
          vc: the VarCollection of variables used by the function.
      """
      if hasattr(f, "__name__"):
          self.vc = VarCollection(
              (f"{{{f.__name__}}}{k}", v) for k, v in vc.items()
          )
      else:
          self.vc = VarCollection(vc)
      self.__wrapped__ = f
  
imports: from collections import namedtuple
  from typing import Optional, List, Union, Callable, Tuple
  import jax
  import jax.numpy
  import numpy
  from objax.typing import JaxArray
  from objax.util import class_name, override_args_kwargs, positional_args_names, repr_function
  from objax.variable import BaseVar, RandomState, VarCollection
label_desc: Use image node_id 1 to create a new Function object from inherited base classes: Module with example: obj = Function(f, vc)