
    [Fi=d                     ,   d Z ddlmZ ddlZddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ ddlmc 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% e"d          Z&de'de(fdZ)d8dZ*i Z+dddgie+d<   dg die+d <   e+d   jY                         e+d!<    e*e+d!   e+d           e+d   e+d"<    G d# d$      Z-d%ed&e(ddfd'Z.e%j^                  d%edee(e'gdf   fd(       Z0e%j^                  d%edee(e'gdf   fd)       Z1d*e(d+e(ddfd,Z2 e%j^                  d-.      d%edee(e'gdf   fd/       Z3d0eddfd1Z4d2eddfd3Z5d2eddfd4Z6d5e(de	e(   fd6Z7 G d7 d      Z8y)9a  Report test results in JUnit-XML format, for use with Jenkins and build
integration servers.

Based on initial code from Ross Lawley.

Output conforms to
https://github.com/jenkinsci/xunit-plugin/blob/master/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd
    )datetimeN)Callable)Dict)List)Match)Optional)Tuple)Union)nodes)timing)ExceptionRepr)ReprFileLocation)Config)filename_arg)Parser)FixtureRequest)
TestReport)StashKey)TerminalReporterLogXMLargreturnc                 t    dt         t           dt        fd}d}t        j                  ||t        |             S )a!  Visually escape invalid XML characters.

    For example, transforms
        'hello\aworld\b'
    into
        'hello#x07world#x08'
    Note that the #xABs are *not* XML escapes - missing the ampersand &#xAB.
    The idea is to escape visually for the user rather than for XML itself.
    matchobjr   c                 R    t        | j                               }|dk  rd|z  S d|z  S )N   z#x%02Xz#x%04X)ordgroup)r   is     b/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/_pytest/junitxml.pyreplzbin_xml_escape.<locals>.repl5   s.     !9a<a<    u    [^	
 -~-퟿-�က0-ჿff])r   strresub)r   r!   illegal_xml_res      r    bin_xml_escaper'   *   s=     uSz  c   	W  66.$C11r"   c                     i }| j                         D ]I  \  }}|j                         D ]1  \  }}t        |t              st        t	        |            ||z   ||<   3 K | j                  |       y N)items
isinstancelist	TypeErrortypeupdate)leftrightresultklvlkrvrs          r    merge_familyr7   E   sm    F**, !Bkkm 	!FBb$'R))bF2J	!!
 	KKr"   testcase	classnamename_base)filelineurl_base_legacyxunit1xunit2c            	          e Zd Zdeeef   ddddfdZdej                  ddfdZ	d	ed
e
ddfdZd	ed
e
ddfdZdeej                     fdZdeddfdZdej                  fdZd#dededee   ddfdZdeddfdZdededefdZdedededdfdZdeddfdZdeddfdZdeddfdZdeddfdZdeddfd Zdeddfd!Zd$d"Zy)%_NodeReporternodeidxmlr   r   Nc                     || _         || _        | j                  j                  | _        | j                  j                  | _        d| _        g | _        g | _        i | _        y )N        )idrE   	add_statsfamilyduration
propertiesr   attrs)selfrD   rE   s      r    __init__z_NodeReporter.__init__\   sL    ++hhoo13')
%'
r"   nodec                     | j                   j                  |j                         | j                  j	                  |       y r)   )rE   rI   tagr   append)rN   rP   s     r    rS   z_NodeReporter.appendf   s*    488$

$r"   r:   valuec                 b    | j                   j                  t        |      t        |      f       y r)   )rL   rS   r#   r'   rN   r:   rT   s      r    add_propertyz_NodeReporter.add_propertyj   s"    D	>%+@ABr"   c                 F    t        |      | j                  t        |      <   y r)   )r'   rM   r#   rV   s      r    add_attributez_NodeReporter.add_attributem   s     .u 5

