a
    ze                     @   s  g d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 dZdZeefd	d
ZeefddZefddZefddZefddZefddZefddZefddZefddZefddZefddZefdd Zefd!d"Zefd#d$Zd%efd&efd'efgd'efd(efd%efgd(efd'efd&efgd&efd%efd(efgd)Zd*d+ Zd,d- Zzdd.lmZ W n e y   Y n0 e! Z"e"fd/d0Z#zdd1lm#Z# W n e y   Y n0 G d2d3 d3Z$zdd4lm$Z$ W n e y   Y n0 G d5d6 d6e!Z%d7d8 Z&ed9g d:Z'G d;d< d<e(Z)e! fe*e+he,e-e.fd=d>Z/dWdAdBZ0dCdD Z1zddElm1Z1 W n e yx   Y n0 dFdG Z2dHdI Z3dXdKdLZ4dMdN Z5dOdP Z6dQdR Z7G dSdT dTZ8e! Z9G dUdV dVZ:dJS )Y)update_wrapperwrapsWRAPPER_ASSIGNMENTSWRAPPER_UPDATEStotal_orderingcache
cmp_to_key	lru_cachereducepartialpartialmethodsingledispatchsingledispatchmethodcached_property    )get_cache_token)
namedtuple)recursive_repr)RLock)GenericAlias)
__module____name____qualname____doc____annotations__)__dict__c              	   C   sd   |D ]2}zt ||}W n ty(   Y q0 t| || q|D ]}t | |t ||i  q<|| _| S N)getattrAttributeErrorsetattrupdate__wrapped__)wrapperwrappedassignedupdatedattrvalue r'   /usr/lib/python3.9/functools.pyr   #   s    r   c                 C   s   t t| ||dS )Nr"   r#   r$   )r
   r   r)   r'   r'   r(   r   A   s    r   c                 C   s*   t | | |}||u r|S | o(| |kS r   type__lt__selfotherNotImplemented	op_resultr'   r'   r(   _gt_from_ltY   s    r2   c                 C   s(   t | | |}||u r|S |p&| |kS r   r*   r-   r'   r'   r(   _le_from_lt`   s    r3   c                 C   s"   t | | |}||u r|S | S r   r*   r-   r'   r'   r(   _ge_from_ltg   s    r4   c                 C   s*   t | | |}||u r|S | p(| |kS r   r+   __le__r-   r'   r'   r(   _ge_from_len   s    r7   c                 C   s(   t | | |}||u r|S |o&| |kS r   r5   r-   r'   r'   r(   _lt_from_leu   s    r8   c                 C   s"   t | | |}||u r|S | S r   r5   r-   r'   r'   r(   _gt_from_le|   s    r9   c                 C   s*   t | | |}||u r|S | o(| |kS r   r+   __gt__r-   r'   r'   r(   _lt_from_gt   s    r<   c                 C   s(   t | | |}||u r|S |p&| |kS r   r:   r-   r'   r'   r(   _ge_from_gt   s    r=   c                 C   s"   t | | |}||u r|S | S r   r:   r-   r'   r'   r(   _le_from_gt   s    r>   c                 C   s*   t | | |}||u r|S | p(| |kS r   r+   __ge__r-   r'   r'   r(   _le_from_ge   s    rA   c                 C   s(   t | | |}||u r|S |o&| |kS r   r?   r-   r'   r'   r(   _gt_from_ge   s    rB   c                 C   s"   t | | |}||u r|S | S r   r?   r-   r'   r'   r(   _lt_from_ge   s    rC   r;   r6   r@   r,   )r,   r6   r;   r@   c                    sV    fddt D }|stdt|}t | D ]"\}}||vr.||_t || q. S )Nc                    s(   h | ] }t  |d t t|d ur|qS r   )r   object).0opclsr'   r(   	<setcomp>       z!total_ordering.<locals>.<setcomp>z6must define at least one ordering operation: < > <= >=)_convert
ValueErrormaxr   r   )rH   rootsrootopnameopfuncr'   rG   r(   r      s    r   c                    s   G  fdddt }|S )Nc                       sZ   e Zd ZdgZdd Z fddZ fddZ fdd	Z fd
dZ fddZ	dZ
dS )zcmp_to_key.<locals>.Kobjc                 S   s
   || _ d S r   rR   )r.   rR   r'   r'   r(   __init__   s    zcmp_to_key.<locals>.K.__init__c                    s    | j |j dk S Nr   rS   r.   r/   mycmpr'   r(   r,      s    zcmp_to_key.<locals>.K.__lt__c                    s    | j |j dkS rU   rS   rV   rW   r'   r(   r;      s    zcmp_to_key.<locals>.K.__gt__c                    s    | j |j dkS rU   rS   rV   rW   r'   r(   __eq__   s    zcmp_to_key.<locals>.K.__eq__c                    s    | j |j dkS rU   rS   rV   rW   r'   r(   r6      s    zcmp_to_key.<locals>.K.__le__c                    s    | j |j dkS rU   rS   rV   rW   r'   r(   r@      s    zcmp_to_key.<locals>.K.__ge__N)r   r   r   	__slots__rT   r,   r;   rY   r6   r@   __hash__r'   rW   r'   r(   K   s   r\   )rD   )rX   r\   r'   rW   r(   r      s    r   )r   c                 C   sX   t |}|tu r<zt|}W q@ ty8   tdd Y q@0 n|}|D ]}| ||}qD|S )Nz0reduce() of empty sequence with no initial value)iter_initial_missingnextStopIteration	TypeError)functionZsequenceinitialitr&   elementr'   r'   r(   r	      s    r	   )r	   c                       sF   e Zd ZdZ fddZdd Ze dd Zdd	 Zd
d Z	  Z
S )r
   )funcargskeywordsr   __weakref__c                   s^   t |stdt|dr8|j| }i |j|}|j}tt| | }||_||_||_|S )Nz#the first argument must be callablerf   )	callablera   hasattrrg   rh   rf   superr
   __new__)rH   rf   rg   rh   r.   	__class__r'   r(   rm     s    

zpartial.__new__c                O   s*   i | j |}| jg | j|R i |S r   rh   rf   rg   )r.   rg   rh   r'   r'   r(   __call__*  s    zpartial.__call__c                 C   s   t | j}t| jg}|dd | jD  |dd | j D  t | jdkrld| dd	| dS | dd	| dS )	Nc                 s   s   | ]}t |V  qd S r   )repr)rE   xr'   r'   r(   	<genexpr>2  rJ   z#partial.__repr__.<locals>.<genexpr>c                 s   s    | ]\}}| d |V  qdS )=Nr'   rE   kvr'   r'   r(   rt   3  rJ   	functoolsz
functools.(, ))
r+   r   rr   rf   extendrg   rh   itemsr   join)r.   qualnamerg   r'   r'   r(   __repr__.  s    
zpartial.__repr__c                 C   s*   t | | jf| j| j| jpd | jp$d ffS r   )r+   rf   rg   rh   r   r.   r'   r'   r(   
__reduce__8  s    zpartial.__reduce__c                 C   s   t |tstdt|dkr0tdt| |\}}}}t|rrt |trr|d ur`t |trr|d urzt |tsztdt|}|d u ri }nt|turt|}|d u ri }|| _|| _|| _	|| _
d S )Nz(argument to __setstate__ must be a tuple   zexpected 4 items in state, got zinvalid partial state)
isinstancetuplera   lenrj   dictr+   r   rf   rg   rh   )r.   staterf   rg   kwds	namespacer'   r'   r(   __setstate__<  s4    
zpartial.__setstate__)r   r   r   rZ   rm   rq   r   r   r   r   __classcell__r'   r'   rn   r(   r
     s   
	r
   )r
   c                   @   sB   e Zd Zdd Zdd Zdd Zddd	Zed
