U
    Z$d)                     @   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m	Z	m
Z
 ddlmZ dgZeeZdd	 Zd
ddd dfddZedZedZdZdZejdfddZdS )zI
Module version for monitoring CLI pipes (`... | python -m tqdm | ...`).
    N)literal_eval   )TqdmKeyErrorTqdmTypeErrortqdm)__version__mainc              	   C   s   t | |f d|kr\|dD ]*}zt| |W   S  tk
rH   Y q X q t| d | |dkr| dkst| dkrxdS | dkrdS t| d | zt|d	 |  d
 W S  tk
 r   |dkrtttd|  d 	  Y S t| d | Y nX d S )Nz or z : boolTrue TFalseFz("z")chr")
logdebugsplitcastr   eval	Exceptionr   ordencode)valtypt r   ,/tmp/pip-unpacked-wheel-6ucdd40t/tqdm/cli.pyr      s(     r      \n   c                 C   s   d S Nr   )floatr   r   r   <lambda>,       r    Tc                 C   s   |j }|sD| |}|s.t|ddd   dS || |t| q
d}t|}	| |}|s|r|| |r|d||  n||D ]}
||
 qt|ddd   dS ||}
|
dk r||7 }qP|||d|
t|    ||rdn||d|
   d}||
|	 d }qqPdS )	aZ  
    Params
    ------
    fin  : binary file with `read(buf_size : int)` method
    fout  : binary file with `write` (and optionally `flush`) methods.
    callback  : function(float), e.g.: `tqdm.update`
    callback_len  : If (default: True) do `callback(len(buffer))`.
      Otherwise, do `callback(data) for data in buffer.split(delim)`.
    flushc                   S   s   d S r   r   r   r   r   r   r    >   r!   zposix_pipe.<locals>.<lambda>Nr!   r   c                   S   s   d S r   r   r   r   r   r   r    U   r!   r   )writereadgetattrlencountr   find)ZfinZfoutdelimbuf_sizecallbackcallback_lenfp_writetmpbufZ	len_delimir   r   r   
posix_pipe+   s8    



r1   z\n {8}(\S+)\s{2,}:\s*([^,]+)z\s*(?<!\S)--?([^\s=]+)(\s+|=|$))iterableguioutfilea  
        Extra CLI Options
        -----------------
        name  : type, optional
            TODO: find out why this is needed.
        delim  : chr, optional
            Delimiting character [default: '\n']. Use '\0' for null.
            N.B.: on Windows systems, Python converts '\n' to '\r\n'.
        buf_size  : int, optional
            String buffer size in bytes [default: 256]
            used when `delim` is specified.
        bytes  : bool, optional
            If true, will count bytes, ignore `delim`, and default
            `unit_scale` to True, `unit_divisor` to 1024, and `unit` to 'B'.
        tee  : bool, optional
            If true, passes `stdin` to both `stderr` and `stdout`.
        update  : bool, optional
            If true, will treat input as newly elapsed iterations,
            i.e. numbers to pass to `update()`. Note that this is slow
            (~2e5 it/s) since every input must be decoded as a number.
        update_to  : bool, optional
            If true, will treat input as total elapsed iterations,
            i.e. numbers to assign to `self.n`. Note that this is slow
            (~2e5 it/s) since every input must be decoded as a number.
        null  : bool, optional
            If true, will discard input (no stdout).
        manpath  : str, optional
            Directory in which to install tqdm man pages.
        comppath  : str, optional
            Directory in which to place tqdm completion.
        log  : str, optional
            CRITICAL|FATAL|ERROR|WARN(ING)|[default: 'INFO']|DEBUG|NOTSET.
c                    s   dkrt jdd  z d}W n@ tk
rd    D ]"}|dr8|tdd } q`q8d}Y nX  |d  }tjtt|dd t	j
jt }tt|}tD ]}|| qtt|  t|}t|ddd |d	dd |ddd }	d
dd |	D }d}
|
d |d d }t fdddD r\t jtd  t d nlt fdddD rt j|d  t d n8 rȈ d dd	 dkrt jd d  d|
  t ddg   tt ddd  ddd }t| |dd di}z| D ]^\}}|!dd}zt"||| ||< W n0 t#k