3t9r"   c                     | j                   rRt        j                  d      }| j                   D ],  \  }}|j                  t        j                  d||             . |S yz9Return a Junit node containing custom properties, if any.rL   propertyr:   rT   N)rL   ETElementrS   rN   rL   r:   rT   s       r    make_properties_nodez"_NodeReporter.make_properties_nodep   sT    ??L1J# Re!!"**Zd%"PQRr"   
testreportc                    t        |j                        }| j                  }|d d }| j                  j                  r&|j                  d| j                  j                         dj                  |      t        |d         |j                  d   d}|j                  d   t        |j                  d         |d<   t        |d      r|j                  |d<   || _        | j                  j                  |       | j                  dk(  ry i }| j                  D ]-  }|t        | j                     d	   v s| j                  |   ||<   / || _        y )
Nr   .)r9   r:   r<      r=   r>   r@   r8   )mangle_test_addressrD   rM   rE   prefixinsertjoinr'   locationr#   hasattrr>   r/   rJ   families)rN   rb   namesexisting_attrs
classnamesrM   
temp_attrskeys           r    record_testreportz_NodeReporter.record_testreporty   s-   #J$5$563BZ
88??a1*-"59-''*!

 q!-
 3 3A 67E&M:u%%>>E%L


.) ;;(" 
:: 	2Cht{{+J77"&**S/
3	2  
r"   c                     t        j                  d| j                  d| j                  z        }| j	                         }||j                  |       |j                  | j                         |S )Nr8   %.3f)time)r^   r_   rM   rK   ra   rS   extendr   )rN   r8   rL   s      r    to_xmlz_NodeReporter.to_xml   sV    ::j$**6DMM;QR..0
!OOJ'

#r"   rR   messagedatac                 t    t        j                  ||      }t        |      |_        | j	                  |       y )N)ry   r^   r_   r'   textrS   )rN   rR   ry   rz   rP   s        r    _add_simplez_NodeReporter._add_simple   s*    zz#w/"4(	Dr"   reportc                 R   | j                   j                  s|j                  ry |j                  }|j                  }|j
                  }| j                   j                  dk(  ry d}| j                   j                  dv r| j                  |d      }| j                   j                  dv r*|| j                  |d      z  }| j                  ||d       d}| j                   j                  dv r*|| j                  |d	      z  }| j                  ||d
       d}|r| j                  ||d       y y )Nno )logallz Captured Log )
system-outout-errr   z Captured Out r   )
system-errr   r   z Captured Err r   )	rE   log_passing_testspassed	capstdoutcaplog	capstderrlogging_prepare_content_write_content)rN   r   content_outcontent_logcontent_errcontent_alls         r    write_captured_outputz#_NodeReporter.write_captured_output   s   xx))fmm&&mm&&88t#88~-//=MNK88??400>NOOK\BK88??400>NOOK\BK\B r"   contentheaderc                 J    dj                  |j                  dd      |dg      S )N
P   -r   )rj   center)rN   r   r   s      r    r   z_NodeReporter._prepare_content   s#    yy&--C0'2>??r"   jheaderc                 p    t        j                  |      }t        |      |_        | j	                  |       y r)   r|   )rN   r   r   r   rR   s        r    r   z_NodeReporter._write_content   s(    jj!!'*Cr"   c                 &    | j                  d       y )Nr   )rI   rN   r   s     r    append_passz_NodeReporter.append_pass   s    x r"   c                 6   t        |d      r| j                  dd       y |j                  J t        |j                  dd       }||j                  }nt        |j                        }t        |      }| j                  d|t        |j                               y )Nwasxfailskippedz%xfail-marked test passes unexpectedly	reprcrashfailure)rl   r~   longreprgetattrry   r#   r'   )rN   r   r   ry   s       r    append_failurez_NodeReporter.append_failure   s    6:&Y(OP??...4;d5I $#++foo.$W-GYV__1EFr"   c                 l    |j                   J | j                  ddt        |j                                y )Nerrorzcollection failure)r   r~   r#   r   s     r    append_collect_errorz"_NodeReporter.append_collect_error   s.    ***"6FOO8LMr"   c                 P    | j                  ddt        |j                               y )Nr   zcollection skipped)r~   r#   r   r   s     r    append_collect_skippedz$_NodeReporter.append_collect_skipped   s    $8#foo:NOr"   c                 ,   |j                   J t        |j                   dd       }||j                  }nt        |j                         }|j                  dk(  rd| d}nd| d}| j                  dt        |      t        |j                                y )Nr   teardownzfailed on teardown with ""zfailed on setup with "r   )r   r   ry   r#   whenr~   r'   )rN   r   r   reasonmsgs        r    append_errorz_NodeReporter.append_error   s    ***07OO[$1
	  &&F)F;;*$-fXQ7C*6(!4C."5s6??7KLr"   c                    t        |d      rW|j                  }|j                  d      r|dd  }t        |      }t	        j
                  dd|      }| j                  |       y t        |j                  t              sJ |j                  \  }}}|j                  d      r|dd  }| d	| d
