
    F-Ph                    L   d Z ddlm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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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l-m.Z. ddl-m/Z/ ddl-m0Z0 ddl-m1Z1 ddl2m3Z3 ddl4m5Z5 ddl4m6Z6 dd l7m8Z8 dd!l7m9Z9 dd"l:m;Z; dd#l:m<Z< dd$l:m=Z= erdd%l>m?Z? d&Z@d'ZAd(ZB G d) d*ejC                  ZD G d+ d,e          ZEddd1ZFded4ZGdfd6ZH e1d78          dgd<            ZIejJ         G d= d>                      ZKe G d? d@                      ZLdhdDZMdidJZNdjdMZOdkdSZPdTdTdUdVdWZQdUZRdld[ZSdmd]ZTdnd`ZUdndaZVdodcZWdS )pzsTerminal reporting of the full testing process.

This is a good source for looking at the various reporting hooks.
    )annotationsN)Counter)Callable)	Generator)Mapping)Sequence)partial)Path)Any)ClassVar)final)Literal)
NamedTuple)TextIO)TYPE_CHECKING)nodes)timing)ExceptionInfo)ExceptionRepr)TerminalWriter)wcswidth)running_on_ci)_PluggyPlugin)Config)ExitCode)hookimpl)Parser)Item)Node)absolutepath)bestrelpath)
BaseReport)CollectReport)
TestReport)Sessiong      ?)failedpassedskipped
deselectedxfailedxpassedwarningserrorfEc                  8     e Zd ZdZ	 	 	 dd fdZ	 dd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Sequence[str]deststrdefaultobjectrequiredboolhelp
str | NonereturnNonec                V    t                                          ||d|||           d S )Nr   )r1   r3   nargsr5   r7   r9   )super__init__)selfr1   r3   r5   r7   r9   	__class__s         P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/_pytest/terminal.pyr@   zMoreQuietAction.__init__S   sB     	) 	 	
 	
 	
 	
 	
    parserargparse.ArgumentParser	namespaceargparse.Namespacevaluesstr | Sequence[object] | Noneoption_stringc                    t          || j        d          dz
  }t          || j        |           t          |dd          dz   |_        d S )Nr      quiet)getattrr3   setattrrN   )rA   rE   rG   rI   rK   	new_counts         rC   __call__zMoreQuietAction.__call__d   sL     Ity!44q8		49i000!)Wa881<	rD   )NFN)r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   N)
rE   rF   rG   rH   rI   rJ   rK   r:   r;   r<   )__name__
__module____qualname____doc__r@   rR   __classcell__)rB   s   @rC   r0   r0   L   su          
 
 
 
 
 
 
, %)
= 
= 
= 
= 
= 
= 
= 
= 
=rD   r0   c                  2    e Zd ZU dZded<   ded<   d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.
    r4   categoryletterz$str | tuple[str, Mapping[str, bool]]wordN)rT   rU   rV   rW   __annotations__ rD   rC   rZ   rZ   q   s<           MMMKKK......rD   rZ   rE   r   r;   r<   c           	     Z   |                      ddd          }|                    ddddd	d
           |                    d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d0dd1           |                    d2dd0d34           |                    d5d6d$d7d8g d9d:;           |                    d<dd=dd>           |                    d?d$d@g dAdBdCD           |                    dEdFdddGH           |                    dIdJd$dJd8g dKdL;           |                    dMdNdNdOgdPQ           |                     dRdSdTU           t          j        | t          j	        dVW           d S )XNzterminal reporting	Reportinggeneral)afterz-vz	--verbosecountr   verbosezIncrease verbosity)actionr5   r3   r9   z--no-header
store_trueF	no_headerzDisable headerz--no-summary
no_summaryzDisable summaryz--no-fold-skippedstore_falsefold_skippedTz+Do not fold skipped tests in short summary.)rf   r3   r5   r9   z--force-short-summaryforce_short_summaryz=Force condensed summary output regardless of verbosity level.z-qz--quietzDecrease verbosityz--verbosityzSet verbosity. Default: 0.)r3   typer5   r9   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').)rf   r3   r5   metavarr9   z--disable-warningsz--disable-pytest-warningsdisable_warningszDisable warnings summary)r5   r3   rf   r9   z-lz--showlocals
showlocalsz/Show locals in tracebacks (disabled by default)z--no-showlocalszFHide locals in tracebacks (negate --showlocals passed through addopts))rf   r3   r9   z--tbstyletbstyleauto)rv   longshortnolinenativez5Traceback print mode (auto/long/short/line/native/no))rq   rf   r3   r5   choicesr9   z
--xfail-tbxfail_tbz1Show tracebacks for xfail (as long as --tb != no)z--show-captureshowcapture)ry   stdoutstderrlogallr   zOControls how captured stdout/stderr/log is shown on failed tests. Default: all.)rf   r3   r|   r5   r9   z--fulltracez--full-tracez,Don't cut any tracebacks (default is to cut))rf   r5   r9   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.)r5   r|   r9   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)r9   r5   zSpecify a verbosity level for test case execution, overriding the main level. Higher levels will provide more detailed information about each test case executed.)r9   )
getgroup
_addoption	addoptionr0   int_REPORTCHARS_DEFAULTaddinir   _add_verbosity_iniVERBOSITY_TEST_CASES)rE   groups     rC   pytest_addoptionr      s   OO0+YOOOE	!     
OO     
OO     
OO:     
OO"L     
!     
OO)     
$>     
OO#'     
>     
OOU	     
OOAAAD     
OO@     
OO888     
OO;     
OO%%%2     
OO	     MM)      #b	     rD   configr   c                    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mapr4   
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   r4   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reportr"   tuple[str, str, str]c                    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&   r-   E)r'   r(   outcomewhenupper)r   r\   r   s      rC   pytest_report_teststatusr   C  se    F} 	 >G{6667h;N;NFGMMOO++rD   c                  P    e Zd ZU dZded<   dZded<   dZded<   d	Zd
ed<   d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``).
    r4   messageNr:   nodeidztuple[str, int] | None
