Ë
    L²j,  ã                  óz   — d dl mZ d dlmZ erd dlmZ ddlmZ d dlZ G d„ d«      Z	dd	„Z
	 d	 	 	 	 	 	 	 	 	 dd
„Zy)é    )Úannotations)ÚTYPE_CHECKING)ÚSequenceé   ©ÚDimNc                  óR   — e Zd ZU ded<   ddd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
y)ÚDimEntryz	Dim | intÚdataNc                óÄ   — ddl m} t        |«      t        u r|dk\  r=t	        d|› �«      ‚|€
d}|| _        y t        ||«      st	        dt        |«      › �«      ‚|| _        y )Nr   r   r   zExpected negative int, got zExpected Dim, got )Ú r   ÚtypeÚintÚAssertionErrorÚ
isinstancer   )Úselfr   r   s      úW/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/functorch/dim/_dim_entry.pyÚ__init__zDimEntry.__init__   sh   € Ýä�‹:œÑØ�qŠyÜ$Ð'BÀ4À&Ð%IÓJÐJØˆ\ØˆDð ˆ�	ô ˜d CÔ(Ü$Ð'9¼$¸t»*¸Ð%FÓGÐGØˆ�	ó    c                ó  — t        |t        «      sy| j                  «       r)|j                  «       r| j                  |j                  k(  S | j                  «       s(|j                  «       s| j                  |j                  u S y)NF)r   r
   Úis_positionalr   )r   Úothers     r   Ú__eq__zDimEntry.__eq__!   sj   € Ü˜%¤Ô*Øð ×ÑÔ E×$7Ñ$7Ô$9à—9‘9 §
¡
Ñ*Ð*Ø×#Ñ#Ô%¨e×.AÑ.AÔ.Cà—9‘9 §
¡
Ð*Ð*ð r   c                óZ   — t        | j                  «      t        u xr | j                  dk  S )Nr   )r   r   r   ©r   s    r   r   zDimEntry.is_positional0   s"   € Ü�D—I‘I‹¤#Ð%Ò7¨$¯)©)°a©-Ð7r   c                óZ   — ddl m} t        | j                  |«      ry| j                  dk(  S )Nr   r   Fr   )r   r   r   r   )r   r   s     r   Úis_nonezDimEntry.is_none3   s&   € åä�d—i‘i Ô%àð —9‘9 ‘>Ð!r   c                ó�   — t        | j                  t        «      s!t        dt	        | j                  «      › �«      ‚| j                  S )NzExpected int, got )r   r   r   r   r   r   s    r   ÚpositionzDimEntry.position>   s6   € Ü˜$Ÿ)™)¤SÔ)Ü Ð#5´d¸4¿9¹9³oÐ5FÐ!GÓHÐHØ�y‰yÐr   c                ód   — t        | j                  t        «      rt        d«      ‚| j                  S )NzExpected Dim, got int)r   r   r   r   r   s    r   ÚdimzDimEntry.dimC   s&   € Ü�d—i‘i¤Ô%Ü Ð!8Ó9Ð9Ø�y‰yÐr   c                ó,   — t        | j                  «      S ©N)Úreprr   r   s    r   Ú__repr__zDimEntry.__repr__H   s   € Ü�D—I‘I‹Ðr   r#   )r   zDim | int | NoneÚreturnÚNone)r   Úobjectr&   Úbool)r&   r)   )r&   r   )r&   r   )r&   Ústr)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   r   r   r   r   r!   r%   © r   r   r
   r
      s*   … à
ƒOôóó8ó	"óó
ô
r   r
   c                óD   — d}| D ]  }|j                  «       sŒ|dz  }Œ |S )Nr   r   )r   )ÚlevelsÚrÚls      r   Úndim_of_levelsr4   L   s0   € Ø	€AØò ˆØ�?‰?ÕØ�‰F‰Aðð €Hr   c                ó:  — ||k(  r| S | j                  «       }| j                  «       }|s"t        |«      t        |«      kD  rt        d«      ‚g }g }|D ]<  }	 |j	                  |«      }	|j                  ||	   «       |j                  ||	   «       Œ> | j                  ||| j                  «       «      S # t        $ r_ |j                  «       r|j                  d«       n)|j                  |j                  «       j                   «       |j                  d«       Y ŒÇw xY w)aF  
    Reshape a tensor to match target levels using as_strided.

    Args:
        tensor: Input tensor to reshape
        from_levels: Current levels of the tensor
        to_levels: Target levels to match
        drop_levels: If True, missing dimensions are assumed to have stride 0

    Returns:
        Reshaped tensor
    z,Cannot expand dimensions without drop_levelsr   r   )ÚsizeÚstrideÚlenr   ÚindexÚappendÚ
ValueErrorr   r!   Ú
as_stridedÚstorage_offset)
ÚtensorÚfrom_levelsÚ	to_levelsÚdrop_levelsÚsizesÚstridesÚ	new_sizesÚnew_stridesÚlevelÚidxs
             r   Ú_match_levelsrH   T   s  € ð$ �iÒØˆà�K‰K‹M€EØ�m‰m‹o€GáÜˆ{Óœc )›nÒ,Ü Ð!OÓPÐPà€IØ€Kàò -ˆð	-Ø×#Ñ# EÓ*ˆCð ×Ñ˜U 3™ZÔ(Ø×Ñ˜w s™|Õ,ð-ð ×Ñ˜Y¨°V×5JÑ5JÓ5LÓMÐMøô ò 	"à×"Ñ"Ô$Ø× Ñ  Õ#à× Ñ  §¡£×!1Ñ!1Ô2Ø×Ñ˜qÖ!ð	"ús   ÁB2Â2A%DÄD)r1   zSequence[DimEntry]r&   r   )F)
r>   útorch.Tensorr?   úlist[DimEntry]r@   rJ   rA   r)   r&   rI   )Ú
__future__r   Útypingr   Úcollections.abcr   r   r   Útorchr
   r4   rH   r/   r   r   ú<module>rO      sg   ðÝ "å  ñ Ý(åã ÷
9ñ 9óxð ð	.NØð.Nàð.Nð ð.Nð ð	.Nð
 ô.Nr   