
    i9                       S r SSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r
  SSKrSSKrSSKrSSKrSSKrSSKrSS	KJr  SSKrSS
KJr  SSKJr  SSKJr  SSKJr  SSKrSSKrSSKJr  SSKrSSKJr  SSKJ r   SSKJ!r!  SSKJ"r"  SSKJ#r#  SSKJ$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*  SSK+J,r,  SSK+J-r-  SSK+J.r.  SSK+J/r/  SSK+J0r0  SSK1J2r2  SSK1J3r3  SSK4J5r5  SS K4J6r6  SS!K7J8r8  \(       a  SS"K9J:r:  SS#K;J<r<  SCS$ jr=SDS% jr>      SES& jr?SFS' jr@SGS) jrASHS* jrBSIS+ jrCSJS, jrDSKS- jrE      SLS. jrFSMS/ jrG " S0 S15      rH " S2 S3\I5      rJ " S4 S5\K5      rL\R                   " S6 S7\N\\O4   5      5       rP\ " S8 S9\R                  5      5       rR\ " S: S(\R                  5      5       rTSNS; jrU\R                  " S<S=9 " S> S?5      5       rVS@SA.       SOSB jjrWg)PzHCore implementation of the testing process: init, session, runtest loop.    )annotationsN)Callable)Iterable)Iterator)Sequence)Set)Path)final)Literal)overload)TYPE_CHECKING)nodes)Config)directory_arg)ExitCode)hookimpl)PytestPluginManager)
UsageError)Parser)PathAwareHookProxy)exitabsolutepath)bestrelpath
fnmatch_ex)safe_exists)scandir)CollectReport)
TestReport)collect_one_node)
SetupState)PytestWarning)Self)FixtureManagerc                ~   U R                  SS5      nUR                  SSSSSSS	9  UR                  S
SS[        SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  U R                  S5      nUR                  SSSSS9  U R	                  SSSS 9  U R                  S!S"5      nUR                  S#S$S%SS&S9  UR                  S'SS(S9  UR                  S)SS*S+S,9  UR                  S-SS*S.S,9  UR                  S/SS0S1S,9  UR                  S2S3S S4[
        R                  " [        S2S59S6S79  UR                  S8SS9S:S;S<9  UR                  S=S>SS?S:S@S<9  UR                  SASSBS:SCS<9  UR                  SDSS:SESFSG9  UR                  SHSI/ SJQSKSLSM9  U R	                  SNSOSP/ SQQSR9  U R	                  SSSTSP/ SR9  U R	                  SUSVSWSXSR9  U R	                  SYSWS:SZS[9  U R                  S\S]5      nUR                  S^S_S`[        SaSbSc9  UR                  SdSSeSfSg9  UR                  ShSiS [        S4SjSk9  g )lNgeneralzRunning and selection optionsz-xz--exitfirststore_constmaxfail   z,Exit instantly on first error or failed test)actiondestconsthelpz	--maxfailnumstorer   z'Exit after first num failures or errors)metavarr+   typer,   defaultr.   z--strict-config
store_truezbAny warnings encountered while parsing the `pytest` section of the configuration file raise errors)r+   r.   z--strict-markerszVMarkers not registered in the `markers` section of the configuration file raise errorsz--strictz&(Deprecated) alias to --strict-markerszpytest-warningsz-Wz--pythonwarningsappendz<Set which warnings to report, see -W option of Python itselffilterwarningslinelistz_Each line specifies a pattern for warnings.filterwarnings. Processed after -W/--pythonwarnings.)r2   r.   collect
collectionz--collectonlyz--collect-onlyz--coz&Only collect tests, don't execute themz--pyargsz1Try to interpret all arguments as Python packagesz--ignorepathz-Ignore path during collection (multi-allowed))r+   r1   r.   z--ignore-globz5Ignore path pattern during collection (multi-allowed)z
--deselectnodeid_prefixzDDeselect item (via node id prefix) during collection (multi-allowed)z--confcutdir
confcutdirdir)optnamez1Only load conftest.py's relative to specified dir)r,   r3   r1   r2   r.   z--noconftest
noconftestFz Don't load any conftest.py files)r+   r,   r3   r.   z--keepduplicatesz--keep-duplicateskeepduplicateszKeep duplicate testsz--collect-in-virtualenvcollect_in_virtualenvz2Don't ignore tests in a local virtualenv directoryz--continue-on-collection-errorscontinue_on_collection_errorsz4Force test execution even if collection errors occur)r+   r3   r,   r.   z--import-modeprepend)rC   r5   	importlib
importmodez\Prepend/append to sys.path when importing test modules and conftest files. Default: prepend.)r3   choicesr,   r.   norecursedirsz)Directory patterns to avoid for recursionargs)	z*.eggz.*_darcsbuildCVSdistnode_modulesvenvz{arch})r2   r3   	testpathszZDirectories to search for tests when no files or directories are given on the command linecollect_imported_testsz@Whether to collect tests in imported modules outside `testpaths`boolTconsider_namespace_packageszEConsider namespace packages when resolving module names during import)r2   r3   r.   debugconfigz(test session debugging and configurationz-cz--config-fileFILEinifilenamezcLoad configuration from `FILE` instead of trying to locate one of the implicit configuration files.)r1   r2   r,   r.   z	--rootdirrootdirzDefine root directory for tests. Can be relative path: 'root_dir', './root_dir', 'root_dir/another_dir/'; absolute path: '/home/user/root_dir'; path with variables: '$HOME/root_dir'.)r+   r,   r.   z
--basetempbasetempz^Base temporary directory for this test run. (Warning: this directory is removed if it exists.))r,   r3   r2   r1   r.   )
getgroup
_addoption	addoptionintaddini	functoolspartialr   strvalidate_basetemp)parsergroups     K/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/_pytest/main.pypytest_addoptionrd   8   s   OOI'FGE	;   
OO6   
OO*   
OO   
OO5   OO-.E	OOK	   MM/   OOI|4E	OO5   
OO@  
 