fslocationTr   count_towards_summaryr   r   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_locatione  s`    ; 	;? 	* $Hg!&":">X@V@VWWG)))))trD   )r   r   r;   r:   )	rT   rU   rV   rW   r^   r   r   r   r   r_   rD   rC   r   r   S  ss           LLLF)-J----&*****     rD   r   c                     e Zd ZdddZdd
Zedd            Zedd            Zedd            Zedd            Z	edd            Z
e
j        dd            Z
edd            ZddZddZddd Zdd!Zd"d#d$d%dd*Zd"d+dd,Zdd-Zdd0Zdd1Z	 	 ddd7Zddd:Zdd<Zdd@ZddCZddFZddIZddKZddNZddQZeddR            Z  e!dST          ddV            Z"ddWZ#ddXZ$ddYZ%eddZ            Z&dd[Z'dd]Z(ddd_Z) e!dS`          ddc            Z*ddfZ+ddhZ,ddiZ-ddjZ. e!dST          ddn            Z/ e!dST          ddo            Z0ddrZ1ddsZ2ddtZ3ddxZ4dy Z5dz Z6dd|Z7dd}Z8dd~Z9ddZ:ddZ;ddZ<ddZ=ddZ>ddZ?ddZ@ddddZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLdS )r   Nr   r   fileTextIO | Noner;   r<   c                   dd l }|| _        d| _        d | _        d | _        i | _        d | _        d | _        |j        j	        | _
        |t          j        }|j                            ||          | _        | j        j        | _        d | _        t%          |          | _        |j        j        | _        | j        j        | _        |                                | _        t3                      | _        t3                      | _        |                                 | _        t=          j                    | _         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   r   rk   foldskipped	hasmarkupisattyset_progress_nodeids_reported_timing_nodeids_reported_determine_show_progress_info_show_progress_infor   Instant_collect_report_last_write_already_displayed_warnings_keyboardinterrupt_memo)rA   r   r   _pytests       rC   r@   zTerminalReporter.__init__r  s   (,(,+-
'+.215<:D>88FF!X/6:'//!=5+kkmm47EE'25%%%#'#E#E#G#G *0.*:*:'7;(=A$$$rD   ,Literal['progress', 'count', 'times', False]c                   | 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
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   rd   times)r   	getoptiongetini)rA   cfgs     rC   r   z.TerminalReporter._determine_show_progress_info  s     K!!)T22d::""#9::./ / 5;  e44 	5;%%&<==???:G^^7G^^75rD   r   c                (    | j         j        j        }|S rS   )r   r   re   )rA   	verbositys     rC   r   zTerminalReporter.verbosity  s    +3	rD   r8   c                    | j         dk    S r   )r   rA   s    rC   
showheaderzTerminalReporter.showheader  s    ~""rD   c                >    t          | j        j        j                  S rS   )r8   r   r   rh   r  s    rC   rh   zTerminalReporter.no_header  s    DK&0111rD   c                >    t          | j        j        j                  S rS   )r8   r   r   ri   r  s    rC   ri   zTerminalReporter.no_summary  s    DK&1222rD   c                n    | j         (| j                            t          j                  dk    S | j         S r   )r   r   get_verbosityr   r   r  s    rC   
showfspathzTerminalReporter.showfspath  s2    #;,,V-HIIQNNrD   valuebool | Nonec                    || _         d S rS   )r   )rA   r  s     rC   r  zTerminalReporter.showfspath  s     rD   c                R    | j                             t          j                  dk    S r   )r   r  r   r   r  s    rC   showlongtestinfoz!TerminalReporter.showlongtestinfo  s     {(()DEEIIrD   r   r4   c                F    ddd                     ||          }|| j        v S )Nxr   )r*   r(   )getro   )rA   r   s     rC   hasoptzTerminalReporter.hasopt  s-    3//33D$??t'''rD   r   res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)rA   r   r  r  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   rz   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 rS   )r   r   rz   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 rS   )r   r  r  s    rC   r  zTerminalReporter.flush  s    rD   rz   str | bytesc                    t          |t                    st          |d          }|                                   | j        j        |fi | d S )Nr   )errors)
isinstancer4   r$  r   rz   )rA   rz   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.
        eraseFrM   r   r   N)popr   r   lenr4   r  )rA   rz   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:   r   
