
    Wj                        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eZd dlZd dlmc 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Z1de/de0fdZ2e j3         G d d                      Z4 G d dej5                  Z6 G d d          Z7 ede8          Z9 G d dej:                  Z; G d d          Z< G d d           Z= G d! d"          Z> G d# d$          Z? G d% d&          Z@ G d' d(          ZA G d) d*          ZB G d+ d,eB          ZC G d- d.eB          ZD G d/ d0eB          ZE G d1 d2eB          ZF G d3 d4eB          ZG G d5 d6          ZH G d7 d8          ZIdS )9    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                 ,    |                      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   s    \/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/fx/_graph_pickler.py_ops_filter_safer   $   s     ??	
      keyc                 
    | 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_stack )r!   s    r   _node_metadata_key_filter_safer'   2   s    
 SSSr    c                   h    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)   :   sb          3CJ3%+./BBB& hxt'<=     r    r)   c                   d    e Zd ZdZddej        dee         ddf fdZe	de
deedef         eedf         f         fd	            Ze	de
dee         fd
            Zedde
dee         defd            Zededede
fd            Ze	 dddddde
dddedededee         fd            Z xZS )GraphPicklerzb
    GraphPickler is a Pickler which helps pickling fx graph - in particular
    GraphModule.
    Nfileoptionsr   c                 4   t           $t                                          |d           n!t                                          |           |pt                      | _        t          t                                | _        t          d          | _	        d S )NT)byrefF)	copy_data)
