§
    ŠŠtj`Ñ  ã                  ó  — d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	 erd dl
mZmZ d dlZd dlmZmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ dZdZd ad}d„Zd~d„Z dd€d„Z!	 d�d‚d„Z" G d„ d ¦  «        Z#ddƒd"„Z$	 d�d„d$„Z% G d%„ d&e&¦  «        Z' G d'„ d(e&¦  «        Z(dd)l)m*Z* d…d.„Z+ G d/„ d0¦  «        Z,e,ej-        fZ. G d1„ de,¦  «        Z/ G d2„ d3e,¦  «        Z-d†d‡d8„Z0ddˆd;„Z1d‰d<„Z2 G d=„ d>¦  «        Z3dŠdC„Z4d‹dE„Z5dŒdJ„Z6d dKl7m8Z8 d dLl9m:Z:  e:e,ej-        e,j;        ¦  «         e,`<d�dP„Z=dŽdQ„Z> e>dR¦  «          e>dS¦  «          e>dT¦  «          e>dU¦  «          e>dV¦  «          e>dW¦  «          e>dX¦  «          e>dY¦  «          e>dZ¦  «          e>d[¦  «          e>d\¦  «          e>d]¦  «          e>d^d_¬`¦  «          e>dad_¬`¦  «          e>dbd¬c¦  «          e>ddd¬c¦  «          e>ded¬c¦  «          e>dfd¬c¦  «          e>dgd¬c¦  «          e>dhd¬c¦  «          e>did¬c¦  «          e>djd¬c¦  «          e>dkdl¬m¦  «          e>dndl¬m¦  «          e>dod¬c¦  «          e>dpddl¬q¦  «          e>drddl¬s¦  «          e>dtddl¬s¦  «          e>duddl¬s¦  «          e>dvddl¬s¦  «          e>dwddl¬s¦  «          e>dxddl¬s¦  «          e>dyddl¬s¦  «          e>dzdddl¬{¦  «          e>d|ddl¬s¦  «          e8ej?        j@        jA        ddl¬s¦  «        ZAdS )�é    )ÚannotationsN)ÚAnyÚOptionalÚTYPE_CHECKINGÚUnion)ÚCallableÚSequence)Útree_flattenÚtree_mapÚtree_unflattené   )Ú_match_levelsÚDimEntryÚndim_of_levels)ÚEnableAllLayers)Ú_PyInstDecoder)Ú
TensorInfoTÚopcodeú
str | NoneÚreturnÚboolc                óJ   — t          | o|                      d¦  «        ¦  «        S )z4Check if opcode is relevant for variable assignment.ÚSTORE_)r   Ú
startswith)r   s    úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/functorch/dim/__init__.pyÚ_relevant_opr      s#   € å�Ð6˜6×,Ò,¨XÑ6Ô6Ñ7Ô7Ð7ó    Útensorútorch.Tensorc                ó   — | S )z8Handle tensor conversion for torch function integration.© )r   s    r   Úhandle_from_tensorr"   !   s   € à€Mr   ÚnameÚstrÚsizeú
int | NoneÚDimc                ó*   — t          | |�|nd¦  «        S )zCreate a new Dim object.Néÿÿÿÿ)r'   )r#   r%   s     r   Ú_create_dimr*   &   s   € åˆt˜TÐ-�T�T°2Ñ6Ô6Ð6r   ÚnÚsizesúlist[int | None] | NoneúDim | tuple[Dim, ...]c                óÔ  ‡‡	‡
— d}dŠ
‰�t          ‰¦  «        }| �| }t          j        ¦   «         }|€t          d¦  «        ‚|j        }	 |€t          d¦  «        ‚|j        }|j        }t          ||¦  «        Š	t          j	        dk    r,‰	 
                    ¦   «         dk    r‰	                     ¦   «          ‰	                     ¦   «          t          ‰	 
                    ¦   «         ¦  «        rdŠ
n@‰	 
                    ¦   «         d	k    r(‰	                     ¦   «         Š
‰	                     ¦   «          |dk    r‰
dk    rt          d
¦  «        ‚‰
}‰
|k    rdŠ
dˆ	ˆ
ˆfd„}‰�5t          ‰¦  «        |k    r"t          d|› dt          ‰¦  «        › �¦  «        ‚|dk    r |d¦  «        ~S g }t!          |¦  «        D ] }|                      ||¦  «        ¦  «         Œ!t%          |¦  «        ~S # ~w xY w)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)
    r)   r   NúUnable to get current frameúUnable to get caller frame©é   é   ÚPRECALLr   ÚUNPACK_SEQUENCEzTdims() must be assigned to a sequence of variable names or have argument n specifiedÚiÚintr   r'   c                ó°   •— d }| ‰k     r‰                      ¦   «         }|sd| › �}dŠn‰                     ¦   «          ‰�‰|          nd }t          ||¦  «        S ©NÚdr   )r#   Únextr*   )r7   r#   r%   ÚdecoderÚfound_ndimsr,   s      €€€r   Ú	genobjectzdims.<locals>.genobjectn   sg   ø€ àˆDØ�;ŠˆØ—|’|‘~”~�àð Ø˜1�w�w�Ø��à—’‘”�à$Ð0�5˜”8�8°dˆDÝ˜t TÑ*Ô*Ð*r   ú	expected ú sizes but found )r7   r8   r   r'   )ÚlenÚinspectÚcurrentframeÚRuntimeErrorÚf_backÚf_codeÚf_lastir   ÚsysÚversion_infor   r<   r   ÚopargÚSyntaxErrorÚ
ValueErrorÚrangeÚappendÚtuple)r+   r,   Úspecified_ndimsÚframeÚcodeÚlastir?   Úresultr7   r=   r>   s    `       @@r   ÚdimsrV   +   s;  øøø€ ð* €OØ€Kð ÐÝ˜e™*œ*ˆØ€}Øˆõ Ô Ñ"Ô"€EØ€}ÝÐ8Ñ9Ô9Ð9ØŒL€Eð=Øˆ=ÝÐ;Ñ<Ô<Ð<ØŒ|ˆØ”ˆå   uÑ-Ô-ˆåÔ˜wÒ&Ð&Ø�~Š~ÑÔ 9Ò,Ð,Ø—’‘”�ð 	�Š‰Œˆõ ˜ŸšÑ(Ô(Ñ)Ô)ð 	ØˆKˆKØ�^Š^ÑÔÐ!2Ò2Ð2Ø!Ÿ-š-™/œ/ˆKØ�LŠL‰NŒNˆNà˜bÒ Ð Ø˜aÒÐÝ!Øjñô ð ð *ˆOà˜/Ò)Ð)ØˆKð	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð  Ð¥ U¡¤¨Ò!>Ð!>ÝÐW¨ÐWÐWÍ3ÈuÉ:Ì:ÐWÐWÑXÔXÐXà˜aÒÐØ�9˜Q‘<”<ð ˆEð ˆÝ�Ñ'Ô'ð 	(ð 	(ˆAØ�MŠM˜)˜) A™,œ,Ñ'Ô'Ð'Ð'å�V‰}Œ}ð ˆEøˆEˆ	ˆ	ˆ	ˆ	s   Á	EG$ Æ"A G$ Ç$G'c                  óÆ   — e Zd ZU dZded<   ded<   ded<   	 	 d/d0d„Zd1d„Zd2d„Zd3d„Zd4d„Z	d4d„Z
d5d„Zed6d„¦   «         Zd4d„Zd7d!„Zd8d#„Zd8d$„Ze	 	 d9d:d.„¦   «         ZdS );Ú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   Ú_boundNÚlen_or_dimsúint | Sequence | Noner#   c                óÌ  — || _         g | _        d| _        t          |t          ¦  «        r|                      |¦  «         dS |� g }t          |¦  «        D ]w\  }}t          |t          ¦  «        r;| j         r| j         › |› �nd|› �}|                     t          ||¦  «        ¦  «         ŒU|                     t          |¦  «        ¦  «         Œx|  	                    |¦  «         dS dS )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)
rY   rZ   r[   Ú
isinstancer8   Úbind_lenÚ	enumeraterO   r'   Ú	_set_dims)Úselfr\   r#   rV   r7   ÚitemÚdim_names          r   Ú__init__zDimList.__init__›   sù   € ð ˆŒ
ØˆŒ
ØˆŒå�k¥3Ñ'Ô'ð 
	!Ø�MŠM˜+Ñ&Ô&Ð&Ð&Ð&ØÐ$ØˆDÝ$ [Ñ1Ô1ð +ð +‘��4Ý˜d¥CÑ(Ô(ð +Ø59´ZÐN $¤*Ð1¨aÐ1Ð1Ð1ÀYÈ1ÀYÀY�HØ—K’K¥ H¨dÑ 3Ô 3Ñ4Ô4Ð4Ð4à—K’K¥ D¡	¤	Ñ*Ô*Ð*Ð*Ø�NŠN˜4Ñ Ô Ð Ð Ð ð %Ð$r   rV   Úlistr   ÚNonec                ó"   — d| _         || _        dS )z%Set the dimensions and mark as bound.TN)r[   rZ   )rd   rV   s     r   rc   zDimList._set_dims¸   s   € àˆŒØˆŒ
ˆ
ˆ
r   r%   r8   c                óR  — | j         rAt          | j        ¦  «        |k    r't          dt          | j        ¦  «        › d|› �¦  «        ‚dS d| _         g | _        t	          |¦  «        D ]@}| j        r| j        › |› �nd|› �}| j                             t          |¦  «        ¦  «         ŒAdS )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 Tr_   N)r[   rB   rZ   ÚDimensionBindErrorrN   rY   rO   r'   )rd   r%   r7   rf   s       r   ra   zDimList.bind_len½   sÉ   € ð Œ;ð 
	1Ý�4”:‰Œ $Ò&Ð&Ý(Ø^­¨D¬J©¬Ð^Ð^ÐX\Ð^Ð^ñô ð ð 'Ð&ð
 ˆDŒKØˆDŒJÝ˜4‘[”[ð 1ð 1�Ø15´ÐJ˜dœjÐ-¨!Ð-Ð-Ð-ÀÀqÀÀ�Ø”
×!Ò!¥# h¡-¤-Ñ0Ô0Ð0Ð0ð1ð 1r   r,   úSequence[int]c                ó  — t          |d¦  «        rt          |d¦  «        st          d¦  «        ‚t          |¦  «        }|                      |¦  «         t	          |¦  «        D ]$\  }}t          |¦  «        | j        |         _        Œ%dS )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)ÚhasattrrM   rB   ra   rb   r8   rZ   r%   )rd   r,   r%   r7   Údim_sizes        r   ÚbindzDimList.bindÓ   s�   € õ �u˜iÑ(Ô(ð 	4µ¸¸}Ñ0MÔ0Mð 	4ÝÐ2Ñ3Ô3Ð3å�5‰zŒzˆØ�Š�dÑÔÐå$ UÑ+Ô+ð 	/ð 	/‰KˆAˆxÝ!$ X¡¤ˆDŒJ�qŒMÔÐð	/ð 	/r   c                óV   — | j         st          d¦  «        ‚t          | j        ¦  «        S )NúDimList not bound)r[   rl   rB   rZ   ©rd   s    r   Ú_sizezDimList._sizeæ   s)   € ØŒ{ð 	:Ý$Ð%8Ñ9Ô9Ð9Ý�4”:‰ŒÐr   c                ó*   — |                       ¦   «         S )z7Return the size (number of dimensions) of this DimList.©rw   rv   s    r   r%   zDimList.sizeë   s   € à�zŠz‰|Œ|Ðr   Úbc                ó   — || _         dS )z(Set the bound status (for internal use).N©r[   )rd   rz   s     r   Ú
_set_boundzDimList._set_boundï   s   € àˆŒˆˆr   c                ó   — | j         S )z&Property to check if DimList is bound.r|   rv   s    r   Úis_boundzDimList.is_boundó   s   € ð Œ{Ðr   c                ó*   — |                       ¦   «         S )z!Return the length of the DimList.)r%   rv   s    r   ro   zDimList.__len__ø   s   € à�yŠy‰{Œ{Ðr   Úkeyúint | slicer.   c                óô  — | j         st          d¦  «        ‚t          |t          ¦  «        r:|dk     s|t	          | j        ¦  «        k    rt          d¦  «        ‚| j        |         S t          |t          ¦  «        rp|                     t	          | j        ¦  «        ¦  «        \  }}}g }t          |||¦  «        D ]"}| 
                    | j        |         ¦  «         Œ#t          |¦  «        S t          d¦  «        ‚)Nru   r   zindex out of boundszexpected an int or a slice)r[   rl   r`   r8   rB   rZ   Ú
