+
    –°³j7-  ã                  ó¼  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIHt ^ RIt^ RIH	u H
t ^ RIHtHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHtHt ^ R	IHt ^ R
IHt ^RIHt ]P>                  P@                  t ]P>                  PB                  t!]PD                  ! ]#4      t$R R lt%R R lt&R R lt' ! R R]PP                  4      t)R t*R R lt+R R lt,R R lt-R R lt.R# )é    )ÚannotationsN)ÚAny)Údynamo_timedÚlazy_format_graph_code)ÚMutationType)Úfx_graph_cse)Úconstant_foldÚreplace_node_with_constant)Úenter_freezingÚrecord_has_frozen_params)Úfreezing_passes)Úview_to_reshape)Úconfigc               ó(   € V ^8„  d   QhRRRRRRRR/# )	é   Úgmútorch.fx.GraphModuleÚflat_paramsz	list[Any]Úfw_metadataz1torch._functorch.aot_autograd.ViewAndMutationMetaÚreturnz	list[int]© )Úformats   "ÚY/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_inductor/freezing.pyÚ__annotate__r      s1   € ÷ +!ñ +!Øð+!àð+!ð Cð+!ð ñ	+!ó    c                ó  € V P                   P                  RR7      pVR\        V4       p. pVP                   Uu. uF  pVP                  f   K  VP                  NK!  	  pp\        VP                  4       UU	u. uF8  w  r‰V	P                  \        P                  \        P                  39   g   K6  VNK:  	  p
pp	. p^ p\        \        W4      4       Fg  w  pw  rÞWŠ9   g   W‡9   d?   VP                  V4       W‚P                  9   d   WŒ,
          pVP                  V4       KP  KR  \        WV4       V^,          pKi  	  VP                  \!        \        V4      \        V4      4      4       W²n        V P#                  4        V# u upi u up	pi )z¶
Replaces the parameters of a PyTorch GraphModule with constants wherever possible.
Returns a list of indices representing the input parameters that were not converted to constants.
Úplaceholder©ÚopN)ÚgraphÚ
find_nodesÚlenÚoutput_infoÚbase_idxÚ	enumerateÚ
input_infoÚmutation_typer   ÚMUTATED_IN_GRAPHÚMUTATED_OUT_GRAPHÚzipÚappendÚstatic_input_indicesr
   ÚextendÚrangeÚ	recompile)r   r   r   ÚparamsÚfake_inp_nodesÚpreserved_arg_indicesÚout_infoÚaliased_input_argsÚiÚmÚmutated_inpsÚstatic_indices_newÚstatic_indices_offsetÚ
