o
    IAfC                     @   s  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	Z	d dlm
Z
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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edddZ#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+d0d1 Z,d2d3 Z-d4d5 Z.d6d7 Z/d8d9 Z0d:d; Z1d<d= Z2d>d? Z3d@dA Z4dBdC Z5dDdE Z6dFdG Z7dHdI Z8dJdK Z9i dLddMddNddOddPe7dQddRe8dSddTe8dUe9dVe8dWe9dXe8dYe9dZe8d[e9Z:d\d] Z;d^d_ Z<d`da Z=dbdc Z>d~ddddddddddddddde	dfdgZ?dhdi Z@djdk ZAdldm ZBeCdndodpZDdqdr ZEeFdsdtduZGdvdw ZHdxddddddddddddddddydzd{ZId|d} ZJdS )    N)FunctionTypeGenericAlias)	dataclassfieldFieldFrozenInstanceErrorInitVarKW_ONLYMISSINGfieldsasdictastuplemake_dataclassreplaceis_dataclassc                   @      e Zd ZdS )r   N__name__
__module____qualname__ r   r   "/usr/lib/python3.10/dataclasses.pyr      s    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__      z#_HAS_DEFAULT_FACTORY_CLASS.__repr__N)r   r   r   r   r   r   r   r   r      s    r   c                   @   r   )_MISSING_TYPENr   r   r   r   r   r          r   c                   @   r   )_KW_ONLY_TYPENr   r   r   r   r   r      r   r   c                   @   s   e Zd Zdd Zdd ZdS )_FIELD_BASEc                 C   
   || _ d S Nnamer   r$   r   r   r   __init__      
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   r!   r"   r+   )r   r,   r   r   r   r&      r'   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   r2   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kw_only_field_typec	           	      C   sX   d | _ d | _|| _|| _|| _|| _|| _|| _|d u rtnt	
|| _|| _d | _d S r"   )r$   r,   r4   r5   r7   r/   r6   r8   _EMPTY_METADATAtypesMappingProxyTyper9   r:   r;   )	r   r4   r5   r7   r/   r6   r8   r9   r:   r   r   r   r&   
  s   
zField.__init__c                 C   s^   d| j 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	,kw_only=z,_field_type=))r$   r,   r4   r5   r7   r/   r6   r8   r9   r:   r;   r   r   r   r   r     s.   	
zField.__repr__c                 C   s,   t t| jdd }|r|| j|| d S d S )N__set_name__)getattrr,   r4   )r   ownerr$   funcr   r   r   rA   1  s   zField.__set_name__N)
r   r   r   r3   r&   r   rA   classmethodr   r2   r   r   r   r   r      s    r   c                   @   s    e Zd ZdZdd Zdd ZdS )_DataclassParamsr7   r/   eqorderunsafe_hashfrozenc                 C   s(   || _ || _|| _|| _|| _|| _d S r"   rG   )r   r7   r/   rH   rI   rJ   rK   r   r   r   r&   D  s   
z_DataclassParams.__init__c                 C   s6   d| j d| jd| jd| jd| jd| jdS )Nz_DataclassParams(init=r?   z,eq=z,order=z,unsafe_hash=z,frozen=r@   rG   r   r   r   r   r   L  s   z_DataclassParams.__repr__N)r   r   r   r3   r&   r   r   r   r   r   rF   ;  s    rF   Tr4   r5   r7   r/   r6   r8   r9   r:   c              	   C   s0   	 | t ur|t urtdt| |||||||S )Nz/cannot specify both default and default_factory)r
   
