
    i                    v   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)m*Z* ddl+Zddl,m-Z- ddl.m/Z/ ddl.m0Z0 ddl.m1Z1 ddl.m2Z2 ddl3m4Z4 ddl5m6Z6 dd l5m7Z7 dd!l8m9Z9 dd"l8m:Z: dd#l;m<Z< dd$l;m=Z= dd%l;m>Z> erdd&l?m@Z@ d'ZAd(ZBd)ZC G d* d+ejD                  ZE G d, d-e          ZFdgd2ZGdhd5ZHdid7ZI e2d89          djd=            ZJejK         G d> d?                      ZLe G d@ dA                      ZMdkdEZNdldKZOdmdNZPdndTZQdUdUdVdWdWdUdXZRdVZSdod\ZTdpd^ZUdqdaZVdqdbZWdrddZX G de df          ZYdS )szsTerminal 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)compat)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subtests passedsubtests failedzsubtests skipped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   )r4   r6   nargsr8   r:   r<   )super__init__)selfr4   r6   r8   r:   r<   	__class__s         M/root/projects/qq-shell/venv/lib/python3.11/site-packages/_pytest/terminal.pyrC   zMoreQuietAction.__init__W   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)getattrr6   setattrrQ   )rD   rH   rJ   rL   rN   	new_counts         rF   __call__zMoreQuietAction.__call__h   sL     Ity!44q8		49i000!)Wa881<	rG   )NFN)r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   N)
rH   rI   rJ   rK   rL   rM   rN   r=   r>   r?   )__name__
__module____qualname____doc__rC   rU   __classcell__)rE   s   @rF   r3   r3   P   su          
 
 
 
 
 
 
, %)
= 
= 
= 
= 
= 
= 
= 
= 
=rG   r3   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.
    r7   categoryletterz$str | tuple[str, Mapping[str, bool]]wordN)rW   rX   rY   rZ   __annotations__ rG   rF   r]   r]   u   s<           MMMKKK......rG   r]   rH   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)actionr8   r6   r<   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.)ri   r6   r8   r<   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.)r6   typer8   r<   z-rstorereportcharscharsa  Show extra test summary info as specified by chars: (f)ailed, (E)rror, (s)kipped, (x)failed, (X)passed, (p)assed, (P)assed with output, (a)ll except passed (p/P), or (A)ll. (w)arnings are enabled by default (see --disable-warnings), 'N' can be used to reset the list. (default: 'fE').)ri   r6   r8   metavarr<   z--disable-warningsz--disable-pytest-warningsdisable_warningszDisable warnings summary)r8   r6   ri   r<   z-lz--showlocals
showlocalsz/Show locals in tracebacks (disabled by default)z--no-showlocalszFHide locals in tracebacks (negate --showlocals passed through addopts))ri   r6   r<   z--tbstyletbstyleauto)ry   longshortnolinenativez5Traceback print mode (auto/long/short/line/native/no))rt   ri   r6   r8   choicesr<   z
--xfail-tbxfail_tbz1Show tracebacks for xfail (as long as --tb != no)z--show-captureshowcapture)r|   stdoutstderrlogallr   zOControls how captured stdout/stderr/log is shown on failed tests. Default: all.)ri   r6   r   r8   r<   z--fulltracez--full-tracez,Don't cut any tracebacks (default is to cut))ri   r8   r<   z--colorcolor)yesr|   ry   z#Color terminal output (yes/no/auto)z--code-highlightr   r|   zSWhether code should be highlighted (only if --color is also enabled). Default: yes.)r8   r   r<   console_output_stylezConsole output: "classic", or with additional progress information ("progress" (percentage) | "count" | "progress-even-when-capture-no" (forces progress even when capture=no)progress)r<   r8   zSpecify a verbosity level for test case execution, overriding the main level. Higher levels will provide more detailed information about each test case executed.)r<   )
getgroup
_addoption	addoptionr3   int_REPORTCHARS_DEFAULTaddinir   _add_verbosity_iniVERBOSITY_TEST_CASES)rH   groups     rF   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	     rG   configr   c                D   t          | t          j                  | j                            d           | j        j        s| j        j        r%fd}| j        j	        
                    d|           t          j        dk    r| j                            d           d S d S )Nterminalreporterc                    d                     t          t          |                    }                    d|z              d S )N z[traceconfig] )joinmapr7   
write_line)tagsargsmsgreporters      rF   mywriterz"pytest_configure.<locals>.mywriter'  s<    ((3sD>>**C 03 677777rG   zpytest:configwin32terminalprogress)TerminalReportersysr   pluginmanagerregisteroptiondebugtraceconfigtracerootsetprocessorplatformimport_plugin)r   r   r   s     @rF   pytest_configurer   "  s    
33H
!!(,>???} Bfm7 B	8 	8 	8 	8 	8 	&&AAA |w**+=>>>>> rG   r7   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   rr   lowerru   replace)r   rr   old_aliases
reportoptschars        rF   getreportoptr   3  s    }0K*KJ 
 
