
    	h                        d Z ddlZddlZddlZddlZddlZddlZddlZddl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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-m.Z. ddl/m0Z0 ddl1m2Z2 ddl1m3Z3 dd l1m4Z4 dd!l1m5Z5 dd"l6m7Z7 dd#l8m9Z9 dd$l8m:Z: dd%l;m<Z< dd&l;m=Z= dd'l>m?Z? dd(l>m@Z@ dd)l>mAZA erdd*lBmCZC dd+lDmEZE d,ZFd-ZGd.ZH G d/ d0ejI                  ZJ G d1 d2e          ZKd3e7d4dfd5ZLd6e3d4dfd7ZMd6e3d4eNfd8ZO e5d9:          d;e?d4eeNeNeNf         fd<            ZPejQ         G d= d>                      ZRe0 G d? d@                      ZSdAe*d6e3dBe?fdCZTdDeNdEeNdFeUd4eeN         fdGZVd6e3dBe?dAe*dHeeNeWf         d4eNf
dIZXdJedKee@         d4eeeUeNeeU         eNf                  fdLZYdMdMdNdOdPZZdNZ[dQeUdReNd4eeUeNf         fdSZ\d4eeN         fdTZ]dUe^d4eNfdVZ_d;eAd4eNfdWZ`dS )XzsTerminal reporting of the full testing process.

This is a good source for looking at the various reporting hooks.
    N)Counter)partial)Path)Any)Callable)cast)ClassVar)Dict)	Generator)List)Mapping)
NamedTuple)Optional)Sequence)Set)TextIO)Tuple)TYPE_CHECKING)Union)nodes)timing)ExceptionInfo)ExceptionRepr)TerminalWriter)wcswidth)running_on_ci)final)_PluggyPlugin)Config)ExitCode)hookimpl)Parser)Item)Node)absolutepath)bestrelpath)
BaseReport)CollectReport)
TestReport)Literal)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   )r7   r8   nargsr9   r:   r;   )super__init__)selfr7   r8   r9   r:   r;   	__class__s         ]/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/_pytest/terminal.pyr@   zMoreQuietAction.__init__V   sB     	) 	 	
 	
 	
 	
 	
    parser	namespacevaluesoption_stringc                     t          || j        d          dz
  }t          || j        |           t          |dd          dz   |_        d S )Nr      quiet)getattrr8   setattrrK   )rA   rE   rF   rG   rH   	new_counts         rC   __call__zMoreQuietAction.__call__g   sL     Ity!44q8		49i000!)Wa881<	rD   )NFNN)__name__
__module____qualname____doc__r   strobjectboolr   r@   argparseArgumentParser	Namespacer   rO   __classcell__)rB   s   @rC   r6   r6   O   s         "
 
 
 
 	

 
 sm
 

 
 
 
 
 
, (,
= 
='
= %
= c8F+T12	
=
  }
= 

= 
= 
= 
= 
= 
= 
= 
=rD   r6   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)
rQ   rR   rS   rT   rU   __annotations__r   r   r   rW    rD   rC   r]   r]   t   sY           MMMKKK
U3T	 2233
444444rD   r]   rE   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           d S )LNzterminal reporting	Reportinggeneral)afterz-vz	--verbosecountr   verbosezIncrease verbosity)actionr9   r8   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.)r8   typer9   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').)ri   r8   r9   metavarr;   z--disable-warningsz--disable-pytest-warningsdisable_warningszDisable warnings summary)r9   r8   ri   r;   z-lz--showlocals
showlocalsz/Show locals in tracebacks (disabled by default))ri   r8   r9   r;   z--no-showlocalsstore_falsezFHide locals in tracebacks (negate --showlocals passed through addopts))ri   r8   r;   z--tbstyletbstyleauto)rw   longshortnolinenativez5Traceback print mode (auto/long/short/line/native/no))rq   ri   r8   r9   choicesr;   z--show-captureshowcapture)rz   stdoutstderrlogallr   zOControls how captured stdout/stderr/log is shown on failed tests. Default: all.)ri   r8   r}   r9   r;   z--fulltracez--full-tracez,Don't cut any tracebacks (default is to cut))ri   r9   r;   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.)r9   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;   r9   )getgroup
_addoptionr6   int_REPORTCHARS_DEFAULTaddini)rE   groups     rC   pytest_addoptionr      s   OO0+YOOOE	!     
     
     
!     
)     
$>     
#'     
>     
U	     
AAAD     
888     
;     
%%%2     
	     MM)       rD   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maprU   
write_line)tagsargsmsgreporters      rC   mywriterz"pytest_configure.<locals>.mywriter	  s<    ((3sD>>**C 03 677777rD   zpytest:config)TerminalReportersysr   pluginmanagerregisteroptiondebugtraceconfigtracerootsetprocessor)r   r   r   s     @rC   pytest_configurer     s    
33H
!!(,>???} Bfm7 B	8 	8 	8 	8 	8 	&&AAAAAB BrD   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   ro   lowerrr   replace)r   ro   old_aliases
reportoptschars        rC   getreportoptr     s    }0K*KJ 
 
;::<<D3;; JJS[["JJS[[JJ##$J=) 1c.C.C:%

		' 1C:,=,=''R00
rD   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,   r3   E)r-   r.   outcomewhenupper)r   r_   r   s      rC   pytest_report_teststatusr   )  se    F} 	 >G{6667h;N;NFGMMOO++rD   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%   )rA   r   filenamelinenumrelpaths        rC   get_locationzWarningReport.get_locationK  s`    ; 	;? 	* $Hg!&":">X@V@VWWG)))))trD   )rQ   rR   rS   rT   rU   ra   r   r   r   r   r   r   r	   r   r   rb   rD   rC   r   r   9  s           LLL FHSM   ,0JsCx)000&*8***6 hsm      rD   r   c                      e Zd Zdxdedee         ddfdZdyd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dzdededdfdZd{d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d{d%Zd&eeef         deddfd'Zd&ededdfd(Z	 	 d|d)ed*ee         d+ee	         deddf
d,Zd}d*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>e/ddfd?Z0edefd@            Z1deddfdAZ2defdBZ3d{dCZ4ede	fdD            Z5d{dEZ6d>e7ddfdFZ8d~dGeddfdHZ9 e:dIJ          ddM            Z;dNe!eee!e         f                  ddfdOZ<dede=e         fdPZ>ddQZ?d3e!e+         ddfdRZ@ e:dIS          dKdLdTee	eAf         fdU            ZB e:dIS          deCdV         fdW            ZDdXeEeF         ddfdYZGd{dZZHd{d[ZIded\ed]ee	         d^edef
d_ZJd` ZKda ZLdbefdcZMd{ddZNd{deZOdede=e/         fdfZPdeddfdgZQdhe/ddfdiZRd{djZSd{dkZTdheUddfdlZVd{dmZWd{dnZXde-ee=e         f         fdoZYdpedefdqZZd{drZ[de-e=e-ee\eef         f                  ef         fdsZ]dtede=e"         fduZ^de-e=e-ee\eef         f                  ef         fdvZ_de-e=e-ee\eef         f                  ef         fdwZ`d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   ro   	hasmarkupisattyset_progress_nodeids_reported_determine_show_progress_info_show_progress_info_collect_report_last_write_already_displayed_warnings_keyboardinterrupt_memo)rA   r   r   _pytests       rC   r@   zTerminalReporter.__init__X  s    +/+/+-
*.1515<:D>88FF!X/:>'//+kkmm47EE'#'#E#E#G#G ;?':>(@D$$$rD   #Literal['progress', 'count', False]c                    | j                             dd          dk    r | j                             d          dk    rdS | j                             dd          rdS | j                             d          }|dk    s|dk    rdS |dk    rdS dS )	zRReturn whether we should display progress information based on the current config.capturerz   r   zprogress-even-when-capture-noF	setupshowr   rg   )r   	getoptiongetini)rA   cfgs     rC   r   z.TerminalReporter._determine_show_progress_infor  s    
 K!!)T22d::""#9::./ / 5;  e44 	5;%%&<==*'F F F:G^^75rD   c                 (    | j         j        j        }|S rP   )r   r   rh   )rA   	verbositys     rC   r   zTerminalReporter.verbosity  s    +3	rD   c                     | j         dk    S r   r   rA   s    rC   
showheaderzTerminalReporter.showheader  s    ~""rD   c                 >    t          | j        j        j                  S rP   )rW   r   r   rk   r   s    rC   rk   zTerminalReporter.no_header  s    DK&0111rD   c                 >    t          | j        j        j                  S rP   )rW   r   r   rl   r   s    rC   rl   zTerminalReporter.no_summary  s    DK&1222rD   c                 4    | j         | j        dk    S | j         S r   )r   r   r   s    rC   
showfspathzTerminalReporter.showfspath  s!    #>Q&&rD   valuec                     || _         d S rP   )r   )rA   r   s     rC   r   zTerminalReporter.showfspath  s     rD   c                     | j         dk    S r   r   r   s    rC   showlongtestinfoz!TerminalReporter.showlongtestinfo  s    ~!!rD   r   c                 F    ddd                     ||          }|| j        v S )Nxr   )r0   r.   )getro   )rA   r   s     rC   hasoptzTerminalReporter.hasopt  s-    3//33D$??t'''rD   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   r{   write)rA   r   resr  fspath	relfspaths         rC   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1rD   r   prefixextrac                     | j         |k    r:| j                                         || _         | j                            |           |r | j        j        |fi | d| _         d S d S )N)r   r   r{   r  )rA   r  r  kwargss       rC   write_ensure_prefixz$TerminalReporter.write_ensure_prefix  sw    ''HMMOOO!'DHNN6""" 	$DHN5++F+++!#D	$ 	$rD   c                 X    | j         r"| j                                         d | _         d S d S rP   )r   r   r{   r   s    rC   ensure_newlinezTerminalReporter.ensure_newline  s4     	&HMMOOO!%D	& 	&rD   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  )rA   r  r	  r  r  r  r#  wrappeds           rC   
wrap_writezTerminalReporter.wrap_write  s     !% >--M++g5(61 $#(	  
 
 /001w66e6v66666rD   )r	  c                0     | j         j        |fd|i| d S )Nr	  )r   r  )rA   r  r	  r  s       rC   r  zTerminalReporter.write  s)    w66e6v66666rD   c                 8    | j                                          d S rP   )r   r	  r   s    rC   r	  zTerminalReporter.flush  s    rD   r{   c                     t          |t                    st          |d          }|                                   | j        j        |fi | d S )Nr   )errors)