dillsuper__init__r)   r5   _UnpickleStateTokenobject_unpickle_stater   _meta_tensor_describer)selfr4   r5   	__class__s      r   r;   zGraphPickler.__init__K   s    GGT....GGT"""+'))  3688<< ':E&J&J&J###r    obj.c                 R   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                    rt                              | |          S t          |t          j                  rt                              | |          S t          |t          j        j                  rt$                              | |          S t          |t          j        j                  rt)          d          t*                              | |          x}r|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)r@   rB   reduces      r   reducer_overridezGraphPickler.reducer_override\   sa   , c:&& 	"$224===UX122 	")77cBBBej5uz7RSTT 	" ..tS999X&& 	"&44T3???U\** 	"%33D#>>>U]9:: 	",::4EEE #ux}-- L$%JKKK.<<T3GGGv  "!r    c                     || j         u rdS d S )Nunpickle_state)r>   )r@   rB   s     r   persistent_idzGraphPickler.persistent_id   s     $&&&##4r    c                     t          j                    5 } | ||          }|                    |           |                                cddd           S # 1 swxY w Y   dS )z#
        Pickle an object.
        N)ioBytesIOdumpgetvalue)clsrB   r5   streampicklers        r   dumpszGraphPickler.dumps   s    
 Z\\ 	%Vc&'**GLL??$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   5AAAdata	fake_modec                     t          |          }t          j        |           5 }t          ||          }|                                cddd           S # 1 swxY w Y   dS )z%
        Unpickle an object.
        N)_UnpickleStater^   r_   _GraphUnpicklerload)rf   rg   staterc   	unpicklers        r   loadszGraphPickler.loads   s    
 y))Z 	$'66I>>##	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   $AAAP   2   T)	max_depthmax_iter_itemsverbosezOptions | Nonerq   rr   rs   c          	      n   	
 pt                        t          j                              	t                      
dt          ddffddt
          dt          t                   f fddt
          dt          dt          dt          t                   f	
f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                 .    rt          |            d S d S N)print)ru   rs   s    r   logz%GraphPickler.debug_dumps.<locals>.log   s$     c




 r    oc                 h    	                      |            d S # t          $ r}|cY d }~S d }~ww xY wrw   )re   	Exception)rz   erb   r5   s     r   fail_excz*GraphPickler.debug_dumps.<locals>.fail_exc   sO    		!W%%%t   s    
1,11pathdepthc           	         |k    r) d|z   d| dt          |            d           |dz   S t          |           }|v rd S                     |           d|z  } | d| dt          |            d            |           }| | d           d S  | dt          |            d	|            t          | t                    r8|                                 D ]!\  }} || d
|d|dz             }|r|c S "|S t          | t          t          f          r3t          |           D ]!\  }	} || d
|	 d|dz             }|r|c S "|S t          | t          t          f          r3t          |           D ]!\  }	} || d
|	 d|dz             }|r|c S "|S t          | d          rt          |           j                            d          r	 t          t          j        t!          |           dz                       }
n# t"          $ r d }
Y nw xY w|
ct%          |
          k    r | d d            |
d          }
t          |
          D ]!\  }	} || d
|	 d|dz             }|r|c S "|S 	                     |           } | dt          |                      n)# t"          $ r} | d|            |cY d }~S d }~ww xY w|t(          urS|\  }} | dt%          |                      t          |          D ]!\  }	} || d|	 d|dz             }|r|c S "t+          j        |           rnt+          j        |           D ]W}	 t1          | |j                  }n# t"          $ r | d|j         cY c S w xY w || d|j         |dz             }|r|c S X|S t1          | dd           }t5          |          rl	  |            } | dt          |                      n,# t"          $ r} | d|            |dz   cY d }~S d }~ww xY w ||dz   |dz             }|r|S t          | d          rDt7          |                                           D ] \  }} || d| |dz             }|r|c S !|S t          | d          rE| j        D ];}t          | |          r) t1          | |          | d| |dz             }|r|c S <|S d }	 t          | d          r=|                     t<          j                  } | dt          |                      nAt          | d          r1|                                  } | dt          |                      n)# t"          $ r} | d |            |cY d }~S d }~ww xY wt          |t                    r4t          |          D ]$\  }	}| || d!|	 d|dz             }|r|c S %|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addrD   dictitemslisttuple	enumerateset	frozensethasattrr,   endswith	itertoolsisliceiterr|   lenrY   rW   dataclassesis_dataclassfieldsgetattrr   callablevarsr   r   pickleHIGHEST_PROTOCOLr   ) rz   r   r   r!   indentr}   kvbadiprefixrede2_argsafgetstaterl   e3r   slotreduce_tuplee4partr~   ry   rq   rr   rd   visitedwalks                             r   r   z&GraphPickler.debug_dumps.<locals>.walk   s   y  te|FFDFFDGGFFFGGG...Q%%Cg~~tKKE\FC666D66DGG666777Ayv555666tC699a99a99::: !T"" GGII # #DAq$qT"2"2A"2"2"2EAI>>C #"


#!dE]++ %aLL # #DAq$qT..A...%!)<<C #"


#!c9-.. %aLL # #DAq$qT..A...%!)<<C #"


# q*%%  $q''*:*C*CJ*O*O  "!)"2477NQ<N"O"OPPFF  " " "!FFF"%6{{^33% D D. D D3AD D   "(!8 )& 1 1 ' '1"d1nnnnneai@@ '#&JJJ'K..q11v>>499>>????   vBBbBBCCC .((4vDDTDDEEE%dOO # #DAq$qT"<"<"<"<"<eaiHHC #"


# '** 	$+A.. # #A2#Aqv..$ 2 2 2"&1111111112$qT"4"4AF"4"4eai@@C #"


# q.$77H!! 	4$HJJEC6@@4;;@@AAAA  4 4 4C6AARAABBB"333333334 d5$):":EAIFF Jq*%% #Aww}} # #GD!$qT"2"2D"2"2EAI>>C #"


#q+&& K ' 'Dq$'' '"d71d#3#35E5Et5E5EuqyQQ '#&JJJ  L	1o.. G#$??63J#K#KLC6HHD4F4FHHIIIIQ-- G#$<<>>LC6EEl1C1CEEFFF   v@@B@@AAA ,.. #(66 # #GAt| $t%>%>!%>%>%>	JJC #"


# Ks   !2H H#"H#2J? ?
K%	K K% K%/NN N ''P 
P8P3-P83P8>BV 
V3V.(V3.V3rootr   )	r)   r^   r_   r   r/   r   r   BaseExceptionint)rb   rB   r5   rq   rr   rs   r   r~   ry   rd   r   r   s   ` ```` @@@@@r   debug_dumpszGraphPickler.debug_dumps   s%   < &WYY#bjllG,,EE	S 	T 	 	 	 	 	 		 	 7 	 	 	 	 	 	 	I	C I	s I	3 I	8C= I	 I	 I	 I	 I	 I	 I	 I	 I	 I	 I	 I	V d3""
r    rw   )r,   r-   r.   __doc__r^   r_   r   r)   r;   r
   r=   r   r   r   rY   r/   r\   classmethodbytesre   staticmethodr   rn   r   r0   r   __classcell__rA   s   @r   r3   r3   E   s        
K KRZ K(72C Kt K K K K K K" )")"	xS!5c?2	3)" )" )" X)"V  HSM    X % % %'): %e % % % [% $E $n $ $ $ $ \$  %)y
  y y yy "y
 y y y 
#y y y [y y y y yr    r3   c                       e Zd ZdeddfdZdS )ri   rg   r   Nc                 :    || _         t                      | _        d S rw   )rg   r   meta_converter)r@   rg   s     r   r;   z_UnpickleState.__init__c  s    "9Fr    )r,   r-   r.   r   r;   r&   r    r   ri   ri   b  s>        I. IT I I I I I Ir    ri   r<   c                   V     e Zd Zdej        deddf fdZededefd            Z	 xZ
S )rj   rc   r[   r   Nc                 X    t                                          |           || _        d S rw   )r:   r;   r>   )r@   rc   r[   rA   s      r   r;   z_GraphUnpickler.__init__o  s)       -r    pidc                 D    |dk    r| j         S t          j        d          )Nr[   zInvalid persistent ID)r>   r   UnpicklingError)r@   r   s     r   persistent_loadz_GraphUnpickler.persistent_loads  s+     """''()@AAAr    )r,   r-   r.   r^   r_   ri   r;   r
   r=   r   r   r   s   @r   rj   rj   n  s        .rz .> .d . . . . . . B6 Bf B B B XB B B B Br    rj   c                       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            Zde	ddfdZd	ede	fd
