
    BTh.                    8   d dl m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
mZ d dlmZ d dlmZ d dlmZ d dlZd dlmZ d dlmZmZ d d	lmZmZ d
dlmZ er d dlmZmZmZ d dlmZ  ed      Z  ed      Z!ejD                  jG                  d      duZ$ejD                  jG                  d      duZ%ejL                  dk  Z' ejP                  d      d0d       Z) e
d       G d d             Z* e
d       G d d             Z+dZ,d1dZ- ejP                  d      d2d       Z. ejP                         d3d        Z/ ejP                  d      d2d!       Z0d4d"Z1d4d#Z2d4d$Z3 ejP                  d      	 	 	 	 	 	 d5d%       Z4	 	 	 	 	 	 	 	 	 	 	 	 	 	 d6d&Z5	 	 	 	 	 	 	 	 	 	 d7d'Z6 ejP                  d      d8d(       Z7 ejP                         d9d)       Z8 G d* d+      Z9 ejt                  d,-      d:d.       Z;e$s ejt                  d,-      d;d/       Z<yy)<    )annotationsN)	dataclassfield)Path)time)TYPE_CHECKING)FixtureManager)MeasurementModeget_instrument_from_mode)get_environment_metadataget_git_relative_uri_and_name   )__version__)Callable	ParamSpecTypeVar)
InstrumentTPpytest_benchmarkpytest_speed)   r   r   T)trylastc                R   | j                  d      }|j                  dddd       |j                  ddt        D cg c]  }|j                   c}d	
       |j                  ddt        d       |j                  ddt        d       |j                  ddt
        d       y c c}w )NzCodSpeed benchmarking
--codspeed
store_trueFz=Enable codspeed (not required when using the CodSpeed action))actiondefaulthelp--codspeed-modestorez5The measurement tool to use for measuring performance)r   choicesr   --codspeed-warmup-timezJThe time to warm up the benchmark for (in seconds), only for walltime mode)r   typer   --codspeed-max-timezLThe maximum time to run a benchmark for (in seconds), only for walltime mode--codspeed-max-roundszKThe maximum number of rounds to run a benchmark for, only for walltime mode)getgroup	addoptionr
   valuefloatint)parsergroupmodes      h/var/www/catia.catastroantioquia-mas.com/valormas/lib/python3.12/site-packages/pytest_codspeed/plugin.pypytest_addoptionr0   )   s    OO34E	OOL	   
OO(788D	   
OO %   
OO%   
OO'  + 9s   B$)frozenc                  J    e Zd ZU dZded<   dZded<   dZded<   edd       Zy)CodSpeedConfigNz
int | Nonewarmup_time_nsmax_time_ns
max_roundsc                    |j                  dd       }|t        |dz        nd }|j                  dd       }|t        |dz        nd } | ||j                  dd       |      S )Nr#   i ʚ;r%   r&   )r4   r6   r5   )	getoptionr+   )clsconfigwarmup_timer4   max_timer5   s         r/   from_pytest_configz!CodSpeedConfig.from_pytest_config[   s~    &&'?F0;0GCm+,T 	 ##$94@7?7Kc(]23QU)''(?F#
 	
    )r:   pytest.Configreturnr3   )	__name__
__module____qualname__r4   __annotations__r5   r6   classmethodr=    r>   r/   r3   r3   U   s2    !%NJ%"K"!J
!
 
r>   r3   )unsafe_hashc                  j    e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<    eddd      Zded<   y)CodSpeedPluginboolis_codspeed_enabledr
   r.   r   
