o
    _cK&                     @   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	 ze
ZW n ey/   eZY nw zeZW n ey?   eZY nw zeZW n eyO   eZY nw zeZW n ey_   eZY nw ejZedd dD Zed	d d
D ZedZzerddlZneW n ey   dZY nw zejdd W n e y   e  Y nw 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y   e3Z4Y nw d-d. Z4d/d0 Z5d1d2 Z6dS )3z*
General helpers required for `tqdm.std`.
    N)wraps)warnproxyc                 c       | ]}t |V  qd S NCUR_OS
startswith.0i r   5/usr/local/lib/python3.10/dist-packages/tqdm/utils.py	<genexpr>!       r   )win32cygwinc                 c   r   r   r   r   r   r   r   r   "   r   )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 r   Z_comparabler   otherr   r   r   __lt__D      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   r+   zComparable.__eq__c                 C   s
   | |k S r   r   r(   r   r   r   __ne__M      
zComparable.__ne__c                 C   s
   | |k S r   r   r(   r   r   r   __gt__P   r/   zComparable.__gt__c                 C   s
   | |k  S r   r   r(   r   r   r   __ge__S   r/   zComparable.__ge__N)
r"   r#   r$   r%   r*   r,   r-   r.   r0   r1   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   r+   zObjectWrapper.__getattr__c                 C   s   t | j||S r   )setattrr4   r   r6   valuer   r   r   __setattr__[   s   zObjectWrapper.__setattr__c                 C   s,   zt | |W S  ty   t| | Y S w )z7Actual `self.getattr` rather than self._wrapped.getattr)objectr7   AttributeErrorr3   r5   r   r   r   wrapper_getattr^   s
   zObjectWrapper.wrapper_getattrc                 C   s   t | ||S )z7Actual `self.setattr` rather than self._wrapped.setattr)r<   r;   r9   r   r   r   wrapper_setattre   s   zObjectWrapper.wrapper_setattrc                 C   s   |  d| dS )z4
        Thin wrapper around a given object
        r4   N)r?   )r   wrappedr   r   r   r   i   s   zObjectWrapper.__init__N)r"   r#   r$   r7   r;   r>   r?   r   r   r   r   r   r2   W   s    r2   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)superrA   r   r?   )r   r@   rB   	__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.
        rB   )r4   writeencoder>   )r   sr   r   r   rF   z   s   zSimpleTextIOWrapper.writec                 C      | j t|d|kS Nr4   r4   r3   r(   r   r   r   r-         zSimpleTextIOWrapper.__eq__)r"   r#   r$   r%   r   rF   r-   __classcell__r   r   rD   r   rA   p   s
    rA   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 | i |W S  t y9 } z%|jdkr ztd_W n	 ty&   Y nw W Y d }~d S W Y d }~d S d }~w tyj } z&dt|vrG ztd_W n	 tyW   Y nw W Y d }~d S W Y d }~d S d }~ww )N   infclosed)OSErrorerrnofloatZminitersReferenceError