IndexErrorÚsliceÚindicesrN   rO   rP   rM   )rd   r�   ÚstartÚstopÚsteprU   r7   s          r   rp   zDimList.__getitem__ü   së   € ØŒ{ð 	:Ý$Ð%8Ñ9Ô9Ð9å�c�3ÑÔð 	;Ø�QŠwˆw˜#¥ T¤Z¡¤Ò0Ð0Ý Ð!6Ñ7Ô7Ð7Ø”:˜c”?Ð"Ý˜�UÑ#Ô#ð 	;Ø #§¢­C°´
©O¬OÑ <Ô <ÑˆE�4˜ØˆFÝ˜5 $¨Ñ-Ô-ð -ð -�Ø—’˜dœj¨œmÑ,Ô,Ð,Ð,Ý˜‘=”=Ð åÐ9Ñ:Ô:Ð:r   r$   c                ó†   — | j         r(dd                     d„ | j        D ¦   «         ¦  «        › d�S | j        �
d| j        › �S dS )ú,Return string representation of the DimList.ú(z, c              3  ó4   K  — | ]}t          |¦  «        V — Œd S ©N)Úrepr)Ú.0r_   s     r   ú	<genexpr>z#DimList.__repr__.<locals>.<genexpr>  s(   è è € Ð AÐ A¨s¥ c¡¤Ð AÐ AÐ AÐ AÐ AÐ Ar   ú)NÚ*z<unbound_dimlist>)r[   ÚjoinrZ   rY   rv   s    r   Ú__repr__zDimList.__repr__  sZ   € àŒ;ð 	'àD�t—y’yÐ AÐ A°d´jÐ AÑ AÔ AÑAÔAÐDÐDÐDÐDØŒZÐ#à#�t”zÐ#Ð#Ð#ð 'Ð&r   c                ó*   — |                       ¦   «         S )r‹   )r•   rv   s    r   Ú__str__zDimList.__str__  s   € à�}Š}‰ŒÐr   r!   Úfuncr   ÚtypesrP   ÚargsÚkwargsúdict | Noner   c                ó<   — t                                ||||¦  «        S rŽ   )Ú_TensorÚ__torch_function__)Úclsr˜   r™   rš   r›   s        r   rŸ   zDimList.__torch_function__  s   € õ ×)Ò)¨$°°t¸VÑDÔDÐDr   ©NN)r\   r]   r#   r   )rV   rh   r   ri   )r%   r8   r   ri   )r,   rm   r   ri   ©r   r8   )rz   r   r   ri   ©r   r   )r�   r‚   r   r.   ©r   r$   ©r!   N©
r˜   r   r™   rP   rš   rP   r›   rœ   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__rg   rc   ra   rs   rw   r%   r}   Úpropertyr   ro   rp   r•   r—   ÚclassmethodrŸ   r!   r   r   rX   rX   Ž   s€  € € € € € € ðð ð ÐÐÑØÐÐÑØ€L€L�Lð .2Øð!ð !ð !ð !ð !ð:ð ð ð ð
1ð 1ð 1ð 1ð,/ð /ð /ð /ð&ð ð ð ð
ð ð ð ðð ð ð ð ðð ð ñ „Xððð ð ð ð;ð ;ð ;ð ;ð"
'ð 
'ð 
'ð 
'ðð ð ð ð ð
 Ø"ðEð Eð Eð Eñ „[ðEð Eð Er   rX   úint | list[int | None] | Nonec                ó  — t          | ¬¦  «        }|�vt          |t          ¦  «        r|                     |¦  «         nK|                     t	          |¦  «        ¦  «         t          |¦  «        D ]\  }}|�||j        |         _        Œ|S )z>Create a DimList object with the given name and optional size.)r#   )rX   r`   r8   ra   rB   rb   rZ   r%   )r#   r%   Údimlistr7   Úss        r   Ú_create_dimlistr²   (  s�   € å˜4Ð Ñ Ô €GØÐÝ�d�CÑ Ô ð 	.Ø×Ò˜TÑ"Ô"Ð"Ð"ð ×Ò�S ™YœYÑ'Ô'Ð'Ý! $™œð .ð .‘��1Ø�=Ø,-�G”M !Ô$Ô)øØ€Nr   úDimList | tuple[DimList, ...]c                ó<  ‡‡— d}dŠ|�t          |¦  «        }| �| }t          j        ¦   «         }|€t          d¦  «        ‚|j        }	 |€t          d¦  «        ‚|j        }|j        }t          ||¦  «        Št          j	        dk    r,‰ 
                    ¦   «         dk    r‰                     ¦   «          ‰                     ¦   «          t          ‰ 
                    ¦   «         ¦  «        rdŠn@‰ 
                    ¦   «         d	k    r(‰                     ¦   «         Š‰                     ¦   «          |dk    r‰dk    rt          d
¦  «        ‚‰}‰|k    rdŠdˆˆfd„}|�5t          |¦  «        |k    r"t          d|› dt          |¦  «        › �¦  «        ‚|dk    r& |d¦  «        }t!          ||�|d         nd¦  «        ~S g }t#          |¦  «        D ]<}	 ||	¦  «        }|�||	         nd}
|                     t!          ||
¦  «        ¦  «         Œ=t'          |¦  «        ~S # ~w xY w)zt
    Create and return one or more DimList objects.

    Similar to dims() but creates DimList objects instead.
    r)   r   Nr0   r1   r2   r5   r   r6   zXdimlists() must be assigned to a sequence of variable names or have argument n specifiedr7   r8   r   r$   c                ó|   •— d }| ‰k     r‰                      ¦   «         }|sd| › �}dŠn‰                     ¦   «          |S r:   )r#   r<   )r7   r#   r=   r>   s     €€r   r?   zdimlists.<locals>.genobjectm  sJ   ø€ àˆDØ�;ŠˆØ—|’|‘~”~�àð Ø˜1�w�w�Ø��à—’‘”�àˆKr   r@   rA   )r7   r8   r   r$   )rB   rC   rD   rE   rF   rG   rH   r   rI   rJ   r   r<   r   rK   rL   rM   r²   rN   rO   rP   )r+   r,   rQ   rR   rS   rT   r?   r#   rU   r7   r%   r=   r>   s              @@r   Údimlistsr¶   7  ss  øø€ ð €OØ€Kð ÐÝ˜e™*œ*ˆØ€}ØˆåÔ Ñ"Ô"€EØ€}ÝÐ8Ñ9Ô9Ð9ØŒL€EðAØˆ=ÝÐ;Ñ<Ô<Ð<ØŒ|ˆØ”ˆå   uÑ-Ô-ˆåÔ˜wÒ&Ð&Ø�~Š~ÑÔ 9Ò,Ð,Ø—’‘”�ð 	�Š‰Œˆõ ˜ŸšÑ(Ô(Ñ)Ô)ð 	ØˆKˆKØ�^Š^ÑÔÐ!2Ò2Ð2Ø!Ÿ-š-™/œ/ˆKØ�LŠL‰NŒNˆNà˜bÒ Ð Ø˜aÒÐÝ!Ønñô ð ð *ˆOà˜/Ò)Ð)ØˆKð	ð 	ð 	ð 	ð 	ð 	ð 	ð Ð¥ U¡¤¨Ò!>Ð!>ÝÐW¨ÐWÐWÍ3ÈuÉ:Ì:ÐWÐWÑXÔXÐXð ˜aÒÐØ�9˜Q‘<”<ˆDÝ" 4°UÐ5F¨¨q¬¨ÈDÑQÔQð ˆEð ˆÝ�Ñ'Ô'ð 	7ð 	7ˆAØ�9˜Q‘<”<ˆDØ$Ð0�5˜”8�8°dˆDØ�MŠM�/¨$°Ñ5Ô5Ñ6Ô6Ð6Ð6å�V‰}Œ}ð ˆEøˆEˆ	ˆ	ˆ	ˆ	s   ÁE0H Æ:AH ÈHc                  ó   — e Zd ZdS )ÚDimensionMismatchErrorN©r§   r¨   r©   r!   r   r   r¸   r¸   �  ó   € € € € € Ø€Dr   r¸   c                  ó   — e Zd ZdS )rl   Nr¹   r!   r   r   rl   rl   ”  rº   r   rl   )Úop_propertiesrš   r   r›   ri   c                 ó>  — ddl }g }| D ]~}t          |d¦  «        rJdt          t          |¦  «        ¦  «        v r,|                     dt          |¦  «        j        › d�¦  «         Œ\|                     t          |¦  «        ¦  «         Œt          |i |¤d|j        i¤Ž dS )z;Safe print that avoids recursive torch function dispatches.r   NÚ	__class__Útorchú<ú>Úfile)rI   rq   r$   ÚtyperO   r§   ÚprintÚstderr)rš   r›   rI   Ú	safe_argsÚargs        r   Ú_safe_printrÈ   ›  s¸   € à€J€J€Jð €IØð 'ð 'ˆÝ�3˜Ñ$Ô$ð 	'¨µC½¸S¹	¼	±N´NÐ)BÐ)BØ×ÒÐ6¥ c¡¤Ô!3Ð6Ð6Ð6Ñ7Ô7Ð7Ð7à×Ò�S ™XœXÑ&Ô&Ð&Ð&å	ˆ9Ð0˜Ð0Ð0 S¤ZÐ0Ð0Ð0Ð0Ð0Ð0r   c                  ó¬   — e Zd Zd%d„Zd&d„Zed'd„¦   «         Zed(d	„¦   «         Zd'd
