Ë
    g^(h*.  ã                   ó’   — d dl Z d dlmc mZ d dlmZ d dlZd„ Zd„ Z	d„ Z
d„ Zd„ Zej                  d„ «       Zd	„ Zd
„ Zd„ Zd„ Zd„ Zy)é    N)Ú
namedtuplec                 ó,   ‡ ‡— t        ‰ «      Šˆˆ fd„}|S )Nc                  ób  •— ‰j                  d«      r#‰j                  d«      j                  } || i |¤ŽS ‰j                  d«      s‰j                  d«      rQ‰j                  d«      rdnd}|dk(  rdnd}‰j                  |«      j                  }t	        d|› d‰› d|› d|› d�	«      ‚ ‰| i |¤ŽS )	NÚautogradÚsave_for_backwardÚbackwardzWe found a 'z' registration for ú at z but were unable to find a 'zÔ' registration. To use the CustomOp API to register a backward formula, please provide us both a backward function and a 'save for backward' function via `impl_backward` and `impl_save_for_backward` respectively.)Ú	_has_implÚ	_get_implÚfuncÚlocationÚRuntimeError)ÚargsÚkwargsÚkernelÚmissingÚfoundÚlocÚautograd_fallbackÚ	custom_ops         €€úW/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_custom_op/autograd.pyÚinnerz*autograd_kernel_indirection.<locals>.inner   sÚ   ø€ Ø×Ñ˜zÔ*Ø×(Ñ(¨Ó4×9Ñ9ˆFÙ˜4Ð* 6Ñ*Ð*ð
 ×ÑÐ2Ô3°y×7JÑ7JÈ:Ô7Và'0×':Ñ':¸:Ô'FÑ#Øð ð ,3°jÒ+@Ñ'ÀjˆEØ×%Ñ% eÓ,×5Ñ5ˆCÜØ˜u˜gÐ%8¸¸À4Ø�%Ð3°G°9ð =9ð:ó;ð ;ñ ! $Ð1¨&Ñ1Ð1ó    )Úautograd_not_implemented)r   r   r   s   ` @r   Úautograd_kernel_indirectionr      s   ù€ Ü0°Ó;Ðõ2ð. €Lr   c                 ó   ‡ — ˆ fd„}|S )Nc                  óì   •— t        j                  «       r$t        j                  d„ | |f«      rt	        d«      ‚t         j
                  j                  «       5   ‰| i |¤Žcd d d «       S # 1 sw Y   y xY w)Nc                 óR   — t        | t        j                  «      xr | j                  S ©N)Ú
isinstanceÚtorchÚTensorÚrequires_grad©Úxs    r   ú<lambda>z:autograd_not_implemented.<locals>.kernel.<locals>.<lambda>4   s   € ”j ¤E§L¡LÓ1ÒE°a·o±o€ r   z.Autograd has not been implemented for operator)r!   Úis_grad_enabledÚpytreeÚtree_anyr   Ú_CÚ_AutoDispatchBelowAutograd)r   r   r   s     €r   r   z(autograd_not_implemented.<locals>.kernel2   sc   ø€ Ü× Ñ Ô"¤v§¡ÙEÈÈfÀ~ô(
ô ÐOÓPÐPÜ�X‰X×0Ñ0Ó2ñ 	.Ù˜dÐ- fÑ-÷	.÷ 	.ò 	.ús   ÁA*Á*A3© )r   r   s   ` r   r   r   1   s   ø€ ô.ð €Mr   c                 ó´  — |�Öt        |t        «      s|f}n|}t        |«      t        |«      k(  sJ ‚g }t        t	        ||«      «      D ]z  \  }\  }}t        |t
        j                  «      r|s|j                  |«       Œ7t        |t        «      r|s|j                  |«       Œ[|sŒ^t        d|› d|› dt        |«      › d�«      ‚ |r | j                  |Ž  y y y )NzWith output_differentiability=z	. At idx z , we received an object of type za that is not a Tensor, so it cannot have be marked as differentiable in output_differentiability.)r    ÚtupleÚlenÚ	enumerateÚzipr!   r"   ÚappendÚlistÚextendr   ÚtypeÚmark_non_differentiable)ÚctxÚoutputÚoutput_differentiabilityÚtuple_outputÚnon_differentiable_tensorsÚidxÚdifferentiableÚouts           r   r6   r6   <   s   € ð  Ð+Ü˜&¤%Ô(Ø"˜9‰Là!ˆLÜÐ+Ó,´°LÓ0AÒAÐAÐAØ%'Ð"Ü*3´CÐ8PÐR^Ó4_Ó*`ò 	2Ñ&ˆCÑ&�. #Ü˜#œuŸ|™|Ô,Ù%Ø.×5Ñ5°cÔ:ØÜ˜#œtÔ$Ù%Ø.×5Ñ5°cÔ:ØÚÜ"Ø4Ð5MÐ4Nð OØ!˜UÐ"BÄ4ÈÃ9À+ð N0ð1ó2ð 2ð	2ñ &Ø'ˆC×'Ñ'Ð)CÒDð &ð- ,r   c                 ó&   ‡ ‡‡‡‡‡— ˆˆˆˆˆˆ fd„}|S )Nc                  óö   •‡‡— t        j                  | «      \  }Šd Šˆ
