B
    w2[}                 @   s  d ddddddddd	d
gZ yddlmZ W n ek
r>   Y nX 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d0efd-efgd0efd/efd.efgd.efd-efd0efgd1Zd2d Zd3d Zydd4lmZ W n ek
r   Y nX G d5d dZ ydd6lm Z  W n ek
r   Y nX G d7d	 d	e!Z"ed8d9d:d;d<gZ#G d=d> d>e$Z%e! fe&e'e(e)d?he*e)e+fd@dAZ,dQdDdZ-dEdF Z.yddGlm.Z. W n ek
rv   Y nX dHdI Z/dRdJdKZ0dLdM Z1dNdO Z2dPd
 Z3d?S )Supdate_wrapperwrapsWRAPPER_ASSIGNMENTSWRAPPER_UPDATEStotal_ordering
cmp_to_key	lru_cachereducepartialpartialmethodsingledispatch    )r   )get_cache_token)
namedtuple)recursive_repr)RLock)
__module____name____qualname____doc____annotations__)__dict__c          	   C   sn   x<|D ]4}yt ||}W n tk
r,   Y qX t| || qW x$|D ]}t | |t ||i  qDW || _| S )N)getattrAttributeErrorsetattrupdateZ__wrapped__)wrapperwrappedassignedupdatedattrvalue r!   #/root/Python-3.7.0/Lib/functools.pyr   %   s    

c             C   s   t t| ||dS )N)r   r   r   )r	   r   )r   r   r   r!   r!   r"   r   C   s    c             C   s$   |  |}||kr|S | o"| |kS )N)__lt__)selfotherNotImplemented	op_resultr!   r!   r"   _gt_from_lt[   s    
r(   c             C   s   |  |}|p| |kS )N)r#   )r$   r%   r&   r'   r!   r!   r"   _le_from_ltb   s    
r)   c             C   s   |  |}||kr|S | S )N)r#   )r$   r%   r&   r'   r!   r!   r"   _ge_from_ltg   s    
r*   c             C   s$   |  |}||kr|S | p"| |kS )N)__le__)r$   r%   r&   r'   r!   r!   r"   _ge_from_len   s    
r,   c             C   s"   |  |}||kr|S |o | |kS )N)r+   )r$   r%   r&   r'   r!   r!   r"   _lt_from_leu   s    
r-   c             C   s   |  |}||kr|S | S )N)r+   )r$   r%   r&   r'   r!   r!   r"   _gt_from_le|   s    
r.   c             C   s$   |  |}||kr|S | o"| |kS )N)__gt__)r$   r%   r&   r'   r!   r!   r"   _lt_from_gt   s    
r0   c             C   s   |  |}|p| |kS )N)r/   )r$   r%   r&   r'   r!   r!   r"   _ge_from_gt   s    
r1   c             C   s   |  |}||kr|S | S )N)r/   )r$   r%   r&   r'   r!   r!   r"   _le_from_gt   s    
r2   c             C   s$   |  |}||kr|S | p"| |kS )N)__ge__)r$   r%   r&   r'   r!   r!   r"   _le_from_ge   s    
r4   c             C   s"   |  |}||kr|S |o | |kS )N)r3   )r$   r%   r&   r'   r!   r!   r"   _gt_from_ge   s    
r5   c             C   s   |  |}||kr|S | S )N)r3   )r$   r%   r&   r'   r!   r!   r"   _lt_from_ge   s    
r6   r/   r+   r3   r#   )r#   r+   r/   r3   c                sZ    fddt D }|stdt|}x.t | D ]"\}}||kr0||_t || q0W  S )Nc                s(   h | ] }t  |d t t|d k	r|qS )N)r   object).0op)clsr!   r"   	<setcomp>   s    z!total_ordering.<locals>.<setcomp>z6must define at least one ordering operation: < > <= >=)_convert
ValueErrormaxr   r   )r:   ZrootsrootZopnameZopfuncr!   )r:   r"   r      s    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 )N)r@   )r$   r@   r!   r!   r"   __init__   s    zcmp_to_key.<locals>.K.__init__c                s    | j |j dk S )Nr   )r@   )r$   r%   )mycmpr!   r"   r#      s    zcmp_to_key.<locals>.K.__lt__c                s    | j |j dkS )Nr   )r@   )r$   r%   )rB   r!   r"   r/      s    zcmp_to_key.<locals>.K.__gt__c                s    | j |j dkS )Nr   )r@   )r$   r%   )rB   r!   r"   __eq__   s    zcmp_to_key.<locals>.K.__eq__c                s    | j |j dkS )Nr   )r@   )r$   r%   )rB   r!   r"   r+      s    zcmp_to_key.<locals>.K.__le__c                s    | j |j dkS )Nr   )r@   )r$   r%   )rB   r!   r"   r3      s    zcmp_to_key.<locals>.K.__ge__N)r   r   r   	__slots__rA   r#   r/   rC   r+   r3   __hash__r!   )rB   r!   r"   K   s   rF   )r7   )rB   rF   r!   )rB   r"   r      s    )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   | st dt| dk r t d| ^}}} t|s:t dt| } t|drv|j|  } |j }|| |}~|j	}t
t||}||_	| |_||_|S )Nz1descriptor '__new__' of partial needs an argument   z*type 'partial' takes at least one argumentz#the first argument must be callablerG   )	TypeErrorlencallabletuplehasattrrH   rI   copyr   rG   superr	   __new__)rH   rI   r:   rG   Ztmpkwr$   )	__class__r!   r"   rS      s(    