„Ze		 	 d)d*d„¦   «         Z
ed+d„¦   «         Zd,d„Zd-d„Zd.d"„Zd/d$„ZdS )0rž   r   ú	list[Any]c                ó    — t          d¦  «        ‚)Nz+_get_levels must be implemented by subclass©ÚNotImplementedErrorrv   s    r   Ú_get_levelsz_Tensor._get_levels«  ó   € Ý!Ð"OÑPÔPÐPr   útorch.Tensor | Nonec                ó    — t          d¦  «        ‚)Nz+_get_tensor must be implemented by subclassrÌ   rv   s    r   Ú_get_tensorz_Tensor._get_tensor®  rÏ   r   r8   c                ó    — t          d¦  «        ‚)Nz$ndim must be implemented by subclassrÌ   rv   s    r   Úndimz_Tensor.ndim±  s   € å!Ð"HÑIÔIÐIr   útuple[Any, ...]c                óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3  óf   K  — | ],}|                      ¦   «         °|                     ¦   «         V — Œ-d S rŽ   )Úis_positionalr_   ©r�   Úls     r   r‘   z_Tensor.dims.<locals>.<genexpr>·  s9   è è € ÐRÐR ÀÇÂÑ@QÔ@QÐR�Q—U’U‘W”WÐRÐRÐRÐRÐRÐRr   )rP   rÎ   rv   s    r   rV   z_Tensor.dimsµ  s+   € åÐRÐR d×&6Ò&6Ñ&8Ô&8ÐRÑRÔRÑRÔRÐRr   c                ó   — | j         S rŽ   )rÔ   rv   s    r   r_   z_Tensor.dim¹  s
   € ØŒyÐr   r!   Nr˜   r   r™   rP   rš   r›   rœ   r   c                ó2  — |€i }t           �r¦|t          j        j        u �r’t	          |¦  «        dk    �r~|�s{t          |d         t          t          j        f¦  «        �rSt          |d         t          t          j        f¦  «        �r+t          j        |d         dd¬¦  «        }t          j        |d         dd¬¦  «        }|rï|rí|j	        �æ|j	        �ß|j	         
                    ¦   «         dk    rÂ|j	         
                    ¦   «         dk    r¥|j	                             ¦   «         rŒ|j	                             ¦   «         rs|j        p|j        }g }|j        D ]}	|	|vr|                     |	¦  «         Œ|j        D ]}	|	|vr|                     |	¦  «         Œt                               ||||¦  «        S |t          j        j        u rddlm}
  |
| ||||¦  «        S |t          j        j        u rYddlm} t	          |¦  «        dk    r! ||d         |d         |d         ¦  «         d S t+          d	t	          |¦  «        › �¦  «        ‚|t          j        j        u r|d                              d¦  «        S |t          j        u rt1          |i |¤ŽS |t          j        u rt3          |i |¤ŽS |t          j        j        u s4|t          j        j        u s!|t          j        j        u s|t          j        u rt5          |i |¤ŽS t                               ||||¦  «        S )
Né   r   r   F©Úensure_batchedÚensure_present)Úgetitem©Úsetitemr3   z%Expected 3 args for __setitem__, got )ÚDOT_OPTIMIZEDr¿   ÚTensorÚ__mul__rB   r`   rž   r   Úcreater   r_   Úis_floating_pointÚ
has_deviceÚlevelsrO   Úcreate_delayedrp   Úfunctorch.dim._getsetitemrá   Ú__setitem__rã   rM   ro   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Ÿ   z_Tensor.__torch_function__¼  s`  € ð ˆ>ØˆFåñ +	U˜T¥U¤\Ô%9Ð9Ñ9õ �D‘	”	˜Q’‘Øñ å˜t Aœw­µ%´,Ð(?Ñ@Ô@ñ õ ˜t Aœw­µ%´,Ð(?Ñ@Ô@ñ õ &Ô,Ø˜”G¨EÀ%ðñ ô �õ &Ô,Ø˜”G¨EÀ%ðñ ô �ð
 ðUà ðUð !œÐ3Ø œÐ3Ø œ×+Ò+Ñ-Ô-°Ò2Ð2Ø œ×+Ò+Ñ-Ô-°Ò2Ð2ð !œ×9Ò9Ñ;Ô;ðUà$œO×=Ò=Ñ?Ô?ðUð
 &.Ô%8Ð%O¸HÔ<O˜
Ø!#˜à%-¤_ð 5ð 5˜EØ$¨FÐ2Ð2Ø &§¢¨eÑ 4Ô 4Ð 4øØ%-¤_ð 5ð 5˜EØ$¨FÐ2Ð2Ø &§¢¨eÑ 4Ô 4Ð 4øõ  &×4Ò4°T¸4ÀÈÑTÔTÐTà•5”<Ô+Ð+Ð+Ø9Ð9Ð9Ð9Ð9Ð9à�7˜3  e¨T°6Ñ:Ô:Ð:à•5”<Ô+Ð+Ð+Ø9Ð9Ð9Ð9Ð9Ð9õ �4‰yŒy˜AŠ~ˆ~Ø�˜˜Qœ  a¤¨$¨q¬'Ñ2Ô2Ð2Ø�tå Ð!TÍÈTÉÌÐ!TÐ!TÑUÔUÐUð •5”<Ô'Ð'Ð'Ø˜”7—<’< ‘?”?Ð"ð •5”=Ð Ð Ý˜DÐ+ FÐ+Ð+Ð+ð •5”;ÐÐÝ˜$Ð) &Ð)Ð)Ð)ð •E”LÔ&Ð&Ð&Ø•u”y”Ð&Ð&Ø•u”yÔ1Ð1Ð1Ø•u”{Ð"Ð"å˜$Ð) &Ð)Ð)Ð)å×/Ò/°°e¸TÀ6ÑJÔJÐJr   Údictc                ó^  ‡‡‡— t           o| t          j        v }t          ||f¦  «        \  }}dŠg }g Š|D ]¯}t	          j        || d¦  «        }	|                     |	¦  «         |	r|s|	j        €t          d¦  «        ‚‰€|	j	        r|	j
        Š|	j        D ]O}
