U
    ZÊ¹j°  ã                   @   s^   d Z ddlZddlZddddgZddd	d
gZddd„Zdd„ Zeƒ adaddd„Z	dd„ Z
dS )zMSimple tools for timing functions' execution, when IPython is not available. é    Ng      ð?g     @�@g    €„.Ag    eÍÍAÚsÚmsu   Î¼sÚnsÚpassc           	      C   s²   t j| |d�}d\}}tddƒD ]6}|  |¡dkr8 qXq |dk	rN||krN qXq |d9 }q t| ||¡ƒ| }|dkr–ttt t |¡¡d ƒ dƒ}nd}|||t	|  t
| fS )	z1Adaptively measure execution time of a function. )Úsetup)é   é   r   é
   gš™™™™™É?Ng        r   )ÚtimeitÚTimerÚrangeÚminÚrepeatÚintÚmathÚfloorÚlog10Ú_scalesÚ_units)	Úfuncr   ÚlimitZtimerr   ÚnumberÚiÚtimeÚorder© r   úX/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/utilities/timeutils.pyÚtimed   s    
"r   c                  C   s0   dd l } |  dd¡}dd„ | d¡D ƒ}t|ƒS )Nr   ZSYMPY_TIMINGSÚ c                 S   s   g | ]}|  ¡ ‘qS r   )Ústrip)Ú.0Úxr   r   r   Ú
<listcomp>(   s     z __do_timings.<locals>.<listcomp>ú,)ÚosÚgetenvÚsplitÚset)r$   Úresr   r   r   Ú__do_timings%   s    r)   r   c                 C   sD   t d| d| d | d | d f ƒ | d D ]}t||d ƒ q,d S )Nú-z	%.2f %s%sé   r   r   r   )ÚprintÚ_print_timestack)ÚstackÚlevelr   r   r   r   r-   /   s    $r-   c                    s   ‡ fdd„}|S )Nc                    s   ˆt krˆ S ‡ fdd„}|S )Nc                     sl   ddl m } t}ˆ jg d| ga|ƒ }ˆ | |Ž}|ƒ }|| td< |d k	r\|d  t¡ |anttƒ d a|S )Nr   )r   r+   r   )r   Ú
_timestackÚ	func_nameÚappendr-   )ÚargsÚkwargsr   ZoldtimestackÚt1ÚrÚt2©r   r   r   Úwrapper;   s    
z,timethis.<locals>.decorator.<locals>.wrapper)Ú_do_timings)r   r9   ©Únamer8   r   Ú	decorator6   s    ztimethis.<locals>.decoratorr   )r<   r=   r   r;   r   Útimethis5   s    r>   )r   N)r   )Ú__doc__r
   r   r   r   r   r)   r:   r0   r-   r>   r   r   r   r   Ú<module>   s   

