+
    ˜°³jï(  ã                   óx   € ^ RI t ^ RIHt ^ RIt^ RIt^ RIHt . ROt ! R R4      tR t	R R	 lt
 ! R
 R4      tR# )é    N)ÚOrderedDict©ÚAnyÚRemovableHandleÚBackwardHookc                   óœ   a € ] tR t^
t o Rt^ tRR/V 3R lR lltV 3R lR ltR tV 3R	 lR
 lt	V 3R lR lt
V 3R lR ltV 3R ltRtV tR# )r   aA  
A handle which provides the capability to remove a hook.

Args:
    hooks_dict (dict): A dictionary of hooks, indexed by hook ``id``.
    extra_dict (Union[dict, List[dict]]): An additional dictionary or list of
        dictionaries whose keys will be deleted when the same keys are
        removed from ``hooks_dict``.
Ú
extra_dictNc                ó*   <€ V ^8„  d   QhRS[ RS[ RR/# )é   Ú
hooks_dictr	   ÚreturnNr   )ÚformatÚ__classdict__s   "€ÚR/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/utils/hooks.pyÚ__annotate__ÚRemovableHandle.__annotate__   s'   ø€ ÷ 	Lñ 	L¡3ð 	L±sð 	LÀdñ 	Ló    c               ó¨  € \         P                  ! V4      V n        \        P                  V n        \        ;P                  ^,          un        RV n        \        V\        4      '       d   \         P                  ! V4      3V n        R# \        V\        4      '       d4   \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      V n        R# R# )é   c              3   óN   "  € T F  p\         P                  ! V4      x € K  	  R # 5i©N©ÚweakrefÚref©Ú.0Úds   & r   Ú	<genexpr>Ú+RemovableHandle.__init__.<locals>.<genexpr>!   s   é € Ð'KÁ
¸1¬¯ª°A¯¨Ã
ùó   ‚#%N© )r   r   Úhooks_dict_refr   Únext_idÚidÚextra_dict_refÚ
isinstanceÚdictÚlistÚtuple)Úselfr   r	   s   &&$r   Ú__init__ÚRemovableHandle.__init__   s�   € Ü%Ÿkšk¨*Ó5ˆÔÜ!×)Ñ)ˆŒÜ×Ò 1Õ$Õà%'ˆÔÜ�j¤$×'Ò'Ü#*§;¢;¨zÓ#:Ð"<ˆDÖÜ˜
¤D×)Ò)ß"'¤%Ñ'KÁ
Ó'K§%¡%Ñ'KÁ
Ó'KÓ"KˆDÖñ *r   c                ó   <€ V ^8„  d   QhRR/# ©r   r   Nr!   )r   r   s   "€r   r   r   #   s   ø€ ÷ (ñ (˜ñ (r   c                óæ   € V P                  4       pVe   V P                  V9   d   WP                   V P                   F/  pV! 4       pVf   K  V P                  V9   g   K#  W0P                   K1  	  R # r   )r"   r$   r%   )r*   r   r   r	   s   &   r   ÚremoveÚRemovableHandle.remove#   s]   € Ø×(Ñ(Ó*ˆ
ØÒ! d§g¡g°Ô&;ØŸ7™7Ð#à×&Ô&ˆCÙ›ˆJØÔ%¨$¯'©'°ZÖ*?ØŸw™wÒ'ó 'r   c                ó  € V P                   f   V P                  4       V P                  3# V P                  4       V P                  \        ;QJ d    . R V P                    4       F  NK  	  53# ! R V P                    4       4      3# )Nc              3   ó.   "  € T F  q! 4       x € K  	  R # 5ir   r!   )r   r   s   & r   r   Ú/RemovableHandle.__getstate__.<locals>.<genexpr>1   s   é € Ð9_ÑK^ÀC¸#¿%¸%ÓK^ùs   ‚)r%   r"   r$   r)   ©r*   s   &r   Ú__getstate__ÚRemovableHandle.__getstate__-   sk   € Ø×ÑÒ&Ø×'Ñ'Ó)¨4¯7©7Ð3Ð3à×'Ñ'Ó)¨4¯7©7·E´EÑ9_È4×K^ÒK^Ó9_·EÐ`Ð`°EÑ9_È4×K^ÒK^Ó9_Ó4_Ð`Ð`r   c                ó   <€ V ^8„  d   QhRR/# r.   r!   )r   r   s   "€r   r   r   3   s   ø€ ÷ Jñ J Tñ Jr   c                óò  € V^ ,          f%   \         P                  ! \        4       4      V n        M"\         P                  ! V^ ,          4      V n        V^,          V n        \        \        P                  V P                  ^,           4      \        n        \        V4      ^8  g   V^,          f
   RV n	        R# \        ;QJ d    . R V^,           4       F  NK  	  5M! R V^,           4       4      V n	        R# )r   Nc              3   óN   "  € T F  p\         P                  ! V4      x € K  	  R # 5ir   r   r   s   & r   r   Ú/RemovableHandle.__setstate__.<locals>.<genexpr>?   s   é € Ð'IÁ¸1¬¯ª°A¯¨Ãùr    r!   )r   r   r   r"   r$   Úmaxr   r#   Úlenr%   r)   )r*   Ústates   &&r   Ú__setstate__ÚRemovableHandle.__setstate__3   s¡   € Ø��8Òä")§+¢+¬k«mÓ"<ˆDÕä")§+¢+¨e°A­hÓ"7ˆDÔØ˜•(ˆŒÜ"%¤o×&=Ñ&=¸t¿w¹wÈ½{Ó"KŒÔäˆu‹:˜Œ>˜U 1�XÒ-Ø"$ˆDÖç"'¤%Ñ'IÀÀaÆÓ'I§%¡%Ñ'IÀÀaÆÓ'IÓ"IˆDÖr   c                ó   <€ V ^8„  d   QhRR/# )r   r   r   r!   )r   r   s   "€r   r   r   A   s   ø€ ÷ ñ Ð,ñ r   c                ó   € V # r   r!   r5   s   &r   Ú	__enter__ÚRemovableHandle.__enter__A   s   € Øˆr   c                ó0   <€ V ^8„  d   QhRS[ RS[ RS[ RR/# )r   ÚtypeÚvalueÚtbr   Nr   )r   r   s   "€r   r   r   D   s)   ø€ ÷ ñ ™Sð ©ð ±#ð ¸$ñ r   c                ó&   € V P                  4        R # r   )r0   )r*   rF   rG   rH   s   &&&&r   Ú__exit__ÚRemovableHandle.__exit__D   s   € Ø�‰Žr   c                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   # )r   r$   r#   )Úint)r   r   s   "€r   r   r   
   s   ø‡ ‚ ñ 	�Gñ ñ Ñò r   )r%   r"   r$   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r#   r+   r0   r6   r?   rC   rJ   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r   
   s]   ø‡ € ñð €Gð	L¸T÷ 	Lò 	L÷(ð (òa÷Jð J÷ð ÷ð ÷u ƒ r   c                ó   € RV n         V # )z«
Mark a function as an unserializable hook with this decorator.

This suppresses warnings that would otherwise arise if you attempt
to serialize a tensor that has a hook.
T)Ú__torch_unserializable__)Úfs   &r   Úunserializable_hookrZ   H   s   € ð "&€AÔØ€Hr   c                ó   € V ^8„  d   QhRR/# r.   r!   )r   s   "r   r   r   S   s   € ÷ Hñ H ñ Hr   c                 óì   € V P                   '       db   V P                    FO  pV P                   V,          p\        VR 4      '       d   K*  \        P                  ! R\	        V4       R2^R7       KQ  	  R# R# )rX   zbackward hook z› on tensor will not be serialized.  If this is expected, you can decorate the function with @torch.utils.hooks.unserializable_hook to suppress this warning©Ú
stacklevelN)Ú_backward_hooksÚhasattrÚwarningsÚwarnÚrepr)ÚtensorÚkÚhooks   &  r   Úwarn_if_has_hooksrg   S   si   € Ø××ÐØ×'Ô'ˆAØ×)Ñ)¨!Õ,ˆDÜ˜4Ð!;×<Ô<Ü—’ ¬t°D«z¨lð ;9ð 9ð FG÷Hó (ñ r   c                   óf   a € ] tR t^]t o RtV 3R lR ltR tR tV 3R lR ltR t	R	 t
R
 tRtV tR# )r   aŒ  
