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

This is a good source for looking at the various reporting hooks.
    N)Counter)partial)Path)Any)Callable)ClassVar)Dict)final)	Generator)List)Literal)Mapping)
NamedTuple)Optional)Sequence)Set)TextIO)Tuple)TYPE_CHECKING)Union)nodes)timing)ExceptionInfo)ExceptionRepr)TerminalWriter)wcswidth)running_on_ci)_PluggyPlugin)Config)ExitCode)hookimpl)Parser)Item)Node)absolutepath)bestrelpath)
BaseReport)CollectReport)
TestReport)Sessiong      ?)failedpassedskipped
deselectedxfailedxpassedwarningserrorfEc                        e Zd ZdZ	 	 	 ddee   dedededee   ddf fd	Z		 dd
e
j                  de
j                  deeee   df   dee   ddf
dZ xZS )MoreQuietActionzA modified copy of the argparse count action which counts down and updates
    the legacy quiet attribute at the same time.

    Used to unify verbosity handling.
    Noption_stringsdestdefaultrequiredhelpreturnc                 0    t         |   ||d|||       y )Nr   )r6   r7   nargsr8   r9   r:   )super__init__)selfr6   r7   r8   r9   r:   	__class__s         b/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/_pytest/terminal.pyr?   zMoreQuietAction.__init__W   s)     	) 	 	
    parser	namespacevaluesoption_stringc                     t        || j                  d      dz
  }t        || j                  |       t        |dd      dz   |_        y )Nr      quiet)getattrr7   setattrrJ   )r@   rD   rE   rF   rG   	new_counts         rB   __call__zMoreQuietAction.__call__h   s@     Ityy!4q8		499i0!)Wa81<	rC   )NFNN)__name__
__module____qualname____doc__r   strobjectboolr   r?   argparseArgumentParser	Namespacer   rN   __classcell__)rA   s   @rB   r5   r5   P   s     "
 
 
 	

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

3H
!!(,>?}}fmm77	8 	&&A 8rC   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        rB   getreportoptr     s    }}00K*KJ 
;::<D3; JS["JS[J#$J
 ==))c.C:%
  
	'	'C:,=''R0
