ó
¡¼™\c           @  s¨   d  Z  d d l m Z m Z d d l Z d d l Z d d l m Z d d d d g Z d	 d
 d d g Z	 d d d „ Z d „  Z e ƒ  a d a d d „ Z d „  Z d S(   sM   Simple tools for timing functions' execution, when IPython is not available. iÿÿÿÿ(   t   print_functiont   divisionN(   t   rangeg      ð?g     @@g    €„.Ag    eÍÍAu   su   msu   Î¼su   nst   passc   	      C  só   t  j |  d | ƒ} d \ } } xV t d d ƒ D]E } | j  | ƒ d k rP Pq1 | d k	 rl | | k rl Pq1 | d 9} q1 Wt | j | | ƒ ƒ | } | d k rÑ t t t j t j	 | ƒ ƒ d ƒ d ƒ } n d } | | | t
 | t | f S(	   s1   Adaptively measure execution time of a function. t   setupi   i   i
   gš™™™™™É?g        (   i   i   N(   t   timeitt   TimerR   t   Nonet   mint   repeatt   intt   matht   floort   log10t   _scalest   _units(	   t   funcR   t   limitt   timerR	   t   numbert   it   timet   order(    (    s8   lib/python2.7/site-packages/sympy/utilities/timeutils.pyt   timed   s    /c          C  sP   d d  l  }  |  j d d ƒ } g  | j d ƒ D] } | j ƒ  ^ q. } t | ƒ S(   Niÿÿÿÿt   SYMPY_TIMINGSt    t   ,(   t   ost   getenvt   splitt   stript   set(   R   t   rest   x(    (    s8   lib/python2.7/site-packages/sympy/utilities/timeutils.pyt   __do_timings'   s    (i   c         C  sT   t  d | d |  d |  d |  d f ƒ x# |  d D] } t | | d ƒ q5 Wd  S(   Nt   -s	   %.2f %s%si   i    i   i   (   t   printt   _print_timestack(   t   stackt   levelt   s(    (    s8   lib/python2.7/site-packages/sympy/utilities/timeutils.pyR%   1   s    *c           s   ‡  f d †  } | S(   Nc           s#   ˆ t  k r ˆ  S‡  f d †  } | S(   Nc            s”   d d l  m  } t } ˆ  j g  d |  g a | ƒ  } ˆ  |  | Ž  } | ƒ  } | | t d <| d  k	 r€ | d j t ƒ | a n t t ƒ d  a | S(   Niÿÿÿÿ(   R   i    i   i   (   R   t
   _timestackt	   func_nameR   t   appendR%   (   t   argst   kwargsR   t   oldtimestackt   t1t   rt   t2(   R   (    s8   lib/python2.7/site-packages/sympy/utilities/timeutils.pyt   wrapper=   s    			
(   t   _do_timings(   R   R2   (   t   name(   R   s8   lib/python2.7/site-packages/sympy/utilities/timeutils.pyt	   decorator8   s    (    (   R4   R5   (    (   R4   s8   lib/python2.7/site-packages/sympy/utilities/timeutils.pyt   timethis7   s    (   t   __doc__t
   __future__R    R   R   R   t   sympy.core.compatibilityR   R   R   R   R   R"   R3   R)   R%   R6   (    (    (    s8   lib/python2.7/site-packages/sympy/utilities/timeutils.pyt   <module>   s   		