a
    ze                     @   st  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 g dZ
G dd deZG dd dZe ZG dd	 d	Ze Zei ZG d
d dZedZedZedZdZdZdZe dZG dd dZG dd dZG dd dZeeddddddddZdd Z dd  Z!dded!d"d#Z"d$d% Z#d&d' Z$d(d) Z%d*d+ Z&d,d- Z'd.d/ Z(d0d1 Z)d2d3 Z*d4d5 Z+d6d7 Z,d8d9 Z-d:d; Z.d<d= Z/d>d? Z0d@dA Z1dBdC Z2dddde0de1de1e2e1e2e1e2e1e2dDZ3dEdF Z4daddddGdGdGdHdIdJZ5dKdL Z6dMdN Z7dOdP Z8e9dQdRdSZ:dTdU Z;e<dVdWdXZ=dYdZ Z>d[dddddGdGdGd\d]d^Z?d_d` Z@dS )b    N)GenericAlias)	dataclassfieldFieldFrozenInstanceErrorInitVarMISSINGfieldsasdictastuplemake_dataclassreplaceis_dataclassc                   @   s   e Zd ZdS )r   N__name__
__module____qualname__ r   r   !/usr/lib/python3.9/dataclasses.pyr          r   c                   @   s   e Zd Zdd ZdS )_HAS_DEFAULT_FACTORY_CLASSc                 C   s   dS )Nz	<factory>r   selfr   r   r   __repr__   s    z#_HAS_DEFAULT_FACTORY_CLASS.__repr__N)r   r   r   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )_MISSING_TYPENr   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd Zdd ZdS )_FIELD_BASEc                 C   s
   || _ d S Nnamer   r   r   r   r   __init__   s    z_FIELD_BASE.__init__c                 C   s   | j S r   r   r   r   r   r   r      s    z_FIELD_BASE.__repr__N)r   r   r   r    r   r   r   r   r   r      s   r   _FIELD_FIELD_CLASSVAR_FIELD_INITVARZ__dataclass_fields__Z__dataclass_params__Z__post_init__z^(?:\s*(\w+)\s*\.)?\s*(\w+)c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	r   typec                 C   s
   || _ d S r   r$   )r   r%   r   r   r   r       s    zInitVar.__init__c                 C   s8   t | jtr"t | jts"| jj}n
t| j}d| dS )Nzdataclasses.InitVar[])
isinstancer%   r   r   repr)r   	type_namer   r   r   r      s    

zInitVar.__repr__c                 C   s   t |S r   )r   )clsr%   r   r   r   __class_getitem__   s    zInitVar.__class_getitem__N)r   r   r   	__slots__r    r   r+   r   r   r   r   r      s   r   c                   @   s0   e Zd ZdZdd Zdd Zdd ZeeZ	dS )	r   )
r   r%   defaultdefault_factoryr(   hashinitcomparemetadata_field_typec                 C   sR   d | _ d | _|| _|| _|| _|| _|| _|| _|d u r<tnt	
|| _d | _d S r   )r   r%   r-   r.   r0   r(   r/   r1   _EMPTY_METADATAtypesMappingProxyTyper2   r3   )r   r-   r.   r0   r(   r/   r1   r2   r   r   r   r       s    zField.__init__c                 C   sV   d| j d| jd| jd| jd| jd| jd| jd| jd	| jd
| j	 dS )NzField(name=z,type=z	,default=z,default_factory=z,init=,repr=z,hash=z	,compare=z
,metadata=z,_field_type=))
r   r%   r-   r.   r0   r(   r/   r1   r2   r3   r   r   r   r   r     s*    	
zField.__repr__c                 C   s(   t t| jdd }|r$|| j|| d S )N__set_name__)getattrr%   r-   )r   ownerr   funcr   r   r   r9     s    zField.__set_name__N)
r   r   r   r,   r    r   r9   classmethodr   r+   r   r   r   r   r      s
   r   c                   @   s    e Zd ZdZdd Zdd ZdS )_DataclassParamsr0   r(   eqorderunsafe_hashfrozenc                 C   s(   || _ || _|| _|| _|| _|| _d S r   r?   )r   r0   r(   r@   rA   rB   rC   r   r   r   r    ,  s    z_DataclassParams.__init__c                 C   s6   d| j d| jd| jd| jd| jd| jdS )Nz_DataclassParams(init=r7   z,eq=z,order=z,unsafe_hash=z,frozen=r8   r?   r   r   r   r   r   4  s    z_DataclassParams.__repr__N)r   r   r   r,   r    r   r   r   r   r   r>   #  s   r>   Tr-   r.   r0   r(   r/   r1   r2   c                 C   s,   | t ur|t urtdt| ||||||S )Nz/cannot specify both default and default_factory)r   
ValueErrorr   rD   r   r   r   r   B  s
    r   c                    s(   |sdS dd  fdd|D  dS )N()(,c                    s   g | ]}  d |j  qS ).r   .0fobj_namer   r   