int | Nonec                X    |                                    | j        j        |||fi | d S rS   )r$  r   rA  )rA   rA  rB  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 rS   )r   rA  )rA   rB  rA  rG  s       rC   sectionzTerminalReporter.section!  s&    S%&&2&&&&&rD   r   c                ,     | j         j        |fi | d S rS   )r   rz   )rA   r   rG  s      rC   rz   zTerminalReporter.line$  s$    c  R     rD   r[   itemsSequence[Any]c                    || j         v}| j                             |g                               |           |r|                                  d S d S rS   )r   
setdefaultextend_set_main_color)rA   r[   rK  set_main_colors       rC   
_add_statszTerminalReporter._add_stats'  s^    !3
h++225999 	#  """""	# 	#rD   excreprr   c                    t          |                              d          D ]}|                     d|z              dS )Nr&  zINTERNALERROR> T)r4   r  r   )rA   rS  rz   s      rC   pytest_internalerrorz%TerminalReporter.pytest_internalerror-  sE    LL&&t,, 	6 	6DOO-45555trD   warning_messagewarnings.WarningMessagec                    ddl m} |j        |j        f} ||          }t	          |||          }|                     d|g           d S )Nr   )warning_record_to_str)r   r   r   r,   )_pytest.warningsrY  r   linenor   rR  )rA   rV  r   rY  r   r   warning_reports          rC   pytest_warning_recordedz(TerminalReporter.pytest_warning_recorded2  sp    
 	;:::::$-/EE
''88&!76
 
 
 	
^$455555rD   pluginr   c                `    | j         j        j        rd| }|                     |           d S d S )NzPLUGIN registered: )r   r   r   r   )rA   r^  r   s      rC   pytest_plugin_registeredz)TerminalReporter.pytest_plugin_registeredA  sC    ;) 	!000C OOC     	! 	!rD   Sequence[Item]c                2    |                      d|           d S )Nr)   )rR  )rA   rK  s     rC   pytest_deselectedz"TerminalReporter.pytest_deselectedI  s    e,,,,,rD   locationtuple[str, int | None, str]c                   |\  }}}| j         rD|                     ||||          }|                     |d           |                                  d S | j        r,|                     |d           |                                  d S d S )Nr   )r  _locationliner"  r  r  r  )rA   r   rd  r  r[  domainrz   s          rC   pytest_runtest_logstartz(TerminalReporter.pytest_runtest_logstartL  s     "*   	%%ffffEED$$T2...JJLLLLL_ 	$$VR000JJLLLLL	 	rD   r   r$   c                Z   d| _         |}t          | j        j                            || j                   }|j        |j        |j        }}}t          |t                    sd }n|\  }}| 
                    ||g           |s|sd S |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                            |j                   | j                            t&          j                  dk    r7 | j        j        |fi | | j        r| j        s|                                  n | j        |j        g|j        R  }	t          |d          }
|
s | j        |	|fi | |j        st          |d          rt;          |          }| j                            t&          j                  d	k     r>| j        j        | j        j        z
  tA          d
          z
  dz
  }tC          d||          }nd| d}|r|| "                    |           | j        r| #                                 n| $                                 | j                            d|j%        j&        j'         d           | j        r2| j                            | (                                dz   d           n| j                            d            | j        j        |fi | | j                            d|	z              d| _)        | *                                 d S )NT)r   r   wasxfailgreenyellowredr   node    [100%]rM   z ({})z ()[]r   )cyanr   )+
_tests_ranrZ   r   hookr   r[   r\   r]   r8  tuplerR  hasattrr'   r&   r(   r   addr   r  r   r   r   r  r   _is_last_item(_write_progress_information_if_past_edgerg  rd  r"  _get_raw_skip_reasonr   r.  r=  _format_trimmedr2  r  r$  ro  gatewayid!_get_progress_information_messager   r  )rA   r   repr  r[   r\   r]   r  	was_xfailrz   running_xdistreasonavailable_widthformatted_reasons                 rC   pytest_runtest_logreportz)TerminalReporter.pytest_runtest_logreportZ  s    [66c$+6VV
 "%sz38$&$&& 	 FFLD&3%((( 	d 	F>
33Iz 	) 	!4 	 "D)  "D)'++CJ777;$$V%@AAQFFDHN6,,V,,, ' @0B @==???%4%cj@3<@@@D#C00M  (((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##%%%938#3#6999:::+ (HNN>>@@3FT #     HNN3'''t..v...sTz***%'"

rD   c                X    | j         J t          | j                  | j         j        k    S rS   )r   r=  r   testscollectedr  s    rC   r{  zTerminalReporter._is_last_item  s+    }(((4233t}7SSSrD   T)wrapperGenerator[None, object, object]c              #     K   d V }| j                             t          j                  dk    r"| j        r| j        r|                                  |S r   )r   r  r   r   r   r   r  )rA   results     rC   pytest_runtestloopz#TerminalReporter.pytest_runtestloop  s`       K%%f&ABBaGG( H/ H ::<<<rD   c                   
  j         sJ  j         j        } j        dk    r[|rPt           j                  }dt          t          |                     d}d| d}|                    ||          S d| d| dS  j        d	k    rY|sd
S                      d                               d          z                        d          z                        d          z                        d          z                        d          z                        d
          z   }|d         j        d         
 fd|D             }t          
fd j         j
        D                       }t          