;::<<D3;; JJS[["JJS[[JJ##$J=) 1c.C.C:%

		' 1C:,=,=''R00
rG   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      rF   pytest_report_teststatusr   L  se    F} 	 >G{6667h;N;NFGMMOO++rG   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``).
    r7   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!   )rD   r   filenamelinenumrelpaths        rF   get_locationzWarningReport.get_locationn  s`    ; 	;? 	* $Hg!&":">X@V@VWWG)))))trG   )r   r   r>   r=   )	rW   rX   rY   rZ   ra   r   r   r   r   rb   rG   rF   r   r   \  ss           LLLF)-J----&*****     rG   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edd            ZddZddZddd!Zdd"Zd#d$d%d&dd+Zd#d,dd-Zd#d,dd.Zdd/Zdd2Zdd3Z	 	 ddd9Zddd<Zdd>ZddBZddEZddHZddKZddMZddPZ ddSZ!eddT            Z" e#dUV          ddX            Z$ddYZ%ddZZ&dd[Z'edd\            Z(dd]Z)dd_Z*dddaZ+ e#dUb          dde            Z,ddhZ-ddjZ.ddkZ/ddlZ0 e#dUV          ddp            Z1 e#dUV          ddq            Z2ddtZ3dduZ4ddvZ5ddzZ6d{ Z7d| Z8dd~Z9ddZ:ddZ;ddZ<ddZ=ddZ>ddZ?ddZ@ddZAddZBddddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLddZMddZNd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        | _        t1          j        |                                          | _        t7                      | _        t7                      | _        |                                 | _        tA          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   rr   r   rn   foldskipped	hasmarkupr   CallableBool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)rD   r   r   _pytests       rF   rC   zTerminalReporter.__init__{  s!   (,(,+-
'+.215<:D>88FF!X/6:'//!=5+ )$++--8847EE'25%%%#'#E#E#G#G *0.*:*:'7;(=A$$$rG   ,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.capturer|   r   progress-even-when-capture-noF	setupshow>   r   r   r   rg   times)r   	getoptiongetini)rD   cfgs     rF   r   z.TerminalReporter._determine_show_progress_info  s     K!!)T22d::""#9::./ / 5;  e44 	5;%%&<==???:G^^7G^^75rG   r   c                (    | j         j        j        }|S rV   )r   r   rh   )rD   	verbositys     rF   r  zTerminalReporter.verbosity  s    +3	rG   r;   c                    | j         dk    S r   )r  rD   s    rF   
showheaderzTerminalReporter.showheader  s    ~""rG   c                >    t          | j        j        j                  S rV   )r;   r   r   rk   r	  s    rF   rk   zTerminalReporter.no_header  s    DK&0111rG   c                >    t          | j        j        j                  S rV   )r;   r   r   rl   r	  s    rF   rl   zTerminalReporter.no_summary  s    DK&1222rG   c                n    | j         (| j                            t          j                  dk    S | j         S r   )r   r   get_verbosityr   r   r	  s    rF   
showfspathzTerminalReporter.showfspath  s2    #;,,V-HIIQNNrG   valuebool | Nonec                    || _         d S rV   )r   )rD   r  s     rF   r  zTerminalReporter.showfspath  s     rG   c                R    | j                             t          j                  dk    S r   )r   r  r   r   r	  s    rF   showlongtestinfoz!TerminalReporter.showlongtestinfo  s     {(()DEEIIrG   c                *    t          | j                  S )zUThe amount of items reported in the progress so far.

        :meta private:
        )lenr   r	  s    rF   reported_progressz"TerminalReporter.reported_progress  s     42333rG   r   r7   c                F    ddd                     ||          }|| j        v S )Nxr   )r+   r)   )getrr   )rD   r   s     rF   hasoptzTerminalReporter.hasopt  s-    3//33D$??t'''rG   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   r}   write)rD   r   r  r  fspath	relfspaths         rF   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1rG   r   prefixextrac                    | j         |k    r:| j                                         || _         | j                            |           |r | j        j        |fi | d| _         d S d S )N)r   r   r}   r$  )rD   r(  r)  kwargss       rF   write_ensure_prefixz$TerminalReporter.write_ensure_prefix  sw    ''HMMOOO!'DHNN6""" 	$DHN5++F+++!#D	$ 	$rG   c                X    | j         r"| j                                         d | _         d S d S rV   )r   r   r}   r	  s    rF   ensure_newlinezTerminalReporter.ensure_newline  s4     	&HMMOOO!%D	& 	&rG   F   
)r   marginline_sepcontentr   r2  r3  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$  )rD   r4  r   r2  r3  r  r9  wrappeds           rF   
wrap_writezTerminalReporter.wrap_write  s     !% >--M++g5(61 $#(	  
 
 /001w66e6v66666rG   r   c               0     | j         j        |fd|i| d S )Nr   )r   r$  )rD   r4  r   r  s       rF   r$  zTerminalReporter.write  s)    w66e6v66666rG   c               >    | j                             ||           d S )Nr>  )r   	write_raw)rD   r4  r   s      rF   rA  zTerminalReporter.write_raw  s#    7%00000rG   c                8    | j                                          d S rV   )r   r   r	  s    rF   r   zTerminalReporter.flush  s    rG   r}   str | bytesc                    t          |t                    st          |d          }|                                   | j        j        |fi | d S )Nr   )errors)
isinstancer7   r/  r   r}   )rD   r}   r  s      rF   r   zTerminalReporter.write_line  sZ    $$$ 	/tI...Dd%%f%%%%%rG   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.
        eraseFrP   r   r   N)popr   r   r  r7   r$  )rD   r}   r  rH  
fill_countfills         rF   rewritezTerminalReporter.rewrite  s     

7E** 	+c$ii7!;J#DDD4yytd{T)44V44444rG   septitler=   r   
int | Nonec                X    |                                    | j        j        |||fi | d S rV   )r/  r   rN  )rD   rN  rO  r   r  s        rF   	write_sepzTerminalReporter.write_sep-  s<     	S%55f55555rG   =kwc                .     | j         j        ||fi | d S rV   )r   rN  )rD   rO  rN  rT  s       rF   sectionzTerminalReporter.section7  s&    S%&&2&&&&&rG   r   c                ,     | j         j        |fi | d S rV   )r   r}   )rD   r   rT  s      rF   r}   zTerminalReporter.line:  s$    c  R     rG   r^   itemsSequence[Any]c                    || j         v}| j                             |g                               |           |r|                                  d S d S rV   )r   
setdefaultextend_set_main_color)rD   r^   rX  set_main_colors       rF   
_add_statszTerminalReporter._add_stats=  s^    !3
h++225999 	#  """""	# 	#rG   excreprr   c                    t          |                              d          D ]}|                     d|z              dS )Nr1  zINTERNALERROR> T)r7   r"  r   )rD   r`  r}   s      rF   pytest_internalerrorz%TerminalReporter.pytest_internalerrorC  sE    LL&&t,, 	6 	6DOO-45555trG   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.warningsrf  r   linenor   r_  )rD   rc  r   rf  r   r   warning_reports          rF   pytest_warning_recordedz(TerminalReporter.pytest_warning_recordedH  sp    
 	;:::::$-/EE
''88&!76
 
 
 	
^$455555rG   pluginr   c                `    | j         j        j        rd| }|                     |           d S d S )NzPLUGIN registered: )r   r   r   r   )rD   rk  r   s      rF   pytest_plugin_registeredz)TerminalReporter.pytest_plugin_registeredW  sC    ;) 	!000C OOC     	! 	!rG   Sequence[Item]c                2    |                      d|           d S )Nr*   )r_  )rD   rX  s     rF   pytest_deselectedz"TerminalReporter.pytest_deselected_  s    e,,,,,rG   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'  )rD   r   rq  r%  rh  domainr}   s          rF   pytest_runtest_logstartz(TerminalReporter.pytest_runtest_logstartb  s     "*   	%%ffffEED$$T2...JJLLLLL_ 	$$VR000JJLLLLL	 	rG   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%]rP   z ({})z ()[]r   )cyanr+  )+
_tests_ranr]   r   hookr   r^   r_   r`   rF  tupler_  hasattrr(   r'   r)   r   addr   r  r   r   r   r$  r   _is_last_item(_write_progress_information_if_past_edgert  rq  r-  _get_raw_skip_reasonr   r9  r  _format_trimmedr=  r#  r/  r|  gatewayid!_get_progress_information_messager   r   )rD   r   repr  r^   r_   r`   r  	was_xfailr}   running_xdistreasonavailable_widthformatted_reasons                 rF   pytest_runtest_logreportz)TerminalReporter.pytest_runtest_logreportp  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***%'"

rG   c                >    | j         J | j        | j         j        k    S rV   )r   r  testscollectedr	  s    rF   r  zTerminalReporter._is_last_item  s#    }(((%)EEErG   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#  )rD   results     rF   pytest_runtestloopz#TerminalReporter.pytest_runtestloop  s`       K%%f&ABBaGG( H& H ::<<<rG   c                   
  j         sJ  j         j        } j        dk    rN|rC 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 j        dz  |z  ddS dS )Nrg   z{:zd} [z/{}]z [  / z ]r  r   r(   r,   r'   r+   r)   r.   r   c                0    g | ]}|j         j        v|S rb   )r   r   ).0rrD   s     rF   
<listcomp>zFTerminalReporter._get_progress_information_message.<locals>.<listcomp>  s/       !($:W*W*W*W*W*WrG   c              3  :   K   | ]}|j         d          k    V  dS )r   N)rq  )r  icurrent_locations     rF   	<genexpr>zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  s@       " "67
1!11" " " " " "rG   c              3  P   K   | ] }|j         d          k    |j        dk    V  !dS )r   r   N)rq  r   )r  r  r  s     rF   r  zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  sH       " ":a=$444 '!4444" "rG   c              3  $   K   | ]}|j         V  d S rV   )r   r  r  s     rF   r  zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  s$      4T4T!QX4T4T4T4T4T4TrG   c              3  N   K   | ] }t          |t                    |j        V  !d S rV   )rF  r%   durationr  s     rF   r  zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  s3      VVqJq*<U<UV
VVVVVVrG   d   3dz%]r~  )r   r  r   r  r  r7   format_get_reports_to_displayrq  sumrX  r  r   updateformat_node_duration)rD   	collectedr   counter_formatformat_stringall_reportsnot_reportedtests_in_moduletests_completedlast_in_moduler  s   `         @rF   r  z2TerminalReporter._get_progress_information_message  s   }M0	#w.. A1!?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$  -444T4T|4T4T4TTTT+VVLVVVVV   2 	IH.4	AHHHHHyrG   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 )Nrg   r  /r  r  z 99h 59mr~  rP   r1  T)
_width_of_current_liner   r   r  r  r   _get_main_colorr  r   r$  )rD   r   	num_testsprogress_length	past_edge
main_color_r   s           rF   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);<<<<<	= 	=rG   c                    |                                  \  }}|                                 }| j        }| j        j        |z
  dz
  } | j        |                    |          fddi|di d S )NrP   r   T)r  r  r  r   r   r$  rjust)rD   r   r  r   r   rL  s         rF   r#  z:TerminalReporter._write_progress_information_filling_space  sw    ''))q4466'x!A%)
399T??@@$@5$-@@@@@rG   c                    | j         j        S )z%Return the width of the current line.)r   r9  r	  s    rF   r  z'TerminalReporter._width_of_current_line  s     x--rG   c                    |                                  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   boldrP   )r   r   r   rh   r$  r	  s    rF   pytest_collectionz"TerminalReporter.pytest_collection  s    ;;== 	A{!)Q..

,Dt
DDDDD /.['1,,JJ(4J@@@@@ -,rG   r$   c                0   |j         r|                     d|g           n|j        r|                     d|g           d |j        D             }| xj        t          |          z  c_        |                                 r|                                  d S d S )Nr.   r)   c                <    g | ]}t          |t                    |S rb   )rF  r   r  r  s     rF   r  z9TerminalReporter.pytest_collectreport.<locals>.<listcomp>$  s'    AAAqZ4-@-@AAAArG   )r'   r_  r)   r  r   r  r   report_collect)rD   r   rX  s      rF   pytest_collectreportz%TerminalReporter.pytest_collectreport  s    = 	1OOGfX....^ 	1OOIx000AAFMAAAc%jj(;;== 	"!!!!!	" 	"rG   r   c                T   | 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  }|                                 r3|                     |dd           |r|                     d           d S d S |                     |           d S )Nr   r.   r)   r*   z
collected zcollecting z itemrP   r   r   r  z errorz deselectedz skippedz	 selectedT)r  rH  r1  )r   r   rh   r   elapsedsecondsREPORT_COLLECTING_RESOLUTIONr   r   r  r   r  r   r7   r   rM  r$  r   )rD   r   rE  r)   r*   selectedr}   s          rF   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!!!!!rG   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 )NrS  ztest session startsTr  z	platform z -- Python pypy_version_infor      z[pypy--r  z	, pytest-z	, pluggy-r   pastebinz -- )r   
start_path)r   r   r   _session_startr
  rR  r   python_versionrk   r   rR   r   r   r7   r   _versionversionpluggy__version__r  r   r   r   
executabler   r  pytest_report_headerr   _write_report_lines_from_hooks)rD   r  verinfor   r  liness         rF   pytest_sessionstartz$TerminalReporter.pytest_sessionstartM  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 	7rG   r  Sequence[str | Sequence[str]]c                    t          |          D ]G}t          |t                    r|                     |           -|D ]}|                     |           Hd S rV   )reversedrF  r7   r   )rD   r  line_or_linesr}   s       rF   r  z/TerminalReporter._write_report_lines_from_hooksh  ss     &e__ 	* 	*M--- *....) * *DOOD))))*		* 	*rG   	list[str]c           	     x   d|j          g}|j        rZd}|j        rdd                    |j                   d}|                    dt          |j         |j                  z   |z              |j        t          j        j	        k    rP|
                    d          }|                    d                    d                    |                               |j                                        }|rH|                    d	                    d                    t          |                                         |S )
Nz	rootdir: r   z% (WARNING: ignoring pytest config in , z!)zconfigfile: 	testpathsztestpaths: {}zplugins: {})r!  inipath_ignored_config_filesr   appendr"   args_sourcer   
ArgsSource	TESTPATHSr  r  r   list_plugin_distinfo_plugin_nameversions)rD   r   r  warningr  
plugininfos         rF   r  z%TerminalReporter.pytest_report_headerr  s2   /fo//0> 	G+ nm$))FLhBiBimmmMMV_fn!M!MMPWW   !2!<<<#)==#=#=IMM/0091E1EFFGGG)>>@@
 	MM$$TYY/CJ/O/O%P%PQQ   rG   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  rX  collectonlyr  r   r'   !zcollection failures)r  r   r  pytest_report_collectionfinishr   rX  r  r  r   rh   r   r}   _printcollecteditemsr   r  rN  
toterminal)rD   r  r  r'   r  s        rF   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,,,,
	- 
	-- -- -rG   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  rP   r   N)r   r"  )r  items     rF   r  z8TerminalReporter._printcollecteditems.<locals>.<genexpr>  s9       Q Q4!2!24!;!;A!> Q Q Q Q Q QrG   : r   rP     objz{}{})r   r  r   r   r   sortedrX  r   r}   r   	listchainr  rJ  r  rR   inspectgetdoc
splitlinesr  )rD   rX  test_cases_verbositycountsnamerg   r  stackindentneeded_collectorscolr	  docr}   s                 rF   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rG   
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)r{  )r   r}   r   OKTESTS_FAILEDINTERRUPTEDUSAGE_ERRORNO_TESTS_COLLECTEDrl   r   r  pytest_terminal_summary
shouldfailrR  r7   _report_keyboardinterruptr   
shouldstopsummary_stats)rD   r  r  r  summary_exit_codess        rF   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rG   c              #    K   |                                   |                                  |                                  |                                  |                                  |                                  	 d V |                                  |                                  S # |                                  |                                  w xY wrV   )summary_errorssummary_failuressummary_xfailuressummary_warningssummary_passessummary_xpassesshort_test_summaryr	  s    rF   r   z(TerminalReporter.pytest_terminal_summary  s         	$EE##%%%!!#### ##%%%!!####s   <B( (*CexcinfoExceptionInfo[BaseException]c                <    |                     d          | _        d S )NT)funcargs)getreprr   )rD   r/  s     rF   pytest_keyboard_interruptz*TerminalReporter.pytest_keyboard_interrupt  s    '.'E'E$$$rG   c                @    | j         |                                  d S d S rV   )r   r"  r	  s    rF   pytest_unconfigurez#TerminalReporter.pytest_unconfigure  s+    '3**,,,,, 43rG   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)rz  )
r   	reprcrashr   rR  r   r   	fulltracer  r   r}   )rD   r`  r   s      rF   r"  z*TerminalReporter._report_keyboardinterrupt  s    .""" ,,,'sC   #%%{!+ ""48,,,,,!,,TX666V       &%rG   r%  rh  ru  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   r7   r>   c                2   j                             |           }ry|                              rd|d t                              }                    d          }|d                             dd          |d<   |d                    |          z  }|S )Nr  r   r   r  )r   cwd_relative_nodeidendswithr  r"  r   r   )r   r}   rL   ru  rD   s      rF   mkrelz-TerminalReporter._locationline.<locals>.mkrel   s    ;226::D )$--// )Ns6{{lN+c**"1I--c488q	(((KrG   r}  r  r   \z <- z
[location]r   )r   r7   r>   r7   )r  r"  r   r   SEPr"   r   r
   )rD   r   r%  rh  ru  r?  r  s   `   `  rF   rt  zTerminalReporter._locationline  s    	 	 	 	 	 	 	  	%--C~""v||D'9'9!'<eiA A ( ( vDNDLL I IIICSyrG   c                    |j         }|r|S dS )Nztest session)	head_line)rD   r  rC  s      rF   _getfailureheadlinez$TerminalReporter._getfailureheadline  s    M	 	~rG   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   )r7   longreprr9  AttributeError)rD   r  s     rF   _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)r  r  s     rF   r  z/TerminalReporter.getreports.<locals>.<listcomp>'  s'    SSSa71k;R;RSSSSrG   rb   r   r  )rD   r  s     rF   