rC   Ttrylastreportc                     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+   r2   E)r,   r-   outcomewhenupper)r   r^   r   s      rB   pytest_report_teststatusr   2  sY    F}}	>>G{{667h;NFGMMO++rC   c                   r    e Zd ZU dZeed<   dZee   ed<   dZee	ee
f      ed<   dZeed<   ded	ee   fd
Z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``).
    messageNnodeid
fslocationTcount_towards_summaryr   r;   c                     | 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        rB   get_locationzWarningReport.get_locationT  sY    ;;;;?? $Hg!&":":">">X@VWGYay))rC   )rP   rQ   rR   rS   rT   r`   r   r   r   r   r   r   r   r   r   ra   rC   rB   r   r   B  sU     L FHSM ,0JsCx)0&*8*6 hsm rC   r   c                      e Zd Zd}dedee   ddfdZded   fdZe	de
fd       Ze	defd	       Ze	defd
       Ze	defd       Ze	defd       Zej"                  dee   ddfd       Ze	defd       ZdedefdZdededdfdZd~dededdfdZddZdddddedede
d ededdfd!Zdd"dedededdfd#Zdd$Zd%eeef   deddfd&Zd%ededdfd'Z	 	 dd(ed)ee   d*ee
   deddf
d+Zdd)ed(ed,eddfd-Z d.ed,eddfd/Z!d0ed1e"e#   ddfd2Z$d3e%defd4Z&d5e'jP                  deddfd6Z)d7e*ddfd8Z+d1e"e,   ddfd9Z-ded:e.eee
   ef   ddfd;Z/d<e0ddfd=Z1e	defd>       Z2deddfd?Z3defd@Z4ddAZ5e	de
fdB       Z6ddCZ7d<e8ddfdDZ9ddEeddfdFZ: e;dGH      ddK       Z<dLe"eee"e   f      ddfdMZ=dede>e   fdNZ?ddOZ@d1e"e,   ddfdPZA e;dGQ      dIdJdRee
eBf   deCdS   fdT       ZD e;dGQ      deCdS   fdU       ZEdVeFeG   ddfdWZHddXZIddYZJdedZed[ee
   d\edef
d]ZKd^ ZLd_ ZMd`efdaZNddbZOddcZPdddZQdeedfedgeddfdhZRdede>e0   fdiZSdeddfdjZTdke0ddfdlZUddmZVddnZW	 d}deedfedgee   ddfdoZXddpZYdkeZddfdqZ[ddrZ\ddsZ]de.ee>e   f   fdtZ^duedefdvZ_ddwZ`de.e>e.eeaeef   f      ef   fdxZbdyede>e#   fdzZcde.e>e.eeaeef   f      ef   fd{Zdde.e>e.eeaeef   f      ef   fd|Zey)r   Nr   filer;   c                 @   dd l }|| _        d| _        d | _        d | _        i | _        d | _        d | _        |j                  j                  | _
        |t        j                  }|j                  j                  ||      | _        | j                  j                  | _        d | _        t%        |      | _        | j                  j(                  | _        |j+                         | _        t-               | _        | j1                         | _        d | _        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   	hasmarkupisattyset_progress_nodeids_reported_determine_show_progress_info_show_progress_info_collect_report_last_write_already_displayed_warnings_keyboardinterrupt_memo)r@   r   r   _pytests       rB   r?   zTerminalReporter.__init__a  s    +/+/+-
*.151155<::D>>88F!XX//:>'/++kkm47E'#'#E#E#G ;?':>(@D$rC   )r   rf   Fc                    | 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	y)
zRReturn whether we should display progress information based on the current config.capturery   r   progress-even-when-capture-noF	setupshow>   r   r   r   rf   )r   	getoptiongetini)r@   cfgs     rB   r   z.TerminalReporter._determine_show_progress_info{  s    
 KK!!)T2d:""#9:./ ;;  e4;;%%&<=??G^rC   c                 F    | j                   j                  j                  }|S rO   )r   r   rg   )r@   	verbositys     rB   r   zTerminalReporter.verbosity  s    ++33	rC   c                      | j                   dk\  S r   )r   r@   s    rB   
showheaderzTerminalReporter.showheader  s    ~~""rC   c                 T    t        | j                  j                  j                        S rO   )rV   r   r   rj   r   s    rB   rj   zTerminalReporter.no_header  s    DKK&&0011rC   c                 T    t        | j                  j                  j                        S rO   )rV   r   r   rk   r   s    rB   rk   zTerminalReporter.no_summary  s    DKK&&1122rC   c                     | j                   ,| j                  j                  t        j                        dk\  S | j                   S r   )r   r   get_verbosityr   r   r   s    rB   
showfspathzTerminalReporter.showfspath  s:    #;;,,V-H-HIQNNrC   valuec                     || _         y rO   )r   )r@   r   s     rB   r   zTerminalReporter.showfspath  s
     rC   c                 Z    | j                   j                  t        j                        dkD  S r   )r   r   r   r   r   s    rB   showlongtestinfoz!TerminalReporter.showlongtestinfo  s"    {{(()D)DEIIrC   r   c                 H    dddj                  ||      }|| j                  v S )Nxr   )r/   r-   )getrn   )r@   r   s     rB   hasoptzTerminalReporter.hasopt  s*    3/33D$?t''''rC   r   markupc                    | j                   j                  |j                  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::r   r   flushT)r   rootpathsplitr   r   )_write_progress_information_filling_spacer&   r   r   rz   write)r@   r   resr  fspath	relfspaths         rB   write_fspath_resultz$TerminalReporter.write_fspath_result  s    %%T(:1(==%43E3E)E!!-$2J2J>>@!'D#DNNF;IHHMMOHHNN9s?+s1$1&1rC   prefixextrac                     | j                   |k7  r<| j                  j                          || _         | j                  j                  |       |r% | j                  j                  |fi | d| _         y y )N)r   r   rz   r  )r@   r  r  kwargss       rB   write_ensure_prefixz$TerminalReporter.write_ensure_prefix  s\    'HHMMO!'DHHNN6"DHHNN5+F+!#D rC   c                 `    | j                   r"| j                  j                          d | _         y y rO   )r   r   rz   r   s    rB   ensure_newlinezTerminalReporter.ensure_newline  s%    HHMMO!%D rC   F   
)r
  marginline_sepcontentr
  r  r  c                    | 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@   r  r
  r  r  r  r$  wrappeds           rB   
wrap_writezTerminalReporter.wrap_write  s|     !% > >--MM++g5((61 $#(	
 /01w6e6v6rC   )r
  c                B     | j                   j                  |fd|i| y )Nr
  )r   r  )r@   r  r
  r  s       rB   r  zTerminalReporter.write  s    w6e6v6rC   c                 8    | j                   j                          y rO   )r   r
  r   s    rB   r
  zTerminalReporter.flush  s    rC   rz   c                     t        |t              st        |d      }| j                           | j                  j                  |fi | y )Nr   )errors)
isinstancerT   r  r   rz   )r@   rz   r  s      rB   r   zTerminalReporter.write_line  s;    $$tI.Dd%f%rC   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.
        eraseFrI   r   r   N)popr   r   lenrT   r  )r@   rz   r  r/  
fill_countfills         rB   rewritezTerminalReporter.rewrite  sl     

7E*++c$i7!;J#DD4ytd{T)4V4rC   septitler   c                 b    | j                           | j                  j                  |||fi | y rO   )r  r   r6  )r@   r6  r7  r   r  s        rB   	write_sepzTerminalReporter.write_sep   s+     	S%5f5rC   kwc                 @     | j                   j                  ||fi | y rO   )r   r6  )r@   r7  r6  r:  s       rB   sectionzTerminalReporter.section
  s    S%&2&rC   r   c                 >     | j                   j                  |fi | y rO   )r   rz   )r@   r   r:  s      rB   rz   zTerminalReporter.line  s    c R rC   r]   itemsc                     || j                   v}| j                   j                  |g       j                  |       |r| j                          y y rO   )r   
setdefaultextend_set_main_color)r@   r]   r>  set_main_colors       rB   
_add_statszTerminalReporter._add_stats  sC    !3

