
    [Fi              	          d 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Zddlm	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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 ddlmZ ddlmZ ddlZddlZddlm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'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl/m1Z1 dd l/m2Z2 dd!l/m3Z3 dd"l/m4Z4 dd#l5m6Z6 dd$l5m7Z7 dd%l8m9Z9 dd&l8m:Z: dd'l;m<Z< erdd(lm=Z= d)e(d*dfd+Z>d,e?d*e?fd-Z@d.e!d/ee!d0geeeAe#f      f   d*eeAe#f   fd1ZBd.e!d*eeAe#f   fd2ZCd.e!d3d0d*eeeAe#f      fd4ZDdUd5ZEd3d0d*eFfd6ZGd,e	d*eFfd7ZHd8e	d.e!d*eeF   fd9ZId,e	d:ej                  d*eej                     fd;ZKd<eej                     d.e!d*dfd=ZM G d> d?      ZN G d@ dAeO      ZP G dB dCeQ      ZRej                   G dD dEee	e?f                ZTe G dF dGej                               ZVe G dH d0ej                               ZWdIe?d*ee?   fdJZX ej                  dKL       G dM dN             ZYdOdPdQe	dRe?dSeFd*eYfdTZZy)VzHCore implementation of the testing process: init, session, runtest loop.    N)Path)AbstractSet)Callable)Dict)final)	FrozenSet)Iterable)Iterator)List)Literal)Optional)overload)Sequence)Tuple)TYPE_CHECKING)Union)nodes)Config)directory_arg)ExitCode)hookimpl)PytestPluginManager)
UsageError)Parser)PathAwareHookProxy)FixtureManager)exitabsolutepath)bestrelpath
fnmatch_ex)safe_exists)scandir)CollectReport)
TestReport)collect_one_node)
SetupState)PytestWarning)Selfparserreturnc           
         | j                  dddg d       | j                  dddg        | j                  dd	      }|j                  d
