3
dK&              ;   @   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 d6D Zed
d d7D Zej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j  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 d0d1 Z4d2d3 Z5d4d5 Z6dS )8z*
General helpers required for `tqdm.std`.
    N)wraps)warn)proxyc             c   s   | ]}t j|V  qd S )N)CUR_OS
startswith).0i r	   */tmp/pip-build-v9q4h5k9/tqdm/tqdm/utils.py	<genexpr>!   s    r   win32cygwinc             c   s   | ]}t j|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__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 j| |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 j| ||S )z7Actual `self.setattr` rather than self._wrapped.setattr)r0   r/   )r   r+   r.   r	   r	   r
   wrapper_setattre   s    zObjectWrapper.wrapper_setattrc             C   s   | j d| dS )z4
        Thin wrapper around a given object
        r*   N)r3   )r   wrappedr	   r	   r
   r   i   s    zObjectWrapper.__init__N)r   r   r   r,   r/   r2   r3   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| j| | jd| d S )Nencoding)superr5   r   r3   )r   r4   r6   )	__class__r	   r
   r   v   s    zSimpleTextIOWrapper.__init__c             C   s   | j j|j| jdS )zP
        Encode `s` and pass to the wrapped object's `.write()` method.
        r6   )r*   writeencoder2   )r   sr	   r	   r
   r9   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   r9   r$   __classcell__r	   r	   )r8   r
   r5   p   s   r5   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\ } z6|jdkr( ytd_W n tk
rJ   Y nX W Y d d }~X nT tk
r } z8dt|krz ytd_W n tk
r   Y nX W Y d d }~X 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   )rK   rJ   rL   r	   )rJ   rK   r
   disable_on_exception   s    z(DisableOnWriteError.disable_on_exceptionc                sT   t t| j| t|dr0| jd| j||j t|drP| jd| j||j d S )Nr9   flush)r7   r=   r   hasattrr3   rM   r9   rN   )r   r4   rK   )r8   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   staticmethodrM   r   r$   r<   r	   r	   )r8   r
   r=      s   	r=   c                   s   e Zd Zd fdd	Z  ZS )CallbackIOWrapperreadc                s~   t t| j| t|||dkrFt fdd}| jd| n4|dkrrt fdd}| jd| ntddS )	z{
        Wrap a given `file`-like object's `read()` or `write()` to report
        lengths to the given `callback`
        r9   c                s    | f||} t |  |S )N)len)datarG   rH   res)callbackrJ   r	   r
   r9      s    z)CallbackIOWrapper.__init__.<locals>.writerR   c                 s   | |} t | |S )N)rS   )rG   rH   rT   )rV   rJ   r	   r
   rR      s    
z(CallbackIOWrapper.__init__.<locals>.readz Can only wrap read/write methodsN)r7   rQ   r   r)   r   r3   KeyError)r   rV   streammethodr9   rR   )r8   )rV   rJ   r
   r      s    
zCallbackIOWrapper.__init__)rR   )r   r   r   r   r<   r	   r	   )r8   r
   rQ      s   rQ   c             C   sj   ydj |  W nR tk
r"   dS  tk
r`   y| j j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   )r6   r	   r	   r
   _is_utf   s    r]   c             C   s$   y
t | jS  tk
r   dS X d S )NF)r]   r6   r1   )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)
isinstancerF   ordr_   )r;   cr	   r	   r
   	_is_ascii   s    

rd   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    rj   c             C   s   ydd l }ddlm}m} ddlm}m} d	}| |kr<d
}n| |krHd}|jj|}|d}|jj	||}	|	r|j
d|j\}
}}}}}}}}}}|| || fS W n tk
r   Y nX dS )Nr   )create_string_bufferwindll)stdinstdout   
         ZhhhhHhhhhhhiii)NN)structctypesrk   rl   sysrm   rn   kernel32ZGetStdHandleGetConsoleScreenBufferInfounpackrawr[   )r^   rs   rk   rl   rm   rn   Z	io_handlehcsbirU   Z_bufxZ_bufyZ_curxZ_curyZ_wattrlefttoprightZbottomZ_maxxZ_maxyr	   r	   r
   rf      s$    $rf   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  jd | d qS )ztput r   )intsplit)r   r   )r   shlexr	   r
   
<listcomp>  s   z&_screen_shape_tput.<locals>.<listcomp>colslines)r   r   )NN)r   
subprocessr   r[   )r   r	   )r   r   r
   rg     s    rg   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)
TIOCGWINSZrz          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)NNz        )r   r   )NN)	r   fcntlr   termiosr   ImportErrorr[   rW   rE   )r^   r   r   r   Zrowsr   r	   r	   r
   ri     s    ri   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
   rL   8  s    z$_environ_cols_wrapper.<locals>.inner)r   DeprecationWarningrj   r   )rL   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   chr	   r	   r
   r   J  s    z_text_width.<locals>.<genexpr>)sum_unicode)r;   r	   r	   r
   _text_widthI  s    r   c             C   s   t tj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)rT   r	   r	   r
   disp_lenM  s    r   c             C   st   t | t| kr| d| S ttj| }xt| |krF| dd } q,W |rpttj| rp| jdrh| S | d S | S )zB
    Trim a string which may contain ANSI control characters.
    Nr   z[0m)rS   r   boolr   searchendswith)rT   lengthZansi_presentr	   r	   r
   	disp_trimU  s    r   )r   r   )r   r   r   )7r   r   reru   	functoolsr   warningsr   weakrefr   xrangeZ_range	NameErrorrangeunichrZ_unichchrunicoder   rF   
basestringZ_basestringplatformr   anyre   rh   compiler   r   r   init	TypeErrorr0   r   r   r(   r5   r=   rQ   r]   r_   rd   rj   rf   rg   ri   r   r   unicodedatar   rS   r   r   r   r	   r	   r	   r
   <module>   st   






+	
