o
     JAf4                     @   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rVee  dS 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}
        pass
    _t1 = _timer()
    return _t1 - _t0
c                 C   s   	 |  ddd|  S )N
 )replace)srcindent r   /usr/lib/python3.10/timeit.pyreindentP   s   r   c                   @   sN   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r&t|td |d }t|d}nt|r7||d< |d7 }d}d}ntdt|trNt|| 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__f   s8   

zTimer.__init__c                 C   sL   	 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   sP   	 t d |}t }t  z| || j}W |rt  |S |r't  w w 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 ]}|| }|  |}|r||| |dkr"||f  S q|d9 }q)N   T)r<      r   g?
   )r   )r#   callbackr:   jr5   
time_takenr   r   r   	autorange   s   	

zTimer.autoranger/   )__name__
__module____qualname__r   r&   r.   default_numberr   default_repeatr   rB   r   r   r   r   r   T   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 n |jy9 } zt| td W Y d }~dS d }~ww t}d| pBd}d g }t}d}	d d	d
dddd|D ]Z\}
}|
dv rdt| |
dv rm|	| |
dv r|v rx|n
tdt j
d  dS |
dv rt|}|dkrd}|
dv rtj}|
dv r|	rd7 |	d7 }	|
dv rttdd  dS qXd|pd}dd l}t jd|j |d ur||}t|||} dkrd }|	rfdd}z	||\ }W n
   |  Y dS |	rt  z|| }W n
   |  Y dS fdd}|	r(tddt||  t   fd d!|D }t|}td"  dkr?d#nd$|||f  t|}t|}||d% krkd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| }ndd   D }|jdd |D ]
\}}| |kr& nqd | | |f S )Nc                 S   s   g | ]\}}||fqS r   r   ).0unitscaler   r   r   
<listcomp>Z  s    z-main.<locals>.format_time.<locals>.<listcomp>T)reversez%.*g %s)itemssort)dtrV   rW   Zscales)rT   	time_unitunitsr   r   format_timeT  s   
zmain.<locals>.format_timezraw times: %sz, c                    s   g | ]}|  qS r   r   )rU   r\   )r5   r   r   rX   e  s    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   rb   Zoptserrr   r   r   r   rK   oari   r;   r?   _Zraw_timingsr_   ZtimingsZbestZworstrp   r   )r5   rT   r]   r^   r   main   s   
rx   __main__r/   )r1   r`   rI   r0   __all__r   rF   rG   perf_counterr   r$   r   r!   r   r   r   r   rx   rC   exitr   r   r   r   <module>   s4   1 

 