B
    Jd&%                 @   s  d Z ddlZddlZddl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yerddlZneW n ek
r   dZY n0X yejdd W n ek
r   e  Y nX 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( Z+d)d* Z,d+d, Z-d-d. Z.d/d0 Z/d1d2 Z0dS )3z*
General helpers required for `tqdm.std`.
    N)wraps)east_asian_width)warn)proxyc             c   s   | ]}t |V  qd S )N)CUR_OS
startswith).0i r
   </var/www/html/venv/lib/python3.7/site-packages/tqdm/utils.py	<genexpr>   s    r   )win32cygwinc             c   s   | ]}t |V  qd S )N)r   r   )r   r	   r
   r
   r   r      s    )aixlinuxdarwinz\x1b\[[;\d]*[A-Za-z]F)stripc               @   s"   e Zd ZdZdddZdd ZdS )	FormatReplacezV
    >>> a = FormatReplace('something')
    >>> "{:5d}".format(a)
    'something'
     c             C   s   || _ d| _d S )Nr   )replaceformat_called)selfr   r
   r
   r   __init__'   s    zFormatReplace.__init__c             C   s   |  j d7  _ | jS )N   )r   r   )r   _r
   r
   r   
__format__+   s    zFormatReplace.__format__N)r   )__name__
__module____qualname____doc__r   r   r
   r
   r
   r   r   !   s   
r   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 )N)_comparable)r   otherr
   r
   r   __lt__2   s    zComparable.__lt__c             C   s   | |k p| |kS )Nr
   )r   r"   r
   r
   r   __le__5   s    zComparable.__le__c             C   s   | j |j kS )N)r!   )r   r"   r
   r
   r   __eq__8   s    zComparable.__eq__c             C   s
   | |k S )Nr
   )r   r"   r
   r
   r   __ne__;   s    zComparable.__ne__c             C   s
   | |k S )Nr
   )r   r"   r
   r
   r   __gt__>   s    zComparable.__gt__c             C   s
   | |k  S )Nr
   )r   r"   r
   r
   r   __ge__A   s    zComparable.__ge__N)
r   r   r   r   r#   r$   r%   r&   r'   r(   r
   r
   r
   r   r    0   s   r    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 )N)getattr_wrapped)r   namer
   r
   r   __getattr__F   s    zObjectWrapper.__getattr__c             C   s   t | j||S )N)setattrr+   )r   r,   valuer
   r
   r   __setattr__I   s    zObjectWrapper.__setattr__c             C   s,   yt | |S  tk
r&   t| |S X dS )z7Actual `self.getattr` rather than self._wrapped.getattrN)objectr-   AttributeErrorr*   )r   r,   r
   r
   r   wrapper_getattrL   s    zObjectWrapper.wrapper_getattrc             C   s   t | ||S )z7Actual `self.setattr` rather than self._wrapped.setattr)r1   r0   )r   r,   r/   r
   r
   r   wrapper_setattrS   s    zObjectWrapper.wrapper_setattrc             C   s   |  d| dS )z4
        Thin wrapper around a given object
        r+   N)r4   )r   wrappedr
   r
   r   r   W   s    zObjectWrapper.__init__N)r   r   r   r-   r0   r3   r4   r   r
   r
   r
   r   r)   E   s
   r)   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 t| | | d| d S )Nencoding)superr6   r   r4   )r   r5   r7   )	__class__r
   r   r   d   s    zSimpleTextIOWrapper.__init__c             C   s   | j || dS )zP
        Encode `s` and pass to the wrapped object's `.write()` method.
        r7   )r+   writeencoder3   )r   sr
   r
   r   r:   h   s    zSimpleTextIOWrapper.writec             C   s   | j t|d|kS )Nr+   )r+   r*   )r   r"   r
   r
   r   r%   n   s    zSimpleTextIOWrapper.__eq__)r   r   r   r   r   r:   r%   __classcell__r
   r
   )r9   r   r6   ^   s   r6   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   y
 | |S  t k
r\ } z4|jdkr( ytd_W n tk
rJ   Y nX W d d }~X Y nT tk
r } z6dt|krz ytd_W n tk
r   Y nX W d d }~X Y nX d S )N   infclosed)OSErrorerrnofloatZminitersReferenceError
ValueErrorstr)argskwargse)functqdm_instancer
   r   inner}   s     

z7DisableOnWriteError.disable_on_exception.<locals>.inner)r   )rL   rK   rM   r
   )rK   rL   r   disable_on_exceptionv   s    z(DisableOnWriteError.disable_on_exceptionc                sT   t t| | t|dr0| d| ||j t|drP| d| ||j d S )Nr:   flush)r8   r>   r   hasattrr4   rN   r:   rO   )r   r5   rL   )r9   r
   r   r      s    

