U
    M»{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 d6dd„Z"G dd„ de#ƒZ$G dd„ de#ƒZ%G dd„ de#ƒ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-„ Z1d.d/„ Z2d0d1„ Z3d2d3„ Z4d4d5„ Z5dS )7z*
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   úI/var/www/html/bwave/python/venv/lib/python3.8/site-packages/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ÚdarwinÚfreebsdz\x1b\[[;\d]*[A-Za-z]F)Ústripc                    sN   ˆdkri ‰t ˆƒ‰‡‡fdd„tj ¡ D ƒ‰ |r6tnt‰‡ ‡‡fdd„}|S )a  
    Override parameter defaults via `os.environ[prefix + param_name]`.
    Maps UPPER_CASE env vars map to lower_case param names.
    camelCase isn't supported (because Windows ignores case).

    Precedence (highest first):

    - call (`foo(a=3)`)
    - environ (`FOO_A=2`)
    - signature (`def foo(a=1)`)

    Parameters
    ----------
    prefix  : str
        Env var prefix, e.g. "FOO_"
    types  : dict, optional
        Fallback mappings `{'param_name': type, ...}` if types cannot be
        inferred from function signature.
        Consider using `types=collections.defaultdict(lambda: ast.literal_eval)`.
    is_method  : bool, optional
        Whether to use `functools.partialmethod`. If (default: False) use `functools.partial`.

    Examples
    --------
    ```
    $ cat foo.py
    from tqdm.utils import envwrap
    @envwrap("FOO_")
    def test(a=1, b=2, c=3):
        print(f"received: a={a}, b={b}, c={c}")

    $ FOO_A=42 FOO_C=1337 python -c 'import foo; foo.test(c=99)'
    received: a=42, b=2, c=99
    ```
    Nc                    s,   i | ]$\}}|  ˆ¡r|ˆ d …  ¡ |“qS r   )r   Úlower©r   ÚkÚv)r   Úprefixr   r   Ú
<dictcomp>I   s     
  zenvwrap.<locals>.<dictcomp>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   r!   O   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   ÚwrapL   s$    

zenvwrap.<locals>.wrap)ÚlenÚosÚenvironr&   r   r   )r    r3   Z	is_methodr4   r   )r1   r   r2   r    r3   r   Úenvwrap"   s    $r8   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'
    Ú c                 C   s   || _ d| _d S ©Nr   )ÚreplaceÚformat_called)Úselfr<   r   r   r   Ú__init__l   s    zFormatReplace.__init__c                 C   s   |  j d7  _ | jS )Né   )r=   r<   )r>   Ú_r   r   r   Ú
__format__p   s    zFormatReplace.__format__N)r:   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r?   rB   r   r   r   r   r9   f   s   
r9   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©r>   Úotherr   r   r   Ú__lt__w   s    zComparable.__lt__c                 C   s   | |k p| |kS r   r   rI   r   r   r   Ú__le__z   s    zComparable.__le__c                 C   s   | j |j kS r   rH   rI   r   r   r   Ú__eq__}   s    zComparable.__eq__c                 C   s
   | |k S r   r   rI   r   r   r   Ú__ne__€   s    zComparable.__ne__c                 C   s
   | |k S r   r   rI   r   r   r   Ú__gt__ƒ   s    zComparable.__gt__c                 C   s
   | |k  S r   r   rI   r   r   r   Ú__ge__†   s    zComparable.__ge__N)
rC   rD   rE   rF   rK   rL   rM   rN   rO   rP   r   r   r   r   rG   u   s   rG   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©r>   Únamer   r   r   Ú__getattr__‹   s    zObjectWrapper.__getattr__c                 C   s   t | j||ƒS r   )ÚsetattrrR   ©r>   rT   Ú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)ÚobjectrU   ÚAttributeErrorr)   rS   r   r   r   Úwrapper_getattr‘   s    zObjectWrapper.wrapper_getattrc                 C   s   t  | ||¡S )z7Actual `self.setattr` rather than self._wrapped.setattr)rZ   rY   rW   r   r   r   Úwrapper_setattr˜   s    zObjectWrapper.wrapper_setattrc                 C   s   |   d|¡ dS )z4
        Thin wrapper around a given object
        rR   N)r]   )r>   Úwrappedr   r   r   r?   œ   s    zObjectWrapper.__init__N)rC   rD   rE   rU   rY   r\   r]   r?   r   r   r   r   rQ   Š   s
   rQ   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)Úsuperr?   r]   )r>   r^   r`   ©Ú	__class__r   r   r?   ©   s    zSimpleTextIOWrapper.__init__c                 C   s   | j  | |  d¡¡¡S )zP
        Encode `s` and pass to the wrapped object's `.write()` method.
        r`   )rR   ÚwriteÚencoder\   )r>   Úsr   r   r   rd   ­   s    zSimpleTextIOWrapper.writec                 C   s   | j t|d|ƒkS ©NrR   ©rR   r)   rI   r   r   r   rM   ³   s    zSimpleTextIOWrapper.__eq__)rC   rD   rE   rF   r?   rd   rM   Ú__classcell__r   r   rb   r   r_   £   s   r_   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©r.   Útqdm_instancer   r   ÚinnerÂ   s     