ValueErrorstr)argskwargsefunctqdm_instancer   r   inner   s2   
z7DisableOnWriteError.disable_on_exception.<locals>.innerr   )r]   r\   r^   r   r[   r   disable_on_exception   s   z(DisableOnWriteError.disable_on_exceptionc                    sX   t t| | t|dr| d| ||j t|dr*| d| ||j d S d S )NrF   flush)rC   rN   r   hasattrr?   r_   rF   r`   )r   r@   r]   rD   r   r   r      s   

zDisableOnWriteError.__init__c                 C   rI   rJ   rK   r(   r   r   r   r-      rL   zDisableOnWriteError.__eq__)	r"   r#   r$   r%   staticmethodr_   r   r-   rM   r   r   rD   r   rN      s    
	rN   c                       s   e Zd Zd fdd	Z  ZS )CallbackIOWrapperreadc                    s~   t t| | t|||dkr$t fdd}| d| dS |dkr;t fdd}| d| dS td)	z{
        Wrap a given `file`-like object's `read()` or `write()` to report
        lengths to the given `callback`
        rF   c                    s&   | g|R i |} t |  |S r   len)datarX   rY   rescallbackr\   r   r   rF      s   z)CallbackIOWrapper.__init__.<locals>.writerd   c                     s   | i |} t | |S r   re   )rX   rY   rg   ri   r   r   rd      s   z(CallbackIOWrapper.__init__.<locals>.readz Can only wrap read/write methodsN)rC   rc   r   r3   r   r?   KeyError)r   rj   streammethodrF   rd   rD   ri   r   r      s   
zCallbackIOWrapper.__init__)rd   )r"   r#   r$   r   rM   r   r   rD   r   rc      s    rc   c                 C   sf   zd |  W dS  ty   Y dS  ty2   z|  dp#d| kW  Y S  ty1   Y Y dS w w )Nu   █▉Fzutf-ZU8T)rG   UnicodeEncodeError	Exceptionlowerr
   )rB   r   r   r   _is_utf   s   	rq   c                 C   s"   zt | jW S  ty   Y dS w )NF)rq   rB   r=   fpr   r   r   _supports_unicode   s
   rt   c                 C   s2   t | tr| D ]}t|dkr dS qdS t| S )N   FT)
isinstancerW   ordrt   )rH   cr   r   r   	_is_ascii   s   
ry   c                  C   s$   d} t rt} | du 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   zTdd l }ddlm}m} ddlm}m} d}| |krd}n| |kr$d}|j|}|d}|j	||}	|	rR|
d|j\}
}}}}}}}}}}|| || fW S W d	S  ty^   Y d	S w )
Nr   )create_string_bufferwindll)stdinstdoutiii   ZhhhhHhhhhhhNN)structctypesr   r   sysr   r   Zkernel32ZGetStdHandleGetConsoleScreenBufferInfounpackrawro   )rs   r   r   r   r   r   Z	io_handlehcsbirh   Z_bufxZ_bufyZ_curxZ_curyZ_wattrlefttoprightbottomZ_maxxZ_maxyr   r   r   r{      s.   r{   c                     s@   zddl ddlm   fdddD W S  ty   Y dS w )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   ro   )r    r   r   r   r|     s   r|   c                 C   s   zddl m } ddlm} ddlm} W n
 ty   Y dS w z|d|| |dd d \}}||fW S  tyR   z
d	d
 dD W  Y S  ttfyQ   Y Y dS w w )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>)COLUMNSLINES)	r   fcntlr   termiosr   ImportErrorro   rk   rV   )rs   r   r   r   rowsr   r   r   r   r~     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   rr   shaper   r   r^   8  s   z$_environ_cols_wrapper.<locals>.inner)r   DeprecationWarningr   r   )r^   r   r   r   _environ_cols_wrapper-  s   r   c                   C   s   t jdkrtd u rdS dS )Nntr   z[A)r   r6   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 v rdndV  qdS )ZFWr   r   Nr   )r   chr   r   r   r   J  s   " z_text_width.<locals>.<genexpr>)sum_unicode)rH   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)rg   r   r   r   disp_lenM  s   r   c                 C   sz   t | t| kr| d| S tt| }t| |kr'| dd } t| |ks|r;tt| r;| dr7| S | d S | S )zB
    Trim a string which may contain ANSI control characters.
    Nz[0m)rf   r   boolr   searchendswith)rg   lengthZansi_presentr   r   r   	disp_trimU  s   r   )7r%   r   rer   	functoolsr   warningsr   weakrefr   xrange_range	NameErrorrangeunichrZ_unichchrunicoder   rW   
basestringZ_basestringplatformr	   anyrz   r}   compiler   r   r   init	TypeErrorr<   r   r&   r2   rA   rN   rc   rq   rt   ry   r   r{   r|   r~   r   r   unicodedatar   rf   r   r   r   r   r   r   r   <module>   s    

+	