ó
    Eñiý  ã                   óÞ  • S r SSKrSSKrSSKrSSKrSSKrSSKJrJr  SSK	J
r
JrJr  SSKJrJrJrJr  SSKrSSKJs  Jr  SSKJr  SSKJrJrJrJrJr  SSKJ r J!r!  SS	K"J#r#J$r$J%r%J&r&  SS
K'J(r(J)r)  SSK*J+r+J,r,J-r-J.r.  SSK/J0r0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7  SSK8J9r9  SSK:J;r;  SSK<J=r=J>r>J?r?J@r@JArAJBrBJCrC  SSKDJErEJFrF  SSKGJHrHJIrI  SSKJJKrKJLrL  SSKMJNrN  SSKOJPrP  \(       a  SSKQJRrR  SrS\0" \TS5      rU\0" \TS5      rVS\W4S jrXS\W4S jrYS\\R´                     S\\R´                     4S  jr[S!\S\
S"\4   4S# jr\ " S$ S%5      r] " S& S'5      r^ " S( S)5      r_\^" 5       r`/ S*Qra\N" \\\RÄ                  \/5      rc\RÈ                  " 5       qeS+\fS\4S, jrg " S- S.5      rhS/qiS/qjS/qkS/qlSqm\RÜ                    SDS0\
S"\4   S1\WS2\WS\S3   4S4 jj5       ro\RÜ                  S\S3   4S5 j5       rpSES6 jrqS7\\R´                     S8\\L   S9\\L   S:\LS;\\L   S<\\L   S=\LS\r\R´                     4S> jrsS?\\W   S@\R´                  SA\\\R´                        SB\R´                  S\r\\R´                        4
SC jrtg)Faò  
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)ÚCallableÚ	GeneratorÚSequence)ÚAnyÚOptionalÚTYPE_CHECKINGÚUnion)Úenable_python_dispatcher)Úcall_accumulate_gradÚcall_backwardÚ	call_hookÚFakeCompiledAutogradEngineÚunwrap_maybe_dynamic_int©ÚGetItemSourceÚLocalSource)ÚcountersÚget_chromium_event_loggerÚlazy_format_graph_codeÚset_locals_to_steal)ÚAutogradLazyBackwardCompileInfoÚ%CachedAutogradLazyBackwardCompileInfo)Úcompile_contextÚCompileContextÚ	CompileIdÚSource)ÚgetArtifactLoggerÚtrace_structured©Úclone_preserve_strides)ÚFakeTensorMode)Ú
FakeTensor)Ú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)ÚFloatLikeTypeÚIntLikeType)Ú
OrderedSet)ÚCapturedTraceback)ÚProxya»  You can turn off compiled autograd by either:
1. Moving the unsupported autograd call outside of the torch.compile'd region.
2. Wrapping the unsupported autograd call in the torch._dynamo.compiled_autograd._disable() context manager.
3. Setting torch._dynamo.config.compiled_autograd=False for the torch.compile call containing the unsupported autograd call.
4. Setting torch._dynamo.config.compiled_autograd=False at the start of the program.Úcompiled_autogradÚcompiled_autograd_verboseÚreturnc                  óh   • [         R                  R                  R                  R	                  S5      $ )Nr8   )ÚtorchÚ_loggingÚ	_internalÚ	log_stateÚis_artifact_enabled© ó    Ú\/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/compiled_autograd.pyÚ snapshot_verbose_logging_enabledrC   T   s(   € Ü�>‰>×#Ñ#×-Ñ-×AÑAØ#óð rA   c                  ó^   • [         R                  R                  R                  R                  $ ©N)r;   Ú	_inductorÚconfigÚtritonÚ
cudagraphsr@   rA   rB   Úsnapshot_cudagraph_enabledrJ   Z   s   € Ü�?‰?×!Ñ!×(Ñ(×3Ñ3Ð3rA   Úxc                 ó"   • U b  [        U 5      $ U $ rE   r!   )rK   s    rB   Úmaybe_clonerM   ^   s   € Ø�}Ü% aÓ(Ð(Ø€HrA   ÚCompiledFunction.c                 óz  • [        U R                  [        5      (       a  U R                  R                  $ [        U R                  [        5      (       aL  [
        R                  R                  R                  5          U R                  R                  5       sS S S 5        $ [        S5      e! , (       d  f       g = f)NzEUnexpected Lazy Backward Compilation Info Type. Please file an issue.)Ú
isinstanceÚ_lazy_backward_infor   Ú	bw_moduler   r;   Ú_subclassesÚfake_tensorÚunset_fake_temporarilyÚbw_module_fnÚAssertionError)rN   s    rB   Úextract_bw_modulerX   d   s™   € ÜØ×,Ñ,Ô.M÷ñ ð  ×3Ñ3×=Ñ=Ð=Ü	Ø×,Ñ,Ô.S÷
ñ 
ô ×Ñ×*Ñ*×AÑAÕCØ#×7Ñ7×DÑDÓF÷ DÑCô ØSó
ð 	
÷ DÕCús   Á=B,Â,
B:c                   óÀ   • \ rS rSrS\SS4S jrS\R                  R                  SS4S jr	S\
\R                  S	4   SS4S
 jrS\
\R                  S	4   SS4S jrSrg)Ú
NaNCheckeré   Úaccumulate_gradr9   Nc                 ó:   • Xl         / U l        0 U l        / U l        g rE   )r\   Úparams_indicesÚparams_to_checkÚoutput_names)Úselfr\   s     rB   Ú__init__ÚNaNChecker.__init__€   s    € Ø.ÔØ)+ˆÔØ8:ˆÔØ')ˆÕrA   Úgraphc                 óx  • [        [        UR                  5      5      nUR                  S[        S9nUR                  SS9S   R
                  S   nU R                  [        U5      :X  a  U R                  U(       + :X  d   eU H�  nUR
                  S   nUR                  [        R                  L a4  UR
                  S   UL a"  [        UR
                  S   [        5      (       d   eU R                  R                  UR
                  S   5        M�     U Vs/ s H  oUR                  PM     snU l        g s  snf )NÚcall_function©ÚopÚtargetÚoutput©rh   r   é   )ÚnextÚiterÚnodesÚ
find_nodesr   Úargsr\   Úboolri   ÚoperatorÚgetitemrP   Úintr^   ÚappendÚnamer`   )ra   rd   Úinputs_nodeÚacc_grad_nodesÚoutput_nodesÚnodeÚ
param_nodes          rB   Úprep_with_graphÚNaNChecker.prep_with_graph†   s&  € Üœ4 §¡Ó,Ó-ˆØ×)Ñ)ØÔ';ð *ð 
ˆð ×'Ñ'¨8Ð'Ð4°QÑ7×<Ñ<¸QÑ?ˆØ×#Ñ#¤tØó(
ó 
à×"Ñ"¨<Ô'7Ó8ð	9ð 9ó #ˆDØŸ™ 1™ˆJð
 ×!Ñ!¤X×%5Ñ%5Ò5Ø—O‘O AÑ&¨+Ò5Ü˜zŸ™¨qÑ1´3×7Ñ7ðð8ð ×Ñ×&Ñ& z§¡°qÑ'9Ö:ñ #ñ 4@Ó@²<¨4ŸYœY±<Ñ@ˆÕùÒ@s   ÄD7Úinputs.c                 ó  • U R                   (       d  g U R                   Hc  nX   R                  nUb:  [        R                  " U5      R                  5       (       a   SU S[         35       eX   U R                  SU S3'   Me     g )Nz9Compiled autograd running under anomaly mode with inputs[z6] already having NaN gradient. This is not supported. zinputs[Ú])r\   r^   Úgradr;   ÚisnanÚanyÚTURN_OFF_MSGr_   )ra   r   Úidxr‚   s       rB   Úprep_with_inputsÚNaNChecker.prep_with_inputsž   s�   € Ø×#×#àð ×&Ô&ˆCØ‘;×#Ñ#ˆDØÑÜ Ÿ;š; tÓ,×0Ñ0×2Ñ2ð ØOÐPSÈuð UCÜCOÀ.ðRóÐ2ð
 6<±[ˆD× Ñ  7¨3¨%¨qÐ!1Ó2ò 'rA   Úoutc                 ó€  • U R                   (       a©  U(       a   e/ nU R                  R                  5        HZ  u  p4UR                  c   e[        R
                  " UR                  5      R                  5       (       d  MI  UR                  U5        M\     U(       a  [        SSR                  U5       S35      eg / n[        U5       HN  u  pg[        R
                  " U5      R                  5       (       d  M0  UR                  U R                  U   5        MP     U(       a  [        SSR                  U5       S35      eg )Nz9Compiled Autograd returned NaN gradients for parameters: Ú,Ú.z;Compiled Autograd returned NaN gradients for output nodes: )r\   r_   Úitemsr‚   r;   rƒ   r„   rv   ÚRuntimeErrorÚjoinÚ	enumerater`   )ra   r‰   Ú
nan_paramsÚ
inputs_strÚparamÚ	nan_gradsÚir‚   s           rB   ÚcheckÚNaNChecker.check®   s  € Ø××æˆN�7Ø$&ˆJØ%)×%9Ñ%9×%?Ñ%?Ö%AÑ!�
Ø—z‘zÑ-Ð-Ð-Ü—;’;˜uŸz™zÓ*×.Ñ.×0Ó0Ø×%Ñ% jÖ1ñ &Bö
 Ü"ØOÐPS×PXÑPXÐYcÓPdÐOeÐefÐgóð ð ð $&ˆIÜ$ Sž>‘�Ü—;’;˜tÓ$×(Ñ(×*Ó*Ø×$Ñ$ T×%6Ñ%6°qÑ%9Ö:ñ *ö Ü"ØQÐRU×RZÑRZÐ[dÓReÐQfÐfgÐhóð ð rA   )r\   r`   r^   r_   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rr   rb   r;   ÚfxÚGraphr}   ÚtupleÚTensorr‡   r–   Ú__static_attributes__r@   rA   rB   rZ   rZ      sx   † ð*¨ð *°ô *ðA U§X¡X§^¡^ð A¸ô Að0A u¨U¯\©\¸3Ð->Ñ'?ð AÀDô Að ˜˜uŸ|™|¨SÐ0Ñ1ð °d÷ rA   rZ   c            
       óX   • \ rS rSrSS jrS\S\S\4   S\S	\S\4
S
 jr	S\S\4S jr
Srg)ÚOpNamespaceéÎ   r9   Nc                 ó"   • [        5       U l        g rE   )r   Úcustom_function_name_counter©ra   s    rB   rb   ÚOpNamespace.__init__Ï   s   € Ü:A»)ˆÕ)rA   rw   Úfn.Úis_custom_functionÚis_traceablec                 óž  ^• U(       a1  SU-   nU R                   U   nU R                   U==   S-  ss'   U U 3n[        X5      (       a   e[        XU5      mU(       a+  [        X[        R
                  R                  T5      5        U$ [        R
                  R                  S[        S[        S[        4U4S jj5       n[        XU5        U$ )NÚCppNoderl   rq   Úkwargsr9   c                  ó   >• T" U 0 UD6$ rE   r@   )rq   r­   Úresults     €rB   Úrun_non_traceable_cpp_in_eagerÚ7OpNamespace.add.<locals>.run_non_traceable_cpp_in_eageræ   s   ø€ á˜tÐ. vÑ.Ð.rA   )	r¥   ÚhasattrÚOpÚsetattrr;   Ú_dynamoÚallow_in_graphÚdisabler   )ra   rw   r¨   r©   rª   Úcountr°   r¯   s          @rB   ÚaddÚ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ð ˆô �]‰]×"Ñ"ð/´cð /ÄSð /ÌSö /ó #ð/ô �DÐ >Ô?ØˆrA   c                 ó   • [        X5      $ rE   )Úgetattr)ra   rw   s     rB   ÚgetÚOpNamespace.getí   s   € Ü�tÓ"Ð"rA   )r¥   ©r9   N)r˜   r™   rš   r›   rb   Ústrr   r   rr   r¹   r½   r    r@   rA   rB   r¢   r¢   Î   sY   † ôDðàðð �S˜#�XÑðð !ð	ð
 ðð 
ôð6#˜ð # ÷ #rA   r¢   c                   ó\   • \ rS rSrS\S\S\4   S\SS4S jrS	\S
\S\4S jr	S\4S jr
Srg)r³   éñ   rw   r¨   .r©   r9   Nc                 ó6   • X l         X0l        Xl        SU l        g )Nz#torch._dynamo.compiled_autograd.ops)r¨   r©   r˜   r™   )ra   rw   r¨   r©   s       rB   rb   ÚOp.__init__ò   s   € ð ŒØ"4ÔØŒØ?ˆ�rA   rq   r­   c                 ó&   • U R                   " U0 UD6$ rE   )r¨   )ra   rq   r­   s      rB   Ú__call__ÚOp.__call__ú   s   € Ø�wŠw˜Ð' Ñ'Ð'rA   c                 ó:   • U R                   S-   U R                  -   $ )NrŒ   )r™   r˜   r¦   s    rB   Ú__repr__ÚOp.__repr__ý   s   € Ø�‰ Ñ$ t§}¡}Ñ4Ð4rA   )r™   r˜   r¨   r©   )r˜   r™   rš   r›   rÀ   r   r   rr   rb   rÆ   rÉ   r    r@   rA   rB   r³   r³   ñ   s[   † ð@Øð@Ø% c¨3 hÑ/ð@ØEIð@à	ô@ð(˜cð (¨Sð (°Sô (ð5˜#÷ 5rA   r³   )r   ÚsizesÚscalarsÚhooksÚpacked_dataÚcompiled_autograd_idc           
      ó<   • [        [        [        U S S S95      5      $ )N)rÏ   Úframe_idÚframe_compile_id)r   r   r   )rÏ   s    rB   Úmake_compile_contextrÓ     s(   € ÜÜÜØ%9ØØ!%ñó	
óð rA   c                   óÞ  • \ rS rSrS\S\4   SS4S jrS\R                  S\	\
   S\4S	 jr\S
\S\S\4S j5       rS\\R                     S\\   S\\\\4      S\\\\\4         S\S\S\\\\R                     \\   \\   4   4S jrS\\   SS4S jrS\\   S\\R                     S\\R                     S\S\S\	\   S\\   S\\   4S jrS\\   S\\   S\\R                     S\S\R:                  R<                  R>                  S\	\   S\\   S\\	\R                     S4   4S  jr S\\   S!\\   S"\\   S#\S$\\   S%\\   S&\S\\R                     4S' jr!S(\\   S)\R                  S*\\   S+\R                  S\\R                     4
S, jr"S\R                  4S- jr#S.\S/\S\4   S0\S1\S\4
S2 jr$S.\S3\\   S4\S5\\   S\\R                     4
S6 jr%S/\S\4   S4\S5\\   S\\R                     4S7 jr&S8\S9\\   S4\S5\\   S\\R                     4
S: jr'S;\S<\S\R                  4S= jr(S>\R                  S?\R                  S@\SS4SA jr)SB\S\4   S4\SC\S\RT                  RV                  4SD jr,SE\SF\S\R                  4SG jr-S\\R                     SE\SH\S\\R                     4SI jr.S\\R                     SE\SH\S\\R                     4SJ jr/S\\   SE\S\\R                     4SK jr0S9\\R                     S\\R                     SE\S\\R                     4SL jr1SM\R                  SE\S\\R                     4SN jr2SO\RT                  Rf                  S\\   4SP jr4SQ\S\4SR jr5SmSS jr6S\7\   4ST jr8SU\S\94SV jr:S9\S\\S\4   \4   4SW jr;\S4\\   S\\RT                  Rx                     4SX j5       r=\SQ\RT                  Rx                  S\4SY j5       r>SmSZ jr?SmS[ jr@SmS\ jrASmS] jrBSmS^ jrCSmS_ jrDSmS` jrESa\S\4Sb jrF SnSc\\   Sd\S\	\\\\4         S\\   4Se jjrGSf\S\H4Sg jrISh\Si\Sj\	\R:                  R”                     SS4Sk jrKSlrLg)oÚAutogradCompilerInstancei  Úcompiler_fn.r9   Nc                 ó.  • Xl         [        R                  " 5       U l        U R                  R                  U l        [        5       U l        [        SSU R                  S9U l        [        5       U l
        [        U R                  S5      U l        S U l        g )NT)Úallow_fallback_kernelsÚallow_non_fake_inputsÚ	shape_envÚsymbolic)rÖ   Ú