fd|D                       }||k    }	 j        s|	rJ j                            d |D                        t          t          d |D                                 S d
S |rdt           j                  dz  |z  ddS dS )Nrd   z{:zd} [z/{}]z [  / z ]r   r   r'   r+   r&   r*   r(   r-   r   c                0    g | ]}|j         j        v|S r_   )r   r   ).0rrA   s     rC   
<listcomp>zFTerminalReporter._get_progress_information_message.<locals>.<listcomp>  s/       !($:W*W*W*W*W*WrD   c              3  :   K   | ]}|j         d          k    V  dS )r   N)rd  )r  icurrent_locations     rC   	<genexpr>zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  s@       " "67
1!11" " " " " "rD   c              3  P   K   | ] }|j         d          k    |j        dk    V  !dS )r   r   N)rd  r   )r  r  r  s     rC   r  zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  sH       " ":a=$444 '!4444" "rD   c              3  $   K   | ]}|j         V  d S rS   )r   r  r  s     rC   r  zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  s$      4T4T!QX4T4T4T4T4T4TrD   c              3  $   K   | ]}|j         V  d S rS   )durationr  s     rC   r  zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  s$      /Q/Qq
/Q/Q/Q/Q/Q/QrD   d   3dz%]rq  )r   r  r   r=  r   r4   format_get_reports_to_displayrd  sumrK  r  r   updateformat_node_duration)rA   	collectedr   counter_formatformat_stringall_reportsnot_reportedtests_in_moduletests_completedlast_in_moduler  s   `         @rC   r  z2TerminalReporter._get_progress_information_message  s   }M0	#w.. At>??!?s3y>>':':!?!?!? ;^ ; ; ;$++Hi@@@444y4444#w.. r,,X66..y99:..x889 ..y99: ..y99	:
 ..w778 ..r223   +27:   &  L " " " " ";?=;N" " "  O " " " " "%" " "  O
 -?N$ S S-444T4T|4T4T4TTTT+C/Q/QL/Q/Q/Q,Q,QRRR2 	WVD;<<sBiOVVVVVyrD   c                   | j         }| j        dk    r,| j        sJ | j        j        }t	          d| d| d          }n*| j        dk    rt	          d          }nt	          d          }||z   dz   | j        k    }|rE|                                 \  }}|                                 } | j        j	        |d	z   fi |d
i d S d S )Nrd   r  /rt  r   z 99h 59mrq  rM   r&  T)
_width_of_current_liner   r   r  r=  r   _get_main_colorr  r   r  )rA   r   	num_testsprogress_length	past_edge
main_color_r   s           rC   r|  z9TerminalReporter._write_progress_information_if_past_edge  s    '#w..=   4I!"?y"?"?9"?"?"?@@OO%00!*ooOO!)nnO'!+t/AA	 	= 0022MJ88::CDHN3:<<*d);<<<<<	= 	=rD   c                    |                                  \  }}|                                 }| j        }| j        j        |z
  dz
  } | j        |                    |          fddi|di d S )NrM   r  T)r  r  r  r   r   r  rjust)rA   r   r  r   r   r?  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         r1| j        j        j        dk    r|                     ddd           d S d S | j        j        j        dk    r|                     ddd           d S d S )Nr   zcollecting ... T)r  boldrM   )r   r   r   re   r  r  s    rC   pytest_collectionz"TerminalReporter.pytest_collection   s    ; 	A{!)Q..

,Dt
DDDDD /.['1,,JJ(4J@@@@@ -,rD   r#   c                   |j         r|                     d|g           n|j        r|                     d|g           d |j        D             }| xj        t          |          z  c_        | j        r|                                  d S d S )Nr-   r(   c                <    g | ]}t          |t                    |S r_   )r8  r   r  r  s     rC   r  z9TerminalReporter.pytest_collectreport.<locals>.<listcomp>  s'    AAAqZ4-@-@AAAArD   )r&   rR  r(   r  r   r=  r   report_collect)rA   r   rK  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 |sA| j                                        j        t          k     rd S t          j                    | _        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|dk    rd
nd	 z  }|r	|d| dz  }|r	|d| dz  }| j        |k    r	|d| dz  }| j        r3|                     |dd           |r|                     d           d S d S |                     |           d S )Nr   r-   r(   r)   z
collected zcollecting z itemrM   r   r   r  z errorz deselectedz skippedz	 selectedT)r  r:  r&  )r   r   re   r   elapsedsecondsREPORT_COLLECTING_RESOLUTIONr   r   r=  r   r  r   r4   r   r@  r  r   )rA   r   r7  r(   r)   selectedrz   s          rC   r  zTerminalReporter.report_collect  s   ;%))F 	? /7799A./ / .4n.>.>D+TZ^^GR0011djnnY3344b99::
%
2$7||-"##g-t7IQ7N7NTWX	
  	ED&DDv{{DDDD 	21*1111D 	,+'++++D((-(----D; 	"LLDL555 !

4     ! ! OOD!!!!!rD   r   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 )NrF  ztest session startsTr  z	platform z -- Python pypy_version_infor      z[pypy--rt  z	, pytest-z	, pluggy-r   pastebinz -- )r   
start_path)r   r   r   _session_startr  rE  platformpython_versionrh   r   rO   r   r   r4   r   _versionversionpluggy__version__r   r   r   r   
executabler   rw  pytest_report_headerr   _write_report_lines_from_hooks)rA   r  verinfor   r  liness         rC   pytest_sessionstartz$TerminalReporter.pytest_sessionstart5  s   $n.. 	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 	7rD   r  Sequence[str | Sequence[str]]c                    t          |          D ]G}t          |t                    r|                     |           -|D ]}|                     |           Hd S rS   )reversedr8  r4   r   )rA   r  line_or_linesrz   s       rC   r  z/TerminalReporter._write_report_lines_from_hooksP  ss     &e__ 	* 	*M--- *....) * *DOOD))))*		* 	*rD   	list[str]c           	     $   d|j          g}|j        r0|                    dt          |j         |j                  z              |j        t
          j        j        k    rP|                    d          }|                    d	                    d
                    |                               |j                                        }|rH|                    d	                    d
                    t          |                                         |S )Nz	rootdir: zconfigfile: 	testpathsztestpaths: {}, zplugins: {})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_headerZ  s    /fo//0> 	YMM.;v+W+WWXXX!2!<<<#)==#=#=IMM/0091E1EFFGGG)>>@@
 	MM$$TYY/CJ/O/O%P%PQQ   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  rK  collectonlyr  r   r&   !zcollection failures)r  r   rw  pytest_report_collectionfinishr   rK  r  r   r   re   r   rz   _printcollecteditemsr   r  rA  
toterminal)rA   r  r  r&   r  s        rC   pytest_collection_finishz)TerminalReporter.pytest_collection_finishk  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                             t          j                  }|dk     r|dk     r`t	          d |D                       }t          |                                          D ]$\  }}| j                            | d|            %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  rM   r   N)r   r  )r  items     rC   r  z8TerminalReporter._printcollecteditems.<locals>.<genexpr>  s9       Q Q4!2!24!;!;A!> Q Q Q Q Q QrD   : r   rM     objz{}{})r   r  r   r   r   sortedrK  r   rz   r   	listchainr=  r<  r  rO   inspectgetdoc
splitlinesr  )rA   rK  test_cases_verbositycountsnamerd   r  stackindentneeded_collectorscolr  docrz   s                 rC   r  z%TerminalReporter._printcollecteditems  s6   #{889TUU!###b((  Q Q5 Q Q QQQ#)&,,..#9#9 6 6KD%HMMT"4"4U"4"455556 " / /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rD   
exitstatusint | ExitCodeGenerator[None]c              #  `  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)rn  )r   rz   r   OKTESTS_FAILEDINTERRUPTEDUSAGE_ERRORNO_TESTS_COLLECTEDri   r   rw  pytest_terminal_summary
shouldfailrE  r4   _report_keyboardinterruptr   
shouldstopsummary_stats)rA   r  r	  r  summary_exit_codess        rC   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rD   c              #    K   |                                   |                                  |                                  |                                  |                                  |                                  	 d V |                                  |                                  S # |                                  |                                  w xY wrS   )summary_errorssummary_failuressummary_xfailuressummary_warningssummary_passessummary_xpassesshort_test_summaryr  s    rC   r  z(TerminalReporter.pytest_terminal_summary  s         	$EE##%%%!!#### ##%%%!!####s   <B( (*CexcinfoExceptionInfo[BaseException]c                <    |                     d          | _        d S )NT)funcargs)getreprr   )rA   r!  s     rC   pytest_keyboard_interruptz*TerminalReporter.pytest_keyboard_interrupt  s    '.'E'E$$$rD   c                @    | j         |                                  d S d S rS   )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)rm  )
r   	reprcrashr   rE  r   r   	fulltracer  r   rz   )rA   rS  r   s      rC   r  z*TerminalReporter._report_keyboardinterrupt  s    .""" ,,,'sC   #%%{!+ ""48,,,,,!,,TX666V       &%rD   r  r[  rh  c                    d 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   r4   r;   c                2   j                             |           }ry|                              rd|d t                              }                    d          }|d                             dd          |d<   |d                    |          z  }|S )Nrs  r   r   r  )r   cwd_relative_nodeidendswithr=  r  r   r   )r   rz   rI   rh  rA   s      rC   mkrelz-TerminalReporter._locationline.<locals>.mkrel  s    ;226::D )$--// )Ns6{{lN+c**"1I--c488q	(((KrD   rp  r  r   \z <- z
[location]r   )r   r4   r;   r4   )r   r  r   r   SEPr!   r   r
   )rA   r   r  r[  rh  r1  r  s   `   `  rC   rg  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   r  r5  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   )r4   longreprr+  AttributeError)rA   r  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)ry  r  s     rC   r  z/TerminalReporter.getreports.<locals>.<listcomp>
  s'    SSSa71k;R;RSSSSrD   r_   r   r  )rA   r  s     rC   
getreportszTerminalReporter.getreports	  s&    SS4:>>$33SSSSrD   c                f                          d          r j                            d          }|sd S  j        d u}|r| j        d          }n|}t	          |           _        |sd S i }|D ]0}|                    |j        g                               |           1d 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   r,   reportslist[WarningReport]r;   r4   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  )r4   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{}rM   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  r=  r   r   r4   r   rK  )rB  	locationsr   rd  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 summaryrF  TF)rm  r  r&  c              3      K   | ]	}d |z   V  
dS )r  Nr_   r  s     rC   r  z4TerminalReporter.summary_warnings.<locals>.<genexpr>8  s&      (A(Aa(A(A(A(A(A(ArD   zG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)rB  rC  r;   r4   )r  r   r  r   r=  rN  r   r  rE  rK  r   rz   r   r   rstrip)rA   all_warningsr   warning_reportsreports_grouped_by_messagewrrM  rB  r   message_reportsmaybe_locationr  indenteds   `            rC   r  z!TerminalReporter.summary_warnings  s    ;;s 3	7;z~~j7Q7QL 4D@E /".t/O/Q/Q"R"./2?/C/CD," IK&% Q Q*55bj"EELLRPPPP     $ 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                4    |                      ddd           d S )Nr'   PASSESPsummary_passes_combinedr  s    rC   r  zTerminalReporter.summary_passesB  s     $$Xx=====rD   c                4    |                      ddd           d S )Nr+   XPASSESXrZ  r  s    rC   r  z TerminalReporter.summary_xpassesE  s     $$Y	3?????rD   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   rF  r  T)rl  r  )r   r   ru   r  r@  rE  sectionsr6  _outrep_summary_handle_teardown_sectionsr   )rA   r_  r`  ra  rB  r  r   s          rC   r[  z(TerminalReporter.summary_passes_combinedH  s     ;%--{{:&& 
?,0OOM,J,J FsI..." ? ?C| 2"66s;;sCt$GGG,,S111223:>>>> .-
? 
?
? ?rD   list[TestReport]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>Z  s<     
 
 
{j((V]f-D-D -D-D-DrD   )r@  )rA   r   rB  s    ` rC   _get_teardown_reportsz&TerminalReporter._get_teardown_reportsX  s?    //"%%
 
 
 
!
 
 
 	
rD   c                `    |                      |          D ]}|                     |           d S rS   )ri  print_teardown_sections)rA   r   r   s      rC   re  z*TerminalReporter._handle_teardown_sections`  s@    0088 	1 	1F((0000	1 	1rD   r  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~   rc  r   rA  rz   rA   r  r~   secnamer)  s        rC   rk  z(TerminalReporter.print_teardown_sectionsd  s    k(4$F # 	' 	'GWe##7(B(BW$$S'***233<4''%crclGg&&&	' 	'rD   c                X    | j         j        j        }|                     dd|           d S )Nr&   FAILURESrt   )r   r   ru   summary_failures_combined)rA   rt   s     rC   r  z!TerminalReporter.summary_failuresq  s0    "*&&x5&IIIIIrD   c                    | j         j        j        }|r| j         j        j        nd}|                     dd|           d S )Nry   r*   	XFAILURESrq  )r   r   r}   ru   rr  )rA   show_tbrt   s      rC   r  z"TerminalReporter.summary_xfailuresu  sG    +$-.5?"**4&&y+U&KKKKKrD   )ra  rt   c                  |dk    r|r|                      |          r|                     |          }|sd S |                     d|           |dk    r1|D ],}|                     |          }|                     |           -d S |D ]c}|                     |          }|                     d|dd           |                     |           |                     |j                   `d S d S d S )Nry   rF  rz   r  Trn  r  )	r  r@  rE  r;  r   r6  rd  re  r   )	rA   r_  r`  rt   ra  rB  r  rz   r   s	            rC   rr  z*TerminalReporter.summary_failures_combinedz  s2    D== CZ!8!8 C,0OOM,J,J FsI...F??& . .#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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 )Nry   r-   rF  ERRORSr   zERROR collecting z	ERROR at z of r  Trw  )	r   r   ru   r@  rE  r   r6  r   rd  )rA   rB  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   r"   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~   rc  rA  rz   rm  s        rC   rd  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 | j                                        }|                                 \  }}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        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[0mrF  r   r   )r   r  r  build_summary_stats_liner   r   r  r=  r  r   format_session_durationr  r0  rE  r   )rA   session_durationpartsr  
line_partsdisplay_sepr   textr  with_markupr   main_markupr  duration_with_markupmarkup_for_end_seps                  rC   r  zTerminalReporter.summary_stats  s   >BF.6688";;==

n) 	+*I! 	+ 	+LD&)$(/$99&99K :S--D		99	k****ii
##!4(M12B2JKKMM.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 fd}d fd}d fd	}d fd

d fdd 
fd}||t          |d          |t          |d          t          |d          d}g } j         D ]$}|                    |          }|r ||           %|r3                     dddd           |D ]}	                     |	           d S d S )Nr  r  statr4   r;   r<   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   r  r   rz   rA   s          rC   show_simplez8TerminalReporter.short_test_summary.<locals>.show_simple  s    Z^^D"--F [F # #'++D2IJJ7CE4=  T""""# #rD   c                n   	j                             dg           }|D ]}|                    	j        t          d         di          \  }} 	j        j        |fi |}t          	j        	j        |          }| d| }|j        }|r|dt          |          z   z  }| 
                    |           d S )Nr*   r,   Tr    - r   r  _get_verbose_word_with_markupr   r  r   r  _get_node_id_with_markuprk  r4   r  )
