+
    –°³j`Ñ  ã                  ó–  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIHtHtHtH	t	 ]'       d	   ^ RI
HtHt ^ RIt^ RIHtHtHt ^RIHtHtHt ^RIHt ^RIHt ^R	IHt R
tR
t^ sR R ltR R lt RdR R llt!ReR R llt" ! R R4      t#RdR R llt$ReR R llt% ! R R]&4      t' ! R R]&4      t(^RI)H*t* R R lt+ ! R  R!4      t,],]PZ                  3t. ! R" R#],4      t/ ! R$ R%],4      t-RfR& R' llt0RdR( R) llt1R* R+ lt2 ! R, R-4      t3R. R/ lt4R0 R1 lt5R2 R3 lt6^ R4I7H8t8 ^ R5I9H:t: ]:! ],]PZ                  ],Pv                  4       ],=<R6 R7 lt=R8 R9 lt>]>! R:4       ]>! R;4       ]>! R<4       ]>! R=4       ]>! R>4       ]>! R?4       ]>! R@4       ]>! RA4       ]>! RB4       ]>! RC4       ]>! RD4       ]>! RE4       ]>! RF^RG7       ]>! RH^RG7       ]>! RIR
RJ7       ]>! RKR
RJ7       ]>! RLR
RJ7       ]>! RMR
RJ7       ]>! RNR
RJ7       ]>! ROR
RJ7       ]>! RPR
RJ7       ]>! RQR
RJ7       ]>! RRRSRT7       ]>! RURSRT7       ]>! RVR
RJ7       ]>! RW^RSRX7       ]>! RYR
RSRZ7       ]>! R[R
RSRZ7       ]>! R\R
RSRZ7       ]>! R]R
RSRZ7       ]>! R^R
RSRZ7       ]>! R_R
RSRZ7       ]>! R`R
RSRZ7       ]>! Ra^R
RSRb7       ]>! RcR
RSRZ7       ]8! ]P~                  P€                  P‚                  R
RSRZ7      tAR# )gé    )ÚannotationsN)ÚAnyÚOptionalÚTYPE_CHECKINGÚUnion)ÚCallableÚSequence)Útree_flattenÚtree_mapÚtree_unflatten)Ú_match_levelsÚDimEntryÚndim_of_levels)ÚEnableAllLayers)Ú_PyInstDecoder)Ú
TensorInfoTc               ó    € V ^8„  d   QhRRRR/# )é   Úopcodeú
str | NoneÚreturnÚbool© )Úformats   "ÚW/home/luca/screen-checking/.venv/lib/python3.14/site-packages/functorch/dim/__init__.pyÚ__annotate__r      s   € ÷ 8ñ 8˜ð 8¨ñ 8ó    c                óJ   € \        T ;'       d    V P                  R4      4      # )z4Check if opcode is relevant for variable assignment.ÚSTORE_)r   Ú
startswith)r   s   &r   Ú_relevant_opr!      s    € ä�×6Ð6˜6×,Ñ,¨XÓ6Ó7Ð7r   c               ó    € V ^8„  d   QhRRRR/# )r   Útensorútorch.Tensorr   r   )r   s   "r   r   r   !   s   € ÷ ñ ˜|ð °ñ r   c                ó   € V # )z8Handle tensor conversion for torch function integration.r   )r#   s   &r   Úhandle_from_tensorr&   !   s   € à€Mr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚnameÚstrÚsizeú
int | Noner   ÚDimr   )r   s   "r   r   r   &   s!   € ÷ 7ñ 7�cð 7 ð 7°sñ 7r   c                ó,   € \        Ye   V4      # R4      # )zCreate a new Dim object.éÿÿÿÿ)r,   )r(   r*   s   &&r   Ú_create_dimr/   &   s   € äˆtÒ-�TÓ6Ð6°2Ó6Ð6r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Únr+   Úsizesúlist[int | None] | Noner   úDim | tuple[Dim, ...]r   )r   s   "r   r   r   +   s)   € ÷ `ñ `Øð`Ø!8ð`àñ`r   c                ó–  aa	a
€ R
p^ o
Se   \        S4      pV e   T p\        P                  ! 4       pVf   \        R4      hVP                  p Vf   \        R4      hVP
                  pVP                  p\        WE4      o	\        P                  R8¼  d&   S	P                  4       R8X  d   S	P                  4        S	P                  4        \        S	P                  4       4      '       d   ^o
M5S	P                  4       R8X  d!   S	P                  4       o
S	P                  4        VR
8X  d   S
^ 8X  d   \        R4      hS
pS
V8w  d   ^ o
R V	V
V3R llpSe+   \        S4      V8w  d   \        RV R	\        S4       24      hV^8X  d
   V! ^ 4      ?# . p\!        V4       F  pVP#                  V! V4      4       K  	  \%        V4      ?#   ?i ; i)aƒ  
Create and return one or more Dim objects.

Uses bytecode inspection to determine variable names when possible.

Args:
    n (int, optional): The number of dimensions to create. Can be omitted if sizes is specified.
    sizes (List[Optional[int]], optional): A list the same size as the number of dimensions to be
      created, specifying each dimensions size, or None to leave the size unset.

Returns:
    Union[Dim, Tuple[Dim, ...]]: Single Dim if n=1, tuple of Dims otherwise.

Examples:
    >>> batch, channel, width, height = dims(4)
    >>> batch, channel, width, height = dims(sizes=[None, 3, 224, 224])
    >>> single_dim = dims(1)
úUnable to get current frameúUnable to get caller frameÚPRECALLÚUNPACK_SEQUENCEzTdims() must be assigned to a sequence of variable names or have argument n specifiedc               ó    € V ^8„  d   QhRRRR/# )r   ÚiÚintr   r,   r   )r   s   "r   r   Údims.<locals>.__annotate__n   s   € ÷ 	+ñ 	+˜ð 	+ ñ 	+r   c                óª   <€ R pV S8  d   SP                  4       pV'       g	   RV  2p^ oMSP                  4        Se
   SV ,          MR p\        W4      # ©NÚd)r(   Únextr/   )r;   r(   r*   ÚdecoderÚfound_ndimsr2   s   &  €€€r   Ú	genobjectÚdims.<locals>.genobjectn   sQ   ø€ àˆDØ�;ŒØ—|‘|“~�çØ˜1˜#�w�Ø‘à—‘”à$Ò0�5˜–8°dˆDÜ˜tÓ*Ð*r   ú	expected ú sizes but found r.   ©é   é   )ÚlenÚinspectÚcurrentframeÚRuntimeErrorÚf_backÚf_codeÚf_lastir   ÚsysÚversion_infor   rA   r!   ÚopargÚSyntaxErrorÚ
ValueErrorÚrangeÚappendÚtuple)r1   r2   Úspecified_ndimsÚframeÚcodeÚlastirD   Úresultr;   rB   rC   s   &f       @@r   Údimsr_   +   s¯  ú€ ð* €OØ€Kð ÒÜ˜e›*ˆØ‚}Øˆô × Ò Ó"€EØ‚}ÜÐ8Ó9Ð9Ø�L‰L€Eð=ØŠ=ÜÐ;Ó<Ð<Ø�|‰|ˆØ—‘ˆä  Ó-ˆä×Ñ˜wÔ&Ø�~‰~Ó 9Ô,Ø—‘”ð 	�‰Œô ˜Ÿ™Ó(×)Ò)Ø‰KØ�^‰^ÓÐ!2Ô2Ø!Ÿ-™-›/ˆKØ�L‰LŒNà˜bÔ Ø˜aÔÜ!Øjóð ð *ˆOà˜/Ô)ØˆK÷	+ò 	+ð  Ò¤ U£¨Ô!>Ü˜y¨Ð(9Ð9JÌ3ÈuË:È,ÐWÓXÐXà˜aÔÙ˜Q“<ñ ð ˆÜ�Ö'ˆAØ�M‰M™) A›,Ö'ñ (ô �V‹}ñ ø‰Eús   ÁD>G Æ5G ÇGc                  óò   € ] tR t^Žt$ RtR]R&   R]R&   R]R&   R$R	 R
 lltR R ltR R ltR R lt	R R lt
R R ltR R lt]R R l4       tR R ltR R ltR R ltR R  lt]R%R! R" ll4       tR#tR# )&ÚDimLista  
A list of first-class dimensions that can be bound to tensor dimensions.

A DimList can be in one of two states:
1. Unbound: Created with just a name, no specific dimensions yet
2. Bound: Either created with specific dimensions/sizes, or bound later via bind() or bind_len()
r   Ú_namez	list[Dim]Ú_dimsr   Ú_boundNc               ó    € V ^8„  d   QhRRRR/# )r   Úlen_or_dimszint | Sequence | Noner(   r   r   )r   s   "r   r   ÚDimList.__annotate__›   s   € ÷ !ñ !à*ð!ð ñ!r   c                óÀ  € W n         . V n        RV n        \        V\        4      '       d   V P                  V4       R# Ve�   . p\        V4       Fx  w  rE\        V\        4      '       dD   V P                   '       d   V P                    V 2MRV 2pVP                  \        We4      4       K^  VP                  \        V4      4       Kz  	  V P                  V4       R# R# )zŸ
Initialize a new DimList object.

Args:
    len_or_dims: Optional length (int) or sequence of dimensions/sizes
    name: Optional name for the dimension list
FNÚdim)
rb   rc   rd   Ú
isinstancer<   Úbind_lenÚ	enumeraterX   r,   Ú	_set_dims)Úselfrf   r(   r_   r;   ÚitemÚdim_names   &&&    r   Ú__init__ÚDimList.__init__›   s¯   € ð Œ
ØˆŒ
ØˆŒä�k¤3×'Ò'Ø�M‰M˜+Ö&ØÒ$ØˆDÜ$ [Ö1‘�Ü˜d¤C×(Ò(Ø59·Z·Z°Z $§*¡* ¨a¨SÑ1ÀsÈ1È#ÀY�HØ—K‘K¤ HÓ 3Ö4à—K‘K¤ D£	Ö*ñ 2ð �N‰N˜4Ö ñ %r   c               ó    € V ^8„  d   QhRRRR/# )r   r_   Úlistr   ÚNoner   )r   s   "r   r   rg   ¸   s   € ÷ ñ ˜dð  tñ r   c                ó    € RV n         Wn        R# )z%Set the dimensions and mark as bound.TN)rd   rc   )rn   r_   s   &&r   rm   ÚDimList._set_dims¸   s   € àˆŒØŽ
r   c               ó    € V ^8„  d   QhRRRR/# )r   r*   r<   r   ru   r   )r   s   "r   r   rg   ½   s   € ÷ 1ñ 1˜Sð 1 Tñ 1r   c                ó€  € V P                   '       dA   \        V P                  4      V8w  d%   \        R\        V P                  4       RV 24      hR# RV n         . V n        \	        V4       FN  pV P
                  '       d   V P
                   V 2MRV 2pV P                  P                  \        V4      4       KP  	  R# )z 
Bind this DimList to a specific length.

Args:
    size: Number of dimensions to bind to

Raises:
    DimensionBindError: If already bound to a different size
zDimlist has size z but it is being bound to size Tri   N)rd   rK   rc   ÚDimensionBindErrorrW   rb   rX   r,   )rn   r*   r;   rp   s   &&  r   rk   ÚDimList.bind_len½   s¡   € ð �;�;ˆ;Ü�4—:‘:‹ $Ô&Ü(Ø'¬¨D¯J©J«Ð'8Ð8WÐX\ÐW]Ð^óð ñ 'ð
 ˆDŒKØˆDŒJÜ˜4–[�Ø15··°˜dŸj™j˜\¨!¨Ñ-À3ÀqÀcÀ�Ø—
‘
×!Ñ!¤# h£-Ö0ó !r   c               ó    € V ^8„  d   QhRRRR/# )r   r2   zSequence[int]r   ru   r   )r   s   "r   r   rg   Ó   s   € ÷ /ñ /˜-ð /¨Dñ /r   c                ó  € \        VR4      '       d   \        VR4      '       g   \        R4      h\        V4      pV P                  V4       \	        V4       F&  w  r4\        V4      V P                  V,          n        K(  	  R# )z‘
Bind this DimList to specific sizes.

Args:
    sizes: Sequence of sizes for each dimension

Raises:
    ValueError: If sizes is not a sequence
Ú__len__Ú__getitem__zexpected a sequenceN)ÚhasattrrV   rK   rk   rl   r<   rc   r*   )rn   r2   r*   r;   Údim_sizes   &&   r   ÚbindÚDimList.bindÓ   sc   € ô �u˜i×(Ò(´¸¸}×0MÒ0MÜÐ2Ó3Ð3ä�5‹zˆØ�‰�dÔä$ UÖ+‰KˆAÜ!$ X£ˆD�J‰J�q�MÖó ,r   c               ó   € V ^8„  d   QhRR/# ©r   r   r<   r   )r   s   "r   r   rg   æ   s   € ÷ ñ �sñ r   c                	óf   € V P                   '       g   \        R 4      h\        V P                  4      # )úDimList not bound)rd   rz   rK   rc   ©rn   s   &r   Ú_sizeÚDimList._sizeæ   s%   € Ø�{�{ˆ{Ü$Ð%8Ó9Ð9Ü�4—:‘:‹Ðr   c               ó   € V ^8„  d   QhRR/# r…   r   )r   s   "r   r   rg   ë   s   € ÷ ñ �cñ r   c                ó"   € V P                  4       # )z7Return the size (number of dimensions) of this DimList.©r‰   rˆ   s   &r   r*   ÚDimList.sizeë   s   € à�z‰z‹|Ðr   c               ó    € V ^8„  d   QhRRRR/# )r   Úbr   r   ru   r   )r   s   "r   r   rg   ï   s   € ÷ ñ ˜Dð  Tñ r   c                ó   € Wn         R# )z(Set the bound status (for internal use).N©rd   )rn   r�   s   &&r   Ú
_set_boundÚDimList._set_boundï   s   € àŽr   c               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   rg   ô   s   € ÷ ñ ˜$ñ r   c                ó   € V P                   # )z&Property to check if DimList is bound.r’   rˆ   s   &r   Úis_boundÚDimList.is_boundó   s   € ð �{‰{Ðr   c               ó   € V ^8„  d   QhRR/# r…   r   )r   s   "r   r   rg   ø   s   € ÷ ñ ˜ñ r   c                ó"   € V P                  4       # )z!Return the length of the DimList.)r*   rˆ   s   &r   r~   ÚDimList.__len__ø   s   € à�y‰y‹{Ðr   c               ó    € V ^8„  d   QhRRRR/# )r   Úkeyzint | slicer   r4   r   )r   s   "r   r   rg   ü   s   € ÷ ;ñ ;˜{ð ;Ð/Dñ ;r   c                	óú  € V P                   '       g   \        R 4      h\        V\        4      '       d@   V^ 8  g   V\	        V P
                  4      8¼  d   \        R4      hV P
                  V,          # \        V\        4      '       dj   VP                  \	        V P
                  4      4      w  r#p. p\        W#V4       F%  pVP                  V P
                  V,          4       K'  	  \        V4      # \        R4      h)r‡   zindex out of boundszexpected an int or a slice)rd   rz   rj   r<   rK   rc   Ú
IndexErrorÚsliceÚindicesrW   rX   rY   rV   )rn   rž   ÚstartÚstopÚstepr^   r;   s   &&     r   r   ÚDimList.__getitem__ü   s¼   € Ø�{�{ˆ{Ü$Ð%8Ó9Ð9ä�cœ3×ÒØ�QŒw˜#¤ T§Z¡Z£Ô0Ü Ð!6Ó7Ð7Ø—:‘:˜c•?Ð"Ü˜œU×#Ò#Ø #§¡¬C°·
±
«OÓ <ÑˆE˜ØˆFÜ˜5¨Ö-�Ø—‘˜dŸj™j¨�mÖ,ñ .ä˜“=Ð äÐ9Ó:Ð:r   c               ó   € V ^8„  d   QhRR/# ©r   r   r)   r   )r   s   "r   r   rg     s   € ÷ 
'ñ 
'˜#ñ 
'r   c                ó°   € V P                   '       d'   RRP                  R V P                   4       4       R2# V P                  e   RV P                   2# R# )ú,Return string representation of the DimList.Ú(z, c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5i©N)Úrepr)Ú.0ri   s   & r   Ú	<genexpr>Ú#DimList.__repr__.<locals>.<genexpr>  s   é € Ð A±j¨s¤ c§ ³jùs   ‚Ú)Ú*z<unbound_dimlist>)rd   Újoinrc   rb   rˆ   s   &r   Ú__repr__ÚDimList.__repr__  sN   € à�;�;ˆ;à�t—y‘yÑ A°d·j²jÓ AÓAÐBÀ!ÐDÐDØ�Z‰ZÒ#à�t—z‘z�lÐ#Ð#ñ 'r   c               ó   € V ^8„  d   QhRR/# r¨   r   )r   s   "r   r   rg     s   € ÷ ñ ˜ñ r   c                ó"   € V P                  4       # )rª   )rµ   rˆ   s   &r   Ú__str__ÚDimList.__str__  s   € à�}‰}‹Ðr   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# ©
r   Úfuncr   ÚtypesrY   ÚargsÚkwargszdict | Noner   r   r   )r   s   "r   r   rg     sC   € ÷ Eñ EàðEð ðEð ð	Eð
 ðEð 
ñEr   c                	ó.   € \         P                  WW44      # r­   )Ú_TensorÚ__torch_function__)Úclsr½   r¾   r¿   rÀ   s   &&&&&r   rÃ   ÚDimList.__torch_function__  s   € ô ×)Ñ)¨$°tÓDÐDr   )rd   rc   rb   ©NN©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__rq   rm   rk   r‚   r‰   r*   r“   Úpropertyr˜   r~   r   rµ   r¹   ÚclassmethodrÃ   Ú__static_attributes__r   r   r   ra   ra   Ž   s{   ‡ ñð ÓØÓØƒL÷!õ:õ
1õ,/õ&õ
õð ôó ðõõ;õ"
'õð öEó ôEr   ra   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r(   r)   r*   zint | list[int | None] | Noner   ra   r   )r   s   "r   r   r   (  s"   € ÷ ñ ˜#ð Ð%Bð Ègñ r   c                ó  € \        V R7      pVeu   \        V\        4      '       d   VP                  V4       V# VP                  \	        V4      4       \        V4       F"  w  r4Vf   K  WBP                  V,          n        K$  	  V# )z>Create a DimList object with the given name and optional size.)r(   )ra   rj   r<   rk   rK   rl   rc   r*   )r(   r*   Údimlistr;   Úss   &&   r   Ú_create_dimlistrÕ   (  ss   € ä˜4Ô €GØÒÜ�dœC× Ò Ø×Ñ˜TÔ"ð €Nð	 ×ÑœS ›YÔ'Ü! $ž‘�Ø”=Ø,-—M‘M !Õ$Ö)ñ (ð €Nr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r1   r+   r2   r3   r   zDimList | tuple[DimList, ...]r   )r   s   "r   r   r   7  s)   € ÷ Vñ VØðVØ!8ðVà"ñVr   c                óþ  aa€ Rp^ oVe   \        V4      pV e   T p\        P                  ! 4       pVf   \        R4      hVP                  p Vf   \        R4      hVP
                  pVP                  p\        WE4      o\        P                  R8¼  d&   SP                  4       R8X  d   SP                  4        SP                  4        \        SP                  4       4      '       d   ^oM5SP                  4       R8X  d!   SP                  4       oSP                  4        VR8X  d   S^ 8X  d   \        R4      hSpSV8w  d   ^ oR VV3R llpVe+   \        V4      V8w  d   \        R	V R
\        V4       24      hV^8X  d'   V! ^ 4      p\!        Yqe   V^ ,          4      ?# R4      ?# . p\#        V4       F3  p	V! V	4      pVe	   W,          MRp
VP%                  \!        Wz4      4       K5  	  \'        V4      ?#   ?i ; i)zh
Create and return one or more DimList objects.

Similar to dims() but creates DimList objects instead.
Nr6   r7   r8   r9   zXdimlists() must be assigned to a sequence of variable names or have argument n specifiedc               ó    € V ^8„  d   QhRRRR/# )r   r;   r<   r   r)   r   )r   s   "r   r   Údimlists.<locals>.__annotate__m  s   € ÷ 	ñ 	˜ð 	 ñ 	r   c                ó|   <€ R pV S8  d   SP                  4       pV'       g
   RV  2p^ oV# SP                  4        V# r?   )r(   rA   )r;   r(   rB   rC   s   & €€r   rD   Údimlists.<locals>.genobjectm  sD   ø€ àˆDØ�;ŒØ—|‘|“~�çØ˜1˜#�w�Ø�ð ˆKð —‘”àˆKr   rF   rG   r.   rH   )rK   rL   rM   rN   rO   rP   rQ   r   rR   rS   r   rA   r!   rT   rU   rV   rÕ   rW   rX   rY   )r1   r2   rZ   r[   r\   r]   rD   r(   r^   r;   r*   rB   rC   s   &&         @@r   ÚdimlistsrÜ   7  sê  ù€ ð €OØ€Kð ÒÜ˜e›*ˆØ‚}Øˆä× Ò Ó"€EØ‚}ÜÐ8Ó9Ð9Ø�L‰L€EðAØŠ=ÜÐ;Ó<Ð<Ø�|‰|ˆØ—‘ˆä  Ó-ˆä×Ñ˜wÔ&Ø�~‰~Ó 9Ô,Ø—‘”ð 	�‰Œô ˜Ÿ™Ó(×)Ò)Ø‰KØ�^‰^ÓÐ!2Ô2Ø!Ÿ-™-›/ˆKØ�L‰LŒNà˜bÔ Ø˜aÔÜ!Ønóð ð *ˆOà˜/Ô)ØˆK÷	ñ 	ð Ò¤ U£¨Ô!>Ü˜y¨Ð(9Ð9JÌ3ÈuË:È,ÐWÓXÐXð ˜aÔÙ˜Q“<ˆDÜ" 4Ò5F¨¨q­ÓQñ ð MQÓQñ ð ˆÜ�Ö'ˆAÙ˜Q“<ˆDØ$Ò0�5–8°dˆDØ�M‰Mœ/¨$Ó5Ö6ñ (ô
 �V‹}ñ ø‰Eús   ÁEG9 Æ"G9 Æ)AG9 Ç9G<c                  ó   € ] tR tRtRtR# )ÚDimensionMismatchErrori�  r   N©rÈ   rÉ   rÊ   rË   rÐ   r   r   r   rÞ   rÞ   �  ó   † Ûr   rÞ   c                  ó   € ] tR tRtRtR# )rz   i”  r   Nrß   r   r   r   rz   rz   ”  rà   r   rz   )Úop_propertiesc               ó$   € V ^8„  d   QhRRRRRR/# )r   r¿   r   rÀ   r   ru   r   )r   s   "r   r   r   ›  s!   € ÷ 1ñ 1�sð 1 cð 1¨dñ 1r   c                 ó4  € ^ RI p. pV  Fr  p\        VR4      '       dD   R\        \        V4      4      9   d+   VP	                  R\        V4      P
                   R24       KX  VP	                  \        V4      4       Kt  	  \        V/ VBRVP                  /B  R# )z;Safe print that avoids recursive torch function dispatches.NÚ	__class__ÚtorchÚ<Ú>Úfile)rR   r€   r)   ÚtyperX   rÈ   ÚprintÚstderr)r¿   rÀ   rR   Ú	safe_argsÚargs   *,   r   Ú_safe_printrï   ›  s~   € ãð €IÛˆÜ�3˜×$Ò$¨´C¼¸S»	³NÔ)BØ×Ñ˜q¤ c£×!3Ñ!3Ð 4°AÐ6Ö7à×ÑœS ›XÖ&ñ	 ô 
ˆ9Ð0˜Ñ0 S§Z¡ZÕ0r   c                  óÆ   € ] tR tRtR R ltR R lt]R R l4       t]R R	 l4       tR
 R lt	]
RR R ll4       t]R R l4       tR R ltR R ltR R ltR R ltRtR# )rÂ   iª  c               ó   € V ^8„  d   QhRR/# ©r   r   ú	list[Any]r   )r   s   "r   r   Ú_Tensor.__annotate__«  s   € ÷ Qñ Q˜Yñ Qr   c                	ó   € \        R 4      h)z+_get_levels must be implemented by subclass©ÚNotImplementedErrorrˆ   s   &r   Ú_get_levelsÚ_Tensor._get_levels«  ó   € Ü!Ð"OÓPÐPr   c               ó   € V ^8„  d   QhRR/# ©r   r   útorch.Tensor | Noner   )r   s   "r   r   rô   ®  s   € ÷ Qñ QÐ0ñ Qr   c                	ó   € \        R 4      h)z+_get_tensor must be implemented by subclassrö   rˆ   s   &r   Ú_get_tensorÚ_Tensor._get_tensor®  rú   r   c               ó   € V ^8„  d   QhRR/# r…   r   )r   s   "r   r   rô   ²  s   € ÷ Jñ J�cñ Jr   c                	ó   € \        R 4      h)z$ndim must be implemented by subclassrö   rˆ   s   &r   ÚndimÚ_Tensor.ndim±  s   € ä!Ð"HÓIÐIr   c               ó   € V ^8„  d   QhRR/# )r   r   ztuple[Any, ...]r   )r   s   "r   r   rô   ¶  s   € ÷ Sñ S�oñ Sr   c                	ó’   € \         ;QJ d"    . R  V P                  4        4       F  NK  	  5# ! R  V P                  4        4       4      # )c              3  óp   "  € T F,  qP                  4       '       d   K  VP                  4       x € K.  	  R # 5ir­   )Úis_positionalri   ©r¯   Úls   & r   r°   Ú_Tensor.dims.<locals>.<genexpr>·  s#   é € ÐRÑ&8 ÇÁ×@Q”W�Q—U‘U—W�WÓ&8ùs   ‚6ž6)rY   rø   rˆ   s   &r   r_   Ú_Tensor.dimsµ  s6   € çŒuÑR d×&6Ñ&6Ô&8ÓR�uÐRˆuÑR d×&6Ñ&6Ô&8ÓRÓRÐRr   c               ó   € V ^8„  d   QhRR/# r…   r   )r   s   "r   r   rô   ¹  s   € ÷ ñ �Sñ r   c                	ó   € V P                   # r­   )r  rˆ   s   &r   ri   Ú_Tensor.dim¹  s   € Ø�y‰yÐr   Nc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# r¼   r   )r   s   "r   r   rô   ½  sJ   € ÷ ZKñ ZKàðZKð ðZKð ð	ZKð
 ðZKð 
ñZKr   c                	óˆ  € Vf   / p\         '       Ed   V\        P                  P                  J Edõ   \	        V4      ^8X  Edä   V'       EgÛ   \        V^ ,          \        \        P                  34      '       Ed­   \        V^,          \        \        P                  34      '       Ed   \        P                  ! V^ ,          RRR7      p\        P                  ! V^,          RRR7      pV'       Ed6   V'       Ed-   VP                  Ee   VP                  Ee   VP                  P                  4       ^ 8X  dð   VP                  P                  4       ^ 8X  dÑ   VP                  P                  4       '       d±   VP                  P                  4       '       d‘   VP                  ;'       g    VP                  p. pVP                   F  p	W˜9  g   K  VP                  V	4       K  	  VP                   F  p	W˜9  g   K  VP                  V	4       K  	  \        P                  WW‡4      # V\        P                  P                   J d   ^ RIHp
 V
! WW#V4      # V\        P                  P&                  J dO   ^ RIHp \	        V4      ^8X  d"   V! V^ ,          V^,          V^,          4       R # \+        R\	        V4       24      hV\        P                  P,                  J d   V^ ,          P/                  ^ 4      # V\        P0                  J d   \1        V/ VB # V\        P2                  J d   \3        V/ VB # V\        P                  P4                  J gQ   V\        P6                  P4                  J g3   V\        P6                  P8                  J g   V\        P4                  J d   \5        V/ VB # \        P;                  WW44      # )NF©Úensure_batchedÚensure_present)Úgetitem©Úsetitemz%Expected 3 args for __setitem__, got )ÚDOT_OPTIMIZEDræ   ÚTensorÚ__mul__rK   rj   rÂ   r   Úcreater#   ri   Úis_floating_pointÚ
has_deviceÚlevelsrX   Úcreate_delayedr   Úfunctorch.dim._getsetitemr  Ú__setitem__r  rV   r~   r*   ÚsoftmaxÚstackÚsplitÚ_VFÚsplit_with_sizesÚ_torch_function_fallback)rÄ   r½   r¾   r¿   rÀ   Úlhs_infoÚrhs_infor  r  Úlevelr  r  s   &&&&&       r   rÃ   Ú_Tensor.__torch_function__¼  sÌ  € ð Š>ØˆFçŒ=˜T¤U§\¡\×%9Ñ%9Ô9ô �D“	˜Q•ß˜Ü˜t A�w¬´%·,±,Ð(?×@Ó@Ü˜t A�w¬´%·,±,Ð(?×@Ó@ô &×,Ò,Ø˜•G¨EÀ%ô�ô &×,Ò,Ø˜•G¨EÀ%ô�÷
 �Hß ˜Ø Ÿ™Ó3Ø Ÿ™Ó3Ø Ÿ™×+Ñ+Ó-°Ô2Ø Ÿ™×+Ñ+Ó-°Ô2ð !Ÿ™×9Ñ9×;Ò;Ø$ŸO™O×=Ñ=×?Ò?ð &.×%8Ñ%8×%OÐ%O¸H×<OÑ<O˜
Ø!#˜à%-§_¤_˜EØ$Ö2Ø &§¡¨eÖ 4ñ &5ð &.§_¤_˜EØ$Ö2Ø &§¡¨eÖ 4ñ &5ô  &×4Ñ4°TÀÓTÐTà”5—<‘<×+Ñ+Ó+Ý9á˜3 e°6Ó:Ð:à”5—<‘<×+Ñ+Ó+Ý9ô �4‹y˜AŒ~Ù˜˜Q�  a¥¨$¨q­'Ô2Ùä Ð#HÌÈTËÈÐ!TÓUÐUð ”5—<‘<×'Ñ'Ó'Ø˜•7—<‘< “?Ð"ð ”5—=‘=Ó Ü˜DÐ+ FÑ+Ð+ð ”5—;‘;ÓÜ˜$Ð) &Ñ)Ð)ð ”E—L‘L×&Ñ&Ó&Ø”u—y‘y—‘Ó&Ø”u—y‘y×1Ñ1Ó1Ø”u—{‘{Ó"ä˜$Ð) &Ñ)Ð)ä×/Ñ/°¸TÓJÐJr   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   r½   r   r¾   rY   r¿   rÀ   Údictr   r   r   )r   s   "r   r   rô     s;   € ÷ O7ñ O7ØðO7Ø$ðO7Ø,1ðO7Ø;?ðO7à	ñO7r   c                óD  aaa€ \         ;'       d    V \        P                  9   p\        W#34      w  rVRo. p. oV F×  p\        P
                  ! W„'       * R4      p	VP                  V	4       V	'       g   K:  V'       g   V	P                  f   \        R4      hSf   V	P                  '       d   V	P                  oV	P                   FJ  p
\        V
\        4      '       g   \        R\        V
4       24      hV
S9  g   K9  SP                  V
4       KL  	  KÙ  	  V'       dâ   \        V4       F  w  r¹V	'       g   K  V	P                  f   K  V	P                  pSe.   V	P                  '       g   VP!                  SP"                  4      p\%        WÉP                  S4      p\'        V4      W[&   K�  	  \)        WV4      w  rïV ! V/ VB pR VV3R llp\        V\*        P,                  4      '       d	   V! V4      # \/        VV4      # \1        S4      ;_uu_ 4       o\        V4       F…  w  r¹V	'       g   K  V	P                  f   K  V	P                  pSe.   V	P                  '       g   VP!                  SP"                  4      pSP3                  VV	P                  4       \'        V4      W[&   K‡  	  \)        WV4      w  rïV ! V/ VB pR VV3R llp\        V\*        P,                  4      '       d   V! V4      uuRRR4       # \/        VV4      uuRRR4       #   + '       g   i     R# ; i)	zGFallback torch function implementation for non-special-cased functions.NFz-Expected pointwise or batchedtensor to be setzExpected DimEntry, got c               ó    € V ^8„  d   QhRRRR/# ©r   Úobjr   r   r   )r   s   "r   r   Ú6_Tensor._torch_function_fallback.<locals>.__annotate__E  s   € ÷ ñ  ð ¨ñ r   c                óz   <€ \        V \        P                  4      '       d   \        P                  V SSR J4      # V # r­   )rj   ræ   r  Úfrom_positional)r1  Údevice_holding_tensorÚresult_levelss   &€€r   Úwrap_tensorÚ5_Tensor._torch_function_fallback.<locals>.wrap_tensorE  s;   ø€ Ü˜c¤5§<¡<×0Ò0Ü!×1Ñ1Ø˜]Ð,AÈÐ,Móð ð �
r   c               ó    € V ^8„  d   QhRRRR/# r0  r   )r   s   "r   r   r2  a  s   € ÷ ñ  3ð ¨3ñ r   c                óp   <€ \        V \        P                  4      '       d   SP                  V SR J4      # V # r­   )rj   ræ   r  Úfrom_batched)r1  r5  Úguards   &€€r   Úunwrap_tensorÚ7_Tensor._torch_function_fallback.<locals>.unwrap_tensora  s3   ø€ Ü˜c¤5§<¡<×0Ò0Ø ×-Ñ-¨cÐ3HÐPTÐ3TÓUÐUØ�
r   )ÚPOINTWISE_OPTIMIZErâ   Ú	pointwiser
   r   r  rX   ÚbatchedtensorÚAssertionErrorr  r#   r  rj   r   rê   rl   ÚtoÚdevicer   r&   r   ræ   r  r   r   Úinplace_update_layers)r½   r¾   r¿   rÀ   Úis_pointwiseÚ	flat_argsÚspecÚinfosÚfÚinfor*  r;   r#   ÚmlÚunflat_argsÚunflat_kwargsr^   r7  Úbatchedr=  r5  r<  r6  s   &&&&                @@@r   r'  Ú _Tensor._torch_function_fallback  sŽ  ú€ ô
 *×MÐM¨d´m×6MÑ6MÑ.Mˆä&¨ ~Ó6‰ˆ	Ø $Ðà"$ˆØ(*ˆãˆAÜ×$Ò$ QÔ(8¸%Ó@ˆDØ�L‰L˜Ôß‰tß$¨×(:Ñ(:Ò(FÜ(ØGóð ð )Ò0°T·_·_°_Ø,0¯K©KÐ)à!Ÿ[œ[�EÜ% e¬X×6Ò6Ü,Ð/FÄtÈEÃ{ÀmÐ-TÓUÐUØ MÖ1Ø%×,Ñ,¨UÖ3ó	 )ñ ÷" ä$ UÖ+‘�ß‘4˜DŸK™KÔ3Ø!Ÿ[™[�FØ,Ò8ÀÇÇÀØ!'§¡Ð+@×+GÑ+GÓ!H˜Ü& v¯{©{¸MÓJ�BÜ#5°bÓ#9�I“Lñ ,ô *8¸	Ó)HÑ&ˆKÙ˜;Ð8¨-Ñ8ˆF÷ñ ô ˜&¤%§,¡,×/Ò/Ù" 6Ó*Ð*ä ¨VÓ4Ð4ô ˜]×+Ô+¨uä$ UÖ+‘�ß‘4˜D×.Ñ.Ô:Ø"×0Ñ0�GØ,Ò8ÀÇÇÀØ")§*¡*Ð-B×-IÑ-IÓ"J˜Ø×/Ñ/°¸¿¹ÔEÜ#5°gÓ#>�I“Lñ ,ô *8¸	Ó)HÑ&ˆKÙ˜;Ð8¨-Ñ8ˆF÷ñ ô
 ˜&¤%§,¡,×/Ò/Ù$ VÓ,÷) ,Ò+ô,   ¨vÓ6÷- ,×+×+Ó+ús%   ÈLÈ-LÈ=!LÉBLË8LÌL	c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úindexr   Úvaluer   ru   r   )r   s   "r   r   rô   k  s!   € ÷ +ñ + ð +¨Sð +°Tñ +r   c                ó    € ^ RI Hp V! WV4      # )z2Set values in tensor using first-class dimensions.r  )r   r  )rn   rR  rS  r  s   &&& r   r!  Ú_Tensor.__setitem__k  s   € å5á�t EÓ*Ð*r   c               ó    € V ^8„  d   QhRRRR/# )r   r¿   r,   r   rÂ   r   )r   s   "r   r   rô   t  s   € ÷ Sñ S˜Cð S Gñ Sr   c                óè  € \         P                  ! V RRR7      pV F²  p\        V\        4      '       d   K  \        V \        P
                  4      '       d;   \        V \        4      '       g%   \        P
                  P                  ! V .VO5!  u # V P                  \        P
                  P                  \        V 4      3V 3V,           4      u # 	  V'       g>   V P                  \        P
                  P                  \        V 4      3V 3V,           4      # VP                  pVf>   V P                  \        P
                  P                  \        V 4      3V 3V,           4      # VP                  p. p. p. pV FÑ  p	V F>  p
V
P                  4       '       d   K  V
P                  4       V	J g   K1  \        RV	 R24      h	  V F>  pVP                  4       '       d   K  VP                  4       V	J g   K1  \        RV	 R24      h	  VP                  \!        V	4      4       VP                  V	P"                  4       VP                  ^ 4       KÓ  	  VP%                  V4       \'        VP#                  4       4      p\'        VP)                  4       4      pVP%                  V4       VP%                  V4       VP+                  WxVP-                  4       4      p\
        P/                  WæVP0                  4      pV# )a	  
Expand tensor by adding new dimensions or expanding existing dimensions.

If all arguments are Dim objects, adds new named dimensions.
Otherwise, falls back to regular tensor expansion behavior.

Args:
    args: Either Dim objects for new dimensions or sizes for regular expansion

Returns:
    New tensor with expanded dimensions

Example:
    >>> i, j = dims()
    >>> t = torch.randn(3, 4)
    >>> expanded = t[i].expand(j, k)  # Add j, k dimensions
    >>> expanded2 = t[i].expand(2, 4)  # Regular expand with sizes
Fr  zexpanding dimension z# already exists in tensor with dims)r   r  rj   r,   ræ   r  rÂ   ÚexpandrÃ   rê   r#   r  r  ri   rz   rX   r   r*   Úextendrt   ÚstrideÚ
as_stridedÚstorage_offsetr4  r  )rn   r¿   rK  rî   Údatar  Ú
new_levelsÚ	new_sizesÚnew_stridesr@   r*  Ú	new_levelÚ
orig_sizesÚorig_stridesÚexpanded_datar^   s   &*              r   rX  Ú_Tensor.expandt  sk  € ô& × Ò  °eÈEÔRˆãˆCÜ˜c¤3×'Ô'ä˜d¤E§L¡L×1Ò1¼*ÀTÌ7×:SÒ:SÜ Ÿ<™<×.Ò.¨tÐ;°dÓ;Ò;à×2Ñ2ÜŸ™×+Ñ+¬d°4«j¨]¸T¸GÀd½Nóò ñ ÷ à×*Ñ*Ü—‘×#Ñ#¤d¨4£j ]°T°G¸dµNóð ð
 �{‰{ˆØŠ<à×*Ñ*Ü—‘×#Ñ#¤d¨4£j ]°T°G¸dµNóð ð —‘ˆà%'ˆ
Øˆ	ØˆãˆAã�Ø×*Ñ*×,Ô,°·±³ÀÕ1AÜ,Ø.¨q¨cÐ1TÐUóð ñ  ó
 (�	Ø ×.Ñ.×0Ô0°Y·]±]³_ÈÕ5IÜ,Ø.¨q¨cÐ1TÐUóð ñ (ð ×Ñœh q›kÔ*Ø×Ñ˜QŸV™VÔ$Ø×Ñ˜qÖ!ñ ð$ 	×Ñ˜&Ô!ô ˜$Ÿ)™)›+Ó&ˆ
Ü˜DŸK™K›MÓ*ˆØ×Ñ˜Ô$Ø×Ñ˜<Ô(ð Ÿ™¨	À×@SÑ@SÓ@UÓVˆô ×'Ñ'¨À4Ç?Á?ÓSˆØˆr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r_   z3int | Dim | tuple[int | Dim, ...] | list[int | Dim]r¢   zfint | slice | torch.Tensor | tuple[int | slice | torch.Tensor, ...] | list[int | slice | torch.Tensor]r   rÂ   r   )r   s   "r   r   rô   É  s-   € ÷ W$ñ W$àAðW$ð+ðW$ð 
ñW$r   c                óÈ  a a%€ ^RI Hp ^RIHpHp ^RIHo% RR R llpR V%V 3R llpR	 V 3R
 llp. p	. p
\        V\        \        34      p\        V\        \        34      pV'       dm   V'       de   TpTp\        V4      \        V4      8w  d%   \        R\        V4       R\        V4       R24      hV	P                  V4       V
P                  V4       M"V	P                  V4       V
P                  V4       \        P                  ! S RR4      p. p. p. p\!        \        V	4      4       EFÜ  pV! V	V,          RR7      w  ppV'       Edž   \        V4      ^ 8X  d   VP                  \#        4       4       KL  V! V^ ,          4      pVP                  V4       \        V4      ^8X  d   K~  \        V4      ^ 8X  d   VP                  VP$                  4       . p\!        ^\        V4      4       Fs  pV! VV,          4      pRp\!        \        V4      4       F&  pVV,          V8X  g   K  VP'                  V4       Rp M	  V'       g	   V! V4       VP                  V4       Ku  	  Rp\!        \        V4      4       F  pVV,          V8X  g   K  Tp M	  Vf   V! V4       EKu  \)        V4       F&  w  ppVP+                  V^,           V,           V4       K(  	  VP                  V4       EK¾  VP                  V! V	V,          4      4       EKß  	  \        V4      ^ 8”  Ed
   VP,                  f   \/        R4      hV! VP,                  VP$                  V4      pVP1                  4       p. p . p!\!        \        V4      4       F‰  pVV,          V9   dI   \        V 4      ^ 8X  d   V P                  VV,          4       K;  V R;;,          VV,          ,          uu&   KY  V P                  VV,          4       V!P                  VV,          4       K‹  	  VP3                  V 4      Vn        V!Vn        Rp"V
 F#  p#\        V#\        \        34      '       g   K!  Rp" M	  V! V. VV
V"4      p$V! V$4      # )z,
Index tensor using first-class dimensions.
)r   )Úgetsetitem_flatÚinvoke_getitem©Ú	_wrap_dimFc               ó$   € V ^8„  d   QhRRRRRR/# )r   r1  r   Úcheck_firstr   r   ztuple[Any, bool]r   )r   s   "r   r   Ú#_Tensor.index.<locals>.__annotate__Ú  s"   € ÷ 	ñ 	˜sð 	°ð 	ÐBRñ 	r   c                óX   € \        V \        \        34      '       d   \        V 4      R 3# R# )T)NF)rj   rY   rt   )r1  rm  s   &&r   Úmaybe_dimpackÚ$_Tensor.index.<locals>.maybe_dimpackÚ  s'   € Ü˜#¤¤t˜}×-Ò-Ü˜C“y $�Ð&ØÐr   c               ó    € V ^8„  d   QhRRRR/# )r   rÔ   r   r   r   )r   s   "r   r   rn  ß  s   € ÷ 	ñ 	˜sð 	 sñ 	r   c                óŠ   <€ S! V SP                   R 4      pVP                  4       '       d   \        R\        V 4       24      hV# )Fz)expected a dimension specifyer but found )r  Úis_noneÚ	TypeErrorr®   )rÔ   r@   rk  rn   s   & €€r   Úparse_dim_entryÚ&_Tensor.index.<locals>.parse_dim_entryß  s=   ø€ Ù˜!˜TŸY™Y¨Ó.ˆAØ�y‰y�{Š{ÜÐ"KÌDÐQRËGÈ9Ð UÓVÐVØˆHr   c               ó    € V ^8„  d   QhRRRR/# )r   r@   r   r   ru   r   )r   s   "r   r   rn  æ  s   € ÷ 	Lñ 	L˜sð 	L tñ 	Lr   c                óò   <€ V P                  4       '       d<   \        R V P                  4       SP                  ,            RSP                   R24      h\        R \	        V P                  4       4       R24      h)ú
dimension z not in tensor of z dimensionsz not in tensor)r  ru  Úpositionr  r®   ri   )r@   rn   s   &€r   Údim_not_presentÚ&_Tensor.index.<locals>.dim_not_presentæ  se   ø€ Ø�‰× Ò ÜØ  §¡£°·	±	Õ!9Ð :Ð:LÈTÏYÉYÈKÐWbÐcóð ô   *¬T°!·%±%³'«]¨O¸>Ð JÓKÐKr   zdims (z) and indices (z) must have the same length)rm  TNz2Cannot perform dimension flattening on None tensor)Fr.   )Ú
_dim_entryr   Ú_getsetitemrh  ri  Ú_wraprk  rj   rY   rt   rK   ru  rY  rX   r   r  rW   r   r  Úpoprl   Úinsertr#   rB  r*   Úreshape)&rn   r_   r¢   r   rh  ri  rp  rv  r|  Ú	dims_listÚindices_listÚlhs_listÚrhs_listÚdims_seqÚindices_seqÚ	self_infor^  Ú
to_flattenÚdims_list_flatr;   ÚmÚ
is_dimpackÚfirstÚrestÚjr@   ÚremovedÚkÚ	first_idxÚrÚ
rearrangedr2   r_  Úreshape_levelsÚhas_dimpacksÚidxrK  rk  s&   f&&                                  @r   rR  Ú_Tensor.indexÉ  sß  ù€ õ 	.ß@Ý$÷	÷
	ñ 	÷	Lð 	Lð &(ˆ	Ø9;ˆä˜d¤U¬D MÓ2ˆÜ˜g¬¬t }Ó5ˆçŸàˆHØ!ˆKÜ�8‹}¤ KÓ 0Ô0ÜØœS ›]˜O¨?¼3¸{Ó;KÐ:LÐLgÐhóð ð ×Ñ˜XÔ&Ø×Ñ Õ,à×Ñ˜TÔ"Ø×Ñ Ô(ô ×%Ò% d¨E°5Ó9ˆ	à "ˆ
Ø "ˆ
Øˆô ”s˜9“~×&ˆAÙ)¨)°A­,ÀEÔJ‰MˆAˆzßˆzÜ�q“6˜Q”;Ø"×)Ñ)¬(«*Ô5Ùá'¨¨!­Ó-�Ø×%Ñ% eÔ,ä�q“6˜Q”;Ùô �z“? aÔ'Ø×%Ñ% i×&6Ñ&6Ô7à�Ü˜q¤# a£&Ö)�AÙ'¨¨!­Ó-�AØ#�GÜ"¤3 z£?Ö3˜Ø% a�=¨AÖ-Ø&ŸN™N¨1Ô-Ø&*˜GÙ!ñ	 4÷
 #Ù'¨Ô*Ø—K‘K –Nñ *ð !�	Üœs :›Ö/�AØ! !•}¨Ö-Ø$%˜	Ùñ 0ð Ò$Ù# EÔ*Úä% džO‘D�A�qØ×%Ñ% i°!¥m°aÕ&7¸Ö;ñ ,à×!Ñ! $×'à×%Ñ%¡o°iÀµlÓ&C×DñY 'ô^ ˆz‹?˜QÕØ×ÑÒ'Ü$ØHóð ñ ' y×'7Ñ'7¸×9IÑ9IÈ:ÓVˆJØ—O‘OÓ%ˆEØ#%ˆIØˆNäœ3˜z›?Ö+�Ø˜a•= JÔ.Ü˜9“~¨Ô*Ø!×(Ñ(¨¨q­Ö2à! "Ÿ¨¨q­Õ1�à×$Ñ$ U¨1¥XÔ.Ø"×)Ñ)¨*°Q­-Ö8ñ ,ð  *×1Ñ1°)Ó<ˆIÔØ-ˆIÔð ˆÛˆCÜ˜#¤¤t˜}×-Ô-Ø#�Ùñ  ñ ØØØØØó
ˆñ ˜dÓ#Ð#r   c               ó   € V ^8„  d   QhRR/# r¨   r   )r   s   "r   r   rô   b  s   € ÷ Vñ V˜#ñ Vr   c                	óH  € V P                  4       V P                  4       V P                  r2p. pV FÆ  p\        VR 4      '       d?   VP	                  4       '       d)   VP                  VP                  4       V,           4       KS  \        VR4      '       d"   VP                  VP                  4       4       K†  \        VR4      '       d   VP                  VP                  4       Kµ  VP                  V4       KÈ  	  V R\        V4       R\        VP                  4       4       2# )r  ri   r]  z
with dims=z sizes=)rÿ   rø   r  r€   r  rX   r{  ri   r]  rY   r*   )rn   r#   r  r  Ú	dims_reprr
  s   &     r   rµ   Ú_Tensor.__repr__b  sÝ   € Ø#×/Ñ/Ó1°4×3CÑ3CÓ3EÀtÇyÁy˜ˆØˆ	ÛˆAÜ�q˜/×*Ò*¨q¯©×/@Ò/@à× Ñ  §¡£°Õ!4Ö5Ü˜˜E×"Ò"Ø× Ñ  §¡£Ö)Ü˜˜F×#Ò#Ø× Ñ  §¡Ö(à× Ñ  Ö#ñ ð �˜¤e¨IÓ&6Ð%7°w¼uÀVÇ[Á[Ã]Ó?SÐ>TÐUÐUr   r   rÇ   )rÈ   rÉ   rÊ   rË   rø   rÿ   rÎ   r  r_   ri   rÏ   rÃ   Ústaticmethodr'  r!  rX  rR  rµ   rÐ   r   r   r   rÂ   rÂ   ª  sŽ   † õQõQð ôJó ðJð ôSó ðSõð öZKó ðZKðx ôO7ó ðO7õb+õSõjW$÷rVñ Vr   rÂ   c                  ó  € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R	&   RR
 R llt]R R l4       t]R R l4       t	]R R l4       t
]
P                  R R l4       t
]R R l4       tR R ltR R ltR R lt]P"                  tRtR# )r,   iu  r<   Ú_levelr)   rb   r‰   rý   Ú_rangeÚ_batchtensorc               ó$   € V ^8„  d   QhRRRRRR/# )r   r(   r)   rÔ   r<   r   ru   r   )r   s   "r   r   ÚDim.__annotate__|  s!   € ÷ !ñ !˜Sð ! Sð !°$ñ !r   c                	ój   € Wn         W n        \        V n        \        ^,          sRV n        RV n        R# ©é   N)rb   r‰   Ú_n_dims_createdr¡  r¢  r£  )rn   r(   rÔ   s   &&&r   rq   ÚDim.__init__|  s,   € àŒ
ØŒ
Ü%ˆŒÜ˜1ÕˆØˆŒØ ˆÖr   c               ó   € V ^8„  d   QhRR/# r…   r   )r   s   "r   r   r¥  †  s   € ÷ ñ �cñ r   c                	ó   € ^# ©r¨  r   rˆ   s   &r   r  ÚDim.ndim…  s   € ár   c               ó    € V ^8„  d   QhRRRR/# )r   r1  r   r   r   r   )r   s   "r   r   r¥  Š  s   € ÷  ñ  ˜cð   dñ  r   c                	ó   € \        V4      V J # r­   ©rê   )rÄ   r1  s   &&r   Úcheck_exactÚDim.check_exact‰  s   € ä�C‹y˜CÐÐr   c               ó   € V ^8„  d   QhRR/# r…   r   )r   s   "r   r   r¥  Ž  s   € ÷ ñ �cñ r   c                	ón   € V P                   R8X  d   \        RV P                   R24      hV P                   # )r¨  rz  z is unboundr.   )r‰   rV   rb   rˆ   s   &r   r*   ÚDim.size�  s0   € à�:‰:˜ÔÜ˜z¨$¯*©*¨°[ÐAÓBÐBØ�z‰zÐr   c               ó    € V ^8„  d   QhRRRR/# )r   Úvr<   r   ru   r   )r   s   "r   r   r¥  ”  s   € ÷ ñ �cð ˜dñ r   c                	ó¨   € V P                   R8X  d	   Wn         R# V P                   V8w  d(   \        R\        V 4       RV P                    RV 24      hR# )r¨  zDim 'z*' previously bound to a dimension of size z$ cannot bind to a dimension of size Nr.   )r‰   rz   r®   )rn   r¸  s   &&r   r*   r¶  “  sV   € à�:‰:˜ÔØŽJØ�Z‰Z˜1Œ_Ü$Øœ˜T›
�|Ð#MÈdÏjÉjÈ\ð Z6Ø67°Sð:óð ñ r   c               ó   € V ^8„  d   QhRR/# r–   r   )r   s   "r   r   r¥  ž  s   € ÷  ñ  ˜$ñ  r   c                ó    € V P                   R8g  # )z1Return True if this dimension is bound to a size.r.   r�   rˆ   s   &r   r˜   ÚDim.is_bound�  s   € ð �z‰z˜RÑÐr   c               ó   € V ^8„  d   QhRR/# ©r   r   r$   r   )r   s   "r   r   r¥  ¢  s   € ÷ 	ñ 	˜Lñ 	r   c                ó€   € V P                   f&   \        P                  ! V P                  4      V n         V P                   # )z€
Get a tensor representing the range [0, size) for this dimension.

Returns:
    A 1D tensor with values [0, 1, 2, ..., size-1]
)r¢  ræ   Úaranger*   rˆ   s   &r   Ú
_get_rangeÚDim._get_range¢  s,   € ð �;‰;ÒÜŸ,š, t§y¡yÓ1ˆDŒKØ�{‰{Ðr   c               ó   € V ^8„  d   QhRR/# r¾  r   )r   s   "r   r   r¥  ­  s   € ÷ !ñ ! ,ñ !r   c                óÆ   € V P                   fI   \        P                  P                  P	                  V P                  4       ^ V P                  4      V n         V P                   # )zu
Get a batched tensor representation of this dimension.

Returns:
    A batched tensor created from the range tensor
)r£  ræ   Ú_CÚ
_functorchÚ_add_batch_dimrÁ  r¡  rˆ   s   &r   Ú_get_batchtensorÚDim._get_batchtensor­  sM   € ð ×ÑÒ$Ü %§¡× 3Ñ 3× BÑ BØ—‘Ó! 1 d§k¡kó!ˆDÔð × Ñ Ð r   c               ó   € V ^8„  d   QhRR/# r¨   r   )r   s   "r   r   r¥  º  s   € ÷ ñ ˜#ñ r   c                ó   € V P                   # )z&String representation of a Dim object.)rb   rˆ   s   &r   rµ   ÚDim.__repr__º  s   € à�z‰zÐr   )r£  r¡  rb   r¢  r‰   N)r.   )rÈ   rÉ   rÊ   rË   rÍ   rq   rÎ   r  rÏ   r²  r*   Úsetterr˜   rÁ  rÈ  rµ   ÚobjectÚ
__format__rÐ   r   r   r   r,   r,   u  s¦   ‡ ØƒKØƒJØƒJØÓØ%Ó%÷!ð ôó ðð ô ó ð ð ôó ðð
 
‡[�[ôó ðð ô ó ð õ	õ!õð ×"Ñ"„Jr   r,   c                  óþ   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R	]R
&   R]R&   R]R&   ]R R l4       t]R R l4       t]R R l4       t	]R R l4       t
R R ltR R ltR R ltR R ltR R  ltR! R" ltR#tR$# )%r  iÆ  rý   Ú_tensorr£  úlist[DimEntry]Ú_levelsr   Ú_has_devicez!Callable[[], torch.Tensor] | NoneÚ_delayedzCallable | NoneÚ_delayed_origztuple | NoneÚ_delayed_argsc               ó   € V ^8„  d   QhRR/# r…   r   )r   s   "r   r   ÚTensor.__annotate__Ð  s   € ÷ Hñ H�cñ Hr   c                	ó:   € \        R  V P                   4       4      # )c              3  óT   "  € T F  qP                  4       '       d   ^M^ x € K   	  R# 5ir§  )r  r	  s   & r   r°   ÚTensor.ndim.<locals>.<genexpr>Ñ  s   é € ÐG¹,°QŸ™×)Ò)‘1¨qÔ0»,ùs   ‚&()ÚsumrÓ  rˆ   s   &r   r  ÚTensor.ndimÏ  s   € äÑG¸$¿,º,ÓGÓGÐGr   c               ó    € V ^8„  d   QhRRRR/# )r   Úotherr   r   r   r   )r   s   "r   r   rÙ  Ô  s   € ÷ "ñ " ð "¨ñ "r   c                	ó   € \        V4      V J # r­   r±  )rÄ   rà  s   &&r   r²  ÚTensor.check_exactÓ  s   € ä�E‹{˜cÐ!Ð!r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r#   r$   r  rÒ  r  r   r   ú_Tensor | torch.Tensorr   )r   s   "r   r   rÙ  Ø  s,   € ÷ 9ñ 9Ø!ð9Ø+9ð9ØGKð9à	ñ9r   c                óJ  € ^ p^ pV Fv  pVP                  4       '       dU   V^ 8X  g<   V^,           VP                  4       8X  g    \        RV RVP                  4        24      hVP                  4       pKm  V^,          pKx  	  V^ 8X  g   VR8X  g   \        RV 24      hV'       g   V# V ! 4       pWn        W'n        W7n        RVn        RVn        RVn        RVn	        VP                  4       \        V4      8w  d*   \        RVP                  4        R\        V4       R24      hV# )	aà  
Create a functorch Tensor from a regular PyTorch tensor with specified dimension levels.

This is the primary way to create Tensor objects with first-class dimensions.

Args:
    tensor: The underlying PyTorch tensor
    levels: List of DimEntry objects specifying the dimension structure
    has_device: Whether the tensor is on a device (not CPU)

Returns:
    A new Tensor instance with the specified dimensions, or a regular torch.Tensor
    if there are no named dimensions
z/Positional dimensions must be consecutive, got z then z0Final positional dimension must be 0 or -1, got NzTensor has z dimensions but z levels providedr.   )r  r{  rB  rÑ  rÓ  rÔ  r£  rÕ  rÖ  r×  ri   rK   )rÄ   r#   r  r  Ú	seen_dimsÚlastr
  r^   s   &&&&    r   r4  ÚTensor.from_positional×  s+  € ð$ ˆ	ØˆãˆAØ�‰× Ò à œ	 T¨A¥X°·±³Ô%=Ü(ØIÈ$ÈÈvÐVW×V`ÑV`ÓVbÐUcÐdóð ð —z‘z“|’ð ˜Q•’	ñ ð ˜”	˜T RœZÜ ØBÀ4À&ÐIóð ÷ ØˆMñ “ˆØŒØŒØ'ÔØ"ˆÔØˆŒØ#ˆÔØ#ˆÔð �:‰:‹<œ3˜v›;Ô&Ü Ø˜fŸj™j›l˜^Ð+;¼CÀ»K¸=ÐHXÐYóð ð ˆr   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   Úorigr   r¿   rY   r  rÒ  r  r   r   rÂ   r   )r   s   "r   r   rÙ    s4   € ÷ ñ ØðØ#(ðØ2@ðØNRðà	ñr   c                óˆ   aa€ V ! 4       pRVn         W5n        WEn        RVn        SVn        SVn        R VV3R llpWen        V# )z@
Create a delayed tensor that defers the operation until later.
Nc               ó   € V ^8„  d   QhRR/# r¾  r   )r   s   "r   r   Ú+Tensor.create_delayed.<locals>.__annotate__#  s   € ÷ 	)ñ 	) ,ñ 	)r   c                 ó®   <€ . p S FG  p\        VR 4      '       d"   V P                  VP                  4       4       K6  V P                  V4       KI  	  S! V !  # )rÿ   )r€   rX   rÿ   )Úunwrapped_argsrî   r¿   rê  s     €€r   Úevaluate_delayedÚ/Tensor.create_delayed.<locals>.evaluate_delayed#  sO   ø€ ØˆNÛ�Ü˜3 ×.Ò.Ø"×)Ñ)¨#¯/©/Ó*;Ö<à"×)Ñ)¨#Ö.ñ	 ñ
 ˜Ñ(Ð(r   )rÑ  rÓ  rÔ  r£  rÖ  r×  rÕ  )rÄ   rê  r¿   r  r  r^   rð  s   &ff&&  r   r  ÚTensor.create_delayed  sL   ù€ ñ “ˆØˆŒØŒØ'ÔØ"ˆÔØ#ˆÔØ#ˆÔ÷	)ñ 	)ð +Œàˆr   c               ó   € V ^8„  d   QhRR/# rü   r   )r   s   "r   r   rÙ  0  s   € ÷ ñ Ð0ñ r   c                óÊ   € \        V R4      '       dG   V P                  e9   V P                  f+   V P                  4       V n        RV n        RV n        RV n        V P                  # )zAGet the underlying tensor, handling delayed operations if needed.rÕ  N)r€   rÕ  rÑ  rÖ  r×  rˆ   s   &r   rÿ   ÚTensor._get_tensor0  sU   € ô �D˜*×%Ò%Ø—‘Ò)Ø—‘Ò$ð  Ÿ=™=›?ˆDŒLà ˆDŒMØ!%ˆDÔØ!%ˆDÔØ�|‰|Ðr   c               ó   € V ^8„  d   QhRR/# rò   r   )r   s   "r   r   rÙ  ?  s   € ÷ ñ ˜Yñ r   c                ó   € V P                   # )zGet the dimension levels.)rÓ  rˆ   s   &r   rø   ÚTensor._get_levels?  s   € à�|‰|Ðr   c               ó   € V ^8„  d   QhRR/# r–   r   )r   s   "r   r   rÙ  C  s   € ÷  ñ   ñ  r   c                ó   € V P                   # )z/Get whether this tensor has device information.)rÔ  rˆ   s   &r   Ú_get_has_deviceÚTensor._get_has_deviceC  s   € à×ÑÐr   c               ó   € V ^8„  d   QhRR/# rü   r   )r   s   "r   r   rÙ  G  s   € ÷ !ñ !Ð"5ñ !r   c                óœ   € V P                   f4   V P                  V P                  4       V P                  4       4      V n         V P                   # )zDGet the batched tensor representation, creating it lazily if needed.)r£  Ú_add_batch_dimsrÿ   rø   rˆ   s   &r   rÈ  ÚTensor._get_batchtensorG  sF   € à×ÑÒ$Ø $× 4Ñ 4Ø× Ñ Ó" D×$4Ñ$4Ó$6ó!ˆDÔð × Ñ Ð r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Útrý   Úlevels_ró   r   r   )r   s   "r   r   rÙ  O  s$   € ÷ ñ Ø$ðØ/8ðà	ñr   c                	ó  € \        V4      p RpRp\        R4      p^ p^ p\        V4       Fy  w  r‰V	P                  4       '       d   K  V	P	                  4       '       g>   V	P                  4       P                  V8  d   V	P                  4       P                  pTpTpV^,          pK{  	  VR8X  d   V# Vf   \        R4      h\        P                  P                  P                  W\        V4      4      p\        4       W4&   Kõ  )TÚinfzExpected t to be non-Noner.   )rt   Úfloatrl   rt  r  ri   r¡  rB  ræ   rÅ  rÆ  rÇ  r<   r   )
rn   r  r  r  Úmin_real_indexÚ	min_indexÚ	min_valuer;   r•  r
  s
   &&&       r   rÿ  ÚTensor._add_batch_dimsO  sÒ   € ô �g“ˆàØˆNØˆIÜ˜e›ˆIØˆAØˆAä! &Ö)‘�Ø—y‘y—{”{ØŸ?™?×,Ò,°·±³·±À)Ô1KØ$%§E¡E£G§N¡N˜	Ø$%˜	Ø)*˜Ø˜•F’Añ *ð ˜BŒØ�àŠyÜ$Ð%@ÓAÐAÜ—‘×#Ñ#×2Ñ2°1ÄÀYÃÓPˆAä%-£ZˆFÓ"r   c               ó    € V ^8„  d   QhRRRR/# )r   r_   r   r   rÂ   r   )r   s   "r   r   rÙ  m  s   € ÷ ñ ˜3ð  7ñ r   c                ó&   € ^RI Hp V! V .VO5!  pV# )z&Reorder the dimensions of this tensor.)Úorder)Ú_orderr  )rn   r_   r  r^   s   &*  r   r  ÚTensor.orderm  s   € å!á�tÐ#˜dÓ#ˆØˆr   )r£  rÕ  r×  rÖ  rÑ  N)rÈ   rÉ   rÊ   rË   rÍ   rÎ   r  rÏ   r²  r4  r  rÿ   rø   rû  rÈ  rÿ  r  rÐ   r   r   r   r  r  Æ  s    ‡ Ø Ó Ø%Ó%ØÓØÓØ/Ó/Ø"Ó"ØÓàôHó ðHð ô"ó ð"ð ô9ó ð9ðv ôó ðõ8õõ õ!õ÷<ñ r   r  c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Útensorsr   Únew_dimri   r<   r   rÂ   r   )r   s   "r   r   r   u  s.   € ÷ Bñ B�3ð B ð B¨3ð B°wñ Br   c                óÌ  € V '       g   \        R4      h\        V\        4      '       g   \        P                  ! WR7      pV# . p. pV  FY  p\
        P                  ! VRRR7      pVP                  V4       VP                   F  pW„9  g   K  VP                  V4       K  	  K[  	  \        V 4      Vn
        . p	V FN  pVP                  f   \        R4      h\        VP                  VP                  V4      p
V	P                  V
4       KP  	  \        V4      p^ pVeA   \        V\        4      '       d   V^ 8X  g$   ^RIHp V! W+R4      p VP%                  V4      pTp\        P                  ! Wœ4      pVP)                  V\+        V4      4       \,        P/                  Y4V'       d   V^ ,          P0                  4      pV# R
4      pV#   \          d    \'        RT R	24      Rhi ; i)a  
Stack tensors along a new dimension.

Args:
    tensors: Sequence of tensors to stack
    new_dim: The new Dim to create for stacking
    dim: The dimension position to insert the new dimension (default: 0)

Returns:
    Stacked tensor with the new dimension
z-stack expects a non-empty sequence of tensors)ri   Fr  Nz*Cannot stack tensors with None tensor datarj  z
Dimension z does not exist in inputsT)rV   rj   r,   ræ   r#  r   r  rX   r  rK   r*   r#   rB  r   r   r<   r€  rk  rR  ru  r‚  r   r  r4  r  )r  r  ri   r^   r6  rI  r  rK  r*  ÚinputsÚmatched_tensorr  Úrawdimrk  r@   r™  Útensor_results   &&&              r   r#  r#  u  sÉ  € ÷ ÜÐHÓIÐIô �gœs×#Ò#ä—’˜WÔ.ˆØˆð €MØ€EãˆÜ× Ò  °5ÈÔOˆØ�‰�TÔØ—[”[ˆEØÖ)Ø×$Ñ$ UÖ+ó !ñ ô �w“<€G„Lð €FÛˆØ�;‰;ÒÜ Ð!MÓNÐNÜ& t§{¡{°D·K±KÀÓOˆØ�‰�nÖ%ñ	 ô ˜-Ó(€DØ€FØ
‚¤
¨3´× 4Ò 4¸À¼Ý$á�c Ó'ˆð	SØ×%Ñ% aÓ(ˆCð ˆô �[Š[˜Ó(€Fð ×Ñ˜¤¨'Ó!2Ô3ô ×*Ñ*Ø·e˜u Q�x×2Ñ2ó€Mð Ðð BFó€Mð Ðøô ô 	SÜ˜j¨¨Ð-FÐGÓHÈdÐRð	Sús   Å
G ÇG#c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r#   r   Úsplit_size_or_sectionsri   r   rY   r   )r   s   "r   r   r   º  s.   € ÷ ~ñ ~�#ð ~¨sð ~¸ð ~Èñ ~r   c           	     ól  € ^RI Hp \        V\        4      p\        V\        4      '       dQ   V'       d   \        R4      h\        P                  \        P                  P                  \        V 4      3W3RV/4      # . pRpRpV F0  pVP                  V4       \        V\        4      '       d   RpK.  RpK2  	  V'       dQ   V'       d   \        R4      h\        P                  \        P                  P                  \        V 4      3W3RV/4      # V'       g   \        R4      h\        P                  ! V RRR7      p	V	P                  4       p
V'       g   V
^ 8X  d   \        R4      hVe
   V! W*R4      M\!        V
) 4      pR	p\#        V	P$                  4       F  w  rÞWë8X  g   K  Tp M	  Vf   Vf   ^ p\        R
V 24      h. p^ p. p\#        V4       Fg  w  ppVP&                  '       d.   VP                  VP(                  4       VVR,          ,          pKE  VP                  ^ 4       VP                  V4       Ki  	  V	P*                  f   \-        R4      hV	P*                  P)                  V4      pV'       d~   VV8”  d   \        RV RV R24      hVV,
          pV\/        V4      ,           ^,
          \/        V4      ,          pV F+  p\1        VV4      pVVV,          n        VVV&   VV,          pK-  	  MVV8w  d   \        RV RV R24      hV	P*                  P3                  Wü4      p. p\5        V	P$                  4      p\#        \7        VV4      4       FP  w  pw  pp\!        V4      VV&   VP                  \        P9                  V\5        V4      V	P:                  4      4       KR  	  \=        V4      # )z·
Split tensor along a dimension.

Can handle both regular integer sizes and Dim objects for split sizes.
When Dim objects are used, they get bound to the resulting tensor dimensions.
rj  zKwhen dim is specified as a Dim object, split sizes must also be dimensions.ri   TFz-split list must be ints or dims but got a mixr  z+split expects at least a 1-dimension tensorNz"tensor does not contain dimension z%Cannot get tensor size on None tensorz+sizes of target dimensions add up to more (z) than source dim (r²   z#sum of sizes of target dimensions (z) do not match the source dim (r.   )r€  rk  rj   r,   r<   ru  rÂ   r'  ræ   r  r$  rê   rX   r   r  r  r   rl   r  r˜   r*   r#   rB  rK   Úminr&  rt   Úzipr4  r  rY   )r#   r  ri   rk  Údim_is_objectr2   Úall_dimsÚall_intsro   rŠ  r  Údim_lr™  r;   r*  r¢   Ú
total_sizeÚunboundÚsize_dimÚtensor_sizeÚremaining_sizeÚ
chunk_sizeÚuÚszÚresult_tensorsr^   r^  Úresult_tensors   &&&                         r   r$  r$  º  s”  € õ !ô ˜s¤CÓ(€Mô Ð(¬#×.Ò.çÜØ]óð ô ×/Ñ/Ü�L‰L×ÑÜ�&‹\ˆOØÐ,Ø�CˆLó	
ð 	
ð €EØ€HØ€Hã&ˆØ�‰�TÔÜ�dœC× Ò ØŠHàŠHñ '÷ çÜØ]óð ô ×/Ñ/Ü�L‰L×ÑÜ�&‹\ˆOØÐ,Ø�CˆLó	
ð 	
÷ ÜÐGÓHÐHô ×!Ò! &¸ÈuÔU€IØ�>‰>Ó€Dç˜T QœYÜÐEÓFÐFð ,/ª?‰I�c Ô'ÄÈ$ÈÃ€Eð €CÜ˜i×.Ñ.Ö/‰ˆØŽ>ØˆCÙñ 0ð
 ‚{ØŠ;ØˆCÜÐ<¸S¸EÐBÓCÐCð €GØ€JØ€Gä  Ö'‰ˆˆ8Ø××ÐØ�N‰N˜8Ÿ=™=Ô)Ø˜' "�+Õ%ŠJà�N‰N˜1ÔØ�N‰N˜1Öñ (ð ×ÑÒÜÐDÓEÐEØ×"Ñ"×'Ñ'¨Ó,€K÷ Ø˜Ô#ÜØ=¸j¸\ÐI\Ð]hÐ\iÐijÐkóð ð % zÕ1ˆØ$¤s¨7£|Õ3°aÕ7¼CÀ»LÕHˆ
ÛˆAÜ�Z Ó0ˆBØˆE�!�HŒMØˆG�A‰JØ˜bÕ ŠNò	 ð
 
˜
Ô	"ÜØ1°*°Ð=\Ð]hÐ\iÐijÐkó
ð 	
ð
 ×%Ñ%×6Ñ6°wÓD€Nð €FÜ�i×&Ñ&Ó'€Jä(1´#°nÀeÓ2LÖ(MÑ$ˆÑ$ˆM˜8Ü" 8Ó,ˆ
�3‰Ø�‰Ü×"Ñ"Øœt JÓ/°×1EÑ1Eóö	
ñ )Nô �‹=Ðr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r  r   ri   r  r   rÂ   r   )r   s   "r   r   r   ;  s(   € ÷ ;ñ ;�ð ;˜3ð ;¨ð ;°ñ ;r   c                óR   € \        ^4      p\        WV4      P                  W1.V4      # r­  )r_   r#  rR  )r  ri   r  r1   s   &&& r   Úcatr-  ;  s'   € ÜˆQ‹€AÜ�˜SÓ!×'Ñ'¨¨°'Ó:Ð:r   c                  ó2   € ] tR tRtRtR R ltR R ltRtR# )	ÚDotParti@  z9
Helper class for organizing dimensions in dot products.
c               ó   € V ^8„  d   QhRR/# )r   r   ru   r   )r   s   "r   r   ÚDotPart.__annotate__E  s   € ÷ ñ ˜$ñ r   c                	ó"   € . V n         ^V n        R# r§  ©r_   r!  rˆ   s   &r   rq   ÚDotPart.__init__E  s   € Ø$&ˆŒ	ØˆŽr   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	dim_entryr   r   ru   r   )r   s   "r   r   r1  I  s   € ÷ 4ñ 4 ð 4¨ñ 4r   c                óÎ   € V P                   P                  V4       VP                  4       '       g4   V ;P                  VP	                  4       P
                  ,          un        R# R# )z#Add a dimension entry to this part.N)r_   rX   r  r!  ri   r*   )rn   r6  s   &&r   rX   ÚDotPart.appendI  sB   € à�	‰	×Ñ˜Ô#Ø×&Ñ&×(Ò(Ø�OŠO˜yŸ}™}›×3Ñ3Õ3�Oñ )r   r3  N)rÈ   rÉ   rÊ   rË   rÌ   rq   rX   rÐ   r   r   r   r/  r/  @  s   † ñõ÷4ñ 4r   r/  c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úpartsúlist[DotPart]Útensor_infor   r   r$   r   )r   s   "r   r   r   P  s!   € ÷  ñ  �}ð  °:ð  À,ñ  r   c                ór  € . pRpV  F:  p\        VP                  4      ^8w  d   RpVP                  VP                  4       K<  	  VP                  f   \	        R4      h\        VP                  VP                  V4      pV'       g   V# V  Uu. uF  qDP                  NK  	  ppVP                  V4      # u upi )zB
Prepare tensor for dot product by matching levels and reshaping.
FTz)Cannot perform dot product on None tensor)	rK   r_   rY  r#   rN   r   r  r!  rƒ  )r:  r<  r^  Úneeds_reshapeÚpartr^   Úviews   &&     r   Údot_preparerA  P  s§   € ð €JØ€MãˆÜˆt�y‰y‹>˜QÔØ ˆMØ×Ñ˜$Ÿ)™)Ö$ñ ð
 ×ÑÒ!ÜÐFÓGÐGÜ˜;×-Ñ-¨{×/AÑ/AÀ:ÓN€FçØˆñ ).Ó.© �OŒO©€DÐ.Ø�>‰>˜$ÓÐùò /s   ÂB4c               ó$   € V ^8„  d   QhRRRRRR/# )r   r:  r;  r*  r$   r   r  r   )r   s   "r   r   r   h  s!   € ÷ ñ �mð °Lð ÀVñ r   c                óT  € . pRpV  F:  p\        VP                  4      ^8w  d   RpVP                  VP                  4       K<  	  V'       dF   . pV F,  pVP                  VP	                  4       P
                  4       K.  	  VP                  V4      p\        P                  WR4      pV# )z=
Finish dot product by reshaping result and creating Tensor.
FT)	rK   r_   rY  rX   ri   r*   rƒ  r  r4  )r:  r*  r6  r>  r?  Únew_sizer*  r  s   &&      r   Ú
dot_finishrE  h  s“   € ð €MØ€MãˆÜˆt�y‰y‹>˜QÔØ ˆMØ×Ñ˜TŸY™YÖ'ñ ÷
 ØˆÛ"ˆEØ�O‰O˜EŸI™I›K×,Ñ,Ö-ñ #à%×-Ñ-¨hÓ7ˆä×*Ñ*¨=ÈÓN€MØÐr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úlhsr   ÚrhsÚsum_dimsr   rä  r   )r   s   "r   r   r   ~  s/   € ÷ U6ñ U6ˆSð U6�sð U6 cð U6Ð.Dñ U6r   c                ó*  aaaaaaa€ \         P                  ! V RRR7      p\         P                  ! VRRR7      pV'       d	   V'       g   \        P                  ! W4      # VP                  e   VP                  f   \        R4      hVP                  P                  4       oVP                  P                  4       o\        4       o\        4       o\        4       o\        4       oR VVVVVVV3R llpR.\        VP                  4      ,          p\        VP                  4       F<  w  rxRp	\        VP                  4       F  w  r«W‹8X  g   K  T
p	RWj&    M	  V! W‡V	4       K>  	  \        VP                  4       F  w  r{Wg,          '       d   K  V! VRV4       K!  	  \        SP                  4      \        S4      8w  d:   S F3  pWÃP                  9  g   K  WÄP                  9  g   K'  \        RV 24      h	  \        SP                  4      ^ 8w  dD   \        SSS.V4      p\        SSS.V4      p\        P                  ! WÞ4      p\        SSS.V4      # \        SS.V4      p\        SS.V4      p\        P                   ! WÞ4      p\        SS.V4      # )	zß
Perform dot product between two tensors along specified dimensions.

Args:
    lhs: Left-hand side tensor
    rhs: Right-hand side tensor
    sum_dims: Dimensions to sum over (contract)

Returns:
    Result of dot product
Fr  Nz*Cannot perform dot product on None tensorsc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r@   r   Úlhs_idxÚrhs_idxr   ru   r   )r   s   "r   r   Údot.<locals>.__annotate__ž  s(   € ÷ "ñ "�cð " Cð "°#ð "¸$ñ "r   c                ó  <€ V S9   pVe
   SV,          M^ pVe
   S
V,          M^ pV'       d   SP                  V 4       R# V^ 8H  V^ 8H  8X  d   S	P                  V 4       R# V^ 8w  d   SP                  V 4       R# SP                  V 4       R# )z?Insert dimension into appropriate part based on stride pattern.N)rX   )r@   rL  rM  ÚreducedÚ
lhs_strideÚ
rhs_strideÚlhs_stridesÚlo_dimsÚlr_dimsÚlro_dimsÚrhs_stridesÚro_dimsrI  s   &&&   €€€€€€€r   Ú
insert_dimÚdot.<locals>.insert_dimž  sx   ø€ à�x‘-ˆØ-4Ò-@�[ Ö)Àaˆ
Ø-4Ò-@�[ Ö)Àaˆ
çØ�N‰N˜1Öà˜a‘ Z°1¡_Ô5Ø—‘ Ö"Ø˜q”Ø—‘˜qÖ!à—‘˜qÖ!r   Tz$summing over non-existent dimension )r   r  ræ   Úmatmulr#   rB  rZ  r/  rK   r  rl   r_   rV   rA  ÚbmmrE  Úmm)rG  rH  rI  r(  r)  rY  Úrhs_seenr;   Ú	lhs_levelrM  r‘  Ú	rhs_levelr@   Ú
lhs_tensorÚ
rhs_tensorr^   rS  rT  rU  rV  rW  rX  s   &&f             @@@@@@r   Údotrc  ~  s%  þ€ ô × Ò  °UÈ5ÔQ€HÜ× Ò  °UÈ5ÔQ€HçŸä�|Š|˜CÓ%Ð%à‡�Ò (§/¡/Ò"9ÜÐIÓJÐJà—/‘/×(Ñ(Ó*€KØ—/‘/×(Ñ(Ó*€Kô ‹y€HÜ‹i€GÜ‹i€GÜ‹i€G÷"ö "ð" ˆwœ˜XŸ_™_Ó-Õ-€Hô " (§/¡/Ö2‰ˆØˆÜ% h§o¡oÖ6‰LˆAØÖ%Ø�Ø"�‘Ùñ	 7ñ 	�9 Ö)ñ 3ô " (§/¡/Ö2‰ˆØ�{Ž{Ù�y $¨Ö*ñ 3ô
 ˆ7�<‰<ÓœC ›MÔ)ÛˆAØŸ™Ö'¨A·_±_Ö,DÜ Ð#GÈÀsÐ!KÓLÐLñ ô
 ˆ8�=‰=Ó˜QÔä  (¨G°WÐ!=¸xÓHˆ
Ü  (¨G°WÐ!=¸xÓHˆ
Ü—’˜:Ó2ˆÜ˜8 W¨gÐ6¸Ó?Ð?ô ! '¨7Ð!3°XÓ>ˆ
Ü  '¨7Ð!3°XÓ>ˆ
Ü—’˜*Ó1ˆÜ˜7 GÐ,¨fÓ5Ð5r   )r€  )Ú	wrap_typec               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rn   r   Ú	positionsr_   r   rÂ   r   )r   s   "r   r   r   Þ  s(   € ÷ 2ñ 2�ð 2 ð 2¨3ð 2°7ñ 2r   c                óT  € \        V \        4      '       d   \        P                  WV4      # \        P                  ! V RRR7      pVP
                  f   \        R4      h\        P                  VP
                  VP                  VP                  4      p\        P                  WAV4      # )al  
Index a regular tensor by binding specified positions to dims.

This converts a regular tensor to a first-class tensor by binding
the specified positional dimensions to Dim objects.

Args:
    positions: Tuple of dimension positions to bind
    dims: Dim objects or tuple of Dim objects to bind to

Returns:
    First-class tensor with specified dimensions bound
Fr  zCannot index None tensor)rj   rÂ   rR  r   r  r#   rB  r  r4  r  r  )rn   rf  r_   rK  r^   s   &&&  r   rR  rR  Þ  sƒ   € ô �$œ× Ò Ü�}‰}˜T¨dÓ3Ð3ô ×Ò˜T°%ÈÔN€Dð ‡{�{ÒÜÐ7Ó8Ð8Ü×#Ñ# D§K¡K°·±¸d¿o¹oÓN€Fô �=‰=˜¨DÓ1Ð1r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r(   r)   r¿   r   rÀ   r   ru   r   )r   s   "r   r   r   ý  s(   € ÷ 9ñ 9ˆsð 9˜3ð 9¨#ð 9°$ñ 9r   c           	     óv   € \        \        P                  V 4      p\        \        V \        V.VO5/ VB 4       R # r­   )Úgetattrræ   r  ÚsetattrrÂ   r€  )r(   r¿   rÀ   rê  s   &*, r   Ú_defrl  ý  s-   € Ü”5—<‘< Ó&€DÜŒG�Tœ5 Ð7¨Ò7°Ñ7Ö8r   ÚmeanrÝ  ÚallÚamaxÚaminÚaminmaxÚanyÚcount_nonzeroÚ	logsumexpÚnanmeanÚnansumÚprodÚstd)Úkeepdim_offsetÚvarÚmax)Ú
single_dimr  ÚargmaxÚargminÚkthvalueÚmedianÚ	nanmedianÚmodeÚsortF)ÚreduceÚargsortÚunbindÚchunk)Ú
dim_offsetr„  Úcummax)r|  r„  ÚcumminÚcumprodÚcumprod_ÚcumsumÚcumsum_ÚlogcumsumexpÚrenorm)rˆ  r|  r„  r"  r­   rÆ   )r   )BÚ
__future__r   ÚdisrL   rR   Útypingr   r   r   r   Úcollections.abcr   r	   ræ   Útorch.utils._pytreer
   r   r   r~  r   r   r   Ú_enable_all_layersr   Ú_py_inst_decoderr   Ú_tensor_infor   r?  r  r©  r!   r&   r/   r_   ra   rÕ   rÜ   Ú	ExceptionrÞ   rz   Ú râ   rï   rÂ   r  Ú
TensorLiker,   r#  r$  r-  r/  rA  rE  rc  Úfunctorch.dim._wrapr€  Úfunctorch.dim.wrap_typerd  rÃ   r  rR  rl  ÚnnÚ
functionalr"  r   r   r   Ú<module>r      sª  ðÝ "ã 
Û Û 
ß 6Ó 6÷ ß2ã ß FÑ Fç ?Ñ ?Ý /Ý ,Ý $ð Ð Ø€ð €õ8õ
÷
7÷
`÷FWEñ WE÷t÷Vôr	˜Yô 	ô	˜ô 	õ õ1÷EVñ EVðP �u—|‘|Ð$€
ôK#ˆ'ô K#ôblˆWô l÷^B÷J~õB;÷
4ñ 4õ  õ0õ,U6õp &Ý -ñ 
ˆ'�5—<‘< ×!;Ñ!;Ô <Ø€Lõ2õ>9ñ
 €V„Ù €U„Ù €U„Ù €V„Ù €V„Ù €Y„Ù €U„Ù €_Ô Ù €[Ô Ù €Y„Ù €X„Ù €V„Ù €U˜1Õ Ù €U˜1Õ Ù €U�tÕ Ù €U�tÕ Ù €X˜$Õ Ù €X˜$Õ Ù €Z˜DÕ !Ù €X˜$Õ Ù €[˜TÕ "Ù €V˜Õ Ù €V�EÕ Ù €Y�uÕ Ù €X˜$Õ Ù €W˜ 5Õ )Ù €X˜$ uÕ -Ù €X˜$ uÕ -Ù €Y˜4¨Õ .Ù €Z˜D¨Õ /Ù €X˜$ uÕ -Ù €Y˜4¨Õ .Ù €^ ¨UÕ 3Ù €X˜!¨°UÕ ;Ù €Y˜4¨Õ .Ù
�—‘×#Ñ#×+Ñ+¸ÀUÔ
K‚r   