ˆˆˆˆˆfd„}ˆˆ	ˆfd„}t        ‰	j                  dz   ||«      } |j                  |Ž }‰€J ‚t        j
                  t        |«      ‰«      S )Nc                 óÂ  •— | j                  d«       t        j                  t        |«      ‰«      }t        j
                  j                  «       5   ‰|Ž }d d d «       t        ‰t        j                  t        |«      «      }t        ‰|«      } ‰|«      }t        | ||f«       t        | |‰
«       t        j                  |«      \  }Š	t        |«      S # 1 sw Y   Œ€xY w)NT)Úset_materialize_gradsr(   Útree_unflattenr3   r!   r*   r+   Únamedtuple_argsÚtree_mapr5   Úsave_pytree_for_backwardr6   Útree_flattenr.   )r7   Ú	flat_argsr   r8   Ú	args_infoÚsave_for_backward_fn_inputsÚto_saveÚflat_outputÚop_overloadÚout_specr9   Úsave_for_backward_fnÚschemaÚspecs           €€€€€€r   Úforwardz9construct_autograd_kernel.<locals>.apply.<locals>.forwardh   sÌ   ø€ Ø×%Ñ% dÔ+Ü×(Ñ(¬¨i«¸$Ó?ˆDÜ—‘×4Ñ4Ó6ñ ,Ù$ dÐ+�÷,ô (ØœŸ™¬¨dÓ3ó5ˆIô +:¸&À$Ó*GÐ'Ù*Ð+FÈÓOˆGä$ S¨7°IÐ*>Ô?Ü# C¨Ð1IÔJô %+×$7Ñ$7¸Ó$?Ñ!ˆK˜Ü˜Ó%Ð%÷,ð ,ús   ÁCÃCc                 óæ   •— ‰	€J ‚t        j                  t        |«      ‰	«      }t        | «      \  }}t	        «       }t        |t        «      s|f} ‰||g|¢­Ž }t        |‰|«       t        ||«      S r   )	r(   rC   r3   Úunpack_savedÚobjectr    r.   Úvalidate_grad_inputs_dictÚgrad_inputs_dict_to_flat_tuple)
r7   Úflat_grad_outputÚgradsÚsavedrI   Ú	inner_ctxÚgrad_inputs_dictÚbackward_fnr   rN   s
          €€€r   r   z:construct_autograd_kernel.<locals>.apply.<locals>.backward|   s   ø€ ØÐ'Ð'Ð'Ü×)Ñ)¬$Ð/?Ó*@À(ÓKˆEÜ+¨CÓ0ÑˆE�9ô ›ˆIÜ˜e¤UÔ+Ø˜�Ù*¨9°eÐD¸eÒDÐô &Ð&6¸	À9ÔMÜ1Ð2BÀIÓNÐNr   Ú	_customop)r(   rG   Úgen_autograd_functionÚ_opnameÚapplyrC   r3   )r   rH   rR   r   Úgenerated_clsrL   rN   rQ   r]   r   rM   r9   rO   rP   s         @@€€€€€€r   ra   z(construct_autograd_kernel.<locals>.applyd   sƒ   ú€ Ü ×-Ñ-¨dÓ3‰ˆ	�4Øˆ÷	&ñ 	&ö(	Oô  .Ø×Ñ Ñ+¨W°hó@ˆð *�m×)Ñ)¨9Ð5ˆØÐ#Ð#Ð#Ü×$Ñ$¤T¨+Ó%6¸ÓAÐAr   r,   )rP   r9   r   rM   rO   r]   ra   s   `````` r   Úconstruct_autograd_kernelrc   \   s   ý€ ÷-Bñ -Bð\ €Lr   c                 ó|   — t        | t        j                  j                  ft	        |«      t	        |«      dœ«      }|S )N)rR   r   )r5   r!   r   ÚFunctionÚstaticmethod)ÚnamerR   r   rb   s       r   r_   r_   •   s<   € ÜØÜ	�‰×	 Ñ	 Ð"ä# GÓ,Ü$ XÓ.ñ	
