Ë
    g^(hýÍ  ã                   ó  — d 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mZ ddl	m
Z
mZmZmZ ddlZddlmc m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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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z:m;Z; ddl<m=Z= ddl>m?Z? erddl@mAZA  e$eBd«      ZC e$eBd«      ZDd„ ZEd„ ZFd„ ZG G d„ d«      ZH G d„ d«      ZI eH«       ZJg d¢ZK e=eeej˜                  ej”                  jš                  jœ                  jž                  g«      ZP ej¢                  «       aRd„ ZS G d„ d «      ZTd!aUd!aVd!aWej°                  d'd"„«       ZYej°                  d#„ «       ZZd(d$„Z[d%„ Z\d&„ Z]y))aò  
Provides functionality for compiling PyTorch's autograd (automatic differentiation) system.

This module implements compiled autograd, which traces and optimizes backward pass
computations at runtime. The key components are:

- AutogradCompilerInstance: Traces and compiles autograd graphs using FX
- Context managers (_enable/_disable): Control when compiled autograd is active
- Utility functions: Support graph manipulation, tensor operations, and hooks

Compiled autograd can significantly improve backward pass performance by removing
Python overhead and enabling additional optimizations. It works by capturing
backward computations into an FX graph that can be compiled and optimized,
while maintaining the same semantics as eager mode autograd.
é    N)ÚCounterÚdefaultdict)ÚAnyÚOptionalÚTYPE_CHECKINGÚUnion)Úcall_backwardÚ	call_hookÚFakeCompiledAutogradEngine©ÚGetItemSourceÚLocalSource)ÚcountersÚget_chromium_event_loggerÚlazy_format_graph_codeÚset_locals_to_steal©Úcompile_contextÚCompileContextÚ	CompileId)Ú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)Ú
OrderedSet)ÚCapturedTraceback)ÚProxyÚcompiled_autogradÚcompiled_autograd_verbosec                  óh   — t         j                  j                  j                  j	                  d«      S )Nr-   )ÚtorchÚ_loggingÚ	_internalÚ	log_stateÚis_artifact_enabled© ó    ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/compiled_autograd.pyÚ snapshot_verbose_logging_enabledr7   F   s(   € Ü�>‰>×#Ñ#×-Ñ-×AÑAØ#óð r5   c                  ó^   — t         j                  j                  j                  j                  S ©N)r/   Ú	_inductorÚconfigÚtritonÚ
cudagraphsr4   r5   r6   Úsnapshot_cudagraph_enabledr>   L   s   € Ü�?‰?×!Ñ!×(Ñ(×3Ñ3Ð3r5   c                 ó    — | �t        | «      S | S r9   r   )Úxs    r6   Úmaybe_clonerA   P   s   € Ø€}Ü% aÓ(Ð(Ø€Hr5   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚOpNamespacec                 ó"   — t        «       | _        y r9   )r   Úcustom_function_name_counter©Úselfs    r6   Ú__init__zOpNamespace.__init__\   s   € Ü:A»)ˆÕ)r5   c                 ó^  ‡— |r1d|z   }| j                   |   }| j                   |xx   dz  cc<   |› |› �}t        | |«      rJ ‚t        |||«      Š|r,t        | |t        j
                  j                  ‰«      «       |S t        j
                  j                  ˆfd„«       }t        | ||«       |S )NÚCppNodeé   c                  ó   •—  ‰| i |¤ŽS r9   r4   )ÚargsÚkwargsÚresults     €r6   Úrun_non_traceable_cpp_in_eagerz7OpNamespace.add.<locals>.run_non_traceable_cpp_in_eagerm   s   ø€ á˜tÐ. vÑ.Ð.r5   )rE   ÚhasattrÚOpÚsetattrr/   Ú_dynamoÚallow_in_graphÚdisable)rG   ÚnameÚfnÚis_custom_functionÚis_traceableÚcountrP   rO   s          @r6   ÚaddzOpNamespace.add_   sº   ø€ ÙØ˜tÑ#ˆDØ×5Ñ5°dÑ;ˆEØ×-Ñ-¨dÓ3°qÑ8Ó3Ø�V˜E˜7Ð#ˆDä˜4 Ô&Ð&Ð&Ü�D˜"Ð0Ó1ˆÙÜ�D˜$¤§¡× <Ñ <¸VÓ DÔEð ˆô �]‰]×"Ñ"ó/ó #ð/ô �D˜$Ð >Ô?Øˆr5   c                 ó   — t        | |«      S r9   )Úgetattr)rG   rW   s     r6   ÚgetzOpNamespace.gett   s   € Ü�t˜TÓ"Ð"r5   N)Ú__name__Ú
__module__Ú__qualname__rH   r\   r_   r4   r5   r6   rC   rC   [   s   „ òDòó*#r5   rC   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)rR   c                 ó<   — || _         || _        || _        d| _        y )Nz#torch._dynamo.compiled_autograd.ops)rX   rY   r`   ra   )rG   rW   rX   rY   s       r6   rH   zOp.__init__y   s   € ØˆŒØ"4ˆÔØˆŒØ?ˆ�r5   c                 ó&   —  | j                   |i |¤ŽS r9   )rX   )rG   rM   rN   s      r6   Ú__call__zOp.__call__   s   € Øˆt�w‰w˜Ð' Ñ'Ð'r5   c                 ó:   — | j                   dz   | j                  z   S )Nú.)ra   r`   rF   s    r6   Ú__repr__zOp.__repr__‚   s   € Ø�‰ Ñ$ t§}¡}Ñ4Ð4r5   N)r`   ra   rb   rH   rf   ri   r4   r5   r6   rR   rR   x   s   „ ò@ò(ó5r5   rR   )ÚinputsÚsizesÚscalarsÚhooksÚpacked_datac           	      óB   — t        t        t        | d d ¬«      «      «      S )N)Úcompiled_autograd_idÚframe_idÚframe_compile_idr   )rp   s    r6   Úmake_compile_contextrs   –   s(   € ÜÜÜØ%9ØØ!%ôó	
óð r5   c                   óJ  — e Zd Zd8d„Zd„ Zedefd„«       Zdee	j                     dee   deeeef      d	eeeeef         fd
„Zdee   fd„Zd„ Zdede	j&                  j(                  j*                  dee   fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z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+ed'„ «       Z,ed(„ «       Z-d)„ Z.d*„ Z/d+„ Z0d,„ Z1d-„ Z2d.„ Z3d/„ Z4d0„ Z5	 d9d	eeeeef         fd1„Z6d2efd3„Z7d4ed5ed6ee	j&                  jp                     fd7„Z9y):ÚAutogradCompilerInstanceÚreturnNc                 ó4  — || _         t        j                  «       | _        | j                  j                  | _        t        «       | _        t        dd| j                  ¬«      | _        t        «       | _
        t        | j                  d«      | _        d | _        y )NT)Úallow_fallback_kernelsÚallow_non_fake_inputsÚ	shape_envÚsymbolic)Úcompiler_fnÚ
contextlibÚ	ExitStackÚstackÚcloser&   rz   r   Úfake_tensor_moder#   Ú	fx_tracerr"   Ú
proxy_modeÚhooks_proxy)rG   r|   s     r6   rH   z!AutogradCompilerInstance.__init__£   st   € Ø&ˆÔÜ×)Ñ)Ó+ˆŒ
Ø—Z‘Z×%Ñ%ˆŒ
Ü!›ˆŒÜ .Ø#'Ø"&Ø—n‘nô!
ˆÔô
 )Ó*ˆŒÜ0°·±ÀÓLˆŒØ,0ˆÕr5   c                 ót   — t        |t        j                  «      sJ ‚| j                  j	                  ||¬«      S )N)Úsource)Ú
isinstancer/   ÚTensorr�   Úfrom_tensor)rG   r@   r†   s      r6   Ú	wrap_fakez"AutogradCompilerInstance.wrap_fake±   s2   € Ü˜!œUŸ\™\Ô*Ð*Ð*Ø×$Ñ$×0Ñ0°¸6Ð0ÓBÐBr5   c                 ó,   — t        t        | «      |«      S r9   r   )rW   Úidxs     r6   r†   zAutogradCompilerInstance.sourceµ   s   € äœ[¨Ó.°Ó4Ð4r5   rj   rk   rl   Úoriginsc                 ó¬	  ‡ — t         d   dxx   dz  cc<   t        t        «      ‰ _        t	        ‰ j                  «      ‰ _        ‰ j
                  j                  «        t        j                  «       ‰ _	        t        «       j                  d‰ j                  d‰ j                  id¬«       d ‰ _        i ‰ _        t        j                  j!                  «       ‰ j"                  _        t        j&                  j)                  t*        ¬«      ‰ j"                  _        i ‰ j"                  _        i ‰ _        ˆ fd„t2        D «       \  }‰ _        ‰ _        ‰ _        ‰ _        ‰ j<                  j?                  tA        «       «       |\  }}}tC        |«      D �	�
cg c]'  \  }	}
‰ jE                  |
‰ jG                  d	|	«      «      ‘Œ) }}	}
‰ jI                  |||«       tC        |«      D �	�cg c]@  \  }	}‰ jJ                  jM                  |‰ jG                  d
|	«      tN        jP                  «      ‘ŒB }}	}‰ jI                  |‰ j4                  |«      }tC        |«      D ]!  \  }}||   ‰ j0                  |jR                  <   Œ# tC        |«      D ]Æ  \  }	}‰ jG                  d|	«      }tU        |tV        «      r/‰ jJ                  jM                  ||tN        jP                  «      ||	<   ŒWtU        |tX        «      rL‰ jJ                  j[                  ‰ jJ                  j]                  ||tN        jP                  ¬«      ||¬«      ||	<   Œ³t_        dta        |«      «      ‚ ‰ jI                  |‰ j6                  |«       tC        |«      D ]+  \  }}‰ j6                  |   ‰ j0                  |jR                  <   Œ- ‰ j<                  j?                  tc        i «      «       ‰ j<                  j?                  ‰ jd                  «       ‰ j<                  j?                  ‰ jf                  «       ‰ j<                  j?                  ti        «       «       ‰ jd                  jJ                  €J ‚‰ jd                  jJ                  }‰ j<                  j?                  t        j&                  jj                  jl                  jo                  |«      «       tq        ts        jt                  «       «      |||fS c c}
}	w c c}}	w )Nr,   ÚcapturesrK   Úgraph_idT©Úlog_pt2_compile_event)Ú
tracer_clsc              3   óZ   •K  — | ]"  }‰j                   j                  d |di «      –— Œ$ y­w)Úplaceholderr4   N)r‚   Úcreate_proxy)Ú.0rW   rG   s     €r6   ú	<genexpr>z9AutogradCompilerInstance.begin_capture.<locals>.<genexpr>×   s.   øè ø€ ò 
àð �N‰N×'Ñ'¨°t¸RÀ×Dñ
ùs   ƒ(+rj   rk   rl   )r†   Údynamic_dim)Úhintr†   zUnexpected scalar type: );r   ÚnextÚCOMPILE_COUNTERÚidrs   r   Ú	__enter__ÚtimeÚtime_nsÚstart_time_nsr   Úlog_event_startÚaot_graph_cls_nameÚaot_graph_infosr/   ÚnnÚModuler‚   ÚrootÚfxÚGraphr#   ÚgraphÚtensor_attrsÚsymnode_proxy_lookupÚ_graph_placeholdersÚsizes_proxyÚscalars_proxyr„   Úpacked_data_proxyr   Úenter_contextr'   Ú	enumeraterŠ   r†   Úbind_objects_to_proxiesrz   Ú$create_unspecified_symint_and_symbolr%   ÚDYNAMICÚnoder‡   ÚintÚfloatÚcreate_symfloatnodeÚcreate_unspecified_symbolÚAssertionErrorÚtyper   r�   rƒ   r   ÚexperimentalÚsymbolic_shapesÚ_suppress_guardsÚstrr   Úcurrent_compile_id)rG   rj   rk   rl   r�   Ú
args_proxyÚinputs_originsÚsizes_originsÚscalars_originsrŒ   r@   ÚvalÚproxiesÚiÚsymintr†   ÚsymvalÚenvs   `                 r6   Úbegin_capturez&AutogradCompilerInstance.begin_capture¹   s'  ø€ ô 	Ð$Ñ% jÓ1°QÑ6Ó1Ü”Ó'ˆŒÜ3°D·G±GÓ<ˆÔØ×Ñ×&Ñ&Ô(Ü!Ÿ\™\›^ˆÔÜ!Ó#×3Ñ3ØØ×ÑØ˜Ÿ™Ð!Ø"&ð	 	4ô 	
ð 26ˆÔØ:<ˆÔÜ#Ÿh™hŸo™oÓ/ˆ�‰ÔÜ$Ÿx™xŸ~™~¼˜~ÓIˆ�‰ÔØ&(ˆ�‰Ô#Ø$&ˆÔ!ó
ä+ô
ñ	
ØØÔØÔØÔØÔ"ð 	�
‰
× Ñ Ô!3Ó!5Ô6Ø9@Ñ6ˆ˜ ô $ FÓ+÷
á��Qð �N‰N˜1˜dŸk™k¨(°CÓ8Õ9ð
ˆñ 
ð 	×$Ñ$ V¨Z¸ÔHô & eÓ,÷
ñ ��Sð �N‰N×?Ñ?ØØ—‘˜G SÓ)Ü×"Ñ"õð
ˆñ 
ð ×.Ñ.¨u°d×6FÑ6FÈÓVˆÜ" 5Ó)ò 	@‰IˆAˆvØ5<¸Q±ZˆD×%Ñ% f§k¡kÒ2ð	@ô " 'Ó*ò 	L‰HˆC�Ø—[‘[ ¨CÓ0ˆFÜ˜#œsÔ#Ø#Ÿ~™~×RÑRØØÜ×&Ñ&ó �˜’ô
 ˜C¤Ô'Ø#Ÿ~™~×AÑAØ—N‘N×<Ñ<ØØ%Ü$.×$6Ñ$6ð =ó ð
 Ø!ð  Bó  �˜’ô %Ð%?ÄÀcÃÓKÐKð'	Lð( 	×$Ñ$ W¨d×.@Ñ.@À/ÔRÜ" 7Ó+ò 	K‰IˆAˆvØ59×5GÑ5GÈÑ5JˆD×%Ñ% f§k¡kÒ2ð	Kð 	�
‰
× Ñ ¤¨2£Ô/Ø�
‰
× Ñ  ×!6Ñ!6Ô7Ø�
‰
× Ñ  §¡Ô1Ø�
‰
× Ñ Ô!7Ó!9Ô:à×$Ñ$×.Ñ.Ð:Ð:Ð:Ø×#Ñ#×-Ñ-ˆØ�
‰
× Ñ Ü�H‰H×!Ñ!×1Ñ1×BÑBÀ3ÓGô	
ô ”×1Ñ1Ó3Ó4ØØØð	
ð 	
ùóm
ùó
s   Æ,S
Ç ASÚcompile_reasonsc                 ó2   ‡— ‰sJ ‚t        dd„ ˆfd„¬«       y )NÚartifactc                  ó   — dddœS )NÚ!compiled_autograd_compile_reasonsÚjson©rW   Úencodingr4   r4   r5   r6   ú<lambda>z>AutogradCompilerInstance.log_compile_reasons.<locals>.<lambda>#  s   € Ø;Ø"ñ!€ r5   c                  ó   •— ‰ S r9   r4   )rÍ   s   €r6   rÕ   z>AutogradCompilerInstance.log_compile_reasons.<locals>.<lambda>'  s   ø€ ˜€ r5   ©Úmetadata_fnÚ
payload_fn)r   )rG   rÍ   s    `r6   Úlog_compile_reasonsz,AutogradCompilerInstance.log_compile_reasons  s"   ø€ ñ ÐˆÜØñó /ö	
r5   c                 óH  ‡ ‡‡‡‡‡— ‰j                  «       D �cg c]  }‰ j                  |«      ‘Œ }}‰j                  }	|	j                  Š|	j                  Š~	t
        j                  j                  ˆˆfd„«       }
‰ j                  j                  d|
||g|¢­i ¬«      Šd Š|�‰ j                  |   Šˆˆˆˆ fd„} |«       }ˆ fd„}t
        j                  j                  j                  j                  ‰‰||¬«      }t        j                   ‰ j                  |«      }|S c c}w )Nc                 óv   •— t        j                  j                  j                  j                  | |‰‰g|¢­Ž }|S r9   )r/   Ú
_functorchÚ_aot_autogradÚruntime_wrappersÚ_backward_prologue_functional)Úctx_saved_tensorsÚctx_symintsÚ	flat_argsÚoutÚmaybe_subclass_metadataÚmetadatas       €€r6   Úcall_aot_bwd_prologuezOAutogradCompilerInstance.proxy_call_aot_backward.<locals>.call_aot_bwd_prologueF  sB   ø€ ä×"Ñ"×0Ñ0×AÑA×_Ñ_Ø!ØØØ'ð	ð
 òˆCð ˆJr5   Úcall_function©ÚkindÚtargetrM   rN   c            	      óÒ  •‡— d„ }  | ‰j                   j                  «      }t        |t        ‰d u«      z
  «      D �cg c]  }‰|   ‘Œ	 }}‰j	                  «       }t        |«      t        ‰j                  «      k(  sJ ‚|D �cg c]  }‰j                  |«      ‘Œ }}||d t        |«       ‰�|j                  ‰«       d}i Šd }‰j                   j                  j                  D �]™  }	|	j                  dk(  r||   j                  ‰|	<   |dz  }Œ+|	j                  dk(  rˆt        |	j                  «      dk(  sJ ‚|	j                  d   D �
cg c]U  }
t        |
t        j                  j                   «      r-t        j                  j#                  ‰|
   ‰j$                  «      n|
