
    Xi3                       S 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rSSKrSSKJr  SSKJ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(J+r+  SSK,J-r-  SSK.J/r/  SSK.J0r0  SS K.J1r1  SS!K2J3r3  \(       a  SS"K4J5r5  S<S# jr6\Rn                  " S$S$S$S%9 " S& S'5      5       r8\Rn                  " S(S)9 " S* S+\-5      5       r9\&S=S- j5       r: " S. S,5      r;\Rn                   " S/ S05      5       r<\S>S1 j5       r=\    S?S2 j5       r>\Rn                   " S3 S45      5       r?\Rn                   " S5 S65      5       r@S@S7 jrASAS8 jrB\3\\C\D4      " 5       rESBS9 jrF\ " S$S:9      SCS; j5       rGg)Dz*Builtin plugin that adds subtests support.    )annotations)defaultdict)Callable)Iterator)Mapping)AbstractContextManager)contextmanager)	ExitStack)nullcontextN)TracebackType)Any)TYPE_CHECKING)ExceptionInfosaferepr)CaptureFixture)	FDCapture)
SysCapture)Config)hookimpl)Parser)check_ispytest)fixture)
SubRequest)catching_logs)LogCaptureHandler)LoggingPlugin)
TestReport)CallInfo)check_interactive_exception)get_reraise_exceptions)StashKey)Selfc                L    [         R                  " U [         R                  SS9  g )NzSpecify verbosity level for subtests. Higher levels will generate output for passed subtests. Failed subtests are always reported.)help)r   _add_verbosity_iniVERBOSITY_SUBTESTS)parsers    C/var/www/html/venv/lib/python3.13/site-packages/_pytest/subtests.pypytest_addoptionr*   .   s"    
!!k	    T)frozenslotskw_onlyc                  L    \ rS rSr% SrS\S'   S\S'   SS jr\SS j5       rS	r	g
)SubtestContext9   zJThe values passed to Subtests.test() that are included in the test report.
str | NonemsgzMapping[str, Any]kwargsc                .    [         R                  " U 5      $ N)dataclassesasdict)selfs    r)   _to_jsonSubtestContext._to_json@   s    !!$''r+   c                    U " US   US   S9$ )Nr3   r4   r3   r4    )clsds     r)   
_from_jsonSubtestContext._from_jsonC   s    qx(44r+   r>   Nreturndict[str, Any])r@   rE   rD   r#   )
__name__
__module____qualname____firstlineno____doc____annotations__r:   classmethodrA   __static_attributes__r>   r+   r)   r0   r0   9   s)    T	O( 5 5r+   r0   F)initc                     ^  \ rS rSr% S\S'   \S
S j5       rS
S jrSU 4S jjr\	SU 4S jj5       r
\	          SU 4S jj5       rS	rU =r$ )SubtestReportH   r0   contextc                J    U R                   u    pU SU R                  5        3$ )N )location_sub_test_description)r9   _domains      r)   	head_lineSubtestReport.head_lineL   s*    }}14557899r+   c                   / nU R                   R                  b)  UR                  SU R                   R                   S35        U R                   R                  (       aO  SR	                  S U R                   R                  R                  5        5       5      nUR                  SU S35        SR	                  U5      =(       d    S$ )	N[]z, c              3  F   #    U  H  u  pU S [        U5       3v   M     g7f)=Nr   ).0kvs      r)   	<genexpr>6SubtestReport._sub_test_description.<locals>.<genexpr>V   s%      $3N!1#Qx{m$3Ns   !()rT   z(<subtest>))rR   r3   appendr4   joinitems)r9   partsparams_descs      r)   rV   #SubtestReport._sub_test_descriptionQ   s    <<'LL1T\\--.a01<<)) $37<<3F3F3L3L3N$ K LL1[M+,xx/-/r+   c                n   > [         TU ]  5       nUS	 SUS'   U R                  R                  5       US'   U$ )NrR   SubTestReport_report_type_subtest.context)superr:   rR   )r9   data	__class__s     r)   r:   SubtestReport._to_json\   s>    w!O.^#'<<#8#8#: r+   c                `   > [         TU ]  U5      n[        R                  US   5      Ul        U$ )Nrp   )rq   rA   r0   rR   )r?   
reportdictreportrs   s      r)   rA   SubtestReport._from_jsonc   s/    #J/'22:>P3QRr+   c                  > [         TU ]  UR                  5       5      nX%l        U(       ap  UR                  (       a'  UR
                  R                  SUR                  45        UR                  (       a'  UR
                  R                  SUR                  45        U(       aH  UR                  R                  R                  5       =n(       a  UR
                  R                  SU45        U$ )NzCaptured stdout callzCaptured stderr callzCaptured log call)rq   rA   r:   rR   outsectionsrg   errhandlerstreamgetvalue)r?   test_reportrR   captured_outputcaptured_logsresultlogrs   s          r)   _newSubtestReport._newi   s     #K$8$8$:; ""&&(>@S@S'TU""&&(>@S@S'TU]%:%:%A%A%J%J%LLcLOO""$7#=>r+   r>   )rD   strrC   )rv   rE   rD   rP   )
