B
    18\~                 @   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'he(e)e*fd?d@Z+dQdCdZ,dDdE Z-yddFlm-Z- W n ek
rn   Y nX dGdH Z.dRdJdKZ/dLdM Z0dNdO Z1dPd
 Z2dIS )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update__wrapped__)wrapperwrappedassignedupdatedattrvalue r"   M/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/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    
r1   c             C   s   |  |}|p| |kS )N)r0   )r%   r&   r'   r(   r"   r"   r#   _ge_from_gt   s    
r2   c             C   s   |  |}||kr|S | S )N)r0   )r%   r&   r'   r(   r"   r"   r#   _le_from_gt   s    
r3   c             C   s$   |  |}||kr|S | p"| |kS )N)__ge__)r%   r&   r'   r(   r"   r"   r#   _le_from_ge   s    
r5   c             C   s"   |  |}||kr|S |o | |kS )N)r4   )r%   r&   r'   r(   r"   r"   r#   _gt_from_ge   s    
r6   c             C   s   |  |}||kr|S | S )N)r4   )r%   r&   r'   r(   r"   r"   r#   _lt_from_ge   s    
r7   r0   r,   r4   r$   )r$   r,   r0   r4   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).0Z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#   r0      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#   r4      s    zcmp_to_key.<locals>.K.__ge__N)r   r   r   	__slots__rA   r$   r0   rC   r,   r4   __hash__r"   )rB   r"   r#   K   s   rF   )r8   )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)r9   xr"   r"   r#   	<genexpr>  s    z#partial.__repr__.<locals>.<genexpr>c             s   s    | ]\}}| d |V  qdS )=Nr"   )r9   kvr"   r"   r#   rX     s    	functoolsz
functools.(z, ))
typer   rV   rG   extendrH   rI   itemsr   join)r%   Z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   rc   rd   rk   __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   formatrf   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)rn   )r9   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   rn   rT   r   r   rG   )r%   rH   rI   Zformat_stringr"   r"   r#   rc   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%   rr   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 )Nrm   )	r   rG   r	   rH   rI   __self__r   rt   rm   )r%   r@   r:   getresultZnew_funcr"   r"   r#   rm   p  s    

zpartialmethod.__get__c             C   s   t | jddS )Nrs   F)r   rG   )r%   r"   r"   r#   rs     s    z"partialmethod.__isabstractmethod__N)	r   r   r   rA   rc   rt   rm   propertyrs   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|   c       
         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"   )r9   r[   )r_   r"   r#   rX     s    z_make_key.<locals>.<genexpr>c             3   s   | ]} |V  qd S )Nr"   )r9   r[   )r_   r"   r#   rX     s       r   )ra   valuesr|   )
rH   ri   typedZkwd_markZ	fasttypesrO   r_   rM   keyitemr"   )r_   r#   	_make_key  s     r      Fc                s:   t  tr dk r(d n d k	r(td fdd}|S )Nr   z)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)rf   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   ri   rw   )rz   r   r"   r#   r     s    
z#_lru_cache_wrapper.<locals>.wrapperc                 sH   | |}|}|k	r*d7 |S d7 | |}| |< |S )Nr   r"   )rH   ri   r   rw   )cache	cache_getry   make_keyrz   sentinelr   r   r"   r#   r     s    

c           	      s2  
| |}	n |}|d k	rr|\}}}}||< ||<  }| |< < ||< |< d7 |S d7 W d Q R X | |}	 |krnr}	||	 < ||	< |	   }
 }d   < < |
= |	|< n6 }|||g}| |<  < |<  kW d Q R X |S )Nr   r"   )rH   ri   r   linkZ	link_prevZ	link_nextZ_keyrw   ZlastZoldrootZoldkeyZ	oldresult)KEYNEXTPREVRESULTr   r   	cache_lenfullry   lockr   r{   rz   r?   r   r   r"   r#   r     sB    

c            	      s       S Q R X d S )Nr"   r"   )r   r   ry   r   r{   rz   r"   r#   
cache_infoG  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   ry   r   rz   r?   r"   r#   cache_clearL  s
    z'_lru_cache_wrapper.<locals>.cache_clear)r8   r   rv   __len__r   r   r   )r   r{   r   r   r   r   r   r"   )r   r   r   r   r   r   r   r   r   ry   r   r   r{   rz   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"   )r9   sr"   r"   r#   
<listcomp>k  s    z_c3_merge.<locals>.<listcomp>r   r   zInconsistent hierarchy)RuntimeErrorappend)Z	sequencesrw   s1Z	candidates2seqr"   r"   r#   	_c3_mergec  s$    



r   Nc       
         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)r9   b)baser"   r#   rX     s    z_c3_mro.<locals>.<genexpr>c                s   g | ]}t | d qS ))abcs)_c3_mro)r9   r   )r   r"   r#   r     s    z_c3_mro.<locals>.<listcomp>c                s   g | ]}t | d qS ))r   )r   )r9   r   )r   r"   r#   r     s    c                s   g | ]}t | d qS ))r   )r   )r9   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"   )r9   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"   )r9   r   )r   r"   r#   r     s    c                s   g | ]}| kr|qS r"   r"   )r9   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   rn   rv   )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| 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>       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   )rf   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&   | st  d | d j| |S )Nz( requires at least 1 positional argumentr   )rL   rT   )rH   kw)r   funcnamer"   r#   r   6  s    zsingledispatch.<locals>.wrapperr   zsingledispatch function)N)r   weakrefZWeakKeyDictionaryr   r8   r   r   ZMappingProxyTyper   r   Z_clear_cacher   )rG   r   r   r   r"   )r   r   r   r   r   r   r#   r     s    
)r   F)N)3__all__Z
_functoolsr   ImportErrorabcr   collectionsr   reprlibr   _threadr   r   r   r   r   r'   r)   r*   r+   r-   r.   r/   r1   r2   r3   r5   r6   r7   r<   r   r   r	   r8   r
   r   r   r|   r   strrO   r_   rM   r   r   r   r   r   r   r   r   r"   r"   r"   r#   <module>   s   

NN
(t
-)