
    yIf                     ~   d Z ddlZddlmZ ddlZddlZddlmZ ddlZddl	m
Z
 ddl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Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl Z ddl!Z!ddl"m#Z# ddl"m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-Z"ddl.m/Z/ ddl0m1Z1 ddl0m2Z2 dd l0m3Z3 dd!l0m4Z4 dd"l5m6Z6 dd#l7m8Z8 dd$l7m9Z9 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@ erdd*lAmBZB d+ZCd,ZDd-ZE G d. d/ejF                  ZG G d0 d1e          ZHd2e6d3dfd4ZId5e2d3dfd6ZJd5e2d3eKfd7ZL e4d89          d:e>d3eeKeKeKf         fd;            ZMejN         G d< d=                      ZOe G d> d?                      ZPd@e*d5e2dAe>fdBZQdCeKdDeKdEeRd3eeK         fdFZSd5e2dAe>d@e*dGeeKeTf         d3eKf
dHZUdIe
dJee?         d3eeeReKeeR         eKf                  fdKZVdLdLdMdNdOZWdMZXdPeRdQeKd3eeReKf         fdRZYd3eeK         fdSZZdTe[d3eKfdUZ\d:e@d3eKfdVZ]dS )WzsTerminal reporting of the full testing process.

This is a good source for looking at the various reporting hooks.
    N)Counter)partial)Path)Any)Callable)ClassVar)Dict)final)	Generator)List)Literal)Mapping)
NamedTuple)Optional)Sequence)Set)TextIO)Tuple)TYPE_CHECKING)Union)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                        e Zd ZdZ	 	 	 ddee         dedededee         d	df fd
Z		 dde
j        de
j        deeee         df         dee         d	df
dZ xZS )MoreQuietActionzA 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.
    NFoption_stringsdestdefaultrequiredhelpreturnc                 V    t                                          ||d|||           d S )Nr   )r6   r7   nargsr8   r9   r:   )super__init__)selfr6   r7   r8   r9   r:   	__class__s         D/var/www/piapp/venv/lib/python3.11/site-packages/_pytest/terminal.pyr?   zMoreQuietAction.__init__W   sB     	) 	 	
 	
 	
 	
 	
    parser	namespacevaluesoption_stringc                     t          || j        d          dz
  }t          || j        |           t          |dd          dz   |_        d S )Nr      quiet)getattrr7   setattrrJ   )r@   rD   rE   rF   rG   	new_counts         rB   __call__zMoreQuietAction.__call__h   sL     Ity!44q8		49i000!)Wa881<	rC   )NFNN)__name__
__module____qualname____doc__r   strobjectboolr   r?   argparseArgumentParser	Namespacer   rN   __classcell__)rA   s   @rB   r5   r5   P   s         "
 
 
 
 	

 
 sm
 

 
 
 
 
 
, (,
= 
='
= %
= c8F+T12	
=
  }
= 

= 
= 
= 
= 
= 
= 
= 
=rC   r5   c                   b    e Zd ZU dZeed<   eed<   eeeeeee	f         f         f         ed<   dS )TestShortLogReportuG  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.
    categoryletterwordN)
rP   rQ   rR   rS   rT   __annotations__r   r   r   rV    rC   rB   r\   r\   u   sY           MMMKKK
U3T	 2233
444444rC   r\   rD   r;   c           	         |                      ddd          }|                    ddddd	d
           |                    ddddd           |                    ddddd           |                    ddt          dd	d           |                    dd	t          dd           |                    dddt          dd           |                    d d!dd"dd#$           |                    d%d&dd'dd()           |                    d*d+d'd,-           |                    d.d/dd0d1g d2d34           |                    d5dd6g d7d8d9:           |                    d;d<ddd=>           |                    d?d@dd@d1g dAdB4           |                    dCdDdDdEgdFG           |                     dHdIdJK           t          j        | t          j        dLM           d S )NNzterminal reporting	Reportinggeneral)afterz-vz	--verbosecountr   verbosezIncrease verbosity)actionr8   r7   r:   z--no-header
store_trueF	no_headerzDisable headerz--no-summary
no_summaryzDisable summaryz-qz--quietzDecrease verbosityz--verbosityzSet verbosity. Default: 0.)r7   typer8   r:   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   r7   r8   metavarr:   z--disable-warningsz--disable-pytest-warningsdisable_warningszDisable warnings summary)r8   r7   rh   r:   z-lz--showlocals
showlocalsz/Show locals in tracebacks (disabled by default))rh   r7   r8   r:   z--no-showlocalsstore_falsezFHide locals in tracebacks (negate --showlocals passed through addopts))rh   r7   r:   z--tbstyletbstyleauto)rv   longshortnolinenativez5Traceback print mode (auto/long/short/line/native/no))rp   rh   r7   r8   choicesr:   z--show-captureshowcapture)ry   stdoutstderrlogallr   zOControls how captured stdout/stderr/log is shown on failed tests. Default: all.)rh   r7   r|   r8   r:   z--fulltracez--full-tracez,Don't cut any tracebacks (default is to cut))rh   r8   r:   z--colorcolor)yesry   rv   z#Color terminal output (yes/no/auto)z--code-highlightr   ry   zSWhether code should be highlighted (only if --color is also enabled). Default: yes.)r8   r|   r:   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)r:   r8   zSpecify a verbosity level for test case execution, overriding the main level. Higher levels will provide more detailed information about each test case executed.)r:   )	getgroup
_addoptionr5   int_REPORTCHARS_DEFAULTaddinir   _add_verbosity_iniVERBOSITY_TEST_CASES)rD   groups     rB   pytest_addoptionr      s/   OO0+YOOOE	!     
     
     
!     
)     
$>     
#'     
>     
U	     
AAAD     
888     
;     
%%%2     
	     MM)      #b	     rC   configc                     t          | t          j                  | j                            d           | j        j        s| j        j        r'fd}| j        j	        
                    d|           d S d S )Nterminalreporterc                     d                     t          t          |                    }                    d|z              d S )N z[traceconfig] )joinmaprT   
write_line)tagsargsmsgreporters      rB   mywriterz"pytest_configure.<locals>.mywriter  s<    ((3sD>>**C 03 677777rC   zpytest:config)TerminalReportersysr~   pluginmanagerregisteroptiondebugtraceconfigtracerootsetprocessor)r   r   r   s     @rB   pytest_configurer     s    
33H
!!(,>???} Bfm7 B	8 	8 	8 	8 	8 	&&AAAAAB BrC   c                 $   | j         j        }ddh}d}|D ]>}||v r|                                }|dk    rd}#|dk    rd},|dk    rd}5||vr||z  }?| j         j        s
d	|vrd	|z   }n&| j         j        rd	|v r|                    d	d          }|S )
NFS asxXEfAPpsxXEfNw)r   rn   lowerrq   replace)r   rn   old_aliases
reportoptschars        rB   getreportoptr     s    }0K*KJ 
 