t          |
t          ¦  «        st          dt          |
¦  «        › �¦  «        ‚|
‰vr‰                     |
¦  «         ŒPŒ°|rÇt          |¦  «        D ]`\  }}	|	rY|	j
        �R|	j
        }‰�!|	j	        s|                     ‰j        ¦  «        }t%          ||	j        ‰¦  «        }t'          |¦  «        ||<   Œat)          ||¦  «        \  }} | |i |¤Ž}d
ˆˆfd„}t          |t*          j        ¦  «        r ||¦  «        S t/          ||¦  «        S t1          ‰¦  «        5 Št          |¦  «        D ]e\  }}	|	r^|	j        �W|	j        }‰�!|	j	        s|                     ‰j        ¦  «        }‰                     ||	j        ¦  «         t'          |¦  «        ||<   Œft)          ||¦  «        \  }} | |i |¤Ž}d
ˆˆfd	„}t          |t*          j        ¦  «        r ||¦  «        cddd¦  «         S t/          ||¦  «        cddd¦  «         S # 1 swxY w Y   dS )zGFallback torch function implementation for non-special-cased functions.NFz-Expected pointwise or batchedtensor to be setzExpected DimEntry, got Úobjr   r   c                óx   •— t          | t          j        ¦  «        rt                               | ‰‰d u¦  «        S | S rŽ   )r`   r¿   rå   Úfrom_positional)rù   Údevice_holding_tensorÚresult_levelss    €€r   Úwrap_tensorz5_Tensor._torch_function_fallback.<locals>.wrap_tensorE  sC   ø€ Ý˜c¥5¤<Ñ0Ô0ð Ý!×1Ò1Ø˜]Ð,AÈÐ,Mñô ð ð �
r   c                ól   •— t          | t          j        ¦  «        r‰                     | ‰d u¦  «        S | S rŽ   )r`   r¿   rå   Úfrom_batched)rù   rü   Úguards    €€r   Úunwrap_tensorz7_Tensor._torch_function_fallback.<locals>.unwrap_tensora  s:   ø€ Ý˜c¥5¤<Ñ0Ô0ð VØ ×-Ò-¨cÐ3HÐPTÐ3TÑUÔUÐUØ�
r   )rù   r   r   r   )ÚPOINTWISE_OPTIMIZEr¼   Ú	pointwiser
   r   rç   rO   ÚbatchedtensorÚAssertionErrorré   r   rê   r`   r   rÃ   rb   ÚtoÚdevicer   r"   r   r¿   rå   r   r   Úinplace_update_layers)r˜   r™   rš   r›   Úis_pointwiseÚ	flat_argsÚspecÚinfosÚfÚinforö   r7   r   ÚmlÚunflat_argsÚunflat_kwargsrU   rþ   Úbatchedr  rü   r  rý   s                       @@@r   ró   z _Tensor._torch_function_fallback  s²  øøø€ õ
 *ÐM¨dµmÔ6MÐ.Mˆå&¨¨f ~Ñ6Ô6‰ˆ	�4Ø $Ðà"$ˆØ(*ˆàð 	4ð 	4ˆAÝÔ$ Q¨LÐ(8¸%Ñ@Ô@ˆDØ�LŠL˜ÑÔÐØð 4Ø$ð ¨Ô(:Ð(FÝ(ØGñô ð ð )Ð0°T´_Ð0Ø,0¬KÐ)à!œ[ð 4ð 4�EÝ% e­XÑ6Ô6ð VÝ,Ð-TÅtÈEÁ{Ä{Ð-TÐ-TÑUÔUÐUØ MÐ1Ð1Ø%×,Ò,¨UÑ3Ô3Ð3øøàð 	5å$ UÑ+Ô+ð :ð :‘��4Øð :˜DœKÐ3Ø!œ[�FØ,Ð8ÀÄÐ8Ø!'§¢Ð+@Ô+GÑ!HÔ!H˜Ý& v¨t¬{¸MÑJÔJ�BÝ#5°bÑ#9Ô#9�I˜a‘Løå)7¸	À4Ñ)HÔ)HÑ&ˆK˜Ø�T˜;Ð8¨-Ð8Ð8ˆFðð ð ð ð ð ð õ ˜&¥%¤,Ñ/Ô/ð 5Ø"�{ 6Ñ*Ô*Ð*å ¨VÑ4Ô4Ð4õ ˜]Ñ+Ô+ð 	7¨uå$ UÑ+Ô+ð ?ð ?‘��4Øð ?˜DÔ.Ð:Ø"Ô0�GØ,Ð8ÀÄÐ8Ø")§*¢*Ð-BÔ-IÑ"JÔ"J˜Ø×/Ò/°¸¼ÑEÔEÐEÝ#5°gÑ#>Ô#>�I˜a‘Løå)7¸	À4Ñ)HÔ)HÑ&ˆK˜Ø�T˜;Ð8¨-Ð8Ð8ˆFðð ð ð ð ð ð õ
 ˜&¥%¤,Ñ/Ô/ð 7Ø$�} VÑ,Ô,ð)	7ð 	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7õ,   ¨vÑ6Ô6ð-	7ð 	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð 	7ð 	7s   Æ=B<J"ÊJ"Ê"J&Ê)J&ÚindexÚvalueri   c                ó(   — ddl m}  || ||¦  «        S )z2Set values in tensor using first-class dimensions.r   râ   )rì   rã   )rd   r  r  rã   s       r   rí   z_Tensor.__setitem__k  s(   € à5Ð5Ð5Ð5Ð5Ð5àˆw�t˜U EÑ*Ô*Ð*r   r'   c                óÆ  — t          j        | dd¬¦  «        }|D ]™}t          |t          ¦  «        s‚t          | t          j        ¦  «        r.t          | t          ¦  «        st	          j        j        | g|¢R Ž c S |                      t          j        j        t          | ¦  «        f| f|z   ¦  «        c S Œš|s8|                      t          j        j        t          | ¦  «        f| f|z   ¦  «        S |j
        }|€8|                      t          j        j        t          | ¦  «        f| f|z   ¦  «        S |j        }g }g }g }|D ]×}	|D ]?}
|
                     ¦   «         s)|
                     ¦   «         |	u rt          d|	› d�¦  «        ‚Œ@|D ]?}|                     ¦   «         s)|                     ¦   «         |	u rt          d|	› d�¦  «        ‚Œ@|                     t!          |	¦  «        ¦  «         |                     |	j        ¦  «         |                     d¦  «         ŒØ|                     |¦  «         t'          |                     ¦   «         ¦  «        }t'          |                     ¦   «         ¦  «        }|                     |¦  «         |                     |¦  «         |                     |||                     ¦   «         ¦  «        }t
                               |||j        ¦  «        }|S )aq  
        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Þ   Nzexpanding dimension z# already exists in tensor with dimsr   )r   rç   r`   r'   r¿   rå   rž   ÚexpandrŸ   rÃ   r   rê   rØ   r_   rl   rO   r   r%   Úextendrh   ÚstrideÚ
as_stridedÚstorage_offsetrû   ré   )rd   rš   r  rÇ   Údatarê   Ú
new_levelsÚ	new_sizesÚnew_stridesr;   rö   Ú	new_levelÚ
orig_sizesÚorig_stridesÚexpanded_datarU   s                   r   r  z_Tensor.expandt  s
  € õ& Ô  °eÈEÐRÑRÔRˆàð 	ð 	ˆCÝ˜c¥3Ñ'Ô'ð å˜d¥E¤LÑ1Ô1ð ½*ÀTÍ7Ñ:SÔ:Sð Ý œ<Ô.¨tÐ;°dÐ;Ð;Ð;Ð;Ð;Ð;à×2Ò2ÝœÔ+­d°4©j¬j¨]¸T¸GÀd¹Nñô ð ð ð ðð ð 	à×*Ò*Ý”Ô#¥d¨4¡j¤j ]°T°G¸d±Nñô ð ð
 Œ{ˆØˆ<à×*Ò*Ý”Ô#¥d¨4¡j¤j ]°T°G¸d±Nñô ð ð ”ˆà%'ˆ
Øˆ	Øˆàð 	"ð 	"ˆAàð ð �Ø×*Ò*Ñ,Ô,ð °·²±´ÀÐ1AÐ1AÝ,ØU¨qÐUÐUÐUñô ð øð (ð ð �	Ø ×.Ò.Ñ0Ô0ð °Y·]²]±_´_ÈÐ5IÐ5IÝ,ØU¨qÐUÐUÐUñô ð øð ×Ò�h q™kœkÑ*Ô*Ð*Ø×Ò˜QœVÑ$Ô$Ð$Ø×Ò˜qÑ!Ô!Ð!Ð!ð 	×Ò˜&Ñ!Ô!Ð!õ ˜$Ÿ)š)™+œ+Ñ&Ô&ˆ
Ý˜DŸKšK™MœMÑ*Ô*ˆØ×Ò˜Ñ$Ô$Ð$Ø×Ò˜<Ñ(Ô(Ð(ð Ÿš¨	°;À×@SÒ@SÑ@UÔ@UÑVÔVˆõ ×'Ò'¨°zÀ4Ä?ÑSÔSˆØˆr   rV   ú3int | Dim | tuple[int | Dim, ...] | list[int | Dim]r†   úfint | slice | torch.Tensor | tuple[int | slice | torch.Tensor, ...] | list[int | slice | torch.Tensor]c                óV	  ‡ ‡%— ddl m} ddlm}m} ddlmŠ% ddd„}dˆ%ˆ fd„}dˆ fd„}g }	g }
t          |t          t          f¦  «        }t          |t          t          f¦  «        }|r�|r|}|}t          |¦  «        t          |¦  «        k    r0t          dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚|	                     |¦  «         |
                     |¦  «         n*|	                     |¦  «         |
                     |¦  «         t          j        ‰ dd¦  «        }g }g }g }t!          t          |	¦  «        ¦  «        D �]ÿ} ||	|         d¬¦  «        \  }}|�r¿t          |¦  «        dk    r"|                     t#          ¦   «         ¦  «         ŒQ ||d         ¦  «        }|                     |¦  «         t          |¦  «        dk    rŒ‹t          |¦  «        dk    r|                     |j        ¦  «         g }t!          dt          |¦  «        ¦  «        D ]{} |||         ¦  «        }d}t!          t          |¦  «        ¦  «        D ]'}||         |k    r|                     |¦  «         d} nŒ(|s ||¦  «         |                     |¦  «         Œ|d}t!          t          |¦  «        ¦  «        D ]}||         |k    r|} nŒ|€ ||¦  «         �Œ“t)          |¦  «        D ]!\  }}|                     |dz   |z   |¦  «         Œ"|                     |¦  «         �ŒÛ|                      ||	|         ¦  «        ¦  «         �Œt          |¦  «        dk    �r|j        €t/          d¦  «        ‚ ||j        |j        |¦  «        }|                     ¦   «         }g } g }!t!          t          |¦  «        ¦  «        D ]ˆ}||         |v rFt          | ¦  «        dk    r|                      ||         ¦  «         Œ;| dxx         ||         z  cc<   ŒR|                      ||         ¦  «         |!                     ||         ¦  «         Œ‰|                     | ¦  «        |_        |!|_        d}"|
D ]"}#t          |#t          t          f¦  «        rd}" nŒ# ||g ||
|"¦  «        }$ ||$¦  «        S )z<
        Index tensor using first-class dimensions.
        r   )r   )Úgetsetitem_flatÚinvoke_getitem©Ú	_wrap_dimFrù   r   Úcheck_firstr   r   útuple[Any, bool]c                ó`   — t          | t          t          f¦  «        rt          | ¦  «        dfS dS )NT)NF)r`   rP   rh   )rù   r,  s     r   Úmaybe_dimpackz$_Tensor.index.<locals>.maybe_dimpackÚ  s-   € Ý˜#¥¥t˜}Ñ-Ô-ð 'Ý˜C‘y”y $�Ð&Ø�;r   r±   c                ó’   •—  ‰| ‰j         d¦  «        }|                     ¦   «         rt          dt          | ¦  «        › �¦  «        ‚|S )NFz)expected a dimension specifyer but found )rÔ   Úis_noneÚ	TypeErrorr�   )r±   r;   r+  rd   s     €€r   Úparse_dim_entryz&_Tensor.index.<locals>.parse_dim_entryß  sL   ø€ Ø�	˜!˜TœY¨Ñ.Ô.ˆAØ�yŠy‰{Œ{ð WÝÐ UÍDÐQRÉGÌGÐ UÐ UÑVÔVÐVØˆHr   r;   ri   c                óú   •— |                       ¦   «         r5t          d|                      ¦   «         ‰j        z   › d‰j        › d�¦  «        ‚t          dt	          |                      ¦   «         ¦  «        › d�¦  «        ‚)Nú
