
    BTh0                        d dl Z d dlZd dlZd dlZd dlZd dlZd dl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 	 d dlZdZdd	lmZ  G d
 de      Z G d d      Zy# eef$ r  ej.                         ZdZY 2w xY w)    N)ceil)Path   )compute_timer_precision)NameWrapper)format_time)slugify)Metadatac                       e Zd Zy)FixtureAlreadyUsedN)__name__
__module____qualname__     j/var/www/catia.catastroantioquia-mas.com/valormas/lib/python3.12/site-packages/pytest_benchmark/fixture.pyr   r      s    r   r   c                       e Zd ZU i Zej
                  ed<   	 ddZed        Z	d Z
d Zd Zdej                  fd	Zd
 ZddZd ZddZd ZeZd Zd Zy)BenchmarkFixture_precisionsNc                 ^   |j                   | _         |j                  | _        || _        t	        |d      r7|j
                  j                  | _        |j
                  j                  | _        nd | _        d | _        || _	        d| _
        i | _        d| _        || _        |j                  | _        || _        t#        |      | _        t#        |      | _        |
| _        |	| _        |xr || _        || _        || _        g | _        d | _        || _        || _        || _        d | _        d | _        y )NcallspecF) name_nodeidfullnamedisabledhasattrr   idparamparamsgroup	has_error
extra_infoskipped_disable_gctarget_timer_min_roundsfloat	_max_time	_min_time
_add_stats_calibration_precision_warmup_logger_warner_cleanup_callbacks_modecprofilecprofile_loopscprofile_dumpcprofile_statsstats)selfnode
disable_gctimer
min_roundsmin_timemax_timewarmupwarmup_iterationscalibration_precision	add_statsloggerwarnerr   r2   r3   r4   r    s                     r   __init__zBenchmarkFixture.__init__!   s   ( II	 4$))DJ--..DKDJDK
%ll%xx#&;#3"3"$
 ,*"
r   c                     | j                    S N)r   )r7   s    r   enabledzBenchmarkFixture.enabledU   s    ==  r   c                    || j                   v r| j                   |   }|S t        |      x}| j                   |<   | j                  j                  d       | j                  j                  dt	        |       dt        |       ddd       |S )N zComputing precision for z ... s.T)bluebold)r   r   r.   debugr   r   )r7   r:   timer_precisions      r   _get_precisionzBenchmarkFixture._get_precisionY   s    D$$$"..u5O
  9PPU8VVOd..u5LLr"LL!9+e:L9MUS^_nSoRpprsz~  FJ  Kr   c                 6      j                   f fd	}|S )Nc                 T   t        j                         }j                  rt        j                          t	        j
                         }t	        j                  d        	 | rN |       }| D ]
  } 	i 
   |       }||z
  t	        j                  |       |rt        j                          S S  |       } 	i 
} |       }||z
  |ft	        j                  |       |rt        j                          S S # t	        j                  |       |rt        j                          w w xY wrF   )gc	isenabledr$   disablesysgettracesettraceenable)loops_ranger:   
gc_enabledtracerstart_endresultargsfunction_to_benchmarkkwargsr7   s           r   runnerz-BenchmarkFixture._make_runner.<locals>.runnerc   s    J

\\^FLL !GE( ?-t>v>?'C; V$IIK  "GE2DCFCF'C;.V$IIK  V$IIK s    #C9 0C9 9.D')r&   )r7   ra   r`   rb   rc   s   ```` r   _make_runnerzBenchmarkFixture._make_runnerb   s    &*kk 	  	 . r   c                     t        | || j                  | j                  | j                  | j                  | j
                  | j                  d      }| j                  |       || _        |S )N)r9   r:   r;   r=   r<   r>   )
iterationsoptions)	r
   r$   r&   r'   r)   r*   r-   r+   r6   )r7   rf   bench_statss      r   _make_statszBenchmarkFixture._make_stats|   s`    !"..".. NN NN,,
 	$ 
r   profilec                 b   t        j                  |      }|| j                  _        | j                  r}t        | j                   dt        | j                         d      }|j                  j                  dd       |j                  |       | j                  j                  d| d       y y )N-z.profT)parentsexist_okzSaved profile: )rL   )pstatsStatsr6   r5   r4   r   r	   r   parentmkdir
dump_statsr.   info)r7   rj   r6   output_files       r   _save_cprofilezBenchmarkFixture._save_cprofile   s    W%$)