real_inputÚnodeÚnew_static_indexs   &&&             r   Úreplace_params_with_constantsr=      s  € ð �X‰X× Ñ  MÐ Ó2€FØ˜Mœc &›kÐ*€NØÐð $×/Ò/óá/ˆHØ×Ñô 	ˆ×ÔÙ/ð ð ô ˜k×4Ñ4Ô5ôá5‰DˆAØ�?‰?Ü×)Ñ)¬<×+IÑ+IÐJñK÷ 	
ˆÙ5ð ñ ð ÐØÐÜ!*¬3¨{Ó+KÖ!LÑˆÑˆJØÔ Ô 7Ø!×(Ñ(¨Ô+Ø×4Ñ4Ô4Ø#$Õ#<Ð Ø"×)Ñ)Ð*:Ö;ñ 5ô ' r°Ô<Ø! QÕ&Ò!ñ "Mð × Ñ ¤¤s¨;Ó'7¼¸V»Ó!EÔFà'9Ô$Ø‡L�L„NØ Ð ùò?ùós   »FÁFÁ:3FÂ2Fc               ó(   € V ^8„  d   QhRRRRRRRR/# ©r   Ú	dynamo_gmr   Úaot_autograd_gmÚexample_inputsz"list[torch._subclasses.FakeTensor]r   z&tuple[torch.fx.GraphModule, list[int]]r   )r   s   "r   r   r   J   s6   € ÷ Cñ CØ#ðCà)ðCð 7ðCð ,ñ	Cr   c                ó|   € \        4       ;_uu_ 4        \        WV4      uuRRR4       #   + '       g   i     R# ; i)a	  
Inlines parameters that are not mutated into constants and optimizes the graph through constant propagation
and other techniques. If enabled, the function also discards the original parameters of the module for memory efficiency.

Assumes that this function is run in dynamo tracing post aot_autograd.

Args:
    dynamo_gm (torch.fx.GraphModule): The Dynamo constructed GraphModule.
    aot_autograd_gm (torch.fx.GraphModule): The aot_autograd constructed GraphModule to be frozen.
    example_inputs (List[torch.Tensor]): A list of example input tensors to be used in the freezing process.

Returns:
    Tuple[torch.fx.GraphModule, List[int]]: A tuple containing the frozen GraphModule and a list of indices
    of the inputs that were preserved (not turned into constants).
N)r   Ú_freeze)r@   rA   rB   s   &&&r   ÚfreezerE   J   s&   € ô( 
×	Õ	Ü�y°>ÓB÷ 
×	×	Ó	ús   “*ª;	c               ó(   € V ^8„  d   QhRRRRRRRR/# r?   r   )r   s   "r   r   r   b   s0   € ÷ .2ñ .2Ø#ð.2à)ð.2ð 7ð.2ð ,ñ	.2r   c           	     óü  € \        V4       \        P                  P                  P	                  4       ;p'       dR   VP
                  pVP                  f   \        R4      hVP                  pVe   Vf   \        R4      h\        WV4      pM9VP                  P                  RR7      p\        \        \        V4      4      4      p\        VP                  4      pW�n	        VP                  4        V U	u. uF  q’V	,          NK  	  p
p	\!        W4       \#        V4       \$        P&                  '       d   \)        4        \+        V 4       \,        P/                  R\1        RVRR7      4       \3        V4       W3# u up	i )	Nz@expected tracing_context.params_flat_unwrap_subclasses to be setz.expected fw_metadata and params_flat to be setr   r   z%szFROZEN GRAPHT)Úcolored)r   ÚtorchÚ_guardsÚTracingContextÚtry_getr   Úparams_flat_unwrap_subclassesÚAssertionErrorr=   r    r!   Úlistr.   r"   r   r/   r   r	   r   Úfreezing_discard_parametersÚinvalidate_eager_modulesÚdiscard_traced_gm_paramsÚlogÚdebugr   r   )r@   rA   rB   Útracing_contextr   Úparams_flatr2   ÚinputsÚ	cse_graphÚindÚaot_example_inputss   &&&        r   rD   rD   b   sS  € ô �OÔ$äŸ-™-×6Ñ6×>Ñ>Ó@Ð@€Ö@Ø%×1Ñ1ˆØ×8Ñ8Ò@Ü ØRóð ð &×CÑCˆØÒ'¨KÒ,CÜ Ð!QÓRÐRä =Ø¨+ó!
Ñð !×&Ñ&×1Ñ1°]Ð1ÓCˆÜ $¤U¬3¨v«;Ó%7Ó 8Ðô ˜_×2Ñ2Ó3€IØ%ÔØ×ÑÔá9NÓOÑ9N°#¨×-Ð-Ñ9NÐÐOÜ�OÔ8ä�/Ô"ä×)×)Ð)Ü Ô"Ü  Ô+ä‡I�IØÔ$ ^°_ÈdÔSôô ˜_Ô-ØÐ1Ð1ùò Ps   Ã5E9c                  óR   a € ] tR t^“t]V 3R l4       tR R lt]RR l4       tRt	V ;t
# )ÚErasedTensorc                	óB   <€ \         SV `  WP                  R R7      4      # )Úmeta)Údevice)ÚsuperÚ__new__Úto)ÚclsÚelemÚnameÚ
owning_modÚ	__class__s   &&&&€r   ra   ÚErasedTensor.__new__”   s   ø€ ä‰w‰˜s§G¡G°6 GÓ$:Ó;Ð;r   c               ó    € V ^8„  d   QhRRRR/# )r   re   z
str | Noner   ÚNoner   )r   s   "r   r   ÚErasedTensor.__annotate__˜   s   € ÷ /ñ / :ð /°tñ /r   c                	óH   € W n         \        P                  ! V4      V n        R # )N)Úerased_nameÚweakrefÚrefÚowning_mod_ref)Úselfrd   re   Úmods   &&&&r   Ú__init__ÚErasedTensor.__init__˜   s   € ØÔÜ%Ÿkšk¨#Ó.ˆÖr   c           	     	ó&  € \         P                  ! V/ VB  Uu. uF  p\        V\        4      '       g   K  VNK  	  pp\	        V4      ^ 8X  d   \        R4      hV^ ,          p\        RV RVP                   RVP                  4        24      hu upi )r   z+expected at least one ErasedTensor argumentz‰Trying to run Pytorch Eager Module after Dynamo Freezing. The original parameters have been discarded for memory efficiency. Found in op z for erased parameter z of )	ÚpytreeÚarg_tree_leavesÚ
isinstancer\   r"   rN   ÚRuntimeErrorrm   rp   )rc   ÚfuncÚtypesÚargsÚkwargsÚeÚerased_tensorss   &&&&&  r   Ú__torch_dispatch__ÚErasedTensor.__torch_dispatch__œ   s¤   € ô
 ×+Ò+¨TÐ<°VÒ<ó
ñ =�Ü˜!œ\×*÷ ˆAá<ð 	ð 
ô ˆ~Ó !Ô#Ü Ð!NÓOÐOØ˜1Õˆäðà˜&Ð 6°q·}±}°oÀTÈ!×JZÑJZÓJ\ÐI]ð_ó
ð 	
ùò
s
   ™B¶B)rm   rp   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ústaticmethodra   rs   Úclassmethodr€   Ú__static_attributes__Ú__classcell__)rg   s   @r   r\   r\   “   s.   ø† Øô<ó ð<õ/ð ó
