o
    ei                     @   s^  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlmZmZ d dlmZ e ZedurEeZd dlZd dlm  mZ d dlmZ d dlmZ d d	lmZm Z m!Z! d d
l"m#Z#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ edej,ej-Z.de/de0fddZ1de/de0fddZ2e j3G dd dZ4G dd dej5Z6G dd dZ7ede8Z9G dd dej:Z;G dd  d Z<G d!d" d"Z=G d#d$ d$Z>G d%d& d&Z?G d'd( d(Z@G d)d* d*ZAG d+d, d,ZBG d-d. d.eBZCG d/d0 d0eBZDG d1d2 d2eBZEG d3d4 d4eBZFG d5d6 d6eBZGG d7d8 d8ZHG d9d: d:ZIdS );    N)abstractmethod)Callable)AnyNewTypeOptionalTypeVarUnion)overrideSelf)import_dill)TracingContext)AOTCompiledArtifact)
FakeTensorFakeTensorModeTensor)MetaConverterMetaTensorDescMetaTensorDescriber)SymNode)ShapeEnv)no_dispatch	_SymNodeTnamereturnc                 C   s
   |  dS )z
    An ops filter which allows pickle-safe ops. Pickle-safe ops are built-in
    ones where it will be possible to unpickle on any machine which has PyTorch.
    )ztorch.ops.atenztorch.ops.fbgemm)
startswithr    r   a/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/fx/_graph_pickler.py_ops_filter_safe$   s   r   keyc                 C   s   | dvS )z
    A metadata filter which allows pickle-safe node metadata. These often times contain
    stacks with pointers to unserializable objects, so we clear them out.
    )source_fn_stacknn_module_stackfwd_source_fn_stackr   )r   r   r   r   _node_metadata_key_filter_safe2   s   r#   c                   @   sB   e Zd ZU eZeeegef  e	d< e
Zeeegef  e	d< dS )Options
ops_filternode_metadata_key_filterN)__name__
__module____qualname__r   r%   r   r   strbool__annotations__r#   r&   r   r   r   r   r$   :   s   
 r$   c                       s   e Zd ZdZddejdee ddf fddZe	de
deed	ef eed	f f fd
dZe	de
dee fddZedde
dee defddZededede
fddZe	dddddde
dddedededee fddZ  ZS )GraphPicklerzb
    GraphPickler is a Pickler which helps pickling fx graph - in particular
    GraphModule.
    Nfileoptionsr   c                    sN   t d urt j|dd nt | |pt | _tt | _tdd| _	d S )NT)byrefF)	copy_data)
dillsuper__init__r$   r/   _UnpickleStateTokenobject_unpickle_stater   _meta_tensor_describer)selfr.   r/   	__class__r   r   r4   K   s   zGraphPickler.__init__obj.c                 C   s   t |trt| |S t |tjjrt| |S t |tjj	tjj
fr)t| |S t |tr4t| |S t |tjr@t| |S t |tjjrMt| |S t |tjjrXtdt| | }rb|S tS )Nz#Unexpected raw Node during pickling)
isinstancer   _TensorPickleDatareduce_helpertorchfxGraphModule_GraphModulePickleData_opsOperatorBaseOpOverloadPacket_OpPickleDatar   _ShapeEnvPickleDataSymInt_SymNodePickleData_guardsr   _TracingContextPickleDataNodeAssertionError_TorchNumpyPickleDataNotImplemented)r9   r<   reducer   r   r   reducer_override\   s"   

zGraphPickler.reducer_overridec                 C   s   || j u rdS d S )Nunpickle_state)r7   )r9   r<   r   r   r   persistent_id   s   
zGraphPickler.persistent_idc                 C   sH   t  }| ||}|| | W  d   S 1 sw   Y  dS )z#
        Pickle an object.
        N)ioBytesIOdumpgetvalue)clsr<   r/   streampicklerr   r   r   dumps   s
   


$zGraphPickler.dumpsdata	fake_modec                 C   sH   t |}t| }t||}| W  d   S 1 sw   Y  dS )z%
        Unpickle an object.
        N)_UnpickleStaterU   rV   _GraphUnpicklerload)r]   r^   staterZ   	unpicklerr   r   r   loads   s
   