<listcomp>a  r   z_tuple_str.<locals>.<listcomp>,))join)rN   r	   r   rM   r   
_tuple_strX  s    rR   c                    s"   t   t fdd}|S )Nc              	      sN   t | t f}| v rdS  | z| }W  | n | 0 |S )Nz...)id_thread	get_identadddiscard)r   keyresultrepr_runninguser_functionr   r   wrapperk  s    

z _recursive_repr.<locals>.wrapper)set	functoolswraps)r\   r]   r   rZ   r   _recursive_reprf  s    
ra   )globalslocalsreturn_typec          
      C   s   |d u ri }d|vrt |d< d}|tur4||d< d}d|}ddd |D }d	|  d
| d| d| }d| }d| d| d|  }i }	t|||	 |	d f i |S )NZBUILTINS Z_return_typez->_return_typerH   
c                 s   s   | ]}d | V  qdS )z  Nr   )rK   br   r   r   	<genexpr>  r   z_create_fn.<locals>.<genexpr>z def rG   r8   z:
, zdef __create_fn__(z):
z	
 return Z__create_fn__)builtinsr   rQ   keysexec)
r   argsbodyrb   rc   rd   Zreturn_annotationZtxtZ
local_varsnsr   r   r   
_create_fny  s     
rp   c                 C   s0   | rd| d|d| dS | d| d| S )NzBUILTINS.object.__setattr__(rH   r8   rI   =r   )rC   r   value	self_namer   r   r   _field_assign  s    rt   c                 C   s   d| j  }| jturV| jr@| j||< | d| j  d| j  }q| j||< | d}n8| jr| jtu rn| j }q| jtur| j||< | j }nd S | jtu rd S t|| j ||S )NZ_dflt_z() if z is _HAS_DEFAULT_FACTORY else rF   )r   r.   r   r0   r-   r3   r#   rt   )rL   rC   rb   rs   Zdefault_namerr   r   r   r   _field_init  s*    






ru   c                 C   sV   | j tu r| jtu rd}n&| j tur2d| j }n| jtur@d}| j d| j | S )Nre   z=_dflt_z=_HAS_DEFAULT_FACTORYz:_type_)r-   r   r.   r   )rL   r-   r   r   r   _init_param  s    

rv   c                 C   s   d}| D ]:}|j r|jtu r&|jtu s,d}q|rtd|jdqdd | D }|ttd g }| D ] }t||||}	|	rj|	|	 qj|rd
d	d
 | D }
|	| dt d|
 d |sdg}td|gdd | D  |||d dS )NFTznon-default argument z follows default argumentc                 S   s   i | ]}d |j  |jqS )Z_type_)r   r%   rJ   r   r   r   
