Ë
    P/æjcN  ã                   óÆ  — d dl Z d dlZd dlmZmZmZmZmZmZ d dl	Z	d dl
mZmZ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 d dlmZ d d	lmZ d d
lmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z)m*Z* d dl+m,Z,m-Z- d dl.m/Z/ erd dl0m1Z1  ee2d«      Z3 ee2d«      Z4d„ Z5de6ddfd„Z7d„ Z8d„ Z9 G d„ d«      Z:da;da<e jz                  d„ «       Z>e jz                  d„ «       Z?dd„Z@y)é    N)ÚAnyÚDictÚListÚOptionalÚTYPE_CHECKINGÚUnion)Úcall_backwardÚ	call_hookÚFakeCompiledAutogradEngine©ÚGetItemSourceÚLocalSource)ÚcountersÚlazy_format_graph_codeÚset_locals_to_steal)ÚgetArtifactLoggerÚtrace_structured©Úclone_preserve_strides)ÚFakeTensorMode)ÚGraphModule)ÚBackwardState)Ú	decomposeÚdisable_autocast_cacheÚdisable_proxy_modes_tracingÚfetch_object_proxyÚProxyTorchDispatchModeÚPythonKeyTracerÚtrack_tensor_tree)Ú
DimDynamicÚShapeEnv)Úpreserve_node_metaÚset_stack_trace)ÚCapturedTraceback)ÚProxyÚcompiled_autogradÚcompiled_autograd_verbosec                  óh   — t         j                  j                  j                  j	                  d«      S )Nr'   )ÚtorchÚ_loggingÚ	_internalÚ	log_stateÚis_artifact_enabled© ó    úb/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_dynamo/compiled_autograd.pyÚ snapshot_verbose_logging_enabledr1   )   s(   € Ü�>‰>×#Ñ#×-Ñ-×AÑAØ#óð r/   ÚmsgÚreturnc                 ó.   — t         j                  | «       y ©N)Úverbose_logÚdebug)r2   s    r0   Úcpp_verbose_log_fnr8   /   s   € Ü×Ñ�cÕr/   c                  ó^   — t         j                  j                  j                  j                  S r5   )r)   Ú	_inductorÚconfigÚtritonÚ
cudagraphsr.   r/   r0   Úsnapshot_cudagraph_enabledr>   3   s   € Ü�?‰?×!Ñ!×(Ñ(×3Ñ3Ð3r/   c                 ó    — | �t        | «      S | S r5   r   )Úxs    r0   Úmaybe_clonerA   7   s   € Ø€}Ü% aÓ(Ð(Ø€Hr/   c            	       ó"  — e Zd Zdd„Zd„ Zedefd„«       Zdee	j                     dee   deeeef      fd	„Zd
efd„Zd„ Zdefd„Zd„ Zd„ Zd„ Zdee   fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zdefd„Zdededee	j<                  j>                     fd„Z y)ÚAutogradCompilerInstancer3   Nc                 óF  — || _         t        j                  «       | _        | j                  j                  | _        t        «       | _        t        dd| j                  ¬«      | _        t        «       | _
        t        | j                  d«      | _        d | _        g d¢| _        y )NT)Úallow_fallback_kernelsÚallow_non_fake_inputsÚ	shape_envÚsymbolic)ÚinputsÚsizesÚscalarsÚhooks)Úcompiler_fnÚ
contextlibÚ	ExitStackÚstackÚcloser!   rG   r   Úfake_tensor_moder   Ú	fx_tracerr   Ú
proxy_modeÚhooks_proxyÚgraph_placeholders)ÚselfrM   s     r0   Ú__init__z!AutogradCompilerInstance.__init__>   s|   € Ø&ˆÔÜ×)Ñ)Ó+ˆŒ
Ø—Z‘Z×%Ñ%ˆŒ
Ü!›ˆŒÜ .Ø#'Ø"&Ø—n‘nô!
ˆÔô
 )Ó*ˆŒÜ0°·±ÀÓLˆŒØ,0ˆÔÚ"IˆÕr/   c                 ót   — t        |t        j                  «      sJ ‚| j                  j	                  ||¬«      S )N)Úsource)Ú