‘ŒW }}
ŒÂ|	j                  dk(  r�|	j&                  }‰j$                  j)                  |«      }t+        ‰j$                  j,                  |t/        ‰j                   |«      «       ‰j$                  j1                  d|di «      }|‰|	<   �ŒR|	j                  dk(  r0‰j$                  j                  j3                  |	ˆfd	„«      }|‰|	<   �Œ‘t5        d
«      ‚ |€J ‚d„ }|D �cg c]/  }t        |t        j                  j"                  «      r |«       n|‘Œ1 }}‰j7                  ||«       |S c c}w c c}w c c}
w c c}w )Nc                 óZ   — d}| j                   D ]  }|j                  dk(  r|dz  }Œ |S  |S )Nr   r•   rK   )ÚnodesÚop)rª   Únum_argsr¶   s      r6   Ú
num_inputszkAutogradCompilerInstance.proxy_call_aot_backward.<locals>.copy_paste_aot_backward_graph.<locals>.num_inputsb  sA   € Ø�Ø!ŸK™Kò �DØ—w‘w -Ò/Ø  A™˜Ø àØ�ðð  �r5   r   r•   rK   ÚoutputÚget_attrr4   rè   c                 ó   •— ‰|    S r9   r4   )ÚnÚvalue_remaps    €r6   rÕ   ziAutogradCompilerInstance.proxy_call_aot_backward.<locals>.copy_paste_aot_backward_graph.<locals>.<lambda>–  s   ø€ ¨°A©€ r5   zshouldn't get herec                  ót   — t        «       5  t        j                  ddddd«      cd d d «       S # 1 sw Y   y xY w)Nr   é{   ©r    r/   Úzerosr4   r5   r6   ÚdummyzfAutogradCompilerInstance.proxy_call_aot_backward.<locals>.copy_paste_aot_backward_graph.<locals>.dummyŸ  s1   € Ü0Ó2ñ 8Ü Ÿ;™; q¨!¨Q°°3Ó7÷8÷ 8ò 8ús   ‹.®7)Ú
_bw_modulerª   Úranger·   Ú_get_compiled_autograd_symintsÚlenÚsymintsÚto_proxyÚappendrî   rï   r¶   rM   r‡   r/   r¨   ÚNoder+   r‚   rë   Úget_fresh_qualnamerS   r§   r^   Úcreate_nodeÚ	node_copyr»   r³   )rñ   rð   rÈ   Ú	pall_argsr   ÚeÚpsymintsÚargs_idxÚpoutputsr¶   rõ   rW   ÚqualnamerO   rû   ÚoÚoutputsrö   ÚctxÚpbackward_stateÚpgradsrG   s                    @€€€€r6   Úcopy_paste_aot_backward_graphzWAutogradCompilerInstance.proxy_call_aot_backward.<locals>.copy_paste_aot_backward_grapha  sÂ  ù€ ò ñ " #§.¡.×"6Ñ"6Ó7ˆHä#(¨´C¸ÈtÐ8SÓ4TÑ)TÓ#UöØ��q“	ðˆIð ð ×8Ñ8Ó:ˆGÜ�w“<¤3 s§{¡{Ó#3Ò3Ð3Ð3Ø29Ö:¨Q˜Ÿ™ aÕ(Ð:ˆHÐ:Ø(0ˆI�nœ˜G›Ð%àÐ*Ø× Ñ  Ô1ð ˆHØˆKØ7;ˆHØŸ™×,Ñ,×2Ñ2ó ?�Ø—7‘7˜mÒ+Ø(1°(Ñ(;×(@Ñ(@�K Ñ%Ø ‘M‘HØ—W‘W Ò(Ü˜tŸy™y›>¨QÒ.Ð.Ð.ð
 "&§¡¨1¡ö	 ð ô & a¬¯©¯©Ô7ô Ÿ™Ÿ™ {°1¡~°t·~±~ÔFàñð �Hñ  ð —W‘W 
Ò*ØŸ;™;�DØ#Ÿ~™~×@Ñ@ÀÓF�HÜØŸ™×+Ñ+¨X´w¸s¿~¹~ÈtÓ7Tôð "Ÿ^™^×7Ñ7¸
ÀHÈbÐRTÓU�FØ(.�K Ó%Ø—W‘W Ò/Ø!Ÿ^™^×1Ñ1×;Ñ;ØÓ6ó�Fð )/�K Ó%ä(Ð)=Ó>Ð>ð5?ð6 Ð'Ð'Ð'ò8ð
 JRöØDEœ: a¬¯©¯©Ô8‘”¸aÑ?ðˆGð ð ×(Ñ(¨°(Ô;ØˆNùòqùò ;ùò" ùò:s   ½KÂKÅAKÊ4K$c                 ó*  •‡ ‡— t         j                  j                  ˆˆ fd„«       }t        j                  ‰j
                  |«      }‰j                  j                  d|t        |«      i ¬«      }‰j                  «       }‰j                  |g|g«       |S )Nc                  ó*   •— ‰j                  | ‰¬«      S )N)Ú
is_runtime)Úcreation_fn)Úunwrapped_argsr  Úsubclass_metas    €€r6   Úmake_subclasszkAutogradCompilerInstance.proxy_call_aot_backward.<locals>.proxy_subclass_constructor.<locals>.make_subclass¬  s   ø€ à$×0Ñ0°ÈJÐ0ÓWÐWr5   rè   ré   )r/   rT   rU   ÚpytreeÚtree_mapr  r‚   r–   ÚtupleÚallocate_dummyr³   )r  r  r  r  Úpunwrapped_argsÚpoutputrò   rG   s   ``     €r6   Úproxy_subclass_constructorzTAutogradCompilerInstance.proxy_call_aot_backward.<locals>.proxy_subclass_constructor«  sŠ   ú€ Ü�]‰]×)Ñ)ôXó *ðXô %Ÿo™o¨d¯m©m¸^ÓLˆOà—n‘n×1Ñ1Ø$Ø$Ü˜?Ó+Øð	 2ó ˆGð ×(Ñ(Ó*ˆFØ×(Ñ(¨&¨°G°9Ô=ØˆMr5   )Úmake_subclass_override)rþ   r  Ú_forward_clsræ   rå   r/   rT   rU   r‚   r–   r„   rÝ   rÞ   rß   Ú_backward_epilogue_functionalr  r  )rG   ÚpinputsÚpsaved_tensorsÚsaved_tensorsÚpctxr  Úmaybe_backward_state_idxr  r	  ÚCompiledFunctionrç   r  r  r   ÚresultsÚpresultsrå   ræ   r  r  s   `    `          @@@@r6   Úproxy_call_aot_backwardz0AutogradCompilerInstance.proxy_call_aot_backward*  s5  ý€ ð( /2×.PÑ.PÓ.RÖS¨�D—M‘M !Õ$ÐSˆÐSð ×+Ñ+ÐØ#×,Ñ,ˆØ"2×"JÑ"JÐØä	�‰×	%Ñ	%ô	ó 
&ð	ð —‘×,Ñ,Ø Ø(àØðð ñð
 ð -ó 	
ˆð ˆØ#Ð/Ø"×.Ñ.Ð/GÑHˆO÷F	ñP 0Ó1ˆô	ô$ ×"Ñ"×0Ñ0×AÑA×_Ñ_ØØ#ØØ#=ð	 `ó 
ˆô —?‘? 4§=¡=°'Ó:ˆØˆùòM Ts   ™DÚbackward_idxr  r(  c           
      óx  — | j                   €J ‚| j                   |   }| j                  |«      }| j                  |«      }	t        |j                  d«      r| j	                  ||	||||«      }
n(| j
                  j                  dt        ||	g|¢­i ¬«      }