$zGraphPickler.loadsP   2   T)	max_depthmax_iter_itemsverbosezOptions | Nonerg   rh   ri   c             	      s   pt   t t dtddffdddtdtt f fdddtd	td
tdtt f	fdd		|dd}|S )a  
        Find the first leaf that GraphPickler.dumps cannot serialize and return its path.

        This is GraphPickler-aware and avoids infinite loops by:
          - Traversing builtin containers directly (dict/list/tuple/set) instead of
            exploring their __reduce_ex__ tuples.
          - Only using __reduce_ex__ / __reduce__ for "opaque" objects.
          - Bounding recursion depth and iterator expansion.

        Args:
            obj: The object to attempt to pickle and debug.
            options: Optional Options instance for the GraphPickler.
            max_depth: Maximum recursion depth before stopping traversal.
            max_iter_items: Maximum number of items to materialize from iterators.
            verbose: If True, prints detailed traversal information.

        Returns:
            A string representing the path to the first unpicklable leaf,
            or None if the object is fully picklable.
        msgr   Nc                    s    rt |  d S d S N)print)rj   )ri   r   r   log   s   z%GraphPickler.debug_dumps.<locals>.logoc              
      s<   z	  |  W d S  ty } z|W  Y d }~S d }~ww rk   )r\   	Exception)rn   e)rY   r/   r   r   fail_exc   s   z*GraphPickler.debug_dumps.<locals>.fail_excpathdepthc              
      s  |krd|  d| dt |  d |d S t| }|v r#d S | d| }| d| dt |  d  | }|d u rL| d d S | dt |  d	|  t| tr~|  D ]\}}|| d