r } zt$t%|W 5 d}~X Y nX q(tdt%|  |dd }|d!d }|d"d }t&|||fdkrt$d#W nL t'k
r(   d$|
  t j(t jj }|D ]}| q Y nX |d%d&}|d'd(}|d)d }|d*d}|d+d}|d,d rG d-d. d.t)}nt j}t|d/|}tt j(d/t j(}|s|r(dd0l*m+ dd1l,m-} dd2l.m/ fd3d4}|dk	r|d5||d5 |dk	r|d6||d7 t d |rZ|jtd/jG fd8d.d.t)}|r|0d9d: |0d;d |0d<d= t| t	f |t1||d
|j2 W 5 Q R X n |d(krRt| |j}|s|r4t	f |B|r fd>d?}nfd@d?}|D ]}|| || qW 5 Q R X nt	|f|D ]}|| q@nht| t	f |Nd }|rfdAd?}n|rfdBd?}n
j2}d}t1|||||| W 5 Q R X dS )Cz
    Parameters (internal use only)
    ---------
    fp  : file-like object for tqdm
    argv  : list (default: sys.argv[1:])
    Nr   z--logz--log=INFOz/%(levelname)s:%(module)s:%(lineno)d:%(message)s)levelformat      r   c                 s   sT   | ]L}|d  t kr|d dkr"dndj|d  dd|d  f|dd  V  qdS )r   r   r	   z
  --{0}  : {2}{3}z
  --{0}=<{1}>  : {2}{3}_-N)UNSUPPORTED_OPTSr8   replace).0Zotdr   r   r   	<genexpr>   s     
zmain.<locals>.<genexpr>z!Usage:
  tqdm [--help | options]
z^
Options:
  -h, --help     Print this help and exit.
  -v, --version  Print version and exit.

c                 3   s   | ]}| kV  qd S r   r   r?   vargvr   r   r@      s     )z-vz	--versionr   c                 3   s   | ]}| kV  qd S r   r   rB   rD   r   r   r@      s     )z-hz--helpz--zError:Unknown argument: r   r   Tr5   r<   r;   zargs:bytesFupdate	update_toz1Can only have one of --bytes --update --update_toz
Error:
r*   r   r)   r   teemanpathcomppathnullc                   @   s   e Zd Zedd ZdS )main.<locals>.stdoutc                 S   s   d S r   r   )r;   r   r   r   r#      s    main.<locals>.stdout.writeN__name__
__module____qualname__staticmethodr#   r   r   r   r   stdout   s   rU   buffer)	resources)path)copyfilec              	      sZ   t dr$ td|  | n&d| } t|| W 5 Q R X td| dS )zcopy resource `name` to `dst`filesr   z
written:%sN)hasattrstrrZ   rX   r   info)namedstsrc)rY   rW   r   r   cp   s
    
zmain.<locals>.cpztqdm.1zcompletion.shztqdm_completion.shc                       s    e Zd Ze fddZdS )rN   c              	      s,   t j d |  W 5 Q R X |  d S )N)r5   )r   Zexternal_write_mode)xfpr-   stdout_writer   r   r#     s    rO   NrP   r   rc   r   r   rU     s   unitBZ
unit_scaleZunit_divisori   c                    s     t|   d S r   rH   numericdecoder0   r   r   r   r+     s    zmain.<locals>.callbackc                    s     t|   j  d S r   rH   ri   rj   nrk   rl   r   r   r+   "  s    c                    s     t|   d S r   rh   rk   rl   r   r   r+   /  s    c                    s     t|   j  d S r   rm   rk   rl   r   r   r+   2  s    )3sysrE   index
ValueError
startswithr&   loggingbasicConfigr%   r   __init____doc__CLI_EXTRA_DOCdictRE_OPTSfindallr=   popr   r   sorteditemsr   zipjoinstripanyrU   r#   r   exitstderrRE_SHLEXr>   r   KeyErrorr   r\   sumr   stdinobject	importlibrW   osrX   shutilrY   
setdefaultr1   rH   )rd   rE   Zlog_idxr0   ZlogLeveldZ	opt_typesor   Zopt_types_descZ
help_shortoptsZ	tqdm_argsrC   eZdelim_per_charrH   rI   r   r*   r)   rJ   rK   rL   rU   rX   ra   r#   r+   r,   r   )rE   rY   rd   r-   rW   re   r   r   r      s    


*
"
"




 


)rv   rs   rero   astr   ri   Zstdr   r   r   versionr   __all__	getLoggerrQ   r   r   r1   compilery   r   r=   rw   r   r   r   r   r   r   <module>   s$   
 
:

#