ddddd       | j                  d      }|j                  dddd       | j                  ddd       |j                  dddt        ddd        |j                  d!d"d#       |j                  d$d"d%       |j                  d&d"d'       |j                  d(d)d*t
        d+d,-       |j                  d.d"d/d0d12       |j                  d3dd4d56       | j                  d7d8      }|j                  d9d:d;d"d<       |j                  d=d"d>       |j                  d?dd@dAB       |j                  dCdd@dDB       |j                  dEddFdGB       |j                  dHdId dJt        j                  t        dHK      dLM       |j                  dNd"dOd/dPQ       |j                  dRdSd"dTd/dUQ       |j                  dVd"dWd/dXQ       |j                  dYdZg d[d\d]^       | j                  d_d`d/dab       | j                  dcdd      }|j                  dedfd t        dJdgh       y )iNnorecursedirsz)Directory patterns to avoid for recursionargs)	z*.eggz.*_darcsbuildCVSdistnode_modulesvenvz{arch})typedefault	testpathszZDirectories to search for tests when no files or directories are given on the command linegeneralzRunning and selection optionsz-xz--exitfirststore_constmaxfail   z,Exit instantly on first error or failed test)actiondestconsthelpzpytest-warningsz-Wz--pythonwarningsappendz<Set which warnings to report, see -W option of Python itself)r=   r@   filterwarningslinelistz_Each line specifies a pattern for warnings.filterwarnings. Processed after -W/--pythonwarnings.)r6   r@   z	--maxfailnumstorer   z'Exit after first num failures or errors)metavarr=   r6   r>   r7   r@   z--strict-config
store_truezbAny warnings encountered while parsing the `pytest` section of the configuration file raise errorsz--strict-markerszVMarkers not registered in the `markers` section of the configuration file raise errorsz--strictz&(Deprecated) alias to --strict-markersz-cz--config-fileFILEinifilenamezcLoad configuration from `FILE` instead of trying to locate one of the implicit configuration files.)rF   r6   r>   r@   z--continue-on-collection-errorsFcontinue_on_collection_errorsz4Force test execution even if collection errors occur)r=   r7   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@   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=   rF   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>   r7   rF   r6   r@   z--noconftest
noconftestz Don't load any conftest.py files)r=   r>   r7   r@   z--keepduplicatesz--keep-duplicateskeepduplicateszKeep duplicate testsz--collect-in-virtualenvcollect_in_virtualenvz2Don't ignore tests in a local virtualenv directoryz--import-modeprepend)rV   rA   	importlib
importmodez\Prepend/append to sys.path when importing test modules and conftest files. Default: prepend.)r7   choicesr>   r@   consider_namespace_packagesboolzEConsider namespace packages when resolving module names during import)r6   r7   r@   debugconfigz(test session debugging and configurationz
--basetempbasetempz^Base temporary directory for this test run. (Warning: this directory is removed if it exists.))r>   r7   r6   rF   r@   )
addinigetgroup
_addoption	addoptionintstr	functoolspartialr   validate_basetemp)r+   groups     ^/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/_pytest/main.pypytest_addoptionri   ;   s   
MM3

	    MM	   OOI'FGE	;   OO-.E	OOK	   MM/   
6   
*   
   
5  
 
(   
),C   
	   OOI|4E	OO5   
OO@  
 
OO<	   
OOD	   
OOS	   
OO}nE@   
OO/   
OO#   
OO!$A   
OO2#   MM%T	   OOM+UVE	OOA  
    rN   c                    d}| st        j                  |      dt        dt        dt        fd} |t        j                         t        |       j                               rt        j                  |       |t        j                         j                         t        |       j                               rt        j                  |      | S )NzWbasetemp must not be empty, the current working directory or any parent directory of itbasequeryr,   c                 *    | |k(  ry|| j                   v S )z,Return whether query is an ancestor of base.T)parents)rl   rm   s     rh   is_ancestorz&validate_basetemp.<locals>.is_ancestor   s    5=$$rj   )argparseArgumentTypeErrorr   r[   cwdabsoluteresolve)rN   msgrp   s      rh   rf   rf      s    
cC ((--%$ %t % % 488:tDz2245((-- 488:%%'d););)=>((--Krj   configdoitSessionc           	      	   t         j                  |       }t        j                  |_        d}	 	 | j                          d}| j                  j                  |       d} || |      xs d|_        d}tI        jJ                  |jL                         |dk\  r(	 | j                  jO                  ||j                  
       | jQ                          |j                  S # t        $ r t        j                  |_         t        $ r t        j                  |_        Y t        t        j                  f$ r t        j                   j"                  j%                         }t        j&                  }t)        |j*                  t        j                        rt|j*                  j,                  |j*                  j,                  }|dk  rCt.        j0                  j3                  |j4                   d|j*                  j6                   d       | j                  j9                  |       ||_        Y t:        $ r t        j<                  |_        t        j                   j"                  j%                         }	 | j?                  || j@                         t)        |j*                  tB              rt.        j0                  j3                  d	       nu# t        j                  $ r_}|j,                  |j,                  |_        t.        j0                  j3                  tE        |      jF                   d| d       Y d}~nd}~ww xY wY w xY w# t        j                  $ r`}|j,                  |j,                  |_        t.        j0                  j3                  tE        |      jF                   d| d       Y d}~d}~ww xY w# d}tI        jJ                  |jL                         |dk\  r	 | j                  jO                  ||j                  
       nu# t        j                  $ r_}|j,                  |j,                  |_        t.        j0                  j3                  tE        |      jF                   d| d       Y d}~nd}~ww xY w| jQ                          w xY w)zSkeleton command line program.r   r<   session   Nz: 
)excinfoz(mainloop: caught unexpected SystemExit!
)r|   
exitstatus))ry   from_configr   OKr   _do_configurehookpytest_sessionstartr   USAGE_ERRORFailedTESTS_FAILEDKeyboardInterruptr   	Exception_pytest_codeExceptionInfofrom_currentINTERRUPTED
isinstancevalue
returncodesysstderrwritetypenamerv   pytest_keyboard_interruptBaseExceptionINTERNAL_ERRORnotify_exceptionoption
SystemExitr6   __name__oschdir	startpathpytest_sessionfinish_ensure_unconfigure)rw   rx   r|   	initstater   r   excs          rh   wrap_sessionr     s    !!&)G!GI0% 	R  "IKK++G+<I!%fg!6!;!G> 
""#>C00#0B0B 1  	""$U  	!)!5!5G 	7!)!6!6G!4>>2 		,mm11>>@G/7/C/CJ'--8==++7!(!9!9Jq=JJ$$(8(8'9GMM<M<M;Nb%QRKK11'1B!+G 	R!)!8!8Gmm11>>@GR''? gmmZ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  <L=N6 DL=$N6 'AL=.K
:L=L6AL1,L=1L66L=9N6 <L==N6  N3AN..N36'R'PRQ8AQ3.R3Q88Rc                 "    t        | t              S N)r   _mainrw   s    rh   pytest_cmdline_mainr   K  s    &&rj   r|   c                     | j                   j                  |       | j                   j                  |       |j                  rt        j
                  S |j                  dk(  rt        j                  S y)z[Default command line protocol for initialization, session,
    running tests and reporting.r{   r   N)r   pytest_collectionpytest_runtestlooptestsfailedr   r   testscollectedNO_TESTS_COLLECTED)rw   r|   s     rh   r   r   O  s`     KK!!'!2
KK""7"3$$$			1	$***rj   c                 $    | j                          y r   )perform_collectr{   s    rh   r   r   \  s    rj   c                    | j                   rX| j                  j                  j                  s8| j	                  d| j                   | j                   dk7  r	dfz        dfz        | j                  j                  j
                  ryt        | j                        D ]  \  }}|dz   t        | j                        k  r| j                  |dz      nd }|j                  j                  j                  ||       | j                  r| j                  | j                        | j                  s| j	                  | j                         y)Nz%d error%s during collectionr<   s T)itemnextitem)r   rw   r   rJ   Interruptedcollectonly	enumerateitemslenr   pytest_runtest_protocol
shouldfailr   
shouldstop)r|   ir   r   s       rh   r   r   `  s&   7>>#8#8#V#V!!*""7+>+>!+CCLM
 	