ZdS )rO   rf   rd   rB   r   c                 4    | j          | |          |j        ffS rw   unpickler>   rb   rd   rB   s      r   rF   z!_ShapeEnvPickleData.reduce_helper  s!     |cc#hh(?@@@r    envNc                     |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_enabledrU   r   copyrf   )r@   r   s     r   r;   z_ShapeEnvPickleData.__init__  sO     . 	Y !WXXXL%%''	Io&I)***r    r[   c                     |j         st          d          |j         j        st          d          | j                                        D ] \  }}t          |j         j        ||           !|j         j        S )Nz#unpickle_state.fake_mode is not setz-unpickle_state.fake_mode.shape_env is not set)rg   rU   	shape_envrf   r   setattr)r@   r[   r   r   s       r   r   z_ShapeEnvPickleData.unpickle  s    ' 	H !FGGG'1 	R !PQQQIOO%% 	> 	>DAqN,61===='11r    )r,   r-   r.   r   r/   r=   r1   r   r3   r   r   r   r   ri   r<   rF   r;   r   r&   r    r   rO   rO   |  s         
sF{
A"A)1A	$'12E$@S:S4TT
A A A [A+H + + + + +
2~ 
2( 
2 
2 
2 
2 
2 
2r    rO   c                       e Zd Zedededeeee	gef         eee
f         f         fd            ZdeddfdZdefdZd	e	dej        fd
ZdS )rQ   rd   rB   r   c                      | |j                   |j        f}t          |t          j                  rt
          j        |fS t          dt          |                     )NzUnhandled SymNode type )	noder>   rD   rG   rP   rQ   unpickle_sym_intNotImplementedErrorr   )rb   rd   rB   r   s       r   rF   z _SymNodePickleData.reduce_helper  s[     CHw67c5<(( 	M%6<<%&KS		&K&KLLLr    r   Nc                 f    |j         | _        |j        | _        |j        | _        |j        | _        d S rw   )_exprexprr   pytype_hinthint)r@   r   s     r   r;   z_SymNodePickleData.__init__  s*    J	kJ			r    c                 z    | j         t          d          t          | j        | j         | j        | j                  S )Nzshape_env is None)r   rU   r   r   r   r   )r@   s    r   _to_sym_nodez_SymNodePickleData._to_sym_node  s5    >! !4555ty$.$+tyIIIr    r[   c                 N    t          j        |                                           S rw   )rG   rP   r   r@   r[   s     r   r   z#_SymNodePickleData.unpickle_sym_int  s    |D--//000r    )r,   r-   r.   r   r3   r   r   r   r   ri   r<   rF   r   r;   r   rG   rP   r   r&   r    r   rQ   rQ     s        MM M 
$'23U4AT;T5UU
	M M M [MW     Jg J J J J
1~ 1%, 1 1 1 1 1 1r    rQ   c                       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            Zdededdfd	Zd
edefdZdS )rE   metadatard   rB   r   c                 @    | j          | |j        |          |j        ffS rw   )r   r?   r>   r   s      r   rF   z_TensorPickleData.reduce_helper  s0     |C.44#
 
 	
r    	describertNc           
         |                     |          }|j        rMt          |j        t          j        j        j                  s$t          dt          |j                             t          j
        |d           | _        t          j        D ]D}|dv rt          | j        |          (t          d| dt          | j        |                     Ed S )Nz3view_func must be None or _FakeTensorViewFunc, got rg   )rg   	view_funcz
