o
    Zh                     @   sZ   d dl Z d dlmZ d dlmZ G dd deZe jdee fddZ	G d	d
 d
Z
dS )    N)Hashablefieldsc                   @   s<   e Zd ZU dZeed< edd ZdefddZ	dd	 Z
d
S )	_UnionTag)_clsr   c                 C   s    t | }t|drJ ||_|S )Nr   )r   hasattrr   )tclstag r   H/var/www/auris/lib/python3.10/site-packages/torch/_export/serde/union.pycreate   s   z_UnionTag.createreturnc                 C   sP   t |tsJ t|}|t| jv s"J | d| j dt| j t| |kS )Nz is not a valid tag for z. Available tags: )
isinstancestr_get_field_namesr   )selfcmpotherr   r   r   __eq__   s   z_UnionTag.__eq__c                 C   s   t t| S N)hashr   r   r   r   r   __hash__   s   z_UnionTag.__hash__N)__name__
__module____qualname__	__slots__r   __annotations__staticmethodr   boolr   r   r   r   r   r   r      s   
 
r   r   c                 C   s   dd t | D S )Nc                 S   s   h | ]}|j qS r   name.0fr   r   r   	<setcomp>    s    z#_get_field_names.<locals>.<setcomp>r   )r	   r   r   r   r      s   r   c                       sh   e Zd ZU eed< edd Zdd Zede	fddZ
ed	d
 Z fddZdd Zdd Z  ZS )_Union_typec                 K   sR   t |dksJ | di i dd t| D |}ttt| | |_|S )N   c                 S   s   i | ]}|j d qS r   r!   r#   r   r   r   
<dictcomp>)   s    z!_Union.create.<locals>.<dictcomp>r   )lenr   r   r   nextiterkeysr(   )r	   kwargsobjr   r   r   r   &   s   $z_Union.createc                 C   s   t dd t| D rJ d S )Nc                 s   s    | ]}|j d v V  qdS ))typer(   r   valueNr!   r#   r   r   r   	<genexpr>.   s    z'_Union.__post_init__.<locals>.<genexpr>)anyr   r   r   r   r   __post_init__-   s   z_Union.__post_init__r   c              
   C   s:   z| j W S  ty } ztdt| j d|d }~ww )NzPlease use z&.create to instantiate the union type.)r(   AttributeErrorRuntimeErrorr1   r   )r   er   r   r   r1   0   s   z_Union.typec                 C   s   t | | jS r   )getattrr1   r   r   r   r   r2   9   s   z_Union.valuec                    sB   t  |}|d u r|tt| v r|| jkrtd| d|S )NzField z is not set.)super__getattribute__r   r1   r6   )r   r"   attr	__class__r   r   r;   =   s   "z_Union.__getattribute__c                 C   s   |   S r   )__repr__r   r   r   r   __str__C   s   z_Union.__str__c                 C   s&   t | j d| j  dt| | j  dS )N(=))r1   r   r9   r   r   r   r   r?   F   s   &z_Union.__repr__)r   r   r   r   r   classmethodr   r5   propertyr   r1   r2   r;   r@   r?   __classcell__r   r   r=   r   r'   #   s   
 

r'   )	functoolscollections.abcr   dataclassesr   r   r   cachesetr   r'   r   r   r   r   <module>   s   