isinstancer)   ÚTensorrR   Úfrom_tensor)rW   r@   rZ   s      r0   Ú	wrap_fakez"AutogradCompilerInstance.wrap_fakeM   s2   € Ü˜!œUŸ\™\Ô*Ð*Ð*Ø×$Ñ$×0Ñ0°¸6Ð0ÓBÐBr/   c                 ó,   — t        t        | «      |«      S r5   r   )ÚnameÚidxs     r0   rZ   zAutogradCompilerInstance.sourceQ   s   € äœ[¨Ó.°Ó4Ð4r/   rI   rJ   rK   c                 ó,  ‡ — t         d   dxx   dz  cc<   d ‰ _        i ‰ _        t        j                  j                  «       ‰ j                  _        t        j                  j                  t        ¬«      ‰ j                  _        i ‰ j                  _        ˆ fd„‰ j                  D «       \  }}}‰ _        t        |«      D ��cg c]'  \  }}‰ j!                  |‰ j#                  d|«      «      ‘Œ) }}}‰ j%                  ||«       t        |«      D ��	cg c]@  \  }}	‰ j&                  j)                  |	‰ j#                  d|«      t*        j,                  «      ‘ŒB }}}	‰ j%                  ||«       t        |«      D ]Æ  \  }}	‰ j#                  d|«      }
t/        |	t0        «      r/‰ j&                  j)                  |	|
t*        j,                  «      ||<   ŒWt/        |	t2        «      rL‰ j&                  j5                  ‰ j&                  j7                  |	|
t*        j,                  ¬	«      |	|
¬
«      ||<   Œ³t9        dt;        |	«      «      ‚ ‰ j%                  ||«       ‰ j<                  j?                  tA        i «      «       ‰ j<                  j?                  ‰ jB                  «       ‰ j<                  j?                  ‰ jD                  «       ‰ j<                  j?                  tG        «       «       ‰ j<                  j?                  tI        «       «       |||fS c c}}w c c}	}w )Nr&   Úcapturesé   )Ú
tracer_clsc              3   óZ   •K  — | ]"  }‰j                   j                  d |di «      –— Œ$ y­w)Úplaceholderr.   N)rS   Úcreate_proxy)Ú.0r`   rW   s     €r0   ú	<genexpr>z9AutogradCompilerInstance.begin_capture.<locals>.<genexpr>a   s0   øè ø€ ò D
àð �N‰N×'Ñ'¨°t¸RÀ×DñD
ùs   ƒ(+rI   rJ   rK   )rZ   Údynamic_dim)ÚhintrZ   zUnexpected scalar type: )%r   Úaot_graph_cls_nameÚaot_graph_infosr)   ÚnnÚModulerS   ÚrootÚfxÚGraphr   ÚgraphÚtensor_attrsrV   rU   Ú	enumerater^   rZ   Úbind_tensors_to_proxiesrG   Ú$create_unspecified_symint_and_symbolr    ÚDYNAMICr[   ÚintÚfloatÚcreate_symfloatnodeÚcreate_unspecified_symbolÚAssertionErrorÚtyperP   Úenter_contextr   rR   rT   r   r"   )rW   rI   rJ   rK   Ú
args_proxyÚsizes_proxyÚscalars_proxyra   r@   ÚvalrZ   s   `          r0   Úbegin_capturez&AutogradCompilerInstance.begin_captureU   s¤  ø€ ô 	Ð$Ñ% jÓ1°QÑ6Ó1Ø15ˆÔØ:<ˆÔÜ#Ÿh™hŸo™oÓ/ˆ�‰ÔÜ$Ÿx™xŸ~™~¼˜~ÓIˆ�‰ÔØ&(ˆ�‰Ô#óD
à×/Ñ/ôD
Ñ@ˆ
�K °Ô0@ô $ FÓ+÷
á��Qð �N‰N˜1˜dŸk™k¨(°CÓ8Õ9ð
ˆñ 
ð 	×$Ñ$ V¨ZÔ8ô & eÓ,÷
ñ ��Sð �N‰N×?Ñ?ØØ—‘˜G SÓ)Ü×"Ñ"õð
ˆñ 
ð 	×$Ñ$ U¨KÔ8ä! 'Ó*ò 	L‰HˆC�Ø—[‘[ ¨CÓ0ˆFÜ˜#œsÔ#Ø#Ÿ~™~×RÑRØØÜ×&Ñ&ó �˜’ô
 ˜C¤Ô'Ø#Ÿ~™~×AÑAØ—N‘N×<Ñ<ØØ%Ü$.×$6Ñ$6ð =ó ð
 Ø!ð  Bó  �˜’ô %Ð%?ÄÀcÃÓKÐKð'	Lð( 	×$Ñ$ W¨mÔ<ð 	�
‰
× Ñ ¤¨2£Ô/Ø�
‰
× Ñ  ×!6Ñ!6Ô7Ø�
‰
× Ñ  §¡Ô1Ø�
‰
× Ñ Ô!7Ó!9Ô:Ø�
‰
× Ñ Ô!3Ó!5Ô6Ø�u˜gÐ%Ð%ùó[
ùó
s   Ã,L
ÄALÚbackward_idxc           
      óì  — | j                   €J ‚| j                   |   }| j                  j                  dt        || j	                  |«      g| j	                  |«      ¢­i ¬«      }t        «       5  g }|D ]E  }|€|j                  d «       Œ|\  }	}
}}|j                  t        j                  |||	|
¬«      «       ŒG | j                  ||«       d d d «       t        |«      S # 1 sw Y   t        «      S xY w)NÚcall_function)ÚkindÚtargetÚargsÚkwargs)ÚsizeÚdtypeÚlayoutÚdevice)rU   rS   rh   r	   Úto_proxyr   Úappendr)   Úemptyrw   Útuple)rW   rI   Úoutput_metadatasÚsaved_tensorsr†   Úbackward_c_functionÚproxiesÚgrad_insÚoutput_metadatar�   r�   rŽ   r�   s                r0   Úproxy_call_backwardz,AutogradCompilerInstance.proxy_call_backward–   s	  € ð ×ÑÐ+Ð+Ð+Ø"×.Ñ.¨|Ñ<ÐØ—.‘.×-Ñ-Ø Ü à#Ø—‘˜mÓ,ðð —‘˜vÓ&ñð
 ð .ó 	
ˆô )Ó*ñ 	<à57ˆHØ#3ò �Ø"Ð*Ø—O‘O DÔ)Øà.=Ñ+�˜  tØ—‘Ü—K‘K T°¸vÈfÔUõðð ×(Ñ(¨°7Ô;÷	<ô �X‹Ð÷	<ô �X‹Ðús   Á.AC Ã C3c                 ó’   — | j                   j                  dt        |g|D �cg c]  }| j                  |«      ‘Œ c}¢­|«      S c c}w )Nrˆ   )rS   rh   r
   r‘   )rW   Úhookr‹   rŒ   r@   s        r0   Úproxy_call_hookz(AutogradCompilerInstance.proxy_call_hook¹   sM   € Ø�~‰~×*Ñ*ØÜàðà,0Ö1 q�$—-‘- Õ"Ò1ñð ó
ð 	
ùò
 2s   ¢AÚic                 óþ   — | j                   €J ‚| j                   |   }| j                  |||   d¬«      }t        «       5  t        ||   «      ||<   | j	                  ||   g|g«       d d d «       |S # 1 sw Y   |S xY w)NÚtensor_pre_hook©Ú	hook_type©rU   rž   r   rA   rw   )rW   rI   Úhook_idrŸ   r�   Úproxys         r0   r¡   z(AutogradCompilerInstance.tensor_pre_hookÄ   s–   € Ø×ÑÐ+Ð+Ð+Ø×Ñ Ñ(ˆØ×$Ñ$ØØ�1‰IØ'ð %ó 
ˆô
 )Ó*ñ 	?Ü# F¨1¡IÓ.ˆF�1‰IØ×(Ñ(¨&°©)¨°u°gÔ>÷	?ð ˆ÷	?ð ˆús   ¿)A2Á2A<c                 ó  — | j                   €J ‚| j                   |   }| j                  ||d¬«      }t        «       5  |D �cg c]  }t        |«      ‘Œ }}| j	                  ||«       d d d «       |S c c}w # 1 sw Y   |S xY w)NÚpre_hookr¢   r¤   )rW   rI   r¥   r�   r˜   r@   s         r0   r¨   z!AutogradCompilerInstance.pre_hookÑ   s”   € Ø×ÑÐ+Ð+Ð+Ø×Ñ Ñ(ˆØ×&Ñ&ØØØ ð 'ó 
ˆô
 )Ó*ñ 	:Ø.4Ö5¨”k !•nÐ5ˆFÐ5Ø×(Ñ(¨°Ô9÷	:ð ˆùò 6÷	:ð ˆús   ¼A6ÁA1ÁA6Á1A6Á6B c                 ó  — | j                   €J ‚| j                   |   }| j                  |||d¬«      }t        «       5  |D �cg c]  }t        |«      ‘Œ }}| j	                  ||«       d d d «       |S c c}w # 1 sw Y   |S xY w)NÚ	post_hookr¢   r¤   )rW   ÚoutputsrI   r¥   r�   r˜   r@   s          r0   rª   z"AutogradCompilerInstance.post_hookÞ   s—   € Ø×ÑÐ+Ð+Ð+Ø×Ñ Ñ(ˆØ×&Ñ&ØØØØ!ð	 'ó 
ˆô )Ó*ñ 	;Ø/6Ö7¨!”{ 1•~Ð7ˆGÐ7Ø×(Ñ(¨°'Ô:÷	;ð ˆùò 8÷	;ð ˆús   ½A7ÁA2ÁA7Á2A7Á7Bc                 ó  — t        |t        j                  «      sJ ‚| j                  €J ‚| j                  |   }| j	                  ||d¬«      }t        «       5  t        |«      g}| j                  ||g«       d d d «       |S # 1 sw Y   |S xY w)NÚpost_acc_grad_hookr¢   )r[   r)   r\   rU   rž   r   rA   rw   )rW   Úinputr¥   r�   r¦   s        r0   r­   z+AutogradCompilerInstance.post_acc_grad_hookì   s›   € Ü˜%¤§¡Ô.Ð.Ð.Ø×ÑÐ+Ð+Ð+Ø×Ñ Ñ(ˆØ×$Ñ$ØØØ*ð %ó 
ˆô
 )Ó*ñ 	9Ü  Ó'Ð(ˆEØ×(Ñ(¨°°Ô8÷	9ð ˆ÷	9ð ˆús   Á BÂBc                 ó€  — i }d}t        |j                  «      }|d   j                  dk(  sJ ‚|d   }t        |j                  j	                  «       «      }t        | j                  «      }||   |d   k(  sJ ‚|t        |«      z   dz
  }||   |d   k(  sJ ‚t        |«      D ]À  \  }	}
|s)|
j                  d   j                  j                  dk(  rd}Œ1|
j                  d   j                  j                  d	k(  }t        |
j                  d   j                  «       «      dk(  }|sŒƒ|sŒ†t        |
j                  j	                  «       «      }t        d
„ |D «       «      sŒ¼|
||	<   ŒÂ |rX|j                  «       D ],  }
|
j                  d   j                  «       |
j                  d<   Œ. t        |j	                  «       «      S g S )NFr   rI   rd   éÿÿÿÿr„   ÚcudaTÚcpuc              3   ó¬   K  — | ]L  }t        |j                  t        j                  j                  «      xr |j                  j
                  d v –— ŒN y­w))ÚprimsÚatenN)r[   rŠ   r)   Ú_opsÚ
OpOverloadÚ	namespace)ri   Úusers     r0   rj   zDAutogradCompilerInstance.move_graph_nodes_to_cuda.<locals>.<genexpr>  sN   è ø€ ò ð ô ˜tŸ{™{¬E¯J©J×,AÑ,AÓBò CØŸ™×-Ñ-Ð1BÐBóCñùs   ‚AA)ÚlistÚnodesrŠ   ÚusersÚkeysÚlenrV   rv   Úmetar�   r   r�   ÚallÚvaluesr±   )rW   rt   Úto_moveÚhas_cuda_inputsr»   rI   Úinputs_usersÚfirst_getitem_idxÚlast_getitem_idxrŸ   ÚnodeÚis_cpuÚ	is_scalarÚ
node_userss                 r0   Úmove_graph_nodes_to_cudaz1AutogradCompilerInstance.move_graph_nodes_to_cudaÿ   sµ  € Ø,.ˆØˆÜ�U—[‘[Ó!ˆØ�Q‰x�‰ (Ò*Ð*Ð*Ø�q‘ˆÜ˜FŸL™L×-Ñ-Ó/Ó0ˆä × 7Ñ 7Ó8ÐØÐ&Ñ'¨<¸©?Ò:Ð:Ð:Ø,¬s°<Ó/@Ñ@À1ÑDÐØÐ%Ñ&¨,°rÑ*:Ò:Ð:Ð:Ü  Ó.ò 	&‰GˆAˆtÙ" t§y¡y°Ñ'7×'>Ñ'>×'CÑ'CÀvÒ'MØ"&�Øà—Y‘Y˜uÑ%×,Ñ,×1Ñ1°UÑ:ˆFÜ˜DŸI™I eÑ,×1Ñ1Ó3Ó4¸Ñ9ˆIÚš)Ü! $§*¡*§/¡/Ó"3Ó4�
Üñ ð !+ôõ ð "&�G˜A’Jð	&ñ& ØŸ™Ó(ò ;�Ø#'§9¡9¨UÑ#3×#8Ñ#8Ó#:�—	‘	˜%Ò ð;ô ˜Ÿ™›Ó'Ð'àˆ	r/   c           	      ó  ‡‡— | j                   j                  dt        j                  di «       | j                  j                  «        | j                   j                  dd| j                   j                  | j                  |«      «      fi «       | j                  «        | j                  «        g Št        «       r%| j                  | j                   j                  «      Št        | j                   j                  | j                   j                  d«      Št!        ‰dg«       t#        d‰ddd¬«      }t$        j'                  d	|«       t(        j+                  d	|«       t-        d
ˆfd„¬«       ˆfd„}|| j/                  ‰«      fS )Nrˆ   r.   ÚoutputÚCompiledAutogradrI   zCompiled autograd graphT)Úinclude_deviceÚinclude_strideÚcoloredz%sÚcompiled_autograd_graphc                  ó(   •— ‰ j                  d¬«      S )NF)Úprint_output)Úprint_readable)rt   s   €r0   ú<lambda>z6AutogradCompilerInstance.end_capture.<locals>.<lambda>J  s   ø€ ˜u×3Ñ3ÀÐ3ÓG€ r/   )Ú
payload_fnc                 óŒ   •— 	 da ‰D ](  }||   j                  «       j                  d¬«      ||<   Œ*  | ||||«      da S # da w xY w)NT)Únon_blockingF)Úin_compiled_autograd_regionÚ
pin_memoryr±   )Úcompiled_fnrI   rJ   rK   rL   rŸ   Úruntime_inputs_to_moves         €r0   Úruntime_wrapperz=AutogradCompilerInstance.end_capture.<locals>.runtime_wrapperM  s`   ø€ ð4Ø.2Ð+Ø/ò O�AØ & q¡	× 4Ñ 4Ó 6× ;Ñ ;ÈÐ ;Ó N�F˜1’IðOñ # 6¨5°'¸5ÓAà.3Ñ+ø¨eÑ+ús	   ƒ9? ¿A)rS   rh   r   Ú_exec_final_callbacks_stubrP   rQ   Úcreate_nodeÚ
create_argr‘   Úrename_aot_dispatcher_nodesÚreorder_accumulate_grad_nodesr>   rË   rt   r   rq   r   r   Úcompiled_autograd_logÚinfor6   r7   r   rM   )rW   r«   Úlazy_graph_coderÞ   rt   rÝ   s       @@r0   Úend_capturez$AutogradCompilerInstance.end_capture'  sM  ù€ Ø�‰×#Ñ#ØÜ&×AÑAØØô		
ð 	�
‰
×ÑÔØ�‰×"Ñ"ØØØ�^‰^×&Ñ& t§}¡}°WÓ'=Ó>Ð@Øô		
ð 	×(Ñ(Ô*Ø×*Ñ*Ô,Ø,.ÐÜ%Ô'Ø%)×%BÑ%BÀ4Ç>Á>×CWÑCWÓ%XÐ"äØ�N‰N×Ñ §¡×!5Ñ!5Ð7Ió
ˆô 	˜E H :Ô.Ü0Ø%ØØØØô
ˆô 	×"Ñ" 4¨Ô9Ü×Ñ˜$ Ô0ÜØ%ÛGõ	
ô
		4ð  × 0Ñ 0°Ó 7Ð7Ð7r/   c           	      ó  — | j                   €ydt        j                  j                  j                  dt        j                  j                  j                  fd„}| j
                  j                  «       D �]Ì  \  }}|d   }|d   }|d   j                  }t        |j                  «      }t        |«      }|€J ‚	 |j                  dk7  rt        |«      }|j                  dk7  rŒ	 t        | j                  j                  j                  «      }	t        |«      D ]  }
