
    Bj                     "   d dl Z d dlZ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
mZ d dl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  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j0                  Z1de2de3fdZ4de2de3fdZ5ej6         G d d                      Z7d?dZ8de9dej:        e9         fdZ;de
g df         fdZ<e j=        ded         fd            Z> G d dej?                  Z@ G d d          ZA ed e9          ZB G d! d"ejC                  ZD G d# d$          ZE G d% d&          ZF G d' d(          ZG G d) d*          ZH G d+ d,          ZI G d- d.          ZJ G d/ d0          ZK G d1 d2eK          ZL G d3 d4eK          ZM G d5 d6eK          ZN G d7 d8eK          ZO G d9 d:eK          ZP G d; d<          ZQ G d= d>          ZRdS )@    N)abstractmethod)Callable	Generator)AnyNewTypeTypeVar)overrideSelf)import_dill)TracingContext)AOTCompiledArtifact)FakeScriptObject)
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    Z/var/www/html/Carbon-Document/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'   5   s    
 SSSr    c                   j    e Zd ZU eZeegef         dz  ed<   e	Z
eegef         dz  ed<   dZeed<   dS )OptionsN
ops_filternode_metadata_key_filterFignore_raw_node)__name__
__module____qualname__r   r*   r   strbool__annotations__r'   r+   r,   r&   r    r   r)   r)   =   sp          0@J#%,???& hud{3d:   
 "OT!!!!!r    r)   c                      d S Nr&   r&   r    r   _unpickle_as_noner5   J   s    4r    referentc                 *    t          j        |           S r4   )weakrefref)r6   s    r   _unpickle_as_weakrefr:   N   s    ;x   r    c                      d S )Nc                      d S r4   r&   r&   r    r   <lambda>z+_unpickle_as_dead_weakref.<locals>.<lambda>S   s    4 r    r&   r&   r    r   _unpickle_as_dead_weakrefr>   R   s
    <r    c               #      K   t           t          j        v rd V  d S t          j        t           d d            	 d V  t          j        t                      d S # t          j        t                      w xY w)Nc                 .    | j         | j        | j        gd fS r4   )startstopstep)xs    r   r=   z-patch_pytree_map_over_slice.<locals>.<lambda>]   s    17AFAF3T: r    c                     t          |  S r4   )slice)rD   cs     r   r=   z-patch_pytree_map_over_slice.<locals>.<lambda>]   s    PQ r    )rF   pytreeSUPPORTED_NODES_private_register_pytree_node_deregister_pytree_noder&   r    r   patch_pytree_map_over_slicerL   V   s      &&&