isinstancerU   r  r   r{   )rA   r{   r  s      rC   r   zTerminalReporter.write_line  sZ    $$$ 	/tI...Dd%%f%%%%%rD   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.
        eraseFrJ   r   r   N)popr   r   lenrU   r  )rA   r{   r  r.  
fill_countfills         rC   rewritezTerminalReporter.rewrite  s     

7E** 	+c$ii7!;J#DDD4yytd{T)44V44444rD   septitler   c                 X    |                                    | j        j        |||fi | d S rP   )r  r   r5  )rA   r5  r6  r   r  s        rC   	write_sepzTerminalReporter.write_sep  s<     	S%55f55555rD   =kwc                 .     | j         j        ||fi | d S rP   )r   r5  )rA   r6  r5  r:  s       rC   sectionzTerminalReporter.section  s&    S%&&2&&&&&rD   r   c                 ,     | j         j        |fi | d S rP   )r   r{   )rA   r   r:  s      rC   r{   zTerminalReporter.line  s$    c  R     rD   r^   itemsc                     || j         v}| j                             |g                               |           |r|                                  d S d S rP   )r   
setdefaultextend_set_main_color)rA   r^   r>  set_main_colors       rC   
_add_statszTerminalReporter._add_stats  s^    !3
h++225999 	#  """""	# 	#rD   excreprc                     t          |                              d          D ]}|                     d|z              dS )Nr  zINTERNALERROR> T)rU   r  r   )rA   rE  r{   s      rC   pytest_internalerrorz%TerminalReporter.pytest_internalerror  sE    LL&&t,, 	6 	6DOO-45555trD   warning_messagec                     ddl m} |j        |j        f} ||          }t	          |||          }|                     d|g           d S )Nr   )warning_record_to_str)r   r   r   r2   )_pytest.warningsrJ  r   linenor   rD  )rA   rH  r   rJ  r   r   warning_reports          rC   pytest_warning_recordedz(TerminalReporter.pytest_warning_recorded  sp    
 	;:::::$-/EE