t        |	«       Œ t        |	«      }|j                  d	k7  r- |||«      s$t        |	«      }|j                  d	k7  r
 |||«      sŒ$|j                  d	k7  rÃ|j                  d	k7  r´|j                  st        |	«      }Œ6 |||«      st        ‚d
|› d|j                   › �|_        t#        |j$                  «      D ])  \  }}d
|› d|j                   › �|j$                  |   _        Œ+ t        |«      }t        |	«      }|j                  d	k7  r|j                  d	k7  rŒ´�ŒÏ y# t        $ r Y �ŒÝw xY w# t        $ r' t&        j)                  d| j                   |||«       Y �Œw xY w)z­
        Renames nodes as they appear in the AOTDispatcher backward graphs, prefixed by AOT id
        e.g. AOTDispatcher backward graph X's `sin_Y` -> `aotX_sin_Y`
        NÚaÚbc                 ó¼  — | j                   |j                   k(  }|s]t        | j                   d«      xrE t        |j                   d«      xr- | j                   j                  |j                   j                  k(  }|xra | j                  |j                  k(  xrF | j                  |j                  k(  xr+ t        | j                  «      t        |j                  «      k(  S )NÚ__name__)rŠ   Úhasattrrì   Úopr   r¾   Úall_input_nodes)ré   rê   Útarget_matchs      r0   Ú