dimension z not in tensor of z dimensionsz not in tensor)rØ   r2  ÚpositionrÔ   r�   r_   )r;   rd   s    €r   Údim_not_presentz&_Tensor.index.<locals>.dim_not_presentæ  sy   ø€ Ø�ŠÑ Ô ð LÝØc §¢¡¤°´	Ñ!9ÐcÐcÈTÌYÐcÐcÐcñô ð õ  Ð J­T°!·%²%±'´'©]¬]Ð JÐ JÐ JÑKÔKÐKr   zdims (z) and indices (z) must have the same length)r,  r   TNz2Cannot perform dimension flattening on None tensorr)   )F)rù   r   r,  r   r   r-  )r±   r   r   r   )r;   r   r   ri   )Ú
_dim_entryr   Ú_getsetitemr(  r)  Ú_wrapr+  r`   rP   rh   rB   r2  r  rO   r   rç   rN   r   rê   Úpoprb   Úinsertr   r  r%   Úreshape)&rd   rV   r†   r   r(  r)  r/  r3  r7  Ú	dims_listÚindices_listÚlhs_listÚrhs_listÚdims_seqÚindices_seqÚ	self_infor  Ú
to_flattenÚdims_list_flatr7   ÚmÚ
is_dimpackÚfirstÚrestÚjr;   ÚremovedÚkÚ	first_idxÚrÚ
rearrangedr,   r  Úreshape_levelsÚhas_dimpacksÚidxr  r+  s&   `                                    @r   r  z_Tensor.indexÉ  sª  øø€ ð 	.Ð-Ð-Ð-Ð-Ð-Ø@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø$Ð$Ð$Ð$Ð$Ð$ð	ð 	ð 	ð 	ð 	ð
	ð 	ð 	ð 	ð 	ð 	ð 	ð	Lð 	Lð 	Lð 	Lð 	Lð 	Lð &(ˆ	Ø9;ˆå˜d¥U­D MÑ2Ô2ˆÝ˜g­­t }Ñ5Ô5ˆàð 	)˜ð 	)àˆHØ!ˆKÝ�8‰}Œ}¥ KÑ 0Ô 0Ò0Ð0ÝØh�S ™]œ]ÐhÐh½3¸{Ñ;KÔ;KÐhÐhÐhñô ð ð ×Ò˜XÑ&Ô&Ð&Ø×Ò Ñ,Ô,Ð,Ð,à×Ò˜TÑ"Ô"Ð"Ø×Ò Ñ(Ô(Ð(õ Ô% d¨E°5Ñ9Ô9ˆ	à "ˆ
Ø "ˆ
Øˆõ •s˜9‘~”~Ñ&Ô&ð ,	Eñ ,	EˆAØ)˜M¨)°A¬,ÀEÐJÑJÔJ‰MˆAˆzØñ *EÝ�q‘6”6˜Q’;�;Ø"×)Ò)­(©*¬*Ñ5Ô5Ð5Øà'˜¨¨!¬Ñ-Ô-�Ø×%Ò% eÑ,Ô,Ð,å�q‘6”6˜Q’;�;Øõ �z‘?”? aÒ'Ð'Ø×%Ò% iÔ&6Ñ7Ô7Ð7à�Ý˜q¥# a¡&¤&Ñ)Ô)ð 
#ð 
#�AØ'˜¨¨!¬Ñ-Ô-�AØ#�GÝ"¥3 z¡?¤?Ñ3Ô3ð "ð "˜Ø% aœ=¨AÒ-Ð-Ø&ŸNšN¨1Ñ-Ô-Ð-Ø&*˜GØ!˜Eð .ð #ð +Ø'˜¨Ñ*Ô*Ð*Ø—K’K ‘N”N�N�Nð !�	Ý�s :™œÑ/Ô/ð ð �AØ! !”}¨Ò-Ð-Ø$%˜	Ø˜ð .ð Ð$Ø#�O EÑ*Ô*Ð*Ùå% d™OœOð <ð <‘D�A�qØ×%Ò% i°!¡m°aÑ&7¸Ñ;Ô;Ð;Ð;Ø×!Ò! $Ñ'Ô'Ð'Ñ'à×%Ò% o o°iÀ´lÑ&CÔ&CÑDÔDÐDÑDõ ˆz‰?Œ?˜QÒÑØÔÐ'Ý$ØHñô ð ð '˜ yÔ'7¸Ô9IÈ:ÑVÔVˆJØ—O’OÑ%Ô%ˆEØ#%ˆIØˆNå�3˜z™?œ?Ñ+Ô+ð 9ð 9�Ø˜a”= JÐ.Ð.Ý˜9‘~”~¨Ò*Ð*Ø!×(Ò(¨¨q¬Ñ2Ô2Ð2Ð2à! "˜˜œ¨¨q¬Ñ1˜˜™˜à×$Ò$ U¨1¤XÑ.Ô.Ð.Ø"×)Ò)¨*°Q¬-Ñ8Ô8Ð8Ð8à)×1Ò1°)Ñ<Ô<ˆIÔØ-ˆIÔð ˆØð 	ð 	ˆCÝ˜#¥¥t˜}Ñ-Ô-ð Ø#�Ø�ðð
 ˆØØØØØñ
ô 
ˆð ˆ~˜dÑ#Ô#Ð#r   r$   c                óh  — |                       ¦   «         |                      ¦   «         | j        }}}g }|D ]É}t          |d¦  «        r?|                     ¦   «         r+|                     |                     ¦   «         |z   ¦  «         ŒQt          |d¦  «        r(|                     |                     ¦   «         ¦  «         Œ‰t          |d¦  «        r|                     |j        ¦  «         Œ´|                     |¦  «         ŒÊ|› dt          |¦  «        › dt          | 
                    ¦   «         ¦  «        › �S )NrØ   r_   r  z
with dims=z sizes=)rÒ   rÎ   rÔ   rq   rØ   rO   r6  r_   r  rP   r%   )rd   r   rê   rÔ   Ú	dims_reprrÚ   s         r   r•   z_Tensor.__repr__b  s+  € Ø#×/Ò/Ñ1Ô1°4×3CÒ3CÑ3EÔ3EÀtÄy˜�ˆØˆ	Øð 		$ð 		$ˆAÝ�q˜/Ñ*Ô*ð $¨q¯ªÑ/@Ô/@ð $à× Ò  §¢¡¤°Ñ!4Ñ5Ô5Ð5Ð5Ý˜˜EÑ"Ô"ð $Ø× Ò  §¢¡¤Ñ)Ô)Ð)Ð)Ý˜˜FÑ#Ô#ð $Ø× Ò  ¤Ñ(Ô(Ð(Ð(à× Ò  Ñ#Ô#Ð#Ð#ØÐUÐU¥e¨IÑ&6Ô&6ÐUÐU½uÀVÇ[Â[Á]Ä]Ñ?SÔ?SÐUÐUÐUr   ©r   rÊ   ©r   rÐ   r¢   )r   rÕ   r¥   r¦   )
r˜   r   r™   rP   rš   rP   r›   r÷   r   r   )r  r   r  r   r   ri   )rš   r'   r   rž   )rV   r%  r†   r&  r   rž   r¤   )r§   r¨   r©   rÎ   rÒ   r¬   rÔ   rV   r_   r­   rŸ   Ústaticmethodró   rí   r  r  r•   r!   r   r   rž   rž   ª  s]  € € € € € ðQð Qð Qð QðQð Qð Qð Qð ðJð Jð Jñ „XðJð ðSð Sð Sñ „XðSðð ð ð ð ð
 Ø"ðZKð ZKð ZKð ZKñ „[ðZKðx ðO7ð O7ð O7ñ „\ðO7ðb+ð +ð +ð +ðSð Sð Sð SðjW$ð W$ð W$ð W$ðrVð Vð Vð Vð Vð Vr   rž   c                  óô   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ddd„Zedd„¦   «         Zed d„¦   «         Zedd„¦   «         Z	e	j
        d!d„¦   «         Z	ed"d„¦   «         Zd#d„Zd#d„Zd$d„Zej        ZdS )%r'   r8   Ú_levelr$   rY   rw   rÐ   Ú_rangeÚ_batchtensorr)   r#   r±   r   ri   c                ój   — || _         || _        t          | _        t          dz  ad | _        d | _        d S ©Nr   )rY   rw   Ú_n_dims_createdrZ  r[  r\  )rd   r#   r±   s      r   rg   zDim.__init__|  s6   € àˆŒ
ØˆŒ
Ý%ˆŒÝ˜1ÑˆØˆŒØ ˆÔÐÐr   c                ó   — dS r^  r!   rv   s    r   rÔ   zDim.ndim…  s   € àˆqr   rù   r   r   c                ó$   — t          |¦  «        | u S rŽ   ©rÃ   )r    rù   s     r   Úcheck_exactzDim.check_exact‰  s   € å�C‰yŒy˜CÐÐr   c                óV   — | j         dk    rt          d| j        › d�¦  «        ‚| j         S )Nr)   r5  z is unbound)rw   rM   rY   rv   s    r   r%   zDim.size�  s3   € àŒ:˜ÒÐÝÐA¨$¬*ÐAÐAÐAÑBÔBÐBØŒzÐr   Úvc                ó˜   — | j         dk    r	|| _         d S | j         |k    r*t          dt          | ¦  «        › d| j         › d|› �¦  «        ‚d S )Nr)   zDim 'z*' previously bound to a dimension of size z$ cannot bind to a dimension of size )rw   rl   r�   )rd   re  s     r   r%   zDim.size“  sp   € àŒ:˜ÒÐØˆDŒJˆJˆJØŒZ˜1Š_ˆ_Ý$ð:�˜T™
œ
ð :ð :ÈdÌjð :ð :Ø67ð:ð :ñô ð ð ˆ_r   c                ó   — | j         dk    S )z1Return True if this dimension is bound to a size.r)   ry   rv   s    r   r   zDim.is_bound�  s   € ð Œz˜RÒÐr   r   c                óZ   — | j         €t          j        | j        ¦  «        | _         | j         S )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%   rv   s    r   Ú
_get_rangezDim._get_range¢  s'   € ð Œ;ÐÝœ, t¤yÑ1Ô1ˆDŒKØŒ{Ðr   c                ó¢   — | j         €Bt          j        j                             |                      ¦   «         d| j        ¦  «        | _         | j         S )z•
        Get a batched tensor representation of this dimension.

        Returns:
            A batched tensor created from the range tensor
        Nr   )r\  r¿   Ú_CÚ
_functorchÚ_add_batch_dimrj  rZ  rv   s    r   Ú_get_batchtensorzDim._get_batchtensor­  sH   € ð ÔÐ$Ý %¤Ô 3× BÒ BØ—’Ñ!Ô! 1 d¤kñ!ô !ˆDÔð Ô Ð r   c                ó   — | j         S )z&String representation of a Dim object.)rY   rv   s    r   r•   zDim.__repr__º  s
   € àŒzÐr   N)r)   )r#   r$   r±   r8   r   ri   r¢   )rù   r   r   r   )re  r8   r   ri   r£   ©r   r   r¤   )r§   r¨   r©   r«   rg   r¬   rÔ   r­   rc  r%   Úsetterr   rj  ro  r•   ÚobjectÚ