|d|d }|r{|  S qc|S t| ttfrt| D ]\}	}|| d
|	 d|d }|r|  S q|S t| t	t
frt| D ]\}	}|| d
|	 d|d }|r|  S q|S t| dr2t | jdr2zttt| d }
W n ty   d }
Y nw |
d ur2t|
kr| d d  |
d  }
t|
D ]\}	}|| d
|	 d|d }|r.|  S q|S z| }| dt |  W n tyb } z| d|  |W  Y d }~S d }~ww |tur|\}}| dt|  t|D ]\}	}|| d|	 d|d }|r|  S q{t| rt| D ]5}zt| |j}W n ty   | d|j  Y   S w || d|j |d }|r|  S q|S t| dd }t|r$z| }| dt |  W n  ty } z| d|  |d W  Y d }~S d }~ww ||d |d }|r$|S t| drLt|  D ]\}}|| d| |d }|rH|  S q0|S t| drx| jD ] }t| |rtt| || d| |d }|rt|  S qU|S d }z/t| dr| tj}| dt |  nt| dr|   }| dt |  W n ty } z| d |  |W  Y d }~S d }~ww t|trt|D ]!\}	}|d u rݐq҈|| d!|	 d|d }|r|  S q|S )"Nz  zDepth limit at z ()z (depth_limit)z	Walking: u   ✓ Pickles fine alonez[FAIL pickle] z -> []   __iter__iteratoru   ⚠ Iterator has more than z items, only checking first zreducer_override -> u   💥 reducer_override crashed: zUsing custom reduce, args=z.reduce_args[.__getstate__z__getstate__ -> u   💥 __getstate__ failed: z.__getstate__()__dict__	__slots____reduce_ex__z__reduce_ex__ -> 
__reduce__z__reduce__ -> u   💥 reduce protocol failed: z.__reduce__[)!typeidaddr=   dictitemslisttuple	enumerateset	frozensethasattrr'   endswith	itertoolsisliceiterro   lenrR   rP   dataclassesis_dataclassfieldsgetattrr   callablevarsr}   r~   pickleHIGHEST_PROTOCOLr   )rn   rr   rs   r   indentrp   kvbadiprefixrede2_argsafgetstaterb   e3r   slotreduce_tuplee4part)rq   rm   rg   rh   r[   visitedwalkr   r   r      s  "






 
z&GraphPickler.debug_dumps.<locals>.walkrootr   )	r$   rU   rV   r   r*   r   r   BaseExceptionint)rY   r<   r/   rg   rh   ri   r   r   )
rY   rq   rm   rg   rh   r/   r[   ri   r   r   r   debug_dumps   s   
. zGraphPickler.debug_dumpsrk   )r'   r(   r)   __doc__rU   rV   r   r$   r4   r	   r6   r   r   r   rR   r*   rT   classmethodbytesr\   staticmethodr   rd   r   r+   r   __classcell__r   r   r:   r   r-   E   sD    "+		r-   c                   @   s   e Zd ZdeddfddZdS )r_   r^   r   Nc                 C   s   || _ t | _d S rk   )r^   r   meta_converter)r9   r^   r   r   r   r4   c  s   z_UnpickleState.__init__)r'   r(   r)   r   r4   r   r   r   r   r_   b  s    r_   r5   c                       sB   e Zd Zdejdeddf fddZededefdd	Z	  Z
S )
r`   rZ   rS   r   Nc                    s   t  | || _d S rk   )r3   r4   r7   )r9   rZ   rS   r:   r   r   r4   o  s   
z_GraphUnpickler.__init__pidc                 C   s   |dkr| j S td)NrS   zInvalid persistent ID)r7   r   UnpicklingError)r9   r   r   r   r   persistent_loads  s   
z_GraphUnpickler.persistent_load)r'   r(   r)   rU   rV   r_   r4   r	   r6   r   r   r   r   r:   r   r`   n  s    r`   c                   @   sx   e Zd ZU eeef ed< edede	de
eeege	f e
eef f fddZde	ddfd	d
Zdede	fddZdS )rH   r]   r[   r<   r   c                 C      | j | ||jffS rk   unpickler7   rY   r[   r<   r   r   r   r?     s   z!_ShapeEnvPickleData.reduce_helperenvNc                 C   s.   |j rtd|j | _| jd= | jd= d S )Nz4Translation validation must be disabled for picklingtracked_fakesfake_tensor_cache)_translation_validation_enabledrN   r|   copyr]   )r9   r   r   r   r   r4     s
   z_ShapeEnvPickleData.__init__rS   c                 C   sJ   |j std|j jstd| j D ]\}}t|j j|| q|j jS )Nz#unpickle_state.fake_mode is not setz-unpickle_state.fake_mode.shape_env is not set)r^   rN   	shape_envr]   r   setattr)r9   rS   r   r   r   r   r   r     s   z_ShapeEnvPickleData.unpickle)r'   r(   r)   r   r*   r6   r,   r   r-   r   r   r   r
   r_   r5   r?   r4   r   r   r   r   r   rH   |  s   
 
rH   c                   @   sv   e Zd Zedededeeee	gef eee
f f fddZdeddfdd	Zdefd
dZde	dejfddZdS )rJ   r[   r<   r   c                 C   s8   | |j |jf}t|tjrtj|fS tdt| )NzUnhandled SymNode type )	noder7   r=   r@   rI   rJ   unpickle_sym_intNotImplementedErrorr   )rY   r[   r<   r   r   r   r   r?     s   
z _SymNodePickleData.reduce_helperr   Nc                 C   s$   |j | _|j| _|j| _|j| _d S rk   )_exprexprr   pytype_hinthint)r9   r   r   r   r   r4     s   z_SymNodePickleData.__init__c                 C   s(   | j d u r	tdt| j| j | j| jS )Nzshape_env is None)r   rN   r   r   r   r   )r9   r   r   r   _to_sym_node  s   
z_SymNodePickleData._to_sym_noderS   c                 C   s   t |  S rk   )r@   rI   r   r9   rS   r   r   r   r        z#_SymNodePickleData.unpickle_sym_int)r'   r(   r)   r   r-   r   r   r   r
   r_   r5   r?   r   r4   r   r@   rI   r   r   r   r   r   rJ     s    rJ   c                   @   sx   e Zd ZU ee ed< edededee	e
egef ee
ef f fddZdededd	fd
dZdedefddZd	S )r>   metadatar[   r<   r   c                 C   s   | j | |j||jffS rk   )r   r8   r7   r   r   r   r   r?     s   
z_TensorPickleData.reduce_helper	describertNc                 C   s   | |}|jrt|jtjjjstdt|j t	j
|d d| _tjD ]}|dv r-q&t| j|d urCtd| dt| j| q&d S )Nz3view_func must be None or _FakeTensorViewFunc, got r^   )r^   	view_funcz
not None: z: )describe_tensorr   r=   r@   _subclasses
meta_utils_FakeTensorViewFuncrN   r   r   replacer   r   _UNSERIALIZABLEr   )r9   r   r   r   r   r   r   r   r4     s"   

z_TensorPickleData.__init__rS   c                    s   t j| j jd}|jr!|jd ur!t j|j jd}t j||d}dtg tjf dt	tj
tf dtf fdd} j| jj|d d S )Nr   )basemake_meta_tdevicer   c                    s:   t   t j|  |W  d    S 1 sw   Y  d S rk   )r   r   r^   )r   r   rS   r   r   	with_fake  s   $z-_TensorPickleData.unpickle.<locals>.with_fake)r   r   r   r^   is_viewr   r   r@   r   r   r   r*   r   r   meta_tensorr   )r9   rS   r   new_baser   r   r   r   r     s0   z_TensorPickleData.unpickle)r'   r(   r)   r   r   r,   r   r-   r   r   r
   r_   r5   r?   r   r   r4   r   r   r   r   r   r>     s   
 
r>   c                   @   s   e Zd Zedededeeee	e
gef ee	ef f  fddZdededdfd	d
Zde
dedef fddZededee	 fddZdS )rO   r[   r<   r   c                 C   s"   |  | }r| j||jffS d S rk   )from_objectr   r7   )rY   r[   r<   r]   r   r   r   r?     s   z#_TorchNumpyPickleData.reduce_helpermodr   Nc                 C      || _ || _d S rk   )r   r   )r9   r   r   r   r   r   r4        
z_TorchNumpyPickleData.__init__rS   .c                 C   s&   t t| j| j}tjjj	 | S rk   )
r   	importlibimport_moduler   r   r@   _dynamo	variablesmiscget_np_to_tnp_map)r9   rS   npr   r   r   r     s   z_TorchNumpyPickleData.unpickletnpc                 C   s   t |sd S tjjj }z|| }sW d S W n
 ty#   Y d S w t|dd  }s.d}t|dd  }s8d S |tt	
||krLtd| d| | ||S )Nr(   numpyr'   zNumpy object mismatch for rz   )r   r@   r   r   r   get_tnp_to_np_mapget	TypeErrorr   r   r   rN   )rY   r   	tnp_to_npr   r   r   r   r   r   r     s&   
z!_TorchNumpyPickleData.from_object)r'   r(   r)   r   r-   r6   r   r   r   r
   r_   r5   r?   r*   r4   r   r   r   r   r   r   rO     s"    rO   c                   @   sz   e Zd Zededejjdee	e
egejjf ee
ef f fddZdejjdeddfd	d
ZdedejjfddZdS )rC   r[   r<   r   c                 C   s   | j | ||j|jffS rk   )r   r/   r7   r   r   r   r   r?   9  s   
z$_GraphModulePickleData.reduce_helpergmr/   Nc                 C   s^   t |tjjjr| }n| }t|dr| | _	n|j
 | _	| j	d= t|j|| _d S )Nr{   _graph)r=   r@   rA   _lazy_graph_module_LazyGraphModule_real_recompile	recompiler   r{   gm_dictr|   r   _GraphPickleDatar   graph)r9   r   r/   _python_coder   r   r   r4   E  s   

z_GraphModulePickleData.__init__rS   c                 C   s.   t jjt jj}| j|_| j|||_|S rk   )	r@   rA   rB   __new__r   r|   r   r   r   )r9   rS   r   r   r   r   r   R  s   z_GraphModulePickleData.unpickle)r'   r(   r)   r   r-   r@   rA   rB   r   r   r
   r_   r5   r?   r$   r4   r   r   r   r   r   rC   8  s    
rC   c                   @   sd   e Zd Zdejjdeejjd f deddfddZdejj	ded ejjf d	e
dejjfd
dZdS )_NodePickleDatar   mappingr/   r   Nc                    s   t tjj fdd|j| _t tjj fdd|j| _|j| _|j| _t	
|j| _|j| _fdd|j D | _d S )Nc                        |  S rk   r   nr   r   r   <lambda>`      z*_NodePickleData.__init__.<locals>.<lambda>c                    r   rk   r   r  r  r   r   r  b  r  c                    s&   i | ]\}} j r  |r||qS r   )r&   ).0r   r   )r/   r   r   
<dictcomp>n  s    z,_NodePickleData.__init__.<locals>.<dictcomp>)pytreetree_map_onlyr@   rA   rM   r   kwargsr   oprG   r   targetr   metar   )r9   r   r   r/   r   )r   r/   r   r4   Z  s   
z_NodePickleData.__init__r   rS   c                    s   t t fdd| j}t t fdd| j}| j|}t|s0t|t	s0t
dt| || j|||| j| j}| j|_|S )Nc                    r   rk   r   r  r  r   r   r  }  r  z*_NodePickleData.unpickle.<locals>.<lambda>c                    r   rk   r   r  r  r   r   r    r  z$target must be callable or str, got )r  r	  r   r   r
  r  r   r   r=   r*   rN   r   create_noder  r   r  )r9   r   r   rS   r   r
  r  r   r   r  r   r   w  s   z_NodePickleData.unpickle)r'   r(   r)   r@   rA   rM   r   r$   r4   Graphr_   r   r   r   r   r   r   Y  s&    