z7DisableOnWriteError.disable_on_exception.<locals>.innerr	   )rx   r.   ry   r   rw   r   Údisable_on_exception»   s    z(DisableOnWriteError.disable_on_exceptionc                    sP   t ƒ  |¡ t|dƒr,|  d|  ||j¡¡ t|dƒrL|  d|  ||j¡¡ d S )Nrd   Úflush)ra   r?   Úhasattrr]   rz   rd   r{   )r>   r^   rx   rb   r   r   r?   Õ   s    
 ÿ
 ÿzDisableOnWriteError.__init__c                 C   s   | j t|d|ƒkS rg   rh   rI   r   r   r   rM   Þ   s    zDisableOnWriteError.__eq__)	rC   rD   rE   rF   Ústaticmethodrz   r?   rM   ri   r   r   rb   r   rj   ·   s
   
	rj   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`
        rd   c                    s    ˆ| f|ž|Ž}ˆ t | ƒƒ |S r   ©r5   )Údatart   ru   Úres©Úcallbackr.   r   r   rd   ë   s    z)CallbackIOWrapper.__init__.<locals>.writer   c                     s   ˆ| |Ž}ˆ t |ƒƒ |S r   r€   )rt   ru   r�   rƒ   r   r   r   ò   s    
z(CallbackIOWrapper.__init__.<locals>.readz Can only wrap read/write methodsN)ra   r?   r)   r   r]   r-   )r>   r„   ÚstreamÚmethodrd   r   rb   rƒ   r   r?   ã   s    
zCallbackIOWrapper.__init__)r   )rC   rD   rE   r?   ri   r   r   rb   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)re   ÚUnicodeEncodeErrorr*   r   r   )r`   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ˆ   r`   r[   ©Ú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)Ú
isinstancers   Úordr‹   )rf   Úcr   r   r   Ú	_is_ascii  s    
r�   c                  C   s$   d} t rt} | dkrt} tr t} | S )zy
    Return a function which returns console dimensions (width, height).
    Supported: linux, osx, windows, cygwin.
    N)ÚIS_WINÚ_screen_shape_windowsÚ_screen_shape_tputÚIS_NIXÚ_screen_shape_linux)Z_screen_shaper   r   r   Ú_screen_shape_wrapper  s    r–   c                 C   sÀ   z¦dd l }ddlm}m} ddlm}m} d}| |kr<d}n| |krHd}|j |¡}|dƒ}|j 	||¡}	|	r¤| 
d|j¡\}
}}}}}}}}}}|| || fW S W n tk
rº   Y nX d	S )
Nr   )Úcreate_string_bufferÚwindll)ÚstdinÚstdoutiôÿÿÿiöÿÿÿiõÿÿÿé   ZhhhhHhhhhhh©NN)ÚstructÚctypesr—   r˜   Úsysr™   rš   Úkernel32ZGetStdHandleZGetConsoleScreenBufferInfoÚunpackÚrawr*   )rŠ   r�   r—   r˜   r™   rš   Z	io_handleÚhZcsbir‚   Z_bufxZ_bufyZ_curxZ_curyZ_wattrÚleftÚtopÚrightÚbottomZ_maxxZ_maxyr   r   r   r’   )  s*    ÿ r’   c                     sD   z*ddl ‰ddlm‰  ‡ ‡fdd„dD ƒW S  tk
r>   Y nX dS )zcygwin xterm (windows)r   N)Ú
check_callc                    s&   g | ]}t ˆ ˆ d | ¡ƒƒd ‘qS )ztput r@   )ÚintÚsplitr   ©r¨   Úshlexr   r   Ú
<listcomp>F  s   ÿz&_screen_shape_tput.<locals>.<listcomp>)ÚcolsÚlinesrœ   )r¬   Ú
subprocessr¨   r*   )rA   r   r«   r   r“   A  s    ÿr“   c                 C   s´   z(ddl m } ddlm} ddlm} W n tk
r>   Y dS X z(|d|| |dƒƒd d… \}}||fW S  tk
r®   zd	d
„ dD ƒW  Y S  ttfk
r¨   Y Y dS X Y nX d S )Nr   )Úarray)Úioctl)Ú
TIOCGWINSZrœ   r£   z        é   c                 S   s   g | ]}t tj| ƒd  ‘qS )r@   )r©   r6   r7   r   r   r   r   r­   [  s     z'_screen_shape_linux.<locals>.<listcomp>)ÚCOLUMNSÚLINES)	r±   Zfcntlr²   Útermiosr³   ÚImportErrorr*   r-   rr   )rŠ   r±   r²   r³   Úrowsr®   r   r   r   r•   M  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´   )Ú
stacklevelNc                    s   ˆ | ƒd S r;   r   r‰   ©Úshaper   r   ry   k  s    z$_environ_cols_wrapper.<locals>.inner)r   ÚDeprecationWarningr–   r   )ry   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)r6   rT   Úcoloramar   r   r   r   Ú_term_move_upr  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´   r@   Nr   )r   Úchr   r   r   r   w  s     z_text_width.<locals>.<genexpr>)Úsumrs   )rf   r   r   r   Ú_text_widthv  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_lenz  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.
    Néÿÿÿÿz[0m)r5   rÇ   ÚboolrÅ   ÚsearchÚendswith)r�   ÚlengthZansi_presentr   r   r   Ú	disp_trim‚  s    rÍ   )NF)6rF   r6   ÚrerŸ   Ú	functoolsr   r   r   Úinspectr   Úunicodedatar   Úwarningsr   Úweakrefr
   ÚrangeÚchrrs   Ú_rangeZ_unichZ_unicodeZ_basestringÚplatformr   Úanyr‘   r”   ÚcompilerÅ   rÀ   r¸   ÚinitÚ	TypeErrorr8   rZ   r9   rG   rQ   r_   rj   r~   rˆ   r‹   r�   r–   r’   r“   r•   r¾   rÁ   rÄ   rÇ   rÍ   r   r   r   r   Ú<module>   sT   



D+	