
    ESj                    r   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j                        ZE G d, d-e      ZFdGd.ZGdHd/ZHdId0ZI e2d12      dJd3       ZJej                   G d4 d5             ZLe G d6 d7             ZMdKd8ZNdLd9ZO	 	 	 	 	 	 	 	 	 	 dMd:ZP	 	 	 	 	 	 dNd;ZQd<d<d=d>d>d<d?ZRd=ZSdOd@ZTdPdAZUdQdBZVdQdCZWdRdDZX G dE dF      ZYy)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                  `     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.
    c                0    t         |   ||d|||       y )Nr   )option_stringsdestnargsdefaultrequiredhelp)super__init__)selfr5   r6   r8   r9   r:   	__class__s         a/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/_pytest/terminal.pyr<   zMoreQuietAction.__init__W   s)     	) 	 	
    c                    t        || j                  d      dz
  }t        || j                  |       t        |dd      dz   |_        y )Nr      quiet)getattrr6   setattrrC   )r=   parser	namespacevaluesoption_string	new_counts         r?   __call__zMoreQuietAction.__call__h   s@     Ityy!4q8		499i0!)Wa81<	r@   )NFN)r5   zSequence[str]r6   strr8   objectr9   boolr:   
str | NonereturnNoneN)
rF   zargparse.ArgumentParserrG   zargparse.NamespacerH   zstr | Sequence[object] | NonerI   rO   rP   rQ   )__name__
__module____qualname____doc__r<   rK   __classcell__)r>   s   @r?   r3   r3   P   s     
%
 
 	

 
 
 

, %)
='
= &
= .	
=
 "
= 

=r@   r3   c                  0    e Zd ZU dZded<   ded<   ded<   y)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.
    rL   categoryletterz$str | tuple[str, Mapping[str, bool]]wordN)rS   rT   rU   rV   __annotations__ r@   r?   rY   rY   u   s     MK
..r@   rY   c           	        | j                  ddd      }|j                  ddddd	d
       |j                  ddddd       |j                  ddddd       |j                  ddddd       |j                  ddddd       |j                  ddt        dd	d       |j                  d d	t        dd!"       |j                  d#d$d%d&t
        d'd()       |j                  d*d+dd,dd-.       |j                  d/d0dd1dd2       |j                  d3dd1d45       |j                  d6d7d%d8d9g d:d;<       |j                  d=dd>dd?       |j                  d@d%dAg dBdCdDE       |j                  dFdGdddHI       |j                  dJdKd%dKd9g dLdM<       |j                  dNdOdOdPgdQR       | j                  dSdTdUV       t        j                  | t        j                  dWX       y )YNz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.)re   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-rz--report-chars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').)re   r6   r8   metavarr:   z--disable-warningsz--disable-pytest-warningsdisable_warningszDisable warnings summary)r8   r6   re   r:   z-lz--showlocals
showlocalsz/Show locals in tracebacks (disabled by default)z--no-showlocalszFHide locals in tracebacks (negate --showlocals passed through addopts))re   r6   r:   z--tbstyletbstyleauto)ru   longshortnolinenativez5Traceback print mode (auto/long/short/line/native/no))rp   re   r6   r8   choicesr:   z
--xfail-tbxfail_tbz1Show tracebacks for xfail (as long as --tb != no)z--show-captureshowcapture)rx   stdoutstderrlogallr   zOControls how captured stdout/stderr/log is shown on failed tests. Default: all.)re   r6   r{   r8   r:   z--fulltracez--full-tracez,Don't cut any tracebacks (default is to cut))re   r8   r:   z--colorcolor)yesrx   ru   z#Color terminal output (yes/no/auto)z--code-highlightr   rx   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)rF   groups     r?   pytest_addoptionr      s   OO0+YOOE	!   
OO   
OO   
OO:   
OO"L   
!   
OO)   
$>   
OO#'   
>   
OOU	   
OOAD   
OO@   
OO8   
OO;   
OO%2   
OO	   MM)    ##b	r@   c                ~   t        | t        j                        | j                  j	                  d       | j
                  j                  s| j
                  j                  r+fd}| j                  j                  j                  d|       t        j                  dk(  r| j                  j                  d       y y )Nterminalreporterc                l    dj                  t        t        |            }j                  d|z          y )N z[traceconfig] )joinmaprL   
write_line)tagsargsmsgreporters      r?   mywriterz"pytest_configure.<locals>.mywriter(  s+    ((3sD>*C 03 67r@   zpytest:configwin32terminalprogress)TerminalReportersysr~   pluginmanagerregisteroptiondebugtraceconfigtracerootsetprocessorplatformimport_plugin)configr   r   s     @r?   pytest_configurer   #  s    

3H
!!(,>?}}fmm77	8 	&&A ||w**+=> r@   c                R   | j                   j                  }ddh}d}|D ]8  }||v r|j                         }|dk(  rd}|dk(  rd}'|dk(  rd}/||vs4||z  }: | j                   j                  sd	|vrd	|z   }|S | j                   j                  rd	|v r|j	                  d	d      }|S )
NFS asxXEfAPpsxXEfNw)r   rn   lowerrq   replace)r   rn   old_aliases
reportoptschars        r?   getreportoptr   4  s    }}00K*KJ;::<D3; JS["JS[J#$J  ==))c.C:%
  
	'	'C:,=''R0
r@   Ttrylastc                    d}| j                   rd}n| j                  rd}| j                  }| j                  dv r	|dk(  rd}d}|||j	                         fS )Nr   .s)collectsetupteardownr'   r.   E)r(   r)   outcomewhenupper)reportr[   r   s      r?   pytest_report_teststatusr   M  sY    F}}	>>G{{667h;NFGMMO++r@   c                  N    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y)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``).
    rL   messageNrO   nodeidztuple[str, int] | None
fslocationTr   count_towards_summaryc                    | j                   r| j                   S | j                  r?| j                  \  }}t        |j                  j                  t        |            }| d| S y)zSReturn the more user-friendly information about the location of a warning, or None.:N)r   r   r"   invocation_paramsdirr!   )r=   r   filenamelinenumrelpaths        r?   get_locationzWarningReport.get_locationo  sY    ;;;;?? $Hg!&":":">">X@VWGYay))r@   )r   r   rP   rO   )	rS   rT   rU   rV   r]   r   r   r   r   r^   r@   r?   r   r   ]  s3     LFJ)-J&-&*8*r@   r   c                     e Zd ZdVdWdZ	 	 dXdZedYd       ZedZd       ZedZd       ZedZd       Z	edZd       Z
e
j                  d[d	       Z
edZd
       ZedYd       Zd\dZd]dZd^d_dZd`dZdddd	 	 	 	 	 	 	 	 	 	 	 dadZdddbdZdddcdZd`dZdddZdedZ	 	 df	 	 	 	 	 	 	 	 	 dgdZdhdidZdjdZdkdZdldZ	 	 	 	 	 	 dmd Zdnd!Zdod"Z	 	 	 	 	 	 dpd#Z dqd$Z!edZd%       Z" e#d&'      drd(       Z$dsd)Z%d`d*Z&d`d+Z'edYd,       Z(d`d-Z)dtd.Z*dudvd/Z+ e#d&0      dwd1       Z,	 	 	 	 dxd2Z-dyd3Z.dwd4Z/dod5Z0 e#d&'      	 	 	 	 	 	 dzd6       Z1 e#d&'      d{d7       Z2d|d8Z3d`d9Z4d`d:Z5	 	 	 	 	 	 	 	 	 	 d}d;Z6d< Z7d= Z8d~d>Z9dd?Z:d`d@Z;d`dAZ<d`dBZ=	 	 	 	 	 	 	 	 ddCZ>ddDZ?ddEZ@ddFZAd`dGZBd`dHZCddI	 	 	 	 	 	 	 	 	 ddJZDd`dKZEddLZFd`dMZGd`dNZHddOZIddPZJd`dQZKddRZLddSZM	 	 ddTZN	 	 ddUZOy)r   Nc                   dd l }|| _        d| _        d | _        d | _        i | _        d | _        d | _        |j                  j                  | _
        |t        j                  }|j                  j                  ||      | _        | j                  j                  | _        d | _        t%        |      | _        |j(                  j*                  | _        | j                  j.                  | _        t1        j2                  |j5                               | _        t7               | _        t7               | _        | j=                         | _        tA        jB                         | _"        d | _#        d | _$        y Nr   )%_pytest.configr   _numcollected_session_showfspathstats_main_color_known_typesr   r   	startpathr   r~   create_terminal_writer_tw	fullwidth_screen_widthcurrentfspathr   rn   r   rj   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)r=   r   file_pytests       r?   r<   zTerminalReporter.__init__|  s   (,(,+-
'+.21155<::D>>88F!XX//6:'/!==55++ ))$++-847E'25%%#'#E#E#G *0..*:'7;(=A$r@   c                   | j                   j                  dd      dk(  r| j                   j                  d      dk7  ry| j                   j                  dd      ry| j                   j                  d      }|dv ry|d	k(  ry	|d
k(  ry
y)zRReturn whether we should display progress information based on the current config.capturerx   r   progress-even-when-capture-noF	setupshow>   r   r   r   rc   times)r   	getoptiongetini)r=   cfgs     r?   r   z.TerminalReporter._determine_show_progress_info  s     KK!!)T2d:""#9:./ ;;  e4;;%%&<=??G^G^r@   c                F    | j                   j                  j                  }|S rR   )r   r   rd   )r=   	verbositys     r?   r   zTerminalReporter.verbosity  s    ++33	r@   c                     | j                   dk\  S r   )r   r=   s    r?   
showheaderzTerminalReporter.showheader  s    ~~""r@   c                T    t        | j                  j                  j                        S rR   )rN   r   r   rg   r  s    r?   rg   zTerminalReporter.no_header  s    DKK&&0011r@   c                T    t        | j                  j                  j                        S rR   )rN   r   r   rh   r  s    r?   rh   zTerminalReporter.no_summary  s    DKK&&1122r@   c                    | j                   ,| j                  j                  t        j                        dk\  S | j                   S r   )r   r   get_verbosityr   r   r  s    r?   
showfspathzTerminalReporter.showfspath  s:    #;;,,V-H-HIQNNr@   c                    || _         y rR   )r   )r=   values     r?   r  zTerminalReporter.showfspath  s
     r@   c                Z    | j                   j                  t        j                        dkD  S r   )r   r  r   r   r  s    r?   showlongtestinfoz!TerminalReporter.showlongtestinfo  s"    {{(()D)DEIIr@   c                ,    t        | j                        S )zUThe amount of items reported in the progress so far.

        :meta private:
        )lenr   r  s    r?   reported_progressz"TerminalReporter.reported_progress  s     42233r@   c                H    dddj                  ||      }|| j                  v S )Nxr   )r+   r)   )getrn   )r=   r   s     r?   hasoptzTerminalReporter.hasopt  s*    3/33D$?t''''r@   c                   | j                   j                  |j                  dd      d   z  }| j                  || j                  k7  r}| j                  | j                  r| j                          || _        t        | j                  |      }| j                  j                          | j                  j                  |dz           | j                  j                  |fddi| y )N::rB   maxsplitr   r   flushT)r   rootpathsplitr   r   )_write_progress_information_filling_spacer"   r   r   ry   write)r=   r   resmarkupfspath	relfspaths         r?   write_fspath_resultz$TerminalReporter.write_fspath_result  s    %%TA(Fq(II%43E3E)E!!-$2J2J>>@!'D#DNNF;IHHMMOHHNN9s?+s1$1&1r@   c                    | j                   |k7  r<| j                  j                          || _         | j                  j                  |       |r% | j                  j                  |fi | d| _         y y )N)r   r   ry   r  )r=   prefixextrakwargss       r?   write_ensure_prefixz$TerminalReporter.write_ensure_prefix  s\    'HHMMO!'DHHNN6"DHHNN5+F+!#D r@   c                `    | j                   r"| j                  j                          d | _         y y rR   )r   r   ry   r  s    r?   ensure_newlinezTerminalReporter.ensure_newline  s%    HHMMO!%D r@   F   
)r  marginline_sepc                   | j                   j                  }|j                  t        j                  d|z  |z   | j
                  |z
  dd            }||d } | j                   j                  |fd|i| y)z+Wrap message with margin for progress info.r   TF)widthdrop_whitespacereplace_whitespaceNr  )r   width_of_current_liner   textwrapwrapr   r  )r=   contentr  r,  r-  r  r2  wrappeds           r?   