(::<R<R  .&u-----&u----s   A A4c                   L    e Zd ZdZddej        dedz  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dz  fd
            Zedde	dedz  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dz  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)   rP   _UnpickleStateTokenobject_unpickle_stater   _meta_tensor_describer)selfrO   rP   	__class__s      r   rV   zGraphPickler.__init__m   s    GGT....GGT"""+'))  3688<< ':E&J&J&J###r    obj.c                    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&                    rKddlm} t,                              |d          }| |t1          |                    rt2          S t4          dfS t          |t6          j                  r |            }|
t:          |ffS t<          dfS t          |t          j        j                  r$| j         j!        r	t4          dfS tE          d          tF                              | |          x}r|S t2          S )Nr   )is_opaque_value_typereal_objr&   z#Unexpected raw Node during pickling)$
isinstancer   _TensorPickleDatareduce_helpertorchfxGraphModule_GraphModulePickleData_opsOperatorBaseOpOverloadPacket_OpPickleDatar   _ShapeEnvPickleDataSymInt_SymNodePickleData_guardsr   _TracingContextPickleDatar   torch._library.opaque_objectr_   rX   __getattribute__typeNotImplementedr5   r8   r9   r:   r>   NoderP   r,   AssertionError_TorchNumpyPickleData)r[   r]   r_   r`   r6   reduces         r   reducer_overridezGraphPickler.reducer_override~   s    , 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-.. 	"IIIIII..sJ??H#(<(<T(^^(L(L#%%%r**W[)) 	" suuH#,xk::1266 #ux}-- L</ 3-r22$%JKKK.<<T3GGGv  "!r    c                     || j         u rdS d S )Nunpickle_state)rY   )r[   r]   s     r   persistent_idzGraphPickler.persistent_id   s     $&&&##4r    c                 ,   t                      5  t          j                    5 } | ||          }|                    |           |                                cddd           cddd           S # 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z#
        Pickle an object.
        N)rL   ioBytesIOdumpgetvalue)clsr]   rP   streampicklers        r   dumpszGraphPickler.dumps   s)   
 )** 	% 	%BJLL 	%Fc&'**GLL??$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s4   B	5A1B	1A5	5B	8A5	9B		BBdata	fake_modec                    ddl m} t                      5   |d          5  t          |          }t	          j        |           5 }t          ||          }|                                cddd           cddd           cddd           S # 1 swxY w Y   	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z%
        Unpickle an object.
        r   )dynamo_timedzGraphPickler.loadsN)torch._dynamo.utilsr   rL   _UnpickleStater~   r   _GraphUnpicklerload)r   r   r   stater   	unpicklers         r   loadszGraphPickler.loads   s   
 	544444(** 	( 	(LL9M,N,N 	( 	("9--ED!! (V+FE::	 ~~''( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s^   B>$B&$B)B&5B>BB&BB&B>&B*	*B>-B*	.B>>CCP   2   T)	max_depthmax_iter_itemsverbosezOptions | Noner   r   r   c          	      N   	
 pt                        t          j                              	t                      
dt          ddffddt
          dt          dz  f fddt
          dt          dt          dt          dz  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 r4   )print)r   r   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r4   )r   	Exception)r   er   rP   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__[)!rs   idaddra   dictitemslisttuple	enumerateset	frozensethasattrr-   endswith	itertoolsisliceiterr   lenry   rt   dataclassesis_dataclassfieldsgetattrr   callablevarsr   r   pickleHIGHEST_PROTOCOLr   ) r   r   r   r!   indentr   kvbadiprefixrede2_argsafgetstater   e3r   slotreduce_tuplee4partr   r   r   r   r   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   r0   r   BaseExceptionint)r   r]   rP   r   r   r   r   r   r   r   r   r   s   ` ```` @@@@@r   debug_dumpszGraphPickler.debug_dumps   s%   < &WYY#bjllG,,EE	S 	T 	 	 	 	 	 		 	 4 	 	 	 	 	 	 	I	C I	s I	3 I	3: I	 I	 I	 I	 I	 I	 I	 I	 I	 I	 I	 I	V d3""
r    r4   )r-   r.   r/   __doc__r~   r   r)   rV   r	   rX   r   r   r   ry   r0   r|   classmethodbytesr   staticmethodr   r   r   r1   r   __classcell__r\   s   @r   rN   rN   g   s        
K KRZ K'D. KD K K K K K K" ="="	xS!5c?2	3=" =" =" X="~  C$J    X % % %4 %5 % % % [% 
(E 
(n 
( 
( 
( 
( \
(  %)y
  y y yy "y
 y y y 
ty y y [y y y y yr    rN   c                       e Zd ZdeddfdZdS )r   r   r   Nc                 :    || _         t                      | _        d S r4   )r   r   meta_converter)r[   r   s     r   rV   z_UnpickleState.__init__  s    "9Fr    )r-   r.   r/   r   rV   r&   r    r   r   r     s>        I. IT I I I I I Ir    r   rW   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 )r   r   r{   r   Nc                 X    t                                          |           || _        d S r4   )rU   rV   rY   )r[   r   r{   r\   s      r   rV   z_GraphUnpickler.__init__  s)       -r    pidc                 D    |dk    r| j         S t          j        d          )Nr{   zInvalid persistent ID)rY   r   UnpicklingError)r[   r   s     r   persistent_loadz_GraphUnpickler.persistent_load  s+     """''()@AAAr    )r-   r.   r/   r~   r   r   rV   r	   rX   r   r   r   s   @r   r   r     s        .rz .> .d . . . . . . B6 Bf B B B XB B B B Br    r   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 )rl   r   r   r]   r   c                 4    | j          | |          |j        ffS r4   unpicklerY   r   r   r]   s      r   rc   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_enabledrv   r   copyr   )r[   r   s     r   rV   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)r   rv   	shape_envr   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   r0   rX   r2   r   rN   r   r   r   r
   r   rW   rc   rV   r   r&   r    r   rl   rl     s         
