U
    ¬jÖ\F  ã                   @   sô   d dl Z d dlZzd dlmZmZ W nJ ek
rn   dZzd dlmZ W n  ek
rh   d dlmZ Y nX Y nX eƒ Z	dd„ Z
dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedkràdd„ Zndd„ Zdd„ ZdS ) é    N)Ú	ParameterÚ	signature)Úgetfullargspec)Ú
getargspecc                 C   s   | d S )z Add one to the current value é   © ©Úxr   r   ú=/usr/lib/python3/dist-packages/pyrsistent/_transformations.pyÚinc   s    r   c                 C   s   | d S )z% Subtract one from the current value r   r   r   r   r   r
   Údec   s    r   c                 C   s$   z
| |= W n t k
r   Y nX dS )zL Discard the element and returns a structure without the discarded elements N)ÚKeyError)ÚevolverÚkeyr   r   r
   Údiscard   s    
r   c                    s   t  | ¡‰ ‡ fdd„S )zE Regular expression matcher to use together with transform functions c                    s   t | tjƒoˆ  | ¡S ©N)Ú
isinstanceÚsixZstring_typesÚmatch)r   ©Úrr   r
   Ú<lambda>&   ó    zrex.<locals>.<lambda>)ÚreÚcompile)Úexprr   r   r
   Úrex#   s    
r   c                 C   s   dS )z  Matcher that matches any value Tr   )Ú_r   r   r
   Úny)   s    r   c                 c   s,   t dt| ƒ|ƒD ]}| ||| … V  qd S )Nr   )ÚrangeÚlen)ÚlÚnÚir   r   r
   Ú_chunks/   s    r$   c                 C   s(   | }t |dƒD ]\}}t|||ƒ}q|S )Né   )r$   Ú_do_to_path)Ú	structureZtransformationsr   ÚpathÚcommandr   r   r
   Ú	transform4   s    r*   c                 C   s<   |st |ƒr|| ƒS |S t| |d ƒ}t| ||dd … |ƒS )Nr   r   )ÚcallableÚ_get_keys_and_valuesÚ_update_structure)r'   r(   r)   Úkvsr   r   r
   r&   ;   s    r&   c                 C   s0   z
|   ¡ W S  tk
r*   tt| ƒƒ Y S X d S r   )ÚitemsÚAttributeErrorÚlistÚ	enumerate)r'   r   r   r
   Ú_itemsC   s    
r3   c              	   C   sB   z t | dƒr| | W S t| |ƒW S  ttfk
r<   | Y S X d S )NÚ__getitem__)ÚhasattrÚgetattrÚ
IndexErrorr   )r'   r   Údefaultr   r   r
   Ú_getK   s    

r9   c                    sf   t ˆ ƒrTtˆ ƒ}|dkr.‡ fdd„t| ƒD ƒS |dkrL‡ fdd„t| ƒD ƒS tdƒ‚ˆ t| ˆ tƒfgS )Nr   c                    s    g | ]\}}ˆ |ƒr||f‘qS r   r   ©Ú.0ÚkÚv©Úkey_specr   r
   Ú
<listcomp>]   s      z(_get_keys_and_values.<locals>.<listcomp>r%   c                    s"   g | ]\}}ˆ ||ƒr||f‘qS r   r   r:   r>   r   r
   r@   a   s     
 z5callable in transform path must take 1 or 2 arguments)r+   Ú
_get_arityr3   Ú
ValueErrorr9   Ú_EMPTY_SENTINEL)r'   r?   Zarityr   r>   r
   r,   V   s    ÿr,   c                 C   s    t | ƒ}t|jƒt|jpdƒ S )Nr   )r   r    ÚargsÚdefaults)ÚfZargspecr   r   r
   rA   m   s    rA   c                 C   s   t dd„ t| ƒj ¡ D ƒƒS )Nc                 s   s0   | ](}|j tjkr|jtjtjfkrd V  qdS )r   N)r8   r   ÚemptyZkindZPOSITIONAL_ONLYZPOSITIONAL_OR_KEYWORD)r;   Úpr   r   r
   Ú	<genexpr>r   s   üz_get_arity.<locals>.<genexpr>)Úsumr   Z
parametersÚvalues)rF   r   r   r
   rA   q   s    ýc           
      C   sŠ   ddl m} |  ¡ }|s>|tkr>t|ƒD ]\}}t||ƒ q(nD|D ]>\}}d}|tkr`d}|ƒ }t|||ƒ}	|	|k	sx|rB|	||< qB| ¡ S )Nr   )ÚpmapFT)Zpyrsistent._pmaprL   r   r   ÚreversedrC   r&   Z
persistent)
r'   r.   r(   r)   rL   Úer<   r=   Zis_emptyÚresultr   r   r
   r-   {   s    
r-   )r   r   Úinspectr   r   ÚImportErrorr   r   ÚobjectrC   r   r   r   r   r   r$   r*   r&   r3   r9   r,   rA   r-   r   r   r   r
   Ú<module>   s2   	

