
    קgF                         d dl Z d dlZd dlmZ d dlmZ ddlmZ g Ze G d d                      Z	 G d d	          Z
d
 Zi ZddZd ZdS )    N)	dataclass)Union   )DimListc                   (    e Zd ZU eed<   dZeed<   dS )	LevelInfolevelTaliveN)__name__
__module____qualname__int__annotations__r
   bool     M/var/www/html/ai-engine/env/lib/python3.11/site-packages/functorch/dim/dim.pyr   r      s+         JJJE4r   r   c                       e Zd Zd
dededef         fdZd Zed             Z	e	j
        defd            Z	ed             Zd	 ZdS )DimNnamesizec                 F    || _         d | _        d | _        |	|| _        d S d S N)r   _size_vmap_levelr   )selfr   r   s      r   __init__zDim.__init__   s1    	
DIII r   c                 p   | j         dt          | j                 _        t          d         j        st                      t          d         j        k    rct                       t                                           t          d         j        s(t                      t          d         j        k    [d S d S d S d S d S )NF)	r   _vmap_active_levels_vmap_stackr
   _vmap_levelscurrent_levelr	   _vmap_decrement_nestingpopr   s    r   __del__zDim.__del__   s    ':? 017 $*#!OO|B'7'===')))  """	 !$*#!OO|B'7'=====	 ('# # # #==r   c                 "    | j         sJ | j        S r   )is_boundr   r&   s    r   r   zDim.size)   s    }zr   c                 .   ddl m} | j        c|| _        t          |d          | _        t          t                    | _        t                              t          | j                             d S | j        |k    r |d|  d| j         d|           d S )Nr   )DimensionBindErrorsamezDim 'z*' previously bound to a dimension of size z$ cannot bind to a dimension of size )
 r+   r   _vmap_increment_nestingr   lenr"   r!   appendr   )r   r   r+   s      r   r   zDim.size.   s    ((((((:DJ6tVDDD"<00D	$*: ; ;<<<<<Z4$$~~~
~~x|~~    r   c                     | j         d uS r   )r   r&   s    r   r)   zDim.is_bound=   s    z%%r   c                     | j         S r   r   r&   s    r   __repr__zDim.__repr__A   s
    yr   r   )r   r   r   strr   r   r   r'   propertyr   setterr)   r4   r   r   r   r   r      s         S dCi(8    # # #   X 
[    [ & & X&    r   r   c                 @    | j         dk    s| j         dk    sJ | j        S )N
STORE_FAST
STORE_NAME)opnameargval)insts    r   extract_namer>   E   s)    ;,&&$+*E*E*E*E;r   c                 V  	
 t          j                    }|J |j        }|J |j        |j        }}||f}|t
          vr|dz  dz   	t          t          j        |j                            	         }|j	        dk    s|j	        dk    r*|j
        | dk    rt          nt          fdt
          |<   n]|j	        dk    sJ |j
        }t          	fdt          |          D                       t                    | z
  

fd	t
          |<   t          |                     S )
N   r   r9   r:   r   c                                  S )Nr3   r   )ctorr   s   r   <lambda>zdims.<locals>.<lambda>]   s    $$D/// r   UNPACK_SEQUENCEc              3   N   K   | ]}t          d z   |z                      V   dS )r   N)r>   ).0ifirstinstructionss     r   	<genexpr>zdims.<locals>.<genexpr>a   sI        >?\%!)a-899     r   c                  T    t           fdt                    D                       S )Nc              3   h   K   | ],\  }}|k     rt          |          nt          |           V  -dS )r3   N)r   r   )rF   rG   n
first_lists      r   rJ   z)dims.<locals>.<lambda>.<locals>.<genexpr>e   sU       ( (Aq j..Ag1ooo( ( ( ( ( (r   )tuple	enumerate)rN   namess   r   rC   zdims.<locals>.<lambda>e   s?    % ( ( ( (%e,,( ( ( # # r   )inspectcurrentframef_backf_codef_lasti_cachelistdisget_instructionsr;   r<   r   r   rO   ranger/   )listsframecalling_framecodelastikeyunpackndimsrB   rH   rN   rI   r   rQ   s           @@@@@@r   dimsrd   M   sn    ""ELM$$$&(=%D-C
&
QC01EFFGGe$=L((FM\,I,I=D1**33'D11111F3KK=$55555ME     CH<<    E Ue+J    F3K #;==r   c                       fd| S t          |t          t          f          st          fd|D                       S  |          fS )Nc                 p    t          | t                    r| S t          | t                    sJ |          S r   )
isinstancer   r   )a
positionals    r   convertz_dim_set.<locals>.convertm   s:    a 	!Ha%%%%%a= r   c              3   .   K   | ]} |          V  d S r   r   )rF   rh   rj   s     r   rJ   z_dim_set.<locals>.<genexpr>w   s+      --AWWQZZ------r   )rg   r   r   rO   )ri   argrj   s   ` @r   _dim_setrm   l   ss    ! ! ! ! ! {c3Z(( ----------r   )r   )rY   rR   dataclassesr   typingr   r-   r   r"   r   r   r>   rW   rd   rm   r   r   r   <module>rp      s    


  ! ! ! ! ! !                     
+ + + + + + + +\  
 
   >    r   