sF{
A"A)1A	$'12E$@S:S4TT
A A A [A+H + + + + +
2~ 
2( 
2 
2 
2 
2 
2 
2r    rl   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 )rn   r   r]   r   c                      | |j                   |j        f}t          |t          j                  rt
          j        |fS t          dt          |                     )NzUnhandled SymNode type )	noderY   ra   rd   rm   rn   unpickle_sym_intNotImplementedErrorrs   )r   r   r]   r   s       r   rc   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 r4   )_exprexprr   pytype_hinthint)r[   r   s     r   rV   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   rv   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 r4   )rd   rm   r  r[   r{   s     r   r   z#_SymNodePickleData.unpickle_sym_int  s    |D--//000r    )r-   r.   r/   r   rN   r   r   r   r
   r   rW   rc   r   rV   r  rd   rm   r   r&   r    r   rn   rn     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    rn   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 )rb   metadatar   r]   r   c                 @    | j          | |j        |          |j        ffS r4   )r   rZ   rY   r   s      r   rc   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 r   )r   	view_funcz
not None: z: )describe_tensorr  ra   rd   _subclasses
meta_utils_FakeTensorViewFuncrv   rs   r   replacer  r   _UNSERIALIZABLEr   )r[   r  r  r  r   s        r   rV   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          j	        t          z  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 r4   )r   r   r   )r  r  r{   s     r   	with_fakez-_TensorPickleData.unpickle.<locals>.with_fake,  s       !",KMM	                  s   ;??)r   r  r  r   is_viewr  r   rd   r   r  r0   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		=B\C=O				 		 		 		 		 		 ,88$.
 
 	
r    )r-   r.   r/   r   r   r2   r   rN   r   r   r
   r   rW   rc   r   r   rV   r   r&   r    r   rb   rb     s         Z((((
"
)3
	$'34eDBU<U6VV

 
 
 [
T"5 T& TT T T T T2 
~  
*  
  
  
  
  
  
r    rb   c                       e Zd Zedededeeee	gef         eee
f         f         dz  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dz  fd            ZdS )rw   r   r]   r   Nc                 T    |                      |          x}r| j        ||j        ffS d S r4   )from_objectr   rY   )r   r   r]   r   s       r   rc   z#_TorchNumpyPickleData.reduce_helperA  s7     ??3'''4 	L4)@"ABB4r    modr   c                 "    || _         || _        d S r4   )r$  r   )r[   r$  r   s      r   rV   z_TorchNumpyPickleData.__init__O  s    			r    r{   .c                     t          t          j        | j                  | j                  }t
          j        j        j        	                                |         S r4   )
r   	importlibimport_moduler$  r   rd   _dynamo	variablesmiscget_np_to_tnp_map)r[   r{   nps      r   r   z_TorchNumpyPickleData.unpickleS  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   rd   r)  r*  r+  get_tnp_to_np_mapget	TypeErrorr   r'  r(  rv   )r   r.  	tnp_to_npr-  r$  r   s         r   r#  z!_TorchNumpyPickleData.from_objectW  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   rN   rX   r   r   r
   r   rW   rc   r0   rV   r   r#  r&   r    r   rw   rw   @  s	       ")/ 	dN+V34eDBU<U6VV	
 	   [C s t    D~ D(3;:O D D D D f     [  r    rw   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 )rg   r   r]   r   c                 @    | j          | ||j                  |j        ffS r4   )r   rP   rY   r   s      r   rc   z$_GraphModulePickleData.reduce_helpers  s/     |CW_%%#
 
 	
r    gmrP   Nc                 t   t          |t          j        j        j                  r|                                }n|                                }t          |d          r|                                | _	        n|j
                                        | _	        | j	        d= t          |j        |          | _        d S )Nr   _graph)ra   rd   re   _lazy_graph_module_LazyGraphModule_real_recompile	recompiler   r   gm_dictr   r   _GraphPickleDatar9  graph)r[   r7  rP   _python_codes       r   rV   z_GraphModulePickleData.__init__  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 r4   )	rd   re   rf   __new__r>  r   r@  r   r9  )r[   r{   r7  s      r   r   z_GraphModulePickleData.unpickle  sF    X!))%(*>??lJ''N;;		r    )r-   r.   r/   r   rN   rd   re   rf   r   r   r
   r   rW   rc   r)   rV   r   r&   r    r   rg   rg   r  s        	
"	
).)=	
	$')==>d''(	*
	
 	
 	
 [	
:58/ :' :d : : : :~ %(:N      r    rg   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   mappingrP   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 r4   r&   nrF  s    r   r=   z*_NodePickleData.__init__.<locals>.<lambda>  s    '!* r    c                     |          S r4   r&   rI  s    r   r=   z*_NodePickleData.__init__.<locals>.<lambda>  s    WQZ r    c                 T    i | ]$\  }}j         r                     |          !||%S r&   )r+   ).0r   r   rP   s      r   
<dictcomp>z,_NodePickleData.__init__.<locals>.<dictcomp>  sP     
 
 
14	

 33A66