__format__r!   r   r   r'   r'   u  sD  € € € € € € Ø€K€K�KØ€J€J�JØ€J€J�JØÐÐÑØ%Ð%Ð%Ñ%ð!ð !ð !ð !ð !ð ðð ð ñ „Xðð ð ð  ð  ñ „[ð ð ðð ð ñ „Xðð
 
„[ðð ð ñ „[ðð ð ð  ð  ñ „Xð ð	ð 	ð 	ð 	ð!ð !ð !ð !ðð ð ð ð Ô"€J€J€Jr   c                  óæ   — e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ed+d„¦   «         Zed,d„¦   «         Zed-d„¦   «         Zed.d„¦   «         Z	d/d „Z
d0d"„Zd1d#„Zd/d$„Zd2d'„Zd3d)„Zd*S )4rå   rÐ   Ú_tensorr\  úlist[DimEntry]Ú_levelsr   Ú_has_devicez!Callable[[], torch.Tensor] | NoneÚ_delayedzCallable | NoneÚ_delayed_origztuple | NoneÚ_delayed_argsr   r8   c                ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3  óF   K  — | ]}|                      ¦   «         rd ndV — ŒdS )r   r   N)rØ   rÙ   s     r   r‘   zTensor.ndim.<locals>.<genexpr>Ñ  s5   è è € ÐGÐG°Q˜ŸšÑ)Ô)Ð0�1�1¨qÐGÐGÐGÐGÐGÐGr   )Úsumrx  rv   s    r   rÔ   zTensor.ndimÏ  s!   € åÐGÐG¸$¼,ÐGÑGÔGÑGÔGÐGr   Úotherr   c                ó$   — t          |¦  «        | u S rŽ   rb  )r    r€  s     r   rc  zTensor.check_exactÓ  s   € å�E‰{Œ{˜cÐ!Ð!r   r   r   rê   ré   ú_Tensor | torch.Tensorc                ór  — d}d}|D ]x}|                      ¦   «         r]|dk    sB|dz   |                     ¦   «         k    s't          d|› d|                     ¦   «         › �¦  «        ‚|                     ¦   «         }Œs|dz  }Œy|dk    s|dk    st          d|› �¦  «        ‚|s|S  | ¦   «         }||_        ||_        ||_        d|_        d|_        d|_        d|_	        | 
                    ¦   «         t          |¦  «        k    r5t          d| 
                    ¦   «         › d	t          |¦  «        › d
�¦  «        ‚|S )a0  
        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
        r   r   z/Positional dimensions must be consecutive, got z then r)   z0Final positional dimension must be 0 or -1, got NzTensor has z dimensions but z levels provided)rØ   r6  r  rv  rx  ry  r\  rz  r{  r|  r_   rB   )r    r   rê   ré   Ú	seen_dimsÚlastrÚ   rU   s           r   rû   zTensor.from_positional×  sw  € ð$ ˆ	Øˆàð 
	ð 
	ˆAØ�ŠÑ Ô ð 	à š	˜	 T¨A¡X°·²±´Ò%=Ð%=Ý(ØdÈ$ÐdÐdÐVW×V`ÒV`ÑVbÔVbÐdÐdñô ð ð —z’z‘|”|��ð ˜Q‘�	�	ð ˜’	�	˜T RšZ˜ZÝ ØIÀ4ÐIÐIñô ð ð ð 	ØˆMð �‘”ˆØˆŒØˆŒØ'ˆÔØ"ˆÔØˆŒØ#ˆÔØ#ˆÔð �:Š:‰<Œ<�3˜v™;œ;Ò&Ð&Ý ØY˜fŸjšj™lœlÐYÐY½CÀ¹K¼KÐYÐYÐYñô ð ð ˆr   Úorigr   rš   rP   rž   c                óŽ   ‡‡—  | ¦   «         }d|_         ||_        ||_        d|_        ‰|_        ‰|_        dˆˆfd„}||_        |S )zP
        Create a delayed tensor that defers the operation until later.
        Nr   r   c                 ó¶   •— g } ‰D ]O}t          |d¦  «        r(|                      |                     ¦   «         ¦  «         Œ:|                      |¦  «         ŒP ‰| Ž S )NrÒ   )rq   rO   rÒ   )Úunwrapped_argsrÇ   rš   r†  s     €€r   Úevaluate_delayedz/Tensor.create_delayed.<locals>.evaluate_delayed#  sn   ø€ ØˆNØð /ð /�Ý˜3 Ñ.Ô.ð /Ø"×)Ò)¨#¯/ª/Ñ*;Ô*;Ñ<Ô<Ð<Ð<à"×)Ò)¨#Ñ.Ô.Ð.Ð.Ø�4˜Ð(Ð(r   rq  )rv  rx  ry  r\  r{  r|  rz  )r    r†  rš   rê   ré   rU   rŠ  s    ``    r   rë   zTensor.create_delayed  sp   øø€ ð �‘”ˆØˆŒØˆŒØ'ˆÔØ"ˆÔØ#ˆÔØ#ˆÔð	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð +ˆŒàˆr   c                ó¨   — t          | d¦  «        r<| j        �5| j        €.|                      ¦   «         | _        d| _        d| _        d| _        | j        S )zAGet the underlying tensor, handling delayed operations if needed.rz  N)rq   rz  rv  r{  r|  rv   s    r   rÒ   zTensor._get_tensor0  sV   € õ �D˜*Ñ%Ô%ð
	&à”Ð)Ø”Ð$ð  Ÿ=š=™?œ?ˆDŒLà ˆDŒMØ!%ˆDÔØ!%ˆDÔØŒ|Ðr   rÊ   c                ó   — | j         S )zGet the dimension levels.)rx  rv   s    r   rÎ   zTensor._get_levels?  s
   € àŒ|Ðr   c                ó   — | j         S )z/Get whether this tensor has device information.)ry  rv   s    r   Ú_get_has_devicezTensor._get_has_deviceC  s   € àÔÐr   c                óœ   — | j         €?|                      |                      ¦   «         |                      ¦   «         ¦  «        | _         | j         S )zDGet the batched tensor representation, creating it lazily if needed.)r\  Ú_add_batch_dimsrÒ   rÎ   rv   s    r   ro  zTensor._get_batchtensorG  sK   € àÔÐ$Ø $× 4Ò 4Ø× Ò Ñ"Ô" D×$4Ò$4Ñ$6Ô$6ñ!ô !ˆDÔð Ô Ð r   ÚtÚlevels_c                ó  — t          |¦  «        }	 d}d}t          d¦  «        }d}d}t          |¦  «        D ]l\  }}	|	                     ¦   «         sS|	                     ¦   «         s:|	                     ¦   «         j        |k     r|	                     ¦   «         j        }|}|}|dz  }Œm|dk    r|S |€t          d¦  «        ‚t          j	        j
                             ||t          |¦  «        ¦  «        }t          ¦   «         ||<   Œñ)NTr)   Úinfr   r   zExpected t to be non-None)rh   Úfloatrb   r1  rØ   r_   rZ  r  r¿   rl  rm  rn  r8   r   )
rd   r‘  r’  rê   Úmin_real_indexÚ	min_indexÚ	min_valuer7   rO  rÚ   s
             r   r�  zTensor._add_batch_dimsO  sþ   € õ �g‘”ˆð	0ØˆNØˆIÝ˜e™œˆIØˆAØˆAå! &Ñ)Ô)ð ð ‘��1Ø—y’y‘{”{ð ØŸ?š?Ñ,Ô,ð +°·²±´´À)Ò1KÐ1KØ$%§E¢E¡G¤G¤N˜	Ø$%˜	Ø)*˜Ø˜‘F�Aøà˜BŠˆØ�àˆyÝ$Ð%@ÑAÔAÐAÝ”Ô#×2Ò2°1°iÅÀYÁÄÑPÔPˆAå%-¡Z¤ZˆF�>Ñ"ð-	0r   rV   c                ó$   — ddl m}  || g|¢R Ž }|S )z&Reorder the dimensions of this tensor.r   )Úorder)Ú_orderrš  )rd   rV   rš  rU   s       r   rš  zTensor.orderm  s0   € à!Ð!Ð!Ð!Ð!Ð!à��tÐ#˜dÐ#Ð#Ð#ˆØˆr   Nr¢   )r€  r   r   r   )r   r   rê   rw  ré   r   r   r‚  )
r†  r   rš   rP   rê   rw  ré   r   r   rž   rW  rV  r£   )r‘  rÐ   r’  rÊ   r   rÐ   )rV   r   r   rž   )r§   r¨   r©   r«   r¬   rÔ   r­   rc  rû   rë   rÒ   rÎ   rŽ  ro  r�  rš  r!   r   r   rå   rå   Æ  se  € € € € € € Ø Ð Ð Ñ Ø%Ð%Ð%Ñ%ØÐÐÑØÐÐÑØ/Ð/Ð/Ñ/Ø"Ð"Ð"Ñ"ØÐÐÑàðHð Hð Hñ „XðHð ð"ð "ð "ñ „[ð"ð ð9ð 9ð 9ñ „[ð9ðv ðð ð ñ „[ðð8ð ð ð ðð ð ð ð ð  ð  ð  ð!ð !ð !ð !ðð ð ð ð<ð ð ð ð ð r   rå   ÚtensorsÚnew_dimr_   r8   c                ó²  — | st          d¦  «        ‚t          |t          ¦  «        st          j        | |¬¦  «        }|S g }g }| D ]Q}t          j        |dd¬¦  «        }|                     |¦  «         |j        D ]}||vr|                     |¦  «         ŒŒRt          | ¦  «        |_
        g }	|D ]H}|j        €t          d¦  «        ‚t          |j        |j        |¦  «        }