| }t	        j
                  ddt        |            }t        |      |_
        | j                  |       | j                  |       y )Nr   zreason:    r   zpytest.xfail)r.   ry   z	Skipped: 	   :z: zpytest.skip)rl   r   
startswithr'   r^   r_   rS   r+   r   tupler}   r   )rN   r   xfailreasonr   filenamelineno
skipreasondetailss           r    append_skippedz_NodeReporter.append_skipped   s    6:& //K%%j1)!"o(5KjjUGKK foou555+1??(Hfj$$[1'^
!
!F82j\:Gjj~j7QG *'2GLKK &&v.r"   c                 n    | j                         | j                  j                          fd| _         y )Nc                       S r)    )rz   s   r    <lambda>z(_NodeReporter.finalize.<locals>.<lambda>	  s    d r"   )rx   __dict__clear)rN   rz   s    @r    finalizez_NodeReporter.finalize  s'    {{} #r"   r)   r   N)__name__
__module____qualname__r
   r#   r   rO   r^   r_   rS   objectrW   rY   r   ra   rs   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r"   r    rC   rC   [   s   (uS*_5 (H ( ( 2::  $  C CV C C6# 6f 6 6hrzz&:  J  4  <

 s S  QU 
CJ C4 C.@ @S @S @Z #  PT 
!* ! !GZ GD G N: N$ N
PZ PD PM: M$ M /Z /D /,#r"   rC   requestfixture_namec                     ddl m} | j                  j                  j	                  t
        d      }|A|j                  dvr2| j                  j                   || d|j                   d             yyy)z[Emit a PytestWarning about the given fixture being incompatible with newer xunit revisions.r   )PytestWarningN)r@   legacyz$ is incompatible with junit_family 'z' (use 'legacy' or 'xunit1'))	_pytest.warning_typesr   configstashgetxml_keyrJ   rP   warn)r   r   r   rE   s       r    !_warn_incompatibility_with_xunit2r     sl     4
..


"
"7D
1C
3::-AA. DSZZLPlm	
 Br"   c                 H     t         d       dt        dt        ddf fd}|S )an  Add extra properties to the calling test.

    User properties become part of the test report and are available to the
    configured reporters, like JUnit XML.

    The fixture is callable with ``name, value``. The value is automatically
    XML-encoded.

    Example::

        def test_function(record_property):
            record_property("example_key", 1)
    record_propertyr:   rT   r   Nc                 T    j                   j                  j                  | |f       y r)   )rP   user_propertiesrS   )r:   rT   r   s     r    append_propertyz(record_property.<locals>.append_property,  s    $$++T5M:r"   )r   r#   r   )r   r   s   ` r    r   r     s2     &g/@A;c ;& ;T ; r"   c                 N   ddl m} | j                  j                   |d             t	        | d       dt
        dt        ddfd	}|}| j                  j                  j                  t        d      }|1|j                  | j                  j                        }|j                  }|S )
zAdd extra xml attributes to the tag for the calling test.

    The fixture is callable with ``name, value``. The value is
    automatically XML-encoded.
    r   )PytestExperimentalApiWarningz/record_xml_attribute is an experimental featurerecord_xml_attributer:   rT   r   Nc                      y r)   r   r]   s     r    add_attr_noopz+record_xml_attribute.<locals>.add_attr_noopB  s    r"   )r   r   rP   r   r   r#   r   r   r   r   r   node_reporterrD   rY   )r   r   r   	attr_funcrE   r   s         r    r   r   2  s     CLL$%VW &g/EFC  4  I
..


"
"7D
1C
))',,*=*=>!//	r"   paramvc                     d}t        |t              s1d}t        |j                  | t	        |      j
                              y)zcUsed by record_testsuite_property to check that the given parameter name is of the proper
    type.Tz5{param} parameter needs to be a string, but {g} given)r   gN)r+   r#   r-   formatr.   r   )r   r   __tracebackhide__r   s       r    _check_record_param_typer   O  s@     aE

