
    i*                    ~    d dl mZ d dlmZ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Union)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Union[Dim, int]dataNc                    ddl m} t        |      t        u r|dk  sJ |
d}|| _        y t	        ||      sJ || _        y )Nr   r   r   ) r	   typeint
isinstancer   )selfr   r	   s      R/var/www/html/engine/venv/lib/python3.12/site-packages/functorch/dim/_dim_entry.py__init__zDimEntry.__init__   sH    :!8O8\D 	 dC(((	    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99

**##%e.A.A.C99

** r   c                Z    t        | j                        t        u xr | j                  dk  S )Nr   )r   r   r   r   s    r   r   zDimEntry.is_positional.   s"    DII#%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_none1   s&    dii% 99>!r   c                R    t        | j                  t              sJ | j                  S Nr   r   r   r   s    r   positionzDimEntry.position<   s     $))S)))yyr   c                R    t        | j                  t              rJ | j                  S r   r    r   s    r   dimzDimEntry.dim@   s     dii---yyr   c                ,    t        | j                        S r   )reprr   r   s    r   __repr__zDimEntry.__repr__D   s    DIIr   r   )r   zUnion[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+    
	8	"r   r   c                D    d}| D ]  }|j                         s|dz  } |S )Nr   r   )r   )levelsrls      r   ndim_of_levelsr5   H   s0    	A ??FA Hr   c                2   ||k(  r| S | j                         }| j                         }|st        |      t        |      k  sJ 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len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_levelsrI   P   s   $ iKKMEmmoG;3y>1 	
:	
1 IK -	-##E*C U3Z(ws|,- YV5J5J5LMM  	"""$  #  !1!12q!	"s   B..A%DD)r2   zSequence[DimEntry]r'   r   )F)
r?   torch.Tensorr@   list[DimEntry]rA   rK   rB   r*   r'   rJ   )
__future__r   typingr   r   collections.abcr   r   r	   torchr   r5   rI   r0   r   r   <module>rP      sg    " ' ( 
5 5p 	/N/N/N /N 	/N
 /Nr   