r  r*   r  verbose_wordverbose_markupmarkup_wordr   rz   r  rA   s
            rC   show_xfailedz9TerminalReporter.short_test_summary.<locals>.show_xfailed  s    jnnY33G # #/2/P/PK/*"=t!D0 0,n .dholMMnMM1$(DKMM%0000 0ECKK//DT""""# #rD   c                n   	j                             dg           }|D ]}|                    	j        t          d         di          \  }} 	j        j        |fi |}t          	j        	j        |          }| d| }|j        }|r|dt          |          z   z  }| 
                    |           d S )Nr+   r,   Tr   r  r  )
r  r+   r  r  r  r  r   rz   r  rA   s
            rC   show_xpassedz9TerminalReporter.short_test_summary.<locals>.show_xpassed  s    jnnY33G 
# 
#/2/P/PK/*"=t!D0 0,n .dholMMnMM1$(DKMM%0000 0ECKK//DT""""
# 
#rD   c                   j                             dg           }|rt          j        |          ng }|sd S |d                             j        t          d         di          \  }} j        j        |fi |}d}|D ]y\  }}}	}
|
	                    |          r|
t          |          d          }
|	$|                     | d| d| d|	 d	|
 	           Y|                     | d| d| d	|
            zd S )
Nr(   r   r,   T	Skipped: r  z] r   r  )r   r  _folded_skipsr   r  r   r  r   r  
startswithr=  r  )r  r(   fskipsr  r  r  r  numr  r[  r  rA   s              rC   show_skipped_foldedz@TerminalReporter.short_test_summary.<locals>.show_skipped_folded  sU   +/:>>)R+H+HG?FN]4>7;;;BF +21:+S+Soj94@, ,(L. *$(/,II.IIK F/5 N N+VVV$$V,, 3#CKKMM2F%LLK!U!U3!U!U&!U!U6!U!UV!U!UVVVVLLK!L!L3!L!L&!L!LF!L!LMMMMN NrD   c                4   	j                             dg           }|D ]}|j        J t          |j        t                    sJ ||j        f            t          |j                  dk    sJ ||j        f            |                    	j        t          d         di          \  }} 	j	        j
        |fi |}t          	j	        	j        |          }| d| }|j        d         }|r|dt          |          z   z  }|                     |           d S )Nr(   r  r,   Tr   rp  r  )r   r  r9  r8  rx  r=  r  r   r  r   r  r  r4   r  )