not None: z: )describe_tensorr   rD   rG   _subclasses
meta_utils_FakeTensorViewFuncrU   r   r   replacer   r   _UNSERIALIZABLEr   )r@   r   r   r   r   s        r   r;   z_TensorPickleData.__init__  s   
 ,,Q//  	j 1 < P'
 '
 	 !.*++. .   $+HEEE  / 	T 	TA...t}a((4$%R!%R%Rwt}a7P7P%R%RSSS 5	T 	Tr    r[   c                    t          j        | j        j                  }|j        r=|j        6t          j        |j        j                  }t          j        ||          }dt          g t          j        f         dt          t          j
        t          f         dt          ffd}j                            |j        j        |d d           S )Nr   )basemake_meta_tdevicer   c                     t                      5  t          j         |             |          cd d d            S # 1 swxY w Y   d S rw   )r   r   rg   )r   r   r[   s     r   	with_fakez-_TensorPickleData.unpickle.<locals>.with_fake  s       !",KMM	                  s   ;??)r   r   r   rg   is_viewr   r   rG   r   r	   r   r/   r   r   meta_tensorr   )r@   r[   r   new_baser   s    `   r   r   z_TensorPickleData.unpickle  s    &M$.
 
 
  	D 9"*(2  H #*8(CCCH		!"el"23		=B5<QTCT=U				 		 		 		 		 		 ,88$.
 
 	
r    )r,   r-   r.   r   r   r1   r   r3   r   r   r   ri   r<   rF   r   r   r;   r   r&   r    r   rE   rE     s         Z((((
"
)3
	$'34eDBU<U6VV

 
 
 [
T"5 T& TT T T T T2 
~  
*  
  
  
  
  
  
r    rE   c                       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            ZdededdfdZd	e
ded
ef         fdZededee	         fd            ZdS )rV   rd   rB   r   c                 T    |                      |          x}r| j        ||j        ffS d S rw   )from_objectr   r>   )rb   rd   rB   rf   s       r   rF   z#_TorchNumpyPickleData.reduce_helper  s7     ??3'''4 	L4)@"ABB4r    modr   Nc                 "    || _         || _        d S rw   )r  r   )r@   r  r   s      r   r;   z_TorchNumpyPickleData.__init__  s    			r    r[   .c                     t          t          j        | j                  | j                  }t
          j        j        j        	                                |         S rw   )