r   r   rR   r0   r   zCaptured | Noner   zCapturedLogs | NonerD   r#   )rF   rG   rH   rI   rK   propertyrY   rV   r:   rL   rA   r   rM   __classcell__)rs   s   @r)   rP   rP   H   s}    : :	0  
    )	
 + 
 r+   rP   Subtestsc                    U R                   R                  R                  R                  S5      nUb  UR                  O[
        n[        U R                   R                  X SS9$ )z Provides subtests functionality.capturemanagerT	_ispytest)nodeconfigpluginmanager
get_pluginglobal_and_fixture_disabledr   r   ihook)requestcapmamsuspend_capture_ctxs      r)   subtestsr      sW     \\  ..99:JKF.4.@**k  GLL&&(;PTUUr+   c                  V    \ rS rSrSrSS.         S	S jjr S
     SS jjrSrg)r      z_Subtests fixture, enables declaring subtests inside test functions via the :meth:`test` method.Fr   c               >    [        U5        Xl        X l        X0l        g r6   )r   _ihook_suspend_capture_ctx_request)r9   r   r   r   r   s        r)   __init__Subtests.__init__   s     	y!$7!r+   Nc           	         [        U R                  UUU R                  U R                  U R                  R                  S9$ )a  
Context manager for subtests, capturing exceptions raised inside the subtest scope and
reporting assertion failures and errors individually.

Usage
-----

.. code-block:: python

    def test(subtests):
        for i in range(5):
            with subtests.test("custom message", i=i):
                assert i % 2 == 0

:param msg:
    If given, the message will be shown in the test report in case of subtest failure.

:param kwargs:
    Arbitrary values that are also added to the subtest report.
)r   r   r   )_SubTestContextManagerr   r   r   r   )r9   r3   r4   s      r)   testSubtests.test   s;    2 &KKMM $ 9 9==''
 	
r+   )r   r   r   )
r   pluggy.HookRelayr   *Callable[[], AbstractContextManager[None]]r   r   r   boolrD   Noner6   )r3   r2   r4   r   rD   r   )rF   rG   rH   rI   rJ   r   r   rM   r>   r+   r)   r   r      sk    i     H  	    
   
 
  
 
 	 
  
r+   c                  z    \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   SS jr        SS jrSrg)r      z
Context manager for subtests, capturing exceptions raised inside the subtest scope and handling
them through the pytest machinery.
r   r   r2   r3   rE   r4   r   r   r   r   r   r   c                h   Sn[         R                   " 5       U l        [         R                  " 5       U l        S U l        [        5       U l        U R                  R                  [        U R                  5      5      U l
        U R                  R                  [        U R                  5      5      U l        g )NT)time_startperf_counter_precise_start	_exc_infor
   _exit_stackenter_contextcapturing_outputr   _captured_outputcapturing_logs_captured_logs)r9   __tracebackhide__s     r)   	__enter__ _SubTestContextManager.__enter__   s     iik"//1$; $ 0 0 > >T\\*!
 #..<<4<<(
r+   c           
     T   SnUb  [         R                  " U5      nOS nU R                  R                  5         [        R
                  " 5       nX`R                  -
  n[        R                  " 5       n[        S    " S UU R                  UUSSS9n	U R                  R                  U R                  R                  U	S9n
[        R                  U
[        U R                   U R"                  S9U R$                  U R&                  S9nUR(                  (       aG  U R*                  R,                  [.           nXR                  R                  R0                  ==   S-  ss'   U R3                  5          U R                  R5                  US9  S S S 5        [7        X5      (       a.  U R                  R9                  U R                  R                  XS	9  UbK  [;        U[=        U R*                  5      5      (       a  g
U R                  R>                  R@                  (       a  g
g! , (       d  f       N= f)NTcall)startstopdurationwhenr   )itemr   r=   )r   r      rw   )r   r   rw   F)!r   from_exceptionr   closer   r   r   r   r   r   pytest_runtest_makereportr   r   rP   r   r0   r3   r4   r   r   failedr   stashfailed_subtests_keynodeidr   pytest_runtest_logreportr    pytest_exception_interact
isinstancer!   session
shouldfail)r9   exc_typeexc_valexc_tbr   exc_infoprecise_stopr   r   	call_inforw   
sub_reportfailed_subtestss                r)   __exit___SubTestContextManager.__exit__   s    !$33G<HH ((*"5"55yy{TN++
	 55"" 6 
 #''txx< 11--	 ( 

 "kk//0CDOLL--445:5%%'JJ//z/B ( 'y==JJ00\\&&Y 1  '#9$++#FGG||##.. ('s   *H
H')r   r   r   r   r   r   N)rD   r   )r   ztype[BaseException] | Noner   zBaseException | Noner   zTracebackType | NonerD   r   )	rF   rG   rH   rI   rJ   rK   r   r   rM   r>   r+   r)   r   r      s[     	OCCN
6,6 &6 %	6
 
6r+   r   c              #  4  #    U R                   R                  SS 5      nU R                   R                  R                  S5      n[	        USS 5      (       a  S nO.US:X  a  [        [        U SS9nOUS:X  a  [        [        U SS9nOS nUb  UR                  " 5         [        5       n Uv   Ub1  UR                  " 5       u  pVUR                  " 5         XTl        Xdl        g g ! Ub1  UR                  " 5       u  pVUR                  " 5         XTl        Xdl        f f = f7f)Ncapturer   _capture_fixturesysTr   fd)r   	getoptionr   	getplugingetattrr   r   r   r   Captured
readouterrr   rz   r|   )r   optioncapmanr   capturedrz   r|   s          r)   r   r     s     ^^%%i6F^^))334DEFv)400	5 WE	4 GtDzH))+HCMMOLL	 7))+HCMMOLL	 s   B#D&C *5D6DDc              #  (  #    U R                   R                  R                  S5      nUc  S v   g [        5       nUR	                  UR
                  5        [        U5      n[        X!R                  S9   Uv   S S S 5        g ! , (       d  f       g = f7f)Nzlogging-plugin)level)	r   r   r   r   setFormatter	formatterCapturedLogsr   	log_level)r   logging_pluginr}   r   s       r)   r   r   5  sw      ,3>>+G+G+Q+Q,N 
