a
    <b2                     @   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   j/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/testing/benchmarking.py
<dictcomp>       r      c                   @   s   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      s   r   c                   @   s   e Zd Zdd ZdS )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       s   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_timerr0   r2   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)superr2   	benchtime
benchtitle)r   argskw	__class__r   r   r2   :   s    zFunction.__init__c           	      G   s   t |}d| dd  }|jd ur2|j| _n| d  | _t||jd}| j	drd}d}t
ddD ]`}||}|dkr|d| 9 }tt|} q|d	kr|d9 }qp|d| 9 }tt|} qqpt|||| | _n|d| _d S )
N
r   r   )r0   r    r   
   g?g{Gz?)r   join
splitlinesZfunc_docr7   stripr#   Zfunc_globalsr!   r   ranger,   int_ceilminrepeatr6   )	r   targetr8   r.   r+   rE   numberr   tr   r   r   execute?   s,    



zFunction.execute)r   r   r   r2   rI   __classcell__r   r   r:   r   r3   8   s   r3   c                       s0   e Zd Z fddZ fddZdd Z  ZS )BenchSessionc                    s   t  | d S r4   )r5   headerr   Zcolitemsr:   r   r   rL   m   s    zBenchSession.headerc                    s$   t  | | jd |   d S )Nr<   )r5   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 r`d}nD|dkrt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0 tt||| ||< tt||| ||< q|D ]}	|	d	 }| \}
}t| }z|
d
\}}W n ty   |
d }}Y n0 ||| }||| }| rd
||f}
nd||f}
d}tttD ]6  |kr||
7 }n|d|  |   d	  7 }qd||f |	d	< q^tdD ]: t fdd|D }|D ]}	|	  ||	 < qvqX|D ]}	| j dt|	  qd S )Nz==============================
z *** BENCHMARKING RESULTS *** 
r<   z---g        r   z%.*g %sr   r   .  z%s %s   c                 3   s   | ]}t |  V  qd S r4   )len)r   r   r   r   r   	<genexpr>   r   z3BenchSession.print_bench_results.<locals>.<genexpr>z%s  |  %s  |  %s
)rO   rP   Z_memo
isinstancer   r6   rD   rB   _floorr   	precisionscalingunitsappendr!   r7   rV   splitunitn
ValueErrormaxrjustljustr@   r>   rA   tuple)r   resultsitemoutcomebestZtstrorderZwmZwer   nuunmetxtwr   rW   r   rQ   v   sl    



 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 r4   )rK   r   r   r   r   <lambda>   r   zmain.<locals>.<lambda>)Z
py.__.testrr   r   r   r3   pytestconfigZ_getsessionclassZcmdlinemain)r8   rr   rv   r   r   r   rw      s    
rw   )N)__doc__rt   Zpy.__.test.itemr   Zpy.__.test.terminal.terminalr   mathr   rC   r   rZ   r   r,   inspectr   r]   r\   	enumerater`   r[   ru   Zcollectr   r   r#   __rg   r3   rK   rw   r   r   r   r   <module>   s    	3f