ó ö
r   r\   c                 ó|  € \         P                  P                  P                  4       ;_uu_ 4        \         P                  P
                  P                  4       P                  P                  P                  4        EF  p \        V \         P                  P                  4      '       g   K0  \        \        P                  ! V P!                  R R7      V P#                  R R7      4      4       F˜  w  r\         P$                  P&                  P)                  4       ;_uu_ 4        \+        W!V 4      pRRR4       \        V\         P                  P,                  4      '       d   XP/                  R4       RVn        \3        WX4       Kš  	  EK  	  RRR4       R#   + '       g   i     Lq; i  + '       g   i     R# ; i©F)ÚrecurseNT)rI   ÚutilsÚ_python_dispatchÚ_disable_current_modesrJ   rK   ÚgetÚmodule_contextÚ
nn_modulesÚvaluesrx   ÚnnÚModulerO   Ú	itertoolsÚchainÚnamed_parametersÚnamed_buffersÚ	_dispatchÚpythonÚno_python_dispatcherr\   Ú	ParameterÚrequires_grad_Ú	_is_paramÚsetattr©rr   Ú	attr_nameÚtensorÚe_ts       r   rQ   rQ   ¯   s,  € Ü	�‰×	%Ñ	%×	<Ñ	<×	>Õ	>ô �]‰]×)Ñ)×-Ñ-Ó/×>Ñ>×IÑI×PÑP×Rð ä˜c¤5§8¡8§?¡?×3Ò3Ùä%)Ü—’Ø×(Ñ(°Ð(Ó7à×%Ñ%¨eÐ%Ó4óö&Ñ!�	ô —_‘_×+Ñ+×@Ñ@×BÕBÜ& v¸#Ó>�C÷ Cä˜f¤e§h¡h×&8Ñ&8×9Ò9Ø×&Ñ& tÔ,Ø$(�C”MÜ˜¨Ö,ô&ñ	 S÷ 
?Ñ	>÷ C×Bú÷ 
?×	>Ð	>ús%   ±C0F*Ä!FÄ.AF*ÆF'Æ"F*Æ*F;	c               ó   € V ^8„  d   QhRR/# )r   rr   r   r   )r   s   "r   r   r   Æ   s   € ÷ )ñ )Ð"6ñ )r   c                ó~  € \         P                  P                  P                  4       ;_uu_ 4        \	        \
        P                  ! V P                  R R7      V P                  R R7      4      4       F˜  w  r\         P                  P                  P                  4       ;_uu_ 4        \        W!V 4      pRRR4       \        V\         P                  P                  4      '       d   XP!                  R4       RVn        \%        WX4       Kš  	  RRR4       R#   + '       g   i     Ll; i  + '       g   i     R# ; ir‹   )rI   r�   rŽ   r�   rO   r–   r—   r˜   r™   rš   r›   rœ   r\   rx   r”   r�   rž   rŸ   r    r¡   s   &   r   rR   rR   Æ   sÚ   € Ü	�‰×	%Ñ	%×	<Ñ	<×	>Õ	>Ü!%Ü�OŠOØ×$Ñ$¨UÐ$Ó3à×!Ñ!¨%Ð!Ó0óö"
ÑˆIô —‘×'Ñ'×<Ñ<×>Õ>Ü" 6°cÓ:�÷ ?ä˜&¤%§(¡(×"4Ñ"4×5Ò5Ø×"Ñ" 4Ô(Ø $�”Ü�C CÖ(ñ"
÷ 
?Ñ	>÷ ?×>ú÷ 
?×	>Ð	>ús%   ±A6D+Â'DÂ4AD+ÄD(Ä#D+Ä+D<	c               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   r   ×   s   € ÷ ñ Ð2ñ r   c           	     ó(  € V P                   P                  Ev rVP                  ^ ,          pV P                   P                  V4      ;_uu_ 4        V F÷  p\	        VP
                  R,          \        P                  4      '       d7   \        P                  P                  VP
                  R,          4      '       g   Kl  VP
                  R,          p\        V P                   P                  VP                  4       4      4      pV P                   P                  \        P                  P                   WF34      pVP#                  WG4       Kù  	  RRR4       V P                   P%                  4        V P'                  4        R#   + '       g   i     L<; i)zÜ
Make sure the output node's layout does not change due to compiler optimizations
by adding aten.as_strided nodes with the expected strides.

Only used for inference so we can assume all graph outputs are model outputs.
ÚvalN)r    Únodesr|   Úinserting_beforerx   r^   rI   ÚTensorÚ_prims_commonÚ%is_non_overlapping_and_dense_or_falseÚtupleÚmaterialize_symintsÚstrideÚcall_functionÚprimsÚinductor_force_stride_orderÚdefaultÚreplace_input_withÚlintr/   )r   Ú_Úoutput_nodeÚout_listÚnÚftÚstride_argsÚnew_nodes   &       r   Úenforce_output_layoutrÀ   ×   s  € ð —h‘h—n‘n�O€QØ×Ñ Õ"€HØ	�‰×	"Ñ	" ;×	/Õ	/ÛˆAÜØ—‘�u•œuŸ|™|÷ò ä×(Ñ(×NÑNØ—‘�u•÷ò ñ ð —‘˜•ˆBÜ §¡× <Ñ <¸R¿Y¹Y»[Ó IÓJˆKØ—x‘x×-Ñ-Ü×1Ñ1×9Ñ9¸AÐ;KóˆHð ×*Ñ*¨1Ö7ñ% ÷ 
0ð* ‡H�H‡M�M„OØ‡L�L†N÷- 
0×	/ús   ÁA,FÂ<BFÆF	c               ó   € V ^8„  d   QhRR/# r¨   r   )r   s   "r   r   r   ù   s   € ÷ ñ Ð(<ñ r   c           	     óô  € \         P                  P                  P                  P                  \         P                  P                  P
                  P                  \         P                  P                  P                  P                  .pV P                  P                   Uu. uF  q"P                  V9   g   K  VNK  	  ppV Fï  pV P                  P                  V4      ;_uu_ 4        VP                  ^ ,          P                  R,          p\        V P                  P                  VP                  4       4      4      pV P                  P!                  \"        P$                  P                  VP                  ^ ,          V34      pRRR4       VP'                  VP                  ^ ,          X4       Kñ  	  V P                  P)                  4        V P+                  4        R# u upi   + '       g   i     Lh; i)z¨
Make sure the as_strided node's input's layout does not change due to compiler
optimizations, because the as_strided strides info depends on input tensor stride info.
rª   N)rI   ÚopsÚatenÚ
as_stridedr¶   Úas_strided_Úas_strided_scatterr    r«   Útargetr¬   r|   r^   r°   r±   r²   r³   r´   rµ   r·   r¸   r/   )r   Úas_strided_opsr¼   Ústrided_nodesr½   r¾   r¿   s   &      r   Úenforce_as_strided_input_layoutrË   ù   sC  € ô 	�	‰	�‰×!Ñ!×)Ñ)Ü�	‰	�‰×"Ñ"×*Ñ*Ü�	‰	�‰×)Ñ)×1Ñ1ð€Nð
 !#§¡§¢ÓM¡˜1·(±(¸nÑ2L—Q�Q¡€MÐMÛˆØ�X‰X×&Ñ& q×)Õ)à—‘˜•—‘ Õ&ˆBÜ §¡× <Ñ <¸R¿Y¹Y»[Ó IÓJˆKØ—x‘x×-Ñ-Ü×1Ñ1×9Ñ9¸A¿F¹FÀ1½IÀ{Ð;SóˆH÷	 *ð 	