r   c                
   @   s   e Zd Zedededeeegef ee	 f fddZ
edededd fddZed	ed
eed ed f dedd fddZededefddZed	edefddZeded	edefddZdS )rG   r[   r  r   c                 C   s   |  ||j}|j|jffS rk   )r   r/   r   r7   )rY   r[   r  resultr   r   r   r?     s   z_OpPickleData.reduce_helperr/   c                 C   s   t |tr	t|S t t|dd tr0t|dstd|j}t |ts,tdt| t	|S t
jj|}t |t
jjrE| |t|S t |t
jjrS| |t|S |tjrf|dd\}}t||S tdt| d| d| )N__wrapped__z op missing __wrapped__ attributez"Expected AOTCompiledArtifact, got rz   rw   zTARGET:  )r=   r*   _OpStrPickleDatar   r   r   rN   r  r   _OpPrecompiledPickleDatar@   rA   rM   _pretty_print_targetrD   
OpOverload
_pickle_op_OpOverloadPickleDatarF   _OpOverloadPacketPickleDatar   _OpFunctionPickleDataSUPPORTED_ROOTSsplitr   )rY   r  r/   artifactr   r   detailr   r   r   r     s(   



z_OpPickleData.pickler   dataclsr  r  c                 C   s4   |j  }r|| sddlm} |d|  || S )Nr   )BypassFxGraphCachez"Unable to pickle non-standard op: )r%   torch._inductor.codecacher   )r   r  r/   r%   r   r   r   r   r    s   z_OpPickleData._pickle_oprS   c                 C   s   d S rk   r   r   r   r   r   r     s   z_OpPickleData.unpicklec                 C   s8   d|v r| dd\}}t | }| ||S t | S )zC
        Like `globals()[name]` but supports dotted names.
        rz   rw   )r  globals_getattr_by_name)rY   r   r   restr   r   r   r   _lookup_global_by_name  s
   