ValueErrorr   rL   r   r   r   r   Z  s   r   c                 C   s$   t dd | D t dd | D fS )Nc                 s   s     | ]}|j r|js|V  qd S r"   r7   r:   .0fr   r   r   	<genexpr>v      z(_fields_in_init_order.<locals>.<genexpr>c                 s   s     | ]}|j r|jr|V  qd S r"   rN   rO   r   r   r   rR   w  rS   )tupler   r   r   r   _fields_in_init_orderr  s   rV   c                    s(   |sdS dd  fdd|D  dS )N()(,c                    s   g | ]
}  d |j  qS ).r#   rO   obj_namer   r   
<listcomp>      z_tuple_str.<locals>.<listcomp>,))join)r\   r   r   r[   r   
_tuple_str{  s    ra   c                    s"   t   t fdd}|S )Nc              	      sL   t | t f}| v rdS  | z| }W  | |S  | w )Nz...)id_thread	get_identadddiscard)r   keyresultrepr_runninguser_functionr   r   wrapper  s   


z _recursive_repr.<locals>.wrapper)set	functoolswraps)rk   rl   r   ri   r   _recursive_repr  s   
rp   )globalslocalsreturn_typec          
      C   s   |d u ri }d|vrt |d< d}|tur||d< d}d|}ddd |D }d	|  d
| d| d| }d| }d| d| d|  }i }	t|||	 |	d di |S )NZBUILTINS Z_return_typez->_return_typerY   
c                 s   s    | ]}d | V  qdS )z  Nr   )rP   br   r   r   rR         z_create_fn.<locals>.<genexpr>z def rX   r@   z:
, zdef __create_fn__(z):
z	
 return Z__create_fn__r   )builtinsr
   r`   keysexec)
r$   argsbodyrq   rr   rs   Zreturn_annotationZtxtZ
local_varsnsr   r   r   
_create_fn  s    
r   c                 C   s0   | rd| d|d| dS | d| d| S )NzBUILTINS.object.__setattr__(rY   r@   rZ   =r   )rK   r$   value	self_namer   r   r   _field_assign  s   r   c                 C   s   d| j  }| jtur+| jr | j||< | d| j  d| j  }n6| j||< | d}n+| jrE| jtu r7| j }n| jturD| j||< | j }n|rT| jturT| j||< |}nd S | jtu r]d S t|| j ||S )NZ_dflt_z() if z is _HAS_DEFAULT_FACTORY else rW   )r$   r5   r
   r7   r4   r;   r*   r   )rQ   rK   rq   r   slotsZdefault_namer   r   r   r   _field_init  s2   







r   c                 C   sV   | j tu r| jtu rd}n| j turd| j }n| jtur d}| j d| j | S )Nrt   z=_dflt_z=_HAS_DEFAULT_FACTORYz:_type_)r4   r
   r5   r$   )rQ   r4   r   r   r   _init_param  s   

r   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|	||
||}|rF|	| q5|rad
d	d
 | D }|	| dt d| d |sfdg}dd |D }|r}|dg7 }|dd |D 7 }td|g| ||
|d dS )NFTznon-default argument z follows default argumentc                 S   s   i | ]
}d |j  |jqS )Z_type_)r$   r,   rO   r   r   r   
<dictcomp>%  r^   z_init_fn.<locals>.<dictcomp>)r
   _HAS_DEFAULT_FACTORYrY   c                 s   s     | ]}|j tu r|jV  qd S r"   )r;   r*   r$   rO   r   r   r   rR   5  s    
z_init_fn.<locals>.<genexpr>rZ   rX   r@   passc                 S      g | ]}t |qS r   r   rO   r   r   r   r]   =      z_init_fn.<locals>.<listcomp>*c                 S   r   r   r   rO   r   r   r   r]   C  r   r&   )rr   rq   rs   )r7   r4   r
   r5   	TypeErrorr$   updater   r   appendr`   _POST_INIT_NAMEr   )r   Z
