ó
¡¼™\c           @  s{  d  Z  d d l m Z m Z d d l Z d d l m Z d d l m Z d d l	 m
 Z m Z m Z d d l Z d d l m Z d d l m Z m Z d	 d
 d d g Z d d d d g Z e d „  e e ƒ Dƒ ƒ Z d Z d e j j j f d „  ƒ  YZ d e j j j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j  j j! j" f d „  ƒ  YZ" d e f d „  ƒ  YZ# d d „ Z% d S(   s   benchmarking through py.testiÿÿÿÿ(   t   print_functiont   divisionN(   t   Item(   t   TerminalSession(   t   ceilt   floort   log10(   t	   getsource(   t   exec_t   ranget   st   mst   ust   nsi   g     @@g    €„.Ag    eÍÍAc         c  s!   |  ] \ } } | | f Vq d  S(   N(    (   t   .0t   iR
   (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pys	   <genexpr>   s    i   t	   Directoryc           B  s   e  Z d  „  Z RS(   c         C  s+   | j  } | j } | j d ƒ o* | d k S(   Nt   bench_s   .py(   t   purebasenamet   extt
   startswith(   t   selft   patht   bR   (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyt
   filefilter   s    		(   t   __name__t
   __module__R   (    (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyR      s   t   Modulec           B  s   e  Z d  „  Z RS(   c         C  s   | j  d ƒ p | j  d ƒ S(   NR   t   timeit_(   R   (   R   t   name(    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyt   funcnamefilter&   s    (   R   R   R   (    (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyR   $   s   t   Timerc           B  s    e  Z d  e j e ƒ  d „ Z RS(   t   passc         C  s   | |  _  t j | d ƒ } t j | d ƒ } t j i | d 6| d 6} | |  _ t | t j d ƒ } i  } t | | | ƒ | d |  _ d  S(   Ni   i   t   stmtt   setupt   exect   inner(	   t   timert   timeitt   reindentt   templatet   srct   compilet   dummy_src_nameR   R$   (   R   R!   R"   R%   t   globalsR)   t   codeR   (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyt   __init__-   s    		(   R   R   R&   t   default_timerR,   R.   (    (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyR   +   s   t   Functionc           B  s   e  Z d  „  Z d „  Z RS(   c         O  s/   t  t |  ƒ j | | Ž  d  |  _ d  |  _ d  S(   N(   t   superR0   R.   t   Nonet	   benchtimet
   benchtitle(   R   t   argst   kw(    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyR.   >   s    	c   	      G  sZ  t  | ƒ } d j | j ƒ  d ƒ } | j d  k	 rC | j |  _ n | j ƒ  d j ƒ  |  _ t | d | j ƒ} |  j	 j
 d ƒ rDd } d } x t d d ƒ D] } | j | ƒ } | d k rä | d | 9} t t | ƒ ƒ } Pn  | d	 k rý | d 9} qŸ | d | 9} t t | ƒ ƒ } PqŸ Wt | j | | ƒ ƒ | |  _ n | j d ƒ |  _ d  S(
   Ns   
i   i    R,   R   i   i
   gš™™™™™É?g{®Gáz”?(   R   t   joint
   splitlinest   func_docR2   R4   t   stripR   t   func_globalsR   R   R	   R&   t   intt   _ceilt   mint   repeatR3   (	   R   t   targetR5   R)   R%   R?   t   numberR   t   t(    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyt   executeC   s,    "(   R   R   R.   RC   (    (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyR0   <   s   	t   BenchSessionc           B  s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C  s   t  t |  ƒ j | ƒ d  S(   N(   R1   RD   t   header(   R   t   colitems(    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyRE   q   s    c         C  s4   t  t |  ƒ j | ƒ |  j j d ƒ |  j ƒ  d  S(   Ns   
(   R1   RD   t   footert   outt   writet   print_bench_results(   R   RF   (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyRG   t   s    c           sŸ  |  j  j d ƒ |  j  j d ƒ |  j  j d ƒ |  j  j d ƒ g  } x½ |  j D]² \ } } t | t ƒ rP | j } | d  k r‰ d } nZ | d k r¾ t t t	 t
 | ƒ ƒ d ƒ d ƒ } n d } d t | t | t | f } | j | j | | j g ƒ qP qP Wd g t t ƒ } d g t t ƒ } x¨ | D]  }	 |	 d	 } | j ƒ  \ }
 } t | } y |
 j d
 ƒ \ } } Wn t k
 r˜|
 d } } n Xt t | ƒ | | ƒ | | <t t | ƒ | | ƒ | | <q3Wx;| D]3}	 |	 d	 } | j ƒ  \ }
 } t | } y |
 j d
 ƒ \ } } Wn t k
 rC|
 d } } n X| j | | ƒ } | j | | ƒ } | j ƒ  rŽd
 j | | f ƒ }
 n d j | | f ƒ }
 d } xQ t t t ƒ ƒ D]= ‰  ˆ  | k rÛ| |
 7} q¼| d | ˆ  | ˆ  d	 7} q¼Wd | | f |	 d	 <qÞWxX t d ƒ D]J ‰  t ‡  f d †  | Dƒ ƒ } x% | D] }	 |	 ˆ  j | ƒ |	 ˆ  <qKWq"Wx( | D]  }	 |  j  j d t |	 ƒ ƒ qwWd  S(   Ns   ==============================
s    *** BENCHMARKING RESULTS *** 
s   
s   ---g        i   s   %.*g %si    i   t   .t    t    s   %s %si   c         3  s   |  ] } t  | ˆ  ƒ Vq d  S(   N(   t   len(   R   R
   (   R   (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pys	   <genexpr>Ë   s    s   %s  |  %s  |  %s
(   RH   RI   t   _memot
   isinstanceR   R3   R2   R>   R<   t   _floorR   t	   precisiont   scalingt   unitst   appendR   R4   RN   t   splitt   unitnt
   ValueErrort   maxt   rjustt   ljustR:   R7   R	   t   tuple(   R   t   resultst   itemt   outcomet   bestt   tstrt   ordert   wmt   weR
   t   nt   ut   unt   mt   et   txtt   w(    (   R   s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyRJ   z   sj    		)#

!

"(   R   R   RE   RG   RJ   (    (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyRD   o   s   		c         C  sZ   d d l  m } t | _ t | _ t | _ t j j } d „  | _ t j j	 j
 |  ƒ d  S(   Niÿÿÿÿ(   t   defaultconftestc           S  s   t  S(   N(   RD   (    (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyt   <lambda>ß   RL   (   t
   py.__.testRl   R   R   R0   t   pyt   testt   configt   _getsessionclasst   cmdlinet   main(   R5   Rl   Rq   (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyRt   Õ   s    			(&   t   __doc__t
   __future__R    R   Ro   t   py.__.test.itemR   t   py.__.test.terminal.terminalR   t   mathR   R=   R   RQ   R   R&   t   inspectR   t   sympy.core.compatibilityR   R	   RT   RS   t   dictt	   enumerateRW   RR   Rp   t   collectR   R   R   t   __R^   R0   RD   R2   Rt   (    (    (    s;   lib/python2.7/site-packages/sympy/utilities/benchmarking.pyt   <module>   s$   	"3f