$q'2B2B
CDD r"   session)scopec                     d}dt         dt        ddfd}| j                  j                  j	                  t
        d      }||j                  }|S )a+  Record a new ``<property>`` tag as child of the root ``<testsuite>``.

    This is suitable to writing global information regarding the entire test
    suite, and is compatible with ``xunit2`` JUnit family.

    This is a ``session``-scoped fixture which is called with ``(name, value)``. Example:

    .. code-block:: python

        def test_foo(record_testsuite_property):
            record_testsuite_property("ARCH", "PPC")
            record_testsuite_property("STORAGE_TYPE", "CEPH")

    :param name:
        The property name.
    :param value:
        The property value. Will be converted to a string.

    .. warning::

        Currently this fixture **does not work** with the
        `pytest-xdist <https://github.com/pytest-dev/pytest-xdist>`__ plugin. See
        :issue:`7767` for details.
    Tr:   rT   r   Nc                      d}t        d|        y)zFNo-op function in case --junit-xml was not passed in the command-line.Tr:   N)r   )r:   rT   r   s      r    record_funcz.record_testsuite_property.<locals>.record_funct  s      .r"   )r#   r   r   r   r   r   add_global_property)r   r   r   rE   s       r    record_testsuite_propertyr   X  sX    4 /# /f / /
 ..


"
"7D
1C
--r"   parserc                    | j                  d      }|j                  dddddt        j                  t        d      d d	       |j                  d
dddd d       | j                  ddd       | j                  ddd       | j                  dddd       | j                  ddd       | j                  ddd        y )!Nzterminal reportingz
--junitxmlz--junit-xmlstorexmlpathpath)optnamez0Create junit-xml style report file at given path)actiondestmetavarr.   defaulthelpz--junitprefixz--junit-prefixr#   z0Prepend prefix to classnames in junit-xml output)r   r   r   r   junit_suite_namez Test suite name for JUnit reportpytest)r   junit_loggingz\Write captured log messages to JUnit report: one of no|log|system-out|system-err|out-err|allr   junit_log_passing_testsz;Capture log information for passing tests to JUnit report: boolT)r.   r   junit_duration_reportz*Duration time to report: one of total|calltotaljunit_familyz0Emit XML for schema: one of legacy|xunit1|xunit2rA   )getgroup	addoption	functoolspartialr   addini)r   r   s     r    pytest_addoptionr    s    OO01E	OO|\B?  	 
OO?   MM>   MM	:	   MM!E	   MM4  
 MM:  r"   r   c                    | j                   j                  }|rt        | d      s| j                  d      }t	        || j                   j
                  | j                  d      | j                  d      | j                  d      || j                  d            | j                  t        <   | j                  j                  | j                  t                  y y y )Nworkerinputr  r   r   r  r  )
optionr   rl   getinir   junitprefixr   r   pluginmanagerregister)r   r   r  s      r    pytest_configurer    s    mm##Gwv}5}}^4 &MM%%MM,-MM/*MM12MM34!
W 	%%fll7&;< 6wr"   c                     | j                   j                  t        d       }|r-| j                   t        = | j                  j	                  |       y y r)   )r   r   r   r  
unregister)r   rE   s     r    pytest_unconfigurer    s@    
,,

7D
)C
LL!'', r"   addressc                     | j                  d      \  }}}|j                  d      }|d   j                  t        j                  d      |d<   t        j                  dd|d         |d<   |dxx   ||z   z  cc<   |S )N[z::r   re   z\.py$r   rd   )	partitionsplitreplacer   SEPr$   r%   )r  r   possible_open_bracketparamsrn   s        r    rg   rg     sy    *1*;*;C*@'D
JJtEQx		3/E!HvvhE!H-E!H	"I&//ILr"   c                   "   e Zd Z	 	 	 	 	 ddee   dededededdfdZd	eddfd
Zd	e	eef   de
fdZdeddfdZd	ede
fdZd	eddfdZd	eddfdZd	eddfdZdeddfdZddZddZdeddfdZdededdfdZdeej4                     fdZy)r   rh   
suite_namer   report_durationr   r   Nc                     t         j                  j                  t         j                  j                  |            }t         j                  j	                  t         j                  j                  |            | _        || _        || _        || _	        || _
        || _        || _        t        j                  g dd      | _        i | _        g | _        g | _        g | _        d| _        | j                  dk(  rd| _        y y )N)r   r   r   r   r   r   r@   )osr   