d Ze	e
ZdS )r   c                O   sf   t |s t|ds td|t|trP|j| _|j| | _i |j|| _n|| _|| _|| _d S )N__get__z${!r} is not callable or a descriptor)	rj   rk   ra   formatr   r   rf   rg   rh   )r.   rf   rg   rh   r'   r'   r(   rT   b  s    
zpartialmethod.__init__c                 C   sN   d tt| j}d dd | j D }d}|j| jj| jj	| j
||dS )Nr{   c                 s   s   | ]\}}d  ||V  qdS )z{}={!r}N)r   rv   r'   r'   r(   rt   w  s   z)partialmethod.__repr__.<locals>.<genexpr>z*{module}.{cls}({func}, {args}, {keywords}))modulerH   rf   rg   rh   )r   maprr   rg   rh   r~   r   ro   r   r   rf   )r.   rg   rh   format_stringr'   r'   r(   r   u  s    

zpartialmethod.__repr__c                    s    fdd} j |_  |_|S )Nc                   s,   i  j |} j| g j|R i |S r   rp   )cls_or_selfrg   rh   r   r'   r(   _method  s    z3partialmethod._make_unbound_method.<locals>._method)__isabstractmethod___partialmethod)r.   r   r'   r   r(   _make_unbound_method  s    z"partialmethod._make_unbound_methodNc                 C   s   t | jdd }d }|d urh|||}|| jurht|g| jR i | j}z|j|_W n tyf   Y n0 |d u r|  ||}|S )Nr   )	r   rf   r
   rg   rh   __self__r   r   r   )r.   rR   rH   getresultnew_funcr'   r'   r(   r     s    

zpartialmethod.__get__c                 C   s   t | jddS Nr   Fr   rf   r   r'   r'   r(   r     s    z"partialmethod.__isabstractmethod__)N)r   r   r   rT   r   r   r   propertyr   classmethodr   __class_getitem__r'   r'   r'   r(   r   Z  s   

r   c                 C   s   t | tr| j} q | S r   )r   r
   rf   rf   r'   r'   r(   _unwrap_partial  s    
r   	CacheInfo)hitsmissesmaxsizecurrsizec                   @   s$   e Zd ZdZefddZdd ZdS )
_HashedSeq	hashvaluec                 C   s   || d d < ||| _ d S r   r   )r.   tuphashr'   r'   r(   rT     s    z_HashedSeq.__init__c                 C   s   | j S r   r   r   r'   r'   r(   r[     s    z_HashedSeq.__hash__N)r   r   r   rZ   r   rT   r[   r'   r'   r'   r(   r     s   r   c           
         s   | }|r&||7 }|  D ]}	||	7 }q|rh|| fdd| D 7 }|r|| fdd| D 7 }n$||dkr |d |v r|d S t|S )Nc                 3   s   | ]} |V  qd S r   r'   rE   rx   r+   r'   r(   rt     rJ   z_make_key.<locals>.<genexpr>c                 3   s   | ]} |V  qd S r   r'   r   r   r'   r(   rt     rJ      r   )r~   valuesr   )