getreportszTerminalReporter.getreports&  s&    SS4:>>$33SSSSrG   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>   r7   c                ~   g }| D ]3}|                     j                  }|r|                    |           4t          |          dk     r(d                    t          t          |                    S t          d |D                       }d                    d |                                D                       S )N
   r1  c              3  h   K   | ]-}t          |                              d d          d         V  .dS r  )r7   r"  )r  locs     rF   r  zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>F  sL       - -36CHHNN4++A.- - - - - -rG   c              3  Z   K   | ]&\  }}d                      |||dk    rdnd          V  'dS )z{}: {} warning{}rP   r   r   N)r  )r  kvs      rF   r  zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>I  sX       ! !1 '--a1q55CCbII! ! ! ! ! !rG   )	r   r   r  r  r   r   r7   r   rX  )rP  	locationsr   rq  counts_by_filenamerD   s        rF   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 : :! ! !   rG   zwarnings summary (final)zwarnings summaryrS  TF)rz  r  r1  c              3      K   | ]	}d |z   V  
dS )r  Nrb   r  s     rF   r  z4TerminalReporter.summary_warnings.<locals>.<genexpr>U  s&      (A(Aa(A(A(A(A(A(ArG   zG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)rP  rQ  r>   r7   )r  r   r  r   r  r[  r   r  rR  rX  r   r}   r  r   rstrip)rD   all_warningsr   warning_reportsreports_grouped_by_messagewrr[  rO  r   message_reportsmaybe_locationr  indenteds   `            rF   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	rG   c                4    |                      ddd           d S )Nr(   PASSESPsummary_passes_combinedr	  s    rF   r,  zTerminalReporter.summary_passes_  s     $$Xx=====rG   c                4    |                      ddd           d S )Nr,   XPASSESXrh  r	  s    rF   r-  z TerminalReporter.summary_xpassesb  s     $$Y	3?????rG   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 )Nr|   rS  r  T)ry  r  )r   r   rx   r  rN  rR  sectionsrD  _outrep_summary_handle_teardown_sectionsr   )rD   rm  rn  ro  rP  r  r   s          rF   ri  z(TerminalReporter.summary_passes_combinede  s     ;%--{{:&& 
?,0OOM,J,J FsI..." ? ?C| 2"66s;;sCt$GGG,,S111223:>>>> .-
? 
?
? ?rG   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     rF   r  z:TerminalReporter._get_teardown_reports.<locals>.<listcomp>w  s<     
 
 
{j((V]f-D-D -D-D-DrG   )rN  )rD   r   rP  s    ` rF   _get_teardown_reportsz&TerminalReporter._get_teardown_reportsu  s?    //"%%
 
 
 
!
 
 
 	
rG   c                `    |                      |          D ]}|                     |           d S rV   )rw  print_teardown_sections)rD   r   r   s      rF   rs  z*TerminalReporter._handle_teardown_sections}  s@    0088 	1 	1F((0000	1 	1rG   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 )Nr|   r   r   r  r  r1  )r   r   r   rq  r   rN  r}   rD   r  r   secnamer4  s        rF   ry  z(TerminalReporter.print_teardown_sections  s    k(4$F # 	' 	'GWe##7(B(BW$$S'***233<4''%crclGg&&&	' 	'rG   c                X    | j         j        j        }|                     dd|           d S )Nr'   FAILURESrw   )r   r   rx   summary_failures_combined)rD   rw   s     rF   r)  z!TerminalReporter.summary_failures  s0    "*&&x5&IIIIIrG   c                    | j         j        j        }|r| j         j        j        nd}|                     dd|           d S )Nr|   r+   	XFAILURESr  )r   r   r   rx   r  )rD   show_tbrw   s      rF   r*  z"TerminalReporter.summary_xfailures  sG    +$-.5?"**4&&y+U&KKKKKrG   )ro  rw   c                  |dk    r|r|                      |          r|                     |          }|sd S |                     d|           |dk    rF|D ]A}|                     |          }|                     |           |                     |           Bd S |D ]c}|                     |          }|                     d|dd           |                     |           |                     |j                   `d S d S d S )Nr|   rS  r}   r  Tr{  r  )	r  rN  rR  rI  rr  r   rD  rs  r   )	rD   rm  rn  rw   ro  rP  r  r}   r   s	            rF   r  z*TerminalReporter.summary_failures_combined  sF    D== CZ!8!8 C,0OOM,J,J FsI...F??& . .#11#66,,S111----. .
  ' C C"66s;;sCTEEE,,S11166szBBBB! =C CC CrG   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 )Nr|   r.   rS  ERRORSr   zERROR collecting z	ERROR at z of r  Tr  )	r   r   rx   rN  rR  r   rD  r   rr  )rD   rP  r  r   s       rF   r(  zTerminalReporter.summary_errors  s    ;%--(,(@(@G NN3)))z'* * *..s338y((-3CC9ch99C99CsCT===$$S)))) .-