instrumentr3   r:   ztuple[str, ...]disabled_pluginszPath | Noneprofile_folderr   F)r   hashcomparer+   benchmark_countN)rA   rB   rC   rD   r   rQ   rF   r>   r/   rI   rI   j   s9    
%% FOSFr>   rI   codspeed_pluginc                @    | j                   j                  t              S N)pluginmanager
get_pluginPLUGIN_NAME)r:   s    r/   rV   rV   x   s    **;77r>   )tryfirstc           
     t   | j                  dd       | j                  dd       | j                  d      xs! t        j                  j	                  d      d u}t        j                  j	                  d      Xt        j                  j	                  d      dk(  rt
        j                  j                  }n5t
        j                  j                  }nt
        j                  j                  }t        | j                  dd       xs |      }t        |      }g }|rt        rht        j                  | j                  d	d
       | j                  j                  d       | j                  j                  d       |j!                  d       t"        r,| j                  j                  d       |j!                  d       t        j                  j	                  d      }t$        j'                  |       }t)        t+        |      || ||      ||rt-        |      nd       }| j                  j/                  |t0               y )NmarkerszAcodspeed_benchmark: mark an entire test for codspeed benchmarkingz8benchmark: mark an entire test for codspeed benchmarkingr   CODSPEED_ENVCODSPEED_RUNNER_MODEwalltimer    benchmark_disableTr   zpytest-benchmarkspeedzpytest-speedCODSPEED_PROFILE_FOLDER)rM   rK   r.   rL   r:   rN   )addinivalue_liner8   osenvirongetr
   WallTimer)   Instrumentationr   IS_PYTEST_BENCHMARK_INSTALLEDobject__setattr__optionrU   set_blockedappendIS_PYTEST_SPEED_INSTALLEDr3   r=   rI   tupler   registerrW   )	r:   rK   default_moder.   rL   rM   rN   codspeedconfigplugins	            r/   pytest_configurers   |   s   
V M 	&T"**..*HPT*T  
zz~~n%1::>>01Z?*3399L*::@@L&//556++,=tDTUD)$/J"$(v}}.A4H  ,,-?@  ,,-?@##$67$  ,,W5##N3ZZ^^$=>N#66v>N/0/n-/=tN+4F !!&+6r>   c                V   t         st        rt        | t              r| }|j	                  t
              }|j                  rh| j                  dt        r|j                  j                  n|j                        }|J |j                  d   |j                  d<   ||j                  d<   yyyy)z
    Patch the benchmark fixture to use the codspeed one if codspeed is enabled and an
    alternative benchmark fixture is available
    codspeed_benchmarkN	benchmark__benchmark)rg   rm   
isinstancer	   rV   rW   rK   getfixturedefsBEFORE_PYTEST_8_1_1sessionnodeid_arg2fixturedefs)rr   managerfixture_managerrR   codspeed_benchmark_fixturess        r/   pytest_plugin_registeredr      s     	&)B
I !*1*<*<[*I..*0*?*?$&  ''..$,,	+' /:::  00= ,,]; =XO,,[9 /I)Br>   c                B   t        |       }|j                  j                         \  }}dt         d|j                  rdnd d| dg|}t        |j                        dkD  r.|j                  ddj                  |j                         d	       d
j                  |      S )Nz
codspeed: z (enableddisabledz, )r   z4[93mCodSpeed had to disable the following plugins: z[0m
)	rV   rL   #get_instrument_config_str_and_warnsr   rK   lenrM   rl   join)r:   rr   
config_strwarnsouts        r/   pytest_report_headerr      s    F))MMOJ R"66yJGr* 
C 6""#a'

Eyy0012';	
 99S>r>   c                0    t        | dg       }d|v xs d|v S )Nfixturenamesrv   ru   )getattr)itemitem_fixturess     r/   has_benchmark_fixturer      s&    D."5M-'P+?=+PPr>   c                R    | j                  d      d uxs | j                  d      d uS )Nru   rv   )get_closest_markerr   s    r/   has_benchmark_markerr      s3     45TA 	<"";/t;r>   c                2    t        |       xs t        |       S rT   )r   r   r   s    r/   should_benchmark_itemr      s     &D*>t*DDr>   c                    t        |      }|j                  r[g }g }|D ]0  }t        |      r|j                  |        |j                  |       2 |j                  j                  |       ||dd yy)zHFilter out items that should not be benchmarked when codspeed is enabled)itemsN)rV   rK   r   rl   hookpytest_deselected)r{   r:   r   rr   
deselectedselectedr   s          r/   pytest_collection_modifyitemsr      sw    
 F!!
 	(D$T*%!!$'		(
 	%%J%7a "r>   c                   t        j                  d       t        j                         }|r(t        j                          t        j
                          	 t        ||j                        \  }} | j                  j                  |||g|i ||rt        j                          S S # |rt        j                          w w xY w)Nr   )randomseedgc	isenabledcollectdisabler   rootpathrL   measureenable)	rr   r|   r:   fnargskwargsis_gc_enabledurinames	            r/   _measurer      s     KKNLLNM