h+2259  " rC   excreprc                 j    t        |      j                  d      D ]  }| j                  d|z           y)Nr  zINTERNALERROR> T)rT   r  r   )r@   rE  rz   s      rB   pytest_internalerrorz%TerminalReporter.pytest_internalerror  s5    L&&t, 	6DOO-45	6rC   warning_messagec                     ddl m} |j                  |j                  f} ||      }t	        |||      }| j                  d|g       y )Nr   )warning_record_to_str)r   r   r   r1   )_pytest.warningsrJ  r   linenor   rD  )r@   rH  r   rJ  r   r   warning_reports          rB   pytest_warning_recordedz(TerminalReporter.pytest_warning_recorded  sK    
 	;$--/E/EE
'8&!76
 	
^$45rC   pluginc                 r    | j                   j                  j                  rd| }| j                  |       y y )NzPLUGIN registered: )r   r   r   r   )r@   rO  r   s      rB   pytest_plugin_registeredz)TerminalReporter.pytest_plugin_registered*  s4    ;;))'x0C OOC  *rC   c                 (    | j                  d|       y )Nr.   )rD  )r@   r>  s     rB   pytest_deselectedz"TerminalReporter.pytest_deselected2  s    e,rC   locationc                     | j                   r6 | j                  |g| }| j                  |d       | j                          y | j                  r#| j                  |d       | j                          y y )Nr   )r  _locationliner  r
  r   r  )r@   r   rT  rz   s       rB   pytest_runtest_logstartz(TerminalReporter.pytest_runtest_logstart5  sb    
   %4%%f8x8D$$T2.JJL__$$VR0JJL rC   r   c                    d| _         |}t        | j                  j                  j	                  || j                         }|j
                  |j                  |j                  }}}t        |t              sd }n|\  }}| j                  ||g       |s|sy t        |d      }|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                  t         j"                        dk  r | j$                  j&                  |fi | n| j(                  j+                  |j,                          | j.                  |j,                  g|j0                   }
|s | j2                  |
|fi | |j                  st        |d      rt5        |      }| j                  j                  t         j"                        d	k  rJ| j$                  j6                  | j$                  j8                  z
  t;        d
      z
  dz
  }t=        d||      }nd| d}|r|| j?                  |       | j@                  r| jC                          n| jE                          | j$                  j'                  d|jF                  jH                  jJ                  z         | j@                  r/| j$                  j'                  | jM                         dz   d       n| j$                  j'                  d        | j$                  j&                  |fi | | j$                  j'                  d|
z          d| _'        | jQ                          y )NT)r   r   nodewasxfailgreenyellowredr       [100%]rI   z ({})z ()z[%s]r   )cyanr  ))
_tests_ranr\   r   hookr   r]   r^   r_   r-  tuplerD  hasattrr,   r+   r-   r   r   r   r   r  r   addr   rV  rT  r  _get_raw_skip_reasonr   r$  r2  _format_trimmedr(  r   r  r  rY  gatewayid!_get_progress_information_messager   r
  )r@   r   repr  r]   r^   r_   r  running_xdist	was_xfailrz   reasonavailable_widthformatted_reasons                 rB   pytest_runtest_logreportz)TerminalReporter.pytest_runtest_logreportB  s    [[66c$++6V
 "%szz388$&$&FLD&3%(dV,>
3Izz)!4	"D)"D);;$$V%@%@AQFDHHNN6,V,++//

;%4%%cjj@3<<@D (((t>v>;;'&*"=1#6F{{001L1LMPQQ!XX//$((2P2PP!)n-  (
 ,;#V_,( .0xq>("2">(89++BBD##%v(8(8(;(;;<++HHNN>>@3FT #  HHNN3't.v.sTz*%'"

rC   c                 v    | j                   J t        | j                        | j                   j                  k(  S rO   )r   r2  r   testscollectedr   s    rB   _is_last_itemzTerminalReporter._is_last_item  s2    }}(((4223t}}7S7SSSrC   c                 \   | j                   sJ | j                  j                  t        j                        dk  r| j
                  r| j
                  dk(  r)| j                   j                  }t        d| d| d      }nt        d      }| j                  j                  |       | j                  r| j                          y | j                         \  }}| j                  }||z   dz   | j                  k\  }|r3| j                         } | j                   j"                  |dz   fi |d	i y y y y )
Nr   rf    [/]r_  rI   r  T)r   r   r   r   r   r   rt  r2  r   rf  ru  r  _get_main_color_width_of_current_liner   rk  r   r  )	r@   r   	num_testsprogress_length
main_color_r   	past_edger   s	            rB   pytest_runtest_logfinishz)TerminalReporter.pytest_runtest_logfinish  s   }}}KK%%f&A&ABaG((''72 MM88	"%9+Qyk&C"D"%i.++//7!!>>@ $ 4 4 6
A///!3t7I7II	@@BC"DHHNN3:D*d1CD ! ) HrC   c                 N   | j                   sJ | j                   j                  }| j                  dk(  rP|rE| j                  }dt	        t        |             d}d| d}|j                  t	        |      |      S d| d| dS |r dt	        | j                        d	z  |z  d
dS y)Nrf   z{:zd}rw  z/{}]z [ z / z ]d   3dz%]r_  )r   rt  r   r   r2  rT   format)r@   	collectedr   counter_formatformat_strings        rB   rk  z2TerminalReporter._get_progress_information_message  s    }}}MM00	##w.::#&s3y>':&;3!?"$^$4F ;$++CM9EE3yk44T<<=CyPQSTTVW rC   c                     | j                         \  }}| j                         }| j                  }| j                  j                  |z
  dz
  } | j
                  |j                  |      fddi|di y )NrI   r
  T)rz  rk  r{  r   r   r  rjust)r@   r   r  r   r   r4  s         rB   r  z:TerminalReporter._write_progress_information_filling_space  sj    '')q446''xx!!A%)