!$"4"4!5Qwtyy7I6J%PQK$$TD$A[)LL}=DI	 r   c                     | j                   r d| _        t        d| j                    d      	 d| _          | j                  |g|i |S # t        $ r	 d| _         w xY w)NT9Fixture can only be used once. Previously it was used in  mode.zbenchmark(...))r1   r!   r   _raw	Exception)r7   ra   r`   rb   s       r   __call__zBenchmarkFixture.__call__   so    ::!DN$'`aeakak`llr%stt	)DJ4992DTDVDD 	!DN	s   A Ac           	          | j                   r d| _        t        d| j                    d      	 d| _         | j                  |||||||      S # t        $ r	 d| _         w xY w)NTrx   ry   zbenchmark.pedantic(...))r`   rb   setuproundswarmup_roundsrf   )r1   r!   r   _raw_pedanticr{   )r7   r%   r`   rb   r~   r   r   rf   s           r   pedanticzBenchmarkFixture.pedantic   s    ::!DN$'`aeakak`llr%stt	2DJ%%T&f\i  wA &    	!DN	s   A Ac           
         d }| j                   r| j                  |||      }| j                  |      \  }}}t        t	        | j
                  |z              }t        || j                        }t        |t        j                        }| j                  |      }	| j                  j                  d| d| ddd       t        j                         }
| j                  rft        |t        dt        | j                  |z                    }| j                  j                  d| d| d       t!        |      D ]
  } ||        t!        |      D ]  }|	j#                   ||              | j                  j                  dt%        t        j                         |
z
         d	dd       | j&                  |xs t!        d      }nt!        | j&                        }| j                   rP| j(                  rDt+        j,                         }|D ]  } |j.                  |g|i |} | j1                  |       S  ||i |}|S )
Nz
  Running z
 rounds x z iterations ...TyellowrL   r   z	  Warmup z
  Ran for rJ   )rG   rd   _calibrate_timerintr   r)   maxr'   minrU   maxsizeri   r.   rM   timer-   rangeupdater   r3   r2   cProfileProfileruncallrv   )r7   ra   r`   rb   rY   rc   durationrf   r   r6   	run_startr   r]   r3   rj   function_results                   r   rz   zBenchmarkFixture._raw   s   <<&&'<dFKF040E0Ef0M-Hj+ dnnx789F!1!12F-F$$Z0ELLF8:j\Ybfmqr		I|| #FC3t||j7P3Q,R S""Y}oZ
|Sb#cd}- (A;'(6] 2VK012LLK		i8O,P+QQST]ahlm&(4E!HN"4#6#67N<<DMM&&(G# Z"1'//2G"Y$"YRX"YZ(  4TDVDOr   c                    |i }t        |xs |      t        |t              r|dk  rt        d      t        |t              r|dk  rt        d      t        |t              r|dk  rt        d      |dkD  rrt        d      ||ffd	}| j                  r |       \  }} ||i |S | j                  |      }	|dkD  rt        |      nd }
t        |      D ]'  } |       \  }}| j                  |||      } ||
       ) t        |      D ]F  } |       \  }}| j                  |||      }|
r	 ||
      }n ||
      \  }}|	j                  |       H |