r  r(   r  r  r  r  r   rz   r  rA   s
            rC   show_skipped_unfoldedzBTerminalReporter.short_test_summary.<locals>.show_skipped_unfolded  s=   +/:>>)R+H+HG # #|///!#,66KKcl8KKKK3<((A---S\/B---/2/P/PK/*"=t!D0 0,n .dholMMnMM1$(DKMM%0000a 0ECKK//DT""""# #rD   c                F    j         r |            d S  |            d S rS   )r   )r  rA   r  r  s    rC   show_skippedz9TerminalReporter.short_test_summary.<locals>.show_skipped&  s<     -##E*****%%e,,,,,rD   r&   )r  r'   r-   )r  r^  fr   pr   rF  zshort test summary infoT)ru  r  )r  r  r  r4   r;   r<   )r  r  r;   r<   )ro   r	   r  rE  r   )rA   r  r  r  r  REPORTCHAR_ACTIONSr  r   rf   rz   r  r  s   `         @@rC   r   z#TerminalReporter.short_test_summary  s    	F
	# 
	# 
	# 
	# 
	# 
	#	# 	# 	# 	# 	# 	#	# 	# 	# 	# 	# 	#	N 	N 	N 	N 	N 	N$	# 	# 	# 	# 	# 	#&	- 	- 	- 	- 	- 	- 	- 	- 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   tuple[str, list[str]]c                    | j         | j        | j        r&|                                  | j         sJ | j        sJ | j         | j        fS rS   )r   r   r{  rP  r  s    rC   r  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&   r-   rn  r,   r+   rm  r'   rl  )r   r{  )rA   r  r   r  s       rC   _determine_main_colorz&TerminalReporter._determine_main_colorG  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 rS   )r   KNOWN_TYPESr  listr   r  r8   r   )rA   unknown_types