std_fieldsZkw_only_fieldsrK   has_post_initr   rq   r   Zseen_defaultrQ   rr   Z
body_lineslineZ
params_strZ_init_paramsr   r   r   _init_fn  sF   


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"(rx   c                 S   s    g | ]}|j  d |j  dqS )z={self.z!r}r#   rO   r   r   r   r]   P  s    z_repr_fn.<locals>.<listcomp>z)"rq   )r   r`   rp   )r   rq   fnr   r   r   _repr_fnL  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)r1   r   rX   rY   c                 s   s    | ]}t |jV  qd S r"   )r/   r$   rO   r   r   r   rR   [  rw   z'_frozen_get_del_attr.<locals>.<genexpr>r_   rW   __setattr__)r   r$   r   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))rr   rq   __delattr__r%   z; raise FrozenInstanceError(f"cannot delete field {name!r}")z"super(cls, self).__delattr__(name))r   r`   r   )r1   r   rq   rr   Z
fields_strr   r   r   _frozen_get_del_attrW  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   )r   )r$   op
self_tupleother_tuplerq   r   r   r   _cmp_fnp  s   r   c                 C   s$   t d| }tddd| dg|dS )Nr   __hash__r   zreturn hash(r@   r   )ra   r   )r   rq   r   r   r   r   _hash_fn~  s   
r   c                 C   s$   | |j u pt| |ju o| j|j u S r"   )ClassVarr,   Z_GenericAlias
__origin__)a_typetypingr   r   r   _is_classvar  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
   | |j u S r"   )r	   r   r   r   r   _is_kw_only  r'   r   c           	      C   s   t | }|rAd }|d}|stj|jj}ntj|j}|r2|j||u r2tj|jj}|rA|||d|rAdS dS )N      TF)_MODULE_IDENTIFIER_REmatchgroupsysmodulesgetr   __dict__)	
annotationr1   Za_moduler   Zis_type_predicater   r~   module_namemoduler   r   r   _is_type  s   
)
r   c                 C   sp  t | |t}t|tr|}nt|tjrt}t|d}||_||_t	|_
tjd}|rDt||sAt|jtrDt|j| ||jtrDt|_
|j
t	u rftjt }t||sct|jtrft|j| ||jtrft|_
|j
ttfv r{|jtur{td|j d|j
t	tfv r|jtu r||_n|jturtd|j d|j
t	u rt|jtttfrtdt|j d|j d|S )	N)r4   r   field z cannot have a default factoryz$ is a ClassVar but specifies kw_onlyzmutable default z for field z$ is not allowed: use default_factory)rB   r
   r.   r   r=   MemberDescriptorTyper   r$   r,   r(   r;   r   r   r   r   strr   r   r)   r   r   r   r*   r5   r   r:   r4   listdictrm   rM   )r1   Za_namer   Zdefault_kw_onlyr4   rQ   r   r   r   r   r   
_get_field  sV   








	


r   c                 C   s"   t |tr| j d|j |_|S )NrZ   )r.   r   r   r   )r1   r   r   r   r   _set_qualname2  s   
r   c                 C   s(   || j v rdS t| | t| || dS )NTF)r   r   setattr)r1   r$   r   r   r   r   _set_new_attribute9  s
   

r   c                 C   s   d S r"   r   r1   r   rq   r   r   r   _hash_set_noneH  r   r   c                 C   s   dd |D }t | t||S )Nc                 S   s(   g | ]}|j d u r|jrn|j r|qS r"   )r6   r8   rO   r   r   r   r]   L  s   ( z_hash_add.<locals>.<listcomp>)r   r   )r1   r   rq   fldsr   r   r   	_hash_addK  s   r   c                 C   s   t d| j )Nz-Cannot overwrite attribute __hash__ in class )r   r   r   r   r   r   _hash_exceptionO  s   r   )FFFF)FFFT)FFTF)FFTT)FTFF)FTFT)FTTF)FTTT)TFFF)TFFT)TFTF)TFTT)TTFF)TTFT)TTTF)TTTTc
           %      C   s0  i }
| j tjv rtj| j  j}ni }t| tt|||||| d}d}| jddd D ]"}t|t	d }|d urMd}|
 D ]}||