|
€J ‚t        «       5  g }t        |«      D ]M  \  }}|�|
|   €|j                  d «       Œ|\  }}}}|j                  t        j                  ||||¬«      «       ŒO | j                  ||
«       d d d «       t        |«      S # 1 sw Y   t        «      S xY w)NÚ_aot_idrè   ré   )ÚsizeÚdtypeÚlayoutÚdevice)r„   r  rQ   r"  r,  r‚   r–   r	   r    r²   r  r/   Úemptyr³   r  )rG   rj   Úoutput_metadatasr&  r-  r  r(  r'  r$  r%  rÇ   Úgrad_insrŒ   Úoutput_metadatar2  r3  r1  r0  s                     r6   Úproxy_call_backwardz,AutogradCompilerInstance.proxy_call_backwardÆ  sf  € ð ×ÑÐ+Ð+Ð+Ø×Ñ Ñ-ˆØ—-‘- Ó'ˆØŸ™ }Ó5ˆÜ�3×#Ñ# YÔ/à×2Ñ2ØØØØØØ(ó‰Gð —n‘n×1Ñ1Ø$Ü$àØ"ðð ñð
 ð 2ó 	ˆGð Ð"Ð"Ð"ä(Ó*ñ 	<à57ˆHÜ(1Ð2BÓ(Cò Ñ$��_Ø"Ð*¨g°c©lÐ.BØ—O‘O DÔ)Øà.=Ñ+�˜  tØ—‘Ü—K‘K T°¸vÈfÔUõðð ×(Ñ(¨°7Ô;÷	<ô �X‹Ð÷	<ô �X‹Ðús   Â#A0D&Ä&D9c                 óò   — ||j                  «       |j                  «       |j                  «       |j                  «       |j                  «       |j                  «       f}| j                  t        |d gdz  «      S )Né   )rk   ÚstridesÚstorage_offsetÚ
proxy_callÚcopy_slices_prologue)rG   rj   ÚbaseÚviewrM   s        r6   Úcall_copy_slices_prologuez2AutogradCompilerInstance.call_copy_slices_prologueù  sd   € àØ�J‰J‹LØ�L‰L‹NØ×ÑÓ!Ø�J‰J‹LØ�L‰L‹NØ×ÑÓ!ð
ˆð �‰Ô3°T¸D¸6ÀA¹:ÓFÐFr5   c                 óR   — | j                  t        ||||fd gt        |«      z  «      S r9   )r=  Úcopy_slices_epiloguerÿ   )rG   Úneeds_input_gradrO   ÚresÚ
grad_slices        r6   Úcall_copy_slices_epiloguez2AutogradCompilerInstance.call_copy_slices_epilogue  s2   € Ø�‰Ü Ø˜v s¨JÐ7ØˆF”SÐ)Ó*Ñ*ó
ð 	
r5   c                 óp   — t        «       5  t        j                  ddg«      cd d d «       S # 1 sw Y   y xY w)Nr   iÍ[rù   rF   s    r6   r  z'AutogradCompilerInstance.allocate_dummy  s-   € Ü(Ó*ñ 	/ä—;‘;  9˜~Ó.÷	/÷ 	/ò 	/ús   ‹,¬5c                 ó2   — t         j                  ||||«      S )zBinds ops.fn_name = fn)Úopsr\   )rG   Úfn_namerX   rY   rZ   s        r6   Úbind_functionz&AutogradCompilerInstance.bind_function  s   € ä�w‰w�w Ð$6¸ÓEÐEr5   c                 óZ   — t         j                  |«      }| j                  ||g|¢­|«      S )z:Proxies a call to ops.fn_name(grads, *args) into the graph)rJ  r_   r=  )rG   rK  ÚgradsrM   r7  rï   s         r6   Úapply_functionalz)AutogradCompilerInstance.apply_functional  s)   € ä�W‰W�WÓˆØ�‰˜r E >¨D¡>°?ÓCÐCr5   c                 ó`  ‡ — t        j                  |«      \  }}t        j                  ˆ fd„|«      }‰ j                  j	                  d||i ¬«      }|D �cg c]  }‰ j                  «       ‘Œ }}‰ j                  |t        t        |«      «      D �	cg c]  }	||	   ‘Œ	 c}	«       |S c c}w c c}	w )z*Proxies a call to fn(*args) into the graphc                 ó&   •— ‰j                  | «      S r9   ©r  )r  rG   s    €r6   rÕ   z5AutogradCompilerInstance.proxy_call.<locals>.<lambda>  s   ø€ ¨t¯}©}¸QÓ/?€ r5   rè   ©rM   rN   )	r  Útree_flattenr  r‚   r–   r  r³   rý   rÿ   )
rG   rX   rM   r7  rã   Ú_Ú
proxy_argsÚ	proxy_outrO   rÈ   s
   `         r6   r=  z#AutogradCompilerInstance.proxy_call  sŸ   ø€ ä×*Ñ*¨4Ó0‰ˆ	�1Ü—_‘_Ó%?ÀÓFˆ
Ø—N‘N×/Ñ/Ø˜R j¸ð 0ó 
ˆ	ð 2AÖA¨A�$×%Ñ%Õ'ÐAˆÐAØ×$Ñ$ VÄEÌ#ÈfË+ÓDVÖ-W¸q¨i¸«lÒ-WÔXØˆùò BùÚ-Ws   ÁB&ÂB+
c                 ó  — t         j                  d«      }t        j                  | j                  |g|¢­«      }| j
                  j                  d||i ¬«      }t        |«      t        |«      k(  sJ ‚| j                  ||«       |S )zEProxies a call to ops.validate_outputs(outputs, *args) into the graphÚvalidate_outputsrè   rS  )	rJ  r_   r  r  r  r‚   r–   rÿ   r³   )rG   rU  r  rM   r7  rï   rV  Únew_proxy_outputss           r6   rY  z)AutogradCompilerInstance.validate_outputs%  s   € ä�W‰WÐ'Ó(ˆÜ—_‘_ T§]¡]°WÐ4D¸tÑ4DÓEˆ
Ø ŸN™N×7Ñ7Ø˜R j¸ð 8ó 
Ðô �?Ó#¤s¨7£|Ò3Ð3Ð3Ø×$Ñ$ WÐ.?Ô@Øˆr5   c                 óð   — | j                  |«      }| j                  |«      }| j                  j                  dt        j                  ||fi ¬«      }| j                  «       }| j                  |g|g«       |S )Nrè   rS  )r  r‚   r–   r/   r\   r  r³   )rG   Úold_varÚnew_varÚold_var_proxyÚnew_var_proxyrW  rO   s          r6   Ú
accumulatez#AutogradCompilerInstance.accumulate0  ss   € ØŸ™ gÓ.ˆØŸ™ gÓ.ˆØ—N‘N×/Ñ/ØœUŸY™Y¨m¸]Ð-KÐTVð 0ó 
ˆ	ð ×$Ñ$Ó&ˆØ×$Ñ$ f X°	¨{Ô;Øˆr5   c                 ó’   — | j                   j                  dt        |g|D �cg c]  }| j                  |«      ‘Œ c}¢­|«      S c c}w ©Nrè   )r‚   r–   r
   r  )rG   ÚhookrM   rN   r@   s        r6   Úproxy_call_hookz(AutogradCompilerInstance.proxy_call_hook:  sM   € Ø�~‰~×*Ñ*ØÜàðà,0Ö1 q�$—-‘- Õ"Ò1ñð ó
ð 	
ùò
 2s   ¢Ac                 óÎ   — | j                   €J ‚| j                   |   }| j                  |   }| j                  ||d¬«      }| j                  «       }| j	                  |g|g«       |S )NÚunpack_hook©Ú	hook_type)r„   r°   rd  r  r³   )rG   Úhook_idÚdata_idrc  ÚdataÚproxyrä   s          r6   rf  z$AutogradCompilerInstance.unpack_hookE  s{   € Ø×ÑÐ+Ð+Ð+Ø×Ñ Ñ(ˆØ×%Ñ% gÑ.ˆØ×$Ñ$ØØØ#ð %ó 
ˆð
 ×!Ñ!Ó#ˆØ×$Ñ$ c U¨U¨GÔ4Øˆ
r5   rÈ   c                 óþ   — | 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_hookrg  ©r„   rd  r    rA   r³   )rG   rj   ri  rÈ   rc  rl  s         r6   rn  z(AutogradCompilerInstance.tensor_pre_hookR  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_hookrg  ro  )rG   rj   ri  rc  rÇ   r@   s         r6   rq  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_hookrg  ro  )rG   r  rj   ri  rc  rÇ   r@   s          r6   rs  z"AutogradCompilerInstance.post_hookl  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_hookrg  )r‡   r/   rˆ   r„   rd  r    rA   r³   )rG   Úinputri  rc  rl  s        r6   ru  z+AutogradCompilerInstance.post_acc_grad_hookz  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        t        «      }||   |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Œ¼|
||	<   ŒÂ |rn|j                  «       D ]B  }
t        j                  d|
«       |
j                  d   j!                  «       |
j                  d<   ŒD t        |j	                  «       «      S g S )NFr   rj   rK   éÿÿÿÿrÆ   ÚcudaTÚcpuc              3   ó  K  — | ]�  }t        |j                  t        j                  j                  «      xr |j                  j
                  d v xs3 t        |j                  t        «      xr |j                  j                   –— Œƒ y­w))ÚprimsÚatenN)r‡   rë   r/   Ú_opsÚ
OpOverloadÚ	namespacerR   rY   ©r—   Úusers     r6   r˜   zDAutogradCompilerInstance.move_graph_nodes_to_cuda.<locals>.<genexpr>¤  sw   è ø€ ò 
ð ô # 4§;¡;´·
±
×0EÑ0EÓFò GØ ŸK™K×1Ñ1Ð5FÐFòô
 # 4§;¡;´Ó3ò ?Ø $§¡× >Ñ >Ð>óñ
ùs   ‚BB	zMoving node %s from cpu to cuda)Úlistrî   rë   ÚusersÚkeysrÿ   r­   r²   Úmetar3  r¼   r0  ÚallÚvaluesÚverbose_logÚdebugry  )rG   rª   Úto_moveÚhas_cuda_inputsrî   rj   Úinputs_usersÚfirst_getitem_idxÚlast_getitem_idxrÈ   r¶   Úis_cpuÚ	is_scalarÚ
node_userss                 r6   Úmove_graph_nodes_to_cudaz1AutogradCompilerInstance.move_graph_nodes_to_cuda�  sÁ  € Ø,.ˆØˆÜ�U—[‘[Ó!ˆØ�Q‰x�‰ (Ò*Ð*Ð*Ø�q‘ˆÜ˜FŸL™L×-Ñ-Ó/Ó0ˆäÔ 3Ó4ÐØÐ&Ñ'¨<¸©?Ò:Ð:Ð:Ø,¬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ð-	&ñ4 ØŸ™Ó(ò ;�Ü×!Ñ!Ð"CÀTÔJØ#'§9¡9¨UÑ#3×#8Ñ#8Ó#:�—	‘	˜%Ò ð;ô
 ˜Ÿ™›Ó'Ð'àˆ	r5   c                 ó@  — t        |t        j                  j                  «      xry |j                  dk(  xrh |j
                  t        j                  j                  j                  j                  t        j                  j                  j                  j                  fv S rb  )r‡   r/   r¨   r  rï   rë   rJ  r}  Úsym_sizer·   Ú	sym_numelÚdefault)rG   r¶   s     r6   Úis_sym_nodez$AutogradCompilerInstance.is_sym_node¾  sn   € ä�tœUŸX™XŸ]™]Ó+ò OØ—‘˜?Ñ*òOà—‘Ü—	‘	—‘×'Ñ'×+Ñ+¬U¯Y©Y¯^©^×-EÑ-E×-MÑ-MÐNðOð	
r5   c                 ó2  ‡— t        «       Št        | j                  j                  j	                  d¬«      «      D ].  \  }}‰j                  |j                  j                  «       «       Œ0 t        t        «      dz
  k(  sJ ‚ˆfd„}t        | j                  j                  j                  «      }| j                  j                  j                  |«       t        | j                  j                  j                  «      }t        j                  d||z
  «       y )Nr•   )rï   rK   c                 óš   •— | ‰v xsE | j                   dk(  xs4 | j                   dk(  xs# | j                   dk(  xr | j                  t        v S )Nr•   rò   rè   )rï   rë   Ú_impure_targets)r¶   Úunpack_nodess    €r6   Ú	is_impurez/AutogradCompilerInstance.dce.<locals>.is_impureÐ  sV   ø€ à˜Ð$ò SØ—7‘7˜mÑ+òSà—7‘7˜hÑ&òSð —G‘G˜Ñ.ÒQ°4·;±;Ä/Ð3Qð	r5   zDCE removed %d nodes)r)   r²   r‚   rª   Ú
find_nodesÚupdater„  r…  rÿ   r­   rî   Úeliminate_dead_coder‰  rŠ  )rG   rÈ   r¶   r�  ÚbeforeÚafterrœ  s         @r6   ÚdcezAutogradCompilerInstance.dceÆ  sÖ   ø€ ô
 3=³,ˆÜ  §¡×!5Ñ!5×!@Ñ!@ÀMÐ!@Ó!RÓSò 	3‰GˆAˆtØ×Ñ §
¡
§¡Ó 1Õ2ð	3à”CÔ+Ó,¨qÑ0Ò0Ð0Ð0ô	ô �T—^‘^×)Ñ)×/Ñ/Ó0ˆØ�‰×Ñ×0Ñ0°Ô;Ü�D—N‘N×(Ñ(×.Ñ.Ó/ˆÜ×ÑÐ0°&¸5±.ÕAr5   c                 ól   — t        | j                  j                  | j                  j                  |«      S r9   )r   r‚   r§   rª   )rG   r�   s     r6   Úcreate_graph_modulez,AutogradCompilerInstance.create_graph_moduleÝ  s%   € Ü˜4Ÿ>™>×.Ñ.°·±×0DÑ0DÀbÓIÐIr5   c           	      ó>  ‡ ‡‡— ‰ j                   j                  dt        j                  di «       ‰ j                  j                  «        ‰ j                   j                  dd‰ j                   j                  ‰ j                  |«      «      fi «       g Št        «       r%‰ j                  ‰ j                   j                  «      Š‰ j                   j                  j                  D ]%  }dD ]  }||j                  v sŒ|j                  |= Œ  Œ' t        dd„ ˆ fd„¬«       ‰ j                  «        ‰ j!                  «        ‰ j#                  «        ‰ j%                  «        ‰ j'                  «        ‰ j)                  «        ‰ j+                  «        ‰ j-                  «        ‰ j/                  «        ‰ j1                  d	‰ j2                  › �«      Št5        ‰d
g«       t7        d‰ddd¬«      }t8        j;                  d|«       t<        j?                  d|«       t        dˆfd„¬«       ˆˆ fd„}tA        «       jC                  dtE        jF                  «       d‰ j2                  i‰ jH                  d¬«       ‰ jJ                  jM                  d d d «       |‰ jO                  ‰«      fS )Nrè   r4   rò   )Útensor_metaÚexample_valuerÆ   rÏ   c                  ó   — dddœS )NÚ&compiled_autograd_graph_pre_reorderingÚstringrÓ   r4   r4   r5   r6   rÕ   z6AutogradCompilerInstance.end_capture.<locals>.<lambda>ü  s   € Ø@Ø$ñ!€ r5   c                  óª   •— t        ‰ j                  j                  ‰ j                  j                  d‰ j                  › d�«      j                  d¬«      S )NÚCompiledAutogradÚPreReorderingF©Úprint_output)r   r‚   r§   rª   r�   Úprint_readablerF   s   €r6   rÕ   z6AutogradCompilerInstance.end_capture.<locals>.<lambda>   sG   ø€ œ{Ø—‘×#Ñ#Ø—‘×$Ñ$Ø" 4§7¡7 )¨=Ð9ó ÷ ‰n¨%ˆnÓ0ð	 r5   r×   r­  rj   zCompiled autograd graphT)Úinclude_deviceÚinclude_strideÚcoloredz%sÚcompiled_autograd_graphc                  ó(   •— ‰ j                  d¬«      S )NFr¯  )r±  )rª   s   €r6   rÕ   z6AutogradCompilerInstance.end_capture.<locals>.<lambda>'  s   ø€ ˜u×3Ñ3ÀÐ3ÓG€ r5   )rÙ   c           	      ó>  •— 	 da ‰D ](  }||   j                  «       j                  d¬«      ||<   Œ* t        «       5  t	        ‰j
                  «      5   | |||||«      cd d d «       cd d d «       da S # 1 sw Y   nxY wd d d «       da y # 1 sw Y   da y xY w# da w xY w)NT)Únon_blockingF)Úin_compiled_autograd_regionÚ
pin_memoryry  Ú_disablers   r�   )	Úcompiled_fnrj   rk   rl   rm   Úpacked_inputsrÈ   Úruntime_inputs_to_moverG   s	          €€r6   Úruntime_wrapperz=AutogradCompilerInstance.end_capture.<locals>.runtime_wrapper*  s¼   ø€ ð4Ø.2Ð+Ø/ò O�AØ & q¡	× 4Ñ 4Ó 6× ;Ñ ;ÈÐ ;Ó N�F˜1’IðOô “Zñ UÔ!5°d·g±gÓ!>ñ UÙ& v¨u°g¸uÀmÓT÷U÷ Uñ Uð /4Ñ+÷Uð Uú÷ Uð /4Ñ+÷Uð /4Ñ+û¨eÑ+úsF   ƒ9B ¼B
ÁA3Á	B
Á'	B Á3A<	Á8B
Á?B Â
BÂB ÂB ÂBr,   r�   r‘   )(r‚   r–   r   Ú_exec_final_callbacks_stubr   r€   r  Ú
create_argr  r>   r“  rª   rî   r†  r   Úrename_aot_dispatcher_nodesÚdelay_unpack_hook_nodesÚreorder_tensor_pre_hook_nodesÚ'reorder_pre_hook_nodes_to_schedule_asapÚreorder_accumulate_grad_nodesÚ%reorder_pre_hook_nodes_to_mimic_eagerÚ reorder_post_acc_grad_hook_nodesÚreorder_post_hook_nodesr£  r¥  r�   r   r   Úcompiled_autograd_logÚinfor‰  rŠ  r   Úlog_event_endrŸ   r    r¡   r   Ú__exit__r|   )rG   r  r¶   ÚfieldÚlazy_graph_coder¿  rª   r¾  s   `     @@r6   Úend_capturez$AutogradCompilerInstance.end_captureà  sI  ú€ Ø�‰×#Ñ#ØÜ&×AÑAØØô		
ð 	�
‰
×ÑÔØ�‰×"Ñ"ØØØ�^‰^×&Ñ& t§}¡}°WÓ'=Ó>Ð@Øô		
ð -/ÐÜ%Ô'Ø%)×%BÑ%BÀ4Ç>Á>×CWÑCWÓ%XÐ"ð
 —N‘N×(Ñ(×.Ñ.ò 	)ˆDØ@ò )�Ø˜DŸI™IÒ%ØŸ	™	 %Ñ(ñ)ð	)ô
 	Øñó1õ	
