code: def fake_tree(mode, arg, t_constraints, source, sources):
      """
      Call fakify while recursively mapping on lists and dictionaries. Using pytree map
      would be ideal here, but we are also building sources as we recurse.
      """
      if isinstance(arg, (tuple, list)):
          return [
              fake_tree(
                  mode,
                  arg,
                  t_constraints,
                  GetItemSource(source, i),
                  sources,
              )
              for i, arg in enumerate(arg)
          ]
      elif isinstance(arg, dict):
          return {
              k: fake_tree(
                  mode,
                  arg,
                  t_constraints,
                  GetItemSource(source, k),
                  sources,
              )
              for k, arg in arg.items()
          }
      # TODO(avik): data classes
      else:
          return fakify(mode, arg, t_constraints, source, sources)
  
file_path: pytorch/torch/_export/non_strict_utils.py
imports: import inspect
  from collections import defaultdict
  from typing import Dict, Tuple
  import torch
  from torch._dynamo.source import GetItemSource, LocalSource, TensorProperty, TensorPropertySource
  from torch._dynamo.variables.builder import TrackedFake
  from torch._export.passes.add_runtime_assertions_for_constraints_pass import InputDim
  from torch._guards import Source
  from torch._subclasses.fake_tensor import FakeTensorMode
  from torch.export import Constraint
  from torch.fx.experimental.symbolic_shapes import ConstraintViolationError, DimDynamic, EqualityConstraint, ShapeEnv, StatelessSymbolicContext
label_desc: Use image node_id 2 for calling a global function with example usage: fake_tree(mode, arg, t_constraints, source, sources) and returns: unknown, unknown, fakify