U
    ·ÜŸj&  ã                   @   sà  d Z ddlZddlZddlZddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ eeeef\ZZZZejZedd	„ d
D ƒƒZedd	„ dD ƒƒZe d¡Zzer¸ddlZne‚W n ek
rÖ   dZY n2X zej dd� W n e!k
�r   e  ¡  Y nX d2dd„Z"zddl"m"Z" W n e#k
�r8   Y nX G dd„ dƒZ$G dd„ dƒZ%G dd„ dƒZ&G dd„ de&ƒZ'G dd„ de&ƒZ(G dd„ de&ƒZ)d d!„ Z*d"d#„ Z+d$d%„ Z,d&d'„ Z-d(d)„ Z.d*d+„ Z/d,d-„ Z0d.d/„ Z1d0d1„ Z2dS )3z*
General helpers required for `tqdm.std`.
é    N)ÚpartialÚpartialmethodÚwraps)Ú	signature©Úeast_asian_width)Úwarn©Úproxyc                 c   s   | ]}t  |¡V  qd S ©N©ÚCUR_OSÚ
startswith©Ú.0Úi© r   ú./tmp/pip-unpacked-wheel-ktn_y856/tqdm/utils.pyÚ	<genexpr>   s     r   )Úwin32Úcygwinc                 c   s   | ]}t  |¡V  qd S r   r   r   r   r   r   r      s     )ÚaixÚlinuxÚdarwinZfreebsdz\x1b\[[;\d]*[A-Za-z]F)ÚstripÚ c                    s°   ˆdkri ‰| d dkr2| dd… } t dtdd� |rH| | › d|› �fn| f}i ‰ |D ]8‰ˆ ¡ d ‰tˆƒ‰ˆ  ‡‡fdd„tj ¡ D ƒ¡ qV|r˜tnt	‰‡ ‡‡fd	d
„}|S )z€
    Basic (env-only) version of [envwrap](https://github.com/tqdm/envwrap).
    Install `envwrap` for config file support.
    NéÿÿÿÿÚ_z*Trailing underscore in `name` is automaticé   ©Ú
stacklevelc                 3   s0   | ](\}}|  ˆ¡r|ˆ d …  ¡ |fV  qd S r   )r   Úlower©r   ÚkÚv)r   Úprefixr   r   r   1   s    
 zenvwrap.<locals>.<genexpr>c              
      sâ   t | ƒj‰ ‡ fdd„ˆ ¡ D ƒ}|D ]°}ˆ | }|j|jk	r„t|jd|jfƒD ]2}z||| ƒ||< W n tk
rz   Y qNX  qÔqNq$|jd k	r¦t|jƒ|| ƒ||< q$zˆ| || ƒ||< W q$ t	k
rÒ   Y q$X q$ˆ| f|ŽS )Nc                    s   i | ]\}}|ˆ kr||“qS r   r   r"   ©Úparamsr   r   Ú
<dictcomp>8   s       z)envwrap.<locals>.wrap.<locals>.<dictcomp>Ú__args__)
r   Ú
parametersÚitemsÚ
annotationÚemptyÚgetattrÚ	ExceptionÚdefaultÚtypeÚKeyError)ÚfuncZ	overridesr#   ÚparamÚtyp)Úenv_overridesÚpartÚtypesr&   r   Úwrap5   s$    

zenvwrap.<locals>.wrap)
r   ÚDeprecationWarningÚupperÚlenÚupdateÚosÚenvironr+   r   r   )ÚnameZappr8   Z	is_methodÚprefixesr9   r   )r6   r   r7   r%   r8   r   Úenvwrap"   s     ÿ
rB   )rB   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	ÚFormatReplacezN
    >>> a = FormatReplace('something')
    >>> f"{a:5d}"
    'something'
    r   c                 C   s   || _ d| _d S ©Nr   )ÚreplaceÚformat_called)ÚselfrE   r   r   r   Ú__init__[   s    zFormatReplace.__init__c                 C   s   |  j d7  _ | jS )Né   )rF   rE   )rG   r   r   r   r   Ú
__format___   s    zFormatReplace.__format__N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rH   rJ   r   r   r   r   rC   U   s   
rC   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )Ú
Comparablez1Assumes child has self._comparable attr/@propertyc                 C   s   | j |j k S r   ©Z_comparable©rG   Úotherr   r   r   Ú__lt__f   s    zComparable.__lt__c                 C   s   | |k p| |kS r   r   rQ   r   r   r   Ú__le__i   s    zComparable.__le__c                 C   s   | j |j kS r   rP   rQ   r   r   r   Ú__eq__l   s    zComparable.__eq__c                 C   s
   | |k S r   r   rQ   r   r   r   Ú__ne__o   s    zComparable.__ne__c                 C   s
   | |k S r   r   rQ   r   r   r   Ú__gt__r   s    zComparable.__gt__c                 C   s
   | |k  S r   r   rQ   r   r   r   Ú__ge__u   s    zComparable.__ge__N)