ð 	×(Ñ(Ô*Ø×$Ñ$Ô&Ø×*Ñ*Ô,Ø×4Ñ4Ô6Ø×*Ñ*Ô,Ø×2Ñ2Ô4Ø×-Ñ-Ô/Ø×$Ñ$Ô&ð 	�‰Œ
à×(Ñ(Ð+;¸D¿G¹G¸9Ð)EÓFˆÜ˜E H :Ô.Ü0Ø%ØØØØô
ˆô 	×"Ñ" 4¨Ô9Ü×Ñ˜$ Ô0ÜØ%ÛGõ	
õ

	4ô 	"Ó#×1Ñ1ØÜ�L‰L‹NØ˜Ÿ™Ð!Ø×ÑØ"&ð 	2ô 	
ð 	×Ñ×%Ñ% d¨D°$Ô7Ø × 0Ñ 0°Ó 7Ð7Ð7r5   c           	      ón  — | j                   €ydt        j                  j                  j                  dt        j                  j                  j                  fd„}t        t        «      }| j                  j                  «       D �]ì  \  }}|d   }|d   }d}|d   j                  }||   rd	||   › �}||xx   d
z  cc<   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 �Œ0w 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ÚcaÚaotc                 ó  — | j                   |j                   k(  }|s]t        | j                   d«      xrE t        |j                   d«      xr- | j                   j                  |j                   j                  k(  }|s¦t        | j                   d«      r�t        |j                   d«      rz|j                   j                  «       dk(  r]t        |j                  j                  d«      d«      r8| j                   j                  «       |j                  d   j                  «       k(  }|xra | j                  |j                  k(  xrF | j                  |j                  k(  xr+ t        | j                  «      t        |j                  «      k(  S )Nr`   rW   zaten::reshapeÚoriginal_aten)
rë   rQ   r`   rW   r†  r_   rï   r¼   rÿ   Úall_input_nodes)rÒ  rÓ  Útarget_matchs      r6   Ú
is_similarzHAutogradCompilerInstance.rename_aot_dispatcher_nodes.<locals>.is_similarH  s1  € àŸ9™9¨¯
©
Ñ2ˆLÙô ˜BŸI™I zÓ2ò BÜ §
¡
¨JÓ7òBàŸ	™	×*Ñ*¨c¯j©j×.AÑ.AÑAð ñ !Ü˜BŸI™I vÔ.Ü˜CŸJ™J¨Ô/Ø—J‘J—O‘OÓ%¨Ò8Ü˜CŸH™HŸL™L¨Ó9¸6ÔBð  "Ÿy™yŸ~™~Ó/°3·8±8¸OÑ3L×3QÑ3QÓ3SÑS�ð ò HØ—E‘E˜SŸV™V‘OòHà—G‘G˜sŸx™xÑ'òHô ˜×*Ñ*Ó+¬s°3×3FÑ3FÓ/GÑGð	r5   Úca_node_start_idxÚaot_idÚ Úaot_gmrU  rK   rè   rò   zIFailed to match %s%s (NodeCall %s) nodes with AOT backward graph %s nodes)r£   r/   r¨   r¶   r  r   r·   r¤   Úitemsrª   Úiterrî   r›   rï   ÚStopIterationr‚   rý   r„  rW   r²   rÖ  r‰  rŠ  )rG   rØ  Úaot_id_counterÚnodecall_indexrË  rÙ  rÚ  Úaot_id_postfixÚ	aot_graphÚaot_itÚaot_nodeÚca_itrU  Úca_noderÈ   Úinps                   r6   rÂ  z4AutogradCompilerInstance.rename_aot_dispatcher_nodes@  s±  € ð
 ×"Ñ"Ð*Øð	œ5Ÿ8™8Ÿ=™=×-Ñ-ð 	´E·H±H·M±M×4FÑ4Fó 	ô8 *5´SÓ)9ˆØ$(×$8Ñ$8×$>Ñ$>Ó$@ó ;	Ñ ˆN˜DØ $Ð%8Ñ 9ÐØ˜(‘^ˆFØˆNØ˜X™×,Ñ,ˆIØ˜fÒ%Ø#$ ^°FÑ%;Ð$<Ð!=�Ø˜6Ó" aÑ'Ó"ô ˜)Ÿ/™/Ó*ˆ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£+˜Ø á% g¨xÔ8ô ,Ð+à%(¨¨°Ð0@ÀÀ(Ç-Á-ÀÐ#Q�G”LÜ"+¨H×,DÑ,DÓ"Eò K™˜˜3ð $' v h¨~Ð.>¸aÀÇÁ¸zÐ!Jð  ×/Ñ/ØñåðKô
  $ F›|�HÜ" 5›k�Gð% —k‘k XÒ-°'·*±*ÀÓ2HùñC;	øô  !ò ÚðûôH !ò Ü×!Ñ!Ø_Ø×+Ñ+ØØ"Ø÷ðús,   Ã$)I4ÄB
JÆCJÉ4	JÊ JÊ,J4Ê3J4c                 óz   — | D �cg c]*  }t        |«      t        j                  j                  u sŒ)|‘Œ, }}|S c c}w r9   )r¼   r/   r¨   r  )rM   rõ   rî   s      r6   Úget_all_nodesz&AutogradCompilerInstance.get_all_nodes¢  s4   € ð !Ö=�q¤D¨£G¬u¯x©x¯}©}Ò$<’Ð=ˆÐ=Øˆùò >s   …*8°8c                 ó´   — | j                   dk(  sH| j                   dk(  r:| j                  t        j                  k(  r| j                  d   j                   dk(  ryy)Nr•   rè   r   TF)rï   rë   ÚoperatorÚgetitemrM   )r¶   s    r6   Úis_placeholderz'AutogradCompilerInstance.is_placeholder¨  sF   € à�7‰7�mÒ#Ø�G‰G�Ò&Ø—‘œx×/Ñ/Ò/Ø—	‘	˜!‘—‘ =Ò0àØr5   c                 óö  — | j                   j                  j                  dt        j                  j
                  j                  j                  ¬«      D ]£  }|j                  d   |j                  d   }}d}|j                  t        j                  k(  r|}|j                  d   }t        ||g«      }||j                  usŒm| j                  |«      rŒ|j                  |«       |€Œ“|j                  |«       Œ¥ 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ë   r   rK   N)r‚   rª   rž  r/   rJ  ÚinductorÚaccumulate_grad_r—  rM   rë   rì  rí  ÚmaxÚprevrî  r  )rG   r¶   Ú