z$_OpPickleData._lookup_global_by_namer   c                 C   s4   d|v r| dd\}}t| |} d|v st| |S )zG
        Like `getattr(root, name)` but supports dotted names.
        rz   rw   )r  r   )r   r   r   r   r   r   r#    s
   

z_OpPickleData._getattr_by_nameN)r'   r(   r)   r   r-   r6   r   r   r_   r5   r?   r$   r   r   r*   r   r   r  r   r   r%  r#  r   r   r   r   rG     s:    rG   c                   @   s0   e Zd ZdeddfddZdedefddZdS )	r  r   r   Nc                 C   
   || _ d S rk   r   r9   r   r   r   r   r4        
z_OpStrPickleData.__init__rS   c                 C   s   | j S rk   r   r   r   r   r   r     s   z_OpStrPickleData.unpickle)r'   r(   r)   r*   r4   r_   r   r   r   r   r   r        r  c                   @   4   e Zd ZdeddfddZdedejjfddZ	dS )	r  r   r   Nc                 C   r&  rk   r   r'  r   r   r   r4     r(  z_OpOverloadPickleData.__init__rS   c                 C   0   |  | j}t|tjjstdt| |S )NzExpected OpOverload, got )r%  r   r=   r@   rD   r  rN   r   r9   rS   r<   r   r   r   r        z_OpOverloadPickleData.unpickle)
r'   r(   r)   r*   r4   r_   r@   rD   r  r   r   r   r   r   r        r  c                   @   r*  )	r  r   r   Nc                 C   r&  rk   r   r'  r   r   r   r4     r(  z$_OpOverloadPacketPickleData.__init__rS   c                 C   r+  )NzExpected OpOverloadPacket, got )r%  r   r=   r@   rD   rF   rN   r   r,  r   r   r   r     r-  z$_OpOverloadPacketPickleData.unpickle)
r'   r(   r)   r*   r4   r_   r@   rD   rF   r   r   r   r   r   r    r.  r  c                   @   s0   e Zd ZdeddfddZdedefddZdS )	r  r  r   Nc                 C   s   |  | _d S rk   )	serializecontents)r9   r  r   r   r   r4     r   z!_OpPrecompiledPickleData.__init__rS   c                    s8   t | j dd l}| dtdtf fdd}|S )Nr   r   r   c                     s    |  S rk   r   )r   precompiled_artifactr   r   wrapped  s   z2_OpPrecompiledPickleData.unpickle.<locals>.wrapped)r   deserializer0  	functoolswrapsr   )r9   rS   r5  r3  r   r1  r   r     s
   z!_OpPrecompiledPickleData.unpickle)r'   r(   r)   r   r4   r_   r6   r   r   r   r   r   r    r)  r  c                   @   s<   e Zd ZdZdZdededdfddZd	edefd