r   	importlibimport_moduler  r   rG   _dynamo	variablesmiscget_np_to_tnp_map)r@   r[   nps      r   r   z_TorchNumpyPickleData.unpickle  s?    Y,TX66	BB}&+==??CCr    tnpc                    t          |          sd S t          j        j        j                                        }	 |                    |          x}sd S n# t          $ r Y d S w xY wt          |dd           x}sd}t          |dd           x}sd S |t          t          j
        |          |          k    rt          d| d|            | ||          S )Nr-   numpyr,   zNumpy object mismatch for r   )r   rG   r	  r
  r  get_tnp_to_np_mapget	TypeErrorr   r  r  rU   )rb   r  	tnp_to_npr  r  r   s         r   r  z!_TorchNumpyPickleData.from_object  s   }} 	4M+0BBDD		#--,,,B t 	 	 	44	 r<666 	CJ555 	4 055t<<<< 9S99499   s3~~s   A 
A#"A#)r,   r-   r.   r   r3   r=   r   r   r   r   ri   r<   rF   r/   r;   r   r  r&   r    r   rV   rV     s       
"
)/
	dN+V34eDBU<U6VV	


 
 
 [
C s t    D~ D(3;:O D D D D f $    [  r    rV   c                       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            Zdej        j        deddfdZd	edej        j        fd
ZdS )rJ   rd   rB   r   c                 @    | j          | ||j                  |j        ffS rw   )r   r5   r>   r   s      r   rF   z$_GraphModulePickleData.reduce_helper9  s/     |CW_%%#
 
 	
r    gmr5   Nc                 t   t          |t          j        j        j                  r|                                }n|                                }t          |d          r|                                | _	        n|j
                                        | _	        | j	        d= t          |j        |          | _        d S )Nr   _graph)rD   rG   rH   _lazy_graph_module_LazyGraphModule_real_recompile	recompiler   r   gm_dictr   r   _GraphPickleDatar  graph)r@   r  r5   _python_codes       r   r;   z_GraphModulePickleData.__init__E  s    b%(5FGG 	*--//LL<<>>L2~&& 	.??,,DLL;++--DLL"%bi99


r    r[   c                     t           j        j                            t           j        j                  }| j        |_        | j                            ||          |_        |S rw   )	rG   rH   rI   __new__r  r   r   r   r  )r@   r[   r  s      r   r   z_GraphModulePickleData.unpickleR  sF    X!))%(*>??lJ''N;;		r    )r,   r-   r.   r   r3   rG   rH   rI   r   r   r   ri   r<   rF   r)   r;   r   r&   r    r   rJ   rJ   8  s        	
"	
).)=	
	$')==>d''(	*
	
 	
 	
 [	
:58/ :' :d : : : :~ %(:N      r    rJ   c                       e Zd Zdej        j        deej        j        d f         deddfdZdej        j	        ded ej        j        f         de
dej        j        fd	ZdS )
_NodePickleDatar   mappingr5   r   Nc                    t          j        t          j        j        fd|j                  | _        t          j        t          j        j        fd|j                  | _        |j        | _        |j        | _        t          
                    |j                  | _        |j        | _        fd|j                                        D             | _        d S )Nc                     |          S rw   r&   nr&  s    r   <lambda>z*_NodePickleData.__init__.<locals>.<lambda>`  s    '!* r    c                     |          S rw   r&   r)  s    r   r+  z*_NodePickleData.__init__.<locals>.<lambda>b  s    WQZ r    c                 T    i | ]$\  }}j         r                     |          !||%S r&   )r+   ).0r   r   r5   s      r   
<dictcomp>z,_NodePickleData.__init__.<locals>.<dictcomp>n  sP     
 
 
14	

 33A66
q
 
 
r    )pytreetree_map_onlyrG   rH   rT   r   kwargsr   oprN   r   targetr   metar   )r@   r   r&  r5   s     ``r   r;   z_NodePickleData.__init__Z  s     (8L8L8L8LdiXX	*HM////
 
 I	'#**4;@@ I	
 
 
 
	))
 
 
			r    r   r[   c                    t          j        t          fd| j                  }t          j        t          fd| j                  }| j                            |          }t          |          s4t          |t                    st          dt          |                     |                    | j        |||| j        | j                  }| j        |_        |S )Nc                     |          S rw   r&   r)  s    r   r+  z*_NodePickleData.unpickle.<locals>.<lambda>}  s    wqz r    c                     |          S rw   r&   r)  s    r   r+  z*_NodePickleData.unpickle.<locals>.<lambda>  s    wqz r    z$target must be callable or str, got )r0  r1  r%  r   r2  r4  r   r   rD   r/   rU   r   create_noder3  r   r5  )r@   r   r&  r[   r   r2  r4  r   s     `     r   r   z_NodePickleData.unpicklew  s     #O5I5I5I5I49UU%11114;
 
 %%n55   	XJvs$;$; 	X !VV!V!VWWW  &$	49UUI	r    )r,   r-   r.   rG   rH   rT   r   r)   r;   Graphri   r   r&   r    r   r%  r%  Y  s        
