class_docstr: Forces override of arguments of given module.
class_docstr_tok: ["Forces","override","of","arguments","of","given","module","."]
docstr: Undo ForceArgs on each submodule of the module. Modifications are done in-place.
  
  Args:
      module: module for which to undo ForceArgs.
      **kwargs: dictionary of argument overrides to undo.
          `name=val` remove override for value `val` of argument `name`.
          `name=ForceArgs.ANY` remove all overrides of argument `name`.
          If `**kwargs` is empty then all overrides will be undone.
docstr_tok: ["Undo","ForceArgs","on","each","submodule","of","the","module",".","Modifications","are","done","in-place",".","Args",":","module",":","module","for","which","to","undo","ForceArgs",".","*","*","kwargs",":","dictionary","of","argument","overrides","to","undo",".","`","name=val","`","remove","override","for","value","`","val","`","of","argument","`","name","`",".","`","name=ForceArgs.ANY","`","remove","all","overrides","of","argument","`","name","`",".","If","`","*","*","kwargs","`","is","empty","then","all","overrides","will","be","undone","."]
code: def undo(module: Module, **kwargs):
      """Undo ForceArgs on each submodule of the module. Modifications are done in-place.
  
      Args:
          module: module for which to undo ForceArgs.
          **kwargs: dictionary of argument overrides to undo.
              `name=val` remove override for value `val` of argument `name`.
              `name=ForceArgs.ANY` remove all overrides of argument `name`.
              If `**kwargs` is empty then all overrides will be undone.
      """
      if isinstance(module, ForceArgs):
          if not kwargs:
              module.forced_kwargs = {}
          else:
              module.forced_kwargs = {
                  k: v
                  for k, v in module.forced_kwargs.items()
                  if (k not in kwargs)
                  or (kwargs[k] not in (v, ForceArgs.ANY))
              }
          ForceArgs.undo(module.__wrapped__, **kwargs)
      elif isinstance(module, ModuleList):
          for idx, v in enumerate(module):
              if isinstance(v, Module):
                  ForceArgs.undo(v, **kwargs)
                  if isinstance(v, ForceArgs) and not v.forced_kwargs:
                      module[idx] = v.__wrapped__
      else:
          for k, v in module.__dict__.items():
              if isinstance(v, Module):
                  ForceArgs.undo(v, **kwargs)
                  if isinstance(v, ForceArgs) and not v.forced_kwargs:
                      setattr(module, k, v.__wrapped__)
  
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 for calling the ForceArgs obj's underlying member method code with example usage: obj.undo(module) without return types