contextlibÚ	ExitStackÚstackÚcloser/   rÚ   r#   Úfake_tensor_moder,   Ú	fx_tracerr+   Ú
proxy_modeÚhooks_proxy)ra   rÖ   s     rB   rb   Ú!AutogradCompilerInstance.__init__  sr   € Ø&ÔÜ×)Ò)Ó+ˆŒ
Ø—Z‘Z×%Ñ%ˆŒ
Ü!›ˆŒÜ .Ø#'Ø"&Ø—n‘nñ!
ˆÔô
 )Ó*ˆŒÜ0°·±ÀÓLˆŒØ,0ˆÕrA   rK   Úsourcec                 óv   • [        U[        R                  5      (       d   eU R                  R	                  XS9$ )N)rå   )rP   r;   rŸ   rà   Úfrom_tensor)ra   rK   rå   s      rB   Ú	wrap_fakeÚ"AutogradCompilerInstance.wrap_fake,  s3   € Ü˜!œUŸ\™\×*Ñ*Ð*Ð*Ø×$Ñ$×0Ñ0°Ð0ÐBÐBrA   rw   r†   c                 ó,   • [        [        U 5      U5      $ rE   r   )rw   r†   s     rB   rå   ÚAutogradCompilerInstance.source0  s   € äœ[¨Ó.°Ó4Ð4rA   r   rË   rÌ   Úoriginsr\   Ú
