o
    8Va2                     @   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   </usr/lib/python3/dist-packages/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)Z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timeitZreindenttemplatesrccompileZdummy_src_namer*   r+   )r   r(   r)   r,   globalsr/   coder   r   r   r   __init__)   s   zTimer.__init__N)r   r   r   r-   Zdefault_timerr1   r3   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)superr3   	benchtime
benchtitle)r   argskw	__class__r   r   r3   :   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   )r1   r!   r   
   g?g{Gz?)r   join
splitlinesZfunc_docr8   stripr$   Zfunc_globalsr"   r   ranger-   int_ceilminrepeatr7   )	r   targetr9   r/   r,   rF   Znumberr   tr   r   r   execute?   s,   



zFunction.execute)r   r   r   r3   rI   __classcell__r   r   r;   r   r4   8   s    r4   c                       s0   e Zd Z fddZ fddZdd Z  ZS )BenchSessionc                    s   t  | d S r5   )r6   headerr   Zcolitemsr;   r   r   rL   m   s   zBenchSession.headerc                    s$   t  | | jd |   d S )Nr=   )r6   footeroutwriteprint_bench_resultsrM   r;   r   r   rN   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 *** 
r=   z---g        r   z%.*g %sr   r   .  z%s %s   c                 3   s    | ]	}t |  V  qd S r5   )len)r   r   r   r   r   	<genexpr>   s    z3BenchSession.print_bench_results.<locals>.<genexpr>z%s  |  %s  |  %s
)rO   rP   Z_memo
isinstancer   r7   rE   rC   _floorr   	precisionscalingunitsappendr"   r8   rV   splitunitn
ValueErrormaxrjustljustrA   r?   rB   tuple)r   resultsitemZoutcomeZbestZtstrZorderZwmZwer   nuZunmeZtxtwr   rW   r   rQ   v   sv   


z BenchSession.print_bench_results)r   r   r   rL   rN   rQ   rJ   r   r   r;   r   rK   k   s    rK   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 r5   )rK   r   r   r   r   <lambda>   s    zmain.<locals>.<lambda>)Z
py.__.testrm   r   r    r4   pytestconfigZ_getsessionclassZcmdlinemain)r9   rm   rq   r   r   r   rr      s   
rr   r5   )__doc__ro   Zpy.__.test.itemr   Zpy.__.test.terminal.terminalr   Zmathr   rD   r   rZ   r   r-   inspectr   r]   r\   	enumerater`   r[   rp   Zcollectr   r    r$   __rg   r4   rK   rr   r   r   r   r   <module>   s"    	3f