U
    ªÊ¹jf  ã                   @   sF   g Z eG d d„ dƒƒZG dd„ dƒZdd„ Zi Zddd„Zd	d
„ ZdS )c                   @   s"   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© r
   r
   úP/var/www/html/bwave/python/venv/lib/python3.8/site-packages/functorch/dim/dim.pyr   	   s   
r   c                   @   sb   e Zd Zdeedef dœdd„Zdd„ Zedd„ ƒZ	e	j
ed	œd
d„ƒZ	edd„ ƒZdd„ ZdS )ÚDimN)ÚnameÚsizec                 C   s$   || _ d | _d | _|d k	r || _d S ©N)r   Ú_sizeÚ_vmap_levelr   )Úselfr   r   r
   r
   r   Ú__init__   s
    zDim.__init__c                 C   sD   | j d k	r@dt| j _td js@tƒ td jkr@tƒ  t ¡  qd S )NFéÿÿÿÿ)	r   Z_vmap_active_levelsÚ_vmap_stackr   Ú_vmap_levelsZcurrent_levelr   Z_vmap_decrement_nestingÚpop©r   r
   r
   r   Ú__del__   s    
ÿÿzDim.__del__c                 C   s   | j s
t‚| jS r   )Úis_boundÚAssertionErrorr   r   r
   r
   r   r       s    
zDim.size)r   c                 C   sb   | j d kr8|| _ t|dƒ| _ttƒ| _t t| jƒ¡ n&| j |kr^td| › d| j › d|› �ƒ‚d S )NZsamezDim 'z*' previously bound to a dimension of size z$ cannot bind to a dimension of size )	r   Z_vmap_increment_nestingr   Úlenr   r   Úappendr   ZDimensionBindError)r   r   r
   r
   r   r   %   s    


ÿc                 C   s
   | j d k	S r   )r   r   r
   r
   r   r   2   s    zDim.is_boundc                 C   s   | j S r   ©r   r   r
   r
   r   Ú__repr__6   s    zDim.__repr__)N)r   r   r   ÚstrÚUnionr   r   r   Úpropertyr   Úsetterr   r   r
   r
   r
   r   r      s   	

r   c                 C   s   | j dks| j dkst‚| jS )NÚ
STORE_FASTÚ
STORE_NAME)Úopnamer   Úargval)Úinstr
   r
   r   Úextract_name:   s    r)   é    c                    sþ   t  ¡ }|d k	st‚|j}|d k	s&t‚|j|j }}||f}|tkrô|d d ‰tt 	|j¡ƒ‰ˆˆ }|j
dks||j
dkr¦|j‰| dkrŽtnt‰ ‡ ‡fdd„t|< nN|j
dks´t‚|j}t‡‡fd	d
„t|ƒD ƒƒ‰tˆƒ|  ‰‡‡fdd„t|< t| ƒ S )Né   é   r$   r%   r*   c                      s
   ˆ ˆd�S )Nr   r
   r
   )Úctorr   r
   r   Ú<lambda>R   ó    zdims.<locals>.<lambda>ÚUNPACK_SEQUENCEc                 3   s"   | ]}t ˆˆ d  |  ƒV  qdS )r,   N)r)   )Ú.0Úi)ÚfirstÚinstructionsr
   r   Ú	<genexpr>V   s    zdims.<locals>.<genexpr>c                      s   t ‡ fdd„tˆƒD ƒƒS )Nc                 3   s,   | ]$\}}|ˆ k rt |ƒnt|d �V  qdS )r   N)r   ÚDimList)r1   r2   Ún)Ú
first_listr
   r   r5   Z   s   ÿz)dims.<locals>.<lambda>.<locals>.<genexpr>)ÚtupleÚ	enumerater
   )r8   Únamesr
   r   r.   Z   s   þ)ÚinspectÚcurrentframer   Úf_backÚf_codeÚf_lastiÚ_cacheÚlistÚdisÚget_instructionsr&   r'   r   r6   r9   Úranger   )ÚlistsÚframeZcalling_frameÚcodeÚlastiÚkeyÚunpackZndimsr
   )r-   r3   r8   r4   r   r;   r   ÚdimsB   s,    ÿrL   c                    sJ   ‡fdd„‰ |d krˆS t |ttfƒs<t‡ fdd„|D ƒƒS ˆ |ƒfS d S )Nc                    s(   t | tƒr| S t | tƒst‚ˆ |  S d S r   )Ú
isinstancer   r   r   )Úa)Ú
positionalr
   r   Úconvertb   s    
z_dim_set.<locals>.convertc                 3   s   | ]}ˆ |ƒV  qd S r   r
   )r1   rN   )rP   r
   r   r5   l   s     z_dim_set.<locals>.<genexpr>)rM   r   r   r9   )rO   Úargr
   )rP   rO   r   Ú_dim_seta   s    rR   N)r*   )r   Ú	dataclassr   r   r)   rA   rL   rR   r
   r
   r
   r   Ú<module>   s   +