param_nodeÚ	grad_nodeÚgetitem_nodeÚargs         r6   rÆ  z6AutogradCompilerInstance.reorder_accumulate_grad_nodes²  s×   € ð —N‘N×(Ñ(×3Ñ3Ø¤u§y¡y×'9Ñ'9×'JÑ'J×'RÑ'Rð 4ó 
ò 	-ˆDð %)§I¡I¨a¡L°$·)±)¸A±,˜	ˆJØˆLØ×Ñ¤8×#3Ñ#3Ò3Ø(�Ø(×-Ñ-¨aÑ0�	ä�z 9Ð-Ó.ˆCØ˜$Ÿ)™)Ò#¨D×,?Ñ,?ÀÕ,DØ—
‘
˜4Ô ØÑ+Ø—J‘J˜|Õ,ñ	-r5   c                 óð   — | j                   j                  j                  dt        ¬«      D ]H  }|j                  j                  dd«      dk7  rŒ#t        |j                  «      }|j                  |«       ŒJ y)zp
        We can delay unpack hooks until they are needed, even later than in the eager autograd engine.
        rè   rð  rh  Nrf  )	r‚   rª   rž  r
   rN   r_   Úminr„  Úprepend)rG   r¶   Ú
first_users      r6   rÃ  z0AutogradCompilerInstance.delay_unpack_hook_nodesÇ  si   € ð —N‘N×(Ñ(×3Ñ3Ø¤yð 4ó 
ò 	%ˆDð �{‰{�‰˜{¨DÓ1°]ÒBØä˜TŸZ™Z›ˆJØ×Ñ˜tÕ$ñ	%r5   c                 óf  — | j                   j                  j                  dt        ¬«      D ]ƒ  }|j                  j                  dd«      dk7  rŒ#|j                  d   }|j                  d   }||j                  usŒP| j                  |«      rŒb|j                  |«       |j                  |«       Œ… y)a  
        Usage of AOTAutograd causes all the tensor_pre_hook 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ð  rh  Nrn  r   rK   )
r‚   rª   rž  r
   rN   r_   rM   rô  rî  r  )rG   r¶   r÷  Ú
input_nodes       r6   rÄ  z6AutogradCompilerInstance.reorder_tensor_pre_hook_nodesÔ  sž   € ð —N‘N×(Ñ(×3Ñ3Ø¤yð 4ó 
ò 	*ˆDð �{‰{�‰˜{¨DÓ1Ð5FÒFØàŸ9™9 Q™<ˆLØŸ™ 1™ˆJà §¡Ò*°4×3FÑ3FÀzÕ3RØ×!Ñ! ,Ô/Ø×#Ñ# DÕ)ñ	*r5   c                 ó  — | j                   j                  j                  dt        ¬«      D �]Y  }|j                  j                  dd«      dk7  rŒ$|j                  d   }| j                  |j                  d   «      }g }g }|g}|D ]p  }|j                  dk(  sŒ|j                  t        j                  k(  sŒ1|j                  |j                  d   «       |j                  |«       |j                  |«       Œr t        ||«      D ]'  \  }}	|j                  |«       |j                  |	«       Œ) t        |«      }
|
|j                   us�Œ| j#                  |
«      r�Œ1|
j                  |«       |D ]  }|j                  |«       Œ �Œ\ y)a‚  
        In this function, we schedule the pre hooks as soon as possible. This
        does not match eager behavior (schedule pre hook right before its
        registered node), but it can make acc grad be scheduled properly when
        the pre hooks are registered to them. After reordering acc grad node, we
        will reorder the pre hooks again to mimic eager behavior.
        rè   rð  rh  Nrq  r   rK   )r‚   rª   rž  r
   rN   r_   rM   rê  rï   rë   rì  rí  r  ÚzipÚremoveró  rô  rî  )rG   r¶   r÷  Úinput_nodesÚ	to_removeÚ	to_appendÚ
