a
    ze4                     @   s   d dl Z d dlZd dlZd dlZg dZdZdZdZejZ	e
ZdZdd ZG d	d
 d
Zdde	edfddZdde	eedfddZdddddZedkree  dS )    N)Timertimeitrepeatdefault_timerz<timeit-src>i@B    z
def inner(_it, _timer{init}):
    {setup}
    _t0 = _timer()
    for _i in _it:
        {stmt}
    _t1 = _timer()
    return _t1 - _t0
c                 C   s   |  ddd|  S )N
 )replace)srcindent r   /usr/lib/python3.9/timeit.pyreindentO   s    r   c                   @   sL   e Zd ZddedfddZdddZefddZeefd	d
Z	dddZ
dS )r   passNc                 C   s   || _ i }|d u rt n|}d}t|trJt|td |d }t|d}n*t|rl||d< |d7 }d}d}ntdt|trt|| td t|d	}n&t|r||d
< |d7 }d}ntdt	j
|||d}	|	| _t|	td}
t|
|| |d | _d S )N execr      _setupz, _setup=_setupz_setup()z&setup is neither a string nor callable   Z_stmtz, _stmt=_stmtz_stmt()z%stmt is neither a string nor callable)stmtsetupinitinner)timer_globals
isinstancestrcompiledummy_src_namer   callable
ValueErrortemplateformatr
   r   r   )selfr   r   r   globalsZlocal_nsZ	global_nsr   Z
stmtprefixr
   coder   r   r   __init__e   s6    

zTimer.__init__c                 C   sJ   dd l }dd l}| jd ur:t| jd | jdtf|jt< |j|d d S )Nr   r   file)	linecache	tracebackr
   lensplitr   cache	print_exc)r#   r(   r)   r*   r   r   r   r.      s    


zTimer.print_excc                 C   sN   t d |}t }t  z| || j}W |rJt  n|rHt  0 |S N)	itertoolsr   gc	isenableddisabler   r   enable)r#   numberitZgcoldZtimingr   r   r   r      s    


zTimer.timeitc                 C   s*   g }t |D ]}| |}|| q|S r/   )ranger   append)r#   r   r5   ritr   r   r   r      s
    
zTimer.repeatc                 C   sP   d}dD ]8}|| }|  |}|r,||| |dkr||f  S q|d9 }qd S )N   )r<      r   g?
   )r   )r#   callbackr:   jr5   
time_takenr   r   r   	autorange   s    


zTimer.autorange)N)N)__name__
__module____qualname__r   r&   r.   default_numberr   default_repeatr   rB   r   r   r   r   r   S   s   
#
r   r   c                 C   s   t | ||||S r/   )r   r   )r   r   r   r5   r$   r   r   r   r      s    r   c                 C   s   t | |||||S r/   )r   r   )r   r   r   r   r5   r$   r   r   r   r      s    r   )_wrap_timerc             
      s  | d u rt jdd  } dd l}z|| dg d\}} W n8 |jyp } zt| td W Y d }~dS d }~0 0 t}d| pd}d g }t}d}	d d	d
dddd|D ]\}
}|
dv rt| |
dv r|	| |
dv r|v r|ntdt j
d  dS |
dv r$t|}|dkr$d}|
dv r4tj}|
dv rT|	rLd7 |	d7 }	|
dv rttdd  dS qd|p~d}dd l}t jd|j |d ur||}t|||} dkrd }|	rևfdd}z||\ }W n   |  Y dS 0 |	rt  z|| }W n   |  Y dS 0 fdd}|	rhtddt||  t   fd d!|D }t|}td"  dkrd#nd$|||f  t|}t|}||d% krdd l}|d&||||f td$d d S )'Nr<   r   zn:u:s:r:tcpvh)	znumber=zsetup=zrepeat=timeZclockprocessverbosezunit=helpz#use -h/--help for command line helpr=   r   r   g&.>gư>gMbP?g      ?)ZnsecZusecZmsecZsec   )z-nz--number)z-sz--setup)z-uz--unitz:Unrecognized unit. Please select nsec, usec, msec, or sec.r'   )z-rz--repeat)z-pz	--process)z-vz	--verbose)z-hz--helpr   )endc                    s.   d}| dk}t |j| |rdnd| d d S )Nz%{num} loop{s} -> {secs:.{prec}g} secsr<   sr   )numrO   ZsecsZprec)printr"   )r5   rA   msgplural)	precisionr   r   r?   ?  s
    zmain.<locals>.callbackc                    s`   }|d ur| }n8dd   D }|jdd |D ]\}}| |kr8 qNq8d | | |f S )Nc                 S   s   g | ]\}}||fqS r   r   ).0unitscaler   r   r   
<listcomp>Y      z-main.<locals>.format_time.<locals>.<listcomp>T)reversez%.*g %s)itemssort)dtrV   rW   Zscales)rT   	time_unitunitsr   r   format_timeS  s    
zmain.<locals>.format_timezraw times: %sz, c                    s   g | ]}|  qS r   r   )rU   r]   )r5   r   r   rX   d  rY   zmain.<locals>.<listcomp>z"%d loop%s, best of %d: %s per looprO   r   r   ztThe test results are likely unreliable. The worst time (%s) was more than four times slower than the best time (%s).)sysargvgetopterrorrQ   r   joinrG   intr8   stderrrI   process_time__doc__ospathinsertcurdirr   rB   r.   r   mapminmaxwarningswarn_explicitUserWarning)argsrH   rc   Zoptserrr   r   r   r   rK   oarj   r;   r?   _Zraw_timingsr`   ZtimingsZbestZworstrq   r   )r5   rT   r^   r_   r   main   s    







ry   __main__)N)r1   ra   rI   r0   __all__r   rF   rG   perf_counterr   r$   r   r!   r   r   r   r   ry   rC   exitr   r   r   r   <module>4   s.   
 

 