U
    4cK&                     @   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	 ze
ZW n ek
r`   eZY nX zeZW n ek
r   eZY nX zeZW n ek
r   eZY nX z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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 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+ Z0z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.8/site-packages/tqdm/utils.py	<genexpr>!   s     r   )Zwin32cygwinc                 c   s   | ]}t |V  qd S 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 r   Z_comparabler   otherr   r   r   __lt__D   s    zComparable.__lt__c                 C   s   | |k p| |kS r   r   r#   r   r   r   __le__G   s    zComparable.__le__c                 C   s   | j |j kS r   r"   r#   r   r   r   __eq__J   s    zComparable.__eq__c                 C   s
   | |k S r   r   r#   r   r   r   __ne__M   s    zComparable.__ne__c                 C   s
   | |k S r   r   r#   r   r   r   __gt__P   s    zComparable.__gt__c                 C   s
   | |k  S r   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 r   )getattr_wrappedr   namer   r   r   __getattr__X   s    zObjectWrapper.__getattr__c                 C   s   t | j||S r   )setattrr-   r   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)objectr0   AttributeErrorr,   r.   r   r   r   wrapper_getattr^   s    zObjectWrapper.wrapper_getattrc                 C   s   t | ||S )z7Actual `self.setattr` rather than self._wrapped.setattr)r5   r4   r2   r   r   r   wrapper_setattre   s    zObjectWrapper.wrapper_setattrc                 C   s   |  d| dS )z4
        Thin wrapper around a given object
        r-   N)r8   )r   wrappedr   r   r   r   i   s    zObjectWrapper.__init__N)r   r   r   r0   r4   r7   r8   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)superr:   r   r8   )r   r9   r;   	__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.
        r;   )r-   writeencoder7   )r   sr   r   r   r?   z   s    zSimpleTextIOWrapper.writec                 C   s   | j t|d|kS Nr-   r-   r,   r#   r   r   r   r'      s    zSimpleTextIOWrapper.__eq__)r   r   r   r    r   r?   r'   __classcell__r   r   r=   r   r:   p   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functqdm_instancer   r   inner   s     
z7DisableOnWriteError.disable_on_exception.<locals>.innerr   )rT   rS   rU   r   rR   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 )Nr?   flush)r<   rE   r   hasattrr8   rV   r?   rW   )r   r9   rT   r=   r   r   r      s    
 
 zDisableOnWriteError.__init__c                 C   s   | j t|d|kS rB   rC   r#   r   r   r   r'      s    zDisableOnWriteError.__eq__)	r   r   r   r    staticmethodrV   r   r'   rD   r   r   r=   r   rE      s
   
	rE   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 r   len)datarO   rP   rescallbackrS   r   r   r?      s    z)CallbackIOWrapper.__init__.<locals>.writer[   c                     s   | |} t | |S r   r\   )rO   rP   r^   r`   r   r   r[      s    
z(CallbackIOWrapper.__init__.<locals>.readz Can only wrap read/write methodsN)r<   rZ   r   r,   r   r8   KeyError)r   ra   streammethodr?   r[   r=   r`   r   r      s    
zCallbackIOWrapper.__init__)r[   )r   r   r   r   rD   r   r   r=   r   rZ      s   rZ   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)r@   UnicodeEncodeError	Exceptionlowerr	   )r;   r   r   r   _is_utf   s    rh   c                 C   s(   zt | jW S  tk
r"   Y dS X d S )NF)rh   r;   r6   fpr   r   r   _supports_unicode   s    rk   c                 C   s2   t | tr*| D ]}t|dkr dS qdS t| S )N   FT)
isinstancerN   ordrk   )rA   cr   r   r   	_is_ascii   s    
rp   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    rv   c                 C   s   zd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stdoutiii   ZhhhhHhhhhhhNN)structZctypesrw   rx   sysry   rz   Zkernel32ZGetStdHandleZGetConsoleScreenBufferInfoZunpackrawrf   )rj   r}   rw   rx   ry   rz   Z	io_handlehZcsbir_   Z_bufxZ_bufyZ_curxZ_curyZ_wattrlefttoprightZbottomZ_maxxZ_maxyr   r   r   rr      s*     rr   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>  s   z&_screen_shape_tput.<locals>.<listcomp>)colslinesr|   )r   
subprocessr   rf   )r   r   r   r   rs     s    rs   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   osenvironr
   r   r   r   r   (  s     z'_screen_shape_linux.<locals>.<listcomp>)ZCOLUMNSZLINES)	r   Zfcntlr   Ztermiosr   ImportErrorrf   rb   rM   )rj   r   r   r   Zrowsr   r   r   r   ru     s    
ru   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   ri   shaper   r   rU   8  s    z$_environ_cols_wrapper.<locals>.inner)r   DeprecationWarningrv   r   )rU   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   Nr   )r   Zchr   r   r   r   J  s     z_text_width.<locals>.<genexpr>)sum_unicode)rA   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)r^   r   r   r   disp_lenM  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.
    Nz[0m)r]   r   boolr   searchendswith)r^   ZlengthZansi_presentr   r   r   	disp_trimU  s    r   )7r    r   rer~   	functoolsr   warningsr   weakrefr   ZxrangeZ_range	NameErrorrangeZunichrZ_unichchrZunicoder   rN   Z
basestringZ_basestringplatformr   anyrq   rt   compiler   r   r   Zinit	TypeErrorr5   r   r!   r+   r:   rE   rZ   rh   rk   rp   rv   rr   rs   ru   r   r   unicodedatar   r]   r   r   r   r   r   r   r   <module>   st   






+	