found_types      rC   rP  z TerminalReporter._set_main_colorS  s    #%* 	5 	5J 5[00Z}5T5T!((444 --=55d=6I6IJJrD   -tuple[list[tuple[str, dict[str, bool]]], str]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   key	list[Any]c                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)rO   r  s     rC   r  z<TerminalReporter._get_reports_to_display.<locals>.<listcomp>x  s*    PPPaga1H$&O&OPPPPrD   r?  )rA   r  rB  s      rC   r  z(TerminalReporter._get_reports_to_displayu  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)r  r  r=  r  r  r  r  	pluralize)	rA   r  known_typesr  r  rB  rd   r   r  s	            rC   r  z1TerminalReporter._build_normal_summary_stats_linez  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)   r-   r   zno tests collectedrm  Trl  z%d %s collectedtestzno tests collected (z deselected)r  z tests collected (r  )r=  r  r   r  r  )rA   r)   r7  r  r  collected_outputall_tests_were_deselectedr  s           rC   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  rD   rS   )r   r   r   r   r;   r<   )r;   r   )r;   r   )r;   r8   )r  r	  r;   r<   )r   r4   r;   r8   )r   r4   r  r4   r  r8   r;   r<   r}  )r  r4   r  r4   r;   r<   )r;   r<   )r)  r4   r  r8   r'  r   r(  r4   r  r8   r;   r<   )r)  r4   r  r8   r  r8   r;   r<   )rz   r5  r  r8   r;   r<   )rz   r4   r  r8   r;   r<   )NN)
rA  r4   rB  r:   r   rC  r  r8   r;   r<   )rF  )rB  r4   rA  r4   rG  r8   r;   r<   )r   r4   rG  r8   r;   r<   )r[   r4   rK  rL  r;   r<   )rS  r   r;   r8   )rV  rW  r   r4   r;   r<   )r^  r   r;   r<   )rK  ra  r;   r<   )r   r4   rd  re  r;   r<   )r   r$   r;   r<   )r;   r  )r;   r4   )r   r#   r;   r<   )F)r   r8   r;   r<   )r  r%   r;   r<   )r  r  r;   r<   )r   r   r;   r  )r  r%   r	  r
  r;   r  )r;   r  )r!  r"  r;   r<   )