|	                     |
¦  «         ŒIt          |¦  «        }d}|�it          |t          ¦  «        r|dk    sNdd	lm}  |||d¦  «        }	 |                     |¦  «        }n"# t           $ r t'          d
|› d�¦  «        d‚w xY w|}t          j        |	|¦  «        }|                     |t+          |¦  «        ¦  «         t,                               |||r|d         j        nd¦  «        }|S )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)r_   FrÞ   Nz*Cannot stack tensors with None tensor datar   r   r*  z
Dimension z does not exist in inputsT)rM   r`   r'   r¿   rï   r   rç   rO   rê   rB   r%   r   r  r   r   r8   r:  r+  r  r2  r<  r   rå   rû   ré   )rœ  r�  r_   rU   rý   r  r‘  r  rö   ÚinputsÚmatched_tensorrÔ   Úrawdimr+  r;   rS  Útensor_results                    r   rï   rï   u  sB  € ð ð JÝÐHÑIÔIÐIõ �g�sÑ#Ô#ð å”˜W¨#Ð.Ñ.Ô.ˆØˆð €MØ€Eàð ,ð ,ˆÝÔ  °5ÈÐOÑOÔOˆØ�Š�TÑÔÐØ”[ð 	,ð 	,ˆEØ˜MÐ)Ð)Ø×$Ò$ UÑ+Ô+Ð+øð	,õ
 �w‘<”<€G„Lð €FØð &ð &ˆØŒ;ÐÝ Ð!MÑNÔNÐNÝ& t¤{°D´KÀÑOÔOˆØ�Š�nÑ%Ô%Ð%Ð%õ ˜-Ñ(Ô(€DØ€FØ
€¥
¨3µÑ 4Ô 4€¸Àº¸Ø$Ð$Ð$Ð$Ð$Ð$àˆI�c˜4 Ñ'Ô'ˆð	SØ×%Ò% aÑ(Ô(ˆCˆCøÝð 	Sð 	Sð 	SÝÐG¨ÐGÐGÐGÑHÔHÈdÐRð	Søøøàˆõ Œ[˜ Ñ(Ô(€Fð ×Ò˜¥¨'Ñ!2Ô!2Ñ3Ô3Ð3õ ×*Ò*Ø�°eÐE˜u QœxÔ2Ð2Àñô €Mð Ðs   Ä:E ÅE/Úsplit_size_or_sectionsrP   c           	     óN  — ddl m} t          |t          ¦  «        }t          |t          ¦  «        rO|rt          d¦  «        ‚t                               t          j	        j
        t          | ¦  «        f| |fd|i¦  «        S g }d}d}|D ]1}|                     |¦  «         t          |t          ¦  «        rd}Œ/d}Œ2|rO|rt          d¦  «        ‚t                               t          j	        j
        t          | ¦  «        f| |fd|i¦  «        S |st          d¦  «        ‚t          j        | dd¬¦  «        }	|	                     ¦   «         }
|s|
d	k    rt          d
¦  «        ‚|� |||
d¦  «        nt!          |
 ¦  «        }d}t#          |	j        ¦  «        D ]\  }}||k    r|} nŒ|€|€d	}t          d|› �¦  «        ‚g }d	}g }t#          |¦  «        D ]\\  }}|j        r&|                     |j        ¦  «         ||d         z  }Œ2|                     d	¦  «         |                     |¦  «         Œ]|	j        €t-          d¦  «        ‚|	j                             |¦  «        }|rs||k    rt          d|› d|› d�¦  «        ‚||z
  }|t/          |¦  «        z   dz
  t/          |¦  «        z  }|D ])}t1          ||¦  «        }|||         _        |||<   ||z  }Œ*n||k    rt          d|› d|› d�¦  «        ‚|	j                             ||¦  «        }g }t5          |	j        ¦  «        }t#          t7          ||¦  «        ¦  «        D ][\  }\  }}t!          |¦  «        ||<   |                     t                               |t5          |¦  «        |	j        ¦  «        ¦  «         Œ\t=          |¦  «        S )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.
    r   r*  zKwhen dim is specified as a Dim object, split sizes must also be dimensions.r_   TFz-split list must be ints or dims but got a mixrÞ   r   z+split expects at least a 1-dimension tensorNz"tensor does not contain dimension r)   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+  r`   r'   r8   r2  rž   ró   r¿   rå   rð   rÃ   rO   r   rç   rÔ   r   rb   rê   r   r%   r   r  rB   Úminrò   rh   Úziprû   ré   rP   )r   r£  r_   r+  Údim_is_objectr,   Úall_dimsÚall_intsre   rD  rÔ   Údim_lrS  r7   rö   r†   Ú
total_sizeÚunboundÚsize_dimÚtensor_sizeÚremaining_sizeÚ
chunk_sizeÚuÚszÚresult_tensorsrU   r  Úresult_tensors                               r   rð   rð   º  s…  € ð !Ð Ð Ð Ð Ð õ ˜s¥CÑ(Ô(€Mõ Ð(­#Ñ.Ô.ð 
àð 	ÝØ]ñô ð õ ×/Ò/ÝŒLÔÝ�&‰\Œ\ˆOØÐ+Ð,Ø�CˆLñ	
ô 
ð 	
ð €EØ€HØ€Hà&ð ð ˆØ�Š�TÑÔÐÝ�d�CÑ Ô ð 	ØˆHˆHàˆHˆHàð 
àð 	ÝØ]ñô ð õ ×/Ò/ÝŒLÔÝ�&‰\Œ\ˆOØÐ+Ð,Ø�CˆLñ	
ô 
ð 	
ð ð IÝÐGÑHÔHÐHõ Ô! &¸ÈuÐUÑUÔU€IØ�>Š>ÑÔ€Dàð G˜T QšY˜YÝÐEÑFÔFÐFð ,/¨?ˆIˆI�c˜4 Ñ'Ô'Ð'ÅÈ$ÈÁÄ€Eð €CÝ˜iÔ.Ñ/Ô/ð ð ‰ˆˆ5Ø�EŠ>ˆ>ØˆCØˆEð ð €{Øˆ;ØˆCÝÐB¸SÐBÐBÑCÔCÐCð €GØ€JØ€Gå  Ñ'Ô'ð ð ‰ˆˆ8ØÔð 	Ø�NŠN˜8œ=Ñ)Ô)Ð)Ø˜' "œ+Ñ%ˆJˆJà�NŠN˜1ÑÔÐØ�NŠN˜1ÑÔÐÐàÔÐÝÐDÑEÔEÐEØÔ"×'Ò'¨Ñ,Ô,€Kð ð 
Ø˜Ò#Ð#ÝØk¸jÐkÐkÐ]hÐkÐkÐkñô ð ð % zÑ1ˆØ$¥s¨7¡|¤|Ñ3°aÑ7½CÀ¹L¼LÑHˆ
Øð 	!ð 	!ˆAÝ�Z Ñ0Ô0ˆBØˆE�!ŒHŒMØˆG�A‰JØ˜bÑ ˆNˆNð		!ð
 
˜
Ò	"Ð	"ÝØk°*ÐkÐkÐ]hÐkÐkÐkñ
ô 
ð 	
ð
 Ô%×6Ò6°wÀÑDÔD€Nð €FÝ�iÔ&Ñ'Ô'€Jå(1µ#°nÀeÑ2LÔ2LÑ(MÔ(Mð 
ð 
Ñ$ˆÑ$ˆM˜8Ý" 8Ñ,Ô,ˆ
�3‰Ø�ŠÝ×"Ò"Ø�t JÑ/Ô/°Ô1Eñô ñ	
ô 	
ð 	
ð 	
õ �‰=Œ=Ðr   c                ón   — t          d¦  «        }t          | ||¦  «                             ||g|¦  «        S r^  )rV   rï   r  )rœ  r_   r�  r+   s       r   Úcatr¶  ;  s3   € ÝˆQ‰Œ€AÝ�˜!˜SÑ!Ô!×'Ò'¨¨C¨°'Ñ:Ô:Ð:r   c                  ó"   — e Zd ZdZd	d„Zd
d„ZdS )ÚDotPartzA
    Helper class for organizing dimensions in dot products.
    r   ri   c                ó"   — g | _         d| _        d S r^  )rV   r«  rv   s    r   rg   zDotPart.__init__E  s   € Ø$&ˆŒ	ØˆŒˆˆr   Ú	dim_entryr   c                ó´   — | j                              |¦  «         |                     ¦   «         s)| xj        |                     ¦   «         j        z  c_        dS dS )z#Add a dimension entry to this part.N)rV   rO   rØ   r«  r_   r%   )rd   rº  s     r   rO   zDotPart.appendI  sU   € àŒ	×Ò˜Ñ#Ô#Ð#Ø×&Ò&Ñ(Ô(ð 	4ØˆOŒO˜yŸ}š}™œÔ3Ñ3ˆOŒOˆOˆOð	4ð 	4r   N)r   ri   )rº  r   r   ri   )r§   r¨   r©   rª   rg   rO   r!   r   r   r¸  r¸  @  sF   € € € € € ðð ðð ð ð ð4ð 4ð 4ð 4ð 4ð 4r   r¸  Úpartsúlist[DotPart]Útensor_infor   c                ó(  — g }d}| D ]6}t          |j        ¦  «        dk    rd}|                     |j        ¦  «         Œ7|j        €t	          d¦  «        ‚t          |j        |j        |¦  «        }|s|S d„ | D ¦   «         }|                     |¦  «        S )zJ
    Prepare tensor for dot product by matching levels and reshaping.
    Fr   TNz)Cannot perform dot product on None tensorc                ó   — g | ]	}|j         ‘Œ
S r!   )r«  )r�   Úparts     r   ú
<listcomp>zdot_prepare.<locals>.<listcomp>d  s   € Ð.Ð.Ð. ˆDŒOÐ.Ð.Ð.r   )rB   rV   r  r   rE   r   rê   r=  )r¼  r¾  r  Úneeds_reshaperÁ  rU   Úviews          r   Údot_preparerÅ  P  s±   € ð €JØ€Màð %ð %ˆÝˆtŒy‰>Œ>˜QÒÐØ ˆMØ×Ò˜$œ)Ñ$Ô$Ð$Ð$àÔÐ!ÝÐFÑGÔGÐGÝ˜;Ô-¨{Ô/AÀ:ÑNÔN€Fàð Øˆð /Ð.¨Ð.Ñ.Ô.€DØ�>Š>˜$ÑÔÐr   r´  c                óL  — g }d}| D ]6}t          |j        ¦  «        dk    rd}|                     |j        ¦  «         Œ7|rHg }|D ].}|                     |                     ¦   «         j        ¦  «         Œ/|                     |¦  «        }t                               ||d¦  «        }|S )zE
    Finish dot product by reshaping result and creating Tensor.
    Fr   T)	rB   rV   r  rO   r_   r%   r=  rå   rû   )r¼  r´  rý   rÃ  rÁ  Únew_sizerö   r¢  s           r   Ú