<dictcomp>  r   z_init_fn.<locals>.<dictcomp>)r   _HAS_DEFAULT_FACTORYrH   c                 s   s   | ]}|j tu r|jV  qd S r   )r3   r#   r   rJ   r   r   r   rh     s   
z_init_fn.<locals>.<genexpr>rI   rG   r8   passr    c                 S   s   g | ]}|j rt|qS r   )r0   rv   rJ   r   r   r   rO     r   z_init_fn.<locals>.<listcomp>)rc   rb   rd   )r0   r-   r   r.   	TypeErrorr   updaterx   ru   appendrQ   _POST_INIT_NAMErp   )r	   rC   has_post_initrs   rb   Zseen_defaultrL   rc   Z
body_lineslineZ
params_strr   r   r   _init_fn  s:    r   c                 C   s2   t dddddd | D  d g|d}t|S )	Nr   r   z(return self.__class__.__qualname__ + f"(ri   c                 S   s    g | ]}|j  d |j  dqS )z={self.z!r}r   rJ   r   r   r   rO     s   z_repr_fn.<locals>.<listcomp>z)"rb   )rp   rQ   ra   )r	   rb   fnr   r   r   _repr_fn  s    
r   c                 C   sp   | t d}|r,dddd |D  d }nd}tdd	d
| dddf||dtddd
| dddf||dfS )N)r*   r   rG   rH   c                 s   s   | ]}t |jV  qd S r   )r(   r   rJ   r   r   r   rh   *  r   z'_frozen_get_del_attr.<locals>.<genexpr>rP   rF   __setattr__)r   r   rr   z if type(self) is cls or name in :z> raise FrozenInstanceError(f"cannot assign to field {name!r}")z)super(cls, self).__setattr__(name, value))rc   rb   __delattr__r   z; raise FrozenInstanceError(f"cannot delete field {name!r}")z"super(cls, self).__delattr__(name))r   rQ   rp   )r*   r	   rb   rc   Z
fields_strr   r   r   _frozen_get_del_attr&  s2    

r   c                 C   s$   t | ddd| | | dg|dS )N)r   otherz%if other.__class__ is self.__class__:z return zreturn NotImplementedr   )rp   )r   op
self_tupleother_tuplerb   r   r   r   _cmp_fn?  s    r   c                 C   s$   t d| }tddd| dg|dS )Nr   __hash__r   zreturn hash(r8   r   )rR   rp   )r	   rb   r   r   r   r   _hash_fnM  s    
r   c                 C   s$   | |j u p"t| |ju o"| j|j u S r   )ClassVarr%   _GenericAlias
__origin__)a_typetypingr   r   r   _is_classvarU  s    

r   c                 C   s   | |j u pt| |j u S r   )r   r%   )r   dataclassesr   r   r   _is_initvar]  s    
r   c           	      C   s   t | }|rd }|d}|s2tj|jj}n2tj|j}|rd|j||u rdtj|jj}|r|||d|rdS dS )N      TF)_MODULE_IDENTIFIER_REmatchgroupsysmodulesgetr   __dict__)	
annotationr*   Za_moduler   Zis_type_predicater   ro   module_namemoduler   r   r   _is_typed  s    )

r   c                 C   s8  t | |t}t|tr|}nt|tjr,t}t|d}||_||_t	|_
tjd}|rt||st|jtrt|j| ||jtrt|_
|j
t	u rtjt }t||st|jtrt|j| ||jtrt|_
|j
ttfv r|jturtd|j d|j
t	u r4t|jtttfr4tdt|j d|j d|S )N)r-   r   field z cannot have a default factoryzmutable default z for field z$ is not allowed: use default_factory)r:   r   r'   r   r5   MemberDescriptorTyper   r   r%   r!   r3   r   r   r   r   strr   r   r"   r   r   r   r#   r.   rz   r-   listdictr^   rE   )r*   Za_namer   r-   rL   r   r   r   r   r   
_get_field  sJ    








	 
r   c                 C   s   || j v rdS t| || dS )NTF)r   setattr)r*   r   rr   r   r   r   _set_new_attribute  s    
r   c                 C   s   d S r   r   r*   r	   rb   r   r   r   _hash_set_none  s    r   c                 C   s   dd |D }t ||S )Nc                 S   s(   g | ] }|j d u r|jrn|j r|qS r   )r/   r1   rJ   r   r   r   rO     r   z_hash_add.<locals>.<listcomp>)r   )r*   r	   rb   fldsr   r   r   	_hash_add  s    r   c                 C   s   t d| j d S )Nz-Cannot overwrite attribute __hash__ in class )rz   r   r   r   r   r   _hash_exception  s    r   ))FFFF)FFFT)FFTF)FFTT)FTFF)FTFT)FTTF)FTTT)TFFF)TFFT)TFTF)TFTT)TTFF)TTFT)TTTF)TTTTc                    s  i } j tjv r tj j  j}ni }t tt|||||| d}	d}
 jddd D ]D}t|t	d }|d urVd}
