
    ?g1                    b   S r SSKJr  SSK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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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#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,J0r0  SSK1J2r2  SSK3J4r4  SSK3J5r5  SS K6J7r7  SS!K6J8r8  SS"K9J:r:  SS#K9J;r;  SS$K9J<r<  \(       a  SS%K=J>r>  S&r?S'r@S(rA " S) S*\R                  5      rC " S+ S,\5      rDSCS- jrESDS. jrFSES/ jrG\0" S0S19SFS2 j5       rH\R                   " S3 S45      5       rJ\ " S5 S65      5       rKSGS7 jrLSHS8 jrM          SIS9 jrN      SJS: jrOS;S;S<S=S>.rPS<rQSKS? jrRSLS@ jrSSMSA jrTSNSB jrUg)OzsTerminal reporting of the full testing process.

This is a good source for looking at the various reporting hooks.
    )annotationsN)Counter)partial)Path)Any)Callable)ClassVar)final)	Generator)Literal)Mapping)
NamedTuple)Sequence)TextIO)TYPE_CHECKING)nodes)timing)ExceptionInfo)ExceptionRepr)TerminalWriter)wcswidth)running_on_ci)_PluggyPlugin)Config)ExitCode)hookimpl)Parser)Item)Node)absolutepath)bestrelpath)
BaseReport)CollectReport)
TestReport)Sessiong      ?)failedpassedskipped
deselectedxfailedxpassedwarningserrorfEc                  r   ^  \ rS rSrSr   S           SU 4S jjjr S         S	S jjrSrU =r$ )
MoreQuietActionL   zA modified copy of the argparse count action which counts down and updates
the legacy quiet attribute at the same time.

Used to unify verbosity handling.
c           	     *   > [         TU ]  UUSUUUS9  g )Nr   )option_stringsdestnargsdefaultrequiredhelp)super__init__)selfr3   r4   r6   r7   r8   	__class__s         2/usr/lib/python3/dist-packages/_pytest/terminal.pyr:   MoreQuietAction.__init__S   s)     	) 	 	
    c                    [        X R                  S5      S-
  n[        X R                  U5        [        USS5      S-   Ul        g )Nr      quiet)getattrr4   setattrrB   )r;   parser	namespacevaluesoption_string	new_counts         r=   __call__MoreQuietAction.__call__d   s<     Iyy!4q8		99i0!)Wa81<	r?    )NFN)r3   zSequence[str]r4   strr6   objectr7   boolr8   
str | NonereturnNoneN)
rE   zargparse.ArgumentParserrF   zargparse.NamespacerG   zstr | Sequence[object] | NonerH   rP   rQ   rR   )	__name__
__module____qualname____firstlineno____doc__r:   rJ   __static_attributes____classcell__)r<   s   @r=   r0   r0   L   s     
%
 
 	

 
 
 

 
, %)
='
= &
= .	
=
 "
= 

= 
=r?   r0   c                  8    \ rS rSr% SrS\S'   S\S'   S\S'   Srg	)
TestShortLogReportq   u#  Used to store the test status result category, shortletter and verbose word.
For example ``"rerun", "R", ("RERUN", {"yellow": True})``.

:ivar category:
    The class of result, for example ``“passed”``, ``“skipped”``, ``“error”``, or the empty string.

:ivar letter:
    The short letter shown as testing progresses, for example ``"."``, ``"s"``, ``"E"``, or the empty string.

:ivar word:
    Verbose word is shown as testing progresses in verbose mode, for example ``"PASSED"``, ``"SKIPPED"``,
    ``"ERROR"``, or the empty string.
rM   categoryletterz$str | tuple[str, Mapping[str, bool]]wordrL   N)rT   rU   rV   rW   rX   __annotations__rY   rL   r?   r=   r\   r\   q   s     MK
..r?   r\   c           
     (   U R                  SSSS9nUR                  SSSSS	S
S9  UR                  SSSSSS9  UR                  SSSSSS9  UR                  SSSSSS9  UR                  SS[        SS	SS9  UR                  SS	[        SSS9  UR                  S S!S"[        S#S$S%9  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-S0S19  UR                  S2S3S!S4S5/ S6QS7S89  UR                  S9SS:SS;S9  UR                  S<S!S=/ S>QS?S@SA9  UR                  SBSCSSSDSE9  UR                  SFSGS!SGS5/ SHQSIS89  UR                  SJSKSKSL/SMSN9  U R                  SOSPSQSR9  [        R                  " U [        R                  SSST9  g )UNzterminal reporting	Reportinggeneral)afterz-vz	--verbosecountr   verbosezIncrease verbosity)actionr6   r4   r8   z--no-header
store_trueF	no_headerzDisable headerz--no-summary
no_summaryzDisable summaryz--no-fold-skippedstore_falsefold_skippedTz+Do not fold skipped tests in short summary.)rh   r4   r6   r8   z-qz--quietzDecrease verbosityz--verbosityzSet verbosity. Default: 0.)r4   typer6   r8   z-rstorereportcharscharsa  Show extra test summary info as specified by chars: (f)ailed, (E)rror, (s)kipped, (x)failed, (X)passed, (p)assed, (P)assed with output, (a)ll except passed (p/P), or (A)ll. (w)arnings are enabled by default (see --disable-warnings), 'N' can be used to reset the list. (default: 'fE').)rh   r4   r6   metavarr8   z--disable-warningsz--disable-pytest-warningsdisable_warningszDisable warnings summary)r6   r4   rh   r8   z-lz--showlocals
showlocalsz/Show locals in tracebacks (disabled by default)z--no-showlocalszFHide locals in tracebacks (negate --showlocals passed through addopts))rh   r4   r8   z--tbstyletbstyleauto)rw   longshortnolinenativez5Traceback print mode (auto/long/short/line/native/no))rr   rh   r4   r6   choicesr8   z
--xfail-tbxfail_tbz1Show tracebacks for xfail (as long as --tb != no)z--show-captureshowcapture)rz   stdoutstderrlogallr   zOControls how captured stdout/stderr/log is shown on failed tests. Default: all.)rh   r4   r}   r6   r8   z--fulltracez--full-tracez,Don't cut any tracebacks (default is to cut))rh   r6   r8   z--colorcolor)yesrz   rw   z#Color terminal output (yes/no/auto)z--code-highlightr   rz   zSWhether code should be highlighted (only if --color is also enabled). Default: yes.)r6   r}   r8   console_output_stylezConsole output: "classic", or with additional progress information ("progress" (percentage) | "count" | "progress-even-when-capture-no" (forces progress even when capture=no)progress)r8   r6   zSpecify a verbosity level for test case execution, overriding the main level. Higher levels will provide more detailed information about each test case executed.)r8   )	getgroup
_addoptionr0   int_REPORTCHARS_DEFAULTaddinir   _add_verbosity_iniVERBOSITY_TEST_CASES)rE   groups     r=   pytest_addoptionr      s   OO0+YOOE	!   
   
   
:   
!   
)   
$>   
#'   
>   
U	   
AD   
@   
8   
;   
%2   
	   MM)    ##b	r?   c                8  ^ [        U [        R                  5      mU R                  R	                  TS5        U R
                  R                  (       d  U R
                  R                  (       a-  U4S jnU R                  R                  R                  SU5        g g )Nterminalreporterc                l   > SR                  [        [        U5      5      nTR                  SU-   5        g )N z[traceconfig] )joinmaprM   
write_line)tagsargsmsgreporters      r=   mywriter"pytest_configure.<locals>.mywriter  s+    ((3sD>*C 03 67r?   zpytest:config)TerminalReportersysr   pluginmanagerregisteroptiondebugtraceconfigtracerootsetprocessor)configr   r   s     @r=   pytest_configurer     si    

