o
    h6                     @   sz   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 dZ	G dd	 d	Z
d
d Zi ZdddZdd ZdS )    N)	dataclass)Union   )DimListc                   @   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   e/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/functorch/dim/dim.pyr      s   
 r   c                   @   sd   e Zd Zddededef fddZdd Zedd	 Z	e	j
defd
d	Z	edd Zdd ZdS )DimNnamesizec                 C   s(   || _ d | _d | _|d ur|| _d S d S N)r   _size_vmap_levelr   )selfr   r   r   r   r   __init__   s   
zDim.__init__c                 C   sl   | j d ur.dt| j _td js0t td jkr4t  t  td js2t td jks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   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.sizec                 C   sp   ddl m} | jd u r#|| _t|d| _tt| _tt	| j d S | j|kr6|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#   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__@   s   zDim.__repr__r   )r	   r
   r   strr   r   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_nameD   s   r3   c                    s   t  }|d us
J |j}|d usJ |j|j}}||f}|tvrz|d d tt|j }|j	dks>|j	dkrS|j
| dkrGtnt  fddt|< n'|j	dksZJ |j
}tfd	d
t|D t|  fddt|< t|  S )N   r   r.   r/   r   c                      s
    dS )Nr)   r   r   )ctorr   r   r   <lambda>\   s   
 zdims.<locals>.<lambda>UNPACK_SEQUENCEc                 3   s$    | ]}t  d  |  V  qdS )r   N)r3   ).0i)firstinstructionsr   r   	<genexpr>`   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   r   )r8   r9   n)
first_listr   r   r<   d   s
    
z)dims.<locals>.<lambda>.<locals>.<genexpr>)tuple	enumerater   )r>   namesr   r   r6   d   s    )inspectcurrentframef_backf_codef_lasti_cachelistdisget_instructionsr0   r1   r   r   r?   ranger'   )listsframecalling_framecodelastikeyunpackndimsr   )r5   r:   r>   r;   r   rA   r   dimsL   s,   
rT   c                    sF   fdd |d u rS t |ttfst fdd|D S  |fS )Nc                    s$   t | tr| S t | tsJ  |  S r   )
isinstancer   r   )a)
positionalr   r   convertl   s   
z_dim_set.<locals>.convertc                 3   s    | ]} |V  qd S r   r   )r8   rV   )rX   r   r   r<   v   s    z_dim_set.<locals>.<genexpr>)rU   r   r   r?   )rW   argr   )rX   rW   r   _dim_setk   s   
rZ   )r   )rI   rB   dataclassesr   typingr   r%   r   r   r   r   r3   rG   rT   rZ   r   r   r   r   <module>   s   -
