class_docstr: ``Proxy`` objects are ``Node`` wrappers that flow through the
  program during symbolic tracing and record all the operations
  (``torch`` function calls, method calls, operators) that they touch
  into the growing FX Graph.
  
  If you're doing graph transforms, you can wrap your own ``Proxy``
  method around a raw ``Node`` so that you can use the overloaded
  operators to add additional things to a ``Graph``.
  
  ``Proxy`` objects cannot be iterated. In other words, the symbolic
  tracer will throw an error if a ``Proxy`` is used in a loop or as
  an ``*args``/``**kwargs`` function argument.
  
  There are two main ways around this:
  1. Factor out the untraceable logic into a top-level function and
  use ``fx.wrap`` on it.
  2. If the control flow is static (i.e. the loop trip count is
  based on some hyperparameter), the code can be kept in its original
  position and refactored into something like::
  
      for i in range(self.some_hyperparameter):
          indexed_item = proxied_value[i]
  
  For a more detailed description into the Proxy internals, check out
  the "Proxy" section in `torch/fx/OVERVIEW.md`
class_docstr_tok: ["``","Proxy","``","objects","are","``","Node","``","wrappers","that","flow","through","the","program","during","symbolic","tracing","and","record","all","the","operations","(","``","torch","``","function","calls",",","method","calls",",","operators",")","that","they","touch","into","the","growing","FX","Graph",".","If","you","'re","doing","graph","transforms",",","you","can","wrap","your","own","``","Proxy","``","method","around","a","raw","``","Node","``","so","that","you","can","use","the","overloaded","operators","to","add","additional","things","to","a","``","Graph","``",".","``","Proxy","``","objects","can","not","be","iterated",".","In","other","words",",","the","symbolic","tracer","will","throw","an","error","if","a","``","Proxy","``","is","used","in","a","loop","or","as","an","``","*","args","``","\/","``","*","*","kwargs","``","function","argument",".","There","are","two","main","ways","around","this",":","1",".","Factor","out","the","untraceable","logic","into","a","top-level","function","and","use","``","fx.wrap","``","on","it",".","2",".","If","the","control","flow","is","static","(","i.e",".","the","loop","trip","count","is","based","on","some","hyperparameter",")",",","the","code","can","be","kept","in","its","original","position","and","refactored","into","something","like",":",":","for","i","in","range","(","self.some_hyperparameter",")",":","indexed_item","=","proxied_value","[","i","]","For","a","more","detailed","description","into","the","Proxy","internals",",","check","out","the","``","Proxy","''","section","in","`","torch\/fx\/OVERVIEW.md","`"]
code: def __len__(self):
      raise RuntimeError(
          "'len' is not supported in symbolic tracing by default. If you want "
          "this call to be recorded, please call torch.fx.wrap('len') at "
          "module scope"
      )
  
imports: import enum
  import dis
  import copy
  import sys
  import torch
  import inspect
  import operator
  import traceback
  import collections
  from dataclasses import is_dataclass, fields
  from .graph import magic_methods, reflectable_magic_methods, Graph
  from typing import Tuple, Dict, OrderedDict, Optional, Any, Iterator, Callable
  from .node import Target, Node, Argument, base_types, map_aggregate
  from ._compatibility import compatibility
  from .operator_schemas import check_for_mutable_operation
  import torch.fx.traceback
label_desc: Use image node_id 9 for calling the Proxy obj's underlying member method code with example usage: obj.__len__() without return types