wrap_writezTerminalReporter.wrap_write  s|     !% > >--MM++g5((61 $#(	
 /01w6e6v6r@   r  c               B     | j                   j                  |fd|i| y )Nr  )r   r  )r=   r5  r  r  s       r?   r  zTerminalReporter.write  s    w6e6v6r@   c               >    | j                   j                  ||       y )Nr8  )r   	write_raw)r=   r5  r  s      r?   r;  zTerminalReporter.write_raw  s    7%0r@   c                8    | j                   j                          y rR   )r   r  r  s    r?   r  zTerminalReporter.flush  s    r@   c                    t        |t              st        |d      }| j                           | j                  j                  |fi | y )Nr   )errors)
isinstancerL   r)  r   ry   )r=   ry   r  s      r?   r   zTerminalReporter.write_line  s;    $$tI.Dd%f%r@   c                    |j                  dd      }|r+| j                  j                  t        |      z
  dz
  }d|z  }nd}t	        |      } | j                  j
                  d|z   |z   fi | y)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.
        eraseFrB   r   r   N)popr   r   r  rL   r  )r=   ry   r  rA  
fill_countfills         r?   rewritezTerminalReporter.rewrite  sl     

7E*++c$i7!;J#DD4ytd{T)4V4r@   c                b    | j                           | j                  j                  |||fi | y rR   )r)  r   sep)r=   rH  titler   r  s        r?   	write_sepzTerminalReporter.write_sep.  s+     	S%5f5r@   c                @     | j                   j                  ||fi | y rR   )r   rH  )r=   rI  rH  kws       r?   sectionzTerminalReporter.section8  s    S%&2&r@   c                >     | j                   j                  |fi | y rR   )r   ry   )r=   r   rL  s      r?   ry   zTerminalReporter.line;  s    c R r@   c                    || j                   v}| j                   j                  |g       j                  |       |r| j                          y y rR   )r   
setdefaultextend_set_main_color)r=   rZ   itemsset_main_colors       r?   
_add_statszTerminalReporter._add_stats>  sC    !3