dZ	dS )r  z
    Supports pickling a set of standard/common functions
    These must be prefixed with the full namespace in order to properly
    be pickled (i.e `einops.rearrange` and not `from einops import rearrange`)
    )z	builtins.zmath.ztorch.z	operator.zeinops.r   r   r   Nc                 C   r   rk   )r   r   )r9   r   r   r   r   r   r4     r   z_OpFunctionPickleData.__init__rS   c                 C   s   | j dkrt| jS | j dkrdd l}| || jS | j dkr'| t| jS | j dkr7dd l}| || jS | j dkrGdd l}| || jS t	)Nbuiltinsmathr   r@   operatoreinops)
r   __builtins__r   r   r8  r#  r@   r9  r:  r   )r9   rS   r8  r9  r:  r   r   r   r     s   




z_OpFunctionPickleData.unpickle)
r'   r(   r)   r   r  r*   r4   r_   r6   r   r   r   r   r   r    s
    r  c                   @   sD   e Zd ZdejjdeddfddZdejjde	dejjfd	d
Z
dS )r   r   r/   r   Nc                 C   sJ   |j | _|j| _i }|jD ]
}t|||||< qt| | _|j| _d S rk   )	_tracer_cls
tracer_cls_tracer_extrastracer_extrasnodesr   r   values_codegen)r9   r   r/   r@  r   r   r   r   r4   '  s   
z_GraphPickleData.__init__r   rS   c                 C   sL   t j|| j| j}i }| jD ]}||||||< qt| dr$| j|_|S )NrB  )	r@   rA   r  r=  r?  r@  r   r   rB  )r9   r   rS   r   r@  ndr   r   r   r   :  s   

z_GraphPickleData.unpickle)r'   r(   r)   r@   rA   r  r$   r4   rB   r_   r   r   r   r   r   r   &  s    r   c                   @   sn   e Zd Zededejjdee	e
egejjf ee
ef f fddZdeddfdd	Zd
edefddZdS )rL   r[   r<   r   c                 C   r   rk   r   r   r   r   r   r?   I  s
   z'_TracingContextPickleData.reduce_helpercontextNc                 C   sL   |j | _ |j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _d S rk   )	module_contextframe_summary_stackloc_in_frameaot_graph_nameparams_flatparams_flat_unwrap_subclassesparams_unwrapped_to_flat_indexoutput_strides#force_unspec_int_unbacked_size_like)r9   rD  r   r   r   r4   X  s   z"_TracingContextPickleData.__init__rS   c                 C   sV   t |j}| j|_| j|_| j|_| j|_| j|_| j|_| j|_| j	|_	| j
|_
|S rk   )r   r^   rE  rF  rG  rH  rI  rJ  rK  rL  rM  )r9   rS   rD  r   r   r   r   n  s   
z"_TracingContextPickleData.unpickle)r'   r(   r)   r   r-   r@   rK   r   r   r   r
   r_   r5   r?   r4   r   r   r   r   r   rL   H  s    
rL   )Jr   r   rU   r   r   abcr   collections.abcr   typingr   r   r   r   r   typing_extensionsr	   r
   torch.utils._import_utilsr   r2   r@   torch.utils._pytreeutils_pytreer  torch._guardsr   "torch._inductor.standalone_compiler   torch._subclasses.fake_tensorr   r   r   torch._subclasses.meta_utilsr   r   r   torch.fx.experimental.sym_noder   %torch.fx.experimental.symbolic_shapesr   torch.utils._mode_utilsr   rI   SymFloatr   r*   r+   r   r#   	dataclassr$   Picklerr-   r_   r6   r5   	Unpicklerr`   rH   rJ   r>   rO   rC   r   rG   r  r  r  r  r  r   rL   r   r   r   r   <module>   s^    
  
"J1!0M#"