o
    ŽqiC  ã                   @   s(   d dl Z G dd„ dƒZG dd„ dƒZdS )é    Nc                   @   sJ   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Ze	dd„ ƒZ
dS )ÚNameNc                 C   sT   |d u st |tƒsJ ‚|d u st |tƒsJ ‚|d u s"|d u s"J dƒ‚|| _|| _d S )Nz6Either name or prename, but not both, can be specified)Ú
isinstanceÚstrÚnameÚprename)Úselfr   r   © r   úI/home/app/PyTorch/test/pytorch/third_party/python-peachpy/peachpy/name.pyÚ__init__   s   ÿ
zName.__init__c                 C   s,   | j d ur| j S | jd urd| j d S dS )Nú<ú>z<?>)r   r   ©r   r   r   r	   Ú__str__   s
   

zName.__str__c                 C   s   t | ƒS ©N)r   r   r   r   r	   Ú__repr__   s   zName.__repr__c                 C   s   t | jƒt| ƒA S r   )Úhashr   Úidr   r   r   r	   Ú__hash__   s   zName.__hash__c                 C   s   t |tƒo| |u p| j|jkS r   ©r   r   r   ©r   Úotherr   r   r	   Ú__eq__   s   zName.__eq__c                 C   s    t |tƒ p| |uo| j|jkS r   r   r   r   r   r	   Ú__ne__!   s    zName.__ne__c                 C   sT   t | tƒstdt| ƒ ƒ‚ddl}| d| ¡std|  ƒ‚|  d¡r(td|  ƒ‚dS )z2Verifies that the name is appropriate for a symbolz Invalid name %s: string requiredr   Nz^[_a-zA-Z]\w*$zInvalid name: Z__zIInvalid name %s: names starting with __ are reserved for PeachPy purposes)r   r   Ú	TypeErrorÚreÚmatchÚ
ValueErrorÚ
startswith)r   r   r   r   r	   Ú
check_name$   s   

ÿzName.check_name)NN)Ú__name__Ú
__module__Ú__qualname__r
   r   r   r   r   r   Ústaticmethodr   r   r   r   r	   r      s    
r   c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZdS )Ú	Namespacec                 C   s0   |d u st |tƒsJ ‚|| _tƒ | _tƒ | _d S r   )r   r   Ú
scope_nameÚdictÚnamesÚprenames)r   r$   r   r   r	   r
   1   s   zNamespace.__init__c                 C   ó
   t | jƒS r   )r   r$   r   r   r   r	   r   :   ó   
zNamespace.__str__c                 C   r(   r   )r   r$   r   r   r   r	   r   =   r)   zNamespace.__hash__c                 C   s   t |tƒo
| j|jkS r   ©r   r#   r$   r   r   r   r	   r   @   s   zNamespace.__eq__c                 C   s   t |tƒ p| j|jkS r   r*   r   r   r   r	   r   C   s   zNamespace.__ne__c                 C   s*  t |tƒsJ ‚|d |dd … }}t |tƒsJ ‚|}|r&t|ƒ}| |¡ |jr[|jd u s0J ‚|j| jv rS|rLt | j|j tƒrL| j|j  |¡ d S td|j ƒ‚|| j|j< d S |jd u sbJ ‚| j	 
|jtƒ ¡ |rŠt| j	|j ƒD ]}t |tƒr‰|j|u r‰| |¡  d S qu| j	|j  |¡ d S )Nr   é   zName %s already exists)r   Útupler   r#   Úadd_scoped_namer   r   r&   r   r'   Ú
setdefaultÚsetÚiterr$   Úadd)r   Zscoped_namer$   Zsubscoped_nameZscopeZsubscoper   r   r	   r-   F   s.   

€zNamespace.add_scoped_namec                 C   st  t  | j¡D ]-}|d ur3t| j| ƒdkr3|| jvr3tt| j| ƒƒ}|| j|< t|tƒr0|j	}||_
qt  | j¡D ]@\}}|d urzd}|t|ƒ }t|ƒD ]+}|j
d u ry|| jv ri|d7 }|t|ƒ }|| jv sZ|| j|< t|tƒrv|j	}||_
qNq:d | jv r¸| jd  }d}dt|ƒ }t|ƒD ]&}|| jv r§|d7 }dt|ƒ }|| jv s˜|| j|< t|tƒr´|j	}||_
q‘d S )Nr+   r   Z__local)ÚsixÚiterkeysr'   Úlenr&   Únextr0   r   r#   r$   r   Ú	iteritemsr   )r   r   Zname_objectZprename_objectsÚsuffixZsuffixed_nameZunnamed_objectsr   r   r	   Úassign_namesa   sL   

€


þ

€



þ

zNamespace.assign_namesc                 C   ó   | j jS r   )r$   r   r   r   r   r	   r      ó   zNamespace.namec                 C   r9   r   )r$   r   r   r   r   r	   r   ‘   r:   zNamespace.prenameN)r   r    r!   r
   r   r   r   r   r-   r8   Úpropertyr   r   r   r   r   r	   r#   0   s    	,
r#   )r2   r   r#   r   r   r   r	   Ú<module>   s   )