ó€Mð Ðr   c                 ó²   — | j                   j                  D �cg c]  }|j                  ‘Œ }}t        | j                  «      dz   }t	        ||«      }|S c c}w )NÚ_args)Ú	argumentsÚflat_allrg   Ústrr   )rP   ÚargÚattribsrg   Ú	tuple_clss        r   Únamedtuple_args_clsrp   ¡   sO   € à#)×#3Ñ#3×#<Ñ#<Ö=˜Cˆs�x‹xÐ=€GÐ=Üˆv�{‰{Ó˜gÑ%€Dä˜4 Ó)€IØÐùò	 >s   ™Ac                 óF   — t        |t        «      sJ ‚t        | «      } ||Ž S r   )r    r.   rp   )rP   r   ro   s      r   rD   rD   ª   s'   € Ü�dœEÔ"Ð"Ð"Ü# FÓ+€IÙ�dÐÐr   c                 ó`  ‡— ˆfd„}t        | t        «      s |dt        | «      › �«       ‰j                  j                  j
                  D �ch c](  }|j                  j                  «       r|j                  ’Œ* }}| j                  «       }||k7  r |d|› d|› d�«       | j                  «       D �]v  \  }}t        ||«      }	t        |	t        «      rðt        |t        t        f«      s |d|› dt        |«      › d�«       t        |«      t        |	«      k(  s# |d|› d	t        |	«      › d
t        |«      › �«       t        t        ||	«      «      D ]n  \  }
\  }}|€Œt        |t         j"                  «      s |d|› dt        |«      › d|
› �«       t%        |t         j"                  «      rŒ[ |d|› d|
› d|
› d|	› �«       Œp �Œ|€�Œt        |t         j"                  «      s |dt        |«      › d|› d�«       t%        |	t         j"                  «      r�Œe |d|› d|› d|	› d�«       �Œy y c c}w )Nc                 ób   •— ‰j                  d«      }t        d‰› d|j                  › d| › �«      ‚)Nr   z%In the backward function defined for r	   z using the CustomOp API, )r   r   r   )Úwhatr   Ú
forward_ops     €r   Úerrorz(validate_grad_inputs_dict.<locals>.error±   sD   ø€ Ø×'Ñ'¨
Ó3ˆÜØ3°J°<¸tØ× Ñ Ð!Ð!:¸4¸&ðBóCð 	Cr   zBexpected the output of the backward function to be a dict but got z3expected the returned grad_input dict to have keys z	 but got zÖ. The backward function must return a gradient (can be None) for each arg to the CustomOp that may be a Tensor or Sequence[Tensor]. Args declared to be non-Tensor-like types should not appear in the grad_input dictzfor input 'zR' expected the grad_input dict to hold a list of gradients but got object of type ú.z1' expected the grad_input dict to hold a list of z gradients but got z\' expected the grad_input dict to hold a list of None or Tensor gradients but got object of z
 at index z(', got a Tensor as the gradient for the z(-th value but expected None because the z(-th value was not a Tensor (it was type zgot object of type z as the gradient for input 'z:', but expected the gradient to be either None or a Tensorz(got a Tensor as the gradient for input 'z3' but expected None as the gradient because input 'z ' was not a Tensor (it was type z).)r    Údictr5   Ú_schemarj   rk   Úis_tensor_likerg   ÚkeysÚitemsÚgetattrr3   r.   r/   r0   r1   r!   r"   Ú
issubclass)r\   ru   rI   rv   rm   Úexpected_keysÚactual_keysrg   ÚgradÚarg_infor<   ÚgÚinfos    `           r   rV   rV   °   s„  ø€ ôCô Ð&¬Ô-Ùð ÜÐ*Ó+Ð,ð.ô 	/ð *4×);Ñ);×)EÑ)E×)NÑ)Nö 3 #ØŸ™×/Ñ/Ô1ð —X“Xð 3€Mð 3à"×'Ñ'Ó)€KØ˜Ò#ÙÐCØ�˜y¨¨ð 6'ð(ô 	)ð '×,Ñ,Ó.ó #A‰
ˆˆdÜ˜9 dÓ+ˆä�h¤Ô%Ü˜d¤U¬D MÔ2Ù˜ D 6ð *Iä˜d›˜ Að'ô (ô �t“9¤ H£Ò-Ù˜ D 6ð *(Ü(+¨H« Ð6IÜ˜T›˜ð%ô &ô #,¬C°°hÓ,?Ó"@ò .‘�‘Y�a˜Ø�9ØÜ! !¤U§\¡\Ô2Ù˜K¨ vð .'ä'+¨A£w i¨z¸#¸ð@ô Aô " $¬¯©Õ5Ù˜K¨ vð .%Ø%( Eð *!Ø!$ ð &"Ø"* ð-õ .ð.ñ àˆ<ÙÜ˜$¤§¡Ô-ÙÐ'¬¨T«
 |ð 4Ø�Vð LðMô Nô ˜(¤E§L¡LÖ1ÙÐ<¸T¸Fð CBØBFÀð H3Ø3;°*¸Bð@ö AñC#Aùò3s   Á-H+c                 ó  — g }|j                  «       j                  «       D ]D  \  }}|| vr'|j                  t        j                  d„ |«      «       Œ1|j                  | |   «       ŒF t        t        j                  |«      «      S )Nc                  ó   — y r   r,   r$   s    r   r&   z0grad_inputs_dict_to_flat_tuple.<locals>.<lambda>ð   s   � r   )Ú_asdictr|   r2   r(   rE   r.   Útree_leaves)r\   rI   Úresultrg   r‚   s        r   rW   rW   ì   sy   € Ø€FØ#×+Ñ+Ó-×3Ñ3Ó5ò .‰ˆˆhØÐ'Ñ'Ø�M‰Mœ&Ÿ/™/©.¸(ÓCÔDØØ�‰Ð& tÑ,Õ-ð	.ô
 ”×#Ñ# FÓ+Ó,Ð,r   c                 ó^  — t        j                  |«      \  }}t        |«      }t        |«      D ��cg c]!  \  }}t	        |t
        j                  «      r|‘Œ# }}}t        |«      D ��cg c]!  \  }}t	        |t
        j                  «      s|‘Œ# }}}|D �cg c]  }t	        |t
        j                  «      sŒ|‘Œ! }	}|D �cg c]  }t	        |t
        j                  «      rŒ|‘Œ! }
}|| _        || _         | j                  |	Ž  || _
        |
| _        || _        y c c}}w c c}}w c c}w c c}w r   )r(   rG   r/   r0   r    r!   r"   rQ   Únum_eltsr   Útensor_idxsÚsaved_non_tensorsÚnon_tensor_idxs)r7   ÚstuffÚ
flat_stuffrQ   r‹   r<   ÚthingrŒ   rŽ   ÚtensorsÚnon_tensorss              r   rF   rF   ù   s  € Ü×*Ñ*¨5Ó1Ñ€J�Ü�:‹€HÜ)2°:Ó)>÷ 7™:˜3 Ü  ¬¯©Ô5ò ð 7€Kñ 7ä-6°zÓ-B÷ ?™z˜s EÜ(¨´·±Ô=ò ð ?€Oñ ?à",ÖP˜´
¸5Ä%Ç,Á,Õ0OŠuÐP€GÐPØ&0ÖX˜U¼
À5Ì%Ï,É,Õ8W’5ÐX€KÐXà€C„HØ€C„LØ€C×Ñ˜7Ñ#Ø!€C„OØ'€CÔØ)€CÕùó7ùó?ùâPùÚXs#   ²&DÁ)&DÂD%Â6D%Ã D*Ã D*c                 ó  — d g| j                   z  }t        | j                  | j                  «      D ]
  \  }}|||<   Œ t        | j                  | j
                  «      D ]
  \  }}|||<   Œ t        j                  || j                  «      }|S r   )	r‹   r1   Úsaved_tensorsrŒ   r�   rŽ   r(   rC   rQ   )r7   r�   Útensorr<   Ú
non_tensorr�   s         r   rT   rT     s‰   € Ø�˜#Ÿ,™,Ñ&€JÜ˜3×,Ñ,¨c¯o©oÓ>ò !‰ˆ�Ø ˆ
�3Šð!ä˜s×4Ñ4°c×6IÑ6IÓJò %‰ˆ
�CØ$ˆ
�3Šð%ä×!Ñ! *¨c¯h©hÓ7€EØ€Lr   )r!   Útorch.utils._pytreeÚutilsÚ_pytreer(   Úcollectionsr   Ú	functoolsr   r   r6   rc   r_   Ú	lru_cacherp   rD   rV   rW   rF   rT   r,   r   r   ú<module>rž      se   ðã ß $Ð $Ý "Û òò>òEò@6òr	ð ×Ññó ðòò9Aòx-ò*ó&r   