399T?@$@5$-@rC   c                 .    | j                   j                  S )z%Return the width of the current line.)r   r$  r   s    rB   r{  z'TerminalReporter._width_of_current_line  s     xx---rC   c                 0   | j                   rR| j                  j                  j                  dk\  r.| j	                  ddd       t        j                         | _        y y | j                  j                  j                  dk\  r| j	                  ddd       y y )Nr   zcollecting ... T)r
  boldrI   )r   r   r   rg   r  r   timer   r   s    rB   pytest_collectionz"TerminalReporter.pytest_collection  sy    ;;{{!!))Q.

,Dt
D28++-/ / [[''1,JJ(4J@ -rC   c                 V   |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 )Nr2   r-   )
r+   rD  r-   resultr-  r#   r   r2  r   report_collect)r@   r   r  r>  s       rB   pytest_collectreportz%TerminalReporter.pytest_collectreport  s    ==OOGfX.^^OOIx0"MMAqZ4-@AAc%j(;;!  Bs   B&$B&r
   c                 :   | j                   j                  j                  dk  ry |s>t        j                         }| j
                  | j
                  |t        z
  kD  ry || _        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k7  rd
nd	fz  z  }|r|d|z  z  }|r|d|z  z  }| j                  |kD  r|d|z  z  }| j                  r)| j                  |dd       |r| j                  d       y y | j                  |       y )Nr   r2   r-   r.   z
collected zcollecting z itemrI   r   r   z / %d error%sz / %d deselectedz / %d skippedz / %d selectedT)r  r/  r  )r   r   rg   r   r  r   REPORT_COLLECTING_RESOLUTIONr2  r   r  r   rT   r   r5  r  r   )r@   r
   tr,  r-   r.   selectedrz   s           rB   r  zTerminalReporter.report_collect  s   ;;%%)A//;33a:V6VV./D+TZZ^^GR01djjnnY34b9:
%%
2$|-""#g-t7I7IQ7NTWX	
 Ovfksr&JJJD&33DOg--D($x//D;;LLDL5

4   OOD!rC   Tr   sessionr*   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--ry  z	, pytest-z	, pluggy-r   pastebinz -- )r   
start_path)r   r   r  _sessionstarttimer   r9  platformpython_versionrj   r   rK   r   r   rT   r   _versionversionpluggy__version__r   r   r   r   
executabler   rc  pytest_report_headerr   _write_report_lines_from_hooks)r@   r  verinfor   r  liness         rB   pytest_sessionstartz$TerminalReporter.pytest_sessionstart  st   !'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# rC   r  c                     t        |      D ]<  }t        |t              r| j                  |       %|D ]  }| j                  |        > y rO   )reversedr-  rT   r   )r@   r  line_or_linesrz   s       rB   r  z/TerminalReporter._write_report_lines_from_hooks  sH     &e_ 	*M--.) *DOOD)*		*rC   c                     d|j                    g}|j                  r2|j                  dt        |j                   |j                        z          |j                  t
        j                  j                  k(  r@|j                  d      }|j                  dj                  dj                  |                   |j                  j                         }|r,|j                  ddj                  t        |            z         |S )Nz	rootdir: zconfigfile: 	testpathsztestpaths: {}, zplugins: %s)r  inipathappendr&   args_sourcer   
ArgsSource	TESTPATHSr   r  r   r   list_plugin_distinfo_plugin_nameversions)r@   r   r  r  
plugininfos        rB   r  z%TerminalReporter.pytest_report_header  s    foo./0>>MM.;v+WWX!2!2!<!<<#)==#=IMM/0091EFG))>>@
MM-$))4H4T*UUVrC   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  r>  collectonlyr   r+   !zcollection failures)r  r   rc  pytest_report_collectionfinishr   r>  r  r   r   rg   r   rz   _printcollecteditemsr   r  r6  
toterminal)r@   r  r  r+   rl  s        rB   pytest_collection_finishz)TerminalReporter.pytest_collection_finish+  s    D!  ??;;~~-- @ 

 	++E2;;  /}};;%%--2HHMM"%))'--8ZZ^^H-FS"78! -CNN488,-  0rC   c           	         | j                   j                  t        j                        }|dk  r|dk  rTt	        d |D              }t        |j                               D ]%  \  }}| j                  j                  d||fz         ' 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	  rI   r   N)r   r  ).0items     rB   	<genexpr>z8TerminalReporter._printcollecteditems.<locals>.<genexpr>E  s&      Q4!2!24!;A!> Qs   )+z%s: %dr   rI     objz{}{})r   r   r   r   r   sortedr>  r   rz   r   	listchainr2  r1  r  rK   inspectgetdoc