;::<<D3;; JJS[["JJS[[JJ##$J=) 1c.C.C:%

		' 1C:,=,=''R00
rC   Ttrylastreportc                     d}| j         rd}n	| j        rd}| j        }| j        dv r
|dk    rd}d}|||                                fS )Nr   .s)collectsetupteardownr+   r2   E)r,   r-   outcomewhenupper)r   r^   r   s      rB   pytest_report_teststatusr   2  se    F} 	 >G{6667h;N;NFGMMOO++rC   c                       e Zd ZU dZeed<   dZee         ed<   dZee	ee
f                  ed<   dZeed<   ded	ee         fd
ZdS )WarningReportao  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``).
    messageNnodeid
fslocationTcount_towards_summaryr   r;   c                     | j         r| j         S | j        r8| j        \  }}t          |j        j        t          |                    }| d| S dS )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        rB   get_locationzWarningReport.get_locationT  s`    ; 	;? 	* $Hg!&":">X@V@VWWG)))))trC   )rP   rQ   rR   rS   rT   r`   r   r   r   r   r   r   r   r   r   ra   rC   rB   r   r   B  s           LLL FHSM   ,0JsCx)000&*8***6 hsm      rC   r   c                   :   e Zd Zddedee         ddfdZded         fdZe	de
fd            Ze	defd	            Ze	defd
            Ze	defd            Ze	defd            Zej        dee         ddfd            Ze	defd            ZdedefdZdededdfdZddededdfdZddZdddddeded e
d!ededdfd"Zdd#dedededdfd$Zdd%Zd&eeef         deddfd'Zd&ededdfd(Z	 	 dd)ed*ee         d+ee
         deddf
d,Zdd*ed)ed.eddfd/Z d0ed.eddfd1Z!d2ed3e"e#         ddfd4Z$d5e%defd6Z&d7e'j(        deddfd8Z)d9e*ddfd:Z+d3e"e,         ddfd;Z-ded<e.eee
         ef         ddfd=Z/d>e0ddfd?Z1e	defd@            Z2deddfdAZ3defdBZ4ddCZ5e	de
fdD            Z6ddEZ7d>e8ddfdFZ9ddGeddfdHZ: e;dIJ          ddM            Z<dNe"eee"e         f                  ddfdOZ=dede>e         fdPZ?ddQZ@d3e"e,         ddfdRZA e;dIS          dKdLdTee
eBf         deCdU         fdV            ZD e;dIS          deCdU         fdW            ZEdXeFeG         ddfdYZHddZZIdd[ZJded\ed]ee
         d^edef
d_ZKd` ZLda ZMdbefdcZNdddZOddeZPddfZQdgedhedieddfdjZRdede>e0         fdkZSdeddfdlZTdme0ddfdnZUddoZVddpZW	 ddgedhediee         ddfdqZXddrZYdmeZddfdsZ[ddtZ\dduZ]de.ee>e         f         fdvZ^dwedefdxZ_ddyZ`de.e>e.eeaeef         f                  ef         fdzZbd{ede>e#         fd|Zcde.e>e.eeaeef         f                  ef         fd}Zdde.e>e.eeaeef         f                  ef         fd~ZedS )r   Nr   filer;   c                    dd l }|| _        d| _        d | _        d | _        i | _        d | _        d | _        |j        j	        | _
        |t          j        }|j                            ||          | _        | j        j        | _        d | _        t%          |          | _        | j        j        | _        |                                | _        t-                      | _        |                                 | _        d | _        d | _        d | _        d S Nr   )_pytest.configr   _numcollected_session_showfspathstats_main_color_known_typesr   r   	startpathr   r~   create_terminal_writer_tw	fullwidth_screen_widthcurrentfspathr   rn   	hasmarkupisattyset_progress_nodeids_reported_determine_show_progress_info_show_progress_info_collect_report_last_write_already_displayed_warnings_keyboardinterrupt_memo)r@   r   r   _pytests       rB   r?   zTerminalReporter.__init__a  s    +/+/+-
*.1515<:D>88FF!X/:>'//+kkmm47EE'#'#E#E#G#G ;?':>(@D$$$rC   )r   rf   Fc                    | j                             dd          dk    r | j                             d          dk    rdS | j                             dd          rdS | j                             d          }|dv rdS |d	k    rd	S dS )
zRReturn whether we should display progress information based on the current config.capturery   r   progress-even-when-capture-noF	setupshow>   r   r   r   rf   )r   	getoptiongetini)r@   cfgs     rB   r   z.TerminalReporter._determine_show_progress_info{  s    
 K!!)T22d::""#9::./ / 5;  e44 	5;%%&<==???:G^^75rC   c                 (    | j         j        j        }|S rO   )r   r   rg   )r@   	verbositys     rB   r   zTerminalReporter.verbosity  s    +3	rC   c                     | j         dk    S r   )r   r@   s    rB   
