
    BTh                       d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ erd dlmZmZ d dlmZ d dlmZmZ d dl m!Z! dZ"dZ# ed      jH                  dz  Z%e%dz  Z&dZ'dZ(e G d d             Z)e G d d             Z*e G d d             Z+	 	 	 	 	 	 	 	 	 	 d!dZ, G d de      Z-y )"    )annotations)asdict	dataclass)ceil)mean	quantilesstdev)get_clock_infoperf_counter_ns)TYPE_CHECKING)Console)escape)Table)Text)
Instrument)AnyCallable)Session)PT)CodSpeedConfigi ʚ;l    ^e perf_counter    eAi@B g      ?   c                  H    e Zd ZU ded<   ded<   ded<   ded<   ed
d       Zy	)BenchmarkConfigintwarmup_time_nsfloatmin_round_time_nsmax_time_nsz
int | None
max_roundsc                     | |j                   |j                   nt        t        |j                  |j                  nt        |j
                        S )N)r   r    r!   r"   )r   DEFAULT_WARMUP_TIME_NSDEFAULT_MIN_ROUND_TIME_NSr!   DEFAULT_MAX_TIME_NSr"   )clsconfigs     v/var/www/catia.catastroantioquia-mas.com/valormas/lib/python3.12/site-packages/pytest_codspeed/instruments/walltime.pyfrom_codspeed_configz$BenchmarkConfig.from_codspeed_config(   sO    $$0 "00'7!!- **$((	
 		
    N)r(   r   returnr   )__name__
__module____qualname____annotations__classmethodr*    r+   r)   r   r   !   s,    

 

r+   r   c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   d	ed
<   ded<   d	ed<   d	ed<   d	ed<   d	ed<   e	 	 	 	 	 	 	 	 	 	 	 	 dd       Zy)BenchmarkStatsr   min_nsmax_nsmean_nsstdev_nsq1_ns	median_nsq3_nsr   rounds
total_timeiqr_outlier_roundsstdev_outlier_roundsiter_per_roundwarmup_itersc                  |D cg c]  }||z  	 }}t        |      dkD  rt        |      ndt        |      t        |      dkD  rt        |d      \  }nc}z
  t	        fd|D              }	t	        fd|D              }
 | t        |      t        |      ||||	|
||      S c c}w )N   r      )nc              3  ^   K   | ]$  }|t         z  z
  k  s|t         z  z   kD  rd  & ywrC   N)IQR_OUTLIER_FACTOR).0tiqr_nsr9   r;   s     r)   	<genexpr>z+BenchmarkStats.from_list.<locals>.<genexpr>^   s?      !
5-6665-666 !
   *-c              3  ^   K   | ]$  }|t         z  z
  k  s|t         z  z   kD  rd  & ywrG   )STDEV_OUTLIER_FACTOR)rI   rJ   r7   r8   s     r)   rL   z+BenchmarkStats.from_list.<locals>.<genexpr>d   s?      #
71H<<<71H<<< #
rM   )r5   r6   r8   r7   r9   r:   r;   r<   r=   r>   r?   r@   rA   )lenr	   r   r   summinmax)r'   times_per_round_nsr<   r@   rA   r=   rJ   times_nsr:   r>   r?   rK   r7   r9   r;   r8   s              @@@@@r)   	from_listzBenchmarkStats.from_listH   s     1CC1A&CC&)(ma&75?Qx.x=1&/A&>#E9e  $E9e
   !
!
 
  # #
#
  
 x=x=!1!5)%
 	
3 Ds   B<N)rT   zlist[float]r<   r   r@   r   rA   r   r=   r   r,   r4   )r-   r.   r/   r0   r1   rV   r2   r+   r)   r4   r4   6   s    MMNOLLK0
'0
 	0

 0
 0
 0
 
0
 0
r+   r4   c                  6    e Zd ZU ded<   ded<   ded<   ded<   y)		Benchmarkstrnameurir   r(   r4   statsN)r-   r.   r/   r0   r2   r+   r)   rX   rX   |   s    
I	Hr+   rX   c                F    ||i |}g }t               x}}		 t               }	 ||i | t               }
|j                  |
|	z
         |
|z
  |j                  kD  rnDt        |      }t	        |      }|j                          ||j                  k  r!t        t        |j                  |z              nd}|j                  ||z  }t        |j                  |z        }n|j                  }t        d|      }t        |      }t               }t        |      D ]M  }t               }	|D ]
  } ||i |  t               }
|j                  |
|	z
         |