rK   rL   rM   rN   rS   rT   rU   rV   rW   rX   r   r   r   r   rO   d   s   rO   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚObjectWrapperc                 C   s   t | j|ƒS r   )r.   Ú_wrapped©rG   r@   r   r   r   Ú__getattr__z   s    zObjectWrapper.__getattr__c                 C   s   t | j||ƒS r   )ÚsetattrrZ   ©rG   r@   Úvaluer   r   r   Ú__setattr__}   s    zObjectWrapper.__setattr__c                 C   s2   zt  | |¡W S  tk
r,   t| |ƒ Y S X dS )z7Actual `self.getattr` rather than self._wrapped.getattrN)Úobjectr\   ÚAttributeErrorr.   r[   r   r   r   Úwrapper_getattr€   s    zObjectWrapper.wrapper_getattrc                 C   s   t  | ||¡S )z7Actual `self.setattr` rather than self._wrapped.setattr)ra   r`   r^   r   r   r   Úwrapper_setattr‡   s    zObjectWrapper.wrapper_setattrc                 C   s   |   d|¡ dS )z4
        Thin wrapper around a given object
        rZ   N)rd   )rG   Úwrappedr   r   r   rH   ‹   s    zObjectWrapper.__init__N)rK   rL   rM   r\   r`   rc   rd   rH   r   r   r   r   rY   y   s
   rY   c                       s0   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚSimpleTextIOWrapperz™
    Change only `.write()` of the wrapped object by encoding the passed
    value and passing the result to the wrapped object's `.write()` method.
    c                    s   t ƒ  |¡ |  d|¡ d S )NÚencoding)ÚsuperrH   rd   )rG   re   rg   ©Ú	__class__r   r   rH   ˜   s    zSimpleTextIOWrapper.__init__c                 C   s   | j  | |  d¡¡¡S )zP
        Encode `s` and pass to the wrapped object's `.write()` method.
        rg   )rZ   ÚwriteÚencoderc   )rG   Úsr   r   r   rk   œ   s    zSimpleTextIOWrapper.writec                 C   s   | j t|d|ƒkS ©NrZ   ©rZ   r.   rQ   r   r   r   rU   ¢   s    zSimpleTextIOWrapper.__eq__)rK   rL   rM   rN   rH   rk   rU   Ú__classcell__r   r   ri   r   rf   ’   s   rf   c                       s4   e Zd ZdZedd„ ƒZ‡ fdd„Zdd„ Z‡  ZS )ÚDisableOnWriteErrorzO
    Disable the given `tqdm_instance` upon `write()` or `flush()` errors.
    c                    s   t ˆƒ‰‡ ‡fdd„}|S )zV
        Quietly set `tqdm_instance.miniters=inf` if `func` raises `errno=5`.
        c                     s¶   zˆ | |ŽW S  t k
r^ } z4|jdkr*‚ ztdƒˆ_W n tk
rL   Y nX W 5 d }~X Y nT tk
r° } z6dt|ƒkr|‚ ztdƒˆ_W n tk
rž   Y nX W 5 d }~X Y nX d S )Né   ÚinfÚclosed)ÚOSErrorÚerrnoÚfloatZminitersÚReferenceErrorÚ
ValueErrorÚstr)ÚargsÚkwargsÚe©r3   Útqdm_instancer   r   Úinner±   s     
z7DisableOnWriteError.disable_on_exception.<locals>.innerr	   )r   r3   r€   r   r~   r   Údisable_on_exceptionª   s    z(DisableOnWriteError.disable_on_exceptionc                    sP   t ƒ  |¡ t|dƒr,|  d|  ||j¡¡ t|dƒrL|  d|  ||j¡¡ d S )Nrk   Úflush)rh   rH   Úhasattrrd   r�   rk   r‚   )rG   re   r   ri   r   r   rH   Ä   s    
 ÿ
 ÿzDisableOnWriteError.__init__c                 C   s   | j t|d|ƒkS rn   ro   rQ   r   r   r   rU   Í   s    zDisableOnWriteError.__eq__)	rK   rL   rM   rN   Ústaticmethodr�   rH   rU   rp   r   r   ri   r   rq   ¦   s
   
	rq   c                       s   e Zd Zd‡ fdd„	Z‡  ZS )ÚCallbackIOWrapperÚreadc                    sz   t ƒ  |¡ t||ƒ‰|dkrBtˆƒ‡ ‡fdd„ƒ}|  d|¡ n4|dkrntˆƒ‡ ‡fdd„ƒ}|  d|¡ ntdƒ‚dS )	z{
        Wrap a given `file`-like object's `read()` or `write()` to report
        lengths to the given `callback`
        rk   c                    s    ˆ| f|ž|Ž}ˆ t | ƒƒ |S r   ©r<   )Údatar{   r|   Úres©Úcallbackr3   r   r   rk   Ú   s    z)CallbackIOWrapper.__init__.<locals>.writer†   c                     s   ˆ| |Ž}ˆ t |ƒƒ |S r   r‡   )r{   r|   rˆ   rŠ   r   r   r†   á   s    
z(CallbackIOWrapper.__init__.<locals>.readz Can only wrap read/write methodsN)rh   rH   r.   r   rd   r2   )rG   r‹   ÚstreamÚmethodrk   r†   ri   rŠ   r   rH   Ò   s    
zCallbackIOWrapper.__init__)r†   )rK   rL   rM   rH   rp   r   r   ri   r   r…   Ñ   s   r…   c                 C   sv   zd  | ¡ W n^ tk
r$   Y dS  tk
rl   z|  ¡  d¡pHd| kW  Y S  tk
rf   Y Y dS X Y nX dS d S )Nu   â–ˆâ–‰Fzutf-ZU8T)rl   ÚUnicodeEncodeErrorr/   r!   r   )rg   r   r   r   Ú_is_utfë   s    r�   c                 C   s(   zt | jƒW S  tk
r"   Y dS X d S )NF)r�   rg   rb   ©Úfpr   r   r   Ú_supports_unicodeù   s    r’   c                 C   s2   t | tƒr*| D ]}t|ƒdkr dS qdS t| ƒS )Néÿ   FT)Ú
isinstancerz   Úordr’   )rm   Úcr   r   r   Ú	_is_ascii   s    
r—   c                  C   s   dd„ } | S )zy
    Return a function which returns console dimensions (width, height).
    Supported: linux, osx, windows, cygwin.
    c                 S   sT   z8ddl m} |t| ddd„ ƒƒ ƒ\}}|d |d fW S  tk