|
 D ]}|||j< qzt|tjrVd}	qV jdi } fdd| D }|D ]L}|||j< tt |jd tr|jtu r t |j qt |j|j qĈ j D ].\}}t|tr||vrt|dq|
rz|	rf|sftd	|	sz|rztd
t t	|  jdt}|tu p|d u od jv  }|r|std|rt t}dd |
 D }t dt|||d|v rdnd| dd |
 D }|rHdd |D }t dt|| |rdd |D }td|}td|}t dtdd|||d |rdd |D }td|}td|}dD ]>\}}t |t|||||drtd| d j dq|r8t ||D ].}t |j|rtd|j d j qtt |t |t ||f }|rh| || _!t ds jt"t#$ %dd   _& S )!NFr   T__annotations__c                    s   g | ]\}}t  ||qS r   )r   )rK   r   r%   r*   r   r   rO   _  s   z"_process_class.<locals>.<listcomp>z& is a field but has no type annotationz5cannot inherit non-frozen dataclass from a frozen onez5cannot inherit frozen dataclass from a non-frozen oner   __eq__z eq must be true if order is truec                 S   s   g | ]}|j ttfv r|qS r   )r3   r!   r#   rJ   r   r   r   rO     s   r    r   Z__dataclass_self__c                 S   s   g | ]}|j tu r|qS r   r3   r!   rJ   r   r   r   rO     r   c                 S   s   g | ]}|j r|qS r   )r(   rJ   r   r   r   rO     r   r   c                 S   s   g | ]}|j r|qS r   r1   rJ   r   r   r   rO     r   r   z==r   c                 S   s   g | ]}|j r|qS r   r   rJ   r   r   r   rO     r   ))__lt__<)__le__z<=)__gt__>)__ge__z>=zCannot overwrite attribute z
 in class z). Consider using functools.total_ordering__doc__z -> Nonere   )'r   r   r   r   r   _PARAMSr>   __mro__r:   _FIELDSvaluesr   rC   r   itemsr'   r   r-   r   delattrrz   rE   hasattrr}   r   r   r   rR   r   r   r   _hash_actionboolr   r   inspectZ	signaturer   r   )r*   r0   r(   r@   rA   rB   rC   r	   rb   Zany_frozen_baseZhas_dataclass_basesrg   Zbase_fieldsrL   Zcls_annotationsZ
cls_fieldsr   rr   Z
class_hashZhas_explicit_hashr~   r   Z
field_listr   r   r   r   Zhash_actionr   r   r   _process_class)  s    