|z
  |j                  kD  sM n t               }||z
  dz  }t        j                  |||||      }t        | |||      |fS )NrC   r   )r<   r=   r@   rA   )rZ   r[   r(   r\   )r   appendr   r   rP   clearr    r   r   r"   r!   rS   ranger4   rV   rX   )rZ   r[   fnargskwargsr(   outrT   warmup_startstartendwarmup_mean_nsrA   r@   round_time_nsr<   
iter_range	run_start_benchmark_endr=   r\   s                         r)   run_benchmarkrn      s    d
f
C ')*,,L5
!
DF!!#+. 5 55  ,-N)*L V555 	D))N:;< 
  &7V''-78""F^F ~&J!I6] 	! 	 A	 !!#+.?V///	 $%M)+s2J$$%! % E $CeDcIIr+   c                  X    e Zd ZdZd	dZd
dZ	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZ	y)WallTimeInstrumentwalltimec                     || _         g | _        y )N)r(   
benchmarks)selfr(   s     r)   __init__zWallTimeInstrument.__init__   s    +-r+   c                    dt         ddg fS )Nz"mode: walltime, timer_resolution: .1fns)TIMER_RESOLUTION_NS)rt   s    r)   #get_instrument_config_str_and_warnsz6WallTimeInstrument.get_instrument_config_str_and_warns   s    34G3LBOQSSSr+   c           
         t        |||||t        j                  | j                              \  }}| j                  j                  |       |S )N)rZ   r[   ra   rb   rc   r(   )rn   r   r*   r(   rs   r^   )rt   rZ   r[   ra   rb   rc   benchrd   s           r)   measurezWallTimeInstrument.measure   sL     #"77D

s 	u%
r+   c                @   |j                   j                  j                  d      }t        | j                        dk(  r)|j                  dt        | j                         d       y | j                          |j                  dt        | j                         d       y )Nterminalreporterr   =z benchmarked)r(   pluginmanager
get_pluginrP   rs   	write_sep_print_benchmark_table)rt   sessionreporters      r)   reportzWallTimeInstrument.report   s    >>//::;MNt1$t'(5 ##%4??#$L1	
r+   c           	     0   t        d      }|j                  dddd       |j                  ddd	
       |j                  dd       |j                  dd       |j                  dd       | j                  D ]  }|j                  j                  |j                  j
                  z  }t        |dz  dd      }|dkD  r|j                  d       |j                  t        |j                        |j                  j                  |j                  j                  z  dd||j                  j                  dd|j                  j                  |j                  j                  z  d        t               }t!        d       |j!                  |       y )NzBenchmark Results)titlerX   rightcyanT)justifystyleno_wrapzTime (best)z
green bold)r   r   zRel. StdDev)r   zRun timeItersd   rw   %g?zred boldz,.0frx   z,.2fs,
)r   
add_columnrs   r\   r8   r7   r   stylizeadd_rowr   rZ   r5   r@   r=   r<   r   print)rt   tabler|   rsdrsd_textconsoles         r)   r   z)WallTimeInstrument._print_benchmark_table   sl   /0gVTR|L 	 	
 	W5'2__ 	E++&&)<)<<CsSyoQ/0HSy  ,MMuzz";;%%(B(BB4HK;;))$/q1;;--0B0BB1E	 )der+   c                    | j                   t        d      j                  d| j                  D cg c]  }t	        |       c}dS c c}w )Nr   )type
clock_info)
instrumentrs   )r   r
   __dict__rs   r   )rt   r|   s     r)   get_result_dictz"WallTimeInstrument.get_result_dict
  sF     ,^<EE 7;ooFU6%=F
 	

 Gs   AN)r(   r   r,   None)r,   ztuple[str, list[str]])rZ   rY   r[   rY   ra   Callable[P, T]rb   zP.argsrc   zP.kwargsr,   r   )r   r   r,   r   )r,   r   )r,   zdict[str, Any])
r-   r.   r/   r   ru   rz   r}   r   r   r   r2   r+   r)   rp   rp      s`    J.T  	
   
&
:
r+   rp   N)
rZ   rY   r[   rY   ra   r   r(   r   r,   ztuple[Benchmark, T]).
__future__r   dataclassesr   r   mathr   
statisticsr   r   r	   timer
   r   typingr   rich.consoler   rich.markupr   
rich.tabler   	rich.textr   pytest_codspeed.instrumentsr   r   r   pytestr   r   r   pytest_codspeed.pluginr   r$   r&   
resolutionry   r%   rH   rO   r   r4   rX   rn   rp   r2   r+   r)   <module>r      s   " )  - - 0        2$05& # $^4??#E /);    
 
 
( B
 B
 B
J   9J
9J9J+9JCR9J9JxP
 P
r+   