o
    i".                     @   s  d Z ddlZddlZddlZddlmZmZm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zer\ddlZneW n eyj   dZY nw zej dd W n e!y   e   Y nw d6ddZ"G dd dZ#G dd dZ$G dd d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- Z0d.d/ Z1d0d1 Z2d2d3 Z3d4d5 Z4dS )7z*
General helpers required for `tqdm.std`.
    N)partialpartialmethodwraps)	signatureeast_asian_width)warnproxyc                 c       | ]}t |V  qd S NCUR_OS
startswith.0i r   D/home/kim/smarthome/.venv/lib/python3.10/site-packages/tqdm/utils.py	<genexpr>       r   )win32cygwinc                 c   r   r   r   r   r   r   r   r      r   )aixlinuxdarwinfreebsdz\x1b\[[;\d]*[A-Za-z]F)stripc                    sN   du ri t fddtj D  |rtnt fdd}|S )a  
    Override parameter defaults via `os.environ[prefix + param_name]`.
    Maps UPPER_CASE env vars map to lower_case param names.
    camelCase isn't supported (because Windows ignores case).

    Precedence (highest first):

    - call (`foo(a=3)`)
    - environ (`FOO_A=2`)
    - signature (`def foo(a=1)`)

    Parameters
    ----------
    prefix  : str
        Env var prefix, e.g. "FOO_"
    types  : dict, optional
        Fallback mappings `{'param_name': type, ...}` if types cannot be
        inferred from function signature.
        Consider using `types=collections.defaultdict(lambda: ast.literal_eval)`.
    is_method  : bool, optional
        Whether to use `functools.partialmethod`. If (default: False) use `functools.partial`.

    Examples
    --------
    ```
    $ cat foo.py
    from tqdm.utils import envwrap
    @envwrap("FOO_")
    def test(a=1, b=2, c=3):
        print(f"received: a={a}, b={b}, c={c}")

    $ FOO_A=42 FOO_C=1337 python -c 'import foo; foo.test(c=99)'
    received: a=42, b=2, c=99
    ```
    Nc                    s,   i | ]\}}| r| d   |qS r   )r   lowerr   kv)r   prefixr   r   
<dictcomp>I   s   , zenvwrap.<locals>.<dictcomp>c              
      s   t | j  fdd D }|D ]S} | }|j|jur?t|jd|jfD ]}z
||| ||< W n	 ty<   Y q'w  q|jd urPt|j|| ||< qz| || ||< W q t	ye   Y qw | fi |S )Nc                    s   i | ]\}}| v r||qS r   r   r   paramsr   r   r#   O       z)envwrap.<locals>.wrap.<locals>.<dictcomp>__args__)
r   
parametersitems
annotationemptygetattr	ExceptiondefaulttypeKeyError)funcZ	overridesr    paramtyp)env_overridesparttypesr$   r   wrapL   s*   

zenvwrap.<locals>.wrap)lenosenvironr)   r   r   )r"   r6   Z	is_methodr7   r   )r4   r   r5   r"   r6   r   envwrap"   s   $r;   c                   @   s"   e Zd ZdZdddZdd ZdS )	FormatReplacezN
    >>> a = FormatReplace('something')
    >>> f"{a:5d}"
    'something'
     c                 C   s   || _ d| _d S Nr   )replaceformat_called)selfr?   r   r   r   __init__l   s   
zFormatReplace.__init__c                 C   s   |  j d7  _ | jS )N   )r@   r?   )rA   _r   r   r   
__format__p   s   zFormatReplace.__format__N)r=   )__name__
__module____qualname____doc__rB   rE   r   r   r   r   r<   f   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rA   otherr   r   r   __lt__w      zComparable.__lt__c                 C   s   | |k p| |kS r   r   rL   r   r   r   __le__z   s   zComparable.__le__c                 C   s   | j |j kS r   rK   rL   r   r   r   __eq__}   rO   zComparable.__eq__c                 C   s
   | |k S r   r   rL   r   r   r   __ne__      
zComparable.__ne__c                 C   s
   | |k S r   r   rL   r   r   r   __gt__   rS   zComparable.__gt__c                 C   s
   | |k  S r   r   rL   r   r   r   __ge__   rS   zComparable.__ge__N)