rg   r   typedkwd_mark	fasttypesr   r+   r   keyitemr'   r   r(   	_make_key  s    
 r      Fc                    s~   t  tr dk rld nTt r\t tr\ d } t| t} fdd|_t||S  d urltd fdd}|S )Nr   r   c                      s
    dS Nr   r   r'   r'   r   r'   r(   <lambda>  rJ   zlru_cache.<locals>.<lambda>z=Expected first argument to be an integer, a callable, or Nonec                    s(   t |  t} fdd|_t|| S )Nc                      s
    dS r   r'   r'   r   r'   r(   r     rJ   z8lru_cache.<locals>.decorating_function.<locals>.<lambda>)_lru_cache_wrapper
_CacheInfocache_parametersr   )user_functionr!   r   r'   r(   decorating_function  s    z&lru_cache.<locals>.decorating_function)	r   intrj   boolr   r   r   r   ra   )r   r   r   r!   r   r'   r   r(   r     s    


r   c                    s   t  td\ i d 	djjt 
g d d gd d < dkrhfdd}nNd u r	fdd}n* 	
fdd}	
fdd	}	
fd
d}||_||_|S )N)r   r         r   Fc                     s    d7  | i |}|S Nr   r'   )rg   r   r   )r   r   r'   r(   r!     s    z#_lru_cache_wrapper.<locals>.wrapperc                     sL   | |}|}|ur*d7 |S d7 | i |}| |< |S r   r'   )rg   r   r   r   )r   	cache_getr   make_keyr   sentinelr   r   r'   r(   r!   &  s    
c                     sp  
| |}	 |}|d ur|\}}}}||< ||<  }| |< < ||< |< d7 |W  d    S d7 W d    n1 s0    Y  | i |}	 |v rnr}	||	 < ||	< |	   }
 }d   < < |