A wrapper class to implement nn.Module backward hooks.

It handles:
  - Ignoring non-Tensor inputs and replacing them by None before calling the user hook
  - Generating the proper Node to capture a set of Tensor's gradients
  - Linking the gradients captures for the outputs with the gradients captured for the input
  - Calling the user hook once both output and input gradients are available
c                ó   <€ V ^8„  d   QhRR/# r.   r!   )r   r   s   "€r   r   ÚBackwardHook.__annotate__h   s   ø€ ÷ 	(ñ 	(¸dñ 	(r   c                óp   € W n         W0n        Wn        R V n        RV n        R V n        RV n        R V n        R # )Néÿÿÿÿ)Ú
user_hooksÚuser_pre_hooksÚmoduleÚgrad_outputsÚ	n_outputsÚoutput_tensors_indexÚn_inputsÚinput_tensors_index)r*   ro   rm   rn   s   &&&&r   r+   ÚBackwardHook.__init__h   s8   € Ø$ŒØ,ÔØŒà ˆÔØˆŒØ$(ˆÔ!ØˆŒØ#'ˆÖ r   c                ó`   € R .V,          p\        WRR7       F	  w  rVWdV&   K  	  \        V4      # )NT©Ústrict)Úzipr)   )r*   ÚindicesÚvaluesÚsizeÚresÚidxÚvals   &&&&   r   Ú_pack_with_noneÚBackwardHook._pack_with_nones   s3   € Øˆf�t�mˆÜ˜G°D×9‰HˆCØ�‹Hñ :ô �S‹zÐr   c                óP   € V Uu. uF  q2V,          NK  	  pp\        V4      # u upi r   )r)   )r*   rz   r{   r~   r}   s   &&&  r   Ú_unpack_noneÚBackwardHook._unpack_nonez   s)   € Ù&-Ó.¡g˜s�c�{ˆ{¡gˆÐ.ä�S‹zÐùò /s   …#c                ó   <€ V ^8„  d   QhRR/# r.   r!   )r   r   s   "€r   r   rj      s   ø€ ÷ $ñ $¨ñ $r   c                ó6   a € V 3R  lpVP                  V4       R# )c           	      ó¢  <€ SP                   f   R # SP                  SP                  V SP                  4      pSP                   Fe  pV! SP
                  VSP                   4      pVf   K'  \        V4      \        V4      8w  d$   \        R\        V4       R\        V4       24      hTpKg  	  R Sn         SP                  SP                  V4      # )Nz<Backward hook returned an invalid number of grad_input, got ú, but expected )	rp   r€   rt   rs   rm   ro   r=   ÚRuntimeErrorrƒ   )Ú
grad_inputÚ_r}   rf   Úoutr*   s   &&   €r   rf   Ú)BackwardHook._set_user_hook.<locals>.hook€   sÇ   ø€ Ø× Ñ Ò(ñ Ø×&Ñ& t×'?Ñ'?ÀÈTÏ]É]Ó[ˆCàŸœ�Ù˜4Ÿ;™;¨¨T×->Ñ->Ó?�à’;Ùä�s“8œs 3›xÔ'Ü&ð (.Ü.1°#«h¨Z°ÄsÈ3ÃxÀjð(Ró Sð Sð ’ñ (ð !%ˆDÔà×$Ñ$ T×%=Ñ%=¸sÓCÐCr   N©Úregister_hook)r*   Úgrad_fnrf   s   f& r   Ú_set_user_hookÚBackwardHook._set_user_hook   s   ø€ õ	Dð0 	×Ñ˜dÖ#r   c                ó‚  € . p. pR p\        V4       F[  w  rg\        V\        P                  4      '       g   K'  VP	                  V4       VP	                  V4       WWP
                  ,          pK]  	  V'       d   \        P                  ! 4       '       g   VR3# \        P                  P                  P                  P                  P                  ! V!  p\        V4      ^ 8X  d   \        R4      hV U	u. uF?  q™P                  f   K  V	P                  P                  4       R8X  g   K3  V	P                  NKA  	  p