showheaderzTerminalReporter.showheader  s    ~""rC   c                 >    t          | j        j        j                  S rO   )rV   r   r   rj   r   s    rB   rj   zTerminalReporter.no_header  s    DK&0111rC   c                 >    t          | j        j        j                  S rO   )rV   r   r   rk   r   s    rB   rk   zTerminalReporter.no_summary  s    DK&1222rC   c                 n    | j         (| j                            t          j                  dk    S | j         S r   )r   r   get_verbosityr   r   r   s    rB   
showfspathzTerminalReporter.showfspath  s2    #;,,V-HIIQNNrC   valuec                     || _         d S rO   )r   )r@   r   s     rB   r   zTerminalReporter.showfspath  s     rC   c                 R    | j                             t          j                  dk    S r   )r   r   r   r   r   s    rB   showlongtestinfoz!TerminalReporter.showlongtestinfo  s     {(()DEEIIrC   r   c                 F    ddd                     ||          }|| j        v S )Nxr   )r/   r-   )getrn   )r@   r   s     rB   hasoptzTerminalReporter.hasopt  s-    3//33D$??t'''rC   r   markupc                    | j         j        |                    d          d         z  }| j        || j        k    rt| j        | j        r|                                  || _        t          | j        |          }| j        	                                 | j        
                    |dz               | j        j
        |fddi| d S )N::r   r   flushT)r   rootpathsplitr   r   )_write_progress_information_filling_spacer&   r   r   rz   write)r@   r   resr  fspath	relfspaths         rB   write_fspath_resultz$TerminalReporter.write_fspath_result  s    %T(:(:1(==%43E)E)E!-$2J->>@@@!'D#DNF;;IHMMOOOHNN9s?+++s11$1&11111rC   r   prefixextrac                     | j         |k    r:| j                                         || _         | j                            |           |r | j        j        |fi | d| _         d S d S )N)r   r   rz   r  )r@   r  r  kwargss       rB   write_ensure_prefixz$TerminalReporter.write_ensure_prefix  sw    ''HMMOOO!'DHNN6""" 	$DHN5++F+++!#D	$ 	$rC   c                 X    | j         r"| j                                         d | _         d S d S rO   )r   r   rz   r   s    rB   ensure_newlinezTerminalReporter.ensure_newline  s4     	&HMMOOO!%D	& 	&rC   F   
)r
  marginline_sepcontentr
  r  r  c                    | j         j        }|                    t          j        d|z  |z   | j        |z
  dd                    }||d         } | j         j        |fd|i| dS )z+Wrap message with margin for progress info.r   TF)widthdrop_whitespacereplace_whitespaceNr
  )r   width_of_current_liner   textwrapwrapr   r  )r@   r  r
  r  r  r  r$  wrappeds           rB   
wrap_writezTerminalReporter.wrap_write  s     !% >--M++g5(61 $#(	  
 
 /001w66e6v66666rC   )r
  c                0     | j         j        |fd|i| d S )Nr
  )r   r  )r@   r  r
  r  s       rB   r  zTerminalReporter.write  s)    w66e6v66666rC   c                 8    | j                                          d S rO   )r   r
  r   s    rB   r
  zTerminalReporter.flush  s    rC   rz   c                     t          |t                    st          |d          }|                                   | j        j        |fi | d S )Nr   )errors)
isinstancerT   r  r   rz   )r@   rz   r  s      rB   r   zTerminalReporter.write_line  sZ    $$$ 	/tI...Dd%%f%%%%%rC   c                     |                     dd          }|r%| j        j        t          |          z
  dz
  }d|z  }nd}t	          |          } | j        j        d|z   |z   fi | dS )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.
        eraseFrI   r   r   N)popr   r   lenrT   r  )r@   rz   r  r/  
fill_countfills         rB   rewritezTerminalReporter.rewrite  s     

7E** 	+c$ii7!;J#DDD4yytd{T)44V44444rC   septitler   c                 X    |                                    | j        j        |||fi | d S rO   )r  r   r6  )r@   r6  r7  r   r  s        rB   	write_sepzTerminalReporter.write_sep   s<     	S%55f55555rC   =kwc                 .     | j         j        ||fi | d S rO   )r   r6  )r@   r7  r6  r;  s       rB   sectionzTerminalReporter.section
  s&    S%&&2&&&&&rC   r   c                 ,     | j         j        |fi | d S rO   )r   rz   )r@   r   r;  s      rB   rz   zTerminalReporter.line  s$    c  R     rC   r]   itemsc                     || j         v}| j                             |g                               |           |r|                                  d S d S rO   )r   
setdefaultextend_set_main_color)r@   r]   r?  set_main_colors       rB   
_add_statszTerminalReporter._add_stats  s^    !3
h++225999 	#  """""	# 	#rC   excreprc                     t          |                              d          D ]}|                     d|z              dS )Nr  zINTERNALERROR> T)rT   r  r   )r@   rF  rz   s      rB   pytest_internalerrorz%TerminalReporter.pytest_internalerror  sE    LL&&t,, 	6 	6DOO-45555trC   warning_messagec                     ddl m} |j        |j        f} ||          }t	          |||          }|                     d|g           d S )Nr   )warning_record_to_str)r   r   r   r1   )_pytest.warningsrK  r   linenor   rE  )r@   rI  r   rK  r   r   warning_reports          rB   pytest_warning_recordedz(TerminalReporter.pytest_warning_recorded  sp    
 	;:::::$-/EE
''88&!76
 
 
 	
^$455555rC   pluginc                 `    | j         j        j        rd| }|                     |           d S d S )NzPLUGIN registered: )r   r   r   r   )r@   rP  r   s      rB   pytest_plugin_registeredz)TerminalReporter.pytest_plugin_registered*  sC    ;) 	!000C OOC     	! 	!rC   c                 2    |                      d|           d S )Nr.   )rE  )r@   r?  s     rB   pytest_deselectedz"TerminalReporter.pytest_deselected2  s    e,,,,,rC   locationc                     | j         r: | j        |g|R  }|                     |d           |                                  d S | j        r,|                     |d           |                                  d S d S )Nr   )r  _locationliner  r
  r   r  )r@   r   rU  rz   s       rB   pytest_runtest_logstartz(TerminalReporter.pytest_runtest_logstart5  s    
   	%4%f8x888D$$T2...JJLLLLL_ 	$$VR000JJLLLLL	 	rC   r   c                    d| _         |}t          | j        j                            || j                   }|j        |j        |j        }}}t          |t                    sd }n|\  }}| 
                    ||g           |s|sd S t          |d          }|Ft          |d          }	|j        r|	sddi}n(|j        r|	rddi}n|j        rddi}n|j        rddi}ni }| j                            t           j                  dk    r | j        j        |fi | n| j                            |j                    | j        |j        g|j        R  }
|s | j        |
|fi | |j        st          |d          rt5          |          }| j                            t           j                  d	k     r>| j        j        | j        j        z
  t;          d
          z
  dz
  }t=          d||          }nd| d}|r||                     |           | j         r| !                                 n| "                                 | j                            d|j#        j$        j%        z             | j         r2| j                            | &                                dz   d           n| j                            d            | j        j        |fi | | j                            d|
z              d| _'        | (                                 d S )NT)r   r   nodewasxfailgreenyellowredr       [100%]rI   z ({})z ()z[%s]r   )cyanr  ))
_tests_ranr\   r   hookr   r]   r^   r_   r-  tuplerE  hasattrr,   r+   r-   r   r   r   r   r  r   addr   rW  rU  r  _get_raw_skip_reasonr   r$  r2  _format_trimmedr(  r   r  r  rZ  gatewayid!_get_progress_information_messager   r
  )r@   r   repr  r]   r^   r_   r  running_xdist	was_xfailrz   reasonavailable_widthformatted_reasons                 rB   pytest_runtest_logreportz)TerminalReporter.pytest_runtest_logreportB  st    [66c$+6VV
 "%sz38$&$&& 	 FFLD&3%((( 	d 	FV,,>
33Iz 	) 	!4 	 "D)  "D);$$V%@AAQFFDHN6,,V,,,,+//
;;;%4%cj@3<@@@D  (((t>>v>>>; :'&*"="= :1#66F{001LMMPQQQ!X/$(2PP!)nn-  (
 ,;#V_, ,(( ,:>>>( :"2">(8999+ EBBDDD##%%%v(8(;;<<<+ (HNN>>@@3FT #     HNN3'''t..v...sTz***%'"

rC   c                 X    | j         J t          | j                  | j         j        k    S rO   )r   r2  r   testscollectedr   s    rB   _is_last_itemzTerminalReporter._is_last_item  s+    }(((4233t}7SSSrC   c                 $   | j         sJ | j                            t          j                  dk    r| j        r| j        dk    r#| j         j        }t          d| d| d          }nt          d          }| j        	                    |           | j
        r|                                  d S |                                 \  }}| j        }||z   dz   | j        k    }|r2|                                 } | j        j        |dz   fi |d	i d S d S d S d S )
Nr   rf    [/]r`  rI   r  T)r   r   r   r   r   r   ru  r2  r   rg  rv  r  _get_main_color_width_of_current_liner   rl  r   r  )	r@   r   	num_testsprogress_length
main_color_r   	past_edger   s	            rB   pytest_runtest_logfinishz)TerminalReporter.pytest_runtest_logfinish  sQ   }K%%f&ABBaGG( H '722 M8	"%&C9&C&Cy&C&C&C"D"D"%i..+//777! E>>@@@@@ $ 4 4 6 6
A//!3t7II	 E@@BBC"DHN3:DD*d1CDDDDD' HGGG"E ErC   c                 >   | j         sJ | j         j        }| j        dk    r[|rP| j        }dt	          t          |                     d}d| d}|                    t	          |          |          S d| d| dS |rdt	          | j                  d	z  |z  d
dS dS )Nrf   z{:zd}rx  z/{}]z [ z / z ]d   3dz%]r`  )r   ru  r   r   r2  rT   format)r@   	collectedr   counter_formatformat_strings        rB   rl  z2TerminalReporter._get_progress_information_message  s    }M0	#w.. F:!?s3y>>':':!?!?!? ;^ ; ; ;$++CMM9EEE444y4444 WT<==CyPWWWW 9rC   c                     |                                  \  }}|                                 }| j        }| j        j        |z
  dz
  } | j        |                    |          fddi|di d S )NrI   r
  T)r{  rl  r|  r   r   r  rjust)r@   r   r  r   r   r4  s         rB   r  z:TerminalReporter._write_progress_information_filling_space  sw    ''))q4466'x!A%)
399T??@@$@5$-@@@@@rC   c                     | j         j        S )z%Return the width of the current line.)r   r$  r   s    rB   r|  z'TerminalReporter._width_of_current_line  s     x--rC   c                    | j         rI| j        j        j        dk    r2|                     ddd           t          j                    | _        d S d S | j        j        j        dk    r|                     ddd           d S d S )Nr   zcollecting ... T)r
  boldrI   )r   r   r   rg   r  r   timer   r   s    rB   pytest_collectionz"TerminalReporter.pytest_collection  s    ; 	A{!)Q..

,Dt
DDD28+--/// /. ['1,,JJ(4J@@@@@ -,rC   c                    |j         r|                     d|g           n|j        r|                     d|g           d |j        D             }| xj        t          |          z  c_        | j        r|                                  d S d S )Nr2   r-   c                 <    g | ]}t          |t                    |S ra   )r-  r#   .0r  s     rB   
<listcomp>z9TerminalReporter.pytest_collectreport.<locals>.<listcomp>  s'    AAAqZ4-@-@AAAArC   )r+   rE  r-   resultr   r2  r   report_collect)r@   r   r?  s      rB   pytest_collectreportz%TerminalReporter.pytest_collectreport  s    = 	1OOGfX....^ 	1OOIx000AAFMAAAc%jj(; 	"!!!!!	" 	"rC   r
   c                    | j         j        j        dk     rd S |s6t          j                    }| j        | j        |t          z
  k    rd S || _        t          | j        	                    dg                     }t          | j        	                    dg                     }t          | j        	                    dg                     }| j
        |z
  }|rdnd}|t          | j
                  dz   | j
        dk    rd	nd
z   z  }|r|d||dk    rd
nd	fz  z  }|r|d|z  z  }|r|d|z  z  }| j
        |k    r|d|z  z  }| j        r3|                     |dd           |r|                     d           d S d S |                     |           d S )Nr   r2   r-   r.   z
collected zcollecting z itemrI   r   r   z / %d error%sz / %d deselectedz / %d skippedz / %d selectedT)r  r/  r  )r   r   rg   r   r  r   REPORT_COLLECTING_RESOLUTIONr2  r   r  r   rT   r   r5  r  r   )r@   r
   tr,  r-   r.   selectedrz   s           rB   r  zTerminalReporter.report_collect  s   ;%))F 	0A/;3a:V6VVV./D+TZ^^GR0011djnnY3344b99::
%
2$7||-"##g-t7IQ7N7NTWX	
  	KOvfkkssr&JJJD 	4&33D 	.Og--D(($x//D; 	"LLDL555 !

4     ! ! OOD!!!!!rC   Tr   sessionr*   c                 6   || _         t          j                    | _        | j        sd S |                     ddd           t          j                    }| j        s=dt          j         d| }t          t          dd           }|rBd                    t          t          |d d	                             }|d
| d|d	          dz  }|dt          j        j         dt"          j         z  }| j        dk    s,| j        j        j        st          | j        j        dd           r|dt          t          j                  z   z  }|                     |           | j        j                            | j        | j                  }|                     |           d S d S )Nr:  ztest session startsTr  z	platform z -- Python pypy_version_infor      z[pypy--rz  z	, pytest-z	, pluggy-r   pastebinz -- )r   
start_path)r   r   r  _sessionstarttimer   r9  platformpython_versionrj   r   rK   r   r   rT   r   _versionversionpluggy__version__r   r   r   r   
executabler   rd  pytest_report_headerr   _write_report_lines_from_hooks)r@   r  verinfor   r  liness         rB   pytest_sessionstartz$TerminalReporter.pytest_sessionstart  s   !' 	Fs1===)++~ 	7@cl@@w@@C '-@$ G G  B((3s,=bqb,A#B#BCCAAA*;A*>AAAAVw/7VV&BTVVVC"";%+ #4;-z4@@ # vCN 3 333OOC   K$99{t~ :  E //66666#	7 	7rC   r  c                     t          |          D ]G}t          |t                    r|                     |           -|D ]}|                     |           Hd S rO   )reversedr-  rT   r   )r@   r  line_or_linesrz   s       rB   r  z/TerminalReporter._write_report_lines_from_hooks  ss     &e__ 	* 	*M--- *....) * *DOOD))))*		* 	*rC   c                    d|j          g}|j        r0|                    dt          |j         |j                  z              |j        t
          j        j        k    rP|                    d          }|                    d	                    d
                    |                               |j                                        }|r8|                    dd
                    t          |                    z             |S )Nz	rootdir: zconfigfile: 	testpathsztestpaths: {}, zplugins: %s)r  inipathappendr&   args_sourcer   
ArgsSource	TESTPATHSr   r  r   r   list_plugin_distinfo_plugin_nameversions)r@   r   r  r  
plugininfos        rB   r  z%TerminalReporter.pytest_report_header  s    /fo//0> 	YMM.;v+W+WWXXX!2!<<<#)==#=#=IMM/0091E1EFFGGG)>>@@
 	WMM-$))4H4T4T*U*UUVVVrC   c                 D   |                      d           | j        j                            | j        | j        |j                  }|                     |           | j                            d          r|j        rI| j        j        j	        dk    r| j
                            d           |                     |j                   | j                            d          }|r<| j
                            dd           |D ] }|                    | j
                   d S d S d S )	NT)r   r  r?  collectonlyr   r+   !zcollection failures)r  r   rd  pytest_report_collectionfinishr   r?  r  r   r   rg   r   rz   _printcollecteditemsr   r  r6  
toterminal)r@   r  r  r+   rm  s        rB   pytest_collection_finishz)TerminalReporter.pytest_collection_finish+  s0   D!!! ??;~- @ 
 

 	++E222;  // 
	-} 9;%-22HMM"%%%))'-888Z^^H--F -S"7888! - -CNN48,,,,
	- 
	-- -- -rC   c           	         | j                             t          j                  }|dk     r|dk     r`t	          d |D                       }t          |                                          D ]$\  }}| j                            d||fz             %n$|D ]!}| j                            |j	                   "d S g }d}|D ].}|
                                dd          }	|r2||	d t          |                   k    rn|                                 |2|	t          |          d          D ]}