* *rG   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 )Nr|   r   r  r  r1  )r  r   r   r   r   rq  rN  r}   r{  s        rF   rr  z TerminalReporter._outrep_summary  s    tx   k(4$F # 	# 	#GWe##7(B(BHLLg&&&rss|t##!#2#,HMM'""""	# 	#rG   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[0mrS  r   r   )r  r  r  build_summary_stats_liner   r   r  r  r  r   format_session_durationr  r>  rR  r   )rD   session_durationpartsr  
line_partsdisplay_sepr   textr  with_markupr   main_markupr  duration_with_markupmarkup_for_end_seps                  rF   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//;/////rG   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  statr7   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   r}   rD   s          rF   show_simplez8TerminalReporter.short_test_summary.<locals>.show_simple  s    Z^^D"--F [F # #'++D2IJJ7CE4=  T""""# #rG   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_markuprx  r7   r  )
r  r+   r  verbose_wordverbose_markupmarkup_wordr   r}   r  rD   s
            rF   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""""# #rG   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   r}   r  rD   s
            rF   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""""
# 
#rG   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%  rh  r  rD   s              rF   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rG   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   r}  r  )r   r  rG  rF  r  r  r  r   r  r   r  r  r7   r  )
r  r)   r  r  r  r  r   r}   r  rD   s
            rF   show_skipped_unfoldedzBTerminalReporter.short_test_summary.<locals>.show_skipped_unfolded1  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""""# #rG   c                F    j         r |            d S  |            d S rV   )r   )r  rD   r  r  s    rF   show_skippedz9TerminalReporter.short_test_summary.<locals>.show_skippedD  s<     -##E*****%%e,,,,,rG   r'   )r  r(   r.   )r  rl  fr   pr   rS  zshort test summary infoT)r  r  )r  r  r  r7   r>   r?   )r  r  r>   r?   )rr   r	   r  rR  r   )rD   r  r  r  r  REPORTCHAR_ACTIONSr  r   ri   r}   r  r  s   `         @@rF   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 & &%%%%	& 	&& &rG   tuple[str, list[str]]c                    | j         | j        | j        r&|                                  | j         sJ | j        sJ | j         | j        fS rV   )r   r   r  r]  r	  s    rF   r  z TerminalReporter._get_main_color^  s\    #t'8'@DDV'@  """####$$$$!222rG   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.   r{  r-   r,   rz  r(   ry  )r   r  )rD   r  r   r  s       rF   _determine_main_colorz&TerminalReporter._determine_main_colore  sl    