dot_finishrÈ  h  sº   € ð €MØ€Màð (ð (ˆÝˆtŒy‰>Œ>˜QÒÐØ ˆMØ×Ò˜TœYÑ'Ô'Ð'Ð'àð 8ØˆØ"ð 	.ð 	.ˆEØ�OŠO˜EŸIšI™KœKÔ,Ñ-Ô-Ð-Ð-Ø%×-Ò-¨hÑ7Ô7ˆå×*Ò*¨=¸-ÈÑNÔN€MØÐr   ÚlhsÚrhsÚsum_dimsr‚  c                óô  ‡‡‡‡‡‡‡— t          j        | dd¬¦  «        }t          j        |dd¬¦  «        }|r|st          j        | |¦  «        S |j        �|j        €t          d¦  «        ‚|j                             ¦   «         Š|j                             ¦   «         Št          ¦   «         Št          ¦   «         Št          ¦   «         Št          ¦   «         Šdˆˆˆˆˆˆˆfd„}dgt          |j	        ¦  «        z  }t          |j	        ¦  «        D ]=\  }}d}	t          |j	        ¦  «        D ]\  }
}||k    r	|
}	d||
<    nŒ ||||	¦  «         Œ>t          |j	        ¦  «        D ]\  }}||         s ||d|¦  «         Œt          ‰j        ¦  «        t          ‰¦  «        k    r)‰D ]&}||j	        vr||j	        vrt          d|› �¦  «        ‚Œ't          ‰j        ¦  «        dk    rNt          ‰‰‰g|¦  «        }t          ‰‰‰g|¦  «        }t          j        ||¦  «        }t          ‰‰‰g|¦  «        S t          ‰‰g|¦  «        }t          ‰‰g|¦  «        }t          j        ||¦  «        }t          ‰‰g|¦  «        S )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 tensorsr;   r   Úlhs_idxÚrhs_idxr   ri   c                ó   •— | ‰v }|�‰|         nd}|�‰
|         nd}|r‰                      | ¦  «         dS |dk    |dk    k    r‰	                      | ¦  «         dS |dk    r‰                      | ¦  «         dS ‰                      | ¦  «         dS )z?Insert dimension into appropriate part based on stride pattern.Nr   )rO   )r;   rÍ  rÎ  ÚreducedÚ
lhs_strideÚ
rhs_strideÚlhs_stridesÚlo_dimsÚlr_dimsÚlro_dimsÚrhs_stridesÚro_dimsrË  s         €€€€€€€r   Ú
insert_dimzdot.<locals>.insert_dimž  s¸   ø€ à�x�-ˆØ-4Ð-@�[ Ô)Ð)Àaˆ
Ø-4Ð-@�[ Ô)Ð)Àaˆ
àð 	"Ø�NŠN˜1ÑÔÐÐÐà˜a’ Z°1¢_Ò5Ð5Ø—’ Ñ"Ô"Ð"Ð"Ð"Ø˜q’�Ø—’˜qÑ!Ô!Ð!Ð!Ð!à—’˜qÑ!Ô!Ð!Ð!Ð!r   Tz$summing over non-existent dimension r   )r;   r   rÍ  r   rÎ  r   r   ri   )r   rç   r¿   Úmatmulr   r  r  r¸  rB   rê   rb   rV   rM   rÅ  ÚbmmrÈ  Úmm)rÉ  rÊ  rË  rô   rõ   rÙ  Úrhs_seenr7   Ú	lhs_levelrÎ  rK  Ú	rhs_levelr;   Ú
lhs_tensorÚ
rhs_tensorrU   rÓ  rÔ  rÕ  rÖ  r×  rØ  s     `             @@@@@@r   Údotrâ  ~  sï  øøøøøøø€ õ Ô  °UÈ5ÐQÑQÔQ€HÝÔ  °UÈ5ÐQÑQÔQ€Hàð &˜ð &åŒ|˜C Ñ%Ô%Ð%à„Ð (¤/Ð"9ÝÐIÑJÔJÐJà”/×(Ò(Ñ*Ô*€KØ”/×(Ò(Ñ*Ô*€Kõ ‰yŒy€HÝ‰iŒi€GÝ‰iŒi€GÝ‰iŒi€Gð"ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "ð" ˆw�˜Xœ_Ñ-Ô-Ñ-€Hõ " (¤/Ñ2Ô2ð *ð *‰ˆˆ9ØˆÝ% h¤oÑ6Ô6ð 	ð 	‰LˆAˆyØ˜IÒ%Ð%Ø�Ø"�˜‘Ø�ð &ð
 	ˆ
�9˜a Ñ)Ô)Ð)Ð)õ " (¤/Ñ2Ô2ð +ð +‰ˆˆ9Ø˜Œ{ð 	+ØˆJ�y $¨Ñ*Ô*Ð*øõ ˆ7Œ<ÑÔ�C ™MœMÒ)Ð)Øð 	Mð 	MˆAØ˜œÐ'Ð'¨A°X´_Ð,DÐ,DÝ Ð!KÈÐ!KÐ!KÑLÔLÐLøõ ˆ8Œ=ÑÔ˜QÒÐå  (¨G°WÐ!=¸xÑHÔHˆ
Ý  (¨G°WÐ!=¸xÑHÔHˆ
Ý”˜: zÑ2Ô2ˆÝ˜8 W¨gÐ6¸Ñ?Ô?Ð?õ ! '¨7Ð!3°XÑ>Ô>ˆ
Ý  '¨7Ð!3°XÑ>Ô>ˆ
Ý”˜* jÑ1Ô1ˆÝ˜7 GÐ,¨fÑ5Ô5Ð5r   )r:  )Ú	wrap_typerd   Ú	positionsrV   c                óL  — t          | t          ¦  «        rt                               | ||¦  «        S t          j        | dd¬¦  «        }|j        €t          d¦  «        ‚t                               |j        |j	        |j
        ¦  «        }t                               |||¦  «        S )a�  
    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Þ   NzCannot index None tensor)r`   rž   r  r   rç   r   r  rå   rû   rê   ré   )rd   rä  rV   r  rU   s        r   r  r  Þ  s“   € õ �$�Ñ Ô ð 4Ý�}Š}˜T 9¨dÑ3Ô3Ð3õ Ô˜T°%ÈÐNÑNÔN€Dð „{ÐÝÐ7Ñ8Ô8Ð8Ý×#Ò# D¤K°´¸d¼oÑNÔN€Fõ �=Š=˜ ¨DÑ1Ô1Ð1r   c           	     ó‚   — t          t          j        | ¦  «        }t          t          | t          |g|¢R i |¤Ž¦  «         d S rŽ   )Úgetattrr¿   rå   Úsetattrrž   r:  )r#   rš   r›   r†  s       r   Ú_defré  ý  sC   € Ý•5”< Ñ&Ô&€DÝ�G�T�5 Ð7¨Ð7Ð7Ð7°Ð7Ð7Ñ8Ô8Ð8Ð8Ð8r   Úmeanr  ÚallÚamaxÚaminÚaminmaxÚanyÚcount_nonzeroÚ	logsumexpÚnanmeanÚnansumÚprodÚstdrÝ   )Ú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   r   )r   r   r   r   rŽ   )r#   r$   r%   r&   r   r'   r¡   )r+   r&   r,   r-   r   r.   )r#   r$   r%   r®   r   rX   )r+   r&   r,   r-   r   r³   )rš   r   r›   r   r   ri   )r   )rœ  r   r�  r   r_   r8   r   rž   )r   r   r£  r   r_   r   r   rP   )rœ  r   r_   r   r�  r   r   rž   )r¼  r½  r¾  r   r   r   )r¼  r½  r´  r   r   rå   )rÉ  r   rÊ  r   rË  r   r   r‚  )rd   r   rä  r   rV   r   r   rž   )r#   r$   rš   r   r›   r   r   ri   )BÚ
__future__r   ÚdisrC   rI   Útypingr   r   r   r   Úcollections.abcr   r	   r¿   Útorch.utils._pytreer
   r   r   r8  r   r   r   Ú_enable_all_layersr   Ú_py_inst_decoderr   Ú_tensor_infor   r  rä   r_  r   r"   r*   rV   rX   r²   r¶   Ú	Exceptionr¸   rl   Ú r¼   rÈ   rž   rå   Ú
TensorLiker'   rï   rð   r¶  r¸  rÅ  rÈ  râ  Úfunctorch.dim._wrapr:  Úfunctorch.dim.wrap_typerã  rŸ   rÔ   r  ré  ÚnnÚ
functionalrî   r!   r   r   ú<module>r     sõ  ðØ "Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø €€€Ø 
€
€
€
Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ð ð 3Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2à €€€Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø /Ð /Ð /Ð /Ð /Ð /Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø $Ð $Ð $Ð $Ð $Ð $ð Ð Ø€ð €ð8ð 8ð 8ð 8ð
ð ð ð ð
7ð 7ð 7ð 7ð 7ð <@ð`ð `ð `ð `ð `ðFWEð WEð WEð WEð WEñ WEô WEð WEðtð ð ð ð ð  <@ðVð Vð Vð Vð Vðr	ð 	ð 	ð 	ð 	˜Yñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜ñ 	ô 	ð 	ð Ð Ð Ð Ð Ð ð1ð 1ð 1ð 1ðEVð EVð EVð EVð EVñ EVô EVð EVðP �u”|Ð$€
ðK#ð K#ð K#ð K#ð K#ˆ'ñ K#ô K#ð K#ðblð lð lð lð lˆWñ lô lð lð^Bð Bð Bð Bð BðJ~ð ~ð ~ð ~ð ~ðB;ð ;ð ;ð ;ð
4ð 4ð 4ð 4ð 4ñ 4ô 4ð 4ð  ð  ð  ð  ð0ð ð ð ð,U6ð U6ð U6ð U6ðp &Ð %Ð %Ð %Ð %Ð %Ø -Ð -Ð -Ð -Ð -Ð -ð 
€	ˆ'�5”< Ô!;Ñ <Ô <Ð <Ø€Lð2ð 2ð 2ð 2ð>9ð 9ð 9ð 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Ñ 3Ô 3Ð 3Ø €€X˜!¨°UÐ ;Ñ ;Ô ;Ð ;Ø €€Y˜4¨Ð .Ñ .Ô .Ð .Ø
ˆ%�”Ô#Ô+¸ÀUÐ
KÑ
KÔ
K€€€r   