|                    |
           t          |          dz
  dz  }| j                            | |
            |dk    rst          |
dd           }|rt          j        |          nd }|rH|                                D ]3}| j                            d	                    |dz   |                     4Đ0d S )
Nr   r  c              3   X   K   | ]%}|j                             d d          d         V  &dS r	  rI   r   N)r   r  )r  items     rB   	<genexpr>z8TerminalReporter._printcollecteditems.<locals>.<genexpr>E  s9       Q Q4!2!24!;!;A!> Q Q Q Q Q QrC   z%s: %dr   rI     objz{}{})r   r   r   r   r   sortedr?  r   rz   r   	listchainr2  r1  r  rK   inspectgetdoc
splitlinesr  )r@   r?  test_cases_verbositycountsnamerf   r  stackindentneeded_collectorscolr  docrz   s                 rB   r  z%TerminalReporter._printcollecteditemsA  s1   #{889TUU!###b((  Q Q5 Q Q QQQ#)&,,..#9#9 < <KD%HMM(dE]":;;;;< " / /DHMM$+....F 	N 	ND $ 0 0 4 -lE

l;;;		   )U6 	N 	NS!!!e**q.D0...///'1,,!#ud33C14>'.---$C N$'NN$4$4 N ND HMM&--t*L*LMMMM	N	N 	NrC   )wrapper
exitstatus)NNNc              #   `  K   d V }| j                             d           t          j        t          j        t          j        t          j        t          j        f}||v r.| j        s'| j	        j
                            | || j	                   |j        r*|                     dt          |j                  d           |t          j        k    r|                                  d | _        n1|j        r*|                     dt          |j                  d           |                                  |S )Nr   )r   r  r   r  T)r^  )r   rz   r    OKTESTS_FAILEDINTERRUPTEDUSAGE_ERRORNO_TESTS_COLLECTEDrk   r   rd  pytest_terminal_summary