u5 0 0JJ5  I$6$6:K$6!JJd&8 JJ!JrG   c                    g }| j         D ]&}|r"|t          vr||vr|                    |           't          t                    |z   | _        |                     t          |                    | _        d S rV   )r   KNOWN_TYPESr  listr   r  r;   r   )rD   unknown_types
found_types      rF   r]  z TerminalReporter._set_main_colorq  s    #%* 	5 	5J 5[00Z}5T5T!((444 --=55d=6I6IJJrG   -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    rF   r  z)TerminalReporter.build_summary_stats_linez  s@    ( ;  // 	;>>@@@88:::rG   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)rR   r  s     rF   r  z<TerminalReporter._get_reports_to_display.<locals>.<listcomp>  s*    PPPaga1H$&O&OPPPPrG   rM  )rD   r  rP  s      rF   r  z(TerminalReporter._get_reports_to_display  s+    *..b))PP7PPPPrG   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)	rD   r  known_typesr  r  rP  rg   r   r  s	            rF   r  z1TerminalReporter._build_normal_summary_stats_line  s     #'"6"6"8"8
K 	H 	HC22377G HG'++C1HIIvu
/BCg	%(=(==vFGGG 	H$'>&EFGEj  rG   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 collectedrz  Try  z%d %s collectedtestzno tests collected (z deselected)r  z tests collected (r  )r  r  r   r  r  )rD   r*   rE  r  r  collected_outputall_tests_were_deselectedr  s           rF   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  rG   rV   )r   r   r   r   r>   r?   )r>   r   )r>   r   )r>   r;   )r  r  r>   r?   )r   r7   r>   r;   )r   r7   r  r7   r  r;   r>   r?   r  )r(  r7   r)  r7   r>   r?   r>   r?   )r4  r7   r   r;   r2  r   r3  r7   r  r;   r>   r?   )r4  r7   r   r;   r  r;   r>   r?   )r4  r7   r   r;   r>   r?   )r}   rC  r  r;   r>   r?   )r}   r7   r  r;   r>   r?   )NN)
rN  r7   rO  r=   r   rP  r  r;   r>   r?   )rS  )rO  r7   rN  r7   rT  r;   r>   r?   )r   r7   rT  r;   r>   r?   )r^   r7   rX  rY  r>   r?   )r`  r   r>   r;   )rc  rd  r   r7   r>   r?   )rk  r   r>   r?   )rX  rn  r>   r?   )r   r7   rq  rr  r>   r?   r   r%   r>   r?   )r>   r  )r>   r7   )r   r$   r>   r?   )F)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/  r0  r>   r?   )
r   r7   r%  r7   rh  rP  ru  r7   r>   r7   )r  r7   )rm  r7   rn  r7   ro  r7   r>   r?   )r   r7   r>   rt  )r   r7   r>   r?   )r  r%   r>   r?   )
rm  r7   rn  r7   rw   r7   ro  r=   r>   r?   )r  r#   r>   r?   )r>   r  )r  r;   r>   r7   )r>   r  )r  r7   r>   r  )OrW   rX   rY   rC   r   propertyr  r
  rk   rl   r  setterr  r  r  r'  r-  r/  r=  r$  rA  r   r   rM  rR  rV  r}   r_  rb  rj  rm  rp  rv  r  r  r   r  r  r  r#  r  r  r  r  r  r  r  r  r   r&  r   r4  r6  r"  rt  rD  rI  rN  r+  r,  r-  ri  rw  rs  ry  r)  r*  r  r(  rr  r$  r.  r  r  r]  r  r  r  r  rb   rG   rF   r   r   y  sb       B B B B B<   2    X # # # X# 2 2 2 X2 3 3 3 X3       X 
 ! ! ! ! J J J XJ 4 4 4 X4( ( ( (	2 	2 	2 	2$ $ $ $ $& & & & 7 7 7 7 7 7, 49 7 7 7 7 7 7 8= 1 1 1 1 1 1   & & & &5 5 5 5* ! $	6 6 6 6 6' ' ' ' '! ! ! !# # # #   
6 6 6 6! ! ! !- - - -   J J J JX F F F XF Xd   + + + +Z= = = = 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4* * * *# # # ##0 #0 #0 #0Jj& j& j& j&X3 3 3 3
 
 
 
K K K K; ; ; ;2Q Q Q Q
! ! ! !&! ! ! ! ! !rG   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          rF   r  r    si    ''
33F<<%%LD5 yy5!1!1y==d{\))rG   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.
    r1  r  Nz...r   )findr   r  r  )r  r   r  r  ellipsisformat_widths         rF   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==rG   word_markupdict[str, bool]c                   |                     | |          \  }} |j        |fi |}t          || |          }| d| }t          |          }		 t	          |j        t                    r|j        }
n|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   r}  r  z - {})r  r  r  r   rF  rG  r7   r9  r   r   r   rh   ro   r   r  rH  )r   r  r  r  r  r  r`   r|  r}   
line_widthr   r  s               rF   r  r    s,    $'#D#D$ $ L. 29\44^44D#B44DTD$JclC(( 	1,CC ,(0C
 OO	A%}499-3  :++CC lZ7O!'3@@C?CKD     Ks   3C 
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)rG  rF  r  r  r"   r
   rR   r   r[  r  rX  )r   r)   deventr%  rh  r  r  r  rL   eventss              rF   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))****MrG   r{  rz  ry  )r'   r.   r-   r(   r/   r0   rg   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-   r  rP   r   )r   )rg   r  s     rF   r  r  =  sH    000d{
 <<