zpartial.__new__c              O   s:   | st d| ^}} |j }|| |j|j| |S )Nz2descriptor '__call__' of partial needs an argument)rL   rI   rQ   r   rG   rH   )rH   rI   r$   Znewkeywordsr!   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 )N)repr)r8   xr!   r!   r"   	<genexpr>  s    z#partial.__repr__.<locals>.<genexpr>c             s   s    | ]\}}| d |V  qdS )=Nr!   )r8   kvr!   r!   r"   rX     s    	functoolsz
functools.(z, ))
typer   rV   rG   extendrH   rI   itemsr   join)r$   qualnamerH   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 )N)r_   rG   rH   rI   r   )r$   r!   r!   r"   
__reduce__  s    zpartial.__reduce__c             C   s   t |tstdt|dkr0tdt| |\}}}}t|rrt |trr|d k	r`t |trr|d k	rzt |tsztdt|}|d kri }nt|tk	rt|}|d kri }|| _|| _|| _	|| _
d S )Nz(argument to __setstate__ must be a tuple   zexpected 4 items in state, got zinvalid partial state)
isinstancerO   rL   rM   rN   dictr_   r   rG   rH   rI   )r$   staterG   rH   kwds	namespacer!   r!   r"   __setstate__   s(    
zpartial.__setstate__)r   r   r   rD   rS   rU   r   rd   re   rl   __classcell__r!   r!   )rT   r"   r	      s   
)r	   c               @   s8   e Zd Zdd Zdd Zdd Zdd Zed	d
 ZdS )r
   c             O   sn   t |s t|ds td|t|trX|j| _|j| | _|j	 | _| j
| n|| _|| _|| _d S )N__get__z${!r} is not callable or a descriptor)rN   rP   rL   formatrg   r
   rG   rH   rI   rQ   r   )r$   rG   rH   rI   r!   r!   r"   rA   F  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 )Nz, c             s   s   | ]\}}d  ||V  qdS )z{}={!r}N)ro   )r8   rZ   r[   r!   r!   r"   rX   \  s   z)partialmethod.__repr__.<locals>.<genexpr>z*{module}.{cls}({func}, {args}, {keywords}))moduler:   rG   rH   rI   )rb   maprV   rH   rI   ra   ro   rT   r   r   rG   )r$   rH   rI   Zformat_stringr!   r!   r"   rd   Z  s    

zpartialmethod.__repr__c                s    fdd} j |_  |_|S )Nc                 s<    j  }|| | ^}}|f j t| } j||S )N)rI   rQ   r   rH   rO   rG   )rH   rI   Zcall_keywordsZcls_or_selfrestZ	call_args)r$   r!   r"   _methodf  s
    

z3partialmethod._make_unbound_method.<locals>._method)__isabstractmethod__Z_partialmethod)r$   rs   r!   )r$   r"   _make_unbound_methode  s    z"partialmethod._make_unbound_methodc             C   s   t | jdd }d }|d k	rd|||}|| jk	rdt|f| j| j}y|j|_W n tk
rb   Y nX |d kr||  ||}|S )Nrn   )	r   rG   r	   rH   rI   __self__r   ru   rn   )r$   r@   r:   getresultZnew_funcr!   r!   r"   rn   p  s    

zpartialmethod.__get__c             C   s   t | jddS )Nrt   F)r   rG   )r$   r!   r!   r"   rt     s    z"partialmethod.__isabstractmethod__N)	r   r   r   rA   rd   ru   rn   propertyrt   r!   r!   r!   r"   r
   >  s
   Z	CacheInfohitsmissesmaxsizeZ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 )N)r~   )r$   Ztuphashr!   r!   r"   rA     s    z_HashedSeq.__init__c             C   s   | j S )N)r~   )r$   r!   r!   r"   rE     s    z_HashedSeq.__hash__N)r   r   r   rD   r   rA   rE   r!   r!   r!   r"   r}     s   r}   Nc       
         s   | }|r*||7 }x|  D ]}	||	7 }qW |rl|| fdd| D 7 }|r|| fdd| D 7 }n$||dkr |d |kr|d S t|S )Nc             3   s   | ]} |V  qd S )Nr!   )r8   r[   )r_   r!   r"   rX     s    z_make_key.<locals>.<genexpr>c             3   s   | ]} |V  qd S )Nr!   )r8   r[   )r_   r!   r"   rX     s       r   )ra   valuesr}   )
rH   rj   typedZkwd_markZ	fasttypesrO   r_   rM   keyitemr!   )r_   r"   	_make_key  s     r      Fc                s,    d k	rt  tstd fdd}|S )Nz)Expected maxsize to be an integer or Nonec                s   t |  t}t|| S )N)_lru_cache_wrapper
_CacheInfor   )user_functionr   )r|   r   r!   r"   decorating_function  s    z&lru_cache.<locals>.decorating_function)rg   intrL   )r|   r   r   r!   )r|   r   r"   r     s    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 kr	fdd}n* 	
fdd}	
fdd	}	
fd
d}||_||_|S )N)r   r   rK      r   Fc                 s   | |} d7  |S )Nr   r!   )rH   rj   rx   )r{   r   r!   r"   r     s    
z#_lru_cache_wrapper.<locals>.wrapperc                 sH   | |}|}|k	r*d7 |S | |}| |< d7 |S )Nr   r!   )rH   rj   r   rx   )cache	cache_getrz   make_keyr{   sentinelr   r   r!   r"   r     s    

c           	      s2  
| |}	f |}|d k	rr|\}}}}||< ||<  }| |< < ||< |< d7 |S W d Q R X | |}	 |krnr}	||	 < ||	< |	   }
 }d   < < |
= |	|< n6 }|||g}| |<  < |<  kd7 W d Q R X |S )Nr   r!   )rH   rj   r   linkZ	link_prevZ	link_nextZ_keyrx   ZlastZoldrootZoldkeyZ	oldresult)KEYNEXTPREVRESULTr   r   	cache_lenfullrz   lockr   r|   r{   r?   r   r   r!   r"   r     sB    


c            	      s       S Q R X d S )Nr!   r!   )r   r   rz   r   r|   r{   r!   r"   
cache_infoD  s    z&_lru_cache_wrapper.<locals>.cache_infoc            	      s<   .     d d gd d < d dW d Q R X d S )Nr   F)clearr!   )r   r   rz   r   r{   r?   r!   r"   cache_clearI  s
    z'_lru_cache_wrapper.<locals>.cache_clear)r7   r   rw   __len__r   r   r   )r   r|   r   r   r   r   r   r!   )r   r   r   r   r   r   r   r   r   rz   r   r   r|   r{   r?   r   r   r   r"   r     s*    *9	r   )r   c             C   s   g }xdd | D } | s|S x:| D ]2}|d }x$| D ]}||dd  kr4d }P q4W P q"W |d krht d|| x| D ]}|d |krx|d= qxW qW d S )Nc             S   s   g | ]}|r|qS r!   r!   )r8   sr!   r!   r"   
<listcomp>h  s    z_c3_merge.<locals>.<listcomp>r   r   zInconsistent hierarchy)RuntimeErrorappend)Z	sequencesrx   Zs1Z	candidateZs2Zseqr!   r!   r"   	_c3_merge`  s$    