r   Fr?   c                  s*    fdd}| d u r"|S || S )Nc                    s   t |  S r   )r   r   r@   rC   r0   rA   r(   rB   r   r   wrap  s    zdataclass.<locals>.wrapr   )r*   r0   r(   r@   rA   rB   rC   r   r   r   r   r     s    r   c                 C   s@   zt | t}W n ty(   tdY n0 tdd | D S )Nz0must be called with a dataclass type or instancec                 s   s   | ]}|j tu r|V  qd S r   r   rJ   r   r   r   rh     r   zfields.<locals>.<genexpr>)r:   r   AttributeErrorrz   tupler   )Zclass_or_instancer	   r   r   r   r	      s
    r	   c                 C   s   t t| tS r   )r   r%   r   )objr   r   r   _is_dataclass_instance  s    r   c                 C   s*   t | trt | ts| nt| }t|tS r   )r'   r%   r   r   r   )r   r*   r   r   r   r     s     r   dict_factoryc                C   s   t | stdt| |S )Nz0asdict() should be called on dataclass instances)r   rz   _asdict_inner)r   r   r   r   r   r
     s    r
   c                    s   t | rDg }t| D ]&}tt| |j }||j|f q |S t| trrt| drrt	|  fdd| D  S t| t
tfrt	|  fdd| D S t| trt	|  fdd|  D S t| S d S )N_fieldsc                    s   g | ]}t | qS r   r   rK   vr   r   r   rO   Q  r   z!_asdict_inner.<locals>.<listcomp>c                 3   s   | ]}t | V  qd S r   r   r   r   r   r   rh   V  r   z _asdict_inner.<locals>.<genexpr>c                 3   s&   | ]\}}t | t | fV  qd S r   r   rK   kr   r   r   r   rh   X  s   )r   r	   r   r:   r   r|   r'   r   r   r%   r   r   r   copydeepcopy)r   r   rY   rL   rr   r   r   r   r   6  s    
r   tuple_factoryc                C   s   t | stdt| |S )Nz1astuple() should be called on dataclass instances)r   rz   _astuple_inner)r   r   r   r   r   r   _  s    r   c                    s   t | r>g }t| D ] }tt| |j }|| q |S t| trlt| drlt	|  fdd| D  S t| t
tfrt	|  fdd| D S t| trt	|  fdd|  D S t| S d S )Nr   c                    s   g | ]}t | qS r   r   r   r   r   r   rO     r   z"_astuple_inner.<locals>.<listcomp>c                 3   s   | ]}t | V  qd S r   r   r   r   r   r   rh     r   z!_astuple_inner.<locals>.<genexpr>c                 3   s&   | ]\}}t | t | fV  qd S r   r   r   r   r   r   rh     s   )r   r	   r   r:   r   r|   r'   r   r   r%   r   r   r   r   r   )r   r   rY   rL   rr   r   r   r   r   w  s    
r   r   )bases	namespacer0   r(   r@   rA   rB   rC   c             	      s   d u ri  n    t }
i }|D ]}t|tr<|}d}nDt|dkrR|\}}n.t|dkrr|\}}}| |< ntd|t|tr| std|t|rtd|||
v rtd||
	| |||< q$| d< t
| |i  fd	d
}t|||||||	dS )Nz
typing.Anyr      zInvalid field: z'Field names must be valid identifiers: z"Field names must not be keywords: zField name duplicated: r   c                    s
   |   S r   )r{   )ro   r   r   r   <lambda>  r   z make_dataclass.<locals>.<lambda>r?   )r   r^   r'   r   lenrz   isidentifierkeyword	iskeywordrV   r5   	new_classr   )cls_namer	   r   r   r0   r(   r@   rA   rB   rC   seenZannsitemr   tpspecr*   r   r   r   r     s8    






r   c                K   s   t | stdt| t D ]v}|jtu r.q|jsR|j|v rt	d|j dq|j|vr|jt
u r|jtu rt	d|jdt| |j||j< q| jf i |S )Nz1replace() should be called on dataclass instancesr   zC is declared with init=False, it cannot be specified with replace()zInitVar z! must be specified with replace())r   rz   r:   r   r   r3   r"   r0   r   rE   r#   r-   r   	__class__)r   ZchangesrL   r   r   r   r     s    


r   )N)Arer   r   r5   r   r   rj   r_   rT   r   __all__r   r   r   rx   r   r   r6   r4   r   r!   r"   r#   r   r   r}   compiler   r   r   r>   r   rR   ra   rp   rt   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   <module>   s    

<62;R >
)B