h+2259  " r@   c                j    t        |      j                  d      D ]  }| j                  d|z           y)Nr+  zINTERNALERROR> T)rL   r  r   )r=   excreprry   s      r?   pytest_internalerrorz%TerminalReporter.pytest_internalerrorD  s0    L&&t,DOO-45 -r@   c                    ddl m} |j                  |j                  f} ||      }t	        |||      }| j                  d|g       y )Nr   )warning_record_to_str)r   r   r   r-   )_pytest.warningsrZ  r   linenor   rU  )r=   warning_messager   rZ  r   r   warning_reports          r?   pytest_warning_recordedz(TerminalReporter.pytest_warning_recordedI  sK    
 	;$--/E/EE
'8&!76
 	
^$45r@   c                r    | j                   j                  j                  rd| }| j                  |       y y )NzPLUGIN registered: )r   r   r   r   )r=   pluginr   s      r?   pytest_plugin_registeredz)TerminalReporter.pytest_plugin_registeredX  s4    ;;))'x0C OOC  *r@   c                (    | j                  d|       y )Nr*   )rU  )r=   rS  s     r?   pytest_deselectedz"TerminalReporter.pytest_deselected`  s    e,r@   c                    |\  }}}| j                   r7| j                  ||||      }| j                  |d       | j                          y | j                  r#| j                  |d       | j                          y y )Nr   )r  _locationliner'  r  r  r!  )r=   r   locationr  r\  domainry   s          r?   pytest_runtest_logstartz(TerminalReporter.pytest_runtest_logstartc  so     "*   %%ffffED$$T2.JJL__$$VR0JJL r@   c                .   d| _         |}t        | j                  j                  j	                  || j                         }|j
                  |j                  |j                  }}}t        |t              sd }n|\  }}| j                  ||g       |s|sy |Vt        |d      }|j                  r|sddi}n7|j                  r|rddi}n$|j                  rddi}n|j                  rddi}ni }| j                  j!                  |j"                         | j                  j%                  t&        j(                        dk  rI | j*                  j,                  |fi | | j.                  r| j0                  s| j3                          n | j4                  |j"                  g|j6                   }	t        |d      }
|
s | j8                  |	|fi | |j                  st        |d      rt;        |      }| j                  j%                  t&        j(                        d	k  rJ| j*                  j<                  | j*                  j>                  z
  tA        d
      z
  dz
  }tC        d||      }nd| d}|r|| jE                  |       | j.                  r| jG                          n| jI                          | j*                  j-                  d|jJ                  jL                  jN                   d       | j.                  r/| j*                  j-                  | jQ                         dz   d       n| j*                  j-                  d        | j*                  j,                  |fi | | j*                  j-                  d|	z          d| _)        | jU                          y )NT)r   r   wasxfailgreenyellowredr   node    [100%]rB   z ({})z ()[]r   )cyanr#  )+
_tests_ranrY   r   hookr   rZ   r[   r\   r?  tuplerU  hasattrr(   r'   r)   r   addr   r  r   r   r   r  r   _is_last_item(_write_progress_information_if_past_edgerf  rg  r'  _get_raw_skip_reasonr   r2  r  _format_trimmedr7  r  r)  ro  gatewayid!_get_progress_information_messager   r  )r=   r   repr  rZ   r[   r\   r  	was_xfailry   running_xdistreasonavailable_widthformatted_reasons                 r?   pytest_runtest_logreportz)TerminalReporter.pytest_runtest_logreportq  s    [[66c$++6V
 "%szz388$&$&FLD&3%(d>
3Izz)!4	"D)"D)''++CJJ7;;$$V%@%@AQFDHHNN6,V, ''0B0B==?%4%%cjj@3<<@D#C0M (((t>v>;;'&*"=1#6F{{001L1LMPQQ!XX//$((2P2PP!)n-  (
 ,;#V_,( .0xq>("2">(89++BBD##%388#3#3#6#6"7q9:++HHNN>>@3FT #  HHNN3't.v.sTz*%'"

r@   c                d    | j                   J | j                  | j                   j                  k(  S rR   )r   r  testscollectedr  s    r?   r{  zTerminalReporter._is_last_item  s-    }}(((%%)E)EEEr@   T)wrapperc              #     K   d }| j                   j                  t        j                        dk  r(| j                  r| j
                  r| j                          |S wr   )r   r  r   r   r   r  r  )r=   results     r?   pytest_runtestloopz#TerminalReporter.pytest_runtestloop  sM      KK%%f&A&ABaG((&&::<s   AAc                   | j                   sJ | j                   j                  }| j                  dk(  rG|r<| j                  }dt	        t        |             d}d| d}|j                  ||      S d| d| dS | j                  d	k(  rG|sy
| j                  d      | j                  d      z   | j                  d      z   | j                  d      z   | j                  d      z   | j                  d      z   | j                  d
      z   }|d   j                  d   |D cg c]  }|j                  | j                  vs| }}t        fd| j                   j                  D              }t        fd|D              }	|	|k(  }