''88&!76
 
 
 	
^$455555rD   pluginc                 `    | j         j        j        rd| }|                     |           d S d S )NzPLUGIN registered: )r   r   r   r   )rA   rO  r   s      rC   pytest_plugin_registeredz)TerminalReporter.pytest_plugin_registered!  sC    ;) 	!000C OOC     	! 	!rD   c                 2    |                      d|           d S )Nr/   )rD  )rA   r>  s     rC   pytest_deselectedz"TerminalReporter.pytest_deselected)  s    e,,,,,rD   locationc                     | j         r: | j        |g|R  }|                     |d           |                                  d S | j        r,|                     |d           |                                  d S d S )Nr   )r  _locationliner  r	  r   r  )rA   r   rT  r{   s       rC   pytest_runtest_logstartz(TerminalReporter.pytest_runtest_logstart,  s    
   	%4%f8x888D$$T2...JJLLLLL_ 	$$VR000JJLLLLL	 	rD   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        dk    r | j        j        |fi | n| j                            |j                    | j        |j        g|j        R  }
|s | j        |
|fi | |j        st          |d          rt1          |          }| j        j        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%]rJ   z ({})z ()z[%s]r   )cyanr  ))
_tests_ranr]   r   hookr   r^   r_   r`   r,  tuplerD  hasattrr-   r,   r.   r   r   r  r   addr   rV  rT  r  _get_raw_skip_reasonr   rh   r   r#  r1  _format_trimmedr'  r   r  r  rY  gatewayid!_get_progress_information_messager   r	  )rA   r   repr  r^   r_   r`   r  running_xdist	was_xfailr{   reasonavailable_widthformatted_reasons                 rC   pytest_runtest_logreportz)TerminalReporter.pytest_runtest_logreport9  sW    [66c$+6VV
 "%sz38$&$&& 	 FFLD&3%((( 	d 	FV,,>