hook_blockrõ   ÚaÚbrø  s              r6   rÅ  z@AutogradCompilerInstance.reorder_pre_hook_nodes_to_schedule_asapè  sh  € ð —N‘N×(Ñ(×3Ñ3Ø¤yð 4ó 
ó 	+ˆDð �{‰{�‰˜{¨DÓ1°ZÒ?ØàŸ9™9 Q™<ˆLà×,Ñ,¨T¯Y©Y°q©\Ó:ˆKàˆIØˆIØ˜ˆJØ ò )�Ø—4‘4˜?Ó*¨q¯x©x¼8×;KÑ;KÓ/KØ×$Ñ$ Q§V¡V¨A¡YÔ/Ø×$Ñ$ QÔ'Ø×%Ñ% aÕ(ð	)ô
 ˜I yÓ1ò &‘��1Ø×"Ñ" 1Ô%Ø×"Ñ" 1Õ%ð&ô �kÓ"ˆCØ˜$Ÿ)™)Ó#¨D×,?Ñ,?ÀÖ,DØ—
‘
˜<Ô(Ø#ò +�AØ ×'Ñ'¨Õ*ò+ñ3	+r5   c                 ó„  — g }| j                   j                  j                  dt        ¬«      D ]3  }|j                  j                  dd«      dk7  rŒ#|j                  |«       Œ5 t        |«      D ]Ï  }|j                  d   }t        |j                  j                  «       «      }t        |«      dk(  rŒDt        d„ |D «       «      sJ ‚t        t        |d   j                  j                  «       «      «      }||j                  usŒ–|j!                  |«       |j!                  |«       |D ]  }|j!                  |«       Œ ŒÑ y)a%  
        Usage of AOTAutograd causes all the pre_hook nodes to get pushed to the
        end of the graph. This differs from eager mode, which schedules them
        right before their registered node execution. This pass attempts to
        reorder the graph to mimic eager behavior.
        rè   rð  rh  Nrq  r   c              3   óx   K  — | ]2  }|j                   d k(  xr |j                  t        j                  k(  –— Œ4 y­w)rè   N)rï   rë   rì  rí  r�  s     r6   r˜   zQAutogradCompilerInstance.reorder_pre_hook_nodes_to_mimic_eager.<locals>.<genexpr>#  s8   è ø€ ò àð —‘˜?Ñ*ÒN¨t¯{©{¼h×>NÑ>NÑ/NÓNñùs   ‚8:)r‚   rª   rž  r
   rN   r_   r  ÚreversedrM   rƒ  r„  r…  rÿ   r‡  r›   rÞ  rû  )rG   Ú	pre_hooksr¶   Úhook_getitem_noder„  Úregistered_noderí  s          r6   rÇ  z>AutogradCompilerInstance.reorder_pre_hook_nodes_to_mimic_eager  s1  € ð ˆ	Ø—N‘N×(Ñ(×3Ñ3Ø¤yð 4ó 
ò 	#ˆDð �{‰{�‰˜{¨DÓ1°ZÒ?ØØ×Ñ˜TÕ"ð	#ô ˜YÓ'ò 	5ˆDØ $§	¡	¨!¡Ðä˜Ÿ™Ÿ™Ó*Ó+ˆEÜ�5‹z˜QŠØô ñ à!ôô ð ð ô #¤4¨¨a©¯©×(;Ñ(;Ó(=Ó#>Ó?ˆOà d§i¡iÒ/Ø×'Ñ'Ð(9Ô:Ø×'Ñ'¨Ô-Ø$ò 5�GØ#×+Ñ+¨GÕ4ñ5ñ#	5r5   c                 ón  — g }| j                   j                  j                  dt        ¬«      D ]3  }|j                  j                  dd«      dk7  rŒ#|j                  |«       Œ5 t        |«      D ]Ä  }|j                  d   }|j                  d   }d}t        |j                  j                  «       «      D ]Q  }|j                  dk(  sŒ|j                  t        j                  j                   j"                  j$                  k(  sŒO|} n |€J d«       ‚|j                  |«       |j                  |«       ŒÆ y)	a  
        Usage of AOTAutograd causes all the post_acc_grad_hook 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ð  rh  Nru  r   rK   z8post_acc_grad_hook must have corresponding acc grad node)r‚   rª   rž  r
   rN   r_   r  r
  rM   rƒ  r„  r…  rï   rë   r/   rJ  rñ  rò  r—  )rG   Úpost_acc_grad_hooksr¶   r÷  rõ  Úacc_grad_noderõ   s          r6   rÈ  z9AutogradCompilerInstance.reorder_post_acc_grad_hook_nodes/  s*  € ð !ÐØ—N‘N×(Ñ(×3Ñ3Ø¤yð 4ó 
ò 	-ˆDð �{‰{�‰˜{¨DÓ1Ð5IÒIØØ×&Ñ& tÕ,ð	-ô Ð0Ó1ò 	&ˆDØŸ9™9 Q™<ˆLØŸ™ 1™ˆJð !ˆMÜ˜*×*Ñ*×/Ñ/Ó1Ó2ò �à—D‘D˜OÓ+ØŸ™¤E§I¡I×$6Ñ$6×$GÑ$G×$OÑ$OÓOà$%�MÙðð !Ð,ð ØJóÐ,ð
 × Ñ  Ô.Ø×Ñ Õ%ñ)	&r5   c           	      ó¢  ‡— g }| j                   j                  j                  dt        ¬«      D ]3  Š‰j                  j                  dd«      dk7  rŒ#|j                  ‰«       Œ5 t        |«      D �]Ü  Š‰j                  d   }‰j                  d   }‰j                  d   }t        |«      dkD  rŒ@g }|j                  t        |«      «       |D ]=  }|j                  ˆfd	„t        |j                  j                  «       «      D «       «       Œ? t        |«      }|j                  dk(  rà|j                   t"        j$                  j&                  j(                  j*                  k(  r¥|j                  d   }d}	t        |j                  j                  «       «      D ]H  }
|
j                  dk(  sŒ|
j                   t        k(  sŒ'|
j                  j                  dd«      d
k(  sŒG|
}	ŒJ |	�$|	j                  |«       |j                  ‰«       �Œ˜|‰j,                  us�Œ¨| j/                  |«      r�Œ»|j                  |«       |j                  ‰«       �Œß y)a  
        Usage of AOTAutograd causes all the post_hook 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ð  rh  Nrs  r   rK   é   c              3   ó¤   •K  — | ]G  }|j                   d k(  r2|j                  t        k(  r‰j                  j	                  dd«      dk(  s|–— ŒI y­w)rè   rh  Nrs  )rï   rë   r
   rN   r_   )r—   r‚  r¶   s     €r6   r˜   zCAutogradCompilerInstance.reorder_post_hook_nodes.<locals>.<genexpr>p  sH   øè ø€ ò -ààŸ™ ?Ò2Ø ŸK™K¬9Ò4Ø ŸK™KŸO™O¨K¸Ó>À+ÒMô ñ-ùs   ƒAAru  )r‚   rª   rž  r
   rN   r_   r  r
  rM   rÿ   Úextendrƒ  r„  r…  ró  rï   rë   r/   rJ  rñ  rò  r—  rô  rî  )rG   Ú
post_hooksr÷  Úoutput_nodesr  Úinput_nodes_and_usersrþ  rø  rõ  Úpost_acc_grad_hook_noderõ   r¶   s              @r6   rÉ  z0AutogradCompilerInstance.reorder_post_hook_nodesV  s  ø€ ð ˆ
Ø—N‘N×(Ñ(×3Ñ3Ø¤yð 4ó 
ò 	$ˆDð �{‰{�‰˜{¨DÓ1°[Ò@ØØ×Ñ˜dÕ#ð	$ô ˜ZÓ(ó +	*ˆDØŸ9™9 Q™<ˆLØŸ9™9 Q™<ˆLØŸ)™) A™,ˆKä�<Ó  1Ò$Øà$&Ð!Ø!×(Ñ(¬¨kÓ):Ô;Ø)ò 	�
Ø%×,Ñ,ó -ä $ Z×%5Ñ%5×%:Ñ%:Ó%<Ó =ô-õ ð	ô Ð+Ó,ˆCà—‘˜/Ò)Ø—J‘J¤%§)¡)×"4Ñ"4×"EÑ"E×"MÑ"MÒMà ŸX™X a™[�
Ø*.Ð'Ü˜j×.Ñ.×3Ñ3Ó5Ó6ò 4�AàŸ™ Ó/ØŸH™H¬	Ó1ØŸH™HŸL™L¨°dÓ;Ð?SÓSà23Ñ/ð4ð +Ð6Ø+×2Ñ2°<Ô@Ø ×'Ñ'¨Ô-Ùà˜$Ÿ)™)Ó#¨D×,?Ñ,?ÀÖ,DØ—
‘
˜<Ô(Ø×#Ñ# DÖ)ñW+	*r5   c                 ó0  ‡ — |€y t        |t        «      r|D �cg c]  }‰ j                  |«      ‘Œ c}S t        |t        «      rt        ˆ fd„|D «       «      S t        |t        j
                  t        j                  f«      r‰ j                  |j                     S t        |t        j                  «      s|S t        ‰ j                  |«      }t        |t        j                  j                  j                  j                  «      sJ ‚|j                   S c c}w )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr9   rR  )r—   r@   rG   s     €r6   r˜   z4AutogradCompilerInstance.to_proxy.<locals>.<genexpr>˜  s   øè ø€ Ò5¨a˜Ÿ™ q×)Ñ5ùs   ƒ)r‡   rƒ  r  r  r/   ÚSymIntÚSymFloatr¬   r¶   rˆ   r!   r‚   r¨   r½   Úproxy_tensorÚ_ProxyTensorrl  )rG   Útr@   r  s   `   r6   r  z!AutogradCompilerInstance.to_proxy’  sÐ   ø€ Øˆ9ØÜ�aœÔØ./Ö0¨�D—M‘M !Õ$Ò0Ð0Ü�aœÔÜÓ5°1Ô5Ó5Ð5Ü�aœ%Ÿ,™,¬¯©Ð7Ô8Ø×,Ñ,¨Q¯V©VÑ4Ð4Ü˜!œUŸ\™\Ô*àˆHÜ)¨$¯.©.¸!Ó<ˆÜ˜,¬¯©×(=Ñ(=×(JÑ(J×(WÑ(WÔXÐXÐXØ×!Ñ!Ð!ùò 1s   ™Dc                 óÔ  — t        |t        j                  j                  «      rŒ|rft	        |«      t	        |«      k(  sJ ‚g }t        t	        |«      «      D ]1  }||   \  }}| j                  ||d «       |j                  ||   «       Œ3 |}n$t        t	        |«      «      D �cg c]  }||   ‘Œ	 }}t	        |«      t	        |«      k(  sJ ‚t        ||d | j                  ¬«       |S c c}w ©N)ÚconstantÚtracer)
r‡   r/   r¨   r+   rÿ   rý   Úset_node_originr  r$   r‚   )rG   ÚobjectsrÇ   r�   Úbound_proxiesrÈ   rá  Ú	node_names           r6   r³   z0AutogradCompilerInstance.bind_objects_to_proxies¢  sØ   € ô �gœuŸx™xŸ~™~Ô.ÙÜ˜7“|¤s¨7£|Ò3Ð3Ð3Ø "�Üœs 7›|Ó,ò 5�AØ07¸±
Ñ-�N IØ×(Ñ(¨°NÀDÔIØ!×(Ñ(¨°©Õ4ð5ð (‘ä/4´S¸³\Ó/BÖC¨!˜7 1›:ÐC�ÐCä�7‹|œs 7›|Ò+Ð+Ð+Ü˜' 7°TÀ$Ç.Á.ÕQØˆùò	 Ds   Â#C%Úindexc                 ó†   — | j                   €J ‚| j                   |   }t        «       }t        ||d | j                  ¬«       |S r!  )r„   r   r$   r‚   )rG   r(  rl  Úbw_states       r6   Úbind_backward_statez,AutogradCompilerInstance.bind_backward_stateµ  sB   € Ø×ÑÐ+Ð+Ð+Ø× Ñ  Ñ'ˆÜ “?ˆÜ˜( E°DÀÇÁÕPØˆr5   r'  rá  Úpyobjc                 óÄ  — d}|��|j                   }t        |d«      rx|j                  €t        d«      ‚|| _        |j
                  }t        | j                  j                  j                  «      ||j                  j                  dœ| j                  |<   |› |› d|› d�}t        j                  «       j                  «       d   }|j                  d|«      }t!        |«       y )	NrÛ  r/  zÅThis compiled backward function was saved by AOTAutogradCache, which does not support
                    compiled autograd. Please turn off AOTAutogradCache using `TORCHINDUCTOR_AUTOGRAD_CACHE=0`.)rÙ  rÚ  rÜ  z (NodeCall ú)rx  z:raw_stack_trace = CapturedTraceback.extract().format()[-1])r"  rQ   Ú_lazy_backward_infoÚRuntimeErrorr£   r/  rÿ   r‚   rª   rî   Ú	bw_moduler¤   r*   ÚextractÚformatÚreplacer(   )	rG   r'  rá  r,  Úmaybe_aot_idÚforward_clsÚnew_codeÚraw_stack_traceÚnew_stack_traces	            r6   r$  z(AutogradCompilerInstance.set_node_origin¼  sè   € ð ˆØÐØ×,Ñ,ˆKÜ�{ IÔ.à×2Ñ2Ð:Ü&ðsóð ð +4�Ô'Ø*×2Ñ2�ä),¨T¯^©^×-AÑ-A×-GÑ-GÓ)HØ*Ø)×=Ñ=×GÑGñ8�×$Ñ$ ^Ñ4ð  �[  ¨k¸.Ð9IÈÐKˆÜ+×3Ñ3Ó5×<Ñ<Ó>¸rÑBˆØ)×1Ñ1ØHÈ(ó
ˆô 	˜Õ(r5   ©rv   Nr9   ):r`   ra   rb   rH   rŠ   Ústaticmethodr   r†   rƒ  r/   rˆ   r·   r   r¸   r  rÀ   rÌ   rÚ   r,  ÚautogradÚfunctionÚBackwardCFunctionr   r8  rA  rG  r  rL  rO  r=  rY  r`  rd  rf  rn  rq  rs  ru  r“  r˜  r£  r¥  rÐ  rÂ  rê  rî  rÆ  rÃ  rÄ  rÅ  rÇ  rÈ  rÉ  r  r³   r+  ÚFunctionr$  r4   r5   r6   ru   ru   ¢   s  „ ó1òCð ð5˜]ò 5ó ð5ða
à�U—\‘\Ñ"ða
ð �C‰yða
ð �e˜C ˜JÑ'Ñ(ð	a
ð
 �d˜5  c ™?Ñ+Ñ,óa
ðF
à˜c™ó
òZðx1ð
 ð1ð �^‰^×$Ñ$×6Ñ6ð1ð #+¨3¡-ó1òf
Gò
ò/ò
FòDò
	ò	òò	
òð°#ó òòòð&/°°c±ó /òb
òBò.Jò^8ò@`ðD ñó ðð
 ñó ðò-ò*%ò*ò("+òH!5òF%&òN:*òx"ð" LPñØ)1°$°u¸SÀ#¸X±Ñ2GÑ)Hóð&¨ó ð)àð)ð ð)ð ˜Ÿ™×/Ñ/Ñ0ô	)r5   ru   Fc              #   óö  K  — |rt        |«      t        u sJ ‚ddlm} |j                  j
                  dk(  r
da	 d –— day dd l}|j                  j                  j                  j                  t        j                  t        | «      |«      \  }}t        «       r3|j                  j                  j                  j!                  t"        «       da	 |j&                  j)                  d«      5  d –— d d d «       |sda|j                  j                  j                  j                  ||«       y # daw xY w# 1 sw Y   ŒExY w# |sda|j                  j                  j                  j                  ||«       w xY w­w)Nr   )Ú
eval_frameÚforce_eagerTF)r¼   ÚboolÚtorch._dynamorA  Ú_stanceÚstanceÚ%compiled_autograd_enabled_force_eagerÚtorch._inductor.cudagraph_treesÚ_CrT   r,   Úset_autograd_compilerÚ	functoolsÚpartialru   r7   Úset_verbose_loggerr‰  Úcompiled_autograd_enabledr<  Úset_multithreading_enabled)r|   ÚdynamicrA  r/   Úprior_compilerÚprior_dynamics         r6   Ú_enablerS  æ  sL  è ø€ áÜ�G‹}¤Ñ$Ð$Ð$å(à×Ñ× Ñ  MÒ1ð 15Ð-ð	:Ûà49Ñ1ó 	/ð
 �H‰H×Ñ×.Ñ.×DÑDÜ×ÑÔ6¸ÓDÀgó
ñ	
ØØô ,Ô-Ø�H‰H×Ñ×.Ñ.×AÑAÄ+ÔNà$(Ð!ð	Ø—‘×:Ñ:¸5ÓAñ Û÷ñ "Ø,1Ð)Ø�H‰H×Ñ×.Ñ.×DÑDØ õøð- 5:Ñ1ú÷"ð ûñ "Ø,1Ð)Ø�H‰H×Ñ×.Ñ.×DÑDØ õüsL   ‚7E9ºD- ¾BE9ÃE  Ã+D4Ã0E  Ã85E9Ä-D1Ä1E9Ä4D=Ä9E  Å 6E6Å6E9c               #   ór  K  — t         j                  j                  j                  j	                  d 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/   rI  rT   r,   rJ  rN  )rQ  rR  s     r6   r»  r»    sž   è ø€ ô
 	�‰×Ñ×*Ñ*×@Ñ@ÀÀuÓMñØØð !&Ðð
ÛáØ(,Ð%Ü�‰×Ñ×*Ñ*×@Ñ@Ø˜Mõ	
øñ Ø(,Ð%Ü�‰×Ñ×*Ñ*×@Ñ@Ø˜Mõ	
üs   ‚:B7½A: Á9B7Á::B4Â4B7c                  ór  — da t        rJ ‚t        j                  j                  j
                  j                  d d«       t        j                  j                  j
                  j                  d «       t        j                  j                  j
                  j                  «        t        j                  «       ay )NF)rN  r¹  r/   rI  rT   r,   rJ  rM  Úclear_cacheÚ	itertoolsr[   rœ   r4   r5   r6   ÚresetrX  #  sw   € à %ÐÝ*Ð*Ð*Ü	‡H�H×Ñ×&Ñ&×<Ñ<¸TÀ5ÔIÜ	‡H�H×Ñ×&Ñ&×9Ñ9¸$Ô?Ü	‡H�H×Ñ×&Ñ&×2Ñ2Ô4ä—o‘oÓ'�Or5   c                 óÐ   — | d   }|j                  ||«      }|€J ‚|j                  |«       ||z
  }	|j                  |||	«      }
||
|
j                  t        j
                  ¬«      gS )Nr   )Úmemory_format)Únew_empty_stridedÚcopy_Ú