check_nansc                 ó>  ^ • [         S   S==   S-  ss'   [        [        5      T l        [	        [
        5      T l        [        T R                  5      T l        T R                  R                  5         U(       a  [        U5      OS T l        [        R                  " 5       T l        [        5       R!                  ST R                  ST R                  0SS9  ["        R$                  R'                  5       T R(                  l        ["        R,                  R/                  [0        S9T R(                  l        0 T R(                  l        0 T l        U 4S j[8         5       u  nT l        T l        T l        T l         T RB                  RE                  [G        5       5        Uu  p‰n
T RB                  RE                  [I        5       5        US	   n [K        U5       H)  u  pËT RM                  UT RO                  S
U5      5      X'   M+     T RY                  XU5        [K        U5       VVs/ s H@  u  pÎT RZ                  R]                  UT RO                  SU5      [^        R`                  5      PMB     nnn[c        [e        U5      5       Vs/ s H  nT R:                  U   PM     nn[K        U5       HK  u  nnT R(                  Rg                  S[h        UU   40 5      UU'   UU   T R6                  URj                  '   MM     T RY                  UUU	5      n[K        U5       HÉ  u  pÎT RO                  SU5      n[m        U[
        5      (       a/  T RZ                  R]                  UU[^        R`                  5      X<'   M[  [m        U[n        5      (       aF  T RZ                  Rq                  T RZ                  Rs                  UU[^        R`                  S9UUS9X<'   M¶  [u        S[U        U5      5      e   T RY                  UT R<                  U
5        [K        U5       H,  u  nnT R<                  U   T R6                  URj                  '   M.     T RB                  RE                  [w        0 5      5        T RB                  RE                  T Rx                  5        T RB                  RE                  T Rz                  5        T RB                  RE                  [}        5       5        T Rx                  RZ                  c   eT Rx                  RZ                  nT RB                  RE                  ["        R,                  R~                  R€                  Rƒ                  U5      5        […        [†        Rˆ                  " 5       5      UUU4$ ! [P         a$  n[S        S[U        U5       S[V         35      UeS nAff = fs  snnf s  snf )Nr7   Úcapturesrl   Úgraph_idT©Úlog_pt2_compile_event)Ú
tracer_clsc              3   ó`   >#   • U  H#  nTR                   R                  S US0 5      v •  M%     g7f)Úplaceholderr@   N)rá   Úcreate_proxy)Ú.0rw   ra   s     €rB   Ú	<genexpr>Ú9AutogradCompilerInstance.begin_capture.<locals>.<genexpr>T  s0   øé € ð 
â+�ð �N‰N×'Ñ'¨°t¸RÀ×DÐDÚ+ùs   ƒ+.r   r   zFound tensor of type z,, which is not supported by FakeTensorMode. rË   rf   rÌ   )rå   Údynamic_dim)Úhintrå   zUnexpected scalar type: )Er   rm   ÚCOMPILE_COUNTERÚidr   ru   Úaot_id_counterrÓ   r   Ú	__enter__rZ   Únan_checkerÚtimeÚtime_nsÚstart_time_nsr   Úlog_event_startr;   ÚnnÚModulerá   Úrootrœ   r�   r,   rd   Útensor_attrsÚsymnode_proxy_lookupÚ_graph_placeholdersÚsizes_proxyÚscalars_proxyrã   Úpacked_data_proxyrÞ   Úenter_contextr0   r   r�   rè   rå   Ú	ExceptionÚNotImplementedErrorÚtyper…   Úbind_objects_to_proxiesrÚ   Ú$create_unspecified_symint_and_symbolr.   ÚDYNAMICÚrangeÚlenrö   r   r{   rP   ÚfloatÚcreate_symfloatnodeÚcreate_unspecified_symbolrW   r'   rà   râ   r(   ÚexperimentalÚsymbolic_shapesÚ_suppress_guardsrÀ   r   Úcurrent_compile_id)ra   r   rË   rÌ   rì   r\   rí   Ú
args_proxyÚinputs_originsÚsizes_originsÚscalars_originsrK   r†   ÚeÚvalÚ	sym_sizesr•   ÚproxiesÚsymintrå   ÚsymvalÚenvs   `                     rB   Úbegin_captureÚ&AutogradCompilerInstance.begin_capture4  sÀ  ø€ ô 	Ð$Ñ% jÓ1°QÑ6Ó1Ü”Ó'ˆŒÜ.9¼#Ó.>ˆÔÜ3°D·G±GÓ<ˆÔØ×Ñ×&Ñ&Ô(Þ:Dœ: oÔ6È$ˆÔÜ!Ÿ\š\›^ˆÔÜ!Ó#×3Ñ3ØØ×ÑØ˜Ÿ™Ð!Ø"&ð	 	4ñ 	
ô $Ÿh™hŸo™oÓ/ˆ�‰ÔÜ$Ÿx™xŸ~™~¼˜~ÐIˆ�‰ÔØ&(ˆ�‰Ô#Ø$&ˆÔ!ô
å+ó
ñ	
ØØÔØÔØÔØÔ"ð 	�
‰
× Ñ Ô!3Ó!5Ô6Ø9@Ñ6ˆ ð 	�
‰
× Ñ Ô!9Ó!;Ô<ð �1‰Iˆð	Ü# FÖ+‘�Ø"Ÿn™n¨Q°·±¸HÀcÓ0JÓK�“ñ ,ð 	×$Ñ$ V¸ÔHô & eÔ,ô
ò -‘�ð �N‰N×?Ñ?ØØ—‘˜G SÓ)Ü×"Ñ"öñ
 -ð 	ñ 
ô 16´c¸)³nÔ0EÓFÒ0E¨1�4×#Ñ# AÔ&Ñ0EˆÐFÜ" 9Ö-‰IˆAˆvØŸ™×4Ñ4ØÜ(Ø˜‘�Øó	ˆG�A‰Jð 6=¸Q±ZˆD×%Ñ% f§k¡kÓ2ñ .ð ×.Ñ.¨y¸'À=ÓQˆä! 'Ö*‰HˆCØ—[‘[ ¨CÓ0ˆFÜ˜#œs×#Ñ#Ø#Ÿ~™~×RÑRØØÜ×&Ñ&ó �“ô
 ˜C¤×'Ñ'Ø#Ÿ~™~×AÑAØ—N‘N×<Ñ<ØØ%Ü$.×$6Ñ$6ð =ð ð
 Ø!ð  Bð  �“ô %Ð%?ÄÀcÃÓKÐKñ' +ð( 	×$Ñ$ W¨d×.@Ñ.@À/ÔRÜ" 7Ö+‰IˆAˆvØ59×5GÑ5GÈÑ5JˆD×%Ñ% f§k¡kÓ2ñ ,ð 	�
‰
× Ñ ¤¨2£Ô/Ø�
‰
× Ñ  ×!6Ñ!6Ô7Ø�
‰
× Ñ  §¡Ô1Ø�
‰
× Ñ Ô!7Ó!9Ô:à×$Ñ$×.Ñ.Ñ:Ð:Ð:Ø×#Ñ#×-Ñ-ˆØ�
‰
× Ñ Ü�H‰H×!Ñ!×1Ñ1×BÑBÀ3ÓGô	
ô
 ”×1Ò1Ó3Ó4ØØØð	
ð 	
øôE ó 	Ü%Ø'¬¨Q« yÐ0\Ô]iÐ\jÐkóàðûð	üó
ùò Gs%   Ç8U# ÈAVÉ=VÕ#
VÕ-VÖVÚcompile_reasonsc                 ó8   ^• T(       d   e[        SS U4S jS9  g )NÚartifactc                  ó   • SSS.$ )NÚ!compiled_autograd_compile_reasonsÚjson©rw   Úencodingr@   r@   rA   rB   Ú<lambda>Ú>AutogradCompilerInstance.log_compile_reasons.<locals>.<lambda>µ  s   € Ø;Ø"ò!rA   c                  ó   >• T $ rE   r@   )r+  s   €rB   r3  r4  ¹  s   ø€ ™rA   ©Úmetadata_fnÚ
payload_fn)r    )ra   r+  s    `rB   Úlog_compile_reasonsÚ,AutogradCompilerInstance.log_compile_reasons®  s"   ø€ ö ÐˆÜØñô /ó	
rA   ÚpinputsÚpsaved_tensorsÚsaved_tensorsÚpctxÚctxÚmaybe_backward_state_idxÚopaque_object_indicesc                 ór  ^ ^^^^^^^• TR                  5        Vs/ s H  nT R                  U5      PM     n	nU V
s/ s H  n
T R                  U
   PM     nn
TR                  n[	        U5      mUR
                  mUR                  mUR                  mA[        R                  " 5       (       a/  TR                   H  nUR                  (       d  M  [        S5      e   [        R                  R                  S[        [        R                      S[        ["           S[        [$           S[        [$           S[$        4
UU4S jj5       nT R&                  R)                  SUUU	U/UQ70 S	9mS mUb  T R                  U   mS[*        [        R                      4UUUUUU 4S
 jjnU" 5       nS[$        S[,        S[        [$           S[        R                   4U 4S jjn[        R.                  R0                  R2                  R5                  TTUUS9n[6        R8                  " T R                  U5      nU$ s  snf s  sn
f )Nz@torch.compile does not currently support higher order gradients.Úctx_saved_tensorsÚctx_symintsÚctx_opaque_objsÚ	flat_argsr9   c                 óz   >• [         R                  R                  R                  R                  " U UUTT/UQ76 nU$ rE   )r;   Ú
_functorchÚ_aot_autogradÚruntime_wrappersÚ_backward_prologue_functional)rC  rD  rE  rF  r‰   Úmaybe_subclass_metadataÚmetadatas        €€rB   Úcall_aot_bwd_prologueÚOAutogradCompilerInstance.proxy_call_aot_backward.<locals>.call_aot_bwd_prologueç  sG   ø€ ô ×"Ñ"×0Ñ0×AÑA×_Ò_Ø!ØØØØ'ðð òˆCð ˆJrA   rf   ©Úkindri   rq   r­   c            	      ó 	  >^^• S[         R                  R                  S[        4S jn U " TR                  5      n[        U[        TS L5      -
  5       Vs/ s H  nTU   PM
     nnTR                  5       n[        U5      [        TR                  5      :X  d   eU Vs/ s H  nTR                  U5      PM     nnXcS [        U5      & Tb  UR                  T5        Sn0 mS n[        T5      mTR                  T   (       a  TSTR                  T    3-  mTR                  T==   S-  ss'   S[        S[        4U4S jjn	TR                  R                   GHï  n
U
R                  S	:X  a1  X7   R                  nU	" U
R                   5      Ul        UTU
'   US-  nME  U
R                  S
:X  a’  [        U
R"                  5      S:X  d   eU
R"                  S    Vs/ s H[  n[%        U[         R                  R&                  5      (       a-  [         R                  R)                  TU   TR*                  5      OUPM]     nnMç  U
R                  S:X  a�  U
R,                  nTR*                  R/                  U5      n[1        TR*                  R2                  U[5        TU5      5        TR*                  R7                  SUS0 5      nU	" U
R                   5      Ul        UTU
'   GM†  U
R                  S:X  a·  U
R,                  [         R8                  R:                  R<                  R>                  L a3  [         R8                  R:                  R@                  R>                  U
l        TR*                  R                  RC                  U
U4S j5      nU	" U
R                   5      Ul        UTU
'   GMM  U
R                  S:X  aŠ  U
R,                  nTR*                  R/                  U5      n[1        TR*                  R2                  U[5        TU5      5        TR*                  R                  RC                  U
U4S j5      nXïl        UTU
'   GMç  [E        S5      e   Uc   eS[         RF                  4S jnU Vs/ s H5  n[%        U[         R                  R(                  5      (       a  U" 5       OUPM7     nnTRI                  UU5        U$ s  snf s  snf s  snf s  snf )Nrd   r9   c                 ó`   • SnU R                    H  nUR                  S:X  a  US-  nM    U$    U$ )Nr   rõ   rl   )ro   rh   )rd   Únum_argsr{   s      rB   Ú
num_inputsÚkAutogradCompilerInstance.proxy_call_aot_backward.<locals>.copy_paste_aot_backward_graph.<locals>.num_inputs
  s<   € Ø�Ø!ŸKœK�DØ—w‘w -Ó/Ø  A™˜Ù àØ�ñ (ð  �rA   r   Ú_rl   Ú	node_namec                 ó   >• ST SU  3$ )NÚaotrW  r@   )rX  Údeduped_aot_ids    €rB   Úmake_uniqueÚlAutogradCompilerInstance.proxy_call_aot_backward.<locals>.copy_paste_aot_backward_graph.<locals>.make_unique1  s   ø€ à˜^Ð,¨A¨i¨[Ð9Ð9rA   rõ   rj   Úget_attrr@   rf   c                 ó   >• TU    $ rE   r@   ©ÚnÚvalue_remaps    €rB   r3  ÚiAutogradCompilerInstance.proxy_call_aot_backward.<locals>.copy_paste_aot_backward_graph.<locals>.<lambda>Q  ó	   ø€ ¨°AªrA   Úcall_modulec                 ó   >• TU    $ rE   r@   r`  s    €rB   r3  rc  Z  rd  rA   zshouldn't get herec                  ó€   • [        5          [        R                  " SSSSS5      sS S S 5        $ ! , (       d  f       g = f)Nr   é{   ©r)   r;   Úzerosr@   rA   rB   ÚdummyÚfAutogradCompilerInstance.proxy_call_aot_backward.<locals>.copy_paste_aot_backward_graph.<locals>.dummye  s(   € Ü0Õ2Ü Ÿ;š; q¨!¨Q°°3Ó7÷ 3×2×2ús   ‹/¯
=)%r;   rœ   r�   ru   rd   r  Ú_get_compiled_autograd_symintsr  ÚsymintsÚto_proxyrv   rÀ   rþ   ro   rh   r{   rw   rq   rP   ÚNoder6   rá   ri   Úget_fresh_qualnamer´   r  r¼   Úcreate_nodeÚopsÚatenÚviewÚdefaultÚreshapeÚ	node_copyrW   rŸ   r  )rU  rT  r•   Ú	pall_argsrn  r"  ÚpsymintsÚargs_idxÚpoutputsr\  r{   Úphra  rw   Úqualnamer¯   rk  ÚoÚoutputsr[  rb  Úaot_idrR   r?  Úpbackward_stateÚpgradsra   s                      @@€€€€€€rB   Úcopy_paste_aot_backward_graphÚWAutogradCompilerInstance.proxy_call_aot_backward.<locals>.copy_paste_aot_backward_graph	  s&  ú€ ð ¤%§(¡(§.¡.ð  ´Sô  ñ " )§/¡/Ó2ˆHä#(¨´C¸ÈtÐ8SÓ4TÑ)TÔ#UóÚ#U˜a��q”	Ñ#Uð ð ð ×8Ñ8Ó:ˆGÜ�w“<¤3 s§{¡{Ó#3Ó3Ð3Ð3Ù29Ó:²'¨Q˜Ÿ™ aÖ(±'ˆHÐ:Ø(0�nœ˜G›Ð%àÑ*Ø× Ñ  Ô1ð ˆHàˆKØ7;ˆHô ! ›[ˆNØ×"Ñ" 6×*Ø A d×&9Ñ&9¸&Ñ&AÐ%BÐ"CÑC�Ø×Ñ Ó'¨1Ñ,Ó'ð:¤sð :¬s÷ :ð "Ÿ™×-Õ-�Ø—7‘7˜mÓ+Ø"Ñ,×1Ñ1�BÙ)¨$¯)©)Ó4�B”GØ(*�K Ñ%Ø ‘M’HØ—W‘W Ó(Ü˜tŸy™y›>¨QÓ.Ð.Ð.ð
 "&§¡¨1¢ó	 ò ".˜Aô & a¬¯©¯©×7Ñ7ô Ÿ™Ÿ™ {°1¡~°t·~±~ÔFàòñ ".ð	 ð  ‘Hð —W‘W 
Ó*ØŸ;™;�DØ#Ÿ~™~×@Ñ@ÀÓF�HÜ˜DŸN™N×/Ñ/°¼7À9ÈdÓ;SÔTØ!Ÿ^™^×7Ñ7¸
ÀHÈbÐRTÓU�FÙ"-¨d¯i©iÓ"8�F”KØ(.�K Ô%Ø—W‘W Ó/Ø—{‘{¤e§i¡i§n¡n×&9Ñ&9×&AÑ&AÒAô ',§i¡i§n¡n×&<Ñ&<×&DÑ&D˜œØ!Ÿ^™^×1Ñ1×;Ñ;ØÔ6ó�Fñ #.¨d¯i©iÓ"8�F”KØ(.�K Ô%Ø—W‘W Ó-ØŸ;™;�DØ#Ÿ~™~×@Ñ@ÀÓF�HÜ˜DŸN™N×/Ñ/°¼7À9ÈdÓ;SÔTØ!Ÿ^™^×1Ñ1×;Ñ;ØÔ6ó�Fð %-”MØ(.�K Ô%ä(Ð)=Ó>Ð>ñU .ðX Ñ'Ð'Ð'ð8œ5Ÿ<™<ô 8ñ
 JRóÚIQÀAœ: a¬¯©¯©×8Ñ8‘”¸aÒ?Éð ð ð ×(Ñ(¨°(Ô;ØˆNùòmùò ;ùò@ ùòXs   ÁR<ÂSÇA"SÑ*<SÚsubclass_metaÚ
is_runtimeÚunwrapped_argsc                 óD  >^ ^• [         R                  R                  S[        S[        4UU 4S jj5       n[        R
                  " TR                  U5      nTR                  R                  SU[        U5      0 S9nTR                  5       nTR                  U/U/5        U$ )Nrˆ  r9   c                  ó$   >• TR                  U TS9$ )N)r‡  )Úcreation_fn)rˆ  r‡  r†  s    €€rB   Úmake_subclassÚkAutogradCompilerInstance.proxy_call_aot_backward.<locals>.proxy_subclass_constructor.<locals>.make_subclasst  s   ø€ à$×0Ñ0°ÈJÐ0ÐWÐWrA   rf   rP  )r;   rµ   r¶   r   ÚpytreeÚtree_mapro  rá   rö   rž   Úallocate_dummyr  )r†  r‡  rˆ  rŒ  Úpunwrapped_argsÚpoutputrj   ra   s   ``     €rB   Úproxy_subclass_constructorÚTAutogradCompilerInstance.proxy_call_aot_backward.<locals>.proxy_subclass_constructorq  sœ   ú€ ô �]‰]×)Ñ)ðX¬sð X´s÷ Xó *ðXô %Ÿošo¨d¯m©m¸^ÓLˆOà—n‘n×1Ñ1Ø$Ø$Ü˜?Ó+Øð	 2ð ˆGð ×(Ñ(Ó*ˆFØ×(Ñ(¨&¨°G°9Ô=ØˆMrA   )Úmake_subclass_override)rm  ro  rã   Ú_forward_clsrX   rM  rL  Ú_aot_idr;   Úis_grad_enabledÚoutput_infoÚrequires_gradrŽ   rµ   r¶   r   rŸ   r3   r   rá   rö   Úlistrr   rH  rI  rJ  Ú_backward_epilogue_functionalrŽ  r�  )ra   r;  r<  r=  r>  r?  r@  rA  r"  rz  r†   Úpopaque_objectsrN   Úoutput_alias_inforN  r„  r€  r“  ÚresultsÚpresultsr�  rR   rL  rM  r‚  rƒ  s   `    `              @@@@@@rB   Úproxy_call_aot_backwardÚ0AutogradCompilerInstance.proxy_call_aot_backward¼  sD  ÿ€ ð* /2×.PÑ.PÔ.RÓSÒ.R¨�D—M‘M !Ö$Ñ.RˆÐSñ -ó
â,�ð ×Ñ˜SÔ!Ù,ð 	ð 
ð ×+Ñ+ÐÜ%Ð&6Ó7ˆ	Ø#×,Ñ,ˆØ"2×"JÑ"JÐØ!×)Ñ)ˆØä× Ò ×"Ñ"Ø%-×%9Ô%9Ð!Ø$×2×2Ñ2Ü&ØZóð ñ &:ô 
�‰×	%Ñ	%ð	Ü'¬¯©Ñ5ð	ä!¤+Ñ.ð	ô &¤c™]ð	ô !¤™ð		ô
 ÷	ó 
&ð	ð  —‘×,Ñ,Ø Ø(àØØðð ñ	ð ð -ð 

ˆð ˆØ#Ñ/Ø"×.Ñ.Ð/GÑHˆOðd	¬t´E·L±LÑ/A÷ d	ô d	ñL 0Ó1ˆð	Üð	Ü,0ð	ÜBJÌ3Á-ð	ä�\‰\÷	ô( ×"Ñ"×0Ñ0×AÑA×_Ñ_ØØ#ØØ#=ð	 `ð 
ˆô —?’? 4§=¡=°'Ó:ˆØˆùòw Tùò
s
   ›H/¼H4Úoutput_metadatasÚbackward_idxc                 óx  • U R                   c   eU R                   U   nU R                  U5      n	U R                  U5      n
[        UR                  S5      (       a  U R	                  U	U
UUUUU5      nO%U R
                  R                  S[        UU
/U	Q70 S9nUc   e[        5          / n[        U5       HM  u  pÞUb  X½   c  UR                  S 5        M   Uu  nnnnUR                  [        R                  " UUUUS95        MO     U R                  XË5        S S S 5        [        W5      $ ! , (       d  f       N= f)Nr—  rf   rP  )ÚsizeÚdtypeÚlayoutÚdevice)rã   ro  r²   r–  r¡  rá   rö   r   r)   r�   rv   r;   Úemptyr  rž   )ra   r   r£  r=  r¤  r?  r@  rA  r>  r;  r<  r%  Úgrad_insr†   Úoutput_metadatar¨  r©  r§  r¦  s                      rB   Úproxy_call_backwardÚ,AutogradCompilerInstance.proxy_call_backwardŽ  sT  € ð ×ÑÑ+Ð+Ð+Ø×Ñ Ñ-ˆØ—-‘- Ó'ˆØŸ™ }Ó5ˆÜ�3×#Ñ# Y×/Ñ/à×2Ñ2ØØØØØØ(Ø%ó‰Gð —n‘n×1Ñ1Ø$Ü$àØ"ðð ñð
 ð 2ð 	ˆGð Ñ"Ð"Ð"ä(Õ*à57ˆHÜ(1Ð2BÖ(CÑ$�Ø"Ñ*¨g©lÑ.BØ—O‘O DÔ)Ùà.=Ñ+�˜  tØ—‘Ü—K’K T°¸vÈfÑUöñ )Dð ×(Ñ(¨Ô;÷ +ô �X‹Ð÷ +Õ*ús   Â(A0D+Ä+
D9Ú
base_sizesÚbase_stridesÚbase_storage_offsetÚ
view_sizesÚview_stridesÚview_storage_offsetc           	      óþ   • UU R                  U5      U R                  U5      U R                  U5      U R                  U5      U R                  U5      U R                  U5      4nU R                  [        US /S-  5      $ )Né   )ro  Ú
proxy_callÚcopy_slices_prologue)	ra   r   r¯  r°  r±  r²  r³  r´  rq   s	            rB   Úcall_copy_slices_prologueÚ2AutogradCompilerInstance.call_copy_slices_prologueÃ  st   € ð Ø�M‰M˜*Ó%Ø�M‰M˜,Ó'Ø�M‰MÐ-Ó.Ø�M‰M˜*Ó%Ø�M‰M˜,Ó'Ø�M‰MÐ-Ó.ð
ˆð �‰Ô3°T¸D¸6ÀA¹:ÓFÐFrA   Úneeds_input_gradr¯   ÚresÚ
grad_slicec                 óN   • U R                  [        XX44S /[        U5      -  5      $ rE   )r·  Úcopy_slices_epiloguer  )ra   r»  r¯   r¼  r½  s        rB   Úcall_copy_slices_epilogueÚ2AutogradCompilerInstance.call_copy_slices_epilogueØ  s0   € ð �‰Ü Ø sÐ7ØˆF”SÐ)Ó*Ñ*ó
ð 	
rA   c                 ó|   • [        5          [        R                  " SS/5      sS S S 5        $ ! , (       d  f       g = f)Nr   iÍ[ri  r¦   s    rB   r�  Ú'AutogradCompilerInstance.allocate_dummyå  s$   € Ü(Õ*ä—;’;  9˜~Ó.÷ +×*×*ús   ‹-­
;Úfn_namer¨   r©   rª   c                 ó.   • [         R                  XX45      $ )zBinds ops.fn_name = fn)rs  r¹   )ra   rÄ  r¨   r©   rª   s        rB   Úbind_functionÚ&AutogradCompilerInstance.bind_functionê  s   € ô �w‰w�wÐ$6ÓEÐErA   Úgradsrq   r¬  c                 óX   • [         R                  U5      nU R                  XR/UQ7U5      $ )z:Proxies a call to ops.fn_name(grads, *args) into the graph)rs  r½   r·  )ra   rÄ  rÈ  rq   r¬  rh   s         rB   Úapply_functionalÚ)AutogradCompilerInstance.apply_functionalô  s)   € ô �W‰W�WÓˆØ�‰˜r >¨D¡>°?ÓCÐCrA   c                 ó6  ^ • [         R                  " U 4S jU5      nT R                  R                  SX0 S9nU Vs/ s H  nT R	                  5       PM     nnT R                  U[        [        U5      5       Vs/ s H  o…U   PM	     sn5        U$ s  snf s  snf )z*Proxies a call to fn(*args) into the graphc                 ó&   >• TR                  U 5      $ rE   ©ro  )r"  ra   s    €rB   r3  Ú5AutogradCompilerInstance.proxy_call.<locals>.<lambda>  s   ø€ ¨t¯}©}¸QÔ/?rA   rf   ©rq   r­   )rŽ  r�  rá   rö   r�  r  r  r  )	ra   r¨   rq   r¬  Ú
proxy_argsÚ	proxy_outrW  r¯   r•   s	   `        rB   r·  Ú#AutogradCompilerInstance.proxy_callÿ  s�   ø€ ô —_’_Ô%?ÀÓFˆ
Ø—N‘N×/Ñ/Ø˜R¸ð 0ð 
ˆ	ñ 2AÓA²¨A�$×%Ñ%Ö'±ˆÐAØ×$Ñ$ VÄEÌ#ÈfË+ÔDVÓ-WÒDV¸q¸¬lÑDVÑ-WÔXØˆùò BùÚ-Ws   ¼BÁ:B
rW  r€  c                 ó  • [         R                  S5      n[        R                  " U R                  U/UQ75      nU R
                  R                  SXV0 S9n[        U5      [        U5      :X  d   eU R                  X'5        U$ )zEProxies a call to ops.validate_outputs(outputs, *args) into the graphÚvalidate_outputsrf   rÐ  )	rs  r½   rŽ  r�  ro  rá   rö   r  r  )ra   rW  r€  rq   r¬  rh   rÑ  Únew_proxy_outputss           rB   rÕ  Ú)AutogradCompilerInstance.validate_outputs  s|   € ô �W‰WÐ'Ó(ˆÜ—_’_ T§]¡]°WÐ4D¸tÑ4DÓEˆ
Ø ŸN™N×7Ñ7Ø˜R¸ð 8ð 
Ðô �?Ó#¤s¨7£|Ó3Ð3Ð3Ø×$Ñ$ WÔ@ØˆrA   Úold_varÚnew_varc                 óè   • U R                  U5      nU R                  U5      nU R                  R                  S[        R                  X440 S9nU R                  5       nU R                  U/U/5        U$ ©Nrf   rÐ  )ro  rá   rö   r;   r¹   r�  r  )ra   rØ  rÙ  Úold_var_proxyÚnew_var_proxyrÒ  r¯   s          rB   Ú
accumulateÚ#AutogradCompilerInstance.accumulate  sq   € ØŸ™ gÓ.ˆØŸ™ gÓ.ˆØ—N‘N×/Ñ/ØœUŸY™Y¨mÐ-KÐTVð 0ð 
ˆ	ð ×$Ñ$Ó&ˆØ×$Ñ$ f X°	¨{Ô;ØˆrA   Úvariabler‚   Úhas_post_hooksc                 ó†   • U R                   R                  S[        U R                  U5      U R                  U5      U40 S9  g rÛ  )rá   rö   r   ro  )ra   rà  r‚   rá  s       rB   r\   Ú(AutogradCompilerInstance.accumulate_grad"  sF   € ð 	�‰×#Ñ#ØÜ à—‘˜hÓ'Ø—‘˜dÓ#Øðð
 ð 	$ò 		
rA   Úhookr­   c                 ó–   • U R                   R                  S[        U/U Vs/ s H  o@R                  U5      PM     snQ7U5      $ s  snf ©Nrf   )rá   rö   r   ro  )ra   rä  rq   r­   rK   s        rB   Úproxy_call_hookÚ(AutogradCompilerInstance.proxy_call_hook0  sQ   € ð �~‰~×*Ñ*ØÜàðá,0Ó1ªD q—-‘- Ö"©DÑ1ñð ó
ð 	
ùò
 2s   ¢AÚhook_idÚdata_idc                 óÊ   • U R                   c   eU R                   U   nU R                  U   nU R                  UUSS9nU R                  5       nU R	                  U/U/5        U$ )NÚunpack_hook©Ú	hook_type)rã   r  rç  r�  r  )ra   ré  rê  rä  ÚdataÚproxyr‰   s          rB   rì  Ú$AutogradCompilerInstance.unpack_hook=  s{   € Ø×ÑÑ+Ð+Ð+Ø×Ñ Ñ(ˆØ×%Ñ% gÑ.ˆØ×$Ñ$ØØØ#ð %ð 
ˆð
 ×!Ñ!Ó#ˆØ×$Ñ$ c U¨U¨GÔ4Øˆ
rA   r•   c                 óü   • U R                   c   eU R                   U   nU R                  UX   SS9n[        5          [        X   5      X'   U R	                  X   /U/5        S S S 5        U$ ! , (       d  f       U$ = f)NÚtensor_pre_hookrí  ©rã   rç  r)   rM   r  )ra   r   ré  r•   rä  rð  s         rB   ró  Ú(AutogradCompilerInstance.tensor_pre_hookJ  sŽ   € ð ×ÑÑ+Ð+Ð+Ø×Ñ Ñ(ˆØ×$Ñ$ØØ‰IØ'ð %ð 
ˆô
 )Õ*Ü# F¡IÓ.ˆF‰IØ×(Ñ(¨&©)¨°u°gÔ>÷ +ð ˆ÷ +Ô*ð ˆús   ¼&A,Á,
A;c           	      óR  • U R                   R                  S[        R                  R                  R
                  R                  X R                  X   5      40 5      n[        5          [        X   5      X'   U R                  X   /U/5        S S S 5        U$ ! , (       d  f       U$ = fræ  )rá   rö   r;   Ú_Crµ   r7   Úcall_cpp_tensor_pre_hooksro  r)   rM   r  )ra   r   ré  r•   rð  s        rB   Úcpp_tensor_pre_hookÚ,AutogradCompilerInstance.cpp_tensor_pre_hookY  s�   € ð —‘×+Ñ+ØÜ�H‰H×Ñ×.Ñ.×HÑHØ—m‘m F¡IÓ.Ð/Øó	
ˆô )Õ*Ü# F¡IÓ.ˆF‰IØ×(Ñ(¨&©)¨°u°gÔ>÷ +ð ˆ÷ +Ô*ð ˆús   Á'&BÂ
B&c                 ó  • U R                   c   eU R                   U   nU R                  UUSS9n[        5          U Vs/ s H  n[        U5      PM     nnU R	                  X5        S S S 5        U$ s  snf ! , (       d  f       U$ = f)NÚpre_hookrí  rô  )ra   r   ré  rä  r%  rK   s         rB   rü  Ú!AutogradCompilerInstance.pre_hookg  s‘   € Ø×ÑÑ+Ð+Ð+Ø×Ñ Ñ(ˆØ×&Ñ&ØØØ ð 'ð 
ˆô
 )Õ*Ù.4Ó5ªf¨”k !–n©fˆFÐ5Ø×(Ñ(¨Ô9÷ +ð ˆùò 6÷ +Ô*ð ˆús   ºA6¿A1ÁA6Á1A6Á6
Bc                 ó  • U R                   c   eU R                   U   nU R                  UUUSS9n[        5          U Vs/ s H  n[        U5      PM     nnU R	                  X5        S S S 5        U$ s  snf ! , (       d  f       U$ = f)NÚ	post_hookrí  rô  )ra   r€  r   ré  rä  r%  rK   s          rB   rÿ  Ú"AutogradCompilerInstance.post_hookt  s–   € ð ×ÑÑ+Ð+Ð+Ø×Ñ Ñ(ˆØ×&Ñ&ØØØØ!ð	 'ð 
ˆô )Õ*Ù/6Ó7ªw¨!”{ 1–~©wˆGÐ7Ø×(Ñ(¨Ô:÷ +ð ˆùò 8÷ +Ô*ð ˆús   »A7Á A2ÁA7Á2A7Á7
BÚinputc                 ó,  • [        U[        R                  5      (       d   eU R                  c   eU R                  U   nU R	                  UUSS9n[        5          [        U5      /nU R                  XT/5        S S S 5        U$ ! , (       d  f       W$ = f)NÚpost_acc_grad_hookrí  )rP   r;   rŸ   rã   rç  r)   rM   r  )ra   r  ré  rä  rð  r¼  s         rB   r  Ú+AutogradCompilerInstance.post_acc_grad_hook„  sœ   € ô ˜%¤§¡×.Ñ.Ð.Ð.Ø×ÑÑ+Ð+Ð+Ø×Ñ Ñ(ˆØ×$Ñ$ØØØ*ð %ð 
ˆô
 )Õ*Ü˜uÓ%Ð&ˆCØ×(Ñ(¨¨gÔ6÷ +ð ˆ
÷ +Ô*ð ˆ
ús   ÁBÂ
Brd   c                 óâ  • 0 nSn[        UR                  5      nUS   R                  S:X  d   eUS   n[        UR                  R	                  5       5      n[        [        5      nXG   US   :X  d   eU[        U5      -   S-
  nXH   US   :X  d   e[        U5       HØ  u  pšU(       d+  U
R                  S   R                  R                  S:X  a  SnM7  U
R                  S   R                  R                  S	:H  n[        U
R                  S   R                  5       5      S:H  nU(       d  M�  U(       d  M˜  [        U
R                  R	                  5       5      n[        S
 U 5       5      (       d  MÔ  X¢U	'   MÚ     U(       ap  UR                  5        HC  n
[        R                  SU
5        U
R                  S   R!                  5       U
R                  S'   ME     [        UR	                  5       5      $ / $ )NFr   r   rl   éÿÿÿÿr#  ÚcudaTÚcpuc              3   óD  #   • U  H–  n[        UR                  [        R                  R                  5      =(       a    UR                  R
                  S ;   =(       d<    [        UR                  [        5      =(       a    UR                  R                  (       + v •  M˜     g7f))Úprimsrt  N)rP   ri   r;   Ú_opsÚ
OpOverloadÚ	namespacer³   r©   ©r÷   Úusers     rB   rø   ÚDAutogradCompilerInstance.move_graph_nodes_to_cuda.<locals>.<genexpr>°  sx   é € ð 
ò !+˜ô # 4§;¡;´·
±
×0EÑ0EÓF÷ GØ ŸK™K×1Ñ1Ð5FÑF÷ô
 # 4§;¡;´Ó3÷ ?Ø $§¡× >Ñ >Ô>ôò !+ùs   ‚BB zMoving node %s from cpu to cuda)r›  ro   ri   ÚusersÚkeysr  r
  r�   Úmetar©  r  r¦  ÚallÚvaluesÚverbose_logÚdebugr  )ra   rd   Úto_moveÚhas_cuda_inputsro   r   Úinputs_usersÚfirst_getitem_idxÚlast_getitem_idxr•   r{   Úis_cpuÚ	is_scalarÚ
node_userss                 rB   Úmove_graph_nodes_to_cudaÚ1AutogradCompilerInstance.move_graph_nodes_to_cuda™  s¶  € Ø,.ˆØˆÜ�U—[‘[Ó!ˆØ�Q‰x�‰ (Ó*Ð*Ð*Ø�q‘ˆÜ˜FŸL™L×-Ñ-Ó/Ó0ˆäÔ 3Ó4ÐØÑ'¨<¸©?Ó:Ð:Ð:Ø,¬s°<Ó/@Ñ@À1ÑDÐØÑ&¨,°rÑ*:Ó:Ð:Ð:ä  Ö.‰GˆAÞ" 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ßˆvŸ)˜)Ü! $§*¡*§/¡/Ó"3Ó4�
äñ 
ñ !+ó
÷ 
ó 
ð "&˜A“Jñ- /ö4 ØŸ™Ö(�Ü×!Ñ!Ð"CÀTÔJØ#'§9¡9¨UÑ#3×#8Ñ#8Ó#:�—	‘	˜%Ó ñ )ô
 ˜Ÿ™›Ó'Ð'àˆ	rA   r{   c                 óV  • [        U[        R                  R                  5      =(       a    UR                  S:H  =(       ai    UR
                  [        R                  R                  R                  R                  [        R                  R                  R                  R                  4;   $ ræ  )rP   r;   rœ   rp  rh   ri   rs  rt  Úsym_sizeru   Ú	sym_numelrv  )ra   r{   s     rB   Úis_sym_nodeÚ$AutogradCompilerInstance.is_sym_nodeÊ  sn   € ä�tœUŸX™XŸ]™]Ó+÷ OØ—‘˜?Ñ*÷Oà—‘Ü—	‘	—‘×'Ñ'×+Ñ+¬U¯Y©Y¯^©^×-EÑ-E×-MÑ-MÐNñOð	
rA   c                 óx  ^• [        5       mS n[        U R                  R                  R	                  SS95       H.  u  pTR                  UR                  R                  5       5        M0     U[        [        5      S-
  :X  d   eS[        R                  R                  S[        4U4S jjn[        U R                  R                  R                  5      nU R                  R                  R                  U5        [        U R                  R                  R                  5      n[         R#                  SXE-
  5        g )Nrõ   rk   rl   r{   r9   c                 óz   >• U T;   d$  U R                   S:X  a  U R                  [        ;   a  gU R                  5       $ )Nrf   T)rh   ri   Ú_impure_targetsÚ	is_impure)r{   Úunpack_nodess    €rB   r*  Ú/AutogradCompilerInstance.dce.<locals>.is_impureÝ  s2   ø€ Ø�|Ó#Ø—‘˜?Ó*¨t¯{©{¼oÓ/MàØ—>‘>Ó#Ð#rA   zDCE removed %d nodes)r4   r�   rá   rd   rp   Úupdater  r  r  r
  r;   rœ   rp  rr   ro   Úeliminate_dead_coder  r  )ra   r•   r{   r*  ÚbeforeÚafterr+  s         @rB   ÚdceÚAutogradCompilerInstance.dceÒ  sé   ø€ ô
 3=³,ˆØˆÜ  §¡×!5Ñ!5×!@Ñ!@ÀMÐ!@Ð!RÖS‰GˆAØ×Ñ §
¡
§¡Ó 1Ö2ñ Tà”CÔ+Ó,¨qÑ0Ó0Ð0Ð0ð	$œEŸH™HŸM™Mð 	$¬d÷ 	$ô �T—^‘^×)Ñ)×/Ñ/Ó0ˆØ�‰×Ñ×0Ñ0°Ô;Ü�D—N‘N×(Ñ(×.Ñ.Ó/ˆÜ×ÑÐ0°&±.ÕArA   c                 ó2  • / n/ n[        U R                  R                  R                  5      n[	        U5        [	        U5      nUR
                  S:X  d   eUR                   HW  nUR                  [        R                  L d   eUR                  (       a  UR                  U5        MF  UR                  U5        MY     [        5       nU Hœ  n[        UR                  [        5      (       d   eUR                  S   U:X  d   e[        UR                  S   [        5      (       d   e[!        U5      nUR#                  UR                  S   5        UR                  S   U4Ul        Mž     U H(  n	U R                  R                  R%                  U	5        M*     U$ )NrË   r   rl   )rn   rá   rd   ro   rm   rw   r  ri   rs   rt   rv   ÚsetrP   rq   rž   ru   r  r¹   Ú
erase_node)
ra   Ú
used_sizesÚunused_sizesÚitÚ
sizes_nodeÚgetitem_nodeÚused_sizes_idxÚusedÚnext_size_idxÚunuseds
             rB   Úremove_unused_sizesÚ,AutogradCompilerInstance.remove_unused_sizesé  sV  € Øˆ
Øˆô �$—.‘.×&Ñ&×,Ñ,Ó-ˆÜˆRŒÜ˜"“Xˆ
Ø�‰ 'Ó)Ð)Ð)à&×,Ô,ˆLØ×&Ñ&¬(×*:Ñ*:Ò:Ð:Ð:Ø×!×!Ø×!Ñ! ,Ö/ð ×#Ñ# LÖ1ñ -ô $'£5ˆÛˆDÜ˜dŸi™i¬×/Ñ/Ð/Ð/Ø—9‘9˜Q‘< :Ó-Ð-Ð-Ü˜dŸi™i¨™l¬C×0Ñ0Ð0Ð0Ü Ó/ˆMà×Ñ˜tŸy™y¨™|Ô,àŸ™ 1™ }Ð5ˆDŽIñ ó #ˆFØ�N‰N× Ñ ×+Ñ+¨FÖ3ñ #ð ÐrA   rý   c                 ól   • [        U R                  R                  U R                  R                  U5      $ rE   )r%   rá   r  rd   )ra   rý   s     rB   Úcreate_graph_moduleÚ,AutogradCompilerInstance.create_graph_module  s%   € Ü˜4Ÿ>™>×.Ñ.°·±×0DÑ0DÀbÓIÐIrA   c                 óL  ^ ^^^• T R                   R                  S[        R                  S0 5        T R                  R                  5         T R                   R                  SST R                   R                  T R                  U5      5      40 5        / m[        5       (       a%  T R                  T R                   R                  5      mT R                   R                  R                   H*  nS H!  nX2R                  ;   d  M  UR                  U	 M#     M,     [        SS U 4S jS9  T R                  5         T R!                  5         T R#                  5         T R%                  5         T R'                  5         T R)                  5         T R+                  5         T R-                  5         T R.                  (       a/  T R.                  R1                  T R                   R                  5        T R3                  5       mT R5                  S	T R6                   35      m[9        TS
/5        [;        STSSSS9n[<        R?                  SU5        [@        RC                  SU5        [        SU4S jS9  S[D        S[F        4   S
[F        S[F        S[F        S[F        S[F        S[H        [F        [F        4   4UU U4S jjn[K        5       RM                  S[N        RP                  " 5       ST R6                  0T RR                  SS9  T RT                  RW                  S S S 5        UT RY                  T5      4$ )Nrf   r@   rj   )Útensor_metaÚexample_valuer#  r-  c                  ó   • SSS.$ )NÚ&compiled_autograd_graph_pre_reorderingÚstringr1  r@   r@   rA   rB   r3  Ú6AutogradCompilerInstance.end_capture.<locals>.<lambda>*  s   € Ø@Ø$ò!rA   c                  ó¤   >• [        T R                  R                  T R                  R                  ST R                   S35      R                  SS9$ )NÚCompiledAutogradÚPreReorderingF©Úprint_output)r%   rá   r  rd   rý   Úprint_readabler¦   s   €rB   r3  rJ  .  sG   ø€ œ{Ø—‘×#Ñ#Ø—‘×$Ñ$Ø" 4§7¡7 )¨=Ð9ó ÷ ‰n¨%ˆnÐ0ð	 1rA   r6  rL  r   zCompiled autograd graphT)Úinclude_deviceÚinclude_strideÚcoloredz%sÚcompiled_autograd_graphc                  ó"   >• T R                  SS9$ )NFrN  )rP  )rd   s   €rB   r3  rJ  Y  s   ø€ ˜u×3Ñ3ÀÐ3ÑGrA   )r8  Úcompiled_fn.rË   rÌ   rÍ   Úpacked_inputsr9   c           	      óú  >•  Sq TR                  (       a  TR                  R                  U5        / n[        U5       Ho  u  pxUT;   d  M  US:”  aK  UR	                  [
        R                  " SU5      5        [
        R                  R                  US   S5        M^  UR	                  U5        Mq     T H$  n	X   R                  5       R                  SS9X'   M&     [        5          [        TR                  5         U " XX4U5      n
TR                  (       a  TR                  R                  U
5        U
sS S S 5        sS S S 5        Sq $ ! , (       d  f       O= fS S S 5        O! , (       d  f       O= fSq g ! Sq f = f)NTr   r  rl   )Únon_blockingF)Úin_compiled_autograd_regionr   r‡   r�   rv   r;   rª  rµ   Úmaybe_mark_dynamicÚ
pin_memoryr  Ú_disablerÓ   rý   r–   )rV  r   rË   rÌ   rÍ   rW  Úfiltered_sizesr†   Úintegerr•   r‰   Úruntime_inputs_to_movera   r;  s              €€€rB   Úruntime_wrapperÚ=AutogradCompilerInstance.end_capture.<locals>.runtime_wrapper\  s6  ø€ ð4Ø.2Ð+à×#×#Ø×$Ñ$×5Ñ5°fÔ=à!#�Ü$-¨eÖ$4‘L�CØ˜nÕ,à" Q›;Ø*×1Ñ1´%·+²+¸aÀÓ2IÔJÜ!ŸM™M×<Ñ<¸^ÈBÑ=OÐQRÖSà*×1Ñ1°'Ö:ñ %5ó 0�AØ &¡	× 4Ñ 4Ó 6× ;Ñ ;ÈÐ ;Ð N�F“Iñ 0ô •ZÔ!5°d·g±gÕ!>Ù%Ø°Àó�Cð ×'×'Ø×(Ñ(×.Ñ.¨sÔ3Ø÷ "?Ð!>—Z�Zð /4Ñ+÷ "?Õ!>ú—Z—Z–Zúð /4Ñ+ø¨eÑ+úsI   ƒAE6 ÁBE6 Ã%E"Ã;8EÄ3	E"Ä<	E6 Å
E	ÅE"Å	E6 Å"
E0Å,E6 Å6E:r7   rð   rñ   )-rá   rö   r   Ú_exec_final_callbacks_stubrÞ   rß   rr  Ú
create_argro  rJ   r   rd   ro   r  r    Ú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_nodesr1  r   r}   r?  rB  rý   r   r   Úcompiled_autograd_logÚinfor  r  r   r   rž   r   Úlog_event_endr  r  r  r   Ú__exit__rÖ   )	ra   r€  r{   ÚfieldÚlazy_graph_codera  rd   r`  r;  s	   `     @@@rB   Úend_captureÚ$AutogradCompilerInstance.end_capture  sÅ  û€ Ø�‰×#Ñ#ØÜ&×AÑAØØô		
ð 	�
‰
×ÑÔØ�‰×"Ñ"ØØØ�^‰^×&Ñ& t§}¡}°WÓ'=Ó>Ð@Øô		
ð -/ÐÜ%×'Ñ'Ø%)×%BÑ%BÀ4Ç>Á>×CWÑCWÓ%XÐ"ð
 —N‘N×(Ñ(×.Ô.ˆDÛ@�ØŸI™IÕ%ØŸ	™	 %Ò(ó Añ /ô
 	Øñô1ò	
ð 	×$Ñ$Ô&Ø×*Ñ*Ô,Ø×4Ñ4Ô6Ø×*Ñ*Ô,Ø×2Ñ2Ô4Ø×-Ñ-Ô/Ø×$Ñ$Ô&ð 	�‰Œ
Ø××Ø×Ñ×,Ñ,¨T¯^©^×-AÑ-AÔBð ×1Ñ1Ó3ˆà×(Ñ(Ð+;¸D¿G¹G¸9Ð)EÓFˆÜ˜E H :Ô.Ü0Ø%ØØØØñ
ˆô 	×"Ñ" 4¨Ô9Ü×Ñ˜$ Ô0ÜØ%ÜGò	
ð
$	4Ü! #¤s (Ñ+ð$	4äð$	4ô ð$	4ô ð	$	4ô
 ð$	4ô ð$	4ô ”3œ�8‰_÷$	4ñ $	4ôL 	"Ó#×1Ñ1ØÜ�LŠL‹NØ˜Ÿ™Ð!Ø×ÑØ"&ð 	2ñ 	
ð 	×Ñ×%Ñ% d¨D°$Ô7Ø × 0Ñ 0°Ó 7Ð7Ð7rA   c                 ó„   • U  Vs/ s H-  n[        U5      [        R                  R                  L d  M+  UPM/     nnU$ s  snf rE   )r  r;   rœ   rp  )rq   ra  ro   s      rB   Úget_all_nodesÚ&AutogradCompilerInstance.get_all_nodesŒ  s5   € ñ !Ó=šD�q¤D¨£G¬u¯x©x¯}©}Ð$<—™DˆÐ=Øˆùò >s   …*=³=c                 óº   • U R                   S:X  dJ  U R                   S:X  a;  U R                  [        R                  L a  U R                  S   R                   S:X  a  gg)Nrõ   rf   r   TF)rh   ri   rs   rt   rq   )r{   s    rB   Úis_placeholderÚ'AutogradCompilerInstance.is_placeholder’  sF   € à�7‰7�mÓ#Ø�G‰G�Ó&Ø—‘œx×/Ñ/Ò/Ø—	‘	˜!‘—‘ =Ó0àØrA   c                 ó²  • U R                   R                  R                  S[        S9 H«  nUR                  S   UR                  S   p2SnUR
                  [        R                  L a  UnUR                  S   n[        X#/5      nXQR                  Ld  Ml  U R                  U5      (       a  M„  UR                  U5        Uc  Mš  UR                  U5        M­     g)zí
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.
rf   rg   r   rl   N)rá   rd   rp   r   rq   ri   rs   rt   ÚmaxÚprevrx  rv   )ra   r{   r|   Ú	grad_noder:  Úargs         rB   rh  Ú6AutogradCompilerInstance.reorder_accumulate_grad_nodesœ  sº   € ð —N‘N×(Ñ(×3Ñ3ØÔ';ð 4ó 
ˆDð %)§I¡I¨a¡L°$·)±)¸A±,˜	ØˆLØ×Ñ¤8×#3Ñ#3Ò3Ø(�Ø(×-Ñ-¨aÑ0�	ä�zÐ-Ó.ˆCØŸ)™)Ô#¨D×,?Ñ,?À×,DÓ,DØ—
‘
˜4Ô ØÓ+Ø—J‘J˜|Ö,ò
rA   c                 óò   • U R                   R                  R                  S[        S9 HK  nUR                  R                  SS5      S:w  a  M%  [        UR                  5      nUR                  U5        MM     g)z`
We can delay unpack hooks until they are needed, even later than in the eager autograd engine.
rf   rg   rî  Nrì  )	rá   rd   rp   r   r­   r½   Úminr  Úprepend)ra   r{   Ú
first_users      rB   re  Ú0AutogradCompilerInstance.delay_unpack_hook_nodes±  sd   € ð —N‘N×(Ñ(×3Ñ3Ø¤yð 4ó 
ˆDð �{‰{�‰˜{¨DÓ1°]ÓBÙä˜TŸZ™Z›ˆJØ×Ñ˜tÖ$ò
rA   c                 óv  • U R                   R                  R                  S[        S9 H�  nUR                  R                  SS5      S:w  a  M%  UR                  S   nUR                  S   nX1R                  Ld  MS  U R                  U5      (       a  Mk  UR                  U5        UR                  U5        M�     g)zë
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.
rf   rg   rî  Nró  r   rl   )
rá   rd   rp   r   r­   r½   rq   r|  rx  rv   )ra   r{   r:  Ú
input_nodes       rB   rf  Ú6AutogradCompilerInstance.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Ó3RØ×!Ñ! ,Ô/Ø×#Ñ# DÖ)ò
rA   c                 ó2  • U R                   R                  R                  S[        S9 GHj  nUR                  R                  SS5      S:w  a  M&  UR                  S   nU R                  UR                  S   5      n/ n/ nU/nU Ht  nUR                  S:X  d  M  UR                  [        R                  L d  M4  UR                  UR                  S   5        UR                  U5        UR                  U5        Mv     [        XE5       H'  u  p‰UR                  U5        UR                  U	5        M)     [        U5      n
X¡R                   Ld  GM&  U R#                  U
5      (       a  GM?  U
R                  U5        U H  nUR                  U5        M     GMm     g)aR  
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.
rf   rg   rî  Nrü  r   rl   )rá   rd   rp   r   r­   r½   rq   ru  rh   ri   rs   rt   rv   ÚzipÚremover{  r|  rx  )ra   r{   r:  Úinput_nodesÚ	to_removeÚ	to_appendÚ
hook_blockra  ÚaÚbr~  s              rB   rg  Ú@AutogradCompilerInstance.reorder_pre_hook_nodes_to_schedule_asapÒ  sQ  € ð —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Ö1‘�Ø×"Ñ" 1Ô%Ø×"Ñ" 1Ö%ñ 2ô �kÓ"ˆCØŸ)™)Õ#¨D×,?Ñ,?À×,DÔ,DØ—
‘
˜<Ô(Û#�AØ ×'Ñ'¨Ö*ô $ò3
rA   c                 óž  • / nU R                   R                  R                  S[        S9 H6  nUR                  R                  SS5      S:w  a  M%  UR                  U5        M8     [        U5       HÚ  nUR                  S   n[        UR                  R                  5       5      n[        U5      S:X  a  MF  [        S U 5       5      (       d   e[        [        US   R                  R                  5       5      5      nXRR                  Ld  Mž  UR!                  U5        UR!                  U5        U H  nUR!                  U5        M     MÜ     g)zý
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.
rf   rg   rî  Nrü  r   c              3   ó†   #   • U  H7  nUR                   S :H  =(       a    UR                  [        R                  L v •  M9     g7f)rf   N)rh   ri   rs   rt   r  s     rB   rø   ÚQAutogradCompilerInstance.reorder_pre_hook_nodes_to_mimic_eager.<locals>.<genexpr>  s7   é € ð â!�Dð —‘˜?Ñ*×N¨t¯{©{¼h×>NÑ>NÐ/NÔNÚ!ùs   ‚?A)rá   rd   rp   r   r­   r½   rv   Úreversedrq   r›  r  r  r  r  rm   rn   r‚  )ra   Ú	pre_hooksr{   Úhook_getitem_noder  Úregistered_nodert   s          rB   ri  Ú>AutogradCompilerInstance.reorder_pre_hook_nodes_to_mimic_eagerö  s%  € ð ˆ	Ø—N‘N×(Ñ(×3Ñ3Ø¤yð 4ó 
ˆDð �{‰{�‰˜{¨DÓ1°ZÓ?ÙØ×Ñ˜TÖ"ñ
ô ˜YÖ'ˆDØ $§	¡	¨!¡Ðä˜Ÿ™Ÿ™Ó*Ó+ˆEÜ�5‹z˜Q‹Ùô ñ á!ó÷ ñ ð ð ô #¤4¨¨a©¯©×(;Ñ(;Ó(=Ó#>Ó?ˆOà§i¡iÔ/Ø×'Ñ'Ð(9Ô:Ø×'Ñ'¨Ô-Û$�GØ#×+Ñ+¨GÖ4ó  %ò# (rA   c                 ó.  • / nU R                   R                  R                  S[        S9 H6  nUR                  R                  SS5      S:w  a  M%  UR                  U5        M8     [        U5       H¢  nUR                  S   nUR                  S   nSn[        UR                  R                  5       5       H,  nUR                  S:X  d  M  UR                  [        L d  M*  Un  O   Uc   S5       eUR                  U5        UR                  U5        M¤     g)	zî
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.
rf   rg   rî  Nr  r   rl   z8post_acc_grad_hook must have corresponding acc grad node)rá   rd   rp   r   r­   r½   rv   r•  rq   r›  r  r  rh   ri   r   )ra   Úpost_acc_grad_hooksr{   r:  r|   Úacc_grad_nodera  s          rB   rj  Ú9AutogradCompilerInstance.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�Ø—4‘4˜?Õ*¨q¯x©xÔ;OÔ/OØ$%�MÙñ 3ð
 !Ñ,ð ØJóÐ,ð
 × Ñ  Ô.Ø×Ñ Ö%ò# 2rA   c           	      ó†  ^• / nU R                   R                  R                  S[        S9 H6  mTR                  R                  SS5      S:w  a  M%  UR                  T5        M8     [        U5       GHÌ  mTR                  S   nTR                  S   nTR                  S   n[        U5      S:”  a  MB  / nUR                  [        U5      5        U H?  nUR                  U4S	 j[        UR                  R                  5       5       5       5        MA     [        U5      nUR                  S:X  aÁ  UR                   ["        L a®  UR                  S   nSn	[        UR                  R                  5       5       HN  n
U
R                  S:X  d  M  U
R                   [        L d  M*  U
R                  R                  SS5      S
:X  d  ML  U
n	MP     U	b%  U	R                  U5        UR                  T5        GM  UTR$                  Ld  GM‘  U R'                  U5      (       a  GMª  UR                  U5        UR                  T5        GMÏ     g)zå
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.
rf   rg   rî  Nrÿ  r   rl   é   c              3   ó²   >#   • U  HL  nUR                   S :X  a5  UR                  [        L a"  TR                  R	                  SS5      S:X  a  MH  Uv •  MN     g7f)rf   rî  Nrÿ  )rh   ri   r   r­   r½   )r÷   r  r{   s     €rB   rø   ÚCAutogradCompilerInstance.reorder_post_hook_nodes.<locals>.<genexpr>X  sI   øé € ð -â =˜àŸ™ ?Ó2Ø ŸK™K¬9Ò4Ø ŸK™KŸO™O¨K¸Ó>À+ÑM÷ ‘DÚ =ùs   ƒAAÁ	Ar  )rá   rd   rp   r   r­   r½   rv   r•  rq   r  Úextendr›  r  r  r{  rh   ri   r   r|  rx  )ra   Ú
post_hooksr:  rz   r‹  Úinput_nodes_and_usersr†  r~  r|   Úpost_acc_grad_hook_nodera  r{   s              @rB   rk  Ú0AutogradCompilerInstance.reorder_post_hook_nodes=  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Ø�v‰v˜Ó(¨S¯Z©ZÔ;OÒ-OØ ŸX™X a™[�
Ø*.Ð'Ü˜j×.Ñ.×3Ñ3Ó5Ö6�AàŸ™ Õ/ØŸH™H¬	Ô1ØŸH™HŸL™L¨°dÓ;Ð?SÕSà23Ò/ñ 7ð +Ñ6Ø+×2Ñ2°<Ô@Ø ×'Ñ'¨Ô-Úà˜$Ÿ)™)Õ#¨D×,?Ñ,?À×,DÔ,DØ—
‘
˜<Ô(Ø×#Ñ# D×)òS )rA   Útc                 ól  ^ • Uc  g [        U[        5      (       a"  U Vs/ s H  nT R                  U5      PM     sn$ [        U[        5      (       a  [        U 4S jU 5       5      $ [        U[        R
                  [        R                  45      (       a  T R                  UR                     $ [        U[        R                  5      (       d  U$ [        T R                  U5      n[        U[        R                  R                  R                  R                  5      (       d   eUR                   $ s  snf )Nc              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7frE   rÎ  )r÷   rK   ra   s     €rB   rø   Ú4AutogradCompilerInstance.to_proxy.<locals>.<genexpr>}  s   øé € Ð5²1¨a˜Ÿ™ q×)Ð)²1ùs   ƒ!)rP   r›  ro  rž   r;   ÚSymIntÚSymFloatr	  r{   rŸ   r*   rá   rœ   r  Úproxy_tensorÚ_ProxyTensorrð  )ra   r§  rK   r­  s   `   rB   ro  Ú!AutogradCompilerInstance.to_proxyw  sã   ø€ Ø‰9ØÜ�aœ×ÑÙ./Ó0ªa¨�D—M‘M !Ö$©aÑ0Ð0Ü�aœ×ÑÜÔ5±1Ó5Ó5Ð5Ü�aœ%Ÿ,™,¬¯©Ð7×8Ñ8Ø×,Ñ,¨Q¯V©VÑ4Ð4Ü˜!œUŸ\™\×*Ñ*àˆHÜ)¨$¯.©.¸!Ó<ˆÜ˜,¬¯©×(=Ñ(=×(JÑ(J×(WÑ(W×XÑXÐXÐXØ×!Ñ!Ð!ùò 1s   ŸD1Úobjectsr%  c                 óä  • [        U[        R                  R                  5      (       a’  U(       ae  [	        U5      [	        U5      :X  d   e/ n[        [	        U5      5       H.  nX5   u  pgU R                  XvS 5        UR                  X%   5        M0     UnO&[        [	        U5      5       Vs/ s H  oRU   PM	     nn[	        U5      [	        U5      :X  d   e[        XS U R                  S9  U$ s  snf ©N)ÚconstantÚtracer)
rP   r;   rœ   r6   r  r  Úset_node_originrv   r-   rá   )ra   r°  r%  rì   Úbound_proxiesr•   Únodecall_indexrX  s           rB   r  Ú0AutogradCompilerInstance.bind_objects_to_proxies‡  sÍ   € ô �gœuŸx™xŸ~™~×.Ñ.ÞÜ˜7“|¤s¨7£|Ó3Ð3Ð3Ø "�Üœs 7›|Ö,�AØ07±
Ñ-�NØ×(Ñ(¨ÀDÔIØ!×(Ñ(¨©Ö4ñ -ð (‘ä/4´S¸³\Ô/BÓCÒ/B¨! 1œ:Ñ/B�ÐCä�7‹|œs 7›|Ó+Ð+Ð+Ü˜'°TÀ$Ç.Á.ÒQØˆùò	 Ds   Â,C-Úindexc                 ó€   • U R                   c   eU R                   U   n[        5       n[        X2S U R                  S9  U$ r²  )rã   r&   r-   rá   )ra   r¹  rð  Úbw_states       rB   Úbind_backward_stateÚ,AutogradCompilerInstance.bind_backward_state�  s@   € Ø×ÑÑ+Ð+Ð+Ø× Ñ  Ñ'ˆÜ “?ˆÜ˜(°DÀÇÁÒPØˆrA   rX  r·  Úpyobjc                 ó*  • SnUbA  UR                   n[        US5      (       a$  UR                  c  [        S5      eUR                  nU U SU S3n[
        R                  " 5       R                  5       S   nUR                  SU5      n[        U5        g )NÚ 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`.z (NodeCall Ú)r  z:raw_stack_trace = CapturedTraceback.extract().format()[-1])
r–  r²   rQ   rŽ   r—  r5   ÚextractÚformatÚreplacer1   )	ra   rX  r·  r¾  Úmaybe_aot_idÚforward_clsÚnew_codeÚraw_stack_traceÚnew_stack_traces	            rB   rµ  Ú(AutogradCompilerInstance.set_node_origin¤  s¥   € ð ˆØÑØ×,Ñ,ˆKÜ�{ I×.Ñ.à×2Ñ2Ñ:Ü&ðsóð ð  +×2Ñ2�Ø�[  ¨k¸.Ð9IÈÐKˆÜ+×3Ò3Ó5×<Ñ<Ó>¸rÑBˆØ)×1Ñ1ØHÈ(ó
ˆô 	˜Õ(rA   )rþ   rß   r   rÖ   rà   rá   rã   rý   r   r  râ   r  rÚ   r  rÞ   r  r	  r¿   rE   )Mr˜   r™   rš   r›   r   r   rb   r;   rŸ   r	   r   r$   rè   ÚstaticmethodrÀ   r   rå   r›  ru   r   r  rž   rr   r3   r2   r)  r9  r   r¡  ÚautogradÚfunctionÚBackwardCFunctionr­  r¹  rÀ  r�  rÆ  rÊ  r·  rÕ  rÞ  r\   rœ   r6   rç  rì  ró  rù  rü  rÿ  r  r�   r   r%  r1  r4  r?  r%   rB  rr  rp  ru  rx  rh  re  rf  rg  ri  rj  rk  ro  r  r&   r¼  ÚFunctionrµ  r    r@   rA   rB   rÕ   rÕ     so  † ð1 H¨S°#¨XÑ$6ð 1¸4ô 1ðC˜5Ÿ<™<ð C°¸&Ñ1Að CÀjô Cð ð5�Sð 5˜sð 5 }ó 5ó ð5ðx
à�U—\‘\Ñ"ðx
ð �C‰yðx
ð �e˜C ˜JÑ'Ñ(ð	x
ð
 �d˜5  c ™?Ñ+Ñ,ðx
ð ðx
ð ðx
ð 
ˆs�D˜Ÿ™Ñ&¨¨[Ñ(9¸4ÀÑ;NÐNÑ	Oôx
ðt
à˜c™ð
ð 
ô
ðPà˜#‘ðPð ! §¡Ñ.ðPð   §¡Ñ-ð	Pð
 ðPð ðPð #+¨3¡-ðPð  $ C™yðPð 
�#‰ôPðd3à˜‘ð3ð # 3™-ð3ð   §¡Ñ-ð	3ð
 ð3ð �^‰^×$Ñ$×6Ñ6ð3ð #+¨3¡-ð3ð  $ C™yð3ð 
ˆx˜Ÿ™Ñ% sÐ*Ñ	+ô3ðjGà˜‘ðGð ˜S‘MðGð ˜s‘mð	Gð
 !ðGð ˜S‘MðGð ˜s‘mðGð !ðGð 
�%—,‘,Ñ	ôGð*
à" 4™.ð
ð —‘ð
ð �c‰]ð	
ð
 —L‘Lð
ð 
�%—,‘,Ñ	ô
ð/ §¡ô /ð
FàðFð �S˜#�XÑðFð !ð	Fð
 ðFð 
ôFð	Dàð	Dð ˜‰}ð	Dð ð		Dð
 " #™ð	Dð 
�%—,‘,Ñ	ô	Dð
Ø˜3 ˜8Ñ$ð
Ø,/ð
ØBJÈ3Á-ð
à	�%—,‘,Ñ	ô
ðØðØ'¨™}ðØ47ðØJRÐSVÉ-ðà	�%—,‘,Ñ	ôð #ð °ð ¸¿¹ô ð
ØŸ™ð
Ø,1¯L©Lð
ØJNð
à	ô
ð
Ø˜S #˜XÑ&ð
Ø/2ð
Ø>Að
à	�‰�‰ô
ð 3ð °ð ¸¿¹ô ðØ˜5Ÿ<™<Ñ(ðØ36ðØ;>ðà	ˆe�l‰lÑ	ôðØ˜5Ÿ<™<Ñ(ðØ36ðØ;>ðà	ˆe�l‰lÑ	ôð˜x¨™}ð °sð ¸tÀEÇLÁLÑ?Qô ðØ˜EŸL™LÑ)ðØ3;¸E¿L¹LÑ3IðØTWðà	ˆe�l‰lÑ	ôð Ø—\‘\ðØ,/ðà	ˆe�l‰lÑ	ôð*/¨e¯h©h¯n©nð /ÀÀcÁô /ðb
 ð 
¨ô 
ôBð.  S¨¡Xô  ðDJ cð J¨kô Jð|8 3ð |8¨5°¸#¸s¸(Ñ1CÀSÐ1HÑ+Iô |8ð| ð˜H S™Mð ¨d°5·8±8·=±=Ñ.Aó ó ðð
 ð˜UŸX™XŸ]™]ð ¨tó ó ðô-ô*%ô*ô("+ôH!5ôF"&ôH8*ðt"˜#ð " #ô "ð( 48ñ	à˜#‘ðð ðð ˜$˜u S¨# X™Ñ/Ñ0ð	ð
 
�#‰õð,¨ð °ô ð)àð)ð ð)ð ˜Ÿ™×/Ñ/Ñ0ð	)ð
 
÷)rA   rÕ   FrÖ   ÚdynamicÚignore_active_disable_ctx)NNNc              #   óP  #   • U(       d  [         (       a  S v •  g U(       a  [        U5      [        L d   eSSKJn  UR
                  R                  S:X  a
  Sq S v •  Sqg [        R                  R                  5       (       a  SSKJn  [        R                  R                  R                  R!                  ["        R$                  " [&        U 5      U5      u  nn[)        5       (       a7  [        R                  R                  R                  R+                  [,        5        Sq[0        n[0        S-  q [        R2                  R5                  S5         S v •  S S S 5        U(       d  Sq[        R                  R                  R                  R!                  XV5        [0        S-  q[0        U:X  d   S5       eg ! Sqf = f! , (       d  f       Nl= f! U(       d  Sq[        R                  R                  R                  R!                  XV5        [0        S-  q[0        U:X  d   S5       ef = f7f)	Nr   )Ú
eval_frameÚforce_eagerTF)Úcudagraph_treesrl   zINested Compiled Autograd Contexts must return before their parent context)Úactive_disable_ctxr  rr   Útorch._dynamorÓ  Ú_stanceÚstanceÚ%compiled_autograd_enabled_force_eagerr;   r  Úis_availableÚtorch._inductorrÕ  r÷  rµ   r7   Úset_autograd_compilerÚ	functoolsÚpartialrÕ   rC   Úset_verbose_loggerr  Úcompiled_autograd_enabledÚdepthrÌ  Úset_multithreading_enabled)rÖ   rÐ  rÑ  rÓ  rÕ  Úprior_compilerÚprior_dynamicÚprior_depths           rB   Ú_enablerç  Ë  sº  é € ö4 %×);Ò);ÜæÜ˜“=¤DÒ(Ð(Ð(å,à×Ñ×$Ñ$¨Ó5ð 59Ð1ð>Ûà8=Ñ5ô �z‰z×&Ñ&×(Ñ(Ý;ô
 —‘× Ñ ×2Ñ2×HÑHÜ×!Ò!Ô":¸KÓHÈ'óñØØô 0×1Ñ1Ü—‘× Ñ ×2Ñ2×EÑEÄkÔRà(,Ð%äˆKÜ�Q‰JˆEðÜ—^‘^×>Ñ>¸uÕEÛ÷ Fö &Ø05Ð-Ü—‘× Ñ ×2Ñ2×HÑHØ"ôô ˜‘
�Ü Ó+ð Ø_óÑ+øð= 9>Ñ5ú÷* FÕEûö &Ø05Ð-Ü—‘× Ñ ×2Ñ2×HÑHØ"ôô ˜‘
�Ü Ó+ð Ø_óÑ+üsQ   ‚AH&ÁF3 ÁCH&Ä0G ÅF:ÅG ÅAH&Æ3F7Æ7H&Æ:
GÇG ÇAH#È#H&c               #   ó¤  #   • [         R                  R                  R                  R	                  S S5      u  n nSq[        (       d  Sq S v •  U (       a  SqSq[         R                  R                  R                  R	                  X5        g ! U (       a  SqSq[         R                  R                  R                  R	                  X5        f = f7f)NFT)r;   r÷  rµ   r7   rÝ  rá  rÖ  )rä  rå  s     rB   r]  r]    s±   é € ô
 	�‰×Ñ×*Ñ*×@Ñ@ÀÀuÓMñØØð !&ÐçÒØ!Ðð
ÛæØ(,Ð%Ø"ÐÜ�‰×Ñ×*Ñ*×@Ñ@Øõ	
øö Ø(,Ð%Ø"ÐÜ�‰×Ñ×*Ñ*×@Ñ@Øõ	
üs   ‚ACÁ
B Á?CÂA CÃCc                  ó~  • Sq [        (       a   e[        R                  R                  R
                  R                  S S5        [        R                  R                  R
                  R                  S 5        [        R                  R                  R
                  R                  5         [        R                  " 5       qg )NF)rá  rZ  r;   r÷  rµ   r7   rÝ  rà  Úclear_cacheÚ	itertoolsr¸   rü   r@   rA   rB   Úresetrì  /  sz   € à %Ðß*Ò*Ð*Ð*Ü	‡H�H×Ñ×&Ñ&×<Ñ<¸TÀ5ÔIÜ	‡H�H×Ñ×&Ñ&×9Ñ9¸$Ô?Ü	‡H�H×Ñ×&Ñ&×2Ñ2Ô4ä—o’oÓ'�OrA   r   r¯  r°  r±  r²  r³  r´  c                 óÄ   • U S   nUR                  X5      nUc   eUR                  U5        Xc-
  n	UR                  XEU	5      n
XŠU
R                  [        R
                  S9/$ )Nr   )Úmemory_format)Únew_empty_stridedÚcopy_Ú
as_stridedÚcloner;   Úcontiguous_format)r   r¯  r°  r±  r²  r³  r´  r‚   r¯   Úoffsetr½  s              rB   r¸  r¸  <  sn   € ð �!‰9€DØ×#Ñ# JÓ=€FØÑÐÐØ
‡L�L�ÔØ Ñ6€FØ×"Ñ" :¸VÓD€JØ 
× 0Ñ 0¼u×?VÑ?VÐ 0Ð WÐXÐXrA   r»  r¯   r¼  r½  c                 óÖ   • S /[        U 5      -  n[        [        U 5      5       HA  nX   (       d  M  X%   c  M  US:X  a   X%   nUc   eUR                  U5        XU'   M;  X%   XE'   MC     U$ )Nr   )r  r  rð  )r»  r¯   r¼  r½  Úgrad_inputsr•   Úto_copys          rB   r¿  r¿  P  s~   € ð 26°¼Ð=MÓ9NÑ0N€KÜ”3Ð'Ó(Ö)ˆØ×ÑØ‰v‰~ÙØ�A‹vØ™&�ØÑ*Ð*Ð*Ø× Ñ  Ô)Ø!'˜A“à!$¡�“ñ *ð ÐrA   )TTr¿   )uÚ__doc__rÜ   rÞ  rë  rs   r  Úcollectionsr   r   Úcollections.abcr   r   r   Útypingr   r	   r
   r   r;   Útorch.utils._pytreeÚutilsÚ_pytreerŽ  Útorch._dispatch.pythonr   Útorch._dynamo.external_utilsr   r   r   r   r   Útorch._dynamo.sourcer   r   Útorch._dynamo.utilsr   r   r   r   Ú/torch._functorch._aot_autograd.runtime_wrappersr   r   Útorch._guardsr   r   r   r   Útorch._loggingr   r    Útorch._prims_commonr"   Útorch._subclassesr#   Útorch._subclasses.fake_tensorr$   Ú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.tracebackr0   r1   Útorch.typesr2   r3   Útorch.utils._ordered_setr4   Útorch.utils._tracebackr5   Útorch.fx.proxyr6   r…   r˜   rl  r  rr   rC   rJ   rŸ   rM   rX   rZ   r¢   r³   rs  r
  rc  r)  r¸   rü   ru   rÓ   rÕ   rá  rÚ  rZ  rÖ  râ  Úcontextmanagerrç  r]  rì  r›  r¸  r¿  r@   rA   rB   Ú<module>r     s  ðñó  Û Û Û Û ß ,ß 9Ñ 9ß 6Ó 6ã ß $Ð $Ý ;÷õ ÷ <÷ó ÷÷ MÓ Lß >Ý 6Ý ,Ý 4Ý  Ý ?÷÷ ñ ÷ Gß Bß 2Ý /Ý 4ö Ý$ðX€ñ *¨(Ð4GÓHÐ Ù Ð*EÓF€ð¨$ô ð4 Dô 4ð�8˜EŸL™LÑ)ð ¨h°u·|±|Ñ.Dô ð
¨ð 
°¸¸c¸Ñ0Bô 
÷6Gñ G÷^ #ñ  #÷F5ñ 5ñ  ƒm€ò MÐ ÙàØØ"×=Ñ=Øð	ó€ð —/’/Ó#€ð	¨sð 	°sô 	÷])ñ ])ðB% "Ð ð ).Ð %ð $Ð àÐ à	€ð ×Ñð Ø&*ñIØ˜#˜s˜(Ñ#ðIàðIð  $ðIð ÐÑ ô	Ió ðIðX ×Ñð
�)Ð,Ñ-ó 
ó ð
ô,(ðYØ�U—\‘\Ñ"ðYà˜Ñ%ðYð ˜;Ñ'ðYð %ð	Yð
 ˜Ñ%ðYð ˜;Ñ'ðYð %ðYð 
ˆ%�,‰,ÑôYð(Ø˜t‘nðà�L‰Lðð 
�(˜5Ÿ<™<Ñ(Ñ	)ðð —‘ð	ð
 
ˆ(�5—<‘<Ñ
 Ñ!õrA   