p	\        V
4      ^ 8X  d   \        R4      hV! V
^ ,          4       \!        V4      p\#        W8RR7       F	  w  rÍWÛV&   K  	  \%        V4      \&        J d   \'        V4      pWã3# \%        V4      ! V!  pWã3# u up	i )FNzCCannot set Module backward hook for a Module with no input Tensors.ÚBackwardHookFunctionBackwardzaError while setting up backward hooks. Please open an issue with a code sample to reproduce this.Trw   )Ú	enumerater&   ÚtorchÚTensorÚappendÚrequires_gradÚis_grad_enabledÚnnÚmodulesÚ
_functionsÚBackwardHookFunctionÚapplyr=   r‰   r�   Únamer(   ry   rF   r)   )r*   ÚfnÚargsÚtensors_idxÚtensorsr™   ÚiÚargÚnew_tensorsÚtÚgrad_fnsÚarg_listr~   r   rŒ   s   &&&            r   Ú_apply_on_tensorsÚBackwardHook._apply_on_tensorsš   s‘  € ð ˆØˆàˆÜ –o‰FˆAÜ˜#œuŸ|™|×,Ô,Ø×"Ñ" 1Ô%Ø—‘˜sÔ#Ø×!2Ñ!2Õ2’ñ	 &÷ ¤%×"7Ò"7×"9Ò"9Ø˜�:Ðä—h‘h×&Ñ&×1Ñ1×FÑF×LÒLÈgÑVˆÜˆ{Ó˜qÔ ÜÐdÓeÐeá'2ó  D¡{ !·i±i”IÐPQ×PYÑPY×P^ÑP^ÓP`ð  eCñ  QC”I�A—I”I¡{ˆð  DÜˆx‹=˜AÔÜð  Pó Qð Qñ 	ˆ8�A�;Œä˜“:ˆÜ˜K¸T×B‰HˆCØ�S‹Mñ Cô �‹:œÓÜ˜“/ˆCð ÐÐô �t”*˜hÑ'ˆCØÐÐùò Ds   Ã3F<ÄF<Ä(F<c                ón   a € R  V 3R llpS P                  W!4      w  r4\        V4      S n        VS n        V# )c                ó   € V ^8„  d   QhRR/# r.   r!   )r   s   "r   r   Ú3BackwardHook.setup_input_hook.<locals>.__annotate__À   s   € ÷ 	)ñ 	)˜4ñ 	)r   c                 ó*   <€ SP                  V 4       R # r   )r‘   )r�   r*   s   &€r   r¡   Ú)BackwardHook.setup_input_hook.<locals>.fnÀ   s   ø€ Ø×Ñ Ö(r   )r«   r=   rs   rt   )r*   r¢   r¡   r}   Ú	input_idxs   f&   r   Úsetup_input_hookÚBackwardHook.setup_input_hook¿   s9   ø€ ÷	)ð 	)ð ×/Ñ/°Ó9‰ˆÜ˜D›	ˆŒØ#,ˆÔ Øˆ
r   c                óÊ   a € R  V 3R llpRp\        V\        4      '       g   V3pRpS P                  W!4      w  rE\        V4      S n        VS n        V'       g
   V^ ,          pV# )c                ó   € V ^8„  d   QhRR/# r.   r!   )r   s   "r   r   Ú4BackwardHook.setup_output_hook.<locals>.__annotate__É   s   € ÷ /	(ñ /	(˜4ñ /	(r   c                 ó6   <€ V3R  lpV P                  V4       R# )c                 ó(  <a	€ S