shouldfailr9  rT   _report_keyboardinterruptr   
shouldstopsummary_stats)r@   r  r  r  summary_exit_codess        rB   pytest_sessionfinishz%TerminalReporter.pytest_sessionfinish_  s,      bK!  '
 +++DO+K44!%*T[ 5     	CNN3G$6 7 7TNBBB---**,,,+/D(( 	CNN3G$6 7 7TNBBBrC   c              #     K   |                                   |                                  |                                  |                                  |                                  |                                  	 d V |                                  |                                  S # |                                  |                                  w xY wrO   )summary_errorssummary_failuressummary_xfailuressummary_warningssummary_passessummary_xpassesshort_test_summaryr   s    rB   r  z(TerminalReporter.pytest_terminal_summaryz  s         	$EE##%%%!!#### ##%%%!!####s   <B( (*Cexcinfoc                 <    |                     d          | _        d S )NT)funcargs)getreprr   )r@   r  s     rB   pytest_keyboard_interruptz*TerminalReporter.pytest_keyboard_interrupt  s    '.'E'E$$$rC   c                 @    | j         |                                  d S d S rO   )r   r  r   s    rB   pytest_unconfigurez#TerminalReporter.pytest_unconfigure  s+    '3**,,,,, 43rC   c                 N   | j         }|J |j        J |j        j        }|                     d|           d|v rj| j        j        j        r|                    | j                   d S |j                            | j                   | j        	                    dd           d S d S )Nr  KeyboardInterruptz@(to show a full traceback on KeyboardInterrupt use --full-trace)T)r]  )
r   	reprcrashr   r9  r   r   	fulltracer  r   rz   )r@   rF  r   s      rB   r  z*TerminalReporter._report_keyboardinterrupt  s    .""" ,,,'sC   #%%{!+ ""48,,,,,!,,TX666V       &%rC   r  rM  domainc                 :    dt           dt           f fd}|r| ||          } j        dk    re|                    d          d         |                    dt          j                  k    r(|dt           j        t          |                    z   z  }nd	}|d
z   S )Nr   r;   c                 2   j                             |           }ry|                              rd|d t                              }                    d          }|d                             dd          |d<   |d                    |          z  }|S )N[r   r   r	  )r   cwd_relative_nodeidendswithr2  r  r   r   )r   rz   rF   r  r@   s      rB   mkrelz-TerminalReporter._locationline.<locals>.mkrel  s    ;226::D )$--// )Ns6{{lN+c**"1I--c488q	(((KrC   r_  r	  r   \z <- z
[location]r   )	rT   r   r  r   r   SEPr&   r   r   )r@   r   r  rM  r  r  r  s   `   `  rB   rW  zTerminalReporter._locationline  s    	# 	# 	 	 	 	 	 	 	  	%--C~""v||D'9'9!'<eiA A ( ( vDNDLL I IIICSyrC   c                     |j         }|r|S dS )Nztest session)	head_line)r@   rm  r  s      rB   _getfailureheadlinez$TerminalReporter._getfailureheadline  s    M	 	~rC   c                     	 t          |j        j                  S # t          $ r2 	 t          |j                  d d         cY S # t          $ r Y Y dS w xY ww xY w)N2   r   )rT   longreprr  AttributeError)r@   rm  s     rB   _getcrashlinezTerminalReporter._getcrashline  s}    	s|-... 	 	 	3<(("----!   rrr	s,    
AAA
AAAAr  c                 L    d | j                             |d          D             S )Nc                 2    g | ]}t          |d           |S )	_pdbshown)rf  r  s     rB   r  z/TerminalReporter.getreports.<locals>.<listcomp>  s'    SSSa71k;R;RSSSSrC   ra   r   r  )r@   r  s     rB   
getreportszTerminalReporter.getreports  s&    SS4:>>$33SSSSrC   c                                           d          r j                            d          }|sd S  j        d u}|r| j        d          }n|}t	          |           _        |sd S i }|D ]0}|                    |j        g                               |           1dt          t                   dt          f fd}|rdnd}                     d|d	d
           |                                D ]\  }}	 ||	          }
|
rb j                            |
           |                                }d                    d |D                       }|                                }n|                                } j                            |            j                                          j                            d           d S d S )Nr   r1   reportsr;   c                 ~   g }| D ]3}|                     j                  }|r|                    |           4t          |          dk     r(d                    t          t          |                    S t          d |D                       }d                    d |                                D                       S )N
   r  c              3   h   K   | ]-}t          |                              d d          d         V  .dS r  )rT   r  )r  locs     rB   r  zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>  sL       - -36CHHNN4++A.- - - - - -rC   c              3   Z   K   | ]&\  }}d                      |||dk    rdnd          V  'dS )z{}: {} warning{}rI   r   r   N)r  )r  kvs      rB   r  zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>  sX       ! !1 '--a1q55CCbII! ! ! ! ! !rC   )	r   r   r  r2  r   r   rT   r   r?  )r  	locationsr   rU  counts_by_filenamer@   s        rB   collapsed_location_reportzDTerminalReporter.summary_warnings.<locals>.collapsed_location_report  s    	  3 3A ~~dk::H 3!((222y>>B&&99Si%8%8999%, - -:C- - - & &" yy ! ! 2 8 8 : :! ! !   rC   zwarnings summary (final)zwarnings summaryr:  TF)r]  r  r  c              3       K   | ]	}d |z   V  
dS )r  Nra   r  s     rB   r  z4TerminalReporter.summary_warnings.<locals>.<genexpr>  s&      (A(Aa(A(A(A(A(A(ArC   zG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)r  r   r  r   r2  rA  r   r  r   r   rT   r9  r?  r   rz   r  r   rstrip)r@   all_warningsr
   warning_reportsreports_grouped_by_messagewrr  r7  r   message_reportsmaybe_locationr  indenteds   `            rB   r  z!TerminalReporter.summary_warnings  s   ;;s 3	:>*..:T:TL 4D@E /".t/O/Q/Q"R"./2?/C/CD," IK&% Q Q*55bj"EELLRPPPP43F 3      $ 38O..=OENN3dN???,F,L,L,N,N 
  
 (!:!:?!K!K! /HMM.111#..00E#yy(A(A5(A(A(AAAH&oo//GG%nn..Gg&&&HMMY    c3	 3	rC   c                 4    |                      ddd           d S )Nr,   PASSESPsummary_passes_combinedr   s    rB   r  zTerminalReporter.summary_passes  s     $$Xx=====rC   c                 4    |                      ddd           d S )Nr0   XPASSESXr,  r   s    rB   r  z TerminalReporter.summary_xpasses  s     $$Y	3?????rC   which_reports	sep_title
needed_optc                    | j         j        j        dk    r|                     |          r|                     |          }|sd S |                     d|           |D ]j}|j        rC|                     |          }|                     d|dd           |                     |           | 	                    |j
                   gd S d S d S )Nry   r:  r  T)r\  r  )r   r   ru   r  r  r9  sectionsr	  _outrep_summary_handle_teardown_sectionsr   )r@   r1  r2  r3  r  rm  r   s          rB   r-  z(TerminalReporter.summary_passes_combined  s     ;%--{{:&& 
?,0OOM,J,J FsI..." ? ?C| 2"66s;;sCt$GGG,,S111223:>>>> .-
? 
?
? ?rC   c                 J    |                      d          }fd|D             S )Nr   c                 @    g | ]}|j         d k    |j        k    |S )r   )r   r   )r  r   r   s     rB   r  z:TerminalReporter._get_teardown_reports.<locals>.<listcomp>  s<     
 
 
{j((V]f-D-D -D-D-DrC   )r  )r@   r   r  s    ` rB   _get_teardown_reportsz&TerminalReporter._get_teardown_reports  s?    //"%%
 
 
 
!
 
 
 	
rC   c                 `    |                      |          D ]}|                     |           d S rO   )r:  print_teardown_sections)r@   r   r   s      rB   r7  z*TerminalReporter._handle_teardown_sections   s@    0088 	1 	1F((0000	1 	1rC   rm  c                 
   | j         j        j        }|dk    rd S |j        D ]a\  }}|dk    r||vrd|v rM| j                            d|           |dd          dk    r
|d d         }| j                            |           bd S )Nry   r   r   r  r  r  )r   r   r}   r5  r   r6  rz   r@   rm  r}   secnamer  s        rB   r<  z(TerminalReporter.print_teardown_sections$  s    k(4$F # 	' 	'GWe##7(B(BW$$S'***233<4''%crclGg&&&	' 	'rC   c                 2    |                      dd           d S )Nr+   FAILURESsummary_failures_combinedr   s    rB   r  z!TerminalReporter.summary_failures1  s    &&x<<<<<rC   c                 4    |                      ddd           d S )Nr/   	XFAILURESr  rB  r   s    rB   r  z"TerminalReporter.summary_xfailures4  s     &&y+sCCCCCrC   c                    | j         j        j        dk    r|r|                     |          r|                     |          }|sd S |                     d|           | j         j        j        dk    r1|D ],}|                     |          }|                     |           -d S |D ]c}|                     |          }|                     d|dd           | 	                    |           | 
                    |j                   `d S d S d S )Nry   r:  rz   r  Tr^  r  )r   r   ru   r  r  r9  r  r   r	  r6  r7  r   )r@   r1  r2  r3  r  rm  rz   r   s           rB   rC  z*TerminalReporter.summary_failures_combined7  sG    ;%-- CZ!8!8 C,0OOM,J,J FsI...;%-77& . .#11#66----. .  ' C C"66s;;sCTEEE,,S11166szBBBB .-C CC CrC   c                 t   | j         j        j        dk    r|                     d          }|sd S |                     dd           | j        d         D ]e}|                     |          }|j        dk    rd|z   }nd|j         d| }|                     d	|d
d
           |                     |           dd S d S )Nry   r2   r:  ERRORSr   zERROR collecting z	ERROR at z of r  TrG  )	r   r   ru   r  r9  r   r	  r   r6  )r@   r  rm  r   s       rB   r  zTerminalReporter.summary_errorsK  s    ;%--(,(@(@G NN3)))z'* * *..s338y((-3CC9ch99C99CsCT===$$S)))) .-
* *rC   c                 6   |                     | j                   | j        j        j        }|dk    rd S |j        D ]]\  }}|dk    r||vr| j                            d|           |dd          dk    r
|d d         }| j                            |           ^d S )Nry   r   r  r  r  )r  r   r   r   r}   r5  r6  rz   r>  s        rB   r6  z TerminalReporter._outrep_summaryZ  s    tx   k(4$F # 	# 	#GWe##7(B(BHLLg&&&rss|t##!#2#,HMM'""""	# 	#rC   c                 
   | j         dk     rd S t          j                    | j        z
  }|                                 \  }}g }| j         dk    }|r| j        j        }|D ]Q\  }} | j        j        |fi |}	|r"|t          |	          t          |          z
  z  }|	                    |	           Rd
                    |          }