r |       \  }} ||i |}| j                  r}| j                  |
xs t        d      }nt        | j                        }t        j                         } |       \  }}|D ]  } |j                  |g|i |  | j                  |       S )Nr   z(Must have positive int for `iterations`.z$Must have positive int for `rounds`.r   z+Must have positive int for `warmup_rounds`.z;Can't use more than 1 `iterations` with a `setup` function.c                 F    r        }|rrt        d      |\  } }| |fS )Nz>Can't use `args` or `kwargs` if `setup` returns the arguments.)	TypeError)r`   rb   
maybe_argshas_argsr~   s      r   make_argumentsz6BenchmarkFixture._raw_pedantic.<locals>.make_arguments   s2    "W
'(hii#-LD&<r   )bool
isinstancer   
ValueErrorr   ri   r   rd   r   r2   r3   r   r   r   rv   )r7   r%   r`   rb   r~   r   r   rf   r   r6   rY   r]   rc   r   r_   r3   rj   r   s       `            @r   r   zBenchmarkFixture._raw_pedantic   s   >F'*c*j1nGHH&#&&1*CDD--1BJKK>eZ[[ $V 	  ==)+LD&4*6**  ,+5>eJ't}% 	 A)+LD&&&vtV<F;		  v 	#A)+LD&&&vtV<F!+.#)+#6 &LL"	# )+LD&T,V,F==""*!,!8a!&t':':!;&&(G)+LD&# 98889(r   c                      	 dd l } fd} j                  j	                   |j
                  ||fi |j                         y # t        $ r}t        |j                  d      |d }~ww xY w)Nr   z4Please install aspectlib or pytest-benchmark[aspect]c                       fd}|S )Nc                       g| i |S rF   r   )r`   rb   functionr7   s     r   wrapperz7BenchmarkFixture.weave.<locals>.aspect.<locals>.wrapper  s    H6t6v66r   r   )r   r   r7   s   ` r   aspectz&BenchmarkFixture.weave.<locals>.aspect  s    7 Nr   )	aspectlibImportErrorr`   r0   appendweaverollback)r7   r%   rb   r   excr   s   `     r   r   zBenchmarkFixture.weave  sh    	i	 	&&yvv'P'P'Y'YZ  	ichh(^_ehh	is   A 	A)A$$A)c                     | j                   r.| j                   j                         } |        | j                   r.| j                  s6| j                  s)| j                  j                  d| j                  d       y y y )Nz3Benchmark fixture was not used at all in this test!T)rC   suspend)r0   popr1   r#   r.   warningr/   )r7   callbacks     r   _cleanupzBenchmarkFixture._cleanup(  sg    %%..224HJ %% zz$,,LL  !V_c_k_kuy z #/zr   c                    | j                  | j                        }t        | j                  || j                  z        }|dz  | j                  z  }| j
                  j                  d       | j
                  j                  dt        |       dt        |       dt        | j                         dt        |       d	dd	       d
}	 t        |      } ||      }| j                  rt        j                         }d}	d}
t        j                         |z
  | j                  k  r_|	| j                  k  rPt        | ||            }|
d
z  }
|	|z  }	t        j                         |z
  | j                  k  r|	| j                  k  rP| j
                  j                  dt        t        j                         |z
         d|
 d| d       | j
                  j                  d| dt        |       dd       ||k\  rnX||k\  rLt        t        ||z  |z              }| j
                  j                  d| dd       |d
k(  rt        |      }n|dz  }|||fS )N   rI   z  Calibrating to target round zs; will estimate when reaching z
s (using: z, precision: zs).Tr   r   r   z    Warmup: zs (z x z iterations).z    Measured z iterations: rJ   )r   z    Estimating z iterations.)green
   )rO   r&   r   r*   r,   r.   rM   r   r   r   r-   r   r)   r   r   r   )r7   rc   rN   r<   min_time_estimateloopsrY   r   warmup_startr?   r   s              r   r   z!BenchmarkFixture._calibrate_timer/  sn   --dkk:t~~9T9T'TU$qL4+F+FF2,[-B,CCbcn  pA  dB  cC C"4;;/0k/>Z=[[^`	 	 	
 ,Kk*H||#yy{$%! !iikL04>>AFWZ^ZfZfFf"8VK-@AH!Q&M%.% iikL04>>AFWZ^ZfZfFf ""\+diikL>X2Y1ZZ]^k]llopuov  wD  $E  FLLug];xCXBYY[\eij8#,,DE!1H!<=>""_UG<#HPT"UA: #(,K7 8 ++r   rF   )r   NNr   r   r   )r   r   r   r   typingClassVar__annotations__rD   propertyrG   rO   rd   ri   r   r   rv   r|   r   rz   r   r   patchr   r   r   r   r   r   r      s    #%K%( %2h ! !4"Jh&6&6 J	$LBH[ E{),r   r   )r   rR   ro   rU   r   	tracebackr   mathr   pathlibr   timersr   utilsr   r   r	   
statisticsstatistics_errorr6   r
   r   SyntaxError
format_excr{   r   r   r   r   r   <module>r      s     	  
      +    
 	 	z, z, 	[! +y++-Js   A$ $B B