| j                  s|
r=| j                  j                  d |D               t        t        d |D                    S y
|rd| j                  dz  |z  ddS yc c}w )Nrc   z{:zd} [z/{}]z [  / z ]r   r   r(   r,   r'   r+   r)   r.   r   c              3  B   K   | ]  }|j                   d    k(    yw)r   N)rg  ).0icurrent_locations     r?   	<genexpr>zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  s$      ";Na

1!11;Ns   c              3  `   K   | ]%  }|j                   d    k(  r|j                  dk(   ' yw)r   r   N)rg  r   )r  rr  s     r?   r  zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  s3      "%A::a=$44 '!%s   +.c              3  4   K   | ]  }|j                     y wrR   )r   r  r  s     r?   r  zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  s     4T|!QXX|s   c              3  V   K   | ]!  }t        |t              s|j                   # y wrR   )r?  r%   durationr  s     r?   r  zETerminalReporter._get_progress_information_message.<locals>.<genexpr>  s     VLqJq*<U

Ls   ))d   3dz%]rq  )r   r  r   r  r  rL   format_get_reports_to_displayrg  r   r   sumrS  r  updateformat_node_duration)r=   	collectedr   counter_formatformat_stringall_reportsr  not_reportedtests_in_moduletests_completedlast_in_moduler  s              @r?   r  z2TerminalReporter._get_progress_information_message  s(   }}}MM00	##w.11#&s3y>':&;3!?"$^$4F ;$++Hi@@3yk44##w.,,X6..y9:..x89 ..y9: ..y9	:
 ..w78 ..r23   +277:&&a!(($:W:W*W;   " ";?==;N;N" O " "%" O
 -?N$$--444T|4TT+VLVV  ..4	A"ERHH)s   "G- G-c                   | j                   }| j                  dk(  r7| j                  sJ | j                  j                  }t	        d| d| d      }n&| j                  dk(  rt	        d      }nt	        d      }||z   dz   | j
                  k\  }|rF| j                         \  }}| j                         } | j                  j                  |d	z   fi |d
i y y )Nrc   r  /rt  r   z 99h 59mrq  rB   r+  T)
_width_of_current_liner   r   r  r  r   _get_main_colorr  r   r  )r=   r   	num_testsprogress_length	past_edge
main_color_r   s           r?   r|  z9TerminalReporter._write_progress_information_if_past_edge  s    ''##w.== =44I!Byk9+Q"?@O%%0!*oO!)nO'!+t/A/AA	 002MJ88:CDHHNN3:<*d);< r@   c                    | j                         \  }}| j                         }| j                  }| j                  j                  |z
  dz
  } | j
                  |j                  |      fddi|di y )NrB   r  T)r  r  r  r   r   r  rjust)r=   r   r  r   r   rE  s         r?   r  z:TerminalReporter._write_progress_information_filling_space  sj    '')q446''xx!!A%)

399T?@$@5$-@r@   c                .    | j                   j                  S )z%Return the width of the current line.)r   r2  r  s    r?   r  z'TerminalReporter._width_of_current_line  s     xx---r@   c                   | j                         r9| j                  j                  j                  dk\  r| j	                  ddd       y y | j                  j                  j                  dk\  r| j	                  ddd       y y )Nr   zcollecting ... T)r  boldrB   )r   r   r   rd   r  r  s    r?   pytest_collectionz"TerminalReporter.pytest_collection  sk    ;;={{!!))Q.

,Dt
D /[[''1,JJ(4J@ -r@   c                ^   |j                   r| j                  d|g       n|j                  r| j                  d|g       |j                  D cg c]  }t	        |t
              s| }}| xj                  t        |      z  c_        | j                         r| j                          y y c c}w )Nr.   r)   )
r'   rU  r)   r  r?  r   r   r  r   report_collect)r=   r   r  rS  s       r?   pytest_collectreportz%TerminalReporter.pytest_collectreport   s    ==OOGfX.^^OOIx0"MMAMqZ4-@MAc%j(;;=!  Bs   B*$B*c                X   | j                   j                  j                  dk  ry |sE| j                  j	                         j
                  t        k  ry t        j                         | _        t        | j                  j                  dg             }t        | j                  j                  dg             }t        | j                  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k7  rd
nd	 z  }|r	|d| dz  }|r	|d| dz  }| j                  |kD  r	|d| dz  }| j                         r)| j                  |dd       |r| j!                  d       y y | j#                  |       y )Nr   r.   r)   r*   z
collected zcollecting z itemrB   r   r   r  z errorz deselectedz skippedz	 selectedT)r  rA  r+  )r   r   rd   r   elapsedsecondsREPORT_COLLECTING_RESOLUTIONr   r   r  r   r  r   rL   r   rF  r  r   )r=   r   r>  r)   r*   selectedry   s          r?   r  zTerminalReporter.report_collect*  s   ;;%%) //779AA./ .4nn.>D+TZZ^^GR01djjnnY34b9:
%%
2$|-""#g-t7I7IQ7NTWX	
 c&v{'CDDDc*[11Dc'(++D(c(9--D;;=LLDL5

4   OOD!r@   r   c                x   || _         t        j                         | _        | j                  sy | j                  ddd       t        j                         }| j                  sXdt        j                   d| }t        t        dd       }|r1dj                  t        t        |d d	             }|d
| d|d	    dz  }|dt        j                  j                    dt"        j$                   z  }| j&                  dkD  sA| j(                  j*                  j,                  s!t        | j(                  j*                  dd       r|dt        t        j.                        z   z  }| j1                  |       | j(                  j2                  j5                  | j(                  | j6                        }| j9                  |       y y )N=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  rJ  r   python_versionrg   r   rD   r   r   rL   r   _versionversionpluggy__version__r   r   r   r   
executabler   rw  pytest_report_headerr   _write_report_lines_from_hooks)r=   sessionverinfor   r  liness         r?   pytest_sessionstartz$TerminalReporter.pytest_sessionstartN  su   $nn.s1=))+~~cll^;wi@C '-@$ G ((3s,=bq,A#BCy*;A*>)?qAAYw//778	&BTBTAUVVC";;%%++4;;--z4@vCNN 333OOC KK$$99{{t~~ : E //6# r@   c                    t        |      D ]<  }t        |t              r| j                  |       %|D ]  }| j                  |        > y rR   )reversedr?  rL   r   )r=   r  line_or_linesry   s       r?   r  z/TerminalReporter._write_report_lines_from_hooksi  s>     &e_M--.)DOOD) *	 -r@   c           	     x   d|j                    g}|j                  rbd}|j                  rddj                  |j                         d}|j	                  dt        |j                   |j                        z   |z          |j                  t        j                  j                  k(  r@|j                  d      }|j	                  dj                  dj                  |                   |j                  j                         }|r8|j	                  d	j                  dj                  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)r=   r   r  warningr  
plugininfos         r?   r  z%TerminalReporter.pytest_report_headers  s   foo./0>>G++A$))FLhLhBiAjjlmMMV__fnn!MMPWW !2!2!<!<<#)==#=IMM/0091EFG))>>@
MM$$TYY/CJ/O%PQ r@   c                   | j                  d       | j                  j                  j                  | j                  | j                  |j
                        }| j                  |       | j                  j                  d      r|j
                  rY| j                  j                  j                  dkD  r| j                  j                  d       | j                  |j
                         | j                  j                  d      }|r?| j                  j                  dd       |D ]  }|j!                  | j                          y y y )	NT)r   r  rS  collectonlyr  r   r'   !zcollection failures)r  r   rw  pytest_report_collectionfinishr   rS  r  r   r   rd   r   ry   _printcollecteditemsr   r  rH  
toterminal)r=   r  r  r'   r  s        r?   pytest_collection_finishz)TerminalReporter.pytest_collection_finish  s    D!  ??;;~~-- @ 

 	++E2;;  /}};;%%--2HHMM"%))'--8ZZ^^H-FS"78!CNN488, "  0r@   c           	        | j                   j                  t        j                        }|dk  r|dk  rTt	        d |D              }t        |j                               D ]%  \  }}| j                  j                  | d|        ' y |D ]'  }| j                  j                  |j                         ) y g }d}|D ]  }|j                         dd  }	|r%||	d t        |       k(  rn|j                          |r%|	t        |      d  D ]  }
|j                  |
       t        |      dz
  dz  }| j                  j                  | |
        |dk\  sJt        |
dd       }|rt        j                   |      nd }|ss|j#                         D ]0  }| j                  j                  d	j%                  |dz   |             2   y )
Nr   r  c              3  Z   K   | ]#  }|j                   j                  d d      d    % ywr  rB   r   N)r   r  )r  items     r?   r  z8TerminalReporter._printcollecteditems.<locals>.<genexpr>  s'      Q54!2!24!;A!>5s   )+: r   rB     objz{}{})r   r  r   r   r   sortedrS  r   ry   r   	listchainr  rC  r  rD   inspectgetdoc
splitlinesr  )r=   rS  test_cases_verbositycountsnamerc   r  stackindentneeded_collectorscolr  docry   s                 r?   r  z%TerminalReporter._printcollecteditems  s   #{{889T9TU!##b(  Q5 QQ#)&,,.#9KD%HHMMTF"UG"45 $:
  "DHHMM$++. "D $ 0 4-lE
;;		  )U6S!e*q.D0./'1,!#ud3C14'..-$C$'NN$4D HHMM&--t*LM %5 7 r@   c              #    K   d }| j                   j                  d       t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  f}||v r>| j                  s2| j                  j                  j                  | || j                         | j                         }|u|j                  t        j                  k(  rXt        | j                   j#                  dg             }||kD  r.t        j                  |_        | j%                  d| d| d       |j&                  r'| j)                  dt+        |j&                        d       |t        j
                  k(  r| j-                          d | _        n3|j0                  r'| j)                  dt+        |j0                        d       | j3                          |S w)	Nr   )r   
exitstatusr   r-   z3Tests pass, but maximum allowed warnings exceeded: z > T)rn  r  )r   ry   r   OKTESTS_FAILEDINTERRUPTEDUSAGE_ERRORNO_TESTS_COLLECTEDMAX_WARNINGS_ERRORrh   r   rw  pytest_terminal_summary_get_max_warningsr  r  r   r  r   
shouldfailrJ  rL   _report_keyboardinterruptr   
shouldstopsummary_stats)r=   r  r  r  summary_exit_codesmax_warningswarning_counts          r?   pytest_sessionfinishz%TerminalReporter.pytest_sessionfinish  s     bKK!!    ''''
 ++DOOKK44!%*T[[ 5  --/#(:(:hkk(I

z2 >?M|+%-%@%@"I$oS8   
 NN3G$6$6 7TNB---**,+/D(NN3G$6$6 7TNBs   G(G*c              #  ^  K   | j                          | j                          | j                          | j                          | j	                          | j                          	 d | j                          | j                          S # | j                          | j                          w xY wwrR   )summary_errorssummary_failuressummary_xfailuressummary_warningssummary_passessummary_xpassesshort_test_summaryr  s    r?   r  z(TerminalReporter.pytest_terminal_summary  s      	$##%!!# ##%!!#s   A!B-$B '!B-"B**B-c                2    |j                  d      | _        y )NT)funcargs)getreprr   )r=   excinfos     r?   pytest_keyboard_interruptz*TerminalReporter.pytest_keyboard_interrupt  s    '.'E$r@   c                >    | j                   | j                          y y rR   )r   r  r  s    r?   pytest_unconfigurez#TerminalReporter.pytest_unconfigure  s    ''3**, 4r@   c                   | j                   }|J |j                  J |j                  j                  }| j                  d|       d|v r| j                  j
                  j                  r|j                  | j                         y |j                  j                  | j                         | j                  j                  dd       y y )Nr  KeyboardInterruptz@(to show a full traceback on KeyboardInterrupt use --full-trace)T)rm  )
r   	reprcrashr   rJ  r   r   	fulltracer  r   ry   )r=   rW  r   s      r?   r  z*TerminalReporter._report_keyboardinterrupt  s    .."""  ,,,''sC #%{{!!++""488,!!,,TXX6V   &r@   c                     d
 fd}|rm ||      } j                   dk\  rQ|j                  dd      d   t        j                  |      k7  r%|dt	         j
                  t        |            z   z  }|d	z   S d}|d	z   S )Nc                    j                   j                  |       }r]|j                        rL|d t                }j	                  d      }|d   j                  dd      |d<   |dj                  |      z  }|S )Nrs  r   r   r  )r   cwd_relative_nodeidendswithr  r  r   r   )r   ry   rH   rh  r=   s      r?   mkrelz-TerminalReporter._locationline.<locals>.mkrel  sw    ;;226:D$--/Ns6{l+c*"1I--c48q	((Kr@   rp  r  rB   r  r   z <- z
[location]r   )r   rL   rP   rL   )r   r  r   norm_sepr"   r   r
   )r=   r   r  r\  rh  r-  r  s   `   `  r?   rf  zTerminalReporter._locationline
  s    	 -C~~"TA.q1U^^F5KKvDNNDL III Sy CSyr@   c                $    |j                   }|r|S y)Nztest session)	head_line)r=   r  r0  s      r?   _getfailureheadlinez$TerminalReporter._getfailureheadline!  s    MM	r@   c                    	 t        |j                  j                        S # t        $ r, 	 t        |j                        d d cY S # t        $ r Y Y yw xY ww xY w)N2   r   )rL   longreprr'  AttributeError)r=   r  s     r?   _getcrashlinezTerminalReporter._getcrashline'  sX    	s||--.. 	3<<("--! 	s,   ! 	AAA	AAAAc                    | j                   j                  j                  }|t        |      S | j                   j	                  d      }|rt        |      S y)zEReturn the max_warnings threshold, from CLI or INI, or None if unset.Nr  )r   r   r  r   r   )r=   r
  	ini_values      r?   r  z"TerminalReporter._get_max_warnings0  sK    ""//u:KK&&~6	y>!r@   c                z    | j                   j                  |d      D cg c]  }t        |d      r| c}S c c}w )Nr^   	_pdbshown)r   r  ry  )r=   r  r  s      r?   
getreportszTerminalReporter.getreports=  s4    ::>>$3S3a71k;R3SSSs   88c                (     j                  d      r j                  j                  d      }|sy  j                  d u}|r| j                  d  }n|}t	        |       _        |sy i }|D ]-  }|j                  |j                  g       j                  |       / d fd}|rdnd} j                  d|dd	       |j                         D ]  \  }}	 ||	      }
|
rT j                  j                  |
       |j                         }d
j                  d |D              }|j                         }n|j                         } j                  j                  |        j                  j                            j                  j                  d       y y )Nr   r-   c                >   g }| D ]1  }|j                  j                        }|s!|j                  |       3 t        |      dk  rdj	                  t        t        |            S t        d |D              }dj	                  d |j                         D              S )N
   r+  c              3  X   K   | ]"  }t        |      j                  d d      d    $ ywr  )rL   r  )r  locs     r?   r  zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>]  s(      -:C3CHNN4+A.)s   (*c              3  V   K   | ]!  \  }}d j                  |||dkD  rdnd       # yw)z{}: {} warning{}rB   r   r   N)r  )r  kvs      r?   r  zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>`  s3      ! :1 '--a1q5CbI :s   '))	r   r   r  r  r   r   rL   r   rS  )reports	locationsr   rg  counts_by_filenamer=   s        r?   collapsed_location_reportzDTerminalReporter.summary_warnings.<locals>.collapsed_location_reportS  s    	 A ~~dkk:H!((2 !
 y>B&99Si%899%, -:C- &" yy ! 2 8 8 :!  r@   zwarnings summary (final)zwarnings summaryr  TF)rm  r  r+  c              3  &   K   | ]	  }d |z     yw)r  Nr^   )r  r  s     r?   r  z4TerminalReporter.summary_warnings.<locals>.<genexpr>l  s     (A5a5s   zG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)rD  zlist[WarningReport]rP   rL   )r  r   r  r   r  rP  r   r  rJ  rS  r   ry   r  r   rstrip)r=   all_warningsr   warning_reportsreports_grouped_by_messagewrrG  rI  r   message_reportsmaybe_locationr  indenteds   `            r?   r  z!TerminalReporter.summary_warnings@  sb   ;;s7;zz~~j7QL44D@E".t/O/O/Q"R"./2?/CD,"IK&%*55bjj"ELLRP &$ 38.=OENN3dN?,F,L,L,N(!:?!K!HHMM.1#..0E#yy(A5(AAH&oo/G%nn.Gg& -O HHMMYc r@   c                *    | j                  ddd       y )Nr(   PASSESPsummary_passes_combinedr  s    r?   r  zTerminalReporter.summary_passesv  s    $$Xx=r@   c                *    | j                  ddd       y )Nr,   XPASSESXrT  r  s    r?   r  z TerminalReporter.summary_xpassesy  s    $$Y	3?r@   c                   | j                   j                  j                  dk7  r| j                  |      r| j	                  |      }|sy | j                  d|       |D ]`  }|j                  r7| j                  |      }| j                  d|dd       | j                  |       | j                  |j                         b y y y )Nrx   r  r  T)rl  r  )r   r   rt   r  r;  rJ  sectionsr1  _outrep_summary_handle_teardown_sectionsr   )r=   which_reports	sep_title
needed_optrD  r  r   s          r?   rU  z(TerminalReporter.summary_passes_combined|  s     ;;%%-{{:&,0OOM,JsI."C||"66s;sCt$G,,S1223::> # ' .r@   c                    | j                  d      }|D cg c]"  }|j                  dk(  r|j                  |k(  r|$ c}S c c}w )Nr   r   )r;  r   r   )r=   r   rD  r   s       r?   _get_teardown_reportsz&TerminalReporter._get_teardown_reports  sN    //"% "
!{{j(V]]f-D !
 	
 
s   'A c                R    | j                  |      D ]  }| j                  |        y rR   )ra  print_teardown_sections)r=   r   r   s      r?   r\  z*TerminalReporter._handle_teardown_sections  s%    008F((0 9r@   c                   | j                   j                  j                  }|dk(  ry |j                  D ]X  \  }}|dk7  r||vrd|v s| j                  j                  d|       |dd  dk(  r|d d }| j                  j                  |       Z y )Nrx   r   r   r  r  r+  )r   r   r}   rZ  r   rH  ry   r=   r  r}   secnamer5  s        r?   rc  z(TerminalReporter.print_teardown_sections  s    kk((44$ #GWe#7(BW$S'*23<4'%crlGg& !-r@   c                l    | j                   j                  j                  }| j                  dd|       y )Nr'   FAILURESrs   )r   r   rt   summary_failures_combined)r=   rs   s     r?   r  z!TerminalReporter.summary_failures  s,    ""**&&x5&Ir@   c                    | j                   j                  j                  }|r | j                   j                  j                  nd}| j	                  dd|       y )Nrx   r+   	XFAILURESri  )r   r   r|   rt   rj  )r=   show_tbrs   s      r?   r  z"TerminalReporter.summary_xfailures  sE    ++$$--.5""**4&&y+U&Kr@   )r_  c                  |dk7  r|r| j                  |      r| j                  |      }|sy | j                  d|       |dk(  r;|D ]5  }| j                  |      }| j	                  |       | j                  |       7 y |D ]T  }| j                  |      }| j                  d|dd       | j	                  |       | j                  |j                         V y y y )Nrx   r  ry   r  Trn  r  )	r  r;  rJ  r6  r[  r   r1  r\  r   )	r=   r]  r^  rs   r_  rD  r  ry   r   s	            r?   rj  z*TerminalReporter.summary_failures_combined  s     D=Z!8,0OOM,JsI.F?&#11#6,,S1-  '
  '"66s;sCTE,,S166szzB	  ' "9 r@   c                |   | j                   j                  j                  dk7  r| j                  d      }|sy | j	                  dd       | j
                  d   D ]`  }| j                  |      }|j                  dk(  rd|z   }nd|j                   d| }| j	                  d	|d
d
       | j                  |       b y y )Nrx   r.   r  ERRORSr   zERROR collecting z	ERROR at z of r  Tro  )	r   r   rt   r;  rJ  r   r1  r   r[  )r=   rD  r  r   s       r?   r  zTerminalReporter.summary_errors  s    ;;%%-(,(@GNN3)zz'*..s388y(-3C%chhZtC59CsCT=$$S) + .r@   c                J   |j                  | j                         | j                  j                  j                  }|dk(  ry |j
                  D ]S  \  }}|dk7  r||vr| j                  j                  d|       |dd  dk(  r|d d }| j                  j                  |       U y )Nrx   r   r  r  r+  )r  r   r   r   r}   rZ  rH  ry   re  s        r?   r[  z TerminalReporter._outrep_summary  s    txx kk((44$ #GWe#7(BHHLLg&rs|t#!#2,HHMM'" !-r@   c                4   | j                   dk  ry | j                  j                         }| j                         \  }}g }| j                   dk\  }|r| j                  j
                  }|D ]O  \  }} | j                  j                  |fi |}	|rt        |	      t        |      z
  z  }|j                  |	       Q dj                  |      }
|di}dt        |j                         } | j                  j                  |fi |}|rt        |      t        |      z
  z  }|
|z  }
|rE | j                  j                  d
i |}|j                  d      r|d d }t        |      z  }|
|z  }
|r | j                  d|
fd	i| y  | j                  |
fi | y )Nr  r   r  Tz in z[0mr  r   r   )r   r  r  build_summary_stats_liner   r   r  r  r  r   format_session_durationr  r,  rJ  r   )r=   session_durationpartsr  
line_partsdisplay_sepr   textr  with_markupr   main_markupr  duration_with_markupmarkup_for_end_seps                  r?   r  zTerminalReporter.summary_stats  s   >>B..668";;=

nn)**I!LD&)$((//$9&9KS-D	99	k*	 "
 ii
#!4(12B2J2JKLM.txxxG;G12S]BBI##!0!C{!C!**95%7%<"/00I%%CDNN3HyHKHDOOC/;/r@   c           	        
  j                   sy 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 ]  }|j                  |      }|s ||         |r. j                  dddd       |D ]  }	 j	                  |	        y y )Nc                   j                   j                  |g       }|sy j                  }|D ]G  }t        j                  |t              }t        ||j                  |di      }| j                  |       I y )NT)r   r  r   _color_for_type_color_for_type_default _get_line_with_reprcrash_messager   r  )r  statr'   r   r  r   ry   r=   s          r?   show_simplez8TerminalReporter.short_test_summary.<locals>.show_simple  sl    ZZ^^D"-F[[F'++D2IJ7CE4= T" r@   c                   	j                   j                  dg       }|D ]  }|j                  	j                  t        d   di      \  }} 	j
                  j                  |fi |}t        	j
                  	j                  |      }| d| }|j                  }|r|dt        |      z   z  }| j                  |        y )Nr+   r-   Tr    - r   r  _get_verbose_word_with_markupr   r  r   r  _get_node_id_with_markuprk  rL   r  )
r  r+   r  verbose_wordverbose_markupmarkup_wordr   ry   r  r=   s
            r?   show_xfailedz9TerminalReporter.short_test_summary.<locals>.show_xfailed  s    jjnnY3G/2/P/PKK/*"=t!D0,n .dhhoolMnM1$((DKKM%ax0ECK//DT" r@   c                   	j                   j                  dg       }|D ]  }|j                  	j                  t        d   di      \  }} 	j
                  j                  |fi |}t        	j
                  	j                  |      }| d| }|j                  }|r|dt        |      z   z  }| j                  |        y )Nr,   r-   Tr   r  r  )
r  r,   r  r  r  r  r   ry   r  r=   s
            r?   show_xpassedz9TerminalReporter.short_test_summary.<locals>.show_xpassed(  s    jjnnY3G/2/P/PKK/*"=t!D0,n .dhhoolMnM1$((DKKM%ax0ECK//DT" r@   c                   j                   j                  dg       }|rt        j                  |      ng }|sy |d   j	                  j
                  t        d   di      \  }} j                  j                  |fi |}d}|D ]d  \  }}}	}
|
j                  |      r|
t        |      d  }
|	 | j                  | d| d| d|	 d	|
 	       I| j                  | d| d| d	|
        f y )
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  r=   s              r?   show_skipped_foldedz@TerminalReporter.short_test_summary.<locals>.show_skipped_folded6  s    +/::>>)R+HG?F]4>>7;BF+21:+S+Soj94@,(L. *$((//,I.IK F/5+VVV$$V,#CKM2F%LLK=3%r&6("VH!UVLLK=3%r&F8!LM 06r@   c                \   	j                   j                  dg       }|D ]	  }|j                  J t        |j                  t              sJ ||j                  f       t        |j                        dk(  sJ ||j                  f       |j                  	j                  t        d   di      \  }} 	j                  j                  |fi |}t        	j                  	j                  |      }| d| }|j                  d   }|r|dt        |      z   z  }| j                  |        y )Nr)   r  r-   Tr   rp  r  )r   r  r4  r?  rx  r  r  r   r  r   r  r  rL   r  )
r  r)   r  r  r  r  r   ry   r  r=   s
            r?   show_skipped_unfoldedzBTerminalReporter.short_test_summary.<locals>.show_skipped_unfoldedH  s   +/::>>)R+HG||///!#,,6Kcll8KK63<<(A-BS\\/BB-/2/P/PKK/*"=t!D0,n .dhhoolMnM1$((DKKM%ax0aECK//DT" r@   c                @    j                   r	 |        y  |        y rR   )r   )r  r=   r  r  s    r?   show_skippedz9TerminalReporter.short_test_summary.<locals>.show_skipped[  s    #E*%e,r@   r'   )r  r(   r.   )r  rX  fr   pr   r  zshort test summary infoT)ru  r  )r  	list[str]r  rL   rP   rQ   )r  r  rP   rQ   )rn   r	   r  rJ  r   )r=   r  r  r  r  REPORTCHAR_ACTIONSr  r   re   ry   r  r  s   `         @@r?   r  z#TerminalReporter.short_test_summary	  s    
	#	#	#	N$	#&	- 848473I
 $$D'++D1Fu %
 NN3 94NP%  r@   c                    | j                   | j                  | j                  r,| j                          | j                   sJ | j                  sJ | j                   | j                  fS rR   )r   r   r{  rR  r  s    r?   r  z TerminalReporter._get_main_coloru  sb    #t'8'8'@DDVDV  "####$$$$!2!222r@   c                ~    | j                   }d|v sd|v rd}|S d|v sd|v s|rd}|S d|v s| j                  sd}|S d}|S )	Nr'   r.   rn  r-   r,   rm  r(   rl  )r   r{  )r=   unknown_type_seenr   r  s       r?   _determine_main_colorz&TerminalReporter._determine_main_color|  st    

u5 0J  5 I$6:K!J
 	 d&8&8 J  "Jr@   c                    g }| j                   D ]$  }|s|t        vs||vs|j                  |       & t        t              |z   | _        | j                  t        |            | _        y rR   )r   KNOWN_TYPESr  listr   r  rN   r   )r=   unknown_types
found_types      r?   rR  z TerminalReporter._set_main_color  sa    #%**J[0Z}5T!((4 % !-=55d=6IJr@   c                x    | j                   j                  d      r| j                         S | j                         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    r?   rv  z)TerminalReporter.build_summary_stats_line  s4    ( ;;  />>@@88::r@   c                    | j                   j                  |g       }|D cg c]  }t        |dd      s| c}S c c}w )zRGet test/collection reports for the given status key, such as `passed` or `error`.r   T)r   r  rD   )r=   keyrD  r  s       r?   r  z(TerminalReporter._get_reports_to_display  s:    **..b)"P7aga1H$&O7PPPs   ;;c                    | j                         \  }}g }|D ]d  }| j                  |      }|st        |      }t        j	                  |t
              }|dd||k(  i}|j                  dt        ||      z  |f       f |sdt
        difg}||fS )NTr  %d %szno tests ran)r  r  r  r  r  r  r  	pluralize)	r=   r  known_typesry  r  rD  rc   r   r  s	            r?   r  z1TerminalReporter._build_normal_summary_stats_line  s     #'"6"6"8