hm
 ehm%667
 	

 

 
 
 
:x~ '67 '	
 
     r    r%  c            
       8   e Zd Zedededeeegef         ee	         f         fd            Z
edededd fd            Zededeed	         ed
         f         dedd fd            Zededefd            Zededefd            Zedededefd            ZdS )rN   rd   r3  r   c                 V    |                      ||j                  }|j        |j        ffS rw   )r   r5   r   r>   )rb   rd   r3  results       r   rF   z_OpPickleData.reduce_helper  s,     B00'"9!;<<r    r5   c                 r   t          |t                    rt          |          S t          t          |dd           t                    rit          |d          st          d          |j        }t          |t                    st          dt          |                     t          |          S t          j        j                            |          }t          |t          j        j                  r|                     |t"          |          S t          |t          j        j                  r|                     |t&          |          S |                    t*          j                  r)|                    dd          \  }}t+          ||          S t1          dt          |           d| d|           )N__wrapped__z op missing __wrapped__ attributez"Expected AOTCompiledArtifact, got r   r   zTARGET:  )rD   r/   _OpStrPickleDatar   r   r   rU   r?  r   _OpPrecompiledPickleDatarG   rH   rT   _pretty_print_targetrK   
OpOverload
_pickle_op_OpOverloadPickleDatarM   _OpOverloadPacketPickleDatar   _OpFunctionPickleDataSUPPORTED_ROOTSsplitr   )rb   r3  r5   artifactr   r   details          r   r   z_OpPickleData.pickle  s   b# 	(#B'''gb-668KLL 	62}-- I$%GHHH~Hh(;<< $IhII   ,H555x}11"55b%*/00 		I>>$(=wGGGEJ788 	I>>$(CWMMM__2BCC 	I::c1--LD&(v666 &&Gb&G&GB&G&G&G&GHHHr    r   dataclsrF  rG  c                 h    |j         x}r ||           sddlm}  |d|             ||           S )Nr   )BypassFxGraphCachez"Unable to pickle non-standard op: )r*   torch._inductor.codecacherO  )r   rM  r5   r*   rO  s        r   rE  z_OpPickleData._pickle_op  sa     ",,J 	Rjj6F6F 	RDDDDDD$$%P$%P%PQQQwt}}r    r[   c                     d S rw   r&   r   s     r   r   z_OpPickleData.unpickle  s    r    c                     d|v rC|                     dd          \  }}t                      |         }|                     ||          S t                      |         S )zC
        Like `globals()[name]` but supports dotted names.
        r   r   )rJ  globals_getattr_by_name)rb   r   r  restr   s        r   _lookup_global_by_namez$_OpPickleData._lookup_global_by_name  sU    
 $;;