|j< q=t|tjrMd}q+| jdi }g }d}tjt }| D ]/\}}t||syt|trt|| ||jtr|rt|dd}d}qb|t| ||| qb|D ]%}||
|j< tt| |jd tr|jtu rt| |j qt| |j|j q| j D ]\}}t|tr||vrt|dq|r|r|std|s|rtd	t| t	|
 | jd
t}|tu p|d u od| jv  }|r|stddd |

 D }t|\}}|r8t| t}t | dt!|||||d|
v r2dnd||	 dd |

 D }|rTdd |D }t | dt"|| |rud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|rt%| ||D ]}#t | |#j|#rtd|#j d| j qt&t'|t'|t'||f }$|$r|$| ||| _(t| ds| jtt)*| +dd  | _,|r	t | d!t-d"d# |D  |	rt.| |} t/0|  | S )$NFr   T__annotations__z3 is KW_ONLY, but KW_ONLY has already been specifiedz& 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   )r;   r(   r*   rO   r   r   r   r]     s    z"_process_class.<locals>.<listcomp>r&   r   Z__dataclass_self__c                 S   s   g | ]	}|j tu r|qS r   r;   r(   rO   r   r   r   r]     s    c                 S      g | ]}|j r|qS r   )r/   rO   r   r   r   r]         r   c                 S   r   r   r8   rO   r   r   r   r]     r   r   z==r   c                 S   r   r   r   rO   r   r   r   r]   $  r   ))__lt__<)__le__z<=)__gt__>)__ge__z>=zCannot overwrite attribute z
 in class z). Consider using functools.total_ordering__doc__z -> Nonert   __match_args__c                 s       | ]}|j V  qd S r"   r#   rO   r   r   r   rR   K      z!_process_class.<locals>.<genexpr>)1r   r   r   r   r   _PARAMSrF   __mro__rB   _FIELDSvaluesr$   rK   r   r   itemsr   r.   r   r   r	   r   r   r   r   r4   r
   delattrrM   rV   hasattrr   r   r   r   ra   r   r   _hash_actionboolr   inspectZ	signaturer   r   rT   
_add_slotsabcupdate_abstractmethods)%r1   r7   r/   rH   rI   rJ   rK   
match_argsr:   r   r   rq   Zany_frozen_baseZhas_dataclass_basesrv   Zbase_fieldsrQ   Zcls_annotationsZ
cls_fieldsZKW_ONLY_seenr   r$   r,   r   Z
class_hashZhas_explicit_hashZall_init_fieldsZstd_init_fieldsZkw_only_init_fieldsr   Z
field_listr   r   r   r   r   Zhash_actionr   r   r   _process_classr  s  













r   c                    s    fddt  D S )Nc                    s   g | ]}t  |jqS r   )rB   r$   rO   r   r   r   r]   Z  s    z'_dataclass_getstate.<locals>.<listcomp>rU   r   r   r   r   _dataclass_getstateY  s   r   c                 C   s,   t t| |D ]\}}t| |j| qd S r"   )zipr   objectr   r$   )r   stater   r   r   r   r   _dataclass_setstate]  s   r   c                 C   s   d| j v rt| j dt| j }tdd t| D }||d< |D ]}||d  q#|dd  t| dd }t| | j| j	|} |d urI|| _
|rQt| _t| _| S )Nr3   z already specifies __slots__c                 s   r   r"   r#   rO   r   r   r   rR   m  r   z_add_slots.<locals>.<genexpr>r   r   )r   r   r   r   rT   r   poprB   r,   	__bases__r   r   __getstate__r   __setstate__)r1   	is_frozenZcls_dictfield_names
field_namequalnamer   r   r   r   c  s    

