
    sgF                         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y)    N)	dataclass)Union   )DimListc                   &    e Zd ZU eed<   dZeed<   y)	LevelInfolevelTaliveN)__name__
__module____qualname__int__annotations__r
   bool     D/var/www/html/venv/lib/python3.12/site-packages/functorch/dim/dim.pyr   r      s    J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y)DimNnamesizec                 B    || _         d | _        d | _        ||| _        y y N)r   _size_vmap_levelr   )selfr   r   s      r   __init__zDim.__init__   s*    	
DI r   c                 V   | j                   dt        | j                     _        t        d   j                  sqt               t        d   j                  k(  rRt                t        j                          t        d   j                  s t               t        d   j                  k(  rPy y y y y )NF)	r   _vmap_active_levels_vmap_stackr
   _vmap_levelscurrent_levelr	   _vmap_decrement_nestingpopr   s    r   __del__zDim.__del__   s    ':? 0 017 $**!O|B'7'='==')  "	 !$**!O|B'7'='== += + (r   c                 6    | j                   sJ | j                  S r   )is_boundr   r&   s    r   r   zDim.size)   s    }}}zzr   c                 &   ddl m} | j                  U|| _        t        |d      | _        t        t              | _        t        j                  t        | j                               y | j                  |k7  r |d|  d| j                   d|       y )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DD"<0D	$*:*: ;<ZZ4$vG

|Swx|w}~   r   c                     | j                   d uS r   )r   r&   s    r   r)   zDim.is_bound=   s    zz%%r   c                     | j                   S r   r   r&   s    r   __repr__zDim.__repr__A   s    yyr   r   )r   r   r   strr   r   r   r'   propertyr   setterr)   r4   r   r   r   r   r      so    S dCi(8 #   
[[   & &r   r   c                 Z    | 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;;r   c                 h  	
 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
        |<   nV|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   F   K   | ]  }t        d z   |z              yw)r   N)r>   ).0ifirstinstructionss     r   	<genexpr>zdims.<locals>.<genexpr>a   s(      >?\%!)a-89s   !c                  >    t         fdt              D              S )Nc              3   \   K   | ]#  \  }}|k  rt        |      nt        |        % yw)r3   N)r   r   )rF   rG   n
first_lists      r   rJ   z)dims.<locals>.<lambda>.<locals>.<genexpr>e   s0      (Aq j.Ag1o=(s   ),)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   s      "ELLM$$$&&(=(=%D-C
&
QC001E1EFGe$==L(FMM\,I==D1*3'D1F3K==$5555MME CH< E Ue+JF3K #;=r   c                 ~      fd| S t        |t        t        f      st        fd|D              S  |      fS )Nc                 V    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   | ]  } |        y wr   r   )rF   rh   rj   s     r   rJ   z_dim_set.<locals>.<genexpr>w   s     -AWQZ-s   )rg   r   r   rO   )ri   argrj   s   ` @r   _dim_setrm   l   s@    ! {c3Z(----r   )r   )rY   rR   dataclassesr   typingr   r-   r   r"   r   r   r>   rW   rd   rm   r   r   r   <module>rp      sW      !      
+ +\
 
>r   