33Iz 	) 	!4 	 "D)  "D)>QDHN6,,V,,,,+//
;;;%4%cj@3<@@@D  (((t>>v>>>; :'&*"="= :1#66F{)1A55!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***%'"

rD   c                 X    | j         J t          | j                  | j         j        k    S rP   )r   r1  r   testscollectedr   s    rC   _is_last_itemzTerminalReporter._is_last_item}  s+    }(((4233t}7SSSrD   c                    | j         sJ | 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   rg    [/]r_  rJ   r  T)r   r   r   rt  r1  r   rf  ru  r  _get_main_color_width_of_current_liner   rk  r   r  )	rA   r   	num_testsprogress_length
main_color_r   	past_edger   s	            rC   pytest_runtest_logfinishz)TerminalReporter.pytest_runtest_logfinish  s8   }}>Q4#;'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# E ErD   c                 Z   | 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            S dS )Nrg   z{:zd}rw  z/{}]z [ z / z ]z	 [{:3d}%]d   r_  )r   rt  r   r   r1  rU   format)rA   	collectedr   counter_formatformat_strings        rC   rk  z2TerminalReporter._get_progress_information_message  s    }}M0	#w.. F:!?s3y>>':':!?!?!? ;^ ; ; ;$++CMM9EEE444y4444 "))7883>)K   9rD   c                     |                                  \  }}|                                 }| j        }| j        j        |z
  dz
  } | j        |                    |          fddi|di d S )NrJ   r	  T)rz  rk  r{  r   r   r  rjust)rA   r   r  r   r   r3  s         rC   r  z:TerminalReporter._write_progress_information_filling_space  sw    ''))q4466'x!A%)
399T??@@$@5$-@@@@@rD   c                     | j         j        S )z%Return the width of the current line.)r   r#  r   s    rC   r{  z'TerminalReporter._width_of_current_line  s     x--rD   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	  boldrJ   )r   r   r   rh   r  r   timer   r   s    rC   pytest_collectionz"TerminalReporter.pytest_collection  s    ; 	A{!)Q..

,Dt
DDD28+--/// /. ['1,,JJ(4J@@@@@ -,rD   c                    |j         r|                     d|g           n|j        r|                     d|g           d |j        D             }| xj        t          |          z  c_        | j        r|                                  d S d S )Nr3   r.   c                 <    g | ]}t          |t                    |S rb   )r,  r#   .0r  s     rC   
<listcomp>z9TerminalReporter.pytest_collectreport.<locals>.<listcomp>  s'    AAAqZ4-@-@AAAArD   )r,   rD  r.   resultr   r1  r   report_collect)rA   r   r>  s      rC   pytest_collectreportz%TerminalReporter.pytest_collectreport  s    = 	1OOGfX....^ 	1OOIx000AAFMAAAc%jj(; 	"!!!!!	" 	"rD   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   r3   r.   r/   z
collected zcollecting z itemrJ   r   r   z / %d error%sz / %d deselectedz / %d skippedz / %d selectedT)r  r.  r  )r   r   rh   r   r  r   REPORT_COLLECTING_RESOLUTIONr1  r   r  r   rU   r   r4  r  r   )rA   r   tr+  r.   r/   selectedr{   s           rC   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!!!!!rD   Tr   sessionr+   c                 R   || _         t          j                    | _        | j        sd S |                     ddd           t          j                    }| j        sKdt          j         d| }t          t          dd           }|rBd                    t          t          |d d	                             }|d
| d|d	          dz  }|d                    t          j        j        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 )Nr9  ztest session startsTr  z	platform z -- Python pypy_version_infor      z[pypy--ry  z, pytest-{}, pluggy-{}r   pastebinz -- )r   
start_path)r   r   r  _sessionstarttimer   r8  platformpython_versionrk   r   rL   r   r   rU   r  r   _versionversionpluggy__version__r   r   r   r   
executabler   rc  pytest_report_headerr   _write_report_lines_from_hooks)rA   r  verinfor   r  liness         rC   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+22 (&*<  C "";%+ #4;-z4@@ # vCN 3 333OOC   K$99{t~ :  E //66666'	7 	7rD   r  c                     t          |          D ]G}t          |t                    r|                     |           -|D ]}|                     |           Hd S rP   )reversedr,  rU   r   )rA   r  line_or_linesr{   s       rC   r  z/TerminalReporter._write_report_lines_from_hooks  ss     &e__ 	* 	*M--- *....) * *DOOD))))*		* 	*rD   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)rA   r   r  r  
plugininfos        rC   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rD   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   rc  pytest_report_collectionfinishr   r>  r  r   r   rh   r   r{   _printcollecteditemsr   r  r5  
toterminal)rA   r  r  r,   rl  s        rC   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,,,,
	- 
	-- -- -rD   c           	         | j         j        j        dk     r| j         j        j        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                            | |	            | j         j        j        dk    rst          |	dd           }