splitlinesr  )r@   r>  test_cases_verbositycountsnamerf   r  stackindentneeded_collectorscolr  docrz   s                 rB   r  z%TerminalReporter._printcollecteditemsA  s   #{{889T9TU!##b(  Q5 QQ#)&,,.#9 <KD%HHMM(dE]":;<
  " /DHHMM$++./ 	ND $ 0 4-lE
;;		  )U6 	NS!e*q.D0./'1,!#ud3C14'..-$C$'NN$4 ND HHMM&--t*LMN	N	NrC   )wrapper
exitstatus)NNNc              #     K   d }| j                   j                  d       t        j                  t        j                  t        j
                  t        j                  t        j                  f}||v r>| j                  s2| j                  j                  j                  | || j                         |j                  r'| j                  dt        |j                        d       |t        j
                  k(  r| j                          d | _        n3|j"                  r'| j                  dt        |j"                        d       | j%                          |S w)Nr   )r   r  r   r  T)r]  )r   rz   r    OKTESTS_FAILEDINTERRUPTEDUSAGE_ERRORNO_TESTS_COLLECTEDrk   r   rc  pytest_terminal_summary
shouldfailr9  rT   _report_keyboardinterruptr   
shouldstopsummary_stats)r@   r  r  r  summary_exit_codess        rB   pytest_sessionfinishz%TerminalReporter.pytest_sessionfinish_  s
     bKK!!    ''
 ++DOOKK44!%*T[[ 5  NN3G$6$6 7TNB---**,+/D(NN3G$6$6 7TNBs   EEc              #   ^  K   | j                          | j                          | j                          | j                          | j	                          | j                          	 d | j                          | j                          S # | j                          | j                          w xY wwrO   )summary_errorssummary_failuressummary_xfailuressummary_warningssummary_passessummary_xpassesshort_test_summaryr   s    rB   r  z(TerminalReporter.pytest_terminal_summaryz  s      	$##%!!# ##%!!#s   A!B-$B '!B-"B**B-excinfoc                 2    |j                  d      | _        y )NT)funcargs)getreprr   )r@   r  s     rB   pytest_keyboard_interruptz*TerminalReporter.pytest_keyboard_interrupt  s    '.'E$rC   c                 >    | j                   | j                          y y rO   )r   r  r   s    rB   pytest_unconfigurez#TerminalReporter.pytest_unconfigure  s    ''3**, 4rC   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)r\  )
r   	reprcrashr   r9  r   r   	fulltracer  r   rz   )r@   rE  r   s      rB   r  z*TerminalReporter._report_keyboardinterrupt  s    .."""  ,,,''sC #%{{!!++""488,!!,,TXX6V   &rC   r  rL  domainc                 *    dt         dt         f fd}|rv ||      } j                  dk\  rZ|j                  d      d   |j                  dt        j
                        k7  r%|dt         j                  t        |            z   z  }|d
z   S d	}|d
z   S )Nr   r;   c                     j                   j                  |       }r]|j                        rL|d t                }j	                  d      }|d   j                  dd      |d<   |dj                  |      z  }|S )N[r   r   r	  )r   cwd_relative_nodeidendswithr2  r  r   r   )r   rz   rF   r  r@   s      rB   mkrelz-TerminalReporter._locationline.<locals>.mkrel  sw    ;;226:D$--/Ns6{l+c*"1I--c48q	((KrC   r^  r	  r   \z <- z
[location]r   )	rT   r   r  r   r   SEPr&   r   r   )r@   r   r  rL  r  r  r  s   `   `  rB   rV  zTerminalReporter._locationline  s    	# 	# 	 -C~~"v||D'9!'<eiiA ( vDNNDL III Sy CSyrC   c                 $    |j                   }|r|S y)Nztest session)	head_line)r@   rl  r  s      rB   _getfailureheadlinez$TerminalReporter._getfailureheadline  s    MM	rC   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   )rT   longreprr  AttributeError)r@   rl  s     rB   _getcrashlinezTerminalReporter._getcrashline  sX    	s||--.. 	3<<("--! 	s,   ! 	AAA	AAAAr  c                 z    | j                   j                  |d      D cg c]  }t        |d      r| c}S c c}w )Nra   	_pdbshown)r   r  re  )r@   r  r  s      rB   
getreportszTerminalReporter.getreports  s.    ::>>$3Sa71k;RSSSs   88c                 N     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t        t           dt        f 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   r1   reportsr;   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  )rT   r  )r  locs     rB   r  zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>  s)      -36CHNN4+A.-s   (*c              3   V   K   | ]!  \  }}d j                  |||dkD  rdnd       # yw)z{}: {} warning{}rI   r   r   N)r  )r  kvs      rB   r  zWTerminalReporter.summary_warnings.<locals>.collapsed_location_report.<locals>.<genexpr>  s3      !1 '--a1q5CbI!s   '))	r   r   r  r2  r   r   rT   r   r>  )r  	locationsr   rT  counts_by_filenamer@   s        rB   collapsed_location_reportzDTerminalReporter.summary_warnings.<locals>.collapsed_location_report  s    	  3A ~~dkk:H!((23
 y>B&99Si%899%, -:C- &" yy ! 2 8 8 :!  rC   zwarnings summary (final)zwarnings summaryr  TF)r\  r  r  c              3   &   K   | ]	  }d |z     yw)r  Nra   )r  r  s     rB   r  z4TerminalReporter.summary_warnings.<locals>.<genexpr>  s     (Aa(As   zG-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html)r  r   r  r   r2  r@  r   r  r   r   rT   r9  r>  r   rz   r  r   rstrip)r@   all_warningsr
   warning_reportsreports_grouped_by_messagewrr  r7  r   message_reportsmaybe_locationr  indenteds   `            rB   r  z!TerminalReporter.summary_warnings  s   ;;s:>**..:TL44D@E".t/O/O/Q"R"./2?/CD,"IK&% Q*55bjj"ELLRPQ43F 3 $ 38.=OENN3dN?,F,L,L,N 
 (!:?!K!HHMM.1#..0E#yy(A5(AAH&oo/G%nn.Gg&
  HHMMYc rC   c                 *    | j                  ddd       y )Nr,   PASSESPsummary_passes_combinedr   s    rB   r  zTerminalReporter.summary_passes  s    $$Xx=rC   c                 *    | j                  ddd       y )Nr0   XPASSESXr'  r   s    rB   r  z TerminalReporter.summary_xpasses  s    $$Y	3?rC   which_reports	sep_title
needed_optc                    | j                   j                  j                  dk7  r| j                  |      r| j	                  |      }|sy | j                  d|       |D ]`  }|j                  r7| j                  |      }| j                  d|dd       | j                  |       | j                  |j                         b y y y )Nry   r  r  T)r[  r  )r   r   ru   r  r  r9  sectionsr  _outrep_summary_handle_teardown_sectionsr   )r@   r,  r-  r.  r  rl  r   s          rB   r(  z(TerminalReporter.summary_passes_combined  s     ;;%%-{{:&,0OOM,JsI." ?C||"66s;sCt$G,,S1223::>? ' .rC   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   r  r   s       rB   _get_teardown_reportsz&TerminalReporter._get_teardown_reports  sI    //"% "
{{j(V]]f-D 
 	
 
s   'A c                 R    | j                  |      D ]  }| j                  |        y rO   )r4  print_teardown_sections)r@   r   r   s      rB   r2  z*TerminalReporter._handle_teardown_sections   s*    008 	1F((0	1rC   rl  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 )Nry   r   r   r  r  r  )r   r   r}   r0  r   r6  rz   r@   rl  r}   secnamer  s        rB   r6  z(TerminalReporter.print_teardown_sections$  s    kk((44$ # 	'GWe#7(BW$S'*23<4'%crlGg&	'rC   c                 (    | j                  dd       y )Nr+   FAILURESsummary_failures_combinedr   s    rB   r  z!TerminalReporter.summary_failures1  s    &&x<rC   c                 *    | j                  ddd       y )Nr/   	XFAILURESr  r<  r   s    rB   r  z"TerminalReporter.summary_xfailures4  s    &&y+sCrC   c                    | j                   j                  j                  dk7  r|r| j                  |      r| j	                  |      }|sy | j                  d|       | j                   j                  j                  dk(  r*|D ]$  }| j                  |      }| j                  |       & y |D ]T  }| j                  |      }| j                  d|dd       | j                  |       | j                  |j                         V y y y )Nry   r  rz   r  Tr]  r  )r   r   ru   r  r  r9  r  r   r  r1  r2  r   )r@   r,  r-  r.  r  rl  rz   r   s           rB   r=  z*TerminalReporter.summary_failures_combined7  s     ;;%%-Z!8,0OOM,JsI.;;%%--7& .#11#6-.  ' C"66s;sCTE,,S166szzB	C "9 .rC   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 )Nry   r2   r  ERRORSr   zERROR collecting z	ERROR at z of r  TrA  )	r   r   ru   r  r9  r   r  r   r1  )r@   r  rl  r   s       rB   r  zTerminalReporter.summary_errorsK  s    ;;%%-(,(@GNN3)zz'* *..s388y(-3C%chhZtC59CsCT=$$S)* .rC   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 )Nry   r   r  r  r  )r  r   r   r   r}   r0  r6  rz   r8  s        rB   r1  z TerminalReporter._outrep_summaryZ  s    txx kk((44$ # 	#GWe#7(BHHLLg&rs|t#!#2,HHMM'"	#rC   c                 .   | j                   dk  ry t        j                         | j                  z
  }| 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                  |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  r  build_summary_stats_liner   r   r  r2  r  r   format_session_durationr   r9  r   )r@   session_durationpartsr~  
line_partsdisplay_sepr   textr  with_markupr   main_markupdurationduration_with_markupmarkup_for_end_seps                  rB   r  zTerminalReporter.summary_statsg  s   >>B!;;=4+A+AA";;=

nn)**I! 	+LD&)$((//$9&9KS-D	99	k*		+
 ii
#!4(12BCDE.txxxG;G12S]BBI##!0!C{!C!**95%7%<"/00I%%CDNN3HyHKHDOOC/;/rC   c           	           j                   sy dt        t           dt        dd f fd}dt        t           dd f fd}dt        t           dd f fd}dt        t           dd f fd}||t        |d	      |t        |d
	      t        |d	      d}g } j                   D ]  }|j	                  |      }|s ||         |r. j                  dddd       |D ]  }	 j                  |	        y y )Nr  statr;   c                    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  rU  r+   r   rl  r   rz   r@   s          rB   show_simplez8TerminalReporter.short_test_summary.<locals>.show_simple  sq    ZZ^^D"-F[[F #'++D2IJ7CE4= T"#rC   c                 ~   j                   j                  dg       }|D ]  }|j                  j                        } j                  j
                  |fi t        d   di}t        j                  j                  |      }| d| }|j                  }|r|dt        |      z   z  }| j                  |        y )Nr/   r1   Tr    - r   r  _get_verbose_wordr   r   r  rW  _get_node_id_with_markuprZ  rT   r  )	r  r/   rl  verbose_wordmarkup_wordr   rz   ro  r@   s	           rB   show_xfailedz9TerminalReporter.short_test_summary.<locals>.show_xfailed  s    jjnnY3G #"44T[[A-dhhoo %4Z%@$$G 2$((DKKM%ax0ECK//DT"#rC   c                 ~   j                   j                  dg       }|D ]  }|j                  j                        } j                  j
                  |fi t        d   di}t        j                  j                  |      }| d| }|j                  }|r|dt        |      z   z  }| j                  |        y )Nr0   r1   Tr   r\  r]  )	r  r0   rl  r`  ra  r   rz   ro  r@   s	           rB   show_xpassedz9TerminalReporter.short_test_summary.<locals>.show_xpassed  s    jjnnY3G 
#"44T[[A-dhhoo %4Z%@$$G 2$((DKKM%ax0ECK//DT"
#rC   c           	         
j                   j                  dg       }|rt        
j                  |      ng }|sy |d   j	                  
j
                        } 
j                  j                  |fi t        d   di}d}|D ]Z  \  }}}}	|	j                  |      r|	t        |      d  }	|| j                  d|||||	fz         C| j                  d||||	fz         \ y )Nr-   r   r1   T	Skipped: z%s [%d] %s:%d: %sz%s [%d] %s: %s)r   r  _folded_skipsr   r^  r   r   r  rW  
startswithr2  r  )r  r-   fskipsr`  ra  r  numr  rL  ro  r@   s             rB   show_skippedz9TerminalReporter.short_test_summary.<locals>.show_skipped  s    +/::>>)R+HG?F]4>>7;BF"1:77DL)$((//!0!<d CK !F/5 X+VVV$$V,#CKM2F%LL+{CQW.XX LL!1[#vv4V!VWXrC   r+   )rU  r,   r2   )r  r+  fr   pr   r  zshort test summary infoT)ra  r  )rn   r   rT   r   r  r9  r   )
r@   rZ  rb  rd  rk  REPORTCHAR_ACTIONSr  r   rh   rz   s
   `         rB   r  z#TerminalReporter.short_test_summary  s   
	#tCy 
	#3 
	#4 
	#	#S	 	#d 	#	#S	 	#d 	#	XS	 	Xd 	X* 848473I
 $$ 	D'++D1Fu	
 NN3 94NP &%& rC   c                     | j                   | j                  | j                  r,| j                          | j                   sJ | j                  sJ | j                   | j                  fS rO   )r   r   ru  rB  r   s    rB   rz  z TerminalReporter._get_main_color  sb    #t'8'8'@DDVDV  "####$$$$!2!222rC   unknown_type_seenc                 ~    | 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+   r2   r]  r1   r0   r\  r,   r[  )r   ru  )r@   rp  r   r~  s       rB   _determine_main_colorz&TerminalReporter._determine_main_color  st    

u5 0J  5 I$6:K!J
 	 d&8&8 J  "JrC   c                     g }| j                   D ]$  }|s|t        vs||vs|j                  |       & t        t              |z   | _        | j                  t        |            | _        y rO   )r   KNOWN_TYPESr  listr   rr  rV   r   )r@   unknown_types
found_types      rB   rB  z TerminalReporter._set_main_color  sf    #%** 	5J[0Z}5T!((4	5 !-=55d=6IJrC   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    rB   rH  z)TerminalReporter.build_summary_stats_line  s4    ( ;;  />>@@88::rC   keyc                     | 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  rK   )r@   r{  r  r  s       rB   _get_reports_to_displayz(TerminalReporter._get_reports_to_display  s6    **..b)"Paga1H$&O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)rz  r}  r2  rW  r  rX  r  	pluralize)	r@   r~  known_typesrK  r{  r  rf   r   r  s	            rB   rz  z1TerminalReporter._build_normal_summary_stats_line  s     #'"6"6"8
K 	HC2237GG'++C1HIvu
/BCg	%(==vFG	H $'>&EFGEj  rC   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.   r2   r   zno tests collectedr\  Tr[  z%d %s collectedtestzno tests collected (z deselected)rx  z tests collected (r  )r2  r}  r   r  rW  )r@   r.   r,  rK  r~  collected_outputall_tests_were_deselectedr  s           rB   ry  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  rC   rO   rG  )r;   N)NN)r  )F)r  r*   r;   N)frP   rQ   rR   r   r   r   r?   r   r   propertyr   r   rV   r   rj   rk   r   setterr  rT   r  r  r  r  r(  r  r
  r   bytesr   r5  r9  r<  rz   r   r   rD  r   rG  r1   WarningMessagerN  r   rQ  r#   rS  r   rW  r)   rr  ru  r  rk  r  r{  r  r(   r  r  r!   r  r  r   r  r  r  r    r   r  r  r   BaseExceptionr  r  r  rV  r  r  r  r  r  r  r(  r4  r2  r6  r  r  r=  r  r'   r1  r  r  rz  rr  rB  r	   rH  r}  rz  ry  ra   rC   rB   r   r   _  s   Ev EXf-= E E4w7Q/R * 3   #D # # 24 2 2 3D 3 3  D    
 ! !4 ! ! J$ J J(3 (4 (	2# 	2d 	2t 	2$# $c $T $& 77 	7
 7 7 7 
7, 49 7S 7D 7D 7T 7&uS%Z0 &D &T &5C 54 5D 5*  $#'	66 }6 C=	6
 6 
6'S 's ' ' '! !4 !D !#3 #x} # #M d 
6!006 6 
	6!} ! !-x~ -$ -%*3s+B%C	Bz Bd BH Tt T TEs Et E03 "A . . .A"= "T "#"D #"T #"J d7 74*eC#$678*	*6 d3i -,N(4. NT N< d .3CM.B	#	$ 4 d$3C)D $ $F}1M FRV F- #&08GJ	.Ts T4l>@? ?-0?>A?	? 
C 
D4D 
1 1 1': '$ '=D OSC C-0C>FsmC	C(*#: #$ ##0JS&j3sDI~!6 3
t 
 
K;%U3S$Y;O5P0QSV0V*W ;2Q3 Q49 Q
!	tE#tCI./0#5	6!&!	tE#tCI./0#5	6!rC   r   twrl  c                     |j                  |j                        }|j                  d      ^}}|r*| j                  dj	                  |      d      }|dz   |z   S |S )Nr	  Tr  )r  r   r  r  r   )r  r   rl  r   pathrK  parts_markups          rB   r_  r_  O  sZ    ''

3F<<%LD5yy5!1y=d{\))rC   r  r   rp  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  r2  )r  r   rp  iellipsisformat_widths         rB   rh  rh  Y  s     	ABw"1gHFMM"-.Lc(m#o5hsm#o53x=("?#Xc]*_<cr(C Xc]*_<x==rC   word_markupc                    |j                  |       } |j                  |fi |}t        || |      }| d| }t        |      }	 |j                  j
                  j                  }	t               s| j                  j                  dk\  r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   r^  r\  z - {})r^  r  r_  r   r	  r  r   r   r   rg   r   rh  r
  )r   rl  r  r  r`  r_   rY  rz   
line_widthr   rp  s              rB   rY  rY  r  s     ((0L299\1[1D#B4DV1TFD$Jll$$,, ?fmm33q8u+C llZ7O!'3@C?CKDK   Ks    B3 3	C ?C r   r-   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)r	  r-  rd  r2  r&   r   rK   r   r@  r  r>  )r   r-   deventr  rL  ro  r  r{  rF   eventss              rB   rg  rg    s+    DFA ,~~)))%..%0I5%..2II05>>"a'@%)@@'!&YV55*b1
 JJ'!("H,3942HC66*C	S"$$U+',( 9;Fwwy +Vs6{)S)*+MrC   r]  r\  r[  )r+   r2   r1   r,   rf   nounc                 T    |dvr| |fS |j                  dd      }| | dk7  r|dz   fS |fS )N)r2   r1   r  r1   warningrI   r   )r   )rf   r  s     rB   r  r    sD    00d{
 <<
I.D
$*4444rC   c                     g }| D ]L  \  }}|j                    d|j                   }|j                  d      r|dd  }||vs<|j                  |       N |S )Nr  zpytest-   )project_namer  rh  r  )r  rF   rO  distr  s        rB   r  r    sg    F"  ##$Adll^4??9%8DvMM$  MrC   secondsc                 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.<   z.2fr   )r  zs (r`  )datetime	timedeltar   )r  dts     rB   rI  rI    sA    |#a  G5#c"Q''rC   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.
    rZ  zreason: Nrf  Skippedr   )re  rZ  rh  r2  r-   r-  r	  rd  )r   ro  r  s      rB   rg  rg    s    
 vz"Z(C
O-.F~~~&//51111f[)C,./F  y FrC   )^rS   rW   collectionsr   dataclassesr  	functoolsr   r  pathlibr   r  r   r%  typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r1   r  r   r   r   _pytest._coder   _pytest._code.coder   _pytest._ior   _pytest._io.wcwidthr   _pytest._version_pytest.assertion.utilr   r   r   r   r    r!   _pytest.config.argparsingr"   _pytest.nodesr#   r$   _pytest.pathlibr%   r&   _pytest.reportsr'   r(   r)   _pytest.mainr*   r  rt  r   Actionr5   r\   r   r   rT   r   r   	dataclassr   r   r_  r   rh  rV   rY  rg  rW  rX  r  r  floatrI  rg  ra   rC   rB   <module>r     s  
         
                        ' , & (  0 ( ! # # ,   ( ' & ) & $  # 	  "=hoo "=J5 5(AV A AH	BV 	B 	B C 2 
$,Z ,E#sC-4H , ,   8 l! l! l!^  j C c C HSM 2#)7FJ3PT9o8m$ 
%S(3-,
-.@ 	 # 
5S 
5 
5c3h 
5S	 (U (s (  rC   