B
    acK&                 @   sP  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	 ye
ZW n ek
r`   eZY nX yeZW n ek
r   eZY nX yeZW n ek
r   eZY nX yeZW n ek
r   eZY nX ejZedd dD Zed	d d
D ZedZyerddlZneW n ek
r.   dZY n2X 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+ Z0ydd,l1m2Z2 W n ek
r2   e3Z4Y n
X d-d. Z4d/d0 Z5d1d2 Z6dS )3z*
General helpers required for `tqdm.std`.
    N)wraps)warn)proxyc             c   s   | ]}t |V  qd S )N)CUR_OS
startswith).0i r	   )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    )ZaixZ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__9   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   3   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__D   s    zComparable.__lt__c             C   s   | |k p| |kS )Nr	   )r   r   r	   r	   r
   __le__G   s    zComparable.__le__c             C   s   | j |j kS )N)r   )r   r   r	   r	   r
   __eq__J   s    zComparable.__eq__c             C   s
   | |k S )Nr	   )r   r   r	   r	   r
   __ne__M   s    zComparable.__ne__c             C   s
   | |k S )Nr	   )r   r   r	   r	   r
   __gt__P   s    zComparable.__gt__c             C   s
   | |k  S )Nr	   )r   r   r	   r	   r
   __ge__S   s    zComparable.__ge__N)
r   r   r   r   r    r!   r"   r#   r$   r%   r	   r	   r	   r
   r   B   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__X   s    zObjectWrapper.__getattr__c             C   s   t | j||S )N)setattrr(   )r   r)   valuer	   r	   r
   __setattr__[   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_getattr^   s    zObjectWrapper.wrapper_getattrc             C   s   t | ||S )z7Actual `self.setattr` rather than self._wrapped.setattr)r.   r-   )r   r)   r,   r	   r	   r
   wrapper_setattre   s    zObjectWrapper.wrapper_setattrc             C   s   |  d| dS )z4
        Thin wrapper around a given object
        r(   N)r1   )r   wrappedr	   r	   r
   r   i   s    zObjectWrapper.__init__N)r   r   r   r*   r-   r0   r1   r   r	   r	   r	   r
   r&   W   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)superr3   r   r1   )r   r2   r4   )	__class__r	   r
   r   v   s    zSimpleTextIOWrapper.__init__c             C   s   | j || dS )zP
        Encode `s` and pass to the wrapped object's `.write()` method.
        r4   )r(   writeencoder0   )r   sr	   r	   r
   r7   z   s    zSimpleTextIOWrapper.writec             C   s   | j t|d|kS )Nr(   )r(   r'   )r   r   r	   r	   r
   r"      s    zSimpleTextIOWrapper.__eq__)r   r   r   r   r   r7   r"   __classcell__r	   r	   )r6   r
   r3   p   s   r3   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   )rI   rH   rJ   r	   )rH   rI   r
   disable_on_exception   s    z(DisableOnWriteError.disable_on_exceptionc                sT   t t| | t|dr0| d| ||j t|drP| d| ||j d S )Nr7   flush)r5   r;   r   hasattrr1   rK   r7   rL   )r   r2   rI   )r6   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   staticmethodrK   r   r"   r:   r	   r	   )r6   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`
        r7   c                s    | f||} t |  |S )N)len)datarE   rF   res)callbackrH   r	   r
   r7      s    z)CallbackIOWrapper.__init__.<locals>.writerP   c                 s   | |} t | |S )N)rQ   )rE   rF   rR   )rT   rH   r	   r
   rP      s    
z(CallbackIOWrapper.__init__.<locals>.readz Can only wrap read/write methodsN)r5   rO   r   r'   r   r1   KeyError)r   rT   streammethodr7   rP   )r6   )rT   rH   r
   r      s    
zCallbackIOWrapper.__init__)rP   )r   r   r   r   r:   r	   r	   )r6   r
   rO      s   rO   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)r8   UnicodeEncodeError	Exceptionlowerr   )r4   r	   r	   r
   _is_utf   s    r[   c             C   s$   y
t | jS  tk
r   dS X d S )NF)r[   r4   r/   )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)
isinstancerD   ordr]   )r9   cr	   r	   r
   	_is_ascii   s    

rb   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    rh   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)structZctypesri   rj   sysrk   rl   Zkernel32ZGetStdHandleZGetConsoleScreenBufferInfounpackrawrY   )r\   rn   ri   rj   rk   rl   Z	io_handlehZcsbirS   Z_bufxZ_bufyZ_curxZ_curyZ_wattrlefttoprightZbottomZ_maxxZ_maxyr	   r	   r
   rd      s$    $rd   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   )rv   shlexr	   r
   
<listcomp>  s   z&_screen_shape_tput.<locals>.<listcomp>)colslines)NN)ry   
subprocessrv   rY   )r   r	   )rv   ry   r
   re     s    re   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)NNrr   z           c             S   s   g | ]}t tj| d  qS )r   )rw   osenviron)r   r   r	   r	   r
   rz   (  s    z'_screen_shape_linux.<locals>.<listcomp>)COLUMNSZLINES)	r~   Zfcntlr   Ztermiosr   ImportErrorrY   rU   rC   )r\   r~   r   r   Zrowsr{   r	   r	   r
   rg     s    rg   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
   rJ   8  s    z$_environ_cols_wrapper.<locals>.inner)r   DeprecationWarningrh   r   )rJ   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   )east_asian_widthc             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   Zchr	   r	   r
   r   J  s    z_text_width.<locals>.<genexpr>)sum_unicode)r9   r	   r	   r
   _text_widthI  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)rR   r	   r	   r
   disp_lenM  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)rQ   r   boolr   searchendswith)rR   lengthZansi_presentr	   r	   r
   	disp_trimU  s    r   )7r   r   rero   	functoolsr   warningsr   weakrefr   ZxrangeZ_range	NameErrorrangeZunichrZ_unichchrZunicoder   rD   Z
basestringZ_basestringplatformr   anyrc   rf   compiler   r   r   Zinit	TypeErrorr.   r   r   r&   r3   r;   rO   r[   r]   rb   rh   rd   re   rg   r   r   Zunicodedatar   rQ   r   r   r   r	   r	   r	   r
   <module>   st   






+	