q
 
 
r    )rH   tree_map_onlyrd   re   ru   r   kwargsr   oprk   r   targetrs   metar   )r[   r   rF  rP   s     ``r   rV   z_NodePickleData.__init__  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 r4   r&   rI  s    r   r=   z*_NodePickleData.unpickle.<locals>.<lambda>  s    wqz r    c                     |          S r4   r&   rI  s    r   r=   z*_NodePickleData.unpickle.<locals>.<lambda>  s    wqz r    z$target must be callable or str, got )rH   rO  rE  r   rP  rR  r   r   ra   r0   rv   rs   create_noderQ  r   rS  )r[   r@  rF  r{   r   rP  rR  r   s     `     r   r   z_NodePickleData.unpickle  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/   rd   re   ru   r   r)   rV   Graphr   r   r&   r    r   rE  rE    s        
hm
 ehm%667
 	

 

 
 
 
:x~ '67 '	
 
     r    rE  c            
       .   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d	         ed
         z  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 )rk   r   rQ  r   c                 V    |                      ||j                  }|j        |j        ffS r4   )r   rP   r   rY   )r   r   rQ  results       r   rc   z_OpPickleData.reduce_helper  s,     B00'"9!;<<r    rP   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:  )ra   r0   _OpStrPickleDatar   r   r   rv   r]  rs   _OpPrecompiledPickleDatard   re   ru   _pretty_print_targetrh   
OpOverload
_pickle_op_OpOverloadPickleDatarj   _OpOverloadPacketPickleDatar   _OpFunctionPickleDataSUPPORTED_ROOTSsplitr   )r   rQ  rP   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   dataclsrd  re  c                 h    |j         x}r ||           sddlm}  |d|             ||           S )Nr   )BypassFxGraphCachez"Unable to pickle non-standard op: )r*   torch._inductor.codecacherm  )r   rk  rP   r*   rm  s        r   rc  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 r4   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   )rh  globals_getattr_by_name)r   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   )rh  r   )r   r   r$  s      r   rr  z_OpPickleData._getattr_by_name  sP    
 Tkk

3**IC4%%D Tkk tT"""r    N)r-   r.   r/   r   rN   rX   r   r   r   rW   rc   r)   r   r   r0   rs   rc  r   r   rt  rr  r&   r    r   rk   rk     s       ="=(.=	x(&0159L3MM	N= = = [= I I I_ I I I [I6 		-.6S1TT	 	 
		 	 	 \	 ~ &    ^ 	## 	#& 	# 	# 	# [	# #v #S #V # # # \# # #r    rk   c                   .    e Zd ZdeddfdZdedefdZdS )r_  r   r   Nc                     || _         d S r4   r   r[   r   s     r   rV   z_OpStrPickleData.__init__      			r    r{   c                     | j         S r4   r   r	  s     r   r   z_OpStrPickleData.unpickle  s
    yr    )r-   r.   r/   r0   rV   r   r   r&   r    r   r_  r_    sX        S T    ~ #      r    r_  c                   B    e Zd ZdeddfdZdedej        j        fdZ	dS )rd  r   r   Nc                     || _         d S r4   r   rx  s     r   rV   z_OpOverloadPickleData.__init__  ry  r    r{   c                     |                      | j                  }t          |t          j        j                  st          dt          |                     |S )NzExpected OpOverload, got )rt  r   ra   rd   rh   rb  rv   rs   r[   r{   r]   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/   r0   rV   r   rd   rh   rb  r   r&   r    r   rd  rd    s]        S T    ~ %*:O      r    rd  c                   B    e Zd ZdeddfdZdedej        j        fdZ	dS )re  r   r   Nc                     || _         d S r4   r   rx  s     r   rV   z$_OpOverloadPacketPickleData.__init__"  ry  r    r{   c                     |                      | j                  }t          |t          j        j                  st          dt          |                     |S )NzExpected OpOverloadPacket, got )rt  r   ra   rd   rh   rj   rv   rs   r~  s      r   r   z$_OpOverloadPacketPickleData.unpickle%  sQ    ))$)44#uz:;; 	P !N499!N!NOOO
r    )
r-   r.   r/   r0   rV   r   rd   rh   rj   r   r&   r    r   re  re  !  s]        S T    ~ %*:U      r    re  c                   .    e Zd ZdeddfdZdedefdZdS )r`  ri  r   Nc                 8    |                                 | _        d S r4   )	serializecontents)r[   ri  s     r   rV   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 r4   r&   )r   precompiled_artifacts    r   wrappedz2_OpPrecompiledPickleData.unpickle.<locals>.wrapped4  s    ''..r    )r   deserializer  	functoolswrapsr   )r[   r{   r  r  r  s       @r   r   z!_OpPrecompiledPickleData.unpickle0  sm    2>t}MM	-	.	.	/3 	/3 	/ 	/ 	/ 	/ 	/ 
/	.	/ r    )r-   r.   r/   r   rV   r   rX   r   r&   r    r   r`  r`  ,  sY        -!4 - - - - -~ &      r    r`  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 )
rf  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 r4   )r   r   )r[   r   r   s      r   rV   z_OpFunctionPickleData.__init__E  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   rd   operatoreinops)
r   __builtins__r2  r   r  rr  rd   r  r  r   )r[   r{   r  r  r  s        r   r   z_OpFunctionPickleData.unpickleI  s    9
""##DI...Y&  KKK((ty999Y'!!((	:::Y*$$OOO((49===Y(""MMM((;;;%%r    )
r-   r.   r/   r   rg  r0   rV   r   rX   r   r&   r    r   rf  rf  ;  sq          OOS      &~ && & & & & & &r    rf  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@  rP   r   Nc                     |j         | _        |j        | _        i }|j        D ]}t          |||          ||<   t          |                                          | _        |j        | _        d S r4   )	_tracer_cls
tracer_cls_tracer_extrastracer_extrasnodesrE  r   values_codegen)r[   r@  rP   r  r   s        r   rV   z_GraphPickleData.__init___  sj    +"168K 	@ 	@D)$w??E$KK5<<>>**
r    r7  r{   c                     t           j                            || j        | j                  }i }| j        D ]}|                    |||          ||<   t          | d          r| j        |_        |S )Nr  )	rd   re   rX  r  r  r  r   r   r  )r[   r7  r{   r@  r  nds         r   r   z_GraphPickleData.unpickler  ss     r4?D4FGG68* 	B 	BBE5.AAE"II4$$ 	+!]ENr    )r-   r.   r/   rd   re   rX  r)   rV   rf   r   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 )
rp   r   r]   r   c                 4    | j          | |          |j        ffS r4   r   r   s      r   rc   z'_TracingContextPickleData.reduce_helper  s)     LC'
 	
r    contextNc                     |j         | _         |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        d S r4   )	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   rV   z"_TracingContextPickleData.__init__  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 r4   )r   r   r  r  r  r  r  r  r  r  r  )r[   r{   r  s      r   r   z"_TracingContextPickleData.unpickle  s     !9::!%!4&*&>##0!%!4".040R-151T.!%!44 	3 r    )r-   r.   r/   r   rN   rd   ro   r   r   r   r
   r   rW   rc   rV   r   r&   r    r   rp   rp     s        
"
).)E
	$')EEFd''(	*

 
 
 [

 
4 
 
 
 
,~ .      r    rp   )r   N)S
contextlibr   r'  r~   r   r   r8   abcr   collections.abcr   r   typingr   r   r   typing_extensionsr	   r
   torch.utils._import_utilsr   rT   rd   torch.utils._pytreeutils_pytreerH   torch._guardsr   "torch._inductor.standalone_compiler   "torch._library.fake_class_registryr   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   rm   SymFloatr   r0   r1   r   r'   	dataclassr)   r5   rX   r9   r:   r>   contextmanagerrL   PicklerrN   r   rW   	Unpicklerr   rl   rn   rb   rw   rg   rE  rk   r_  rd  re  r`  rf  r?  rp   r&   r    r   <module>r     s               				             / / / / / / / / ( ( ( ( ( ( ( ( ( ( , , , , , , , , 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 	" 	" 	" 	" 	" 	" 	" 	"   !6 !gk&.A ! ! ! !8BH#5     .Yt_ . . . . q q q q q6> q q qh	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/ / / / / / / /d       B- - - - - - - -`H# H# H# H# H# H# H# H#V    }       M       -       }    &  &  &  &  &M  &  &  &F       D3 3 3 3 3 3 3 3 3 3r    