= |	|< n6 }|||g}| |<  < |<  kW d    n1 sb0    Y  |S r   r'   )rg   r   r   linkZ	link_prevZ	link_next_keyr   ZlastZoldrootZoldkeyZ	oldresult)KEYNEXTPREVRESULTr   r   	cache_lenfullr   lockr   r   r   rO   r   r   r'   r(   r!   5  sB    &
*c                      s8       W  d    S 1 s*0    Y  d S r   r'   r'   )r   r   r   r   r   r   r'   r(   
cache_infon  s    z&_lru_cache_wrapper.<locals>.cache_infoc                      sP   8     d d gd d < d dW d    n1 sB0    Y  d S )Nr   F)clearr'   )r   r   r   r   r   rO   r'   r(   cache_clears  s
    z'_lru_cache_wrapper.<locals>.cache_clear)rD   r   r   __len__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   rO   r   r   r   r(   r     s*    *9	r   )r   c                C   s   t d d| S )N)r   )r   )r   r'   r'   r(   r     s    r   c                 C   s   g }dd | D } | s|S | D ]2}|d }| D ]}||dd  v r.d } qq. qRq|d u rbt d|| | D ]}|d |krp|d= qpqd S )Nc                 S   s   g | ]}|r|qS r'   r'   rE   sr'   r'   r(   
<listcomp>  rJ   z_c3_merge.<locals>.<listcomp>r   r   zInconsistent hierarchy)RuntimeErrorappend)	sequencesr   s1	candidates2seqr'   r'   r(   	_c3_merge  s"    
r   Nc           
         s  t t| jD ]$\}tdrt| j| } q8qd} rDt ng  t| jd | }g }t| j|d  } D ]0t| rttfdd| jD st| qt|D ] 	 q fdd|D } fdd|D } fdd|D }	t
| gg| | |	 |g |g |g S )	N__abstractmethods__r   c                 3   s   | ]}t | V  qd S r   )
issubclass)rE   b)baser'   r(   rt     s   z_c3_mro.<locals>.<genexpr>c                    s   g | ]}t | d qS abcs_c3_mrorE   r   r   r'   r(   r     rJ   z_c3_mro.<locals>.<listcomp>c                    s   g | ]}t | d qS r   r   r   r   r'   r(   r     rJ   c                    s   g | ]}t | d qS r   r   r   r   r'   r(   r     rJ   )	enumeratereversed	__bases__rk   r   listr   anyr   remover   )
rH   r   iboundaryexplicit_basesabstract_basesother_basesexplicit_c3_mrosabstract_c3_mrosother_c3_mrosr'   )r   r   r(   r     sD    
r   c                    s   t j  fddfddD fddfddD t g }D ]}g }| D ]0}| vrht|rh|fdd|jD  qh|s|| qX|jtd	d
 |D ] }|D ]}||vr|| qqqXt|dS )Nc                    s(   |  vo&t | do&t| t o&t| S )N__mro__)rk   r   r   r   )typ)basesrH   r'   r(   
is_related  s
    
z _compose_mro.<locals>.is_relatedc                    s   g | ]} |r|qS r'   r'   rE   n)r   r'   r(   r     rJ   z _compose_mro.<locals>.<listcomp>c                    s&    D ]}| |kr| |j v r dS qdS )NTF)r   )r   r/   )typesr'   r(   is_strict_base  s    z$_compose_mro.<locals>.is_strict_basec                    s   g | ]} |s|qS r'   r'   r   )r   r'   r(   r     rJ   c                    s   g | ]}| v r|qS r'   r'   r   )type_setr'   r(   r     rJ   T)r   reverser   )setr   __subclasses__r   r   sortr   r   )rH   r   mror   foundsubsubclsr'   )r   rH   r   r   r   r   r(   _compose_mro  s*    