|di}dt          |           } | j        j        |fi |}|r"|t          |          t          |          z
  z  }|
|z  }
|rH | j        j        di |}|                    d          r
|d d         }|t          |          z  }|
|z  }
|r | j        d	|
fd
|i| d S  | j        |
fi | d S )Nr  r   r  Tz in r   z[0mr:  r   r   )r   r   r  r  build_summary_stats_liner   r   r  r2  r  r   format_session_durationr  r9  r   )r@   session_durationpartsr  
line_partsdisplay_sepr   textr  with_markupr   main_markupdurationduration_with_markupmarkup_for_end_seps                  rB   r  zTerminalReporter.summary_statsg  s   >BF!;==4+AA";;==

n) 	+*I! 	+ 	+LD&)$(/$99&99K :S--D		99	k****ii
##!4(E12BCCEE.txxGG;GG 	C122S]]BBI## 	&!0!C!C{!C!C!**955 =%7%<"/000I%%C 	0DN3HHyHKHHHHHDOC//;/////rC   c           	      .     j         sd S dt          t                   dt          dd f fd}dt          t                   dd f fd}dt          t                   dd f fd}dt          t                   dd f fd}||t          |d	          |t          |d
	          t          |d	          d}g } j         D ]$}|                    |          }|r ||           %|r3                     dddd           |D ]}	                     |	           d S d S )Nr  statr;   c                    j                             |g           }|sd S j        }|D ]P}t                              |t                    }t          ||j        |di          }|                     |           Qd S )NT)r   r  r   _color_for_type_color_for_type_default _get_line_with_reprcrash_messager   r  )r  r[  r+   r   rm  r   rz   r@   s          rB   show_simplez8TerminalReporter.short_test_summary.<locals>.show_simple  s    Z^^D"--F [F # #'++D2IJJ7CE4=  T""""# #rC   c                 f   j                             dg           }|D ]}|                    j                  } j        j        |fi t          d         di}t          j        j        |          }| d| }|j        }|r|dt          |          z   z  }| 
                    |           d S )Nr/   r1   Tr    - r   r  _get_verbose_wordr   r   r  r]  _get_node_id_with_markupr[  rT   r  )	r  r/   rm  verbose_wordmarkup_wordr   rz   rp  r@   s	           rB   show_xfailedz9TerminalReporter.short_test_summary.<locals>.show_xfailed  s    jnnY33G # #"44T[AA-dho  %4Z%@$$G  2$(DKMM%0000 0ECKK//DT""""# #rC   c                 f   j                             dg           }|D ]}|                    j                  } j        j        |fi t          d         di}t          j        j        |          }| d| }|j        }|r|dt          |          z   z  }| 
                    |           d S )Nr0   r1   Tr   rb  rc  )	r  r0   rm  rf  rg  r   rz   rp  r@   s	           rB   show_xpassedz9TerminalReporter.short_test_summary.<locals>.show_xpassed  s    jnnY33G 