r   c       
         s$  x8t t| jD ]"\}tdrt| j| }P qW d} rFt ng  t| jd | }g }t| j|d  }x8 D ]0t| rxtfdd| jD sx| qxW x|D ] 	 qW  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 )N)
issubclass)r8   b)baser!   r"   rX     s    z_c3_mro.<locals>.<genexpr>c                s   g | ]}t | d qS ))abcs)_c3_mro)r8   r   )r   r!   r"   r     s    z_c3_mro.<locals>.<listcomp>c                s   g | ]}t | d qS ))r   )r   )r8   r   )r   r!   r"   r     s    c                s   g | ]}t | d qS ))r   )r   )r8   r   )r   r!   r"   r     s    )	enumeratereversed	__bases__rP   rM   listr   anyr   remover   )
r:   r   iZboundaryZexplicit_basesZabstract_basesZother_basesZexplicit_c3_mrosZabstract_c3_mrosZother_c3_mrosr!   )r   r   r"   r   {  s(    


r   c                s   t j  fddfddD fddfddD t g }xD ]}g }x<| D ]0}| krlt|rl|fdd|jD  qlW |s|| qZ|jtd	d
 x,|D ]$}x|D ]}||kr|| qW qW qZW t|dS )Nc                s   |  kot | dot| S )N__mro__)rP   r   )typ)basesr:   r!   r"   