r   r4   r  r4   r[  rC  rh  r4   r;   r4   )r  r4   )r_  r4   r`  r4   ra  r4   r;   r<   )r   r4   r;   rf  )r   r4   r;   r<   )r  r$   r;   r<   )
r_  r4   r`  r4   rt   r4   ra  r:   r;   r<   )r  r"   r;   r<   )r;   r  )r  r8   r;   r4   )r;   r  )r  r4   r;   r  )MrT   rU   rV   r@   r   propertyr   r  rh   ri   r  setterr  r  r  r"  r$  r2  r  r  r   r@  rE  rI  rz   rR  rU  r]  r`  rc  ri  r  r{  r   r  r  r|  r  r  r  r  r  r  r  r  r  r  r  r  r&  r(  r  rg  r6  r;  r@  r  r  r  r[  ri  re  rk  r  r  rr  r  rd  r  r   r  r  rP  r~  r  r  r  r_   rD   rC   r   r   p  s       B B B B B8   2    X # # # X# 2 2 2 X2 3 3 3 X3       X 
 ! ! ! ! J J J XJ( ( ( (	2 	2 	2 	2$ $ $ $ $& & & & 7 7 7 7 7 7, 49 7 7 7 7 7 7   & & & &5 5 5 5* ! $	6 6 6 6 6' ' ' ' '! ! ! !# # # #   
6 6 6 6! ! ! !- - - -   J J J JX T T T XT Xd   ) ) ) )V= = = = A A A A . . . X.A A A A" " " """ "" "" "" ""H Xd7 7 7 74* * * *   "- - - -,N N N N< Xd   4 Xd$ $ $ $F F F F- - - -       .    T T T T4 4 4 4l> > > >@ @ @ @? ? ? ? 
 
 
 
1 1 1 1' ' ' 'J J J JL L L L "&C C C C C C2* * * *# # # ##0 #0 #0 #0Jj& j& j& j&X3 3 3 3
 
 
 
K K K K; ; ; ;2Q Q Q Q
! ! ! !&! ! ! ! ! !rD   r   twr   r  c                    |                     |j                  }|                    d          ^}}|r2|                     d                    |          d          }|dz   |z   S |S )Nr  Tr  )r/  r   r  r  r   )r  r   r  r   pathr  parts_markups          rC   r  r    si    ''
33F<<%%LD5 yy5!1!1y==d{\))rD   r  r   r  r   r:   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  r=  )r  r   r  r  ellipsisformat_widths         rC   r~  r~    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_markupdict[str, bool]c                   |                     | |          \  }} |j        |fi |}t          || |          }| d| }t          |          }		 |j        j        j        }
t                      s| j        j	        dk    r| j        j
        s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   rp  r  z - {})r  r  r  r   r9  r+  r   r   r   re   rl   r   r~  r:  )r   r  r  r  r  r  r]   ro  rz   
line_widthr   r  s               rC   r  r    s    $'#D#D$ $ L. 29\44^44D#B44DTD$Jl$,
 OO	A%}499-3  :++CC lZ7O!'3@@C?CKD     Ks   B4 4
C Cr   r
   r(   Sequence[CollectReport]&list[tuple[int, str, int | None, str]]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)r9  r8  rx  r=  r!   r
   rO   r   rN  r  rK  )r   r(   deventr  r[  r  r  r  rI   eventss              rC   r  r    s\    ACA , ,~)))%.%00II5%.2IIII5>""a'''%)@'''!&YV555*b11
 J'!!(""H,,06f/ECC66*C	S"$$U++++57Fwwyy + +Vs6{{)S))****MrD   rn  rm  rl  )r&   r-   r,   r'   rd   nountuple[int, str]c                \    |dvr| |fS |                     dd          }| | dk    r|dz   n|fS )N)r-   r,   r  r,   warningrM   r   )r   )rd   r  s     rC   r  r    sH    000d{
 <<
I..D

$**44rD   r  c                    g }| D ]N\  }}|j          d|j         }|                    d          r
|dd          }||vr|                    |           O|S )Nr  zpytest-   )project_namer  r  r  )r  rI   r^  distr  s        rC   r  r  &  sv    F"    #44dl44??9%% 	8DvMM$MrD   r  floatc                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.<   .2fr   r  zs (rr  )datetime	timedeltar   )r  dts     rC   r  r  4  sP    ||     G555'''"''''rD   c                2   | dk     r
d| dz  ddS | dk     r
d| dz  ddS | dk     r
d| dz  d	dS | d
k     r
d| dz  ddS | dk     r
d| dz  ddS | dk     r
d| dz  d	dS | dk     rd| ddS | dk     rd| dz  dd| dz  ddS d| dz  dd| dz  dz  ddS )zQFormat the given seconds in a human readable manner to show in the test progress.gh㈵>r   i@B z.3fusg-C6?r  gMbP?z.1fg{Gz?i  msg?rM   r  r   i  z.0fzm zh mr_   r  s    rC   r  r  =  sJ    ,7W$,,,,,,7W$,,,,,,7W$,,,,,~~)7T>)))))}})7T>))))){{)7T>)))))||!7!!!!!~~;7b=;;;";;;;;Cw$CCCw~"&<CCCCCrD   r$   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.
    rk  zreason: Nr  Skippedr   )ry  rk  r  r=  r(   r8  r9  rx  )r   r  r  s      rC   r}  r}  T  s    
 vz"" Z(( 	/C
OO--.F~&/5111111f[)) 	C,,../FFy  FrD   )rE   r   r;   r<   )r   r   r;   r<   )r   r   r;   r4   )r   r"   r;   r   )r  r   r   r   r  r"   )r  r4   r   r4   r  r   r;   r:   )
r   r   r  r"   r  r   r  r  r;   r4   )r   r
   r(   r  r;   r  )rd   r   r  r4   r;   r  )r;   r  )r  r  r;   r4   )r   r$   r;   r4   )XrW   
__future__r   argparsecollectionsr   collections.abcr   r   r   r   dataclassesr  	functoolsr	   r  pathlibr
   r  r   r/  typingr   r   r   r   r   r   r   r,   r  r   r   r   _pytest._coder   _pytest._code.coder   _pytest._ior   _pytest._io.wcwidthr   _pytest._version_pytest.assertion.utilr   r   r   r   r   r   _pytest.config.argparsingr   _pytest.nodesr   r   _pytest.pathlibr    r!   _pytest.reportsr"   r#   r$   _pytest.mainr%   r  r  r   Actionr0   rZ   r   r   r   r   	dataclassr   r   r  r~  r  r  r  r  r  r  r  r  r}  r_   rD   rC   <module>r     s-   
 # " " " " "        $ $ $ $ $ $ % % % % % % # # # # # # $ $ $ $ $ $                    



                                                                ' ' ' ' ' ' , , , , , , & & & & & & ( ( ( ( ( (     0 0 0 0 0 0 ( ( ( ( ( ( ! ! ! ! ! ! # # # # # # # # # # # # , , , , , ,             ( ( ( ( ( ( ' ' ' ' ' ' & & & & & & ) ) ) ) ) ) & & & & & &  %$$$$$$  # 	  "= "= "= "= "=ho "= "= "=J/ / / / / / / /(V V V Vr	B 	B 	B 	B   2 
$, , , ,        8 z! z! z! z! z! z! z! z!z!      2   @   @ 	  # 
5 
5 
5 
5   ( ( ( (D D D D.     rD   