|
rt          j        |
          nd }|rH|                                D ]3}| j                            d	                    |dz   |                     4Ӑ?d S )
Nr   r  c              3   X   K   | ]%}|j                             d d          d         V  &dS r  rJ   r   N)r   r  )r  items     rC   	<genexpr>z8TerminalReporter._printcollecteditems.<locals>.<genexpr>:  s9       Q Q4!2!24!;!;A!> Q Q Q Q Q QrD   z%s: %dr   rJ     objz{}{})r   r   rh   r   sortedr>  r   r{   r   	listchainr1  r0  r  rL   inspectgetdoc
splitlinesr  )rA   r>  countsnamerg   r  stackindentneeded_collectorscolr  docr{   s                rC   r  z%TerminalReporter._printcollecteditems7  s0   ;%)){!)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...///;%-22!#ud33C14>'.---$C N$'NN$4$4 N ND HMM&--t*L*LMMMM	N	N 	NrD   )hookwrapper
exitstatusc              #     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           |                                  d S )Nr   )r   r  r   r  T)r]  )
get_resultr   r{   r    OKTESTS_FAILEDINTERRUPTEDUSAGE_ERRORNO_TESTS_COLLECTEDrl   r   rc  pytest_terminal_summary
shouldfailr8  rU   _report_keyboardinterruptr   
shouldstopsummary_stats)rA   r  r  r   summary_exit_codess        rC   pytest_sessionfinishz%TerminalReporter.pytest_sessionfinishT  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rD   )NNNc              #     K   |                                   |                                  |                                  |                                  d V  |                                  |                                  d S rP   )summary_errorssummary_failuressummary_warningssummary_passesshort_test_summaryr   s    rC   r  z(TerminalReporter.pytest_terminal_summaryo  s      !!!rD   excinfoc                 <    |                     d          | _        d S )NT)funcargs)getreprr   )rA   r  s     rC   pytest_keyboard_interruptz*TerminalReporter.pytest_keyboard_interruptz  s    '.'E'E$$$rD   c                 @    | j         |                                  d S d S rP   )r   r  r   s    rC   pytest_unconfigurez#TerminalReporter.pytest_unconfigure}  s+    '3**,,,,, 43rD   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   r8  r   r   	fulltracer  r   r{   )rA   rE  r   s      rC   r  z*TerminalReporter._report_keyboardinterrupt  s    .""" ,,,'sC   #%%{!+ ""48,,,,,!,,TX666V       &%rD   r  rL  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endswithr1  r  r   r   )r   r{   rG   r  rA   s      rC   mkrelz-TerminalReporter._locationline.<locals>.mkrel  s    ;226::D )$--// )Ns6{{lN+c**"1I--c488q	(((KrD   r^  r  r   \z <- z
[location]r   )	rU   r   r  r   r   SEPr&   r   r   )rA   r   r  rL  r  r   r  s   `   `  rC   rV  zTerminalReporter._locationline  s    	# 	# 	 	 	 	 	 	 	  	%--C~""v||D'9'9!'<eiA A ( ( vDNDLL I IIICSyrD   c                     |j         }|r|S dS )Nztest session)	head_line)rA   rl  r  s      rC   _getfailureheadlinez$TerminalReporter._getfailureheadline  s    M	 	~rD   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   )rU   longreprr  AttributeError)rA   rl  s     rC   _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)re  r  s     rC   r  z/TerminalReporter.getreports.<locals>.<listcomp>  s'    SSSa71k;R;RSSSSrD   rb   r   r  )rA   r  s     rC   
getreportszTerminalReporter.getreports  s&    SS4:>>$33SSSSrD   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   r2   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  )rU   r  )r  locs     rC   r  zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>  sL       - -36CHHNN4++A.- - - - - -rD   c              3   Z   K   | ]&\  }}d                      |||dk    rdnd          V  'dS )z{}: {} warning{}rJ   r   r   N)r  )r  kvs      rC   r  zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>  sX       ! !1 '--a1q55CCbII! ! ! ! ! !rD   )	r   r   r  r1  r   r   rU   r   r>  )r  	locationsr   rT  counts_by_filenamerA   s        rC   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 : :! ! !   rD   zwarnings summary (final)zwarnings summaryr9  TF)r\  r  r  c              3       K   | ]	}d |z   V  
dS )r  Nrb   r  s     rC   r  z4TerminalReporter.summary_warnings.<locals>.<genexpr>  s&      (A(Aa(A(A(A(A(A(ArD   zG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)r  r   r  r   r1  r@  r   r  r   r   rU   r8  r>  r   r{   r  r   rstrip)rA   all_warningsr   warning_reportsreports_grouped_by_messagewrr  r6  r   message_reportsmaybe_locationr  indenteds   `            rC   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	rD   c                    | j         j        j        dk    r|                     d          r|                     d          }|sd S |                     dd           |D ]j}|j        rC|                     |          }|                     d|dd           |                     |           | 	                    |j
                   gd S d S d S )	Nrz   Pr-   r9  PASSESr  T)r[  r  )r   r   rv   r  r  r8  sectionsr  _outrep_summary_handle_teardown_sectionsr   rA   r  rl  r   s       rC   r  zTerminalReporter.summary_passes  s    ;%--{{3 
?,0OOH,E,E FsH---" ? ?C| 2"66s;;sCt$GGG,,S111223:>>>> .-
? 
?
? ?rD   c                 J    |                      d          }fd|D             S )Nr   c                 @    g | ]}|j         d k    |j        k    |S )r   )r   r   )r  r   r   s     rC   r  z:TerminalReporter._get_teardown_reports.<locals>.<listcomp>  s<     
 
 
{j((V]f-D-D -D-D-DrD   )r  )rA   r   r  s    ` rC   _get_teardown_reportsz&TerminalReporter._get_teardown_reports  s?    //"%%
 
 
 
!
 
 
 	
rD   c                 `    |                      |          D ]}|                     |           d S rP   )r.  print_teardown_sections)rA   r   r   s      rC   r*  z*TerminalReporter._handle_teardown_sections	  s@    0088 	1 	1F((0000	1 	1rD   rl  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 )Nrz   r   r   r  r  r  )r   r   r~   r(  r   r5  r{   rA   rl  r~   secnamer  s        rC   r0  z(TerminalReporter.print_teardown_sections  s    k(4$F # 	' 	'GWe##7(B(BW$$S'***233<4''%crclGg&&&	' 	'rD   c                    | j         j        j        dk    r|                     d          }|sd S |                     dd           | j         j        j        dk    r1|D ],}|                     |          }|                     |           -d S |D ]a}|                     |          }|                     d|dd           |                     |           | 	                    |j
                   `d S d S )	Nrz   r,   r9  FAILURESr{   r  Tr]  r  )r   r   rv   r  r8  r
  r   r  r)  r*  r   )rA   r  rl  r{   r   s        rC   r  z!TerminalReporter.summary_failures  s   ;%--(,(A(AG NN3
+++{!)V33" * *C--c22DOOD))))* * # ? ?C22377CNN3DNAAA((---223:>>>> .-? ?rD   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 )Nrz   r3   r9  ERRORSr   zERROR collecting z	ERROR at z of r  Tr6  )	r   r   rv   r  r8  r   r  r   r)  r+  s       rC   r  zTerminalReporter.summary_errors+  s    ;%--(,(@(@G NN3)))z'* * *..s338y((-3CC9ch99C99CsCT===$$S)))) .-
* *rD   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 )Nrz   r   r  r  r  )r  r   r   r   r~   r(  r5  r{   r2  s        rC   r)  z TerminalReporter._outrep_summary:  s    tx   k(4$F # 	# 	#GWe##7(B(BHLLg&&&rss|t##!#2#,HMM'""""	# 	#rD   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[0mr9  r   r   )r   r   r  r  build_summary_stats_liner   r   r  r1  r  r   format_session_durationr  r8  r   )rA   session_durationpartsr~  
line_partsdisplay_sepr   textr  with_markupr   main_markupdurationduration_with_markupmarkup_for_end_seps                  rC   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//;/////rD   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  rJ  r,   r   rl  r   r{   rA   s          rC   show_simplez8TerminalReporter.short_test_summary.<locals>.show_simplep  s    Z^^D"--F [F # #'++D2IJJ7CE4=  T""""# #rD   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   r2   Tr    - )r   r  _get_verbose_wordr   r   r  rL  _get_node_id_with_markuprZ  rU   r  )	r  r0   rl  verbose_wordmarkup_wordr   r{   ro  rA   s	           rC   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""""# #rD   c                 :   j                             dg           }|D ]{}|                    j                  } j        j        |fi t          d         di}t          j        j        |          }|j        }| 	                    | d| d|            |d S )Nr1   r2   Tr   )
r   r  rR  r   r   r  rL  rS  rZ  r  )r  r1   rl  rT  rU  r   ro  rA   s          rC   show_xpassedz9TerminalReporter.short_test_summary.<locals>.show_xpassed  s    jnnY33G A A"44T[AA-dho  %4Z%@$$G  2$(DKMM??f??v??@@@@A ArD   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   r2   T	Skipped: z%s [%d] %s:%d: %sz%s [%d] %s: %s)r   r  _folded_skipsr   rR  r   r   r  rL  
startswithr1  r  )r  r.   fskipsrT  rU  r  numr  rL  ro  rA   s             rC   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rD   r,   )rJ  r-   r3   )r  Xfr   pr   r9  zshort test summary infoT)ra  r  )ro   r   rU   r   r  r8  r   )
rA   rO  rV  rX  r_  REPORTCHAR_ACTIONSr  r   ri   r{   s
   `         rC   r  z#TerminalReporter.short_test_summaryl  s    	F
	#tCy 
	#3 
	#4 
	# 
	# 
	# 
	# 
	# 
	#	#S	 	#d 	# 	# 	# 	# 	# 	#		AS	 		Ad 		A 		A 		A 		A 		A 		A	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 & &%%%%	& 	&& &rD   c                     | j         | j        | j        r&|                                  | j         sJ | j        sJ | j         | j        fS rP   )r   r   ru  rB  r   s    rC   rz  z TerminalReporter._get_main_color  s\    #t'8'@DDV'@  """####$$$$!222rD   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,   r3   r]  r2   r1   r\  r-   r[  )r   ru  )rA   re  r   r~  s       rC   _determine_main_colorz&TerminalReporter._determine_main_color  sl    
u5 0 0JJ5  I$6$6:K$6!JJd&8 JJ!JrD   c                    g }| j                                         D ]&}|r"|t          vr||vr|                    |           't	          t                    |z   | _        |                     t          |                    | _        d S rP   )	r   keysKNOWN_TYPESr  listr   rg  rW   r   )rA   unknown_types
found_types      rC   rB  z TerminalReporter._set_main_color  s    #%*//++ 	5 	5J 5[00Z}5T5T!((444 --=55d=6I6IJJrD   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    rC   r=  z)TerminalReporter.build_summary_stats_line  s@    ( ;  // 	;>>@@@88:::rD   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)rL   r  s     rC   r  z<TerminalReporter._get_reports_to_display.<locals>.<listcomp>  s*    PPPaga1H$&O&OPPPPrD   r  )rA   rq  r  s      rC   _get_reports_to_displayz(TerminalReporter._get_reports_to_display  s+    *..b))PP7PPPPrD   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)rz  rt  r1  rL  r  rM  r  	pluralize)	rA   r~  known_typesr@  rq  r  rg   r   r  s	            rC   rp  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  rD   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/   r3   r   zno tests collectedr\  Tr[  z%d %s collectedtestzno tests collected (z deselected)rx  z tests collected (rv  )r1  rt  r   rw  rL  )rA   r/   r+  r@  r~  collected_outputall_tests_were_deselectedr  s           rC   ro  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  rD   rP   )r<   r   r<  )r<   N)NN)r9  )F)r  r+   r<   N)arQ   rR   rS   r   r   r   r@   r   propertyr   r   rW   r   rk   rl   r   setterr  rU   r  r  r  r  r'  r  r	  r   bytesr   r4  r8  r<  r{   r   r   rD  r   rG  r2   WarningMessagerN  r   rQ  r#   rS  r   rW  r)   rr  ru  r  rk  r  r{  r  r(   r  r  r!   r  r  r   r  r  r  r    r  r   r  r   BaseExceptionr  r  r  rV  r  r
  r  r  r  r.  r*  r0  r  r  r'   r)  r  r  rz  rg  rB  r
   r=  rt  rp  ro  rb   rD   rC   r   r   V  s
       E Ev EXf-= E E E E E4   * 3    X #D # # # X# 24 2 2 2 X2 3D 3 3 3 X3  D       X 
 ! !4 ! ! ! ! "$ " " " X"(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*3    "A A A A . . . . X.A A A A"= "T " " " "#" #"D #"T #" #" #" #"J Xd7 7 7 78*eC#$678*	* * * *6 d3i    - - - -,N(4. NT N N N N: X$ .3CM.B    4 X$ 3C)D         F}1M FRV F F F F- - - -    #&08GJ	   .    Ts T T T T4 4 4 4l? ? ? ?
C 
D4D 
 
 
 
1 1 1 1 1 1': '$ ' ' ' '? ? ? ?"* * * *#: #$ # # # ##0 #0 #0 #0JP& P& P& P&d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! ! ! ! ! !rD   r   twrl  c                     |                     |j                  }|                    d          ^}}|r2|                     d                    |          d          }|dz   |z   S |S )Nr  Tr  )r  r   r  r  r   )r  r   rl  r   pathr@  parts_markups          rC   rS  rS  ,  si    ''
33F<<%%LD5 yy5!1!1y==d{\))rD   r  r   rp  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  r1  )r  r   rp  iellipsisformat_widths         rC   rh  rh  6  s     	ABww"1"gHFMM"--..Lc(mm#o55thsmm#o553x==("?"#Xc]]*_<<crc(C Xc]]*_<<x==rD   word_markupc                 L   |                     |           } |j        |fi |}t          || |          }| d| }t          |          }	 |j        j        j        }	t                      s|j        |z
  }
t          d|	|
          }	n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   z - {}rQ  )rR  r  rS  r   r  r  r   r   r   rh  r	  )r   rl  r  r  rT  r`   rY  r{   
line_widthr   rp  s              rC   rN  rN  O  s     ((00L29\11[11D#B44DTD$Jl$,  	 lZ7O!'3@@CC++C?CKD     Ks   B 
B! B!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,  rd  r1  r&   r   rL   r   r@  r  r>  )r   r.   deventr  rL  ro  r  rq  rG   eventss              rC   r[  r[  k  s\    DFA , ,~)))%.%00II5%.2III05>""a'''%)@'''!&YV555*b11
 J'!!(""H,,3942HCC66*C	S"$$U++++8:Fwwyy + +Vs6{{)S))****MrD   r]  r\  r[  )r,   r3   r2   r-   rg   nounc                 \    |dvr| |fS |                     dd          }| | dk    r|dz   n|fS )N)r3   r2   rz  r2   warningrJ   r   )r   )rg   r  s     rC   rw  rw    sH    000d{
 <<
I..D

$**44rD   c                     g }| D ]S\  }}d                     |          }|                    d          r
|dd          }||vr|                    |           T|S )Nz"{dist.project_name}-{dist.version})distzpytest-   )r  r\  r  )r  rG   rO  r  r  s        rC   r  r    st    F"    3:::EE??9%% 	8DvMM$MrD   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 (r`  )datetime	timedeltar   )r  dts     rC   r>  r>    sP    ||     G555'''"''''rD   c                    t          | d          rHt          t          | 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.
    rZ  zreason: NrZ  Skippedr   )
re  r   rU   rZ  r\  r1  r.   r,  r  rd  )r   ro  r  s      rC   rg  rg    s    
 vz"" c6?++Z(( 	/C
OO--.F~~&/5111111f[)) 	C,,../FFy  FrD   )arT   rX   dataclassesr  r  r  r   r$  r2   collectionsr   	functoolsr   pathlibr   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r  _pytest._versionr   r   r   _pytest._coder   _pytest._code.coder   _pytest._ior   _pytest._io.wcwidthr   _pytest.assertion.utilr   _pytest.compatr   r   r   r   r    r!   _pytest.config.argparsingr"   _pytest.nodesr#   r$   _pytest.pathlibr%   r&   _pytest.reportsr'   r(   r)   typing_extensionsr*   _pytest.mainr+   r  rj  r   Actionr6   r]   r   r   rU   r   r   	dataclassr   r   rS  r   rh  rW   rN  r[  rL  rM  rw  r  floatr>  rg  rb   rD   rC   <module>r     s            



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