3**IC99S>D''d33399T?"r    r   c                     d|v r-|                     dd          \  }}t          | |          } d|v -t          | |          S )zG
        Like `getattr(root, name)` but supports dotted names.
        r   r   )rJ  r   )r   r   r  s      r   rT  z_OpPickleData._getattr_by_name  sP    
 Tkk

3**IC4%%D Tkk tT"""r    N)r,   r-   r.   r   r3   r=   r   r   ri   r<   rF   r)   r   r   r/   r	   r   rE  r   r   rV  rT  r&   r    r   rN   rN     s       ="=(.=	x(&0159L3MM	N= = = [= I I I_ I I I [I6 ()40M+NN

  
   \ ~ &    ^ 	## 	#& 	# 	# 	# [	# #v #S #V # # # \# # #r    rN   c                   .    e Zd ZdeddfdZdedefdZdS )rA  r   r   Nc                     || _         d S rw   r   r@   r   s     r   r;   z_OpStrPickleData.__init__      			r    r[   c                     | j         S rw   r   r   s     r   r   z_OpStrPickleData.unpickle  s
    yr    )r,   r-   r.   r/   r;   ri   r   r&   r    r   rA  rA    sX        S T    ~ #      r    rA  c                   B    e Zd ZdeddfdZdedej        j        fdZ	dS )rF  r   r   Nc                     || _         d S rw   r   rZ  s     r   r;   z_OpOverloadPickleData.__init__  r[  r    r[   c                     |                      | j                  }t          |t          j        j                  st          dt          |                     |S )NzExpected OpOverload, got )rV  r   rD   rG   rK   rD  rU   r   r@   r[   rB   s      r   r   z_OpOverloadPickleData.unpickle  sQ    ))$)44#uz455 	J !HT#YY!H!HIII
r    )
r,   r-   r.   r/   r;   ri   rG   rK   rD  r   r&   r    r   rF  rF    s]        S T    ~ %*:O      r    rF  c                   B    e Zd ZdeddfdZdedej        j        fdZ	dS )rG  r   r   Nc                     || _         d S rw   r   rZ  s     r   r;   z$_OpOverloadPacketPickleData.__init__  r[  r    r[   c                     |                      | j                  }t          |t          j        j                  st          dt          |                     |S )NzExpected OpOverloadPacket, got )rV  r   rD   rG   rK   rM   rU   r   r`  s      r   r   z$_OpOverloadPacketPickleData.unpickle  sQ    ))$)44#uz:;; 	P !N499!N!NOOO
r    )
r,   r-   r.   r/   r;   ri   rG   rK   rM   r   r&   r    r   rG  rG    s]        S T    ~ %*:U      r    rG  c                   .    e Zd ZdeddfdZdedefdZdS )rB  rK  r   Nc                 8    |                                 | _        d S rw   )	serializecontents)r@   rK  s     r   r;   z!_OpPrecompiledPickleData.__init__  s     **,,r    r[   c                     t          j        | j                  dd l}|                              dt
          dt
          ffd            }|S )Nr   r   r   c                       |  S rw   r&   )r   precompiled_artifacts    r   wrappedz2_OpPrecompiledPickleData.unpickle.<locals>.wrapped  s    ''..r    )r   deserializerg  	functoolswrapsr   )r@   r[   rm  rk  rj  s       @r   r   z!_OpPrecompiledPickleData.unpickle  sm    2>t}MM	-	.	.	/3 	/3 	/ 	/ 	/ 	/ 	/ 
/	.	/ r    )r,   r-   r.   r   r;   ri   r=   r   r&   r    r   rB  rB    sY        -!4 - - - - -~ &      r    rB  c                   :    e Zd ZdZdZdededdfdZdedefd	Z	dS )
rH  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                 "    || _         || _        d S rw   )r   r   )r@   r   r   s      r   r;   z_OpFunctionPickleData.__init__  s    				r    r[   c                    | 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    rdd l}|                     || j                  S | j         dk    rdd l}|                     || j                  S t          )Nbuiltinsmathr   rG   operatoreinops)
r   __builtins__r  r   rs  rT  rG   rt  ru  r   )r@   r[   rs  rt  ru  s        r   r   z_OpFunctionPickleData.unpickle  s    9
""##DI...Y&  KKK((ty999Y'!!((	:::Y*$$OOO((49===Y(""MMM((;;;%%r    )
r,   r-   r.   r   rI  r/   r;   ri   r=   r   r&   r    r   rH  rH    sq          OOS      &~ && & & & & & &r    rH  c                   r    e Zd Zdej        j        deddfdZdej        j        de	dej        j        fdZ
dS )	r  r   r5   r   Nc                     |j         | _        |j        | _        i }|j        D ]}t          |||          ||<   t          |                                          | _        |j        | _        d S rw   )	_tracer_cls
tracer_cls_tracer_extrastracer_extrasnodesr%  r   values_codegen)r@   r   r5   r}  r   s        r   r;   z_GraphPickleData.__init__'  sj    +"168K 	@ 	@D)$w??E$KK5<<>>**
r    r  r[   c                     t           j                            || j        | j                  }i }| j        D ]}|                    |||          ||<   t          | d          r| j        |_        |S )Nr  )	rG   rH   r:  rz  r|  r}  r   r   r  )r@   r  r[   r   r}  nds         r   r   z_GraphPickleData.unpickle:  ss     r4?D4FGG68* 	B 	BBE5.AAE"II4$$ 	+!]ENr    )r,   r-   r.   rG   rH   r:  r)   r;   rI   ri   r   r&   r    r   r  r  &  sv        'ehn 'w '4 ' ' ' '&(&8F	     r    r  c                       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            ZdeddfdZdedefd	ZdS )
rS   rd   rB   r   c                 4    | j          | |          |j        ffS rw   r   r   s      r   rF   z'_TracingContextPickleData.reduce_helperI  s)     LC'
 	
r    contextNc                     |j         | _         |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        d S rw   )	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)r@   r  s     r   r;   z"_TracingContextPickleData.__init__X  sn    %4#*#> #0%4".-4-R*.5.T+%47 	000r    r[   c                    t          |j                  }| j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j	        |_	        | j
        |_
        |S rw   )r   rg   r  r  r  r  r  r  r  r  r  )r@   r[   r  s      r   r   z"_TracingContextPickleData.unpicklen  s     !9::!%!4&*&>##0!%!4".040R-151T.!%!44 	3 r    )r,   r-   r.   r   r3   rG   rR   r   r   r   r   ri   r<   rF   r;   r   r&   r    r   rS   rS   H  s        
"
).)E
	$')EEFd''(	*

 
 
 [

 
4 
 
 
 
,~ .      r    rS   )Jr   r  r^   r   r   abcr   collections.abcr   typingr   r   r   r   r	   typing_extensionsr
   r   torch.utils._import_utilsr   r9   rG   torch.utils._pytreeutils_pytreer0  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   rP   SymFloatr   r/   r0   r   r'   	dataclassr)   Picklerr3   ri   r=   r<   	Unpicklerrj   rO   rQ   rE   rV   rJ   r%  rN   rA  rF  rG  rB  rH  r  rS   r&   r    r   <module>r     sA           				            $ $ $ $ $ $ 9 9 9 9 9 9 9 9 9 9 9 9 9 9 , , , , , , , , 1 1 1 1 1 1 {}}F  $ $ $ $ $ $ $ $ $ ( ( ( ( ( ( B B B B B B L L L L L L L L L L         
 3 2 2 2 2 2 : : : : : : / / / / / / GKu~>>	3 4    T T T T T T        Z Z Z Z Z6> Z Z ZzI I I I I I I I g3V<< B B B B Bf& B B B2 2 2 2 2 2 2 2D1 1 1 1 1 1 1 1>G
 G
 G
 G
 G
 G
 G
 G
T. . . . . . . .b       B- - - - - - - -`J# J# J# J# J# J# J# J#Z    }       M       -       }    &  &  &  &  &M  &  &  &F       D3 3 3 3 3 3 3 3 3 3r    