is_similarzHAutogradCompilerInstance.rename_aot_dispatcher_nodes.<locals>.is_similarb  s¹   € ØŸ8™8 q§x¡xÑ/ˆLÙä˜AŸH™H jÓ1ò ?Ü §¡¨*Ó5ò?àŸ™×)Ñ)¨Q¯X©X×->Ñ->Ñ>ð ð ò EØ—D‘D˜AŸD™D‘LòEà—F‘F˜aŸf™fÑ$òEô ˜×)Ñ)Ó*¬c°!×2CÑ2CÓ.DÑDð	r/   Úca_node_start_idxÚaot_idÚaot_gmrˆ   rÍ   ÚaotÚ_zIFailed to match %s%s (NodeCall %s) nodes with AOT backward graph %s nodes)rm   r)   rr   rÇ   ÚNodern   Úitemsrt   Úiterr»   Únextrî   ÚStopIterationrS   Úranger¼   r`   rv   rï   r6   r7   )rW   rñ   Únodecall_indexrå   rò   ró   Ú	aot_graphÚaot_itÚaot_nodeÚca_itrö   Úca_noderŸ   Úinps                 r0   râ   z4AutogradCompilerInstance.rename_aot_dispatcher_nodesZ  se  € ð
 ×"Ñ"Ð*Øð	œ%Ÿ(™(Ÿ-™-×,Ñ,ð 	´·±·±×1CÑ1Có 	ð %)×$8Ñ$8×$>Ñ$>Ó$@ó 5	Ñ ˆN˜DØ $Ð%8Ñ 9ÐØ˜(‘^ˆFØ˜X™×,Ñ,ˆIô ˜)Ÿ/™/Ó*ˆFÜ˜F“|ˆHØÐ'Ð'Ð'ðØ—k‘k _Ò4Ü# F›|�Hð —k‘k _Ó4ð
&ä˜TŸ^™^×1Ñ1×7Ñ7Ó8�ÜÐ0Ó1ò  �AÜ˜•Kð ä˜u›+�ð —j‘j HÒ,±ZÀÈÔ5Rô # 5›k�Gð —j‘j HÒ,±ZÀÈÕ5Rð —k‘k XÒ-°'·*±*ÀÒ2HØ"Ÿ=š=ä"& u£+˜Ø á% h°Ô8ô ,Ð+à%(¨¨°°(·-±-°Ð#A�G”LÜ"+¨H×,DÑ,DÓ"Eò T™˜˜3Ø<?À¸xÀqÈÏÉÈ
Ð:S˜×/Ñ/°Ñ2Õ7ðTô  $ F›|�HÜ" 5›k�Gð! —k‘k XÒ-°'·*±*ÀÓ2Hùñ;5	øô !ò ÚðûôD !ò Ü×!Ñ!Ø_Ø×+Ñ+ØØ"Ø÷ðús,   Â9)IÃ$B
IÅ/CIÉ	IÉIÉ,JÊJc                 ó>  — | j                   j                  j                  dt        j                  j
                  j                  j                  ¬«      D ]G  }t        |j                  «      }||j                  usŒ'|j                  dk7  sŒ7|j                  |«       ŒI y)a  
        Usage of AOTAutograd causes all the accumulate_grad_ nodes to get pushed to the end of
        the graph.  This differs from eager mode, which schedules them as soon as possible. This
        pass attempts to reorder the graph to mimic eager behavior.
        rˆ   )rî   rŠ   rg   N)rS   rt   Ú
find_nodesr)   ÚopsÚinductorÚaccumulate_grad_ÚdefaultÚmaxr‹   Úprevrî   r’   )rW   rÇ   Úargs      r0   rã   z6AutogradCompilerInstance.reorder_accumulate_grad_nodes¨  sz   € ð —N‘N×(Ñ(×3Ñ3Ø¤u§y¡y×'9Ñ'9×'JÑ'J×'RÑ'Rð 4ó 
ò 	!ˆDô �d—i‘i“.ˆCØ˜$Ÿ)™)Ò#¨¯©°-Ó(?Ø—
‘
˜4Õ ñ	!r/   c                 óª  ‡ — |€y t        |t        «      r|D �cg c]  }‰ j                  |«      ‘Œ c}S t        |t        «      rt        ˆ fd„|D «       «      S t        |t        j
                  «      sJ ‚t        ‰ j                  |«      }t        |t        j                  j                  j                  j                  «      sJ ‚|j                  S c c}w )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr5   )r‘   )ri   r@   rW   s     €r0   rj   z4AutogradCompilerInstance.to_proxy.<locals>.<genexpr>»  s   øè ø€ Ò5¨a˜Ÿ™ q×)Ñ5ùs   ƒ)r[   rº   r‘   r”   r)   r\   r   rS   rr   ÚexperimentalÚproxy_tensorÚ_ProxyTensorr¦   )rW   Útr@   r  s   `   r0   r‘   z!AutogradCompilerInstance.to_proxyµ  s¥   ø€ Øˆ9ØÜ�aœÔØ./Ö0¨�D—M‘M !Õ$Ò0Ð0Ü�aœÔÜÓ5°1Ô5Ó5Ð5ä˜!œUŸ\™\Ô*Ð*Ð*Ü)¨$¯.©.¸!Ó<ˆÜ˜,¬¯©×(=Ñ(=×(JÑ(J×(WÑ(WÔXÐXÐXØ×!Ñ!Ð!ùò 1s   ™Cc                 ó  — t        |t        j                  j                  «      r$t	        t        |«      «      D �cg c]  }||   ‘Œ	 }}t        |«      t        |«      k(  sJ ‚t        ||d | j                  ¬«       y c c}w ©N)ÚconstantÚtracer)r[   r)   rr   r%   rü   r¾   r   rS   )rW   Útensorsr˜   rŸ   s       r0   rw   z0AutogradCompilerInstance.bind_tensors_to_proxiesÂ  sb   € Ü�gœuŸx™xŸ~™~Ô.Ü+0´°W³Ó+>Ö? a�w˜q“zÐ?ˆGÐ?Ü�7‹|œs 7›|Ò+Ð+Ð+Ü˜' 7°TÀ$Ç.Á.ÖQùò @s   »A<Úindexc                 ó†   — | j                   €J ‚| j                   |   }t        «       }t        ||d | j                  ¬«       |S r  )rU   r   r   rS   )rW   r  r¦   Úbw_states       r0   Úbind_backward_statez,AutogradCompilerInstance.bind_backward_stateÈ  sB   € Ø×ÑÐ+Ð+Ð+Ø× Ñ  Ñ'ˆÜ “?ˆÜ˜( E°DÀÇÁÕPØˆr/   Ú	node_namerý   Úpyobjc                 ó–  — d}|�y|j                   }t        |d«      ra|| _        |j                  }t	        | j
                  j                  j                  «      ||j                  j                  dœ| j                  |<   |› |› d|› d�}t        j                  «       j                  «       d   }|j                  d|«      }t        |«       y )NÚ Ú_aot_id)rò   ró   rô   z (NodeCall ú)r°   z:raw_stack_trace = CapturedTraceback.extract().format()[-1])Ú_forward_clsrí   rm   r   r¾   rS   rt   r»   Ú_lazy_backward_infoÚ	bw_modulern   r$   ÚextractÚformatÚreplacer#   )	rW   r  rý   r  Úmaybe_aot_idÚforward_clsÚnew_codeÚraw_stack_traceÚnew_stack_traces	            r0   Úset_node_originz(AutogradCompilerInstance.set_node_originÏ  sÇ   € ð ˆØÐØ×,Ñ,ˆKÜ�{ IÔ.à*3�Ô'Ø*×2Ñ2�ä),¨T¯^©^×-AÑ-A×-GÑ-GÓ)HØ*Ø)×=Ñ=×GÑGñ8�×$Ñ$ ^Ñ4ð  �[  ¨k¸.Ð9IÈÐKˆÜ+×3Ñ3Ó5×<Ñ<Ó>¸rÑBˆØ)×1Ñ1ØHÈ(ó