# 
#"44T[AA-dho  %4Z%@$$G  2$(DKMM%0000 0ECKK//DT""""
# 
#rC   c           	         
j                             dg           }|rt          
j        |          ng }|sd S |d                             
j                  } 
j        j        |fi t          d         di}d}|D ]o\  }}}}	|		                    |          r|	t          |          d          }	||                     d|||||	fz             S|                     d||||	fz             pd S )Nr-   r   r1   T	Skipped: z%s [%d] %s:%d: %sz%s [%d] %s: %s)r   r  _folded_skipsr   rd  r   r   r  r]  
startswithr2  r  )r  r-   fskipsrf  rg  r  numr  rM  rp  r@   s             rB   show_skippedz9TerminalReporter.short_test_summary.<locals>.show_skipped  s:   +/:>>)R+H+HG?FN]4>7;;;BF "1:77DDL)$(/ !0!<d C K !F/5 X X+VVV$$V,, 3#CKKMM2F%LL+{CQW.XX    LL!1[#vv4V!VWWWWX XrC   r+   )r[  r,   r2   )r  r0  fr   pr   r:  zshort test summary infoT)rb  r  )rn   r   rT   r   r  r9  r   )
r@   r`  rh  rj  rq  REPORTCHAR_ACTIONSr  r   rh   rz   s
   `         rB   r  z#TerminalReporter.short_test_summary  s    	F
	#tCy 
	#3 
	#4 
	# 
	# 
	# 
	# 
	# 
	#	#S	 	#d 	# 	# 	# 	# 	# 	#	#S	 	#d 	# 	# 	# 	# 	# 	#	XS	 	Xd 	X 	X 	X 	X 	X 	X* 844484447333I
 I
 $ 	 	D'++D11F u 	&NN3 94NPPP & &%%%%	& 	&& &rC   c                     | j         | j        | j        r&|                                  | j         sJ | j        sJ | j         | j        fS rO   )r   r   rv  rC  r   s    rB   r{  z TerminalReporter._get_main_color  s\    #t'8'@DDV'@  """####$$$$!222rC   unknown_type_seenc                 d    | j         }d|v sd|v rd}nd|v sd|v s|rd}nd|v s| j        sd}nd}|S )	Nr+   r2   r^  r1   r0   r]  r,   r\  )r   rv  )r@   rv  r   r  s       rB   _determine_main_colorz&TerminalReporter._determine_main_color  sl    
u5 0 0JJ5  I$6$6:K$6!JJd&8 JJ!JrC   c                     g }| j         D ]&}|r"|t          vr||vr|                    |           't          t                    |z   | _        |                     t          |                    | _        d S rO   )r   KNOWN_TYPESr  listr   rx  rV   r   )r@   unknown_types
found_types      rB   rC  z TerminalReporter._set_main_color  s    #%* 	5 	5J 5[00Z}5T5T!((444 --=55d=6I6IJJrC   c                     | j                             d          r|                                 S |                                 S )a  
        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    rB   rN  z)TerminalReporter.build_summary_stats_line  s@    ( ;  // 	;>>@@@88:::rC   keyc                 P    | j                             |g           }d |D             S )zRGet test/collection reports for the given status key, such as `passed` or `error`.c                 4    g | ]}t          |d d          |S )r   T)rK   r  s     rB   r  z<TerminalReporter._get_reports_to_display.<locals>.<listcomp>  s*    PPPaga1H$&O&OPPPPrC   r  )r@   r  r  s      rB   _get_reports_to_displayz(TerminalReporter._get_reports_to_display  s+    *..b))PP7PPPPrC   c                 R   |                                  \  }}g }|D ]z}|                     |          }|rat          |          }t                              |t
                    }|dd||k    i}|                    dt          ||          z  |f           {|sdt
          difg}||fS )NTr  %d %szno tests ran)r{  r  r2  r]  r  r^  r  	pluralize)	r@   r  known_typesrQ  r  r  rf   r   r  s	            rB   r  z1TerminalReporter._build_normal_summary_stats_line  s     #'"6"6"8"8
K 	H 	HC22377G HG'++C1HIIvu
/BCg	%(=(==vFGGG 	H$'>&EFGEj  rC   c                    t          |                     d                    }t          |                     d                    }| j        dk    r
dddifg}d}na|dk    r"d}dt          | j        d	          z  }||difg}n9| j        |k    }|r	d}d
| d}nd}| j        |z
  }| d| j         d| d}||difg}|r(t          d         }|dt          |d          z  |difgz  }||fS )Nr.   r2   r   zno tests collectedr]  Tr\  z%d %s collectedtestzno tests collected (z deselected)ry  z tests collected (r  )r2  r  r   r  r]  )r@   r.   r,  rQ  r  collected_outputall_tests_were_deselectedr  s           rB   r  z7TerminalReporter._build_collect_only_summary_stats_line.  sW    55lCCDD
T11'::;;""*Xt,<=>E!JJ1__ J09T=OQW3X3XX&T(:;<EE(,(:j(H%( p%
#R*#R#R#R  $
-
:&.#o#o1C#o#oWa#o#o#o &T(:;<E 	R(1Jw67!;!;;j$=OPQQEj  rC   rO   rM  )r;   N)NN)r:  )F)r  r*   r;   N)frP   rQ   rR   r   r   r   r?   r   r   propertyr   r   rV   r   rj   rk   r   setterr  rT   r  r  r  r  r(  r  r
  r   bytesr   r5  r9  r=  rz   r   r   rE  r   rH  r1   WarningMessagerO  r   rR  r#   rT  r   rX  r)   rs  rv  r  rl  r  r|  r  r(   r  r  r!   r  r  r   r  r  r  r    r   r  r  r   BaseExceptionr  r  r  rW  r	  r  r  r  r  r  r-  r:  r7  r<  r  r  rC  r  r'   r6  r  r  r{  rx  rC  r	   rN  r  r  r  ra   rC   rB   r   r   _  sZ       E Ev EXf-= E E E E E4w7Q/R    * 3    X #D # # # X# 24 2 2 2 X2 3D 3 3 3 X3  D       X 
 ! !4 ! ! ! ! J$ J J J XJ(3 (4 ( ( ( (	2# 	2d 	2t 	2 	2 	2 	2$ $# $c $T $ $ $ $& & & & 7 7 77 	7
 7 7 7 
7 7 7 7, 49 7 7 7S 7D 7D 7T 7 7 7 7   &uS%Z0 &D &T & & & &5C 54 5D 5 5 5 5*  $#'	6 66 }6 C=	6
 6 
6 6 6 6' 'S 's ' ' ' ' ' '! !4 !D ! ! ! !#3 #x} # # # # #M d    
6!06 6 
	6 6 6 6!} ! ! ! ! !-x~ -$ - - - -%*3s+B%C	   Bz Bd B B B BH Tt T T T XTEs Et E E E E03    "A A A A . . . . X.A A A A"= "T " " " "#" #"D #"T #" #" #" #"J Xd7 7 7 74*eC#$678*	* * * *6 d3i    - - - -,N(4. NT N N N N< Xd .3CM.B	#	$   4 Xd$3C)D $ $ $ $F}1M FRV F F F F- - - -    #&08GJ	   .    Ts T T T T4 4 4 4l> > > >@ @ @ @? ?-0?>A?	? ? ? ? 
C 
D4D 
 
 
 
1 1 1 1 1 1': '$ ' ' ' '= = = =D D D D OSC C C-0C>FsmC	C C C C(* * * *#: #$ # # # ##0 #0 #0 #0JS& S& S& S&j3sDI~!6 3 3 3 3
t 
 
 
 
 
K K K K;%U3S$Y;O5P0QSV0V*W ; ; ; ;2Q3 Q49 Q Q Q Q
!	tE#tCI./0#5	6! ! ! !&!	tE#tCI./0#5	6! ! ! ! ! !rC   r   twrm  c                     |                     |j                  }|                    d          ^}}|r2|                     d                    |          d          }|dz   |z   S |S )Nr	  Tr  )r  r   r  r  r   )r  r   rm  r   pathrQ  parts_markups          rB   re  re  O  si    ''
33F<<%%LD5 yy5!1!1y==d{\))rC   r  r   rq  c                    |                     d          }|dk    r
|d|         }d}t          |                     d                    }|t          |          z   |k    rdS |t          |          z   |k    rW|t          |          z  }|d|         }|t          |          z   |k    r |dd         }|t          |          z   |k     ||z  }|                     |          S )zFormat 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  r2  )r  r   rq  iellipsisformat_widths         rB   ri  ri  Y  s     	ABww"1"gHFMM"--..Lc(mm#o55thsmm#o553x==("?"#Xc]]*_<<crc(C Xc]]*_<<x==rC   word_markupc                 l   |                     |           } |j        |fi |}t          || |          }| d| }t          |          }	 |j        j        j        }	t                      s| j        j	        dk    rd|	 }	n|j
        |z
  }
t          d|	|
          }	|	||	z  }n# t          $ r Y nw xY w|S )z?Get summary line for a report, trying to add reprcrash message.r   r_  rb  z - {})rd  r  re  r   r  r  r   r   r   rg   r   ri  r  )r   rm  r  r  rf  r_   rZ  rz   
line_widthr   rq  s              rB   r_  r_  r  s     ((00L29\11[11D#B44DTD$Jl$, ?? 	Afm3q88++CC lZ7O!'3@@C?CKD     Ks   B$ $
B10B1r   r-   c                 R   i }|D ]}|j         J t          |j         t                    sJ ||j         f            t          |j                   dk    sJ ||j         f            |j         \  }}}t	          | t          |                    }t          |di           }|j        dk    rd|v r
d|vr|d |f}n|||f}|                    |g           	                    |           g }	|
                                D ]+\  }}
|		                    t          |
          g|R            ,|	S )Nr  keywordsr   skip
pytestmark)r  r-  re  r2  r&   r   rK   r   rA  r  r?  )r   r-   deventr  rM  rp  r  r  rF   eventss              rB   rm  rm    s\    DFA , ,~)))%.%00II5%.2IIII5>""a'''%)@'''!&YV555*b11
 J'!!(""H,,3942HCC66*C	S"$$U++++8:Fwwyy + +Vs6{{)S))****MrC   r^  r]  r\  )r+   r2   r1   r,   rf   nounc                 \    |dvr| |fS |                     dd          }| | dk    r|dz   n|fS )N)r2   r1   r  r1   warningrI   r   )r   )rf   r  s     rB   r  r    sH    000d{
 <<
I..D

$**44rC   c                     g }| D ]N\  }}|j          d|j         }|                    d          r
|dd          }||vr|                    |           O|S )Nr  zpytest-   )project_namer  rn  r  )r  rF   rP  distr  s        rB   r  r    sv    F"    #44dl44??9%% 	8DvMM$MrC   secondsc                 p    | dk     r| ddS t          j        t          |                     }| dd| dS )zQFormat the given seconds in a human readable manner to show in the final summary.<   z.2fr   )r  zs (ra  )datetime	timedeltar   )r  dts     rB   rO  rO    sP    ||     G555'''"''''rC   c                 Z   t          | d          r5| j        }|                    d          r|t          d          d         }|S | j        sJ t          | j        t                    sJ | j        \  }}}|                    d          r|t          d          d         }n|dk    rd}|S )zqGet the reason string of a skip/xfail/xpass test report.

    The string is just the part given by the user.
    r[  zreason: Nrl  Skippedr   )rf  r[  rn  r2  r-   r-  r  re  )r   rp  r  s      rB   rh  rh    s    
 vz"" Z(( 	/C
OO--.F~&/5111111f[)) 	C,,../FFy  FrC   )^rS   rW   collectionsr   dataclassesr  	functoolsr   r  pathlibr   r  r   r%  typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r1   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  rz  r   Actionr5   r\   r   r   rT   r   r   	dataclassr   r   re  r   ri  rV   r_  rm  r]  r^  r  r  floatrO  rh  ra   rC   rB   <module>r     s   
                           



                                                                                                                            ' ' ' ' ' ' , , , , , , & & & & & & ( ( ( ( ( (     0 0 0 0 0 0 ( ( ( ( ( ( ! ! ! ! ! ! # # # # # # # # # # # # , , , , , ,             ( ( ( ( ( ( ' ' ' ' ' ' & & & & & & ) ) ) ) ) ) & & & & & &  %$$$$$$  # 	  "= "= "= "= "=ho "= "= "=J5 5 5 5 5 5 5 5(AV A A A A AH	BV 	B 	B 	B 	B 	B C    2 
$,Z ,E#sC-4H , , , ,        8 l! l! l! l! l! l! l! l!^  j    C c C HSM    2#)7FJ3PT9o   8m$ 
%S(3-,
-.   @ 	  # 
5S 
5 
5c3h 
5 
5 
5 
5S	    (U (s ( ( ( (       rC   