KC2237GG'++C1HIvu
/BCg	%(==vFG  $'>&EFGEj  r@   c                   t        | j                  d            }t        | j                  d            }| j                  dk(  r
dddifg}d}no|dk(  r#d}dt        | j                  d	      z  }||difg}nG| 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  )r=   r*   r>  ry  r  collected_outputall_tests_were_deselectedr  s           r?   r  z7TerminalReporter._build_collect_only_summary_stats_line  s8    55lCD
T11':;"*Xt,<=>E!J1_ J09T=O=OQW3XX&T(:;<E(,(:(:j(H%(%
%9*\#R $
--
:&.Zq1C1C0DDVWaVbbn#o &T(:;<E(1Jw67!;;j$=OPQQEj  r@   rR   )r   r   r   zTextIO | NonerP   rQ   )rP   z,Literal['progress', 'count', 'times', False])rP   r   )rP   rN   )r
  zbool | NonerP   rQ   )r   rL   rP   rN   )r   rL   r  rL   r  rN   rP   rQ   ru  )r$  rL   r%  rL   rP   rQ   rP   rQ   )r5  rL   r  rN   r,  r   r-  rL   r  rN   rP   rQ   )r5  rL   r  rN   r  rN   rP   rQ   )r5  rL   r  rN   rP   rQ   )ry   zstr | bytesr  rN   rP   rQ   )ry   rL   r  rN   rP   rQ   )NN)
