+
    –°³jÁ   ã                  óî   € R t ^ RIHt ^ RIt^ RIHtHt ^ RIt^ RIH	t	 ^RI
Ht ^RIHt ^RIHt ]'       d   ^ RIHt R	 R
 lt ! R R4      tRR R lltRR R lltR R ltRR R lltRR R lltR# )zM
Python implementation of function wrapping functionality for functorch.dim.
)ÚannotationsN)ÚAnyÚTYPE_CHECKING)Útree_map)ÚDimEntry)ÚEnableAllLayers)Ú
TensorInfo)ÚCallablec               ó    € V ^8„  d   QhRRRR/# )é   Útensorztorch.TensorÚreturn© )Úformats   "ÚT/home/luca/screen-checking/.venv/lib/python3.14/site-packages/functorch/dim/_wrap.pyÚ__annotate__r      s   € ÷ ñ ˜|ð °ñ ó    c                ó   € V # )z8Handle tensor conversion for torch function integration.r   )r   s   &r   Úhandle_from_tensorr      s   € à€Mr   c                  ó6   € ] tR t^tRtRR R lltR R ltRtR# )	ÚWrappedOperatorzH
This class wraps PyTorch operations to support first-class dimensions.
c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úorigr	   Úwrapper_implementationÚdim_nameÚstrr   )r   s   "r   r   ÚWrappedOperator.__annotate__    s)   € ÷ vñ vØðvØ6>ðvØJMñvr   c                	óJ  € Wn         W n        \        VR R4      V n        \        VRR4      V n        W0n        RV n        ^ V n        ^V n        RV n	        RV n
        V P                  '       d8   V P
                  '       d$   V P                   RV P
                   R2V n        R# R# R# )Ú__name__Ú Ú__doc__NFTz
Argument 'z5' can be either an integer or a torchdim.Dim object.
)r   r   ÚgetattrÚnameÚdocr   Úis_pointwiseÚ
dim_offsetÚkeepdim_offsetÚ
single_dimÚreduce)Úselfr   r   r   s   &&&&r   Ú__init__ÚWrappedOperator.__init__    s�   € ð Œ	Ø&<Ô#Ü˜D *¨bÓ1ˆŒ	Ü˜4 ¨DÓ1ˆŒØ Œà!ˆÔØˆŒØˆÔØˆŒØˆŒð �8�8ˆ8˜ŸŸ˜ØŸ(™(˜ <°·±¨Ð>tÐuˆDŽHñ &‰8r   c               ó   € V ^8„  d   QhRR/# )r   r   r	   r   )r   s   "r   r   r   3   s   € ÷ ñ ˜(ñ r   c                ó„   a € R V 3R llp\         P                  ! VS P                  RRR7       S P                  Vn        V# )z@Create a wrapped function that calls our wrapper implementation.c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úargsr   Úkwargsr   r   )r   s   "r   r   Ú.WrappedOperator.function.<locals>.__annotate__6   s&   € ÷ 	Fñ 	F ð 	F¨sð 	F°sñ 	Fr   c                 ó0   <€ SP                   ! S.V O5/ VB # )N)r   )r/   r0   r)   s   *,€r   Úwrapped_funcÚ.WrappedOperator.function.<locals>.wrapped_func6   s   ø€ Ø×.Ò.¨tÐE°dÒE¸fÑEÐEr   )ÚassignedÚupdated)r   r   )Ú	functoolsÚupdate_wrapperr   r#   r    )r)   r3   s   f r   ÚfunctionÚWrappedOperator.function3   s@   ø€ ÷	Fð 	Fô 	× Ò Ø˜$Ÿ)™)¨mÀRõ	
ð  $Ÿx™xˆÔàÐr   )
r   r%   r#   r$   r&   r"   r   r(   r'   r   N)Údim)r   Ú
__module__Ú__qualname__Ú__firstlineno__r    r*   r9   Ú__static_attributes__r   r   r   r   r      s   † ñ÷v÷&ñ r   r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r;   r   ÚndimÚintÚkeepdimÚboolr   r   r   )r   s   "r   r   r   B   s(   € ÷ ñ �3ð ˜cð ¨Dð ¸Xñ r   c                óè   € ^RI Hp \        W4      '       d   V'       d   \        R4      h\	        V 4      # \        V \
        4      '       d   T pV^ 8¼  d   WA,          pK  \	        V4      # \	        4       # )z:Convert single dimension specification to DimEntry object.)ÚDimz8cannot preserve first-class dimensions with keepdim=True)r   rF   Ú