P                  S
P                  VS
P                  4      S
n        S
P                  '       du   \        S
P                  4      pS
P                   FO  pV! S
P                  S
P                  4      pVf   K&  \        V4      pWR8w  d   \        RV RV 24      hVS
n        KQ  	  S
P                  o	S
P                  fá   S
P                  '       dÈ   \        P                  ! R^R7       S
P                  . . S
P                  4      pS
P                   F‚  pV! S
P                  VS
P                  4      pVf   K'  \        V\        4      '       d=   \        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       d   Ky  \        R4      h	  R S
n        S	e`   S
P                  f   \!        R	4      h\        ;QJ d!    . V	3R
 lS
P                   4       F  NK  	  5# ! V	3R
 lS
P                   4       4      # R # )NzABackward pre hook returned an invalid number of grad_output, got rˆ   zþFull backward hook is firing when gradients are computed with respect to module outputs since no inputs require gradients. See https://docs.pytorch.org/docs/main/generated/torch.nn.Module.html#torch.nn.Module.register_full_backward_hook for more details.r]   c              3   ó(   "  € T F  qR J x € K
  	  R # 5ir   r!   )r   Úels   & r   r   ÚKBackwardHook.setup_output_hook.<locals>.fn.<locals>.hook.<locals>.<genexpr>î   s   é € ÐVpÑloÐfhÐ]aÕWaÓloùs   ‚FTzoBackward hook for Modules where no input requires gradient should always return None or None for all gradients.zEoutput_tensors_index should not be None when grad_outputs is not Nonec              3   ó6   <"  € T F  pSV,          x € K  	  R # 5ir   r!   )r   r¥   Úlocal_grad_outputss   & €r   r   r¼   ö   s   øé € Ð ZÑ@Y¸1Ð!3°A×!6Ò!6Ó@Yùs   ƒ)r€   rr   rq   rp   rn   r=   ro   r‰   rt   rm   ra   rb   rs   r&   r)   ÚallÚAssertionError)r‹   Úgrad_outputÚexpected_lenÚuser_pre_hookÚhook_grad_outputsÚ
actual_lenÚgrad_inputsÚ	user_hookr}   r¾   r*   s   &&       @€r   rf   Ú8BackwardHook.setup_output_hook.<locals>.fn.<locals>.hookÊ   sÜ  ù€ Ø$(×$8Ñ$8¸×9RÑ9RØ9DØ9=¿¹ó%I�Ô!ð ×&×&Ð&Ü#& t×'8Ñ'8Ó#9�LØ)-×)<Ô)<˜Ù,9¸$¿+¹+Àt×GXÑGXÓ,YÐ)Ø,Ò4Ù$ä%(Ð):Ó%;˜
Ø%Ô5Ü".ð 06Ø6@°\ÀÐQ]ÐP^ð0`ó #að aà,=˜Ö)ñ *=ð &*×%6Ñ%6Ð"ð ×+Ñ+Ò3ð ——�Ü Ÿšð ':ð 23õ	4ð
 '+×&:Ñ&:¸2¸rÀ4Ç=Á=Ó&Q˜Ø)-¯¬˜IÙ"+¨D¯K©K¸Àd×FWÑFWÓ"X˜CØ"œ¼