3H
!!(,>?}}fmm77	8 	&&A 8r?   c                   U R                   R                  nSS1nSnU HA  nXB;   a  UR                  5       nUS:X  a  SnM"  US:X  a  SnM,  US:X  a  SnM6  XC;  d  M=  X4-  nMC     U R                   R                  (       d  S	U;  a  S	U-   nU$ U R                   R                  (       a  S	U;   a  UR	                  S	S5      nU$ )
NFS asxXEfAPpsxXEfNw)r   rp   lowerrs   replace)r   rp   old_aliases
reportoptschars        r=   getreportoptr   #  s    }}00K*KJ::<D3; JS["JS[J#J  ==))c.C:%
  
	'	'C:,=''R0
r?   Ttrylastc                    SnU R                   (       a  SnOU R                  (       a  SnU R                  nU R                  S;   a
  US:X  a  SnSnX!UR	                  5       4$ )Nr   .s)collectsetupteardownr&   r-   E)r'   r(   outcomewhenupper)reportr_   r   s      r=   pytest_report_teststatusr   <  sW    F}}	>>G{{667h;NGMMO++r?   c                  X    \ rS rSr% SrS\S'   SrS\S'   SrS\S	'   S
rS\S'   SS jr	Sr
g)WarningReportiL  aS  Simple structure to hold warnings information captured by ``pytest_warning_recorded``.

:ivar str message:
    User friendly message about the warning.
:ivar str|None nodeid:
    nodeid that generated the warning (see ``get_location``).
:ivar tuple fslocation:
    File system location of the source of the warning (see ``get_location``).
rM   messageNrP   nodeidztuple[str, int] | None
fslocationTr	   count_towards_summaryc                    U R                   (       a  U R                   $ U R                  (       a>  U R                  u  p#[        UR                  R                  [        U5      5      nU SU 3$ g)zSReturn the more user-friendly information about the location of a warning, or None.:N)r   r   r!   invocation_paramsdirr    )r;   r   filenamelinenumrelpaths        r=   get_locationWarningReport.get_location^  sW    ;;;;?? $H!&":":">">X@VWGYay))r?   rL   )r   r   rQ   rP   )rT   rU   rV   rW   rX   ra   r   r   r   r   rY   rL   r?   r=   r   r   L  s3     LFJ)-J&-&*8*r?   r   c                  X   \ rS rSrSUSVS jjrSWS jr\SXS j5       r\SYS j5       r\SYS j5       r	\SYS j5       r
\SYS	 j5       r\R                  SZS
 j5       r\SYS j5       rS[S jrS\S jrS]S^S jjrS_S jrSSSS.           S`S jjrSS.SaS jjrS_S jrSbS jrScS jr  Sd         SeS jjrSfSgS jjrShS jrSiS jrSjS jr      SkS jrSlS  jrSmS! jr      SnS" jrSoS# jr \SYS$ j5       r!\"" S%S&9SpS' j5       r#SqS( jr$S_S) jr%S_S* jr&\SXS+ j5       r'S_S, jr(SrS- jr)SsStS. jjr*\"" S%S/9SuS0 j5       r+    SvS1 jr,SwS2 jr-SuS3 jr.SmS4 jr/\"" S%S&9      SxS5 j5       r0\"" S%S&9SyS6 j5       r1SzS7 jr2S_S8 jr3S_S9 jr4          S{S: jr5S; r6S< r7S|S= jr8S_S> jr9S_S? jr:S_S@ jr;        S}SA jr<S~SB jr=SSC jr>SSD jr?S_SE jr@S_SF jrASSG.         SSH jjrBS_SI jrCSSJ jrDS_SK jrES_SL jrFSSM jrGSSN jrHS_SO jrISSP jrJSSQ jrK  SSR jrL  SSS jrMSTrNg)r   ii  Nc                t   SS K nXl        SU l        S U l        S U l        0 U l        S U l        S U l        UR                  R                  U l
        Uc  [        R                  nUR                  R                  X5      U l        U R                  R                  U l        S U l        [%        U5      U l        UR(                  R*                  U l        U R                  R.                  U l        UR1                  5       U l        [3        5       U l        U R7                  5       U l        S U l        S U l        S U l        g Nr   ) _pytest.configr   _numcollected_session_showfspathstats_main_color_known_typesr   r   	startpathr   r   create_terminal_writer_tw	fullwidth_screen_widthcurrentfspathr   rp   r   rm   foldskipped	hasmarkupisattyset_progress_nodeids_reported_determine_show_progress_info_show_progress_info_collect_report_last_write_already_displayed_warnings_keyboardinterrupt_memo)r;   r   file_pytests       r=   r:   TerminalReporter.__init__k  s    (,(,+-
'+.21155<::D>>88F!XX//6:'/!==55++kkm47E'#'#E#E#G 8<'7;(=A$r?   c                   U R                   R                  SS5      S:X  a   U R                   R                  S5      S:w  a  gU R                   R                  SS5      (       a  gU R                   R                  S5      nUS;   a  gUS	:X  a  g	g)
zRReturn whether we should display progress information based on the current config.capturerz   r   progress-even-when-capture-noF	setupshow>   r   r   r   rf   )r   	getoptiongetini)r;   cfgs     r=   r   .TerminalReporter._determine_show_progress_info  s    
 KK!!)T2d:""#9:./ ;;  e44;;%%&<=??G^r?   c                F    U R                   R                  R                  nU$ rS   )r   r   rg   )r;   	verbositys     r=   r   TerminalReporter.verbosity  s    ++33	r?   c                     U R                   S:  $ r   )r   r;   s    r=   
showheaderTerminalReporter.showheader  s    ~~""r?   c                T    [        U R                  R                  R                  5      $ rS   )rO   r   r   rj   r   s    r=   rj   TerminalReporter.no_header  s    DKK&&0011r?   c                T    [        U R                  R                  R                  5      $ rS   )rO   r   r   rk   r   s    r=   rk   TerminalReporter.no_summary  s    DKK&&1122r?   c                    U R                   c,  U R                  R                  [        R                  5      S:  $ U R                   $ r   )r   r   get_verbosityr   r   r   s    r=   
showfspathTerminalReporter.showfspath  s:    #;;,,V-H-HIQNNr?   c                    Xl         g rS   )r   )r;   values     r=   r	  r
    s     r?   c                Z    U R                   R                  [        R                  5      S:  $ r   )r   r  r   r   r   s    r=   showlongtestinfo!TerminalReporter.showlongtestinfo  s"    {{(()D)DEIIr?   c                F    SSS.R                  X5      nXR                  ;   $ )Nxr   )r*   r(   )getrp   )r;   r   s     r=   hasoptTerminalReporter.hasopt  s&    3/33D?''''r?   c                   U R                   R                  UR                  S5      S   -  nU R                  b  X@R                  :w  a  U R                  b!  U R                  (       a  U R                  5         X@l        [        U R                  U5      nU R                  R                  5         U R                  R                  US-   5        U R                  R                  " U4SS0UD6  g )N::r   r   flushT)r   rootpathsplitr   r   )_write_progress_information_filling_spacer!   r   r   r{   write)r;   r   resmarkupfspath	relfspaths         r=   write_fspath_result$TerminalReporter.write_fspath_result  s    %%T(:1(==%3E3E)E!!-$2J2J>>@!'#DNNF;IHHMMOHHNN9s?+s1$1&1r?   c                    U R                   U:w  a;  U R                  R                  5         Xl         U R                  R                  U5        U(       a%  U R                  R                  " U40 UD6  SU l         g g )N)r   r   r{   r  )r;   prefixextrakwargss       r=   write_ensure_prefix$TerminalReporter.write_ensure_prefix  sX    'HHMMO!'HHNN6"HHNN5+F+!#D r?   c                j    U R                   (       a"  U R                  R                  5         S U l         g g rS   )r   r   r{   r   s    r=   ensure_newlineTerminalReporter.ensure_newline  s%    HHMMO!%D r?   F   
)r  marginline_sepc          	         U R                   R                  nUR                  [        R                  " SU-  U-   U R
                  U-
  SSS95      nXvS nU R                   R                  " U4SU0UD6  g)z+Wrap message with margin for progress info.r   TF)widthdrop_whitespacereplace_whitespaceNr  )r   width_of_current_liner   textwrapwrapr   r  )r;   contentr  r.  r/  r  r4  wrappeds           r=   
wrap_writeTerminalReporter.wrap_write  sw     !% > >--MM++g5((61 $#(	
 01w6e6v6r?   )r  c               B    U R                   R                  " U4SU0UD6  g )Nr  )r   r  )r;   r7  r  r  s       r=   r  TerminalReporter.write  s    w6e6v6r?   c                8    U R                   R                  5         g rS   )r   r  r   s    r=   r  TerminalReporter.flush  s    r?   c                    [        U[        5      (       d
  [        USS9nU R                  5         U R                  R                  " U40 UD6  g )Nr   )errors)
isinstancerM   r*  r   r{   )r;   r{   r  s      r=   r   TerminalReporter.write_line  s<    $$$tI.Dd%f%r?   c                    UR                  SS5      nU(       a+  U R                  R                  [        U5      -
  S-
  nSU-  nOSn[	        U5      nU R                  R
                  " SU-   U-   40 UD6  g)a  Rewinds the terminal cursor to the beginning and writes the given line.

:param erase:
    If True, will also add spaces until the full terminal width to ensure
    previous lines are properly erased.

The rest of the keyword arguments are markup instructions.
eraseFrA   r   r   N)popr   r   lenrM   r  )r;   r{   r  rD  
fill_countfills         r=   rewriteTerminalReporter.rewrite  sj     

7E*++c$i7!;J#DD4ytd{T)4V4r?   c                `    U R                  5         U R                  R                  " XU40 UD6  g rS   )r*  r   sep)r;   rM  titler   r  s        r=   	write_sepTerminalReporter.write_sep  s'     	S5f5r?   c                >    U R                   R                  " X!40 UD6  g rS   )r   rM  )r;   rN  rM  kws       r=   sectionTerminalReporter.section  s    S&2&r?   c                >    U R                   R                  " U40 UD6  g rS   )r   r{   )r;   r   rR  s      r=   r{   TerminalReporter.line  s    c R r?   c                    XR                   ;  nU R                   R                  U/ 5      R                  U5        U(       a  U R                  5         g g rS   )r   
setdefaultextend_set_main_color)r;   r^   itemsset_main_colors       r=   
_add_statsTerminalReporter._add_stats  sA    !3