rH  rL   rI  rO   r   
int | Noner  rN   rP   rQ   )r  )rI  rL   rH  rL   rL  rN   rP   rQ   )r   rL   rL  rN   rP   rQ   )rZ   rL   rS  zSequence[Any]rP   rQ   )rW  r   rP   rN   )r]  zwarnings.WarningMessager   rL   rP   rQ   )ra  r   rP   rQ   )rS  zSequence[Item]rP   rQ   )r   rL   rg  ztuple[str, int | None, str]rP   rQ   r   r%   rP   rQ   )rP   zGenerator[None, object, object])rP   rL   )r   r$   rP   rQ   )F)r   rN   rP   rQ   r  r&   rP   rQ   )r  zSequence[str | Sequence[str]]rP   rQ   )r   r   rP   r  )r  r&   r  zint | ExitCoderP   Generator[None])rP   r  )r!  zExceptionInfo[BaseException]rP   rQ   )
r   rL   r  rL   r\  r  rh  rL   rP   rL   )rP   r  )r  rL   )r]  rL   r^  rL   r_  rL   rP   rQ   )r   rL   rP   zlist[TestReport])r   rL   rP   rQ   )r  r%   rP   rQ   )
r]  rL   r^  rL   rs   rL   r_  rO   rP   rQ   )r  r#   rP   rQ   )rP   ztuple[str, list[str]])r  rN   rP   rL   )rP   z-tuple[list[tuple[str, dict[str, bool]]], str])r  rL   rP   z	list[Any])PrS   rT   rU   r<   r   propertyr   r  rg   rh   r  setterr  r  r  r!  r'  r)  r7  r  r;  r  r   rF  rJ  rM  ry   rU  rX  r_  rb  rd  ri  r  r{  r   r  r  r|  r  r  r  r  r  r  r  r  r  r  r  r  r"  r$  r  rf  r1  r6  r  r;  r  r  r  rU  ra  r\  rc  r  r  rj  r  r[  r  r  r  r  rR  rv  r  r  r  r^   r@   r?   r   r   z  s   B<	52   # # 2 2 3 3    
 ! ! J J 4 4(	2$& 77 	7
 7 7 7 
7, 49 7 8= 1&5* ! $	66 6 	6
 6 
6'!#
606 6 
	6!-%@	JX F F d +Z= A . .A"""H d7 74*2*	*,-,N< d$$,:$	$ $L d$ $F- #&0:DG	.T4l>@? ?-0?>A?	? 
1'JL "&CC C
 C C 
C4*##0Jj&X3
K;2Q
!	6!&!	6!r@   r   c                    |j                  |j                        }|j                  d      ^}}|r*| j                  dj	                  |      d      }|dz   |z   S |S )Nr  Tr  )r+  r   r  r  r   )twr   r  r   pathry  parts_markups          r?   r  r    sZ    ''

3F<<%LD5yy5!1y=d{\))r@   c                X   |j                  d      }|dk7  r|d| }d}t        | j                  d            }|t        |      z   |kD  ry|t        |      z   |kD  r@|t        |      z  }|d| }|t        |      z   |kD  r|dd }|t        |      z   |kD  r||z  }| j                  |      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         r?   r~  r~    s     	ABw"1gHFMM"-.Lc(m#o5hsm#o53x=("?#Xc]*_<cr(C Xc]*_<x==r@   c                   |j                  | |      \  }} |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  }|S # t        $ r Y |S w xY w)z?Get summary line for a report, trying to add reprcrash message.r   rp  r  z - {})r  r  r  r   r?  r4  rL   r'  r   r   r   rd   rk   r   r~  r5  )r   r  r  word_markupr  r  r\   ro  ry   
line_widthr   r  s               r?   r  r    s	    $'#D#D$ L. 299\4^4D#B4DV1TFD$JcllC(,,C ,,((00C
 Ov}}449--33u+C llZ7O!'3@C?CKDK   Ks   	AC4 4	D Dc                >   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}|j                  |g       j                  |        g }	|j                         D ]#  \  }}
|	j                  t        |
      g|       % |	S )Nr  keywordsr   skip
pytestmark)r4  r?  rx  r  r"   r
   rD   r   rP  r  rS  )r   r)   deventr  r\  r  r  r  rH   eventss              r?   r  r  *  s!    ACA~~)))%..%0I5%..2II05>>"a'@%)@@'!&YV55*b1
 JJ'!("H,06f/EC66*C	S"$$U+' ( 68FwwyVs6{)S)* !Mr@   rn  rm  rl  )r'   r.   r-   r(   r/   r0   c                T    |dvr| |fS |j                  dd      }| | dk7  r|dz   fS |fS )N)r.   r-   r  r-   r  rB   r   )r   )rc   nouns     r?   r  r  T  sD    00d{
 <<
I.D
$*4444r@   c                    g }| D ]L  \  }}|j                    d|j                   }|j                  d      r|dd  }||vs<|j                  |       N |S )Nr  zpytest-   )project_namer  r  r  )r  rH   ra  distr  s        r?   r  r  a  sb    F"##$Adll^4??9%8DvMM$ # Mr@   c                h    | 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     r?   rw  rw  o  sA    |#a  G5#c"Q''r@   c                "   | 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?rB   r  r   i  z.0fzm zh mr^   r  s    r?   r  r  x  s!    7W$S),,7W$S),,7W$S),,~7T>#&b))}7T>#&b)){7T>#&b))|73-q!!~7b=%R"S'9;;w$s#2w~"&<S%ACCr@   c                <   t        | d      r-| j                  }|j                  d      r|t        d      d }|S | j                  sJ t        | j                  t              sJ | j                  \  }}}|j                  d      r|t        d      d }|S |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)   r?  r4  rx  )r   r  r  s      r?   r}  r}    s    
 vz"Z(C
O-.F~~~&//51111f[)C,./F  y Fr@   c                  v    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
y)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
    c                .    || _         d | _        d| _        y )NF)_trr   _has_failures)r=   trs     r?   r<   zTerminalProgressPlugin.__init__  s    (,"r@   Nc                    |d|cxk  rdk  sJ  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                   j                  d       y)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;\Tr8  )r  r;  )r=   stater   sequences       r?   _emit_progressz%TerminalProgressPlugin._emit_progress  s     1#7C#777#777 .+++(
&9'!,XJf=H2H .'!,XJf=H2H840r@   c                4    || _         | j                  d       y )Nr  )r   r  )r=   r  s     r?   r  z*TerminalProgressPlugin.pytest_sessionstart  s    O,r@   c                x    | j                   J | j                   j                  dkD  r| j                  dd       y y )Nr   r  )r   r  r  r  s    r?   r  z/TerminalProgressPlugin.pytest_collection_finish  s9    }}(((==''!+!, ,r@   c                .   |j                   rd| _        |j                  dk7  ry | j                  J | j                  j                  }|dkD  rI| j
                  j                  }t        |dz  |z  d      }| j                  | j                  rdnd|       y y )NTcallr   r  r.   r  )	r'   r  r   r   r  r  r  minr  )r=   r   r  reportedr   s        r?   r  z/TerminalProgressPlugin.pytest_runtest_logreport  s    ==!%D ;;&  }}(((MM00	q=xx11H8c>Y6<H4+=+=8XV r@   c                &    | j                  d       y )Nr  )r  r  s    r?   r  z+TerminalProgressPlugin.pytest_sessionfinish  s    H%r@   )r  r   rP   rQ   rR   )r  z?Literal['remove', 'normal', 'error', 'indeterminate', 'paused']r   r  rP   rQ   r  r  r  )rS   rT   rU   rV   r<   r  r   r  r  r  r  r^   r@   r?   r  r    s    #  $$1N$1 $1 
	$1L - -
 - - W W  & &r@   r  )rF   r   rP   rQ   )r   r   rP   rQ   )r   r   rP   rL   )r   r#   rP   ztuple[str, str, str])r  r   r   r   r  r#   )r  rL   r   rL   r  r   rP   rO   )
r   r   r  r#   r  r   r  zdict[str, bool]rP   rL   )r   r
   r)   zSequence[CollectReport]rP   z&list[tuple[int, str, int | None, str]])rc   r   r  rL   rP   ztuple[int, str])rP   r  )r  floatrP   rL   )r   r%   rP   rL   )ZrV   
__future__r   argparsecollectionsr   collections.abcr   r   r   r   dataclassesr  	functoolsr	   r  pathlibr
   r   r   r3  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   rY   r   r   r   r   	dataclassr   r   r  r~  r  r  r  r  r  r  rw  r  r}  r  r^   r@   r?   <module>r     s  
 #   $ % # $       
               ' , & (  ( ( ! # # ,   ( ' & ) & $  #   "=hoo "=J/ /(Wt?"2 
$, ,   8 e! e! e!P#2!!#!)7!FU!!H$ ,@  # 
5(D.*V& V&r@   