r   F	r7   r/   rH   rI   rJ   rK   r   r:   r   c      	      	      s2   	  f	dd}
| d u r|
S |
| S )Nc                    s   t |  
S r"   )r   )r1   	rH   rK   r7   r:   r   rI   r/   r   rJ   r   r   wrap  s   zdataclass.<locals>.wrapr   )r1   r7   r/   rH   rI   rJ   rK   r   r:   r   r   r   r   r   r     s
   r   c                 C   s>   	 zt | t}W n ty   tdw 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   rO   r   r   r   rR     s    zfields.<locals>.<genexpr>)rB   r   AttributeErrorr   rT   r   )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   r1   r   r   r   r     s    
r   dict_factoryc                C      	 t | s	tdt| |S )Nz0asdict() should be called on dataclass instances)r   r   _asdict_inner)r   r   r   r   r   r        
r   c                    s   t | r"g }t| D ]}tt| |j }||j|f q
 |S t| tr9t| dr9t	|  fdd| D  S t| t
tfrMt	|  fdd| D S t| trat	|  fdd|  D S t| S )N_fieldsc                       g | ]}t | qS r   r   rP   vr   r   r   r]     r   z!_asdict_inner.<locals>.<listcomp>c                 3       | ]}t | V  qd S r"   r  r  r   r   r   rR     rw   z _asdict_inner.<locals>.<genexpr>c                 3   (    | ]\}}t | t | fV  qd S r"   r  rP   kr  r   r   r   rR     s    )r   r   r   rB   r$   r   r.   rT   r   r,   r   r   r   copydeepcopy)r   r   rh   rQ   r   r   r   r   r     s   

r   tuple_factoryc                C   r   )Nz1astuple() should be called on dataclass instances)r   r   _astuple_inner)r   r  r   r   r   r     r   r   c                    s   t | rg }t| D ]}tt| |j }|| q
 |S t| tr6t| dr6t	|  fdd| D  S t| t
tfrJt	|  fdd| D S t| tr^t	|  fdd|  D S t| S )Nr   c                    r   r   r  r  r
  r   r   r]   )  r   z"_astuple_inner.<locals>.<listcomp>c                 3   r  r"   r  r  r
  r   r   rR   .  rw   z!_astuple_inner.<locals>.<genexpr>c                 3   r  r"   r  r  r
  r   r   rR   0  s    )r   r   r  rB   r$   r   r.   rT   r   r,   r   r   r   r  r	  )r   r  rh   rQ   r   r   r
  r   r    s   

r  r   )bases	namespacer7   r/   rH   rI   rJ   rK   r   r:   r   c                   s  	 d u ri t  }i  i |D ]^}t|tr|}d}n"t|dkr'|\}}nt|dkr7|\}}}||< ntd|t|trG| sNtd|t|rZtd|||v retd||| | |< q fdd	}t	
| |i |}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: c                    s    |   |    | d< d S )Nr   )r   )r~   Zannotationsdefaultsr  r   r   exec_body_callbacko  s   

z*make_dataclass.<locals>.exec_body_callbackr   )rm   r.   r   lenr   isidentifierkeyword	iskeywordre   r=   	new_classr   )cls_namer   r  r  r7   r/   rH   rI   rJ   rK   r   r:   r   seenitemr$   tpspecr  r1   r   r  r   r   6  s<   






r   c                K   s   	 t | s	tdt| t D ];}|jtu rq|js*|j|v r)t	d|j dq|j|vrK|jt
u rB|jtu rBt	d|jdt| |j||j< q| jd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   )r   r   rB   r   r   r;   r)   r7   r$   rM   r*   r4   r
   	__class__)r   ZchangesrQ   r   r   r   r   ~  s    


r   r"   )Krer   r  r=   r   r  ry   rn   r   rc   r   r   __all__r   r   r   r   r   r
   r   r	   r>   r<   r    r(   r)   r*   r   r   r   compiler   r   r   rF   r   rV   ra   rp   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   rT   r   r  r   r   r   r   r   r   <module>   s     

?	<;;_	
 h
")H