expanduser
expandvarsnormpathabspathlogfilerh   r!  r   r   r"  rJ   dictfromkeysstatsnode_reportersnode_reporters_orderedglobal_propertiesopen_reportscnt_double_fail_tests)rN   r)  rh   r!  r   r"  rJ   r   s           r    rO   zLogXML.__init__  s     ''$$RWW%7%7%@Aww''(@A$!2.%)]]5q&


  	 <>#8: /1%&" ;;(""DK #r"   r   c                     t        |d|      }t        |dd       }| j                  j                  ||f      }|j                  D ]   \  }}|j	                  |t        |             " ||j                          y y NrD   rP   )r   r-  popr   rW   r#   r   )rN   r   rD   
workernodereporterpropname	propvalues          r    r   zLogXML.finalize  s    62VVT2
&&**FJ+?@#)#9#9 	<Hi!!(C	N;	<   r"   c                     t        |d|      }t        |dd       }||f}|| j                  v r| j                  |   S t        ||       }|| j                  |<   | j                  j	                  |       |S r3  )r   r-  rC   r.  rS   )rN   r   rD   r5  rr   r6  s         r    r   zLogXML.node_reporter  s|    )06)JVVT2
j $%%%&&s++ .#+C ##**84r"   rr   c                 P    || j                   v r| j                   |xx   dz  cc<   y y )Nrf   )r,  )rN   rr   s     r    rI   zLogXML.add_stats  s%    $**JJsOq O r"   c                 J    | j                  |      }|j                  |       |S r)   )r   rs   rN   r   r6  s      r    _opentestcasezLogXML._opentestcase  s%    %%f-""6*r"   c                 8   d}j                   r4j                  dk(  rL| j                        }|j                         n(j                  rj                  dk(  rct        dd      t        dd      t        fd| j                  D        d      }|r&| j                  |       | xj                  dz  c_	        | j                        }j                  dk(  rJ|j                         | j                  j                         | j                  sR|j                         n@|j                         n.j                  r"| j                        }|j!                         | j#                         j                  dk(  r| j                        }|j                         | j                         t        dd      t        dd      t        fd| j                  D        d      }|r| j                  j%                  |       yyy)	a  Handle a setup/call/teardown report, generating the appropriate
        XML tags as necessary.

        Note: due to plugins like xdist, this hook may be called in interlaced
        order with reports from other nodes. For example:

        Usual call order:
            -> setup node1
            -> call node1
            -> teardown node1
            -> setup node2
            -> call node2
            -> teardown node2

        Possible call order in xdist:
            -> setup node1
            -> call node1
            -> setup node2
            -> call node2
            -> teardown node2
            -> teardown node1
        Ncallr   	worker_id
item_indexc              3      K   | ]?  }|j                   j                   k(  r$t        |d d      k(  rt        |dd      k(  r| A ywrA  Nr@  rD   r   .0repr   	report_ii
report_wids     r    	<genexpr>z2LogXML.pytest_runtest_logreport.<locals>.<genexpr>>  sK      JJ&--7 '\4 @I M '[$ ?: M    AArf   c              3      K   | ]?  }|j                   j                   k(  r$t        |d d      k(  rt        |dd      k(  r| A ywrC  rD  rE  s     r    rJ  z2LogXML.pytest_runtest_logreport.<locals>.<genexpr>c  sK      

fmm3#Ct<	I#Cd;zI rK  )r   r   r=  r   failedr   nextr0  r   r1  r   rS   r   r   r   r   r   update_testcase_durationremove)rN   r   close_reportr6  rH  rI  s    `  @@r    pytest_runtest_logreportzLogXML.pytest_runtest_logreport  s   . =={{f$--f5$$V,]]{{j($V[$?
#FL$?	##'#4#4     MM,/..!3.))&1H{{f$''/!!((0--226:%%f-^^))&1H##F+%%f-;;*$))&1H**62MM&! d;Jd;I#00 L !!((6 ' %r"   c                     | j                   d|j                  hv r2| j                  |      }|xj                  t	        |dd      z  c_        yy)zAccumulate total duration for nodeid from given report and update
        the Junit.testcase with the new total if already created.r  rK   rG   N)r"  r   r   rK   r   r<  s      r    rO  zLogXML.update_testcase_durationq  sJ     GV[[#99))&1HS!AA :r"   c                     |j                   sA| j                  |      }|j                  r|j                  |       y |j	                  |       y y r)   )r   r=  rM  r   r   r<  s      r    pytest_collectreportzLogXML.pytest_collectreportx  sA    }}))&1H}}--f5//7 r"   excreprc                     | j                  d      }|j                  j                  dd       |j                  ddt	        |             y )Ninternalr   )r9   r:   r   zinternal error)r   rM   r/   r~   r#   )rN   rV  r6  s      r    pytest_internalerrorzLogXML.pytest_internalerror  s@    %%j1zBW&6GEr"   c                 6    t        j                         | _        y r)   )r   rv   suite_start_time)rN   s    r    pytest_sessionstartzLogXML.pytest_sessionstart  s     &r"   c                    t         j                  j                  t         j                  j                  | j                              }t        j
                  |d       t        | j                  dd      5 }t        j                         }|| j                  z
  }| j                  d   | j                  d   z   | j                  d   z   | j                  d	   z   | j                  z
  }|j                  d
       t        j                  d| j                  t!        | j                  d	         t!        | j                  d         t!        | j                  d         t!        |      d|z  t#        j$                  | j                        j'                         t)        j*                         	      }| j-                         }||j/                  |       | j0                  D ]!  }|j/                  |j3                                # t        j                  d      }	|	j/                  |       |j                  t        j4                  |	d             d d d        y # 1 sw Y   y xY w)NT)exist_okwzutf-8)encodingr   r   r   r   z&<?xml version="1.0" encoding="utf-8"?>	testsuiteru   )r:   errorsfailuresr   testsrv   	timestamphostname
testsuitesunicode)r$  r   dirnamer(  r)  makedirsopenr   rv   r[  r,  r1  writer^   r_   r!  r#   r   fromtimestamp	isoformatplatformrP   _get_global_properties_noderS   r.  rx   tostring)
rN   ri  r)  suite_stop_timesuite_time_deltanumtests
suite_noder/  r   rg  s
             r    pytest_sessionfinishzLogXML.pytest_sessionfinish  s   ''//"''//$,,"?@
Gd+$,,g6 	G'$kkmO.1F1FF 

8$**Y'(**Y'( **W%& ,,	-  MMBC__4::g./TZZ	23DJJy12(m.."001F1FGQQS!
J !% @ @ B ,!!"34!%!<!< :!!-"6"6"89:L1Jj)MM"++j9EF?	G 	G 	Gs   6GIIterminalreporterc                 B    |j                  dd| j                          y )Nr   zgenerated xml file: )	write_sepr)  )rN   rw  s     r    pytest_terminal_summaryzLogXML.pytest_terminal_summary  s    ""3*>t||n(MNr"   r:   rT   c                 l    d}t        d|       | j                  j                  |t        |      f       y )NTr:   )r   r/  rS   r'   )rN   r:   rT   r   s       r    r   zLogXML.add_global_property  s0      .%%t^E-B&CDr"   c                     | j                   rRt        j                  d      }| j                   D ],  \  }}|j                  t        j                  d||             . |S yr[   )r/  r^   r_   rS   r`   s       r    rp  z"LogXML._get_global_properties_node  sX    !!L1J#55 Re!!"**Zd%"PQRr"   )r   r   r  r@   Tr   )r   r   r   r   r#   r  rO   r   r   r
   rC   r   rI   r=  rR  rO  rU  r   rY  r\  rv  r   rz  r   r   r^   r_   rp  r   r"   r    r   r     sZ   
 #&"&!# !# 	!#
 !# !#  !# 
!#F
 z 
 d 
 E*c/$: } $!S !T !J = 
S7z S7d S7jBz Bd B8: 8$ 8FM Fd F
.$GLO8H OT OE EF Et E
Xbjj-A r"   r   )9__doc__r   r  r$  ro  r$   typingr   r   r   r   r   r	   r
   xml.etree.ElementTreeetreeElementTreer^   _pytestr   r   _pytest._code.coder   r   _pytest.configr   r   _pytest.config.argparsingr   _pytest.fixturesr   _pytest.reportsr   _pytest.stashr   _pytest.terminalr   r   r   r   r#   r'   r7   rm   copyrC   r   fixturer   r   r   r   r  r  r  rg   r   r   r"   r    <module>r     s7     	  	        " "   , / ! ' , + & " -  (8

2 23 26 +v!67 &(?@  g&++-  Xh.!9 : g& n# n#b

+.
	
 ^ #v9L0M  , . XsFmT>Q5R  8EC EC ED E i #~ #(C=RVCV:W # !#L,V , ,^=V = ="-v -$ - c l lr"   