a
    d                     @   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
   Z/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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 ur || _d S N)r   _size_vmap_levelr   )selfr   r   r
   r
   r   __init__   s
    zDim.__init__c                 C   sD   | j d u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
J | jS r   )is_boundr   r   r
   r
   r   r      s    
zDim.size)r   c                 C   sb   | j d u 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 uS r   )r   r   r
   r
   r   r   ,   s    zDim.is_boundc                 C   s   | j S r   r   r   r
   r
   r   __repr__0   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J | jS )N
STORE_FAST
STORE_NAME)opnameargval)instr
   r
   r   extract_name4   s    r(       c                    s   t  }|d usJ |j}|d us&J |j|j }}||f}|tvr|d d tt|j }|j	dks||j	dkr|j
| dkrtnt  fddt|< nN|j	dksJ |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>I       zdims.<locals>.<lambda>UNPACK_SEQUENCEc                 3   s"   | ]}t  d  |  V  qdS )r+   N)r(   ).0i)firstinstructionsr
   r   	<genexpr>M   r.   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)r0   r1   n)
first_listr
   r   r4   O   r.   z)dims.<locals>.<lambda>.<locals>.<genexpr>)tuple	enumerater
   )r7   namesr
   r   r-   O   r.   )inspectcurrentframef_backf_codef_lasti_cachelistdisget_instructionsr%   r&   r   r5   r8   ranger   )listsframeZcalling_framecodelastikeyunpackZndimsr
   )r,   r2   r7   r3   r   r:   r   dims9   s(    rK   c                    sJ   fdd |d u 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J  |  S d S r   )
isinstancer   r   )a)
positionalr
   r   convertT   s    
z_dim_set.<locals>.convertc                 3   s   | ]} |V  qd S r   r
   )r0   rM   )rO   r
   r   r4   ]   r.   z_dim_set.<locals>.<genexpr>)rL   r   r   r8   )rN   argr
   )rO   rN   r   _dim_setS   s    rQ   N)r)   )r   Z	dataclassr   r   r(   r@   rK   rQ   r
   r
   r
   r   <module>   s   (