rN   Y dS X d S )Nr   )Úget_terminal_sizeÚfilenoc                   S   s   d S r   r   r   r   r   r   Ú<lambda>  ó    z6_screen_shape_wrapper.<locals>.inner.<locals>.<lambda>rI   )NN)r>   r˜   r.   r/   )r‘   r˜   ÚcolsÚlinesr   r   r   r€     s    z$_screen_shape_wrapper.<locals>.innerr   ©r€   r   r   r   Ú_screen_shape_wrapper	  s    rŸ   c                     s4   t dtdd� tƒ ‰ ˆ sdS tˆ ƒ‡ fdd„ƒ} | S )zd
    Return a function which returns console width.
    Supported: linux, osx, windows, cygwin.
    zQUse `_screen_shape_wrapper()(file)[0]` instead of `_environ_cols_wrapper()(file)`r   r   Nc                    s   ˆ | ƒd S rD   r   r�   ©Úshaper   r   r€   $  s    z$_environ_cols_wrapper.<locals>.inner)r   r:   rŸ   r   rž   r   r    r   Ú_environ_cols_wrapper  s     ÿr¢   c                   C   s   t jdkrtd krdS dS )NÚntr   z[A)r>   r@   Úcoloramar   r   r   r   Ú_term_move_up+  s    r¥   c                 C   s   t dd„ t| ƒD ƒƒS )Nc                 s   s"   | ]}t |ƒd krdndV  qdS )ZFWr   rI   Nr   )r   Úchr   r   r   r   0  s     z_text_width.<locals>.<genexpr>)Úsumrz   )rm   r   r   r   Ú_text_width/  s    r¨   c                 C   s   t t d| ¡ƒS )zp
    Returns the real on-screen length of a string which may contain
    ANSI control codes and wide chars.
    r   )r¨   ÚRE_ANSIÚsub)rˆ   r   r   r   Údisp_len3  s    r«   c                 C   sp   t | ƒt| ƒkr| d|… S tt | ¡ƒ}t| ƒ|krD| dd… } q*|rltt | ¡ƒrl|  d¡rd| S | d S | S )zB
    Trim a string which may contain ANSI control characters.
    Nr   z[0m)r<   r«   Úboolr©   ÚsearchÚendswith)rˆ   ÚlengthZansi_presentr   r   r   Ú	disp_trim;  s    r°   )r   NF)3rN   r>   ÚreÚsysÚ	functoolsr   r   r   Úinspectr   Úunicodedatar   Úwarningsr   Úweakrefr
   ÚrangeÚchrrz   Ú_rangeZ_unichZ_unicodeZ_basestringÚplatformr   ÚanyZIS_WINZIS_NIXÚcompiler©   r¤   ÚImportErrorÚinitÚ	TypeErrorrB   ÚModuleNotFoundErrorrC   rO   rY   rf   rq   r…   r�   r’   r—   rŸ   r¢   r¥   r¨   r«   r°   r   r   r   r   Ú<module>   sV   



-+	