OO<	   
OOD	   
OOS	   
OO}nE@   
OO/   
OO#   
OO!$A   
OO),C   
OO2#   MM3

	    MM	   MM J	   MM%T	   OOM+UVE	(   
OO	   
OOA  
    c                   SnU (       d  [         R                  " U5      eSS jnU" [        R                  " 5       [        U 5      R	                  5       5      (       a  [         R                  " U5      eU" [        R                  " 5       R                  5       [        U 5      R                  5       5      (       a  [         R                  " U5      eU $ )NzWbasetemp must not be empty, the current working directory or any parent directory of itc                *    X:X  a  gXR                   ;   $ )z,Return whether query is an ancestor of base.T)parents)basequerys     rc   is_ancestor&validate_basetemp.<locals>.is_ancestor  s    =$$re   )ri   r	   rj   r	   returnrQ   )argparseArgumentTypeErrorr	   cwdabsoluteresolve)r:   msgrk   s      rc   r`   r`      s    
cC ((--% 488:tDz22455((-- 488:%%'d););)=>>((--Kre   c           	     <	   [         R                  U 5      n[        R                  Ul        Sn  U R                  5         SnU R                  R                  US9  SnU" X5      =(       d    SUl        Sn[H        RJ                  " URL                  5        US:  a$   U R                  RO                  X"R                  S
9  U RQ                  5         UR                  $ ! [         a    [        R                  Ul        e [         a    [        R                  Ul         N[        [        R                  4 a    [        R                   R"                  R%                  5       n[        R&                  n[)        UR*                  [        R                  5      (       av  UR*                  R,                  b  UR*                  R,                  nUS:  aC  [.        R0                  R3                  UR4                   SUR*                  R6                   S35        U R                  R9                  US9  XRl         GN[:         Ga    [        R<                  Ul        [        R                   R"                  R%                  5       n U R?                  X@R@                  5        [)        UR*                  [B        5      (       a  [.        R0                  R3                  S	5         GN^! [        R                   ab  nUR,                  b  UR,                  Ul        [.        R0                  R3                  [E        U5      RF                   SU S35         SnA GNSnAff = ff = f! [        R                   aa  nUR,                  b  UR,                  Ul        [.        R0                  R3                  [E        U5      RF                   SU S35         SnAGNSnAff = f! Sn[H        RJ                  " URL                  5        US:  a   U R                  RO                  X"R                  S
9  Ow! [        R                   a`  nUR,                  b  UR,                  Ul        [.        R0                  R3                  [E        U5      RF                   SU S35         SnAOSnAff = fU RQ                  5         f = f)zSkeleton command line program.r   r*   session   Nz: 
)excinfoz(mainloop: caught unexpected SystemExit!
)rv   
exitstatus))Sessionfrom_configr   OKrz   _do_configurehookpytest_sessionstartr   USAGE_ERRORFailedTESTS_FAILEDKeyboardInterruptr   	Exception_pytest_codeExceptionInfofrom_currentINTERRUPTED
isinstancevalue
returncodesysstderrwritetypenamers   pytest_keyboard_interruptBaseExceptionINTERNAL_ERRORnotify_exceptionoption
SystemExitr2   __name__oschdir	startpathpytest_sessionfinish_ensure_unconfigure)configdoitrv   	initstatery   rz   excs          rc   wrap_sessionr     s    !!&)G!GI0% 	R  "IKK++G+<I!%f!6!;!G> 
""#>C00#0B0B 1  	""$U  	!)!5!5G 	7!)!6!6G!4>>2 		,mm11>>@G)1)=)=J'--88==++7!(!9!9Jq=JJ$$(8(8'9GMM<M<M;Nb%QRKK11'1B!+ 	R!)!8!8Gmm11>>@GR''? gmmZ88JJ$$%PQ >> C>>-),G&

  DI$6$6#7r#b!ABBC	R, >> C>>-),G&

  DI$6$6#7r#b!ABBC 
""#>C00#0B0B 1  >> C>>-),G&

  DI$6$6#7r#b!ABBC 	""$s   AC #M >M
O DM
)O ,AM
4K>M
O M$AM:M
>O MM

O O!AN==O)R/#PRR'AR=RRRc                "    [        U [        5      $ N)r   _mainr   s    rc   pytest_cmdline_mainr   O  s    &&re   r{   c                    U R                   R                  US9  U R                   R                  US9  UR                  (       a  [        R
                  $ UR                  S:X  a  [        R                  $ g)zWDefault command line protocol for initialization, session,
running tests and reporting.ru   r   N)r   pytest_collectionpytest_runtestlooptestsfailedr   r   testscollectedNO_TESTS_COLLECTED)r   rv   s     rc   r   r   S  s`     KK!!'!2
KK""7"3$$$			1	$***re   c                $    U R                  5         g r   )perform_collectru   s    rc   r   r   `  s    re   c                   U R                   (       aX  U R                  R                  R                  (       d3  U R	                  U R                    SU R                   S:w  a  SOS S35      eU R                  R                  R
                  (       a  g[        U R                  5       H  u  pUS-   [        U R                  5      :  a  U R                  US-      OS nUR                  R                  R                  X#S9  U R                  (       a  U R                  U R                  5      eU R                  (       d  M  U R	                  U R                  5      e   g)Nz errorr*   s z during collectionT)itemnextitem)r   r   r   rB   Interruptedcollectonly	enumerateitemslenr   pytest_runtest_protocol
shouldfailr   
shouldstop)rv   ir   r   s       rc   r   r   d  s   7>>#8#8#V#V!!""#61D1D1I#r)RRde
 	
 ~~((W]]++,q53w}}3E+E7==Q'400d0N..!3!344%%g&8&899 , re   c                     U R                  S5      R                  5       =(       d     U R                  SS5      R                  5       $ ! [         a     gf = f)a  Attempt to detect if ``path`` is the root of a Virtual Environment by
checking for the existence of the pyvenv.cfg file.

[https://peps.python.org/pep-0405/]

For regression protection we also check for conda environments that do not include pyenv.cfg yet --
https://github.com/conda/conda/issues/13337 is the conda issue tracking adding pyenv.cfg.

Checking for the `conda-meta/history` file per https://github.com/pytest-dev/pytest/issues/12652#issuecomment-2246336902.

z
pyvenv.cfgz
conda-metahistoryF)joinpathis_fileOSErrorr:   s    rc   _in_venvr   w  sR    MM,'//1 @}}\95==?	
  s   AA 
AAc                  ^  T R                   S:X  a  gUR                  ST R                  S9nU=(       d    / nUR                  S5      nU(       a  UR	                  S U 5       5        T U;   a  gUR                  ST R                  S9nU=(       d    / nUR                  S5      nU(       a  UR	                  S	 U 5       5        [        U 4S
 jU 5       5      (       a  gUR                  S5      nU(       d  [        T 5      (       a  gT R                  5       (       a,  UR                  S5      n[        U 4S jU 5       5      (       a  gg )N__pycache__Tcollect_ignorer   ignorec              3  8   #    U  H  n[        U5      v   M     g 7fr   r   .0xs     rc   	<genexpr>(pytest_ignore_collect.<locals>.<genexpr>  s     @ZLOOZ   collect_ignore_globignore_globc              3  8   #    U  H  n[        U5      v   M     g 7fr   r   r   s     rc   r   r     s     D^LOO^r   c              3  v   >#    U  H.  n[         R                   " [        T5      [        U5      5      v   M0     g 7fr   )fnmatchr_   )r   globcollection_paths     rc   r   r     s(     
U7??3/T;;s   69rA   rG   c              3  <   >#    U  H  n[        UT5      v   M     g 7fr   r   )r   patr   s     rc   r   r     s     M;LCz#//;Ls   )	name_getconftest_pathlistparent	getoptionextendanyr   is_dirgetini)r   r   ignore_paths
excludeoptignore_globsexcludegloboptallow_in_venvnorecursepatternss   `       rc   pytest_ignore_collectr     s0   },//55 0 L  %2L!!(+J@Z@@,&//O$:$: 0 L  %2L%%m4ND^DD

U
UUU$$%<=MXo66"MM/:M;LMMMre   c                (    [         R                  XS9$ )Nr   )Dirfrom_parentr:   r   s     rc   pytest_collect_directoryr     s     ??6?--re   c                F   [        UR                  S5      =(       d    / 5      nU(       d  g / n/ nU  HG  nUR                  R                  U5      (       a  UR	                  U5        M6  UR	                  U5        MI     U(       a  UR
                  R                  US9  X0S S & g g )Ndeselect)r   )tupler   nodeid
startswithr5   r   pytest_deselected)r   r   deselect_prefixes	remaining
deselectedcolitems         rc   pytest_collection_modifyitemsr     s    f..z:@bAIJ>>$$%677g&W%	  %%J%7a re   c                  4    \ rS rSr      SS jrSS jrSrg)FSHookProxyi  c                    Xl         X l        g r   pmremove_mods)selfr   r   s      rc   __init__FSHookProxy.__init__  s    
 &re   c                h    U R                   R                  XR                  S9nX R                  U'   U$ )N)remove_plugins)r   subset_hook_callerr   __dict__)r   r   r   s      rc   __getattr__FSHookProxy.__getattr__  s0    GG&&t<L<L&Mdre   r   N)r   r   r   zAbstractSet[object]rm   None)r   r_   rm   zpluggy.HookCaller)r   
__module____qualname____firstlineno__r   r  __static_attributes__ re   rc   r   r     s(    '' )' 
	're   r   c                      \ rS rSrSrSrSrg)r   i  z*Signals that the test run was interrupted.builtinsr  Nr   r  r	  r
  __doc__r  r  re   rc   r   r     s
    4Jre   r   c                      \ rS rSrSrSrg)r   i  z"Signals a stop as failed test run.r  Nr  r  re   rc   r   r     s    ,re   r   c                  .    \ rS rSr% SrS\S'   SS jrSrg)	_bestrelpath_cachei  r   r	   r:   c                :    [        U R                  U5      nX U'   U$ r   )r   r:   )r   r:   rs      rc   __missing___bestrelpath_cache.__missing__  s    		4(T
re   r  N)r:   r	   rm   r_   )r   r  r	  r
  	__slots____annotations__r  r  r  re   rc   r  r    s    I
Jre   r  c                  P   ^  \ rS rSrSr\      SU 4S jj5       rSS jrSrU =r	$ )r   i  zCollector of files in a file system directory.

.. versionadded:: 8.0

.. note::

    Python directories with an `__init__.py` file are instead collected by
    :class:`~pytest.Package` by default. Both are :class:`~pytest.Directory`
    collectors.
c                  > [         TU ]  XS9$ )zThe public constructor.

:param parent: The parent collector of this Dir.
:param path: The directory's path.
:type path: pathlib.Path
)r   r:   )superr   )clsr   r:   	__class__s      rc   r   Dir.from_parent  s     w"&"<<re   c              #  `  #    U R                   nU R                  n[        U R                  5       H  nUR	                  5       (       ad  [        UR                  5      nU R                  R                  USS9(       d  UR                  XAS9(       a  Mb  UR                  X@S9nUb  Uv   Mz  M|  UR                  5       (       d  M  [        UR                  5      nU R                  R                  U5      (       d  UR                  XAS9(       a  M  UR                  X@S9nU S h  vN   M     g  N	7f)NTwith_parents)r   r   r   	file_pathr   )r   ihookr   r:   r   r	   rv   
isinitpathr   r   r   pytest_collect_file)r   r   r%  direntryr:   colcolss          rc   r8   Dir.collect  s      

		*H  HMM*||..t$.G2242W 44$4L?I # !!##HMM*||..t442242W 0040M! +   s   B=D.AD."D,#
D.r  )r   nodes.Collectorr:   r	   rm   r$   )rm   z&Iterable[nodes.Item | nodes.Collector])
r   r  r	  r
  r  classmethodr   r8   r  __classcell__r  s   @rc   r   r     sB    	 == 	=
 
= =   re   r   c                    ^  \ rS rSr% Sr\r\rS\S'   S\S'   S\S'   S"U 4S	 jjr\	S#S
 j5       r
S$S jr\S%S j5       r\R                  S&S j5       r\S%S j5       r\R                  S&S j5       r\S'S j5       rS(S jr\" SS9S)S j5       r\" SS9S*S j5       r\rSS.     S+S jjrS,S jr      S-S jr\ S.     S/S jj5       r\ S.     S0S jj5       r S1     S0S jjr S2     S3S jjrS4S jrS5S  jrS!rU =r$ )6r{   i#  zgThe root of the collection tree.

``Session`` collects the initial paths given as arguments to pytest.
r"   _setupstater%   _fixturemanagerint | ExitCoderz   c           
       > [         TU ]  SUR                  S S UU SS9  SU l        SU l        SU l        SU l        UR                  R                  R                  S5      U l        [        5       U l        [        5       U l        / U l        / U l        0 U l        / U l        [#        UR                  5      U l        U R&                  R(                  R+                  U SS9  g )Nr   )r   r:   fspathr   r   rv   r   r   Fr9   rv   )r   )r  r   rootpathr   r   _shouldstop_shouldfailtracerootget	frozenset_initialpaths_initialpaths_with_parents	_notfound_initial_parts_collection_cacher   r  _bestrelpathcacher   pluginmanagerregister)r   r   r  s     rc   r   Session.__init__2  s     	 	
 ',',\\&&**<8
.7k;D;'FH8:GI')
2DV__2U!!**4i*@re   c                $    U R                  US9nU$ )Nr   )_create)r  r   rv   s      rc   r|   Session.from_configL  s    ;;f;5re   c           	         SU R                   R                   SU R                   SU R                   SU R                   S3	[        U SS5      -  $ )N< z exitstatus=%r testsfailed=z testscollected=>rz   z<UNSET>)r  r   r   r   r   getattrr   s    rc   __repr__Session.__repr__Q  s_    ''($)) 5++, -"112!5 D,	23 	3re   c                    U R                   $ r   )r7  rN  s    rc   r   Session.shouldstopY      re   c                z    USL a0  U R                   (       a  [        R                  " [        S5      SS9  g Xl         g )NFzCsession.shouldstop cannot be unset after it has been set; ignoring.rw   
stacklevel)r7  warningswarnr#   r   r   s     rc   r   rR  ]  :     E>d..MMY 	  re   c                    U R                   $ r   )r8  rN  s    rc   r   Session.shouldfailk  rS  re   c                z    USL a0  U R                   (       a  [        R                  " [        S5      SS9  g Xl         g )NFzCsession.shouldfail cannot be unset after it has been set; ignoring.rw   rU  )r8  rW  rX  r#   rY  s     rc   r   r\  o  rZ  re   c                B    U R                   R                  R                  $ )zAThe path from which pytest was invoked.

.. versionadded:: 7.0.0
)r   invocation_paramsr=   rN  s    rc   r   Session.startpath}  s     {{,,000re   c                     U R                   U   $ r   )rB  )r   	node_paths     rc   _node_location_to_relpath!Session._node_location_to_relpath  s    %%i00re   T)tryfirstc                    U R                   (       a  U R                  U R                   5      eU R                  (       a  U R                  U R                  5      eg r   )r   r   r   r   rN  s    rc   pytest_collectstartSession.pytest_collectstart  s=    ??++doo..??""4??33 re   c                   UR                   (       aq  [        US5      (       d_  U =R                  S-  sl        U R                  R	                  S5      nU(       a'  U R                  U:  a  SU R                   S3U l        g g g g g )Nwasxfailr*   r)   zstopping after z	 failures)failedhasattrr   r   getvaluer   )r   reportr)   s      rc   pytest_runtest_logreport Session.pytest_runtest_logreport  so    ==!<!<!kk**95G4++w6$3D4D4D3EY"O 7w "==re   Fr!  c                   [        U[        5      (       a  UO
[        U5      nU(       a  X0R                  ;   $ X0R                  ;   $ )a  Is path an initial path?

An initial path is a path explicitly given to pytest on the command
line.

:param with_parents:
    If set, also return True if the path is a parent of an initial path.

.. versionchanged:: 8.0
    Added the ``with_parents`` parameter.
)r   r	   r>  r=  )r   r:   r"  path_s       rc   r&  Session.isinitpath  s<    $ #4..DJ;;;;....re   c                4   [        U[        5      (       a  UO
[        U5      nU R                  R                  nUR	                  U5      nUR
                  R                  U5      nU(       a  [        [        X55      5      nU$ U R                  R                  nU$ r   )
r   r	   r   rC  _getconftestmodules_conftest_plugins
differencer   r   r   )r   r5  r:   r   my_conftestmodulesr   proxys          rc   gethookproxySession.gethookproxy  s    #FD11vtF|[[&&  33D9**556HI&{2'CDE  KK$$Ere   c                    X;   a  X!   $ UR                  5       (       a3  U R                  UR                  5      nUR                  XS9nUb  U4OSnO8UR	                  5       (       a!  U R                  U5      nUR                  XS9nOSnXRU'   U$ )zuCreate a Collector for the given path.

`path_cache` makes it so the same Collectors are returned for the same
path.
r   r  r#  )r   rz  r   r   r   r'  )r   r:   
path_cacher%  r)  r*  s         rc   _collect_pathSession._collect_path  s     ##;;==%%dkk2E*/*H*H +I +C 9<sfRD\\^^%%d+E,,t,ID D4re   c                    g r   r  r   rH   genitemss      rc   r   Session.perform_collect  s      #re   c                    g r   r  r  s      rc   r   r    s     25re   c                n   Uc  U R                   R                  nU R                  SX5        U R                  R                  =R                  S-  sl        U R                   R
                  n/ U l        / U l        0 U l        / U l	        U R                  n / n/ nU H  n[        U R                   R                  R                  UU R                   R                  R                  S9nU R                  R                  U5        UR                  UR                   5        UR                  UR                   5        UR#                  UR                   R$                  5        M     ['        U5      U l        ['        U5      U l        [-        U 5      n	U R.                  R1                  U	S9  U R                  R                  =R                  S-  sl        U R                  (       aU  / n
U R                   H;  u  p{U(       a  U
R                  SU SU< S35        M'  U
R                  SU 35        M=     [3        U
6 eU(       d  U	R4                  nONU	R6                  (       a=  U	R4                   H-  nU R                  R#                  U R9                  U5      5        M/     U R                   R:                  R=                  5         UR?                  X R                   US	9  / U l        / U l        0 U l        URA                  U S
9  U(       a  [C        U5      U l"        U$ ! / U l        / U l        0 U l        URA                  U S
9  f = f)a3  Perform the collection phase for this session.

This is called by the default :hook:`pytest_collection` hook
implementation; see the documentation of this hook for more details.
For testing purposes, it may also be called directly on a fresh
``Session``.

This function normally recursively expands any collectors collected
from the session to their items, and only items are returned. For
testing purposes, this may be suppressed by passing ``genitems=False``,
in which case the return value contains these collectors unexpanded,
and ``session.items`` is empty.
r   r*   	as_pypathrn  znot found: z
(no match in any of )zfound no collectors for )rv   r   r   ru   )#r   rH   r9  r:  indentr   r?  r@  rA  r   resolve_collection_argumentr_  r=   r   pyargsr5   r:   r   rh   r<  r=  r>  r!   r%  pytest_collectreportr   resultpassedr  rC  check_pendingr   pytest_collection_finishr   r   )r   rH   r  r   r   initialpathsinitialpaths_with_parentsargcollection_argumentreperrors
collectorsnodes                rc   r   r    s     <;;##D

$d1

!#{{ !#
8<

.	8')L46%&AKK1155"kk0077'#
 ##**+>?##$7$<$<=)001D1I1IJ)001D1I1I1Q1QR  "+<!8D.78Q.RD+"4(CJJ++3+7JJOO""a'"~~'+~~OC!)#.DZNRST (@&FG (6 !&))

:: #



))$--*=> !+ KK%%335..[[ /   DN"$D%'D"))$)7"%e*D  DN"$D%'D"))$)7s   H=L &L4c                    XR                   ;   a  U(       a  U R                   U   nUS4$ [        U5      nX0R                   U'   US4$ )NTF)rA  r!   )r   r  handle_dupesr  s       rc   _collect_one_nodeSession._collect_one_node>  sN    
 )))l((.C9"4(C+.""4(:re   c              #    #    0 nU R                   R                  nU R                   GHH  nU R                  SU5        U R                  R                  =R
                  S-  sl        UR                  nUR                  nUR                  nUR                  5       (       a  U(       a   SXE4< 35       eU/nUc>  UR                   H-  nUR                  U5      (       d    O}UR                  SU5        M/     OfUR                  S5      n	[        UR                  S5       H;  u  pU
[        U	5      :  d  UR                   X*    :w  a    OUR                  SU5        M=     Sn/ nU / UQUQ4/nU(       Ga  UR#                  5       u  pU(       d  Uv   SnM)  [%        U[&        R(                  5      (       d  MJ  [%        U[*        5      (       a0  [%        US   [,        5      (       d   eUR/                  US   U5      nO[        U5      S:H  =(       a-    [%        US   [,        5      =(       a    US   R1                  5       (       + nU R3                  UU5      u  nnU(       d*  UR4                  (       d  UR6                  R9                  US	9  UR4                  (       d  GM0  UR:                  nSn[=        U5       GH+  n[%        US   [,        5      (       a  UR                  US   :H  n[>        R@                  S
:X  a  U(       d  [B        R                  RE                  UR                  US   5      nU=(       aL    [B        R                  RG                  UR                  5      [B        R                  RG                  US   5      :H  nO=URH                  US   :H  =(       d$    URH                  R                  S5      S   US   :H  nU(       d  GM  URK                  UUSS  45        SnGM.     U(       d  URK                  U5        U(       a  GM  U(       d;  SRM                  [O        U5      /UQ75      nU RP                  RK                  UU45        U R                  R                  =R
                  S-  sl        GMK     g 7f)Nzprocessing argumentr*   zinvalid arg r   .rw   FTr  win32[::))r   rC  r@  r9  r:  r  r:   partsmodule_namer   rh   _is_in_confcutdirinsertsplitr   r   stempopr   r   	Collectorr{   r	   r~  r   r  r  r%  r  r  reversedr   platformr   samefileislinkr   r5   joinr_   r?  )r   r}  r   r  argpathnamesr  pathsr:   module_name_partsr   any_matched_in_initial_partnotfound_collectorswork	matchnode
matchpartssubnodesr  r  	duplicateany_matched_in_collectorr  is_match	same_file
report_args                            rc   r8   Session.collectK  s     =?
[[&&#'#6#6JJ,.ABJJOO""a'")..G'--E-99K ~~ EL'1A0D"EEyIE "#OOD//55LLD) , %0$5$5c$:!(!<GA3011TYYBSTVBW5WLLD)  = +0'"$'''(QD (,
%	 "#O26/ ")U__== i11%jmT::::(66z!}jQH
 J1, 4&z!}d;4&qM113$L
 &*%;%;I|%TNC$SZZ "<<C<H:: "zzH ,1($X.D!*Q-66#'99
1#=<<728 )+(8(8JqM(RI (1 ( "tyy 9#%77>>*Q-#@!A % !IIA6 H#yys3A6*Q-G !  xT:ab>$:;3703 /6 0'..y9I $L /!YYG'=u'=>
%%z3F&GHJJOO""a'""_ $7s   N>Q5<Q5A1Q5c              #  v  #    U R                  SU5        [        U[        R                  5      (       a  UR                  R                  US9  Uv   g [        U[        R                  5      (       d   eU R                  R                  S5      nU=(       a    [        U[        R                  5      (       + nU R                  X5      u  pEU(       a  U(       d  g UR                  (       a,  UR                   H  nU R                  U5       S h  vN   M     U(       d  UR                  R                  US9  g g  N*7f)Nr  )r   r@   r  )r9  r   r   Itemr%  pytest_itemcollectedr  r   r   Filer  r  r  r  r  )r   r  r@   r  r  r  subnodes          rc   r  Session.genitems  s     

:t$dEJJ''JJ+++6JdEOO4444![[223CDN . O:dEJJ3OPL!33DGNCzz"zzG#}}W555  *

//s/;  6s   D
D9D7+D9)rB  rA  r@  r=  r>  r?  r8  r7  r   r   r   r   r9  )r   r   rm   r  )r   r   rm   r{   )rm   r_   )rm   
bool | str)r   r  rm   r  )rm   r	   )rb  r	   rm   r_   )rm   r  )rn  zTestReport | CollectReportrm   r  )r:   zstr | os.PathLike[str]r"  rQ   rm   rQ   )r5  zos.PathLike[str]rm   zpluggy.HookRelay)r:   r	   r}  z%dict[Path, Sequence[nodes.Collector]]rm   zSequence[nodes.Collector])..)rH   Sequence[str] | Noner  zLiteral[True]rm   zSequence[nodes.Item])rH   r  r  rQ   rm   z&Sequence[nodes.Item | nodes.Collector])NT)T)r  r,  r  rQ   rm   ztuple[CollectReport, bool])rm   z&Iterator[nodes.Item | nodes.Collector])r  znodes.Item | nodes.Collectorrm   zIterator[nodes.Item]) r   r  r	  r
  r  r   r   r  r   r-  r|   rO  propertyr   setterr   r   rc  r   rg  ro  r  r&  rz  r~  r   r   r  r8   r  r  r.  r/  s   @rc   r{   r{   #  s    
 KF##A4  3     ! !     ! ! 1 11 t4 4 tP P 4 #	/$/ 	/
 
/0" : 
#	> JM#(#:G#	# # AD5(5:>5	/5 5
 CGP(P;?P	/Pj "  
$	w(r< <re   c                F    [         R                  R                  U 5      nUb  UR                  b  UR                  S:X  a  gUR                  (       a)  [        R                  R                  UR                  5      $ UR                  $ ! [        [        [
        4 a     gf = f)z]Search sys.path for the given a dotted module name, and return its file
system path if found.N	namespace)rD   util	find_specAttributeErrorImportError
ValueErrororiginsubmodule_search_locationsr   r:   dirname)r  specs     rc   search_pypathr    s~    ~~''4 |t{{*dkk[.H		(	(wwt{{++{{ K4 s   B B B T)frozenc                  8    \ rS rSr% SrS\S'   S\S'   S\S'   S	rg
)CollectionArgumenti  zA resolved collection argument.r	   r:   zSequence[str]r  
str | Noner  r  N)r   r  r	  r
  r  r  r  r  re   rc   r  r    s    )
Jre   r  Fr  c                  [        U5      R                  S5      u  p4nUR                  S5      tpgU(       a  US    U U 3US'   SnU(       a  [        U5      n	U	b  UnU	nX-  n
[	        U
5      n
[        U
5      (       d#  U(       a  SOSn[        UR                  US95      eU(       a8  U
R                  5       (       a#  U(       a  SOS	n[        UR                  US95      e[        U
UUS
9$ )ak  Parse path arguments optionally containing selection parts and return (fspath, names).

Command-line arguments can point to files and/or directories, and optionally contain
parts for specific tests selection, for example:

    "pkg/tests/test_foo.py::TestClass::test_foo"

This function ensures the path exists, and returns a resolved `CollectionArgument`:

    CollectionArgument(
        path=Path("/full/path/to/pkg/tests/test_foo.py"),
        parts=["TestClass", "test_foo"],
        module_name=None,
    )

When as_pypath is True, expects that the command-line argument actually contains
module paths instead of file-system paths:

    "pkg.tests.test_foo::TestClass::test_foo"

In which case we search sys.path for a matching module, and then return the *path* to the
found module, which may look like this:

    CollectionArgument(
        path=Path("/home/u/myvenv/lib/site-packages/pkg/tests/test_foo.py"),
        parts=["TestClass", "test_foo"],
        module_name="pkg.tests.test_foo",
    )

If the path doesn't exist, raise UsageError.
If the path is a directory and selection parts are present, raise UsageError.
r  r  Nz9module or package not found: {arg} (missing __init__.py?)z"file or directory not found: {arg})r  z9package argument cannot contain :: selection parts: {arg}z;directory argument cannot contain :: selection parts: {arg})r:   r  r  )
r_   	partitionr  r  r   r   r   formatr   r  )invocation_pathr  r  ri   squacketreststrpathr  r  pyarg_strpathr5  rs   s               rc   r  r    s   F s8--c2DDjj&OGRyk(D62b	K%g.$!K#G&F&!Fv  H5 	
 ,--  HN 	
 ,-- re   )ra   r   rm   r  )r:   r_   rm   r_   )r   r   r   z2Callable[[Config, Session], int | ExitCode | None]rm   r3  )r   r   rm   r3  )r   r   rv   r{   rm   zint | ExitCode | None)rv   r{   rm   r  )rv   r{   rm   rQ   )r:   r	   rm   rQ   )r   r	   r   r   rm   zbool | None)r:   r	   r   r,  rm   znodes.Collector | None)r   zlist[nodes.Item]r   r   rm   r  )r  r_   rm   r  )r  r	   r  r_   r  rQ   rm   r  )Xr  
__future__r   rn   collections.abcr   r   r   r   r   AbstractSetdataclassesr   r]   rD   importlib.utilr   pathlibr	   r   typingr
   r   r   r   rW  pluggyr   r   _pytest._code_pytest.configr   r   r   r   r   r   _pytest.config.argparsingr   _pytest.config.compatr   _pytest.outcomesr   _pytest.pathlibr   r   r   r   r   _pytest.reportsr   r    _pytest.runnerr!   r"   _pytest.warning_typesr#   typing_extensionsr$   _pytest.fixturesr%   rd   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	dataclassdictr_   r  	Directoryr   r  r{   r  r  r  r  re   rc   <module>r     s   N "  $ $ $ $ .      	  
          ! ( # # . % , 4 ! ( ' & ' # ) & + % / &/@F288L88v'
&*#L.
.'..$ # -Y - dCi   0 %// 0  0 f q<eoo q< q<h$ d#  $ ;@AA #A37AAre   