IKLM
 	

 ~~((W]]+ :4+,q53w}}3E+E7==Q'400dX0N..!3!344%%g&8&899: rj   c                     | j                  t        j                  j                  d      rdnd      }	 |j	                         sy	 dt        fd|j                         D              S # t
        $ r Y yw xY w)zAttempt to detect if ``path`` is the root of a Virtual Environment by
    checking for the existence of the appropriate activate script.winScriptsbinF)activatezactivate.cshzactivate.fishActivatezActivate.batzActivate.ps1c              3   :   K   | ]  }|j                   v   y wr   name).0fname	activatess     rh   	<genexpr>z_in_venv.<locals>.<genexpr>  s     E5uzzY&Es   )joinpathr   platform
startswithis_dirOSErroranyiterdir)rN   bindirr   s     @rh   _in_venvr   t  sq     ]](?(?(F9ERF}} I EFNN4DEEE  s   A+ +	A76A7collection_pathc                 <     j                   dk(  ry|j                  d j                        }|xs g }|j                  d      }|r|j	                  d |D                |v ry|j                  d j                        }|xs g }|j                  d      }|r|j	                  d	 |D               t         fd
|D              ry|j                  d      }|st               ry j                         r&|j                  d      }t         fd|D              ryy )N__pycache__Tcollect_ignorerN   ignorec              3   2   K   | ]  }t        |        y wr   r   r   xs     rh   r   z(pytest_ignore_collect.<locals>.<genexpr>  s     @LO@   collect_ignore_globignore_globc              3   2   K   | ]  }t        |        y wr   r   r   s     rh   r   z(pytest_ignore_collect.<locals>.<genexpr>  s     DLODr   c              3   n   K   | ],  }t        j                   t              t        |             . y wr   )fnmatchrc   )r   globr   s     rh   r   z(pytest_ignore_collect.<locals>.<genexpr>  s%     
U7??3/T;
Us   25rU   r.   c              3   6   K   | ]  }t        |        y wr   r!   )r   patr   s     rh   r   z(pytest_ignore_collect.<locals>.<genexpr>  s     MCz#/Ms   )	r   _getconftest_pathlistparent	getoptionextendr   r   r   getini)r   rw   ignore_paths
excludeoptignore_globsexcludegloboptallow_in_venvnorecursepatternss   `       rh   pytest_ignore_collectr     s$   },//55 0 L  %2L!!(+J@Z@@,&//O$:$: 0 L  %2L%%m4ND^DD

U
UU$$%<=MXo6"MM/:M;LMMrj   r   c                 0    t         j                  ||       S )Nr   )Dirfrom_parentrN   r   s     rh   pytest_collect_directoryr     s     ??6?--rj   r   c                     t        |j                  d      xs g       }|sy g }g }| D ]@  }|j                  j                  |      r|j	                  |       0|j	                  |       B |r"|j
                  j                  |       || d d  y y )Ndeselect)r   )tupler   nodeidr   rA   r   pytest_deselected)r   rw   deselect_prefixes	remaining
deselectedcolitems         rh   pytest_collection_modifyitemsr    s    f..z:@bAIJ &>>$$%67g&W%	& %%J%7a rj   c                   J    e Zd Zdedee   ddfdZdedej                  fdZ
y)FSHookProxypmremove_modsr,   Nc                      || _         || _        y r   )r  r  )selfr  r  s      rh   __init__zFSHookProxy.__init__  s    
 &rj   r   c                 r    | j                   j                  || j                        }|| j                  |<   |S )N)remove_plugins)r  subset_hook_callerr  __dict__)r	  r   r   s      rh   __getattr__zFSHookProxy.__getattr__  s4    GG&&tD<L<L&Mdrj   )r   
__module____qualname__r   r   objectr
  rc   pluggy
HookCallerr   rj   rh   r  r    sA    '' !(' 
	' (9(9 rj   r  c                       e Zd ZdZdZy)r   z*Signals that the test run was interrupted.builtinsNr   r  r  __doc__r  rj   rh   r   r     s
    4Jrj   r   c                       e Zd ZdZy)r   z"Signals a stop as failed test run.Nr  r  rj   rh   r   r     s    ,rj   r   c                   ,    e Zd ZU dZeed<   dedefdZy)_bestrelpath_cacher   rN   r,   c                 <    t        | j                  |      }|| |<   |S r   )r    rN   )r	  rN   rs      rh   __missing__z_bestrelpath_cache.__missing__  s     		4(T
rj   N)r   r  r  	__slots__r   __annotations__rc   r  r  rj   rh   r  r    s    I
J  rj   r  c                        e Zd ZdZedej                  deddf fd       Zde	e
ej                  ej                  f      fdZ xZS )r   a  Collector 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.
    r   rN   r,   r*   c                &    t         |   ||      S )zThe public constructor.

        :param parent: The parent collector of this Dir.
        :param path: The directory's path.
        )r   rN   )superr   )clsr   rN   	__class__s      rh   r   zDir.from_parent  s     w"&t"<<rj   c              #   :  K   | j                   }| j                  }t        | j                        D ]  }|j	                         rat        |j                        }| j                  j                  |d      s|j                  ||      rY|j                  ||       }|o| t|j                         st        |j                        }| j                  j                  |      s|j                  ||      r|j                  ||       }|E d {     y 7 w)NTwith_parents)r   rw   r   	file_pathr   )rw   ihookr$   rN   r   r   r|   
isinitpathr   r   is_filepytest_collect_file)r	  rw   r,  direntryrN   colcolss          rh   rL   zDir.collect  s      

		* 	 H HMM*||..t$.G224PV2W 44$t4L?I!!#HMM*||..t4224PV2W 0040M!	    s   BDD5ADDD)r   r  r  r  classmethodr   	Collectorr   r   r	   r   ItemrL   __classcell__r&  s   @rh   r   r     s_    	 == 	=
 
= = %

EOO(C"DE  rj   r   c                   *    e Zd ZU dZeZeZeed<   eed<   e	e
ef   ed<   deddf fdZededd fd	       Zdefd
Zede	eef   fd       Zej*                  de	eef   ddfd       Zede	eef   fd       Zej*                  de	eef   ddfd       Zedefd       ZdedefdZ ed      d-d       Z ed      de	eef   ddfd       ZeZddde	edf   dedefdZ ddde!jD                  fdZ#ded e$ee%e&jN                     f   de%e&jN                     fd!Z(e)	 d.d"e*e%e      d#d$de%e&jV                     fd%       Z,e)	 d.d"e*e%e      d#ede%e	e&jV                  e&jN                  f      fd&       Z,	 d/d"e*e%e      d#ede%e	e&jV                  e&jN                  f      fd'Z,	 d0d(e&jN                  d)ede-eef   fd*Z.de/e	e&jV                  e&jN                  f      fd+Z0d(e	e&jV                  e&jN                  f   de/e&jV                     fd,Z1 xZ2S )1ry   zoThe root of the collection tree.

    ``Session`` collects the initial paths given as arguments to pytest.
    _setupstate_fixturemanagerr   rw   r,   Nc           	         t         |   d|j                  d d || d       d| _        d| _        d| _        d| _        |j                  j                  j                  d      | _        t               | _        t               | _        g | _        g | _        i | _        g | _        t#        |j                        | _        | j&                  j(                  j+                  | d       y )Nr   )r   rN   fspathr   rw   r|   r   r   FrM   r|   r   )r$  r
  rootpathr   r   _shouldstop_shouldfailtracerootget	frozenset_initialpaths_initialpaths_with_parents	_notfound_initial_parts_collection_cacher   r  _bestrelpathcacherw   pluginmanagerregister)r	  rw   r&  s     rh   r
  zSession.__init__-  s     	 	
 -2-2\\&&**<8
.7k;D;'FH8:GI')
2DV__2U!!**4i*@rj   c                 *    | j                  |      }|S )Nr   )_create)r%  rw   r|   s      rh   r   zSession.from_configG  s    ;;f;5rj   c                     d| j                   j                  | j                  t        | dd      | j                  | j
                  fz  S )Nz6<%s %s exitstatus=%r testsfailed=%d testscollected=%d>r   z<UNSET>)r&  r   r   getattrr   r   r	  s    rh   __repr__zSession.__repr__L  sG    GNN##IID,	2K
 
 	
rj   c                     | j                   S r   )r>  rP  s    rh   r   zSession.shouldstopU      rj   r   c                 t    |du r-| j                   r!t        j                  t        d      d       y || _         y )NFzCsession.shouldstop cannot be unset after it has been set; ignoring.r}   
stacklevel)r>  warningswarnr)   r	  r   s     rh   r   zSession.shouldstopY  <     E>d..MMY 	  rj   c                     | j                   S r   )r?  rP  s    rh   r   zSession.shouldfailg  rS  rj   c                 t    |du r-| j                   r!t        j                  t        d      d       y || _         y )NFzCsession.shouldfail cannot be unset after it has been set; ignoring.r}   rU  )r?  rW  rX  r)   rY  s     rh   r   zSession.shouldfailk  rZ  rj   c                 B    | j                   j                  j                  S )zQThe path from which pytest was invoked.

        .. versionadded:: 7.0.0
        )rw   invocation_paramsrQ   rP  s    rh   r   zSession.startpathy  s     {{,,000rj   	node_pathc                      | j                   |   S r   )rI  )r	  r_  s     rh   _node_location_to_relpathz!Session._node_location_to_relpath  s    %%i00rj   T)tryfirstc                     | j                   r| j                  | j                         | j                  r| j                  | j                        y r   )r   r   r   r   rP  s    rh   pytest_collectstartzSession.pytest_collectstart  s=    ??++doo..??""4??33 rj   reportc                     |j                   ret        |d      sX| xj                  dz  c_        | j                  j	                  d      }|r%| j                  |k\  rd| j                  z  | _        y y y y y )Nwasxfailr<   r;   zstopping after %d failures)failedhasattrr   rw   getvaluer   )r	  re  r;   s      rh   pytest_runtest_logreportz Session.pytest_runtest_logreport  si     ==!<!kk**95G4++w6">$BRBR"S 7w "==rj   Fr(  rN   zos.PathLike[str]r)  c                x    t        |t              r|n
t        |      }|r|| j                  v S || j                  v S )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   rE  rD  )r	  rN   r)  path_s       rh   r-  zSession.isinitpath  s=    $ #4.DJD;;;;D....rj   r<  c                 "   t        |t              r|n
t        |      }| j                  j                  }|j	                  |      }|j
                  j                  |      }|rt        t        ||            }|S | j                  j                  }|S r   )
r   r   rw   rJ  _getconftestmodules_conftest_plugins
differencer   r  r   )r	  r<  rN   r  my_conftestmodulesr  proxys          rh   gethookproxyzSession.gethookproxy  s    #FD1vtF|[[&&  33D9**556HI&{2{'CDE  KK$$Erj   
path_cachec                    ||v r||   S |j                         r6| j                  |j                        }|j                  ||       }||fnd}n7|j	                         r%| j                  |      }|j                  ||       }nd}|||<   |S )zCreate a Collector for the given path.

        `path_cache` makes it so the same Collectors are returned for the same
        path.
        r   r  r*  )r   rt  r   r   r.  r/  )r	  rN   ru  r,  r1  r2  s         rh   _collect_pathzSession._collect_path  s     :d##;;=%%dkk2E-2-K-K$ .L .C 9<sfRD\\^%%d+E,,tD,ID D
4rj   r/   genitemszLiteral[True]c                      y r   r  r	  r/   rx  s      rh   r   zSession.perform_collect  s      #rj   c                      y r   r  rz  s      rh   r   zSession.perform_collect  s     8;rj   c                 N   || j                   j                  }| j                  d| |       | j                  j                  xj                  dz  c_        | j                   j
                  }g | _        g | _        i | _        g | _	        | j                  }	 g }g }|D ]  }t        | j                   j                  j                  || j                   j                  j                        }| j                  j                  |       |j                  |j                          |j                  |j                          |j#                  |j                   j$                          t'        |      | _        t'        |      | _        t-        |       }	| j.                  j1                  |	       | j                  j                  xj                  dz  c_        | j                  rMg }
| j                  D ]4  \  }}|r|
j                  d| d|d       !|
j                  d|        6 t3        |
 |s|	j4                  }nG|	j6                  r;|	j4                  D ],  }| j                  j#                  | j9                  |             . | j                   j:                  j=                          |j?                  | | j                   |	       g | _        g | _        i | _        |jA                  | 
       |rtC        |      | _"        |S # g | _        g | _        i | _        |jA                  | 
       w xY w)a  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re  znot found: z
(no match in any of )zfound no collectors for )r|   rw   r   r{   )#rw   r/   r@  rA  indentr   rF  rG  rH  r   resolve_collection_argumentr^  rQ   r   pyargsrA   rN   r   ro   rC  rD  rE  r'   r,  pytest_collectreportr   resultpassedrx  rJ  check_pendingr  pytest_collection_finishr   r   )r	  r/   rx  r   r   initialpathsinitialpaths_with_parentsargcollection_argumentreperrors
collectorsnodes                rh   r   zSession.perform_collect  s     <;;##D

$dD1

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

:: #

 ?

))$--*=>? KK%%335..T[[ /   DN"$D%'D"))$)7"%e*D  DN"$D%'D"))$)7s   H,K; ;)L$r  handle_dupesc                     || j                   v r|r| j                   |   }|dfS t        |      }|| j                   |<   |dfS )NTF)rH  r'   )r	  r  r  r  s       rh   _collect_one_nodezSession._collect_one_node<  sR    
 4)))l((.C9"4(C+.D""4(:rj   c              #     K   i }| j                   j                  }| j                  D ]  }| j                  d|       | j                  j                  xj
                  dz  c_        |j                  }|j                  }|j                  }|j                         r|rJ d||f       |g}|7|j                  D ]'  }|j                  |      s ny|j                  d|       ) nd|j                  d      }	t        |j                  d      D ]:  \  }
}|
t        |	      kD  s|j                   |	|
    k7  r n|j                  d|       < d}g }| g ||fg}|r9|j#                         \  }}|s| d}t%        |t&        j(                        s:t%        |t*              r+t%        |d   t,              sJ |j/                  |d   |      }nt        |      dk(  xr( t%        |d   t,              xr |d   j1                          }| j3                  ||      \  }}|s(|j4                  s|j6                  j9                  |	       |j4                  s|j:                  }d}t=        |      D ]  }t%        |d   t,              r|j                  |d   k(  }t>        j@                  d
k(  r|stB        j                  jE                  |j                  |d         }|xrL tB        j                  jG                  |j                        tB        j                  jG                  |d         k(  }n8|jH                  |d   k(  xs$ |jH                  j                  d      d   |d   k(  }|s|jK                  ||dd  f       d} |s|jK                  |       |r9|s;djM                  tO        |      g|      }| jP                  jK                  ||f       | j                  j                  xj
                  dz  c_         y w)Nzprocessing argumentr<   zinvalid arg r   .r}   FTr  win32[::))rw   rJ  rG  r@  rA  r  rN   partsmodule_namer   ro   _is_in_confcutdirinsertsplitr   r   stempopr   r   r4  ry   r   rw  r.  r  r  r,  r  r  reversedr   r   r   samefileislinkr   rA   joinrc   rF  )r	  ru  r  r  argpathnamesr  pathsrN   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                            rh   rL   zSession.collectI  s     =?
[[&&#'#6#6 o	(JJ,.ABJJOO""a'")..G'--E-99K ~~ EL'51A0D"EEyIE "#OO *D//5LLD)* %0$5$5c$:!(!< *GAt3011TYYBSUVTVBW5WLLD)* +0'"$ (%(%()*  (,
%	: "#O26/ ")U__= i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. 8D!*Q-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 !  T:ab>$:;370386 0'..y9I L /!YYG'=u'=>
%%z3F&GHJJOO""a'"_o	(s   MO;0O;A*O;c              #   4  K   | j                  d|       t        |t        j                        r!|j                  j                  |       | y t        |t        j                        sJ | j                  j                  d      }|xr t        |t        j                         }| j                  ||      \  }}|r|sy |j                  r*|j                  D ]  }| j                  |      E d {     |s|j                  j                  |       y y 7 &w)Nrx  )r   rT   r  )r@  r   r   r5  r,  pytest_itemcollectedr4  rw   r   Filer  r  r  rx  r  )r	  r  rT   r  r  r  subnodes          rh   rx  zSession.genitems  s      	

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

//s/;  6s   C-D/D0'D)r,   N)..)NT)T)3r   r  r  r  r   r   r(   r!  r   r   rb   r   r   r
  r3  r   rc   rQ  propertyr[   r   setterr   r   r   ra  r   rd  r&   r%   rk  r  r-  r  	HookRelayrt  r   r   r   r4  rw  r   r   r5  r   r   r  r
   rL   rx  r6  r7  s   @rh   ry   ry     s   
 KF##c8m$$Av A$ A4  I  
# 
  E$),     !dCi 0 !T ! !  E$),     !dCi 0 !T ! ! 14 1 114 1C 1 t4 4 tTJ56T	T T 4 #	/C++,/ 	/
 
/0#5 &:J:J " x889 
%//	"	> OR#Xc]+#=L#	%**	# # DG;Xc]+;=A;	%

EOO34	5; ;
 FJPXc]+P>BP	%

EOO34	5Pj "oo  
}d"	#	w(%

EOO(C"DE w(r<%**eoo56<	%**	<rj   r  c                 4   	 t         j                  j                  |       }||j                  |j                  dk(  ry|j                  r)t        j                  j                  |j                        S |j                  S # t        t        t
        f$ r Y yw xY w)zaSearch sys.path for the given a dotted module name, and return its file
    system path if found.N	namespace)rW   util	find_specAttributeErrorImportError
ValueErrororiginsubmodule_search_locationsr   rN   dirname)r  specs     rh   search_pypathr    s~    ~~''4 |t{{*dkk[.H		(	(wwt{{++{{ K4 s   B   BBT)frozenc                   <    e Zd ZU dZeed<   ee   ed<   ee   ed<   y)CollectionArgumentzA resolved collection argument.rN   r  r  N)	r   r  r  r  r   r!  r   rc   r   r  rj   rh   r  r    s    )
JC=#rj   r  Fr}  invocation_pathr  r~  c                   t        |      j                  d      \  }}}|j                  d      ^}}|r|d    | | |d<   d}|rt        |      }	|	|}|	}| |z  }
t	        |
      }
t        |
      s!|rdnd}t        |j                  |            |r1|
j                         r!|rdnd	}t        |j                  |            t        |
||
      S )a  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})rN   r  r  )
rc   	partitionr  r  r   r#   r   formatr   r  )r  r  r~  rl   squacketreststrpathr  r  pyarg_strpathr<  rv   s               rh   r  r    s   F s8--c2D(Djj&OGeRyk(D62b	K%g.$!K#Gw&F&!Fv  H5 	
 ,--  HN 	
 ,-- rj   )r|   ry   r,   N)[r  rq   dataclassesr   rd   rW   importlib.utilr   pathlibr   r   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   rW  r  r   r   _pytest._code_pytest.configr   r   r   r   r   r   _pytest.config.argparsingr   _pytest.config.compatr   _pytest.fixturesr   _pytest.outcomesr   _pytest.pathlibr   r    r"   r#   r$   _pytest.reportsr%   r&   _pytest.runnerr'   r(   _pytest.warning_typesr)   r*   ri   rc   rf   rb   r   r   r   r   r[   r   r   r   r4  r   r5  r  r  r   r   r   r   	dataclassr  	Directoryr   ry   r  r  r  r  rj   rh   <module>r     s   N       	  
                     ! ( # # . % , 4 + ! ( ' & ' # ) & + % / yV y yxC C 288"FI#6sH}AU8V#VW8
3=8v' '5h+? '
& 
9 
%X:N1O 
	 d (F4 FD F(#4 # #HTN #L.
..eoo.ejj)9 6 d $ # -Y - dCi   / %// /  / d v<eoo v< v<rs x} $ d#  $ ;@AA #A37AArj   