ˆô 	˜Õ(r/   ©r3   N)!rì   Ú
__module__Ú__qualname__rX   r^   Ústaticmethodr   rZ   r   r)   r\   rz   r   r{   r…   r›   rž   r¡   r¨   rª   r­   rË   rç   râ   rã   r‘   rw   r  Ústrr   ÚautogradÚFunctionr-  r.   r/   r0   rC   rC   =   s   „ óJòCð ð5˜]ò 5ó ð5ð?&à�U—\‘\Ñ"ð?&ð �C‰yð?&ð �e˜C ˜JÑ'Ñ(ó	?&ðB!ð
 ó!òF	
ð°#ó òòòð&&°°c±ó &òP18òfLò\!ò"òRð¨ó ð)àð)ð ð)ð ˜Ÿ™×/Ñ/Ñ0ô	)r/   rC   Fc              #   ó€  K  — t         j                  j                  j                  j	                  t        j                  t        | «      «      }t        «       r7t         j                  j                  j                  j                  t        «       da	 t         j                  j                  d«      5  d –— d d d «       |sdat         j                  j                  j                  j	                  |«       y # 1 sw Y   ŒAxY w# |sdat         j                  j                  j                  j	                  |«       w xY w­w)NTF)r)   Ú_CÚ_dynamor&   Úset_autograd_compilerÚ	functoolsÚpartialrC   r1   Úset_verbose_loggerr8   Úcompiled_autograd_enabledr3  Úset_multithreading_enabled)rM   Úpriors     r0   Úenabler?  ñ  sæ   è ø€ ä�H‰H×Ñ×.Ñ.×DÑDÜ×ÑÔ2°KÓ@ó€Eô (Ô)Ü�‰×Ñ×*Ñ*×=Ñ=Ô>PÔQà $ÐðHÜ�^‰^×6Ñ6°uÓ=ñ 	Û÷	ñ Ø(-Ð%Ü�‰×Ñ×*Ñ*×@Ñ@ÀÕG÷	ð 	ûñ Ø(-Ð%Ü�‰×Ñ×*Ñ*×@Ñ@ÀÕGüs6   ‚BD>ÂD Â1C6Â6D Â>8D>Ã6C?Ã;D Ä9D;Ä;D>c               #   óf  K  — t         j                  j                  j                  j	                  d «      } da	 d –— | rdat         j                  j                  j                  j	                  | «       y # | rdat         j                  j                  j                  j	                  | «       w xY w­w)NFT)r)   r6  r7  r&   r8  r<  )r>  s    r0   ÚdisablerA    s†   è ø€ ä�H‰H×Ñ×.Ñ.×DÑDÀTÓJ€Eà %ÐðHÛáØ(,Ð%Ü�‰×Ñ×*Ñ*×@Ñ@ÀÕGøñ Ø(,Ð%Ü�‰×Ñ×*Ñ*×@Ñ@ÀÕGüs   ‚6B1¹A5 ½8B1Á59B.Â.B1c                  óä   — d} t         rJ ‚t        j                  j                  j                  j                  d «       t        j                  j                  j                  j                  d «       y )NF)rÚ   r)   r6  r7  r&   r8  r;  )Úcompiled_autograd_enables    r0   ÚresetrD    sM   € Ø$ÐÝ*Ð*Ð*Ü	‡H�H×Ñ×&Ñ&×<Ñ<¸TÔBÜ	‡H�H×Ñ×&Ñ&×9Ñ9¸$Õ?r/   r.  )ArN   r9  Útypingr   r   r   r   r   r   r)   Útorch._dynamo.external_utilsr	   r
   r   Útorch._dynamo.sourcer   r   Útorch._dynamo.utilsr   r   r   Útorch._loggingr   r   Útorch._prims_commonr   Útorch._subclassesr   Útorch.fxr   Ú%torch.fx.experimental._backward_stater   Ú"torch.fx.experimental.proxy_tensorr   r   r   r   r   r   r   Ú%torch.fx.experimental.symbolic_shapesr    r!   Útorch.fx.tracebackr"   r#   Útorch.utils._tracebackr$   Útorch.fx.proxyr%   rì   rä   r6   r1   r2  r8   r>   rA   rC   r<  rÚ   Úcontextmanagerr?  rA  rD  r.   r/   r0   ú<module>rT     sõ   ðã Û ß B× Bã ÷ñ ÷
 <ß UÑ Uß >Ý 6Ý ,Ý  Ý ?÷÷ ñ ÷ Gß BÝ 4ñ Ý$ñ *¨(Ð4GÓHÐ Ù Ð*EÓF€òð˜Cð  Dó ò4ò÷j)ñ j)ð\ "Ð ð $Ð ð ×ÑñHó ðHð" ×Ññ	Hó ð	Hô@r/   