is_related  s    z _compose_mro.<locals>.is_relatedc                s   g | ]} |r|qS r!   r!   )r8   n)r   r!   r"   r     s    z _compose_mro.<locals>.<listcomp>c                s(   x" D ]}| |kr| |j krdS qW 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!   )r8   r   )r   r!   r"   r     s    c                s   g | ]}| kr|qS r!   r!   )r8   r   )type_setr!   r"   r     s    T)r   reverse)r   )setr   __subclasses__r   r   sortrM   r   )r:   r   mror   ZfoundsubZsubclsr!   )r   r:   r   r   r   r   r"   _compose_mro  s*    




r   c             C   sv   t | | }d }xX|D ]P}|d k	r\||krZ|| jkrZ|| jkrZt||sZtd||P ||kr|}qW ||S )NzAmbiguous dispatch: {} or {})r   keysr   r   r   ro   rw   )r:   registryr   matchtr!   r!   r"   
_find_impl  s    




r   c                s   dd l }dd l}i | d   fddd fdd	fdd}| t< |_|_||_j|_	t
||  |S )	Nr   c                s|    d k	r"t  } |kr"  | y|  }W nH tk
rv   y|  }W n tk
rh   t| }Y nX || < Y nX |S )N)r   r   KeyErrorr   )r:   Zcurrent_tokenZimpl)cache_tokendispatch_cacher   r!   r"   dispatch  s    z singledispatch.<locals>.dispatchc                s   |d krht  tr  fddS t di }|s@td d }ddlm} tt|| \} | < d krt	 drt
   |S )	Nc                s
    | S )Nr!   )f)r:   registerr!   r"   <lambda>  s    z2singledispatch.<locals>.register.<locals>.<lambda>r   z(Invalid first argument to `register()`: zS. Use either `@register(some_class)` or plain `@register` on an annotated function.r   )get_type_hintsr   )rg   r_   r   rL   Ztypingr   nextiterra   rP   r   r   )r:   rG   Zannr   Zargname)r   r   r   r   )r:   r"   r     s    
z singledispatch.<locals>.registerc                 s    | d j | |S )Nr   )rT   )rH   Zkw)r   r!   r"   r   3  s    zsingledispatch.<locals>.wrapper)N)r   weakrefZWeakKeyDictionaryr7   r   r   MappingProxyTyper   r   Z_clear_cacher   )rG   r   r   r   r!   )r   r   r   r   r   r"   r     s    
)r   F)N)4__all__Z
_functoolsr   ImportErrorabcr   Zcollectionsr   Zreprlibr   _threadr   r   r   r   r   r&   r(   r)   r*   r,   r-   r.   r0   r1   r2   r4   r5   r6   r<   r   r   r	   r7   r
   r   r   r}   r   str	frozensetr_   rO   rM   r   r   r   r   r   r   r   r   r!   r!   r!   r"   <module>   s   

NN
%t
-)