zDisableOnWriteError.__init__c             C   s   | j t|d|kS )Nr+   )r+   r*   )r   r"   r
   r
   r   r%      s    zDisableOnWriteError.__eq__)	r   r   r   r   staticmethodrN   r   r%   r=   r
   r
   )r9   r   r>   r   s   	r>   c                   s   e Zd Zd fdd	Z  ZS )CallbackIOWrapperreadc                s~   t t| | t|||dkrFt fdd}| d| n4|dkrrt 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`
        r:   c                s    | f||} t |  |S )N)len)datarH   rI   res)callbackrK   r
   r   r:      s    z)CallbackIOWrapper.__init__.<locals>.writerS   c                 s   | |} t | |S )N)rT   )rH   rI   rU   )rW   rK   r
   r   rS      s    
z(CallbackIOWrapper.__init__.<locals>.readz Can only wrap read/write methodsN)r8   rR   r   r*   r   r4   KeyError)r   rW   streammethodr:   rS   )r9   )rW   rK   r   r      s    
zCallbackIOWrapper.__init__)rS   )r   r   r   r   r=   r
   r
   )r9   r   rR      s   rR   c             C   sj   yd |  W nR tk
r"   dS  tk
r`   y|  dpFd| kS  tk
rZ   dS X Y nX dS d S )Nu   █▉Fzutf-ZU8T)r;   UnicodeEncodeError	Exceptionlowerr   )r7   r
   r
   r   _is_utf   s    r^   c             C   s$   y
t | jS  tk
r   dS X d S )NF)r^   r7   r2   )fpr
   r
   r   _supports_unicode   s    
r`   c             C   s4   t | tr,x| D ]}t|dkrdS qW dS t| S )N   FT)
isinstancerG   ordr`   )r<   cr
   r
   r   	_is_ascii   s    

re   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    rk   c             C   s   yd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S W n tk
r   Y nX d	S )
Nr   )create_string_bufferwindll)stdinstdoutiii   ZhhhhHhhhhhh)NN)structctypesrl   rm   sysrn   ro   kernel32ZGetStdHandleZGetConsoleScreenBufferInfounpackrawr\   )r_   rq   rl   rm   rn   ro   Z	io_handlehZcsbirV   Z_bufxZ_bufyZ_curxZ_curyZ_wattrlefttoprightbottomZ_maxxZ_maxyr
   r
   r   rg      s$    $rg   c                 sB   y(ddl ddlm   fdddD 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split)r   r	   )r|   shlexr
   r   
<listcomp>  s   z&_screen_shape_tput.<locals>.<listcomp>)colslines)NN)r   
subprocessr|   r\   )r   r
   )r|   r   r   rh      s    rh   c             C   s   y(ddl m } ddlm} ddlm} W n tk
r<   dS X y&|d|| |dd d \}}||fS  tk
r   yd	d
 dD S  ttfk
r   dS X Y nX d S )Nr   )array)ioctl)
TIOCGWINSZ)NNrw   z           c             S   s   g | ]}t tj| d  qS )r   )r}   osenviron)r   r	   r
   r
   r   r     s    z'_screen_shape_linux.<locals>.<listcomp>)COLUMNSLINES)	r   Zfcntlr   termiosr   ImportErrorr\   rX   rF   )r_   r   r   r   rowsr   r
   r
   r   rj     s    rj   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 )Nr   r
   )r_   )shaper
   r   rM   &  s    z$_environ_cols_wrapper.<locals>.inner)r   DeprecationWarningrk   r   )rM   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   r   N)r   )r   chr
   r
   r   r   2  s    z_text_width.<locals>.<genexpr>)sumrG   )r<   r
   r
   r   _text_width1  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)rU   r
   r
   r   disp_len5  s    r   c             C   st   t | t| kr| d| S tt| }xt| |krF| dd } q,W |rptt| rp| drh| S | d S | S )zB
    Trim a string which may contain ANSI control characters.
    Nz[0m)rT   r   boolr   searchendswith)rU   lengthZansi_presentr
   r
   r   	disp_trim=  s    r   )1r   r   rers   	functoolsr   unicodedatar   warningsr   weakrefr   rangechrrG   _rangeZ_unichZ_unicodeZ_basestringplatformr   anyrf   ri   compiler   r   r   init	TypeErrorr1   r   r    r)   r6   r>   rR   r^   r`   re   rk   rg   rh   rj   r   r   r   r   r   r
   r
   r
   r   <module>   sP   


+	