isinstanceÚ
ValueErrorr   rB   )r;   rA   rC   rF   Úis   &&&  r   Ú	_wrap_dimrJ   B   s[   € åä�#×ÒßÜÐWÓXÐXÜ˜‹}ÐÜ	�Cœ×	Ò	ØˆØ�1ŒfØ�IŠAÜ˜‹{Ðä‹zÐr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r;   r   rA   rB   rC   rD   r   zlist[DimEntry]r   )r   s   "r   r   r   S   s(   € ÷ 	ñ 	�Cð 	˜sð 	¨Tð 	¸nñ 	r   c                ó¼   € \        WV4      p. pVP                  4       '       g   VP                  V4       V# V  F  pVP                  \        WQV4      4       K   	  V# )z<Convert dimension specification to list of DimEntry objects.)rJ   Úis_noneÚappend)r;   rA   rC   ÚdeÚresultÚds   &&&   r   Ú
_wrap_dimsrR   S   sU   € ä	�3˜gÓ	&€BØ€FØ�:‰:�<Š<Ø�‰�bÔð €Mó ˆAØ�M‰Mœ) A¨WÓ5Ö6ñ à€Mr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úwrapperr   r/   r   r0   r   r   )r   s   "r   r   r   _   s.   € ÷ w)ñ w) ð w)¸ð w)Àsð w)Èsñ w)r   c                óV	  aa€ V'       g   \        R4      hVP                  V P                  4      pVfF   V P                  \	        V4      8  d,   V P                  ^,           pV\	        V4      8  d	   W,          pVfó   \
        P                  ! V^ ,          RRR7      oS'       g   V P                  ! V/ VB # \        SP                  4      ;_uu_ 4       pSP                  f   \        R4      hVP                  SP                  SP                  4       \        V4      p\        SP                  4      V^ &   V P                  ! V/ VB pVP                  VSP                   4      uuRRR4       # \
        P                  ! V^ ,          4      oS'       g   V P                  ! V/ VB # RpV P"                  '       dj   VP                  R4      p	V	fF   V P$                  \	        V4      8  d,   V P$                  ^,           p
V
\	        V4      8  d	   W,          p	V	e   \'        V	4      pSP)                  4       p\+        W;V4      p. pR.\	        SP                  4      ,          pV FÐ  pRp\-        SP                  4       F  w  ppVV8X  g   K  Tp M	  Vfˆ   \-        SP                  4       F5  w  pp\/        VR4      '       g   K  VP1                  V4      '       g   K3  Tp M	  Vf6   SP                   Uu. uF  p\3        V4      NK  	  pp\        R	V R
V 24      hRVV&   VP5                  V4       KÒ  	  . oV P"                  '       dK   V'       gC   \-        SP                  4       F(  w  ppVV,          '       d   K  SP5                  V4       K*  	  MSP                  R,          o\	        V4      ^8X  d   V^ ,          pM\7        V4      p\        V4      pVP9                  4       pSP:                  f   \        R4      h\        SP:                  4      V^ &   V P                  V9   d   VVV P                  &   M2V P                  ^,           pV\	        V4      8  d   \        V4      pVWd&   V P                  ! V/ VB pR VV3R llp\=        VV4      #   + '       g   i     EL3; iu upi )zB
This is the core method that handles dimension-aware operations.
z%Expected at least one argument (self)NTF)Úensure_batchedÚensure_presentz%Expected batchedtensor to be non-NonerC   ÚmatcheszTensor with dimensions z does not contain :NNNzExpected tensor to be non-Nonec               ó    € V ^8„  d   QhRRRR/# )r   Úobjr   r   r   )r   s   "r   r   Ú(patched_dim_method.<locals>.__annotate__Ï   s   € ÷ ñ ˜ð  ñ r   c                óŽ   <€ \        V \        P                  4      '       d$   ^RIHp VP	                  V SSP
                  4      # V # )é   )ÚTensor)rG   Útorchr^   r   Úfrom_positionalÚ
has_device)rZ   r^   ÚinfoÚ
new_levelss   & €€r   Úwrap_resultÚ'patched_dim_method.<locals>.wrap_resultÏ   s5   ø€ Ü�cœ5Ÿ<™<×(Ò(Ý à×)Ñ)¨#¨z¸4¿?¹?ÓKÐKØˆ
r   )rH   Úgetr   r%   Úlenr   Úcreater   r   ÚlevelsÚbatchedtensorÚAssertionErrorÚinplace_update_layersÚlistr   Úfrom_batchedra   r(   r&   rD   rA   rR   Ú	enumerateÚhasattrrX   r   rN   ÚtupleÚcopyr   r   )rT   r/   r0   Údim_argÚdim_idxÚguardÚnew_argsrP   rC   Úkeepdim_argÚkeepdim_idxrA   ÚdimsÚdim_indicesÚseenrQ   ÚmidxrI   ÚlevelÚ
level_strsÚ
py_indicesÚ
new_kwargsrd   rb   rc   s   &*,                    @@r   Úpatched_dim_methodr�   _   s   ù€ ÷ ÜÐ@ÓAÐAð �j‰j˜×)Ñ)Ó*€GØ‚˜7×-Ñ-´°D³	Ô9à×$Ñ$ qÕ(ˆØ”S˜“YÔØ•mˆGð ‚Ü× Ò   a¥¸ÈeÔTˆßØ—<’< Ð0¨Ñ0Ð0ä˜TŸ[™[×)Ô)¨UØ×!Ñ!Ò)Ü$Ð%LÓMÐMØ×'Ñ'¨×(:Ñ(:¸D¿K¹KÔHÜ˜D“zˆHÜ,¨T×-?Ñ-?Ó@ˆH�Q‰KØ—\’\ 8Ð6¨vÑ6ˆFØ×%Ñ% f¨d¯o©oÓ>÷ *Ò)ô ×Ò˜T !�WÓ%€DßØ�|Š|˜TÐ, VÑ,Ð,ð €GØ‡~‡~€~Ø—j‘j Ó+ˆØÒ 7×#9Ñ#9¼CÀ»IÔ#EØ!×0Ñ0°1Õ4ˆKØœS ›YÔ&Ø"Õ/�ØÒ"Ü˜;Ó'ˆGð �9‰9‹;€DÜ�g WÓ-€Dð  €KØˆ7”S˜Ÿ™Ó%Õ%€DãˆØˆÜ! $§+¡+Ö.‰HˆAˆuØ˜ŽzØ�Ùñ /ð
 Š<ä% d§k¡kÖ2‘��5Ü˜5 )×,Ô,°·±¸q×1AÔ1AØ�DÙñ 3ð
 Š|Ø6:·k²kÓB±k¨Uœc %žj±k�
ÐBÜ Ø-¨j¨\Ð9KÈAÈ3ÐOóð ð ˆˆT‰
Ø×Ñ˜4Ö ñ+ ð0 €JØ‡~‡~€~ŸgÜ! $§+¡+Ö.‰HˆAˆuØ˜—7–7Ø×!Ñ! %Ö(ò /ð —[‘[ •^ˆ
ô ˆ;Ó˜1ÔØ% a�.‰
ä˜;Ó'ˆ
ô �D‹z€HØ—‘“€JØ‡{�{ÒÜÐ=Ó>Ð>Ü$ T§[¡[Ó1€HˆQ�Kð ×Ñ˜:Ô%Ø'1ˆ
�7×#Ñ#Ò$à×$Ñ$ qÕ(ˆØ”S˜“]Ô"Ü˜H“~ˆHØ *ˆHÑð �\Š\˜8Ð2 zÑ2€F÷ñ ô �K Ó(Ð(÷E *×)Ð)üò` Cs   ÃBRË4R&ÒR#	c               ó4   € V ^8„  d   QhRRRRRRRRRR	R
R	RR/# )r   r   r	   r%   z
int | Noner&   r   z
str | Noner'   zbool | Noner(   r   r   )r   s   "r   r   r   Ù   sN   € ÷  ñ  Ø
ð àð ð ð ð ð	 ð
 ð ð ð ð ñ r   c                ó¬   € T;'       g    Rp\        V \        V4      pVe   Wn        Ve   W&n        Ve   WFn        Ve   WVn        VP                  4       # )a£  
Wrap a PyTorch function to support first-class dimensions.

Args:
    orig: Original function to wrap
    dim_offset: Offset for dimension argument (default: 0)
    keepdim_offset: Offset for keepdim argument (default: 1)
    dim_name: Name of dimension parameter (default: "dim")
    single_dim: Whether function takes single dimension (default: False)
    reduce: Whether function reduces dimensions (default: True)
r;   )r   r�   r%   r&   r'   r(   r9   )r   r%   r&   r   r'   r(   rT   s   &&&&&& r   Ú_wrapr„   Ù   s^   € ð& × Ð ˜5€Hä˜dÔ$6¸ÓA€GàÒØ'ÔØÒ!Ø!/ÔØÒØ'ÔØÒØŒà×ÑÓÐr   c               ó0   € V ^8„  d   QhRRRRRRRRRR	R
R/# )r   rT   r   Úfuncr	   Útypesrq   r/   r0   zdict | Noner   r   r   )r   s   "r   r   r   ü   sL   € ÷ Añ AØðAà
ðAð ðAð ð	Að
 ðAð 	ñAr   c                ó>   € Vf   / p^RI Hp VP                  WW44      # )z8
Handle __torch_function__ calls for wrapped operators.
)Ú_Tensor)r   r‰   Ú__torch_function__)rT   r†   r‡   r/   r0   r‰   s   &&&&& r   Úcall_torch_functionr‹   ü   s(   € ð ‚~Øˆõ ð ×%Ñ% d°4Ó@Ð@r   )F)NNNNN)r   N)r    Ú
__future__r   r7   Útypingr   r   r_   Útorch.utils._pytreer   Ú
_dim_entryr   Ú_enable_all_layersr   Ú_tensor_infor   Úcollections.abcr	   r   r   rJ   rR   r�   r„   r‹   r   r   r   Ú<module>r“      s_   ðñõ #ã ß %ã Ý (å  Ý /Ý $÷ Ý(õ÷
$ñ $÷N÷"	õw)÷t ÷FAñ Ar   