as_stridedÚcloner/   Úcontiguous_format)rj   Ú
base_sizesÚbase_stridesÚbase_storage_offsetÚ
view_sizesÚview_stridesÚview_storage_offsetÚgradrO   ÚoffsetrF  s              r6   r>  r>  0  sw   € ð �!‰9€DØ×#Ñ# J°Ó=€FØÐÐÐØ
‡L�L�ÔØ Ð#6Ñ6€FØ×"Ñ" :¨|¸VÓD€JØ�J 
× 0Ñ 0¼u×?VÑ?VÐ 0Ó WÐXÐXr5   c                 ó¼   — d gt        | «      z  }t        t        | «      «      D ]5  }| |   sŒ	||   €Œ|dk(  r|j                  ||   «       |||<   Œ.||   ||<   Œ7 |S )Nr   )rÿ   rý   r\  )rD  rO   rE  rF  Úgrad_inputsrÈ   s         r6   rC  rC  D  sy   € Ø�&œ3Ð/Ó0Ñ0€KÜ”3Ð'Ó(Ó)ò (ˆØ˜AÓØ�1‰vˆ~ØØ�AŠvØ× Ñ   Q¡Ô(Ø!'�˜A’à!$ Q¡�˜A’ð(ð Ðr5   )Fr:  )^Ú__doc__r}   rK  rW  rì  rŸ   Úcollectionsr   r   Útypingr   r   r   r   r/   Útorch.utils._pytreeÚutilsÚ_pytreer  Útorch._dynamo.external_utilsr	   r
   r   Útorch._dynamo.sourcer   r   Útorch._dynamo.utilsr   r   r   r   Útorch._guardsr   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._ordered_setr)   Útorch.utils._tracebackr*   Útorch.fx.proxyr+   r`   rÊ  r‰  r7   r>   rA   rC   rR   rJ  r­   rÀ  rñ  rò  r—  r›  r[   rœ   rs   ru   rN  rG  r¹  ÚcontextmanagerrS  r»  rX  r>  rC  r4   r5   r6   ú<module>r€     sŒ  ðñó  Û Û Û Û ß ,ß 6Ó 6ã ß $Ð $÷ñ ÷
 <÷ó ÷ EÑ Dß >Ý 6Ý ,Ý  Ý ?÷÷ ñ ÷ Gß BÝ /Ý 4ñ Ý$ñ *¨(Ð4GÓHÐ Ù Ð*EÓF€òò4ò÷#ñ #÷:5ñ 5ñ ƒm€ò MÐ ÙàØØ"×=Ñ=Ø�	‰	×Ñ×+Ñ+×3Ñ3ð	ó€ð "�)—/‘/Ó#€ò	÷w)ñ w)ðv! "Ð ð ).Ð %ð $Ð ð ×Ñò&ó ð&ðR ×Ññ
ó ð
ó$(òYó(r5   