§
    ž²ÅjI  ã                   ó\   — d dl mZ 	 d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zd„ ZdS )é    )ÚOrderedDictc                 óL   — |                       ¦   «         rt          d¦  «        ‚d S )NzzNYI: Named tensors don't support serialization. Please drop names via `tensor = tensor.rename(None)` before serialization.)Ú	has_namesÚRuntimeError©Útensors    úMC:\Projects\Historical\venv\Lib\site-packages\torch/_namedtensor_internals.pyÚcheck_serializing_named_tensorr
      s8   € Ø×ÒÑÔð 
ÝðMñ
ô 
ð 	
ð
ð 
ó    c                 óX   — t          d„ t          | j        ¦  «        D ¦   «         ¦  «        S )zkReturns a map of { dim: dim_name } where dim is a name if the dim is named
    and the dim index otherwise.c                 ó$   — g | ]\  }}|€|n||f‘ŒS ©N© )Ú.0ÚidxÚnames      r	   ú
<listcomp>z!build_dim_map.<locals>.<listcomp>   s)   € ÐXÐXÐX±9°3¸��ˆ#ˆ# 4¨Ð	.ÐXÐXÐXr   )r   Ú	enumerateÚnamesr   s    r	   Úbuild_dim_mapr      s1   € õ ØXÐXÅ	È&Ì,Ñ@WÔ@WÐXÑXÔXñô ð r   c                 ó2  — t          | t          ¦  «        r|                      ¦   «         } t          | d¦  «        s4t          | t          ¦  «        st          dt          | ¦  «        › �¦  «        ‚t          | ¦  «        dk    rt          d¦  «        ‚t          | Ž S )NÚ__iter__zBExpected namedshape to be OrderedDict or iterable of tuples, got: r   z!Expected namedshape to non-empty.)	Ú
isinstancer   ÚitemsÚhasattrÚtupler   ÚtypeÚlenÚzip)Ú
namedshapes    r	   Úunzip_namedshaper!      sœ   € Ý�*�kÑ*Ô*ð (Ø×%Ò%Ñ'Ô'ˆ
Ý�:˜zÑ*Ô*ð 
µ:¸jÍ%Ñ3PÔ3Pð 
ÝØcÕQUÐV`ÑQaÔQaÐcÐcñ
ô 
ð 	
õ ˆ:�„˜!ÒÐÝÐ>Ñ?Ô?Ð?Ý�
ÐÐr   c                 ó   — | rdS dS )NÚrename_Úrenamer   )Úinplaces    r	   Únamer_api_namer&   (   s   € Øð Øˆyàˆxr   c                 ó$   — | t           k    p| dk    S )Nz...)ÚEllipsis)Úitems    r	   Úis_ellipsisr*   /   s   € Ø•8ÒÐ,˜t uš}Ð,r   c                 ó¾   — d„ t          | ¦  «        D ¦   «         }t          |¦  «        dk    rt          |› d| › d�¦  «        ‚t          |¦  «        dk    r|d         S d S )Nc                 ó6   — g | ]\  }}t          |¦  «        ¯|‘ŒS r   )r*   )r   Úir   s      r	   r   z)single_ellipsis_index.<locals>.<listcomp>4   s)   € ÐOÐOÐO™g˜a ½[ÈÑ=NÔ=NÐO˜ÐOÐOÐOr   é   z1: More than one Ellipsis ('...') found in names (z-). This function supports up to one Ellipsis.é   r   )r   r   r   )r   Úfn_nameÚellipsis_indicess      r	   Úsingle_ellipsis_indexr2   3   sŽ   € ØOÐO­°5Ñ)9Ô)9ÐOÑOÔOÐÝ
ÐÑÔ Ò!Ð!ÝØð Dð DØðDð Dð Dñ
ô 
ð 	
õ ÐÑÔ Ò!Ð!Ø Ô"Ð"Øˆ4r   c                 ó6   — || t          |¦  «        |z
  …         S r   )r   )Únumel_pre_globÚnumel_post_globr   s      r	   Úexpand_single_ellipsisr6   ?   s   € Ø�¥# e¡*¤*¨Ñ">Ð>Ô?Ð?r   c                 ó€   — t          | t          |¦  «        | z
  dz
  |¦  «        }|d | …         |z   || dz   d …         z   S )Nr/   )r6   r   )Úellipsis_idxr   Útensor_namesÚglobbed_namess       r	   Úreplace_ellipsis_by_positionr;   C   sS   € Ý*Ø•c˜%‘j”j <Ñ/°!Ñ3°\ñô €Mð ��,�Ô -Ñ/°%¸ÀqÑ8HÐ8JÐ8JÔ2KÑKÐKr   c                 óL   — t          | |¦  «        }|€| S t          || |¦  «        S )zX
    Expands ... inside `names` to be equal to a list of names from `tensor_names`.
    )r2   r;   )r   r9   r0   r8   s       r	   Úresolve_ellipsisr=   J   s0   € õ )¨°Ñ8Ô8€LØÐØˆÝ'¨°e¸\ÑJÔJÐJr   c           	      óÒ   — t          |¦  «        dk    r|d         €|                      d |¦  «        S |                      t          || j        t	          |¦  «        ¦  «        |¦  «        S )Nr/   r   )r   Ú_update_namesr=   r   r&   )r   r   r%   s      r	   Úupdate_names_with_listr@   T   sc   € å
ˆ5�z„z�Q‚€˜5 œ8Ð+Ø×#Ò# D¨'Ñ2Ô2Ð2à×ÒÝ˜ ¤­n¸WÑ.EÔ.EÑFÔFÈñô ð r   c                 ó^  — t          | ¦  «        }|                     ¦   «         D ]U}||         }||                     ¦   «         v r|||<   Œ&t          t          |¦  «        › d|› d|› d| j        › d|› d�
¦  «        ‚|                      t          |                     ¦   «         ¦  «        |¦  «        S )Nz: Tried to rename dim 'z	' to dim z in Tensor[z] but dim 'z' does not exist)r   Úkeysr   r&   r   r?   r   Úvalues)r   Ú
rename_mapr%   Údim_mapÚold_dimÚnew_dims         r	   Úupdate_names_with_mappingrH   ^   sè   € Ý˜FÑ#Ô#€GØ—?’?Ñ$Ô$ð ð ˆØ˜WÔ%ˆØ�g—l’l‘n”nÐ$Ð$Ø&ˆG�GÑÐåÝ! 'Ñ*Ô*ð Zð ZÀ7ð Zð ZØðZð ZØ'-¤|ðZð ZØ@GðZð Zð Zñô ð ð ×Ò¥ g§n¢nÑ&6Ô&6Ñ 7Ô 7¸ÑAÔAÐAr   c           	      ó>  — t          |¦  «        dk    }t          |¦  «        }|rA|r?t          t          |¦  «        › dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚|s|st	          | ||¦  «        S |rt	          | ||¦  «        S t          | ||¦  «        S )aî  There are two usages:

    tensor.rename(*names) returns a view on tensor with named dims `names`.
    `names` must be of length `tensor.dim()`; otherwise, if '...' is in `names`,
    then it is expanded greedily to be equal to the corresponding names from
    `tensor.names`.

    For example,
    ```
    >>> # xdoctest: +SKIP
    >>> x = torch.empty(2, 3, 5, 7, names=('N', 'C', 'H', 'W'))
    >>> x.rename('...', 'height', 'width').names
    ('N', 'C', 'height', 'width')

    >>> # xdoctest: +SKIP
    >>> x.rename('batch', '...', 'width').names
    ('batch', 'C', 'H', 'width')

    ```

    tensor.rename(**rename_map) returns a view on tensor that has rename dims
        as specified in the mapping `rename_map`.

    For example,
    ```
    >>> # xdoctest: +SKIP
    >>> x = torch.empty(2, 3, 5, 7, names=('N', 'C', 'H', 'W'))
    >>> x.rename(W='width', H='height').names
    ('N', 'C', 'height', 'width')

    ```

    Finally, tensor.rename has an in-place version called tensor.rename_.
    r   zW: This function takes either positional args or keyword args, but not both. Use tensor.z!(*names) to name dims and tensor.z(**rename_map) to rename dims.)r   Úboolr   r&   r@   rH   )r   r   rD   r%   r   Úhas_rename_pairss         r	   Úupdate_namesrL   l   sØ   € õF �E‘
”
˜Q’€IÝ˜JÑ'Ô'ÐØð 
Ð%ð 
ÝÝ˜gÑ&Ô&ð ð Ý>LÈWÑ>UÔ>Uðð å'5°gÑ'>Ô'>ðð ð ñ
ô 
ð 	
ð ð >Ð-ð >Ý% f¨e°WÑ=Ô=Ð=àð >Ý% f¨e°WÑ=Ô=Ð=Ý$ V¨Z¸ÑAÔAÐAr   N)Úcollectionsr   r
   r   r!   r&   r*   r2   r6   r;   r=   r@   rH   rL   r   r   r	   ú<module>rN      së   ðà #Ð #Ð #Ð #Ð #Ð #ðð
ð 
ð 
ðð ð ð	ð 	ð 	ðð ð ð-ð -ð -ð	ð 	ð 	ð@ð @ð @ðLð Lð LðKð Kð Kðð ð ðBð Bð Bð3Bð 3Bð 3Bð 3Bð 3Br   