1&&//J	T(v  ((sBHHH IIK =IIK s   :B' 'C c                P     t        j                        d fd       }|S )Nc                 (    t        g| i |S rT   )r   )r   r   r:   r   r|   rr   s     r/   wrappedzwrap_runtest.<locals>.wrapped  s    DTDVDDr>   )r   P.argsr   P.kwargsr@   r   )	functoolswraps)rr   r|   r:   r   r   s   ```` r/   wrap_runtestr     s)     __RE E Nr>   c                    t        | j                        }|j                  rt        |       sy t	        |       ry t        || j                  | j                  | j                        | _        y rT   )rV   r:   rK   r   r   r   r|   runtest)r   nextitemrr   s      r/   pytest_runtest_protocolr   "  sR    $F%%-B4-HT"  T[[$,,ODLr>   c                
   t        | j                        }|j                  r|j                  j	                  |        |j
                  r(|j
                  dz  t        j                          dz  }n)| j                  j                  dt               dz  ddz  }i t               |j                  j                         }|j                  j                  dd       |j                  t        j                   |d	             y y )
Nresultsz.jsonz.codspeed/results_i  z.0fT)parentsexist_ok   )indent)rV   r:   rK   rL   reportrN   rb   getpidr   r   r   get_result_dictparentmkdir
write_textjsondumps)r{   
exitstatusrr   result_pathdatas        r/   pytest_sessionfinishr   2  s    'F!!  )   //);U>SSK '',>tv}S>QQV*WW  U*,T0A0A0Q0Q0ST   =tzz$q9: "r>   c                  0    e Zd ZdZed        ZddZddZy)BenchmarkFixturez5The fixture that can be used to benchmark a function.c                *    t         rddlm} |S t        S )Nr   r   )rg   pytest_benchmark.fixturer   )selfPytestBenchmarkFixtures     r/   	__class__zBenchmarkFixture.__class__E  s     ) *)r>   c                     i | _         || _        y rT   )
extra_info_request)r   requests     r/   __init__zBenchmarkFixture.__init__Q  s     "r>   c                    | j                   j                  }t        |      }|j                  r0t	        || j                   j
                  j                  ||g|i |S  ||i |S rT   )r   r:   rV   rK   r   noder|   )r   funcr   r   r:   rr   s         r/   __call__zBenchmarkFixture.__call__V  sl    %%F#%%**1164BFJP  (((r>   Nr   pytest.FixtureRequest)r   Callable[P, T]r   r   r   r   r@   r   )rA   rB   rC   __doc__propertyr   r   r   rF   r>   r/   r   r   B  s!    ?	  	  
)r>   r   function)scopec                    t        |       S rT   r   )r   s    r/   ru   ru   a  s    G$$r>   c                    | S )z5
        Compatibility with pytest-benchmark
        rF   )ru   r   s     r/   rv   rv   h  s
    
 "!r>   )r,   zpytest.Parser)r:   r?   r@   rI   )r:   r?   )r~   zpytest.PytestPluginManager)r   pytest.Itemr@   rJ   )r{   pytest.Sessionr:   r?   r   zlist[pytest.Item])rr   rI   r|   strr:   r?   r   r   r   r   r   r   r@   r   )
rr   rI   r|   r   r:   r?   r   r   r@   r   )r   r   r   zpytest.Item | None)r{   r   )r   r   r@   r   r   )=
__future__r   r   r   importlib.util	importlibr   rb   r   dataclassesr   r   pathlibr   r   typingr   pytest_pytest.fixturesr	   pytest_codspeed.instrumentsr
   r   pytest_codspeed.utilsr   r    r   r   r   r   r   r   r   util	find_specrg   rm   version_tuplerz   hookimplr0   r3   rI   rW   rV   rs   r   r   r   r   r   r   r   r   r   r   r   fixtureru   rv   rF   r>   r/   <module>r      s   "  	   	  (      +
 336A#A ) 8 89K LTX X %NN44^DDP **Y6  ( (V $
 
 
( tG G G  8 $.7  .7b X X4  &Q
E %2;L "  		
   ,


 
 		

 
 $   ; ;) )> j!% "% %V^^*%" &" %r>   