r	  c                 C   st   t | | }d }|D ]R}|d ur\||v rX|| jvrX|| jvrXt||sXtd|| qj||v r|}q||S )NzAmbiguous dispatch: {} or {})r	  keysr   r   r   r   r   )rH   registryr  matchtr'   r'   r(   
_find_impl  s     
r  c                    s   dd l }dd l}i | d fdddd  d fdd	fdd	}t| d
d| t< |_|_||_j	|_
t||  |S )Nr   c                    sx    d ur"t  } |kr"  | z|  }W nD tyr   z|  }W n tyd   t| }Y n0 || < Y n0 |S r   )r   r   KeyErrorr  )rH   current_tokenimpl)cache_tokendispatch_cacher  r'   r(   dispatch1  s    z singledispatch.<locals>.dispatchc                 S   s   t | tot | t S r   )r   r+   r   rG   r'   r'   r(   _is_valid_dispatch_typeH  s    z/singledispatch.<locals>._is_valid_dispatch_typec                    s    r |d u r fddS n~|d ur8t d dt di }|sXt d d }dd	lm} tt|| \}  st d
|d d| < d u rt drt 	  |S )Nc                    s
    | S r   r'   )f)rH   registerr'   r(   r   T  rJ   z2singledispatch.<locals>.register.<locals>.<lambda>z(Invalid first argument to `register()`. z is not a class.r   z(Invalid first argument to `register()`: zS. Use either `@register(some_class)` or plain `@register` on an annotated function.r   )get_type_hintszInvalid annotation for z. r   )
ra   r   typingr  r_   r]   r~   rk   r   r   )rH   rf   annr  argname)r  r  r  r  r  rG   r(   r  K  s8    
z singledispatch.<locals>.registerc                     s*   | st  d | d j| i |S )Nz( requires at least 1 positional argumentr   )ra   ro   )rg   kw)r  funcnamer'   r(   r!   s  s    zsingledispatch.<locals>.wrapperr   zsingledispatch function)N)r   weakrefWeakKeyDictionaryr   rD   r  r  MappingProxyTyper  r   _clear_cacher   )rf   r   r  r!   r'   )r  r  r  r  r  r  r  r(   r     s     (
r   c                   @   s4   e Zd Zdd Zd
ddZdddZedd	 ZdS )r   c                 C   sR   t |s t|ds t|dt|| _|| _t|ttfrH|j	| _
n|| _
d S )Nr   z  is not callable or a descriptor)rj   rk   ra   r   
dispatcherrf   r   staticmethodr   __func___wrapped_funcr.   rf   r'   r'   r(   rT     s    

zsingledispatchmethod.__init__Nc                 C   s.   t |ttfrt|jdi |_| jj||dS )Nr   r   )r   r#  r   r   r$  r   r"  r  )r.   rH   methodr'   r'   r(   r    s    	zsingledispatchmethod.registerc                    s0    fdd}j |_ j|_t|j |S )Nc                     s(   j | d j}| | i |S rU   )r"  r  ro   r   )rg   kwargsr'  rH   rR   r.   r'   r(   r     s    z-singledispatchmethod.__get__.<locals>._method)r   r  r   r%  )r.   rR   rH   r   r'   r)  r(   r     s
    zsingledispatchmethod.__get__c                 C   s   t | jddS r   r   r   r'   r'   r(   r     s    z)singledispatchmethod.__isabstractmethod__)N)N)r   r   r   rT   r  r   r   r   r'   r'   r'   r(   r     s
   


r   c                   @   s.   e Zd Zdd Zdd ZdddZeeZdS )	r   c                 C   s    || _ d | _|j| _t | _d S r   )rf   attrnamer   r   r   r&  r'   r'   r(   rT     s    zcached_property.__init__c                 C   s8   | j d u r|| _ n"|| j kr4td| j d|dd S )Nz?Cannot assign the same cached_property to two different names (z and z).)r*  ra   )r.   ownernamer'   r'   r(   __set_name__  s    

zcached_property.__set_name__Nc              	   C   s  |d u r| S | j d u rtdz
|j}W n6 ty^   dt|jd| j d}t|d Y n0 || j t}|tu r| jv || j t}|tu r| 	|}z||| j < W n6 ty   dt|jd| j d}t|d Y n0 W d    n1 s0    Y  |S )NzGCannot use cached_property instance without calling __set_name__ on it.zNo '__dict__' attribute on z instance to cache z
 property.zThe '__dict__' attribute on z7 instance does not support item assignment for caching )
r*  ra   r   r   r+   r   r   
_NOT_FOUNDr   rf   )r.   instancer+  r   msgvalr'   r'   r(   r     s:    



.zcached_property.__get__)N)	r   r   r   rT   r-  r   r   r   r   r'   r'   r'   r(   r     s   	
r   )r   F)N);__all__abcr   collectionsr   reprlibr   _threadr   r   r   r   r   r   r   r0   r2   r3   r4   r7   r8   r9   r<   r=   r>   rA   rB   rC   rK   r   r   
_functoolsImportErrorrD   r^   r	   r
   r   r   r   r   r   r   strr   r+   r   r   r   r   r   r   r   r	  r  r   r   r.  r   r'   r'   r'   r(   <module>   s   


AJ	

.t	
-*f5