o
    *ήc2                     @   s   d 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 g dZg dZd	d
 eeD ZdZG dd dejjjZG dd dejjjZG dd dejZG dd dejjjjZG dd deZdddZdS )zbenchmarking through py.test    N)Item)TerminalSession)ceilfloorlog10)	getsource)smsusns)   g     @@g    .Ag    eAc                 C   s   i | ]\}}||qS  r   ).0ir   r   r   A/tmp/pip-target-vg8gfxp4/lib/python/sympy/testing/benchmarking.py
<dictcomp>   s    r      c                   @      e Zd Zdd ZdS )	Directoryc                 C   s   |j }|j}|do|dkS )Nbench_z.py)purebasenameext
startswith)selfpathbr   r   r   r   
filefilter   s   zDirectory.filefilterN)__name__
__module____qualname__r   r   r   r   r   r          r   c                   @   r   )Modulec                 C   s   | dp	| dS )Nr   timeit_)r   )r   namer   r   r   funcnamefilter"   s   zModule.funcnamefilterN)r   r   r   r$   r   r   r   r   r!       r    r!   c                   @   s    e Zd Zdeje fddZdS )Timerpassc                 C   s`   || _ t|d}t|d}tj||d }|| _t|tjd}i }t||| |d | _d S )N      )stmtsetupexecinner)	timertimeitreindenttemplatesrccompiledummy_src_namer+   r,   )r   r)   r*   r-   globalsr1   coder   r   r   r   __init__)   s   zTimer.__init__N)r   r   r   r.   default_timerr4   r6   r   r   r   r   r%   '   s    r%   c                       s$   e Zd Z fddZdd Z  ZS )Functionc                    s"   t  j|i | d | _d | _d S N)superr6   	benchtime
benchtitle)r   argskw	__class__r   r   r6   :   s   
zFunction.__init__c           	      G   s   t |}d| dd  }|jd ur|j| _n	| d  | _t||jd}| j	drtd}d}t
ddD ].}||}|dkrQ|d| 9 }tt|} n|d	krZ|d9 }q8|d| 9 }tt|} t|||| | _d S |d| _d S )
N
r   r   )r4   r"   r   
   g?g{Gz?)r   join
splitlinesfunc_docr<   stripr%   func_globalsr#   r   ranger.   int_ceilminrepeatr;   )	r   targetr=   r1   r-   rL   numberr   tr   r   r   execute?   s,   



zFunction.execute)r   r   r   r6   rP   __classcell__r   r   r?   r   r8   8   s    r8   c                       s0   e Zd Z fddZ fddZdd Z  ZS )BenchSessionc                    s   t  | d S r9   )r:   headerr   colitemsr?   r   r   rS   m   s   zBenchSession.headerc                    s$   t  | | jd |   d S )NrA   )r:   footeroutwriteprint_bench_resultsrT   r?   r   r   rV   p   s   zBenchSession.footerc              	      s  | j d | j d | j d | j d g }| jD ]?\}}t|tr\|j}|d u r0d}n"|dkrCtttt	|d  d}nd}dt
|t|  t| f }||j||jg qdgtt }dgtt }|D ]>}	|	d	 }| \}
}t| }z	|
d
\}}W n ty   |
d}}Y nw tt||| ||< tt||| ||< qm|D ]t}	|	d	 }| \}
}t| }z	|
d
\}}W n ty   |
d}}Y nw ||| }||| }| rd
||f}
nd||f}
d}tttD ]  |kr||
7 }q|d|  |   d	  7 }qd||f |	d	< qtdD ] t fdd|D }|D ]}	|	  ||	 < q6q'|D ]}	| j dt|	  qGd S )Nz==============================
z *** BENCHMARKING RESULTS *** 
rA   z---g        r   z%.*g %sr   r   .  z%s %s   c                 3   s    | ]	}t |  V  qd S r9   )len)r   r   r   r   r   	<genexpr>   s    z3BenchSession.print_bench_results.<locals>.<genexpr>z%s  |  %s  |  %s
)rW   rX   _memo
isinstancer   r;   rK   rI   _floorr   	precisionscalingunitsappendr#   r<   r^   splitunitn
ValueErrormaxrjustljustrF   rC   rH   tuple)r   resultsitemoutcomebesttstrorderwmwer   nuunmetxtwr   r_   r   rY   v   sv   


z BenchSession.print_bench_results)r   r   r   rS   rV   rY   rQ   r   r   r?   r   rR   k   s    rR   c                 C   sB   ddl m} t|_t|_t|_tjj}dd |_tjj	
|  d S )Nr   )defaultconftestc                   S   s   t S r9   )rR   r   r   r   r   <lambda>   s    zmain.<locals>.<lambda>)
py.__.testr~   r   r!   r8   pytestconfig_getsessionclasscmdlinemain)r=   r~   r   r   r   r   r      s   
r   r9   )__doc__r   py.__.test.itemr   py.__.test.terminal.terminalr   mathr   rJ   r   rc   r   r.   inspectr   rf   re   	enumerateri   rd   r   collectr   r!   r%   __rp   r8   rR   r   r   r   r   r   <module>   s"    	3f