#%^556$W-7*B*BC DCCs   A1B3B8	B
BBc                  2    \ rS rSr% SrS\S'   SrS\S'   Srg)r   iG   r   rz   r|   r>   N)rF   rG   rH   rI   rz   rK   r|   rM   r>   r+   r)   r   r   G  s    CMCMr+   r   c                       \ rS rSr% S\S'   Srg)r   iM  r   r}   r>   N)rF   rG   rH   rI   rK   rM   r>   r+   r)   r   r   M  s    r+   r   c                N    [        U [        5      (       a  U R                  5       $ g r6   )r   rP   r:   r   s    r)   pytest_report_to_serializabler   R  s    &-((  r+   c                X    U R                  S5      S:X  a  [        R                  U 5      $ g )Nro   rn   )getrP   rA   )rr   s    r)   pytest_report_from_serializabler   X  s'    xx?2''--r+   c                >    [        S 5      U R                  [        '   g )Nc                     g)Nr   r>   r>   r+   r)   <lambda>"pytest_configure.<locals>.<lambda>d  s    Ar+   )r   r   r   )r   s    r)   pytest_configurer   c  s    (3I(>FLL$%r+   )tryfirstc                   U R                   S:w  a  g UR                  [        R                  5      S:H  n[	        U [
        5      (       a  U R                  nU R                  5       n[        U S5      (       a  U(       a  gUS:X  a  SnSnSnOg XVU U 34$ U R                  (       a  US	S
U 34$ U R                  (       a  U(       a  gSU 3S	SU 34$ U R                  (       a  U(       a  gUSSU 34$  g UR                  [           U R                     nU R                  (       a$  US:  a  SU l        US:  a  SOSn	SU SU	 3U l        g )Nr   r   wasxfail)r   r   r   skippedxfailedySUBXFAILu	SUBFAILEDz	subtests 	SUBPASSED-
SUBSKIPPEDr   r   sr   z	contains z failed subtest)r   get_verbosityr   r'   r   rP   outcomerV   hasattrr   passedr   r   r   r   longrepr)
rw   r   quietr  descriptioncategoryshortstatusfailed_subtests_countsuffixs
             r)   pytest_report_teststatusr  g  s\   
 {{f  !:!:;q@E&-((..2246:&&!I%$# vh{m$<<<==C9[M!:::}}%&wi0#;-7PPP%"C:k])CCC	    !'-@ A&-- P==2Q6%FN1A5S2F )*?)@PVxXFOr+   )r(   r   rD   r   )r   r   rD   r   )r   r   rD   zIterator[Captured])r   r   rD   zIterator[CapturedLogs | None])rw   r   rD   zdict[str, Any] | None)rr   rE   rD   zSubtestReport | None)r   r   rD   r   )rw   r   r   r   rD   z0tuple[str, str, str | Mapping[str, bool]] | None)HrJ   
__future__r   collectionsr   collections.abcr   r   r   
contextlibr   r	   r
   r   r7   r   typesr   typingr   r   pluggy_pytest._coder   _pytest._io.safereprr   _pytest.capturer   r   r   _pytest.configr   r   _pytest.config.argparsingr   _pytest.deprecatedr   _pytest.fixturesr   r   _pytest.loggingr   r   r   _pytest.reportsr   _pytest.runnerr   r    r!   _pytest.stashr"   typing_extensionsr#   r*   	dataclassr0   rP   r   r   r   r   r   r   r   r   r   r   intr   r   r  r>   r+   r)   <module>r)     s   0 " # $ $ # - %   "        ' ) * % & ! # , - $ ' ) - ) & # 6 1 " & d$=5 5 >5 E"4J 4 #4n 	V 	V0
 0
f W W Wt  8   "   "   
    {38457 ? 
4333 63 3r+   