rF   rG   rH   rI   rN   rP   rQ   rR   rT   rU   r   r   r   r   rJ   u   s    rJ   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   )r,   _wrappedrA   namer   r   r   __getattr__   rO   zObjectWrapper.__getattr__c                 C   s   t | j||S r   )setattrrW   rA   rY   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)objectrZ   AttributeErrorr,   rX   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   wrapper_setattr   s   zObjectWrapper.wrapper_setattrc                 C   s   |  d| dS )z4
        Thin wrapper around a given object
        rW   N)rb   )rA   wrappedr   r   r   rB      s   zObjectWrapper.__init__N)rF   rG   rH   rZ   r^   ra   rb   rB   r   r   r   r   rV      s    rV   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  | | d| d S )Nencoding)superrB   rb   )rA   rc   re   	__class__r   r   rB      s   zSimpleTextIOWrapper.__init__c                 C   s   | j || dS )zP
        Encode `s` and pass to the wrapped object's `.write()` method.
        re   )rW   writeencodera   )rA   sr   r   r   ri      s   zSimpleTextIOWrapper.writec                 C      | j t|d|kS NrW   rW   r,   rL   r   r   r   rQ         zSimpleTextIOWrapper.__eq__)rF   rG   rH   rI   rB   ri   rQ   __classcell__r   r   rg   r   rd      s
    rd   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r1   tqdm_instancer   r   inner   s2   
z7DisableOnWriteError.disable_on_exception.<locals>.innerr	   )r   r1   r   r   r~   r   disable_on_exception   s   z(DisableOnWriteError.disable_on_exceptionc                    sT   t  | t|dr| d| ||j t|dr(| d| ||j d S d S )Nri   flush)rf   rB   hasattrrb   r   ri   r   )rA   rc   r   rg   r   r   rB      s   

zDisableOnWriteError.__init__c                 C   rl   rm   rn   rL   r   r   r   rQ      ro   zDisableOnWriteError.__eq__)	rF   rG   rH   rI   staticmethodr   rB   rQ   rp   r   r   rg   r   rq      s    
	rq   c                       s   e Zd Zd fdd	Z  ZS )CallbackIOWrapperreadc                    sz   t  | t|||dkr"t fdd}| d| dS |dkr9t 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`
        ri   c                    s&   | g|R i |} t |  |S r   r8   )datar{   r|   rescallbackr1   r   r   ri      s   z)CallbackIOWrapper.__init__.<locals>.writer   c                     s   | i |} t | |S r   r   )r{   r|   r   r   r   r   r      s   z(CallbackIOWrapper.__init__.<locals>.readz Can only wrap read/write methodsN)rf   rB   r,   r   rb   r0   )rA   r   streammethodri   r   rg   r   r   rB      s   
zCallbackIOWrapper.__init__)r   )rF   rG   rH   rB   rp   r   r   rg   r   r      s    r   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)rj   UnicodeEncodeErrorr-   r   r   )re   r   r   r   _is_utf   s   	r   c                 C   s"   zt | jW S  ty   Y dS w NF)r   re   r`   fpr   r   r   _supports_unicode
  s
   r   c                 C   s2   t | tr| D ]}t|dkr dS qdS t| S )N   FT)
isinstancerz   ordr   )rk   cr   r   r   	_is_ascii  s   
r   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GetStdHandleZGetConsoleScreenBufferInfounpackrawr-   )r   r   r   r   r   r   Z	io_handlehZcsbir   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 rC   )intsplitr   r   shlexr   r   
<listcomp>F  s    z&_screen_shape_tput.<locals>.<listcomp>)colslinesr   )r   
subprocessr   r-   )rD   r   r   r   r   A  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 )rC   )r   r9   r:   r   r   r   r   r   [  r&   z'_screen_shape_linux.<locals>.<listcomp>)COLUMNSLINES)	r   fcntlr   termiosr   ImportErrorr-   r0   ry   )r   r   r   r   rowsr   r   r   r   r   M  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   r   shaper   r   r   k  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)r9   rY   coloramar   r   r   r   _term_move_upr  s   r   c                 C   s   t dd t| D S )Nc                 s   s$    | ]}t |d v rdndV  qdS )ZFWr   rC   Nr   )r   chr   r   r   r   w  s   " z_text_width.<locals>.<genexpr>)sumrz   )rk   r   r   r   _text_widthv  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_lenz  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)r8   r   boolr   searchendswith)r   lengthZansi_presentr   r   r   	disp_trim  s   r   r   )5rI   r9   rer   	functoolsr   r   r   inspectr   unicodedatar   warningsr   weakrefr
   rangechrrz   _rangeZ_unichZ_unicodeZ_basestringplatformr   anyr   r   compiler   r   r   init	TypeErrorr;   r<   rJ   rV   rd   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s\    


D+	