À3Ì×8NÒ8N×SVÓSVÑVpÑloÓVp×SV×SVÒSVÑVpÑloÓVp×SpÔSpÜ&2ð 4só 'tð !tñ *9ð
 )-�DÔ%à%Ò1Ø×0Ñ0Ò8Ü,Ð-tÓuÐuß œ5Ô ZÀ×@YÒ@YÓ ZŸ5ÐZ˜5Ô ZÀ×@YÒ@YÓ ZÓZÐZñ 2r   NrŽ   )r�   rf   r*   s   & €r   r¡   Ú*BackwardHook.setup_output_hook.<locals>.fnÉ   s   ø€ õ,[ð\ ×!Ñ! $Ö'r   TF)r&   r)   r«   r=   rq   rr   )r*   r¢   r¡   Úis_tupler}   Ú
output_idxs   f&    r   Úsetup_output_hookÚBackwardHook.setup_output_hookÈ   sd   ø€ ÷/	(ð /	(ðb ˆÜ˜$¤×&Ò&Ø�7ˆDØˆHà×0Ñ0°Ó:‰ˆÜ˜T›ˆŒØ$.ˆÔ!çØ�a•&ˆCØˆ
r   )rp   rt   ro   rs   rq   rr   rm   rn   N)rN   rO   rP   rQ   rR   r+   r€   rƒ   r‘   r«   r³   rÌ   rT   rU   rV   s   @r   r   r   ]   s=   ø‡ € ñ÷	(ð 	(òò÷
$ð $ò6# òJ÷=ð =r   )r   rZ   rg   r   )r–   Úcollectionsr   r   ra   Útypingr   Ú__all__r   rZ   rg   r   r!   r   r   Ú<module>rÑ      s;   ðã Ý #Û Û Ý â
Y€÷;ñ ;ò|õH÷hó hr   