I..D

$**44rG   r  c                    g }| D ]N\  }}|j          d|j         }|                    d          r
|dd          }||vr|                    |           O|S )Nr  zpytest-   )project_namer  r  r  )r  rL   rk  distr  s        rF   r  r  J  sv    F"    #44dl44??9%% 	8DvMM$MrG   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 (r  )datetime	timedeltar   )r  dts     rF   r  r  X  sP    ||     G555'''"''''rG   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?rP   r  r   i  z.0fzm zh mrb   r  s    rF   r  r  a  sJ    ,7W$,,,,,,7W$,,,,,,7W$,,,,,~~)7T>)))))}})7T>))))){{)7T>)))))||!7!!!!!~~;7b=;;;";;;;;Cw$CCCw~"&<CCCCCrG   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.
    rx  zreason: Nr  Skippedr   )r  rx  r  r  r)   rF  rG  r  )r   r  r  s      rF   r  r  x  s    
 vz"" Z(( 	/C
OO--.F~&/5111111f[)) 	C,,../FFy  FrG   c                      e Zd ZdZddZ	 dddZedd            Zedd            Zedd            Z	edd            Z
dS )TerminalProgressPlugina#  Terminal progress reporting plugin using OSC 9;4 ANSI sequences.

    Emits OSC 9;4 sequences to indicate test progress to terminal
    tabs/windows/etc.

    Not all terminal emulators support this feature.

    Ref: https://conemu.github.io/en/AnsiEscapeCodes.html#ConEmu_specific_OSC
    trr   r>   r?   c                0    || _         d | _        d| _        d S )NF)_trr   _has_failures)rD   r  s     rF   rC   zTerminalProgressPlugin.__init__  s    (,"rG   Nstate?Literal['remove', 'normal', 'error', 'indeterminate', 'paused']r   rP  c                    |d|cxk    rdk    sn J |xdk    r d}n@xdk    r |J d| d}n.xd	k    r |d
| d}nd}nxdk    r d}ndk    r|d| d}nd}	 | j                             |d           dS )a  Emit OSC 9;4 sequence for indicating progress to the terminal.

        :param state:
            Progress state to set.
        :param progress:
            Progress value 0-100. Required for "normal", optional for "error"
            and "paused", otherwise ignored.
        Nr   r  removez
]9;4;0;\normalz]9;4;1;z\r.   z]9;4;2;z
]9;4;2;\indeterminatez
]9;4;3;\pausedz]9;4;4;z
]9;4;4;\Tr>  )r  rA  )rD   r  r   sequences       rF   _emit_progressz%TerminalProgressPlugin._emit_progress  s     1#7#7#7#7C#7#7#7#7#7#7 .+++9999'=X===HH2HH .'=X===HH2HH8400000rG   r  r&   c                >    || _         |                     d           d S )Nr  )r   r  )rD   r  s     rF   r  z*TerminalProgressPlugin.pytest_sessionstart  s#    O,,,,,rG   c                h    | j         J | j         j        dk    r|                     dd           d S d S )Nr   r
  )r   r  r  r	  s    rF   r  z/TerminalProgressPlugin.pytest_collection_finish  sD    }(((='!++!,,,,, ,+rG   r   r%   c                    |j         rd| _        |j        dk    rd S | j        J | j        j        }|dk    rC| j        j        }t          |dz  |z  d          }|                     | j        rdnd|           d S d S )NTcallr   r  r.   r
  )	r'   r  r   r   r  r  r  minr  )rD   r   r  reportedr   s        rF   r  z/TerminalProgressPlugin.pytest_runtest_logreport  s    = 	&!%D ;&  F }(((M0	q==x1H8c>Y6<<H4+= K8XVVVVV =rG   c                0    |                      d           d S )Nr	  )r  r	  s    rF   r&  z+TerminalProgressPlugin.pytest_sessionfinish  s    H%%%%%rG   )r  r   r>   r?   rV   )r  r  r   rP  r>   r?   r  r  r  )rW   rX   rY   rZ   rC   r  r   r  r  r  r&  rb   rG   rF   r  r    s         # # # #  $$1 $1 $1 $1 $1L - - - X-
 - - - X- W W W XW  & & & X& & &rG   r  )rH   r   r>   r?   )r   r   r>   r?   )r   r   r>   r7   )r   r#   r>   r   )r  r   r   r   r  r#   )r  r7   r   r7   r  r   r>   r=   )
r   r   r  r#   r  r   r  r  r>   r7   )r   r
   r)   r  r>   r  )rg   r   r  r7   r>   r  )r>   r  )r  r  r>   r7   )r   r%   r>   r7   )ZrZ   
__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   r   _pytest._coder   _pytest._code.coder   _pytest._ior   _pytest._io.wcwidthr   _pytest._version_pytest.compatr   r   r   r   r   r   _pytest.config.argparsingr   _pytest.nodesr   r    _pytest.pathlibr!   r"   _pytest.reportsr#   r$   r%   _pytest.mainr&   r  r  r   Actionr3   r]   r   r   r   r   	dataclassr   r   r  r  r  r  r  r  r  r  r  r  r  r  rb   rG   rF   <module>r+     ss   
 # " " " " "        $ $ $ $ $ $ % % % % % % # # # # # # $ $ $ $ $ $                    



                                                                      ' ' ' ' ' ' , , , , , , & & & & & & ( ( ( ( ( (     ( ( ( ( ( ( ( ( ( ( ( ( ! ! ! ! ! ! # # # # # # # # # # # # , , , , , ,             ( ( ( ( ( ( ' ' ' ' ' ' & & & & & & ) ) ) ) ) ) & & & & & &  %$$$$$$  #   "= "= "= "= "=ho "= "= "=J/ / / / / / / /(V V V Vr? ? ? ?"   2 
$, , , ,        8 O! O! O! O! O! O! O! O!d"      2! ! ! !H   @   # 
5 
5 
5 
5   ( ( ( (D D D D.   *V& V& V& V& V& V& V& V& V& V&rG   