
    wg                     V    d Z ddlZddlZg dZg dZd	dZd Z e       adad
dZ	d Z
y)zMSimple tools for timing functions' execution, when IPython is not available.     N)g      ?g     @@g    .Ag    eA)smsu   μsnsc           	         t        j                  | |      }d\  }}t        dd      D ]&  }|j                  |      dk\  r n|||k\  r n|dz  }( t        |j	                  ||            |z  }|dkD  r@t        t        t        j                  t        j                  |            dz         d      }nd}|||t        |   z  t        |   fS )z1Adaptively measure execution time of a function. )setup)      r	   
   g?g        r   )timeitTimerrangeminrepeatintmathfloorlog10_scales_units)	funcr   limittimerr   numberitimeorders	            ^/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/sympy/utilities/timeutils.pytimedr      s    LLU+ENFF1b\ <<3&6U?bLF u||FF+,v5DczSDJJt$45:;;Q?D$wu~-ve}==    c                      dd l } | j                  dd      }|j                  d      D cg c]  }|j                          }}t	        |      S c c}w )Nr   SYMPY_TIMINGS ,)osgetenvsplitstripset)r$   resxs      r   __do_timingsr+   %   sD    
))OR
(C!iin
-1779
-C
-s8O .s   Ac                 r    t        d|z  d| d   | d   | d   fz         | d   D ]  }t        ||dz           y )N-z	%.2f %s%s   r   r   r	   )print_print_timestack)stacklevelr   s      r   r0   r0   /   sI    	#e)[E!HeAha#AAB1X 'EAI&'r   c                       fd}|S )Nc                 (     t         vr S  fd}|S )Nc                      ddl m } t        }j                  g d| ga |       } | i |} |       }||z
  t        d<   ||d   j                  t               |a|S t	        t               d a|S )Nr   )r   r.   r	   )r   
_timestack	func_nameappendr0   )argskwargsr   oldtimestackt1rt2r   s          r   wrapperz,timethis.<locals>.decorator.<locals>.wrapper;   s    !%L.."a6JBd%f%ABGJqM'Q&&z2)
 H !,!
Hr   )_do_timings)r   r?   names   ` r   	decoratorztimethis.<locals>.decorator6   s    {"K	  r    )rA   rB   s   ` r   timethisrD   5   s    , r   )passN)r	   )__doc__r   r   r   r   r   r+   r@   r6   r0   rD   rC   r   r   <module>rG      s>    S   	8>2 n
'r   