×Ñ˜QŸV™V A�Y¨Ö1ñ ð ‡H�H‡M�M„OØ‡L�L†Nùò Nç)×)ús   Â"G"Â9G"Ã)BG'Ç'G7c               ó   € V ^8„  d   QhRR/# r¨   r   )r   s   "r   r   r     s   € ÷ "ñ "Ð.Bñ "r   c                ót  € \        R4      ;_uu_ 4        V P                  P                   Uu. uF.  qP                  \        P
                  P                  J g   K,  VNK0  	  ppV EF  pVP                  ^,          p\        VP                  R,          P                  4       4      ^8w  g8   VP                  R,          P                  \        P                  R7      '       d   K  V P                  P                  V4      ;_uu_ 4        V P                  P                  \        P                   P                  V3R\        P                  /4      pVP#                  WE4       RRR4       EK  	  \%        V 4       \'        V 4       RRR4       R# u upi   + '       g   i     EK>  ; i  + '       g   i     R# ; i)zž
Convert 4d convolution weight tensor to channels last format.

This pass is performed before freezing so the added nodes can be constant
folded by freezing.
Ú%convert_conv_weights_to_channels_lastrª   )Úmemory_formatrÏ   N)r   r    r«   rÈ   rÄ   Úconvolutionr¶   r|   r"   r^   ÚsizeÚis_contiguousrI   Úchannels_lastr¬   r³   Úcloner·   rË   rÀ   )r   r¼   ÚconvsÚconvÚweight_noder¿   s   &     r   rÎ   rÎ     s=  € ô 
Ð=×	>Õ	>ØŸH™HŸNšNÓS™N�q¯h©h¼$×:JÑ:J×:RÑ:RÐ.R—�™NˆÐSÜˆDØŸ)™) A�,ˆKÜ�;×#Ñ# EÕ*×/Ñ/Ó1Ó2°aÔ7¸;×;KÑ;KØõ<ç‰m¬%×*=Ñ*=ˆmÓ>ö<?ñ à—‘×*Ñ*¨4×0Õ0ØŸ8™8×1Ñ1Ü—J‘J×&Ñ&Ø �NØ$¤e×&9Ñ&9Ð:ó�ð
 ×'Ñ'¨Ô>÷ 1Ò0ñ ô  	(¨Ô+Ü˜bÔ!÷' 
?Ñ	>ùÚS÷ 1×0Ñ0ú÷ 
?×	>Ð	>úsB   ”F&­)FÁFÁ!B F&Ã"%F&ÄAFÅ#F&ÆF&ÆF#Æ
F&Æ&F7	)/Ú
__future__r   r–   Úloggingrn   Útypingr   rI   Útorch.utils._pytreer�   Ú_pytreerv   Útorch._dynamo.utilsr   r   Útorch._functorch.aot_autogradr   Útorch._functorch.compile_utilsr   Ú torch._inductor.constant_foldingr	   r
   Útorch._inductor.freezing_utilsr   r   Ú+torch._inductor.fx_passes.freezing_patternsr   Ú#torch._inductor.fx_passes.post_gradr   Ú r   rÃ   rÄ   r´   Ú	getLoggerr‚   rS   r=   rE   rD   r­   r\   rQ   rR   rÀ   rË   rÎ   r   r   r   Ú<module>ræ      s�   ðå "ã Û Û Ý ã ß $Ð $ß DÝ 6Ý 7ß Vß SÝ GÝ ?å ð ‡y�y‡~�~€Ø�	‰	�‰€à×Ò˜Ó!€õ+!õ\Cõ0.2ôb
�5—<‘<ô 
ò8-õ.)õ"õD÷4"r   