h+2259  " r?   c                n    [        U5      R                  S5       H  nU R                  SU-   5        M     g)Nr-  zINTERNALERROR> T)rM   r  r   )r;   excreprr{   s      r=   pytest_internalerror%TerminalReporter.pytest_internalerror!  s0    L&&t,DOO-45 -r?   c                    SSK Jn  UR                  UR                  4nU" U5      n[	        XEUS9nU R                  SU/5        g )Nr   )warning_record_to_str)r   r   r   r,   )_pytest.warningsrd  r   linenor   r]  )r;   warning_messager   rd  r   r   warning_reports          r=   pytest_warning_recorded(TerminalReporter.pytest_warning_recorded&  sI    
 	;$--/E/EE
'8&!6
 	
^$45r?   c                |    U R                   R                  R                  (       a  SU 3nU R                  U5        g g )NzPLUGIN registered: )r   r   r   r   )r;   pluginr   s      r=   pytest_plugin_registered)TerminalReporter.pytest_plugin_registered5  s4    ;;))'x0C OOC  *r?   c                (    U R                  SU5        g )Nr)   )r]  )r;   r[  s     r=   pytest_deselected"TerminalReporter.pytest_deselected=  s    e,r?   c                   Uu  p4nU R                   (       a5  U R                  XXE5      nU R                  US5        U R                  5         g U R                  (       a#  U R                  US5        U R                  5         g g )Nr   )r  _locationliner'  r  r	  r   )r;   r   locationr  rf  domainr{   s          r=   pytest_runtest_logstart(TerminalReporter.pytest_runtest_logstart@  si     "*   %%ffED$$T2.JJL__$$VR0JJL r?   c                   SU l         Un[        U R                  R                  R	                  X R                  S96 nUR
                  UR                  UR                  pen[        U[        5      (       d  S nOUu  pgU R                  XB/5        U(       d  U(       d  g Uct  [        US5      nUR                  (       a  U(       d  SS0nOKUR                  (       a  U(       a  SS0nO.UR                  (       a  SS0nOUR                  (       a  SS0nO0 nU R                  R!                  UR"                  5        U R                  R%                  [&        R(                  5      S::  aQ  U R*                  R,                  " U40 UD6  U R.                  (       a!  U R0                  (       d  U R3                  5         GOU R4                  " UR"                  /UR6                  Q76 n	[        US5      n
U
(       d  U R8                  " X40 UD6  UR                  (       d  [        US5      (       a  [;        U5      nU R                  R%                  [&        R(                  5      S	:  aI  U R*                  R<                  U R*                  R>                  -
  [A        S
5      -
  S-
  n[C        SX5      nOSU S3nU(       a  Ub  U RE                  U5        U R.                  (       a  U RG                  5         OU RI                  5         U R*                  R-                  SURJ                  RL                  RN                   S35        U R.                  (       a,  U R*                  R-                  U RQ                  5       S-   SS9  OU R*                  R-                  S5        U R*                  R,                  " U40 UD6  U R*                  R-                  SU	-   5        SU l)        U RU                  5         g )NT)r   r   wasxfailgreenyellowredr   node    [100%]rA   z ({})z ()[]r   )cyanr#  )+
_tests_ranr\   r   hookr   r^   r_   r`   rA  tupler]  hasattrr'   r&   r(   r   addr   r  r   r   r   r  r   _is_last_item(_write_progress_information_if_past_edgers  rt  r'  _get_raw_skip_reasonr   r4  rG  _format_trimmedr9  r  r*  r}  gatewayid!_get_progress_information_messager   r  )r;   r   repr  r^   r_   r`   r  	was_xfailr{   running_xdistreasonavailable_widthformatted_reasons                 r=   pytest_runtest_logreport)TerminalReporter.pytest_runtest_logreportN  s    [[66c++6V
 "%szz388$$&&FLD%(d>
3Izz)!4	"D)"D)''++CJJ7;;$$V%@%@AQFHHNN6,V, ''0B0B==?%%cjj@3<<@D#C0M ((>v>;;'&*"="=1#6F{{001L1LMPQQ!XX//$((2P2PP!)n-  (
 ,;#V,( .0xq>("2">(89++BBD##%388#3#3#6#6"7q9:++HHNN>>@3FT #  HHNN3't.v.sTz*%'"

r?   c                x    U R                   c   e[        U R                  5      U R                   R                  :H  $ rS   )r   rG  r   testscollectedr   s    r=   r  TerminalReporter._is_last_item  s2    }}(((4223t}}7S7SSSr?   T)wrapperc              #     #    S v nU R                   R                  [        R                  5      S::  a2  U R                  (       a!  U R
                  (       a  U R                  5         U$ 7fr   )r   r  r   r   r   r   r  )r;   results     r=   pytest_runtestloop#TerminalReporter.pytest_runtestloop  sL      KK%%f&A&ABaG((//::<s   A&A(c                l   U R                   (       d   eU R                   R                  nU R                  S:X  aT  U(       aD  [        U R                  5      nS[        [        U5      5       S3nSU S3nUR                  X!5      $ SU SU S3$ U(       a   S[        U R                  5      S	-  U-  S
 S3$ g)Nrf   z{:zd} [z/{}]z [ z / z ]d   3dz%]r  )r   r  r   rG  r   rM   format)r;   	collectedr   counter_formatformat_strings        r=   r  2TerminalReporter._get_progress_information_message  s    }}}MM00	##w.t>>?#&s3y>':&;3!?"$^$4F ;$++H@@3yk44T<<=CyPQSTTVW r?   c                   U R                   nU R                  S:X  a<  U R                  (       d   eU R                  R                  n[	        SU SU S35      nO[	        S5      nX-   S-   U R
                  :  nU(       aE  U R                  5       u  pVU R                  5       nU R                  R                  " US-   40 US0D6  g g )	Nrf   r  /r  r  rA   r-  T)
_width_of_current_liner   r   r  rG  r   _get_main_colorr  r   r  )r;   r   	num_testsprogress_length	past_edge
main_color_r   s           r=   r  9TerminalReporter._write_progress_information_if_past_edge  s    ''##w.== =44I!Byk9+Q"?@O!)nO'!+t/A/AA	 002MJ88:CHHNN3:<*d);< r?   c                    U R                  5       u  pU R                  5       nU R                  nU R                  R                  U-
  S-
  nU R
                  " UR                  U5      4SS0US0D6  g )NrA   r  T)r  r  r  r   r   r  rjust)r;   r   r  r   r   rI  s         r=   r  :TerminalReporter._write_progress_information_filling_space  sf    '')446''xx!!A%)

399T?@$@5$-@r?   c                .    U R                   R                  $ )z%Return the width of the current line.)r   r4  r   s    r=   r  'TerminalReporter._width_of_current_line  s     xx---r?   c                4   U R                   (       aQ  U R                  R                  R                  S:  a,  U R	                  SSSS9  [
        R                  " 5       U l        g g U R                  R                  R                  S:  a  U R	                  SSSS9  g g )Nr   zcollecting ... T)r  boldrA   )r   r   r   rg   r  r   timer   r   s    r=   pytest_collection"TerminalReporter.pytest_collection  sy    ;;{{!!))Q.

,Dt
D28++-/ / [[''1,JJ(4J@ -r?   c                   UR                   (       a  U R                  SU/5        O$UR                  (       a  U R                  SU/5        UR                   Vs/ s H  n[	        U[
        5      (       d  M  UPM     nnU =R                  [        U5      -  sl        U R                  (       a  U R                  5         g g s  snf )Nr-   r(   )
r&   r]  r(   r  rA  r   r   rG  r   report_collect)r;   r   r  r[  s       r=   pytest_collectreport%TerminalReporter.pytest_collectreport  s    ==OOGfX.^^OOIx0"MMAMqZ4-@MAc%j(;;!  Bs   B>5B>c                   U R                   R                  R                  S:  a  g U(       d@  [        R                  " 5       nU R
                  b  U R
                  U[        -
  :  a  g X l        [        U R                  R                  S/ 5      5      n[        U R                  R                  S/ 5      5      n[        U R                  R                  S/ 5      5      nU R                  U-
  nU(       a  SOSnU[        U R                  5      S-   U R                  S:X  a  S	OS
-   -  nU(       a  USX3S:w  a  S
OS	4-  -  nU(       a  USU-  -  nU(       a  USU-  -  nU R                  U:  a  USU-  -  nU R                  (       a+  U R                  USSS9  U(       a  U R                  S5        g g U R                  U5        g )Nr   r-   r(   r)   z
collected zcollecting z itemrA   r   r   z / %d error%sz / %d deselectedz / %d skippedz / %d selectedT)r  rD  r-  )r   r   rg   r   r  r   REPORT_COLLECTING_RESOLUTIONrG  r   r  r   rM   r   rJ  r  r   )r;   r
   tr@  r(   r)   selectedr{   s           r=   r  TerminalReporter.report_collect  s   ;;%%)A//;33a:V6VV./+TZZ^^GR01djjnnY34b9:
%%
2$|-""#g-t7I7IQ7NTWX	
 Ovksr&JJJD&33DOg--D($x//D;;LLDL5

4   OOD!r?   r   c                   Xl         [        R                  " 5       U l        U R                  (       d  g U R                  SSSS9  [        R                  " 5       nU R                  (       Gde  S[        R                   SU 3n[        [        SS 5      nU(       a1  SR                  [        [        US S	 5      5      nUS
U SUS	    S3-  nUS[        R                  R                    S["        R$                   3-  nU R&                  S:  dK  U R(                  R*                  R,                  (       d&  [        U R(                  R*                  SS 5      (       a  US[        [        R.                  5      -   -  nU R1                  U5        U R(                  R2                  R5                  U R(                  U R6                  S9nU R9                  U5        g g )N=ztest session startsTr  z	platform z -- Python pypy_version_infor      z[pypy--r  z	, pytest-z	, pluggy-r   pastebinz -- )r   
start_path)r   r   r  _sessionstarttimer  rO  platformpython_versionrj   r   rC   r   r   rM   r   _versionversionpluggy__version__r   r   r   r   
executabler   r  pytest_report_headerr   _write_report_lines_from_hooks)r;   sessionverinfor   r  liness         r=   pytest_sessionstart$TerminalReporter.pytest_sessionstart  sw   !'s1=))+~~~cll^;wi@C '-@$ G ((3s,=bq,A#BCy*;A*>)?qAAYw//778	&BTBTAUVVC";;%%++4;;--z4@@vCNN 333OOC KK$$99{{t~~ : E //6# r?   c                    [        U5       HE  n[        U[        5      (       a  U R                  U5        M+  U H  nU R                  U5        M     MG     g rS   )reversedrA  rM   r   )r;   r  line_or_linesr{   s       r=   r  /TerminalReporter._write_report_lines_from_hooks*  sA     &e_M---.)DOOD) *	 -r?   c           	     .   SUR                    3/nUR                  (       a2  UR                  S[        UR                   UR                  5      -   5        UR                  [
        R                  R                  :X  a@  UR                  S5      nUR                  SR                  SR                  U5      5      5        UR                  R                  5       nU(       a8  UR                  SR                  SR                  [        U5      5      5      5        U$ )Nz	rootdir: zconfigfile: 	testpathsztestpaths: {}, zplugins: {})r  inipathappendr!   args_sourcer   
ArgsSource	TESTPATHSr   r  r   r   list_plugin_distinfo_plugin_nameversions)r;   r   r  r  
plugininfos        r=   r  %TerminalReporter.pytest_report_header4  s    foo./0>>MM.;v+WWX!2!2!<!<<#)==#=IMM/0091EFG))>>@
MM$$TYY/CJ/O%PQ r?   c                   U R                  S5        U R                  R                  R                  U R                  U R                  UR
                  S9nU R                  U5        U R                  R                  S5      (       a  UR
                  (       aZ  U R                  R                  R                  S:  a  U R                  R                  S5        U R                  UR
                  5        U R                  R                  S5      nU(       aA  U R                  R                  SS5        U H  nUR!                  U R                  5        M      g g g )	NT)r   r  r[  collectonlyr   r&   !zcollection failures)r  r   r  pytest_report_collectionfinishr   r[  r  r   r   rg   r   r{   _printcollecteditemsr   r  rM  
toterminal)r;   r  r  r&   r  s        r=   pytest_collection_finish)TerminalReporter.pytest_collection_finishE  s    D!  ??;;~~-- @ 

 	++E2;;  //}};;%%--2HHMM"%))'--8ZZ^^H-FS"78!CNN488, "  0r?   c           	        U R                   R                  [        R                  5      nUS:  a  US:  aT  [	        S U 5       5      n[        UR                  5       5       H$  u  pEU R                  R                  SXE4-  5        M&     g U H(  nU R                  R                  UR                  5        M*     g / nSnU GH!  nUR                  5       SS  n	U(       a+  XyS [        U5       :X  a  OUR                  5         U(       a  M+  U	[        U5      S   H  n
UR                  U
5        [        U5      S-
  S-  nU R                  R                  U U
 35        US:  d  ML  [        U
SS 5      nU(       a  [        R                   " U5      OS nU(       d  M  UR#                  5        H1  nU R                  R                  S	R%                  US-   U5      5        M3     M     GM$     g )
Nr   r  c              3  ^   #    U  H#  oR                   R                  S S5      S   v   M%     g7fr  rA   r   N)r   r  ).0items     r=   	<genexpr>8TerminalReporter._printcollecteditems.<locals>.<genexpr>_  s$      Q54!2!24!;A!>5   +-z%s: %dr   rA     objz{}{})r   r  r   r   r   sortedr[  r   r{   r   	listchainrG  rF  r  rC   inspectgetdoc
splitlinesr  )r;   r[  test_cases_verbositycountsnamerf   r  stackindentneeded_collectorscolr  docr{   s                 r=   r  %TerminalReporter._printcollecteditems[  s   #{{889T9TU!##b(  Q5 QQ#)&,,.#9KDHHMM(d]":; $:
  "DHHMM$++. "D $ 0 4lE
;;		 % )U6S!e*q.D0./'1,!#ud3C14'..-$Cs$'NN$4D HHMM&--t*LM %5 7 r?   c              #    #    S v nU R                   R                  S5        [        R                  [        R                  [        R
                  [        R                  [        R                  4nX$;   a?  U R                  (       d.  U R                  R                  R                  XU R                  S9  UR                  (       a$  U R                  S[        UR                  5      SS9  U[        R
                  :X  a  U R                  5         S U l        O5UR"                  (       a$  U R                  S[        UR"                  5      SS9  U R%                  5         U$ 7f)Nr   )r   
exitstatusr   r  T)r|  )r   r{   r   OKTESTS_FAILEDINTERRUPTEDUSAGE_ERRORNO_TESTS_COLLECTEDrk   r   r  pytest_terminal_summary
shouldfailrO  rM   _report_keyboardinterruptr   
shouldstopsummary_stats)r;   r  r  r  summary_exit_codess        r=   pytest_sessionfinish%TerminalReporter.pytest_sessionfinishy  s     bKK!!    ''
 +DOOKK44!%T[[ 5  NN3G$6$6 7TNB---**,+/D(NN3G$6$6 7TNBs   EEc              #  ^  #    U R                  5         U R                  5         U R                  5         U R                  5         U R	                  5         U R                  5          S v U R                  5         U R                  5         $ ! U R                  5         U R                  5         f = f7frS   )summary_errorssummary_failuressummary_xfailuressummary_warningssummary_passessummary_xpassesshort_test_summaryr   s    r=   r  (TerminalReporter.pytest_terminal_summary  s      	$##%!!# ##%!!#s   A!B-$B '!B-"B**B-c                ,    UR                  SS9U l        g )NT)funcargs)getreprr   )r;   excinfos     r=   pytest_keyboard_interrupt*TerminalReporter.pytest_keyboard_interrupt  s    '.'E$r?   c                @    U R                   b  U R                  5         g g rS   )r   r  r   s    r=   pytest_unconfigure#TerminalReporter.pytest_unconfigure  s    ''3**, 4r?   c                   U R                   nUc   eUR                  c   eUR                  R                  nU R                  SU5        SU;   a  U R                  R
                  R                  (       a  UR                  U R                  5        g UR                  R                  U R                  5        U R                  R                  SSS9  g g )Nr  KeyboardInterruptz@(to show a full traceback on KeyboardInterrupt use --full-trace)T)r{  )
r   	reprcrashr   rO  r   r   	fulltracer  r   r{   )r;   r`  r   s      r=   r  *TerminalReporter._report_keyboardinterrupt  s    .."""  ,,,''sC #%{{!!++""488,!!,,TXX6V   &r?   c                $  ^ ^ S	UU 4S jjnU(       ax  U" U5      nT R                   S:  a[  UR                  S5      S   UR                  S[        R                  5      :w  a%  US[        T R                  [        U5      5      -   -  nUS-   $ SnUS-   $ )
Nc                  > TR                   R                  U 5      nT(       ab  UR                  T5      (       aL  US [        T5      *  nTR	                  S5      nUS   R                  SS5      US'   USR                  U5      -  nU$ )Nr  r   r   r  )r   cwd_relative_nodeidendswithrG  r  r   r   )r   r{   rG   ru  r;   s      r=   mkrel-TerminalReporter._locationline.<locals>.mkrel  sz    ;;226:D$--//Ns6{l+c*"1I--c48q	((Kr?   r~  r  r   \z <- z
[location]r   )r   rM   rQ   rM   )r   r  r   r   SEPr!   r   r   )r;   r   r  rf  ru  r8  r  s   `   `  r=   rs  TerminalReporter._locationline  s    	 	 -C~~"v||D'9!'<eiiA ( vDNNDL III Sy CSyr?   c                .    UR                   nU(       a  U$ g)Nztest session)	head_line)r;   r  r>  s      r=   _getfailureheadline$TerminalReporter._getfailureheadline  s    MM	r?   c                     [        UR                  R                  5      $ ! [         a-     [        UR                  5      S S s $ ! [         a      gf = ff = f)N2   r   )rM   longreprr1  AttributeError)r;   r  s     r=   _getcrashlineTerminalReporter._getcrashline  sX    	s||--.. 	3<<("--! 	s,   ! 
AAA
AAAAc                    U R                   R                  US5       Vs/ s H  n[        US5      (       a  M  UPM     sn$ s  snf )NrL   	_pdbshown)r   r  r  )r;   r  r  s      r=   
getreportsTerminalReporter.getreports  s4    ::>>$3S3a71k;R3SSSs
   AAc                h  ^  T R                  S5      (       Ga  T R                  R                  S5      nU(       d  g T R                  S LnU(       a  UT R                  S  nOUn[	        U5      T l        U(       d  g 0 nU H.  nUR                  UR                  / 5      R                  U5        M0     SU 4S jjnU(       a  SOSnT R                  SUSSS	9  UR                  5        H  u  pU" U	5      n
U
(       aT  T R                  R                  U
5        UR                  5       nS
R                  S U 5       5      nUR                  5       nOUR                  5       nT R                  R                  U5        T R                  R                  5         M     T R                  R                  S5        g g )Nr   r,   c                P  > / nU  H8  nUR                  TR                  5      nU(       d  M'  UR                  U5        M:     [        U5      S:  a  SR	                  [        [        U5      5      $ [        S U 5       5      nSR	                  S UR                  5        5       5      $ )N
   r-  c              3  ^   #    U  H#  n[        U5      R                  S S5      S   v   M%     g7fr  )rM   r  )r  locs     r=   r  WTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>  s'      -:C3CHNN4+A.)r  c              3  Z   #    U  H!  u  pS R                  XUS:  a  SOS5      v   M#     g7f)z{}: {} warning{}rA   r   r   N)r  )r  kvs      r=   r  rP    s1      ! : '--a1q5CbII :s   )+)	r   r   r  rG  r   r   rM   r   r[  )reports	locationsr   rt  counts_by_filenamer;   s        r=   collapsed_location_reportDTerminalReporter.summary_warnings.<locals>.collapsed_location_report  s    	 A ~~dkk:Hx!((2 !
 y>B&99Si%899%, -:C- &" yy ! 2 8 8 :!  r?   zwarnings summary (final)zwarnings summaryr  TF)r{  r  r-  c              3  ,   #    U  H
  nS U-   v   M     g7f)r  NrL   )r  r  s     r=   r  4TerminalReporter.summary_warnings.<locals>.<genexpr>  s     (A5a5s   zG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)rT  zlist[WarningReport]rQ   rM   )r  r   r  r   rG  rX  r   r  rO  r[  r   r{   r  r   rstrip)r;   all_warningsr
   warning_reportsreports_grouped_by_messagewrrW  rN  r   message_reportsmaybe_locationr  indenteds   `            r=   r!  !TerminalReporter.summary_warnings  sc   ;;s7;zz~~j7QL44D@E".t/O/O/Q"R"./2?/CD,"IK&%*55bjj"ELLRP &$ 38.=OENN3dN?,F,L,L,N(!:?!K!HHMM.1#..0E#yy(A5(AAH&oo/G%nn.Gg& -O HHMMYc r?   c                *    U R                  SSS5        g )Nr'   PASSESPsummary_passes_combinedr   s    r=   r"  TerminalReporter.summary_passes  s    $$Xx=r?   c                *    U R                  SSS5        g )Nr+   XPASSESXrg  r   s    r=   r#   TerminalReporter.summary_xpasses  s    $$Y	3?r?   c                   U R                   R                  R                  S:w  a  U R                  U5      (       a  U R	                  U5      nU(       d  g U R                  SU5        U Hc  nUR                  (       a4  U R                  U5      nU R                  SUSSS9  U R                  U5        U R                  UR                  5        Me     g g g )Nrz   r  r  T)rz  r  )r   r   rv   r  rI  rO  sectionsr?  _outrep_summary_handle_teardown_sectionsr   )r;   which_reports	sep_title
needed_optrT  r  r   s          r=   rh  (TerminalReporter.summary_passes_combined"  s     ;;%%-{{:&&,0OOM,JsI."C||"66s;sCt$G,,S1223::> # ' .r?   c                    U R                  S5      nU Vs/ s H)  nUR                  S:X  d  M  UR                  U:X  d  M'  UPM+     sn$ s  snf )Nr   r   )rI  r   r   )r;   r   rT  r   s       r=   _get_teardown_reports&TerminalReporter._get_teardown_reports2  sT    //"% "
!{{j( -3]]f-D !
 	
 
s   A	A	 A	c                V    U R                  U5       H  nU R                  U5        M     g rS   )rw  print_teardown_sections)r;   r   r   s      r=   rq  *TerminalReporter._handle_teardown_sections:  s%    008F((0 9r?   c                0   U R                   R                  R                  nUS:X  a  g UR                   H_  u  p4US:w  a  X#;  a  M  SU;   d  M  U R                  R                  SU5        USS  S:X  a  US S nU R                  R                  U5        Ma     g )Nrz   r   r   r  r  r-  )r   r   r   ro  r   rM  r{   r;   r  r   secnamer7  s        r=   rz  (TerminalReporter.print_teardown_sections>  s    kk((44$ #Ge#(BW$S'*23<4'%crlGg& !-r?   c                f    U R                   R                  R                  nU R                  SSUS9  g )Nr&   FAILURESru   )r   r   rv   summary_failures_combined)r;   ru   s     r=   r  !TerminalReporter.summary_failuresK  s,    ""**&&x5&Ir?   c                    U R                   R                  R                  nU(       a   U R                   R                  R                  OSnU R	                  SSUS9  g )Nrz   r*   	XFAILURESr  )r   r   r~   rv   r  )r;   show_tbru   s      r=   r   "TerminalReporter.summary_xfailuresO  sE    ++$$--.5""**4&&y+U&Kr?   )rt  c                  US:w  a  U(       a  U R                  U5      (       a  U R                  U5      nU(       d  g U R                  SU5        US:X  a,  U H%  nU R                  U5      nU R	                  U5        M'     g U HR  nU R                  U5      nU R                  SUSSS9  U R                  U5        U R                  UR                  5        MT     g g g )Nrz   r  r{   r  Tr|  r  )	r  rI  rO  rE  r   r?  rp  rq  r   )	r;   rr  rs  ru   rt  rT  r  r{   r   s	            r=   r  *TerminalReporter.summary_failures_combinedT  s     D=Z!8!8,0OOM,JsI.F?&#11#6-  '  '"66s;sCTE,,S166szzB	  ' "9 r?   c                   U R                   R                  R                  S:w  a  U R                  S5      nU(       d  g U R	                  SS5        U R
                  S    H_  nU R                  U5      nUR                  S:X  a  SU-   nOSUR                   SU 3nU R	                  S	US
S
S9  U R                  U5        Ma     g g )Nrz   r-   r  ERRORSr   zERROR collecting z	ERROR at z of r  Tr  )	r   r   rv   rI  rO  r   r?  r   rp  )r;   rT  r  r   s       r=   r  TerminalReporter.summary_errorsm  s    ;;%%-(,(@GNN3)zz'*..s388y(-3C%chhZtC59CsCT=$$S) + .r?   c                V   UR                  U R                  5        U R                  R                  R                  nUS:X  a  g UR
                   HW  u  p4US:w  a  X#;  a  M  U R                  R                  SU5        USS  S:X  a  US S nU R                  R                  U5        MY     g )Nrz   r   r  r  r-  )r  r   r   r   r   ro  rM  r{   r}  s        r=   rp   TerminalReporter._outrep_summary|  s    txx kk((44$ #Ge#(BHHLLg&rs|t#!#2,HHMM'" !-r?   c                j   U R                   S:  a  g [        R                  " 5       U R                  -
  nU R	                  5       u  p#/ nU R                   S:  nU(       a  U R
                  R                  nU HT  u  pxU R
                  R                  " U40 UD6n	U(       a  W[        U	5      [        U5      -
  -  nUR                  U	5        MV     SR                  U5      n
US0nS[        U5       3nU R
                  R                  " U40 UD6nU(       a  W[        U5      [        U5      -
  -  nX-  n
U(       aI  U R
                  R                  " S
0 UD6nUR                  S5      (       a  US S nW[        U5      -  nX-  n
U(       a  U R                  " SU
4S	W0UD6  g U R                  " U
40 UD6  g )Nr  r   r  Tz in z[0mr  r   r   )r   r   r  r  build_summary_stats_liner   r   r  rG  r  r   format_session_durationr7  rO  r   )r;   session_durationpartsr  
line_partsdisplay_sepr   textr  with_markupr   main_markupdurationduration_with_markupmarkup_for_end_seps                  r=   r  TerminalReporter.summary_stats  s   >>B!;;=4+A+AA";;=
nn)**I!LD((//$9&9KS-D	99	k*	 "
 ii
#!4(12BCDE#xxxG;G12S]BBI#!%!C{!C!**955%7%<"/00I%CNN3HyHKHOOC/;/r?   c           
       ^ ^
^ T R                   (       d  g SU 4S jjnSU 4S jjnSU 4S jjnSU 4S jjm
SU 4S jjmSU U
U4S jjnUU[        USS9U[        US	S9[        US
S9S.n/ nT R                    H%  nUR                  U5      nU(       d  M  U" U5        M'     U(       a-  T R                  SSSSS9  U H  n	T R	                  U	5        M     g g )Nc                  > TR                   R                  U/ 5      nU(       d  g TR                  nU HG  n[        R                  U[        5      n[        X4TR                  US05      nU R                  U5        MI     g )NT)r   r  r   _color_for_type_color_for_type_default _get_line_with_reprcrash_messager   r  )r  statr&   r   r  r   r{   r;   s          r=   show_simple8TerminalReporter.short_test_summary.<locals>.show_simple  sj    ZZ^^D"-F[[F'++D2IJ7E4= T" r?   c                  > T	R                   R                  S/ 5      nU H  nUR                  T	R                  [        S   S05      u  p4T	R
                  R                  " U40 UD6n[        T	R
                  T	R                  U5      nU SU 3nUR                  nU(       a  US[        U5      -   -  nU R                  U5        M     g )Nr*   r,   Tr    - r   r  _get_verbose_word_with_markupr   r  r   r  _get_node_id_with_markupry  rM   r  )
r  r*   r  verbose_wordverbose_markupmarkup_wordr   r{   r  r;   s
            r=   show_xfailed9TerminalReporter.short_test_summary.<locals>.show_xfailed  s    jjnnY3G/2/P/PKK/*"=t!D0, #hhoolMnM1$((DKKM%ax0ECK//DT" r?   c                  > T	R                   R                  S/ 5      nU H  nUR                  T	R                  [        S   S05      u  p4T	R
                  R                  " U40 UD6n[        T	R
                  T	R                  U5      nU SU 3nUR                  nU(       a  US[        U5      -   -  nU R                  U5        M     g )Nr+   r,   Tr   r  r  )
r  r+   r  r  r  r  r   r{   r  r;   s
            r=   show_xpassed9TerminalReporter.short_test_summary.<locals>.show_xpassed  s    jjnnY3G/2/P/PKK/*"=t!D0, #hhoolMnM1$((DKKM%ax0ECK//DT" r?   c           	       > TR                   R                  S/ 5      nU(       a  [        TR                  U5      O/ nU(       d  g US   R	                  TR
                  [        S   S05      u  p4TR                  R                  " U40 UD6nSnU H\  u  pxpU
R                  U5      (       a  U
[        U5      S  n
U	b  U R                  SXWXU
4-  5        MF  U R                  SXWX4-  5        M^     g )Nr(   r   r,   T	Skipped: z%s [%d] %s:%d: %sz%s [%d] %s: %s)r   r  _folded_skipsr   r  r   r  r   r  
startswithrG  r  )r  r(   fskipsr  r  r  r$  numr  rf  r  r;   s              r=   show_skipped_folded@TerminalReporter.short_test_summary.<locals>.show_skipped_folded  s    +/::>>)R+HG?F]4>>7;BF+21:+S+Soj94@,(L ((//,I.IK F/5+V$$V,,#CKM2F%LL+{QW.XX LL!1[v4V!VW 06r?   c                r  > T	R                   R                  S/ 5      nU GH  nUR                  c   e[        UR                  [        5      (       d   X"R                  45       e[        UR                  5      S:X  d   X"R                  45       eUR                  T	R                  [        S   S05      u  p4T	R                  R                  " U40 UD6n[        T	R                  T	R                  U5      nU SU 3nUR                  S   nU(       a  US[        U5      -   -  nU R                  U5        GM     g )Nr(   r  r,   Tr   r~  r  )r   r  rC  rA  r  rG  r  r   r  r   r  r  rM   r  )
r  r(   r  r  r  r  r   r{   r  r;   s
            r=   show_skipped_unfoldedBTerminalReporter.short_test_summary.<locals>.show_skipped_unfolded  s   +/::>>)R+HG||///!#,,66Kll8KK63<<(A-B\\/BB-/2/P/PKK/*"=t!D0, #hhoolMnM1$((DKKM%ax0aECK//DT" r?   c                J   > TR                   (       a	  T" U 5        g T" U 5        g rS   )r   )r  r;   r  r  s    r=   show_skipped9TerminalReporter.short_test_summary.<locals>.show_skipped  s    #E*%e,r?   r&   )r  r'   r-   )r  rl  fr   pr   r  zshort test summary infoT)r  r  )r  	list[str]r  rM   rQ   rR   )r  r  rQ   rR   )rp   r   r  rO  r   )r;   r  r  r  r  REPORTCHAR_ACTIONSr  r   rh   r{   r  r  s   `         @@r=   r$  #TerminalReporter.short_test_summary  s    
	#	#	#	X(	#&	- 	- 848473I
 $$D'++D1Fvu %
 NN3 94NP%  r?   c                    U R                   b  U R                  b  U R                  (       a6  U R                  5         U R                   (       d   eU R                  (       d   eU R                   U R                  4$ rS   )r   r   r  rZ  r   s    r=   r   TerminalReporter._get_main_color  sb    #t'8'8'@DDVDV  "####$$$$!2!222r?   c                    U R                   nSU;   d  SU;   a  SnU$ SU;   d  SU;   d  U(       a  SnU$ SU;   d  U R                  (       d  SnU$ SnU$ )	Nr&   r-   r|  r,   r+   r{  r'   rz  )r   r  )r;   unknown_type_seenr   r  s       r=   _determine_main_color&TerminalReporter._determine_main_color#  st    

u5 0J  5 I$6:K!J
 	 d&8&8 J  "Jr?   c                    / nU R                    H0  nU(       d  M  U[        ;  d  M  X!;  d  M  UR                  U5        M2     [        [        5      U-   U l        U R                  [        U5      5      U l        g rS   )r   KNOWN_TYPESr  listr   r  rO   r   )r;   unknown_types
found_types      r=   rZ   TerminalReporter._set_main_color/  sa    #%**Jz[0Z5T!((4 % !-=55d=6IJr?   c                    U R                   R                  S5      (       a  U R                  5       $ U R                  5       $ )a1  
Build the parts used in the last summary stats line.

The summary stats line is the line shown at the end, "=== 12 passed, 2 errors in Xs===".

This function builds a list of the "parts" that make up for the text in that line, in
the example above it would be:

    [
        ("12 passed", {"green": True}),
        ("2 errors", {"red": True}
    ]

That last dict for each line is a "markup dictionary", used by TerminalWriter to
color output.

The final color of the line is also determined by this function, and is the second
element of the returned tuple.
r  )r   r   &_build_collect_only_summary_stats_line _build_normal_summary_stats_liner   s    r=   r  )TerminalReporter.build_summary_stats_line8  s7    ( ;;  //>>@@88::r?   c                    U R                   R                  U/ 5      nU Vs/ s H  n[        USS5      (       d  M  UPM     sn$ s  snf )zRGet test/collection reports for the given status key, such as `passed` or `error`.r   T)r   r  rC   )r;   keyrT  r  s       r=   _get_reports_to_display(TerminalReporter._get_reports_to_displayQ  s:    **..b)"P7aga1H$&O7PPPs
   AAc                2   U R                  5       u  p/ nU Hi  nU R                  U5      nU(       d  M  [        U5      n[        R	                  U[
        5      nUSSXq:H  0nUR                  S[        Xd5      -  U45        Mk     U(       d  S[
        S04/nX14$ )NTr  %d %szno tests ran)r  r  rG  r  r  r  r  	pluralize)	r;   r  known_typesr  r  rT  rf   r   r  s	            r=   r  1TerminalReporter._build_normal_summary_stats_lineV  s     #'"6"6"8
C2237GwG'++C1HIvu/BCg	%(==vFG  $'>&EFGE  r?   c                   [        U R                  S5      5      n[        U R                  S5      5      nU R                  S:X  a
  SSS04/nSnOsUS:X  a"  SnS[        U R                  S	5      -  nXTS04/nOKU R                  U:H  nU(       a	  SnS
U S3nO&SnU R                  U-
  nU SU R                   SU S3nXTS04/nU(       a   [        S   nUS[        US5      -  US04/-  nX44$ )Nr)   r-   r   zno tests collectedr{  Trz  z%d %s collectedtestzno tests collected (z deselected)r  z tests collected (r  )rG  r  r   r  r  )r;   r)   r@  r  r  collected_outputall_tests_were_deselectedr  s           r=   r  7TerminalReporter._build_collect_only_summary_stats_linei  s2    55lCD
T11':;"*Xt,<=>E!J1_ J09T=O=OQW3XX&T(:;<E(,(:(:j(H%(%
%9*\#R $
--
:&.Zq1C1C0DDVWaVbbn#o &T(:;<E(1Jw67!;;j$=OPQQE  r?   )r   r   r   r   r   r   r   r   r   r  r   r   r  r   r   r   r   r   r   rp   r   r   rS   )r   r   r   zTextIO | NonerQ   rR   )rQ   z#Literal['progress', 'count', False])rQ   r   )rQ   rO   )r  zbool | NonerQ   rR   )r   rM   rQ   rO   )r   rM   r  rM   r  rO   rQ   rR   r  )r$  rM   r%  rM   rQ   rR   )rQ   rR   )r7  rM   r  rO   r.  r   r/  rM   r  rO   rQ   rR   )r7  rM   r  rO   r  rO   rQ   rR   )r{   zstr | bytesr  rO   rQ   rR   )r{   rM   r  rO   rQ   rR   )NN)
rM  rM   rN  rP   r   
int | Noner  rO   rQ   rR   )r  )rN  rM   rM  rM   rR  rO   rQ   rR   )r   rM   rR  rO   rQ   rR   )r^   rM   r[  zSequence[Any]rQ   rR   )r`  r   rQ   rO   )rg  zwarnings.WarningMessager   rM   rQ   rR   )rl  r   rQ   rR   )r[  zSequence[Item]rQ   rR   )r   rM   rt  ztuple[str, int | None, str]rQ   rR   )r   r$   rQ   rR   )rQ   zGenerator[None, object, object])rQ   rM   )r   r#   rQ   rR   )F)r
   rO   rQ   rR   )r  r%   rQ   rR   )r  zSequence[str | Sequence[str]]rQ   rR   )r   r   rQ   r  )r  r%   r  zint | ExitCoderQ   Generator[None])rQ   r  )r)  zExceptionInfo[BaseException]rQ   rR   )
r   rM   r  rM   rf  r  ru  rM   rQ   rM   )r  rM   )rr  rM   rs  rM   rt  rM   rQ   rR   )r   rM   rQ   zlist[TestReport])r   rM   rQ   rR   )r  r$   rQ   rR   )
rr  rM   rs  rM   ru   rM   rt  rP   rQ   rR   )r  r"   rQ   rR   )rQ   ztuple[str, list[str]])r  rO   rQ   rM   )rQ   z-tuple[list[tuple[str, dict[str, bool]]], str])r  rM   rQ   z	list[Any])OrT   rU   rV   rW   r:   r   propertyr   r  rj   rk   r	  setterr  r  r   r'  r*  r9  r  r  r   rJ  rO  rS  r{   r]  ra  ri  rm  rp  rv  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*  r-  r  rs  r?  rE  rI  r!  r"  r#  rh  rw  rq  rz  r  r   r  r  rp  r  r$  r  r  rZ  r  r  r  r  rY   rL   r?   r=   r   r   i  s   B6*   # # 2 2 3 3    
 ! ! J J(	2$& 77 	7
 7 7 7 
7, 49 7&5* ! $	66 6 	6
 6 
6'!#
606 6 
	6!-%@	JX T T d "=A . .A"#"J d7 74*2*	*"-,N< d,:	 4 d$ $F- #&0:DG	.T4l>@? ?-0?>A?	? 
1'JL "&CC C
 C C 
C2*##0Jl&\3
K;2Q
!	6!&!	6!r?   r   c                    UR                  UR                  5      nUR                  S5      tpEU(       a'  U R                  SR	                  U5      SS9nUS-   U-   $ U$ )Nr  Tr  )r6  r   r  r  r   )twr   r  r   pathr  parts_markups          r=   r  r    sX    ''

3F<<%LDyy5!1y=d{\))r?   c                b   UR                  S5      nUS:w  a  USU nSn[        U R                  S5      5      nU[        U5      -   U:  a  gU[        U5      -   U:  aB  U[        U5      -  nUSU nU[        U5      -   U:  a  USS nU[        U5      -   U:  a  M  X-  nU R                  U5      $ )zxFormat msg into format, ellipsizing it if doesn't fit in available_width.

Returns None if even the ellipsis can't fit.
r-  r  Nz...r   )findr   r  rG  )r  r   r  iellipsisformat_widths         r=   r  r    s     	ABw"1gHFMM"-.Lc(m#o5hsm#o53x=("?#Xc]*_<cr(C Xc]*_<==r?   c                   UR                  X5      u  pEUR                  " U40 UD6n[        X U5      nU SU 3n[        U5      n	 UR                  R
                  R                  n
[        5       (       d  U R                  R                  S:  a  SU
 3n
OUR                  U	-
  n[        SX5      n
U
b  X-  nU$ ! [         a     U$ f = f)z?Get summary line for a report, trying to add reprcrash message.r   r~  r  z - {})r  r  r  r   rC  r1  r   r   r   rg   r   r  rD  )r   r  r  word_markupr  r  r`   r}  r{   
line_widthr   r  s               r=   r  r    s     $'#D#D$ L 99\4^4D#B4DV1TFD$Jll$$,, ??fmm33q8u+C llZ7O!'3@C?KDK   Ks    B9 9
CCc                T   0 nU H  nUR                   c   e[        UR                   [        5      (       d   X3R                   45       e[        UR                   5      S:X  d   X3R                   45       eUR                   u  pEn[	        U [        U5      5      n[        US0 5      nUR                  S:X  a  SU;   a  SU;  a  US U4nOXEU4nUR                  U/ 5      R                  U5        M     / n	UR                  5        H#  u  pU	R                  [        U
5      /UQ75        M%     U	$ )Nr  keywordsr   skip
pytestmark)rC  rA  r  rG  r!   r   rC   r   rX  r  r[  )r   r(   deventr  rf  r  r  r  rG   eventss              r=   r  r    s    ACA~~)))%..%00I5..2II05>>"a'@%)@@'!&YV55*b1
 JJ'!("H,06f/EC6*C	S"$$U+' ( 68Fwwys6{)S)* !Mr?   r|  r{  rz  )r&   r-   r,   r'   c                V    US;  a  X4$ UR                  SS5      nX S:w  a  US-   4$ U4$ )N)r-   r,   r  r,   warningrA   r   )r   )rf   nouns     r=   r  r    s@    00{
 <<
I.D
$*4444r?   c                    / nU  HS  u  p#UR                    SUR                   3nUR                  S5      (       a  USS  nXA;  d  MB  UR                  U5        MU     U$ )Nr  zpytest-   )project_namer  r  r  )r  rG   rl  distr  s        r=   r  r     sa    F"##$Adll^4??9%%8DMM$ # Mr?   c                f    U S:  a  U S S3$ [         R                  " [        U 5      S9nU S SU S3$ )zQFormat the given seconds in a human readable manner to show in the final summary.<   z.2fr   )secondszs (r  )datetime	timedeltar   )r  dts     r=   r  r    sA    |#a  G5#c"Q''r?   c                n   [        U S5      (       a2  U R                  nUR                  S5      (       a  U[        S5      S nU$ U R                  (       d   e[        U R                  [        5      (       d   eU R                  u    p!UR                  S5      (       a  U[        S5      S nU$ US:X  a  SnU$ )ziGet the reason string of a skip/xfail/xpass test report.

The string is just the part given by the user.
ry  zreason: Nr  Skippedr   )r  ry  r  rG  r(   rA  rC  r  )r   r  r  s      r=   r  r    s    
 vz""Z((C
O-.F~~~&//511111[))C,./F  y Fr?   )rE   r   rQ   rR   )r   r   rQ   rR   )r   r   rQ   rM   )r   r"   rQ   ztuple[str, str, str])r  r   r   r   r  r"   )r  rM   r   rM   r  r   rQ   rP   )
r   r   r  r"   r  r   r  zdict[str, bool]rQ   rM   )r   r   r(   zSequence[CollectReport]rQ   z&list[tuple[int, str, int | None, str]])rf   r   r   rM   rQ   ztuple[int, str])rQ   r  )r  floatrQ   rM   )r   r$   rQ   rM   )VrX   
__future__r   argparsecollectionsr   dataclassesr  	functoolsr   r  pathlibr   r  r   r5  typingr   r   r	   r
   r   r   r   r   r   r   r   r,   r  r   r   r   _pytest._coder   _pytest._code.coder   _pytest._ior   _pytest._io.wcwidthr   _pytest._version_pytest.assertion.utilr   r   r   r   r   r   _pytest.config.argparsingr   _pytest.nodesr   r   _pytest.pathlibr    r!   _pytest.reportsr"   r#   r$   _pytest.mainr%   r  r  r   Actionr0   r\   r   r   r   r   	dataclassr   r   r  r  r  r  r  r  r  r  r  r  rL   r?   r=   <module>r"     s  
 #         
                  ' , & (  0 ( ! # # ,   ( ' & ) & $  # 	  "=hoo "=J/ /(Od	B2 
$, ,   8 ]! ]! ]!@!2#)7FU<$ ,@ 	 # 
5(r?   