U
    9%er.                     @   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rd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 d6dd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(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+ Z0d,d- Z1d.d/ Z2d0d1 Z3d2d3 Z4d4d5 Z5dS )7z*
General helpers required for `tqdm.std`.
    N)partialpartialmethodwraps)	signatureeast_asian_width)warnproxyc                 c   s   | ]}t |V  qd S NCUR_OS
startswith.0i r   I/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/tqdm/utils.py	<genexpr>   s     r   )win32cygwinc                 c   s   | ]}t |V  qd S r   r   r   r   r   r   r      s     )aixlinuxdarwinz\x1b\[[;\d]*[A-Za-z]F)stripc                    sN   dkri t fddtj D  |r6t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>H   s     
  zenvwrap.<locals>.<dictcomp>c              
      s   t | j  fdd D }|D ]} | }|j|jk	rt|jd|jfD ]2}z||| ||< W n tk
rz   Y qNX  qqNq$|jd k	rt|j|| ||< q$z| || ||< W q$ t	k
r   Y q$X q$| f|S )Nc                    s   i | ]\}}| kr||qS r   r   r   paramsr   r   r    N   s       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   wrapK   s$    

zenvwrap.<locals>.wrap)lenosenvironr%   r   r   )r   r2   Z	is_methodr3   r   )r0   r   r1   r   r2   r   envwrap"   s    #r7   c                   @   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__k   s    zFormatReplace.__init__c                 C   s   |  j d7  _ | jS )N   )r<   r;   )r=   _r   r   r   
__format__o   s    zFormatReplace.__format__N)r9   )__name__
__module____qualname____doc__r>   rA   r   r   r   r   r8   e   s   
r8   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__v   s    zComparable.__lt__c                 C   s   | |k p| |kS r   r   rH   r   r   r   __le__y   s    zComparable.__le__c                 C   s   | j |j kS r   rG   rH   r   r   r   __eq__|   s    zComparable.__eq__c                 C   s
   | |k S r   r   rH   r   r   r   __ne__   s    zComparable.__ne__c                 C   s
   | |k S r   r   rH   r   r   r   __gt__   s    zComparable.__gt__c                 C   s
   | |k  S r   r   rH   r   r   r   __ge__   s    zComparable.__ge__N)
rB   rC   rD   rE   rJ   rK   rL   rM   rN   rO   r   r   r   r   rF   t   s   rF   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r=   namer   r   r   __getattr__   s    zObjectWrapper.__getattr__c                 C   s   t | j||S r   )setattrrQ   r=   rS   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)objectrT   AttributeErrorr(   rR   r   r   r   wrapper_getattr   s    zObjectWrapper.wrapper_getattrc                 C   s   t | ||S )z7Actual `self.setattr` rather than self._wrapped.setattr)rY   rX   rV   r   r   r   wrapper_setattr   s    zObjectWrapper.wrapper_setattrc                 C   s   |  d| dS )z4
        Thin wrapper around a given object
        rQ   N)r\   )r=   wrappedr   r   r   r>      s    zObjectWrapper.__init__N)rB   rC   rD   rT   rX   r[   r\   r>   r   r   r   r   rP      s
   rP   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>   r\   )r=   r]   r_   	__class__r   r   r>      s    zSimpleTextIOWrapper.__init__c                 C   s   | j || dS )zP
        Encode `s` and pass to the wrapped object's `.write()` method.
        r_   )rQ   writeencoder[   )r=   sr   r   r   rc      s    zSimpleTextIOWrapper.writec                 C   s   | j t|d|kS NrQ   rQ   r(   rH   r   r   r   rL      s    zSimpleTextIOWrapper.__eq__)rB   rC   rD   rE   r>   rc   rL   __classcell__r   r   ra   r   r^      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r-   tqdm_instancer   r   inner   s     
z7DisableOnWriteError.disable_on_exception.<locals>.innerr	   )rw   r-   rx   r   rv   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 )Nrc   flush)r`   ri   r>   hasattrr\   ry   rc   rz   )r=   r]   rw   ra   r   r   r>      s    
 
 zDisableOnWriteError.__init__c                 C   s   | j t|d|kS rf   rg   rH   r   r   r   rL      s    zDisableOnWriteError.__eq__)	rB   rC   rD   rE   staticmethodry   r>   rL   rh   r   r   ra   r   ri      s
   
	ri   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`
        rc   c                    s    | f||} t |  |S r   r4   )datars   rt   rescallbackr-   r   r   rc      s    z)CallbackIOWrapper.__init__.<locals>.writer~   c                     s   | |} t | |S r   r   )rs   rt   r   r   r   r   r~      s    
z(CallbackIOWrapper.__init__.<locals>.readz Can only wrap read/write methodsN)r`   r}   r>   r(   r   r\   r,   )r=   r   streammethodrc   r~   ra   r   r   r>      s    
zCallbackIOWrapper.__init__)r~   )rB   rC   rD   r>   rh   r   r   ra   r   r}      s   r}   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)rd   UnicodeEncodeErrorr)   r   r   )r_   r   r   r   _is_utf   s    r   c                 C   s(   zt | jW S  tk
r"   Y dS X d S )NF)r   r_   rZ   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)
isinstancerr   ordr   )re   cr   r   r   	_is_ascii  s    
r   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    r   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)structctypesr   r   sysr   r   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                     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>E  s   z&_screen_shape_tput.<locals>.<listcomp>)colslinesr   )r   
subprocessr   r)   )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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   r5   r6   r   r   r   r   r   Z  s     z'_screen_shape_linux.<locals>.<listcomp>)COLUMNSLINES)	r   Zfcntlr   termiosr   ImportErrorr)   r,   rq   )r   r   r   r   rowsr   r   r   r   r   L  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   rx   j  s    z$_environ_cols_wrapper.<locals>.inner)r   DeprecationWarningr   r   )rx   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ntr9   z[A)r5   rS   coloramar   r   r   r   _term_move_upq  s    r   c                 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   chr   r   r   r   v  s     z_text_width.<locals>.<genexpr>)sumrr   )re   r   r   r   _text_widthu  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.
    r9   )r   RE_ANSIsub)r   r   r   r   disp_leny  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)r4   r   boolr   searchendswith)r   lengthZansi_presentr   r   r   	disp_trim  s    r   )NF)6rE   r5   rer   	functoolsr   r   r   inspectr   unicodedatar   warningsr   weakrefr
   rangechrrr   _rangeZ_unichZ_unicodeZ_basestringplatformr   anyr   r   compiler   r   r   init	TypeErrorr7   rY   r8   rF   rP   r^   ri   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sT   



C+	