+
    yj)O                      a  0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIH	t	 ^ RIH
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt RtR]R&   RtR]R&   Rt R]R&    ! R R]4      t!R R lt"R R lt#R R lt$R R  lt%R! R" lt&R# R$ lt'R% R& lt(R' R( lt)R) R* lt*R+ R, lt+R- R. lt,R/ R0 lt-ROR1 R2 llt.RPR3 R4 llt/RPR5 R6 llt0RPR7 R8 llt1RPR9 R: llt2RPR; R< llt3RPR= R> llt4RPR? R@ llt5RPRA RB llt6RPRC RD llt7RE RF lt8RPRG RH llt9RI RJ lt:RPRK RL llt;RM RN lt<R# )Qz"Utilities for assertion debugging.)annotationsN)AbstractSet)Any)Callable)Iterable)Literal)Mapping)Protocol)Sequence)	normalize)outcomes)PrettyPrinter)saferepr)saferepr_unlimited)Configz2Callable[[str, object, object], str | None] | None_reprcomparez&Callable[[int, str, str], None] | None_assertion_passzConfig | None_configc                  &    ] tR t^)tRR R lltRtR# )_HighlightFuncc               $    V ^8  d   QhRRRRRR/# )   sourcestrlexerzLiteral['diff', 'python']return )formats   "J/var/www/html/2rare/lib/python3.14/site-packages/_pytest/assertion/util.py__annotate___HighlightFunc.__annotate__*   s#     6 6s 6+D 6TW 6    c                    R# )z'Apply highlighting to the given source.Nr   )selfr   r   s   &&&r   __call___HighlightFunc.__call__*   s    r!   r   N)python)__name__
__module____qualname____firstlineno__r$   __static_attributes__r   r!   r   r   r   )   s    6 6r!   r   c                    V ^8  d   QhRRRR/# )r   explanationr   r   r   )r   s   "r   r   r   .   s      C C r!   c                P    \        V 4      p\        V4      pRP                  V4      # )an  Format an explanation.

Normally all embedded newlines are escaped, however there are
three exceptions: \n{, \n} and \n~.  The first two are intended
cover nested explanations, see function and attribute explanations
for examples (.visit_Call(), visit_Attribute()).  The last one is
for when one explanation needs to span multiple lines, e.g. when
displaying diffs.

)_split_explanation_format_linesjoin)r-   linesresults   &  r   format_explanationr5   .   s'     {+E5!F99Vr!   c                    V ^8  d   QhRRRR/# )r   r-   r   r   	list[str]r   )r   s   "r   r   r   =   s      C I r!   c                    T ;'       g    RP                  R4      pV^ ,          .pVR,           FH  pV'       d"   V^ ,          R9   d   VP                  V4       K,  VR;;,          RV,           ,          uu&   KJ  	  V# )zReturn a list of individual lines in the explanation.

This will return a list of lines split on '\n{', '\n}' and '\n~'.
Any other newlines will be escaped and appear in the line as the
literal '\n' characters.
 r/      NNz\n){}~>)splitappend)r-   	raw_linesr3   valuess   &   r   r0   r0   =   sk     ""))$/Iq\NEB--fQi#77LL "I'I	  
 Lr!   c                    V ^8  d   QhRRRR/# )r   r3   zSequence[str]r   r7   r   )r   s   "r   r   r   N   s          9  r!   c                   \        V R,          4      p^ .p^ .pV R,           EF  pVP                  R4      '       d   VR
,          '       d   RpMRpVP                  \        V4      4       VR
;;,          ^,          uu&   VP                  ^ 4       VP                  RR\        V4      ^,
          ,          ,           V,           VR,          ,           4       K  VP                  R4      '       dF   VP	                  4        VP	                  4        WR
,          ;;,          VR,          ,          uu&   EK  V^ ,          R9   g   Q hVR
;;,          ^,          uu&   VP                  R	4      '       d   \        V4      M\        V4      ^,
          pVP                  RV,          VR,          ,           4       EK  	  \        V4      ^8X  g   Q hV# )zFormat the individual lines.

This will replace the '{', '}' and '~' characters of our mini formatting
language with the proper 'where ...', 'and ...' and ' + ...' text, taking
care of indentation along the way.

Return a list of formatted lines.
:Nr;   Nr:   r<   zand   zwhere z +  r=   r>   r@   )r>   r?   )list
startswithrB   lenpop)r3   r4   stackstackcntlinesindents   &      r   r1   r1   N   sN    %)_FCEsHb		??3||LLV%RLALOOAMM$Ua!881<tBxGH__S!!IIKLLN9b)7j((("INI#'??3#7#7SZSZ!^FMM$-$r(23% & u:??Mr!   c                    V ^8  d   QhRRRR/# r   xr   r   boolr   )r   s   "r   r   r   q   s     N N# N$ Nr!   c                    \        V \        P                  P                  4      ;'       d    \        V \        4      '       * # N)
isinstancecollectionsabcr
   r   rS   s   &r   
issequencer[   q   s+    a112MM:a;M7MMr!   c                    V ^8  d   QhRRRR/# rR   r   )r   s   "r   r   r   u   s      c d r!   c                "    \        V \        4      # rV   )rW   r   rZ   s   &r   istextr^   u   s    ar!   c                    V ^8  d   QhRRRR/# rR   r   )r   s   "r   r   r   y   s      c d r!   c                "    \        V \        4      # rV   )rW   dictrZ   s   &r   isdictrb   y   s    ar!   c                    V ^8  d   QhRRRR/# rR   r   )r   s   "r   r   r   }   s     + +S +T +r!   c                .    \        V \        \        34      # rV   )rW   set	frozensetrZ   s   &r   issetrg   }   s    a#y)**r!   c                    V ^8  d   QhRRRR/# r   objr   r   rT   r   )r   s   "r   r   r      s     P Pc Pd Pr!   c                P    \        V \        4      ;'       d    \        V R R4      RJ# )_fieldsN)rW   tuplegetattrrj   s   &r   isnamedtuplerp      s%    c5!OOgc9d&C4&OOr!   c                    V ^8  d   QhRRRR/# ri   r   )r   s   "r   r   r      s     B B3 B4 Br!   c                     \        V R R4      RJ# )__dataclass_fields__Nrn   ro   s   &r   	isdataclsru      s    3.5TAAr!   c                    V ^8  d   QhRRRR/# ri   r   )r   s   "r   r   r      s     = = = =r!   c                     \        V R R4      RJ# )__attrs_attrs__Nrt   ro   s   &r   isattrsry      s    3)40<<r!   c                    V ^8  d   QhRRRR/# ri   r   )r   s   "r   r   r      s      C D r!   c                ^     \        V 4       \        V 4      '       * #   \         d     R # i ; iF)iterr^   	Exceptionro   s   &r   
isiterabler      s,    S	#; s    ,,c                    V ^8  d   QhRRRR/# )r   rj   objectr   rT   r   )r   s   "r   r   r      s      		r!   c                    \        V P                  R4      '       db   \        V P                  P                  R4      '       d<   V P                  P                  P                  p\	        V 4      '       d   RV9   # VR8H  # R# )a|  Check if an instance of an object contains the default eq

First, we check if the object's __eq__ attribute has __code__,
if so, we check the equally of the method code filename (__code__.co_filename)
to the default one generated by the dataclass and attr module
for dataclasses the default co_filename is <string>, for attrs class, the __eq__ should contain "attrs eq generated"
__code__co_filenamezattrs generated eqz<string>T)hasattr__eq__r   r   ry   )rj   code_filenames   & r   has_default_eqr      sb     szz:&&73::3F3F+V+V

++773<<'=88
**r!   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   opr   leftr   right	use_asciirT   r   zlist[str] | Noner   )r   s   "r   r   r      s;     C# C#C#C#'*C#7;C#C#r!   c                   V P                  \        P                  4      p\        V\        4      ;'       d2    \        V\        4      ;'       d    \        RV4      \        RV4      8H  pV^8  d   \        W$R7      p\        W4R7      pM:^A\        V4      ,
          ^,
          ^,          p\        W(VR7      p\        W8VR7      pV RV RV 2p	V P                  4       P                  p
Rp VR8X  d   \        W#W4      pEM;VR8X  d1   \        V4      '       d   \        V4      '       d   \        W#V4      pEMVR8X  d'   \        V4      '       d   \        V4      '       d   R	.pMVR
8X  d0   \        V4      '       d   \        V4      '       d   \        W#W4      pMVR8X  d0   \        V4      '       d   \        V4      '       d   \!        W#W4      pMkVR8X  d0   \        V4      '       d   \        V4      '       d   \#        W#W4      pM5VR8X  d/   \        V4      '       d   \        V4      '       d   \%        W#W4      pV'       g   R# V^ ,          R8w  d   R.VOpV	.VO#   \&        P(                   d    h \*         dB    \,        P.                  P0                  P3                  4       P5                  4       pRT R2R.p Li ; i)z<Return specialised explanations for some operators/operands.NFD)r   )maxsizer    Nz==znot inz!=Both sets are equalz>=z<=r?   <z<(pytest_assertion plugin: representation of details failed: .z+ Probably an object has a faulty __repr__.)r9   )get_verbosityr   VERBOSITY_ASSERTIONSrW   r   r   r   rJ   r   get_terminal_writer
_highlight_compare_eq_anyr^   _notin_textrg   _compare_gte_set_compare_lte_set_compare_gt_set_compare_lt_setr   Exitr~   _pytest_codeExceptionInfofrom_current_getreprcrash)configr   r   r   r   verbose	left_repr
right_reprr   summaryhighlighterr-   
repr_crashs   &&&&&        r   assertrepr_comparer      sZ    ""6#>#>?G
 	4 	> 	>uc"	> 	>eT"iu&==  {&tA	'C

 c"g! TiH	e	J
1RD*.G,,.99KK
:)${LK8^d||u)$w?4ZT{{uU||454ZT{{uU||.tKQ4ZT{{uU||.tKQ3YT{{uU||-d;P3YT{{uU||-d;P 1~(K("k"" ==  
]]00==?MMO
J:,VWX9

s<   *I ?5I 6,I #5I 5I 5I 5I J=;?J=<J=c          
     ,    V ^8  d   QhRRRRRRRRRR	/# 
r   r   r   r   r   r   r   intr   r7   r   )r   s   "r   r   r      s4     " "
""(6"AD""r!   c                x   . p\        V 4      '       d    \        V4      '       d   \        WV4      pV# ^ RIHp \	        W4      '       g   \	        W4      '       d=   \	        W4      '       d   T MTp\	        W4      '       d   TMT pVP                  V4      pM\        V 4      \        V4      J dA   \        V 4      '       g#   \        V 4      '       g   \        V 4      '       d   \        WW#4      pM\        V 4      '       d   \        V4      '       d   \        WW#4      pM]\        V 4      '       d   \        V4      '       d   \        WW#4      pM.\        V 4      '       d   \        V4      '       d   \!        WW#4      p\#        V 4      '       d/   \#        V4      '       d   \%        WW#4      pVP'                  V4       V# )    )
ApproxBase)r^   
_diff_text_pytest.python_apir   rW   _repr_comparetyperu   ry   rp   _compare_eq_clsr[   _compare_eq_sequencerg   _compare_eq_setrb   _compare_eq_dictr   _compare_eq_iterableextend)	r   r   r   r   r-   r   approx_side
other_sideexpls	   &&&&     r   r   r      sC    Kd||u g6: 7 	2d'':e+H+H",T">">$EK",T">">DJ%33J?K$Z4;&dOOwt}}T0B0B *${LK*U"3"3.tKQK4[[U5\\)${LKD\\fUmm*4MKd
5 1 1'[JDt$r!   c               (    V ^8  d   QhRRRRRRRR/# )r   r   r   r   r   r   r   r7   r   )r   s   "r   r   r     s(     - -S - -s -9 -r!   c                :   ^ RI Hp . pV^8  d   ^ p\        \        \	        V 4      \	        V4      4      4       F  pW,          W,          8w  g   K   M	  V^*8  d   V^
,          pRV R2.pWR p WR p\	        V 4      \	        V4      8X  d]   \        \	        V 4      4       F  pW) ,          W) ,          8w  g   K   M	  V^*8  d$   V^
,          pVRV R2.,          pV RV)  p VRV)  pRpV P                  4       '       g   VP                  4       '       d3   \        \        V 4      4      p \        \        V4      4      pVR.,          pTV! VP                  V4      V P                  V4      4       Uu. uF  pVP                  R4      NK  	  up,          pV# u upi )	zReturn the explanation for the diff between text.

Unless --verbose is used this will skip leading and trailing
characters which are identical to keep the diff minimal.
)ndiffz	Skipping z5 identical leading characters in diff, use -v to showNz6 identical trailing characters in diff, use -v to showTz;Strings contain only whitespace, escaping them using repr()r/   )
difflibr   rangeminrJ   isspacereprr   
splitlinesstrip)r   r   r   r   r-   ikeependsrN   s   &&&     r   r   r     s    K{s3t9c%j12Aw%(" 3 r6GAA3STK 8D"IEt9E
"3t9%8uRy( & 2vRs #9 9   CaRycr
H||~~CISZ UVV %**84dooh6OPPD 	

4P K 	s   3Fc          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   r   zIterable[Any]r   r   r   r   r   r   r7   r   )r   s   "r   r   r   E  s:      
   	
 r!   c                ~   V^ 8:  d   \        4       '       g   R.# ^ RIp\        4       P                  V 4      P	                  4       p\        4       P                  V4      P	                  4       pRR.pVP                  V! RP                  R VP                  We4       4       4      RR7      P	                  4       4       V# )	r   zUse -v to get more diffNr9   z
Full diff:r/   c              3  B   "   T F  pVP                  4       x  K  	  R # 5irV   )rstrip).0rN   s   & r   	<genexpr>'_compare_eq_iterable.<locals>.<genexpr>X  s      LD Ls   diff)r   )running_on_cir   r   pformatr   r   r2   r   )r   r   r   r   r   left_formattingright_formattingr-   s   &&&&    r   r   r   E  s     !|MOO)**#o--d3>>@O$..u5@@B|$K II #MM*:L  	
 *, r!   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   r   zSequence[Any]r   r   r   r   r   r   r7   r   )r   s   "r   r   r   b  s:     : :
::  : 	:
 :r!   c                   \        V \        4      ;'       d    \        V\        4      p. p\        V 4      p\        V4      p\        \	        Wg4      4       F  pW,          W,          8w  g   K  V'       d   WV^,            p	WV^,            p
MW,          p	W,          p
VP                  RV RV! \        V	4      4       RV! \        V
4      4       24        M	  V'       d   V# Wg,
          pV'       do   V^ 8  d   Rp\        W,          4      pM^ V,
          pRp\        W,          4      pV^8X  d   VV RV! V4       2.,          pV# VRWV! V4      3,          .,          pV# )r;   z	At index z diff:  != LeftRightz contains one more item: z/%s contains %d more items, first extra item: %s)rW   bytesrJ   r   r   rB   r   r   )r   r   r   r   comparing_bytesr-   len_left	len_rightr   
left_valueright_valuelen_diffdir_with_moreextras   &&&&          r   r   r   b  sv    !u-JJ*UE2JOK4yHE
I3x+,7eh "a!e_
#A.!W
#hA3 Z 012${4CT7U6VX + -.  #Ha<"MT_-E8|H#MU_-Eq= /!:;u;M:NO K 	 A K,>?@ K r!   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# 
r   r   AbstractSet[Any]r   r   r   r   r   r   r7   r   )r   s   "r   r   r     :     	 	
		  	 		
 	r!   c                z    . pVP                  \        R WV4      4       VP                  \        RWV4      4       V# )r   r   )r   _set_one_sided_diffr   r   r   r   r-   s   &&&& r   r   r     s?     K*64LM*7EMNr!   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# r   r   )r   s   "r   r   r     r   r!   c                4    \        WV4      pV'       g   R .# V# r   )r   r   s   &&&& r   r   r     "     #4<K%&&r!   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# r   r   )r   s   "r   r   r     r   r!   c                4    \        WV4      pV'       g   R .# V# r   )r   r   s   &&&& r   r   r     r   r!   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# r   r   )r   s   "r   r   r     sA     B B
BB  B 	B
 Br!   c                    \        R WV4      # )r   r   r   r   r   r   s   &&&&r   r   r     s     w[AAr!   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# r   r   )r   s   "r   r   r     sA     A A
AA  A 	A
 Ar!   c                    \        R WV4      # )r   r   r   s   &&&&r   r   r     s     vtK@@r!   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   posnr   set1r   set2r   r   r   r7   r   )r   s   "r   r   r     s:      

   	
 r!   c                    . pW,
          pV'       d?   VP                  R V  R24       V F#  pVP                  V! \        V4      4      4       K%  	  V# )zExtra items in the z set:)rB   r   )r   r   r   r   r-   r   items   &&&&   r   r   r     sR     K;D0e<=D{8D>:; r!   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   r   zMapping[Any, Any]r   r   r   r   r   r   r7   r   )r   s   "r   r   r     s:     - -
--  - 	-
 -r!   c                   . p\        V 4      p\        V4      pVP                  V4      pV Uu/ uF!  qV,          W,          8X  g   K  WV,          bK#  	  p	pV	'       d    V^8  d   VR\        V	4       R2.,          pMBV	'       d;   VR.,          pWB! \        P                  ! V	4      4      P                  4       ,          pV Uu0 uF  qV,          W,          8w  g   K  VkK  	  p
pV
'       dZ   VR.,          pV
 FI  pVV! \        WV,          /4      4      R,           V! \        WV,          /4      4      ,           .,          pKK  	  WV,
          p\        V4      pV'       dr   TP                  RY^8X  d   RMR3,          4       TP                  T! \        P                  ! V Uu/ uF  qW,          bK  	  up4      4      P                  4       4       We,
          p\        V4      pV'       dr   TP                  R	Y^8X  d   RMR3,          4       TP                  T! \        P                  ! V Uu/ uF  qW,          bK  	  up4      4      P                  4       4       V# u upi u upi u upi u upi )
r   	Omitting ! identical items, use -vv to showzCommon items:zDiffering items:r   zLeft contains %d more item%s:r9   rO   zRight contains %d more item%s:)	re   intersectionrJ   pprintr   r   r   rB   r   )r   r   r   r   r-   set_left	set_rightcommonksamer   
extra_leftlen_extra_leftextra_rightlen_extra_rights   &&&&           r   r   r     s7     K4yHE
I""9-F &>1q'UX*=JAAwJD>!)CI;.OPQQ	(({6>>$#78CCEE5v!aEH!4AAvD5*++AHaa\23h8}567 K  %J_N+q%8rcBC	
 	J'GJq47
J'GHITTV	
 &K+&O,&:DE	
 	['I[58['IJKVVX	
 G ? 6" (H (Js#   I!I!I&I&%I+1I0c          
     ,    V ^8  d   QhRRRRRRRRRR	/# r   r   )r   s   "r   r   r     s4     4 4
44(64AD44r!   c                   \        V 4      '       g   . # \        V 4      '       dE   ^ RIpVP                  V 4      pV Uu. uF"  qfP                  '       g   K  VP
                  NK$  	  ppMm\        V 4      '       d=   V P                  pV Uu. uF#  p\        VR4      '       g   K  VP
                  NK%  	  ppM \        V 4      '       d   V P                  pMQ hRp	. p
. pV F@  p\        W4      \        W4      8X  d   V
P                  V4       K/  VP                  V4       KB  	  . pV
'       g	   V'       d   VR.,          pV
'       d'   V^8  d    VP                  R\        V
4       R24       MBV
'       d;   VR.,          pW! \        P                  ! V
4      4      P                  4       ,          pV'       d   VR.,          pW! \        P                  ! V4      4      P                  4       ,          pV Fz  p\        W4      p\        W4      pVRR	V R
2V	 V RV! \!        V4      4       RV! \!        V4      4       2.,          pT\#        WW#4       Uu. uF  pW,           NK  	  up,          pK|  	  V# u upi u upi u upi )r   NeqrG   r9   r  r  zMatching attributes:zDiffering attributes:z$Drill down into differing attribute :z: r   )r   ru   dataclassesfieldscomparenamery   rx   rn   rp   rl   rB   rJ   r  r   r   r   r   )r   r   r   r   r  
all_fieldsinfofields_to_checkfieldrP   r	  r   r-   
field_leftfield_rightrN   s   &&&&            r   r   r     sG    $	 ''-
1;L||9499L	))
3=V:%PTAU:5:::V	d		,,uFDD 475#88KKKK	 ! Ktt!Ys4yk1RST	.//{6>>$#78CCEE/00{6>>$#78CCEEE -J!%/K6ugQ?(5'KZ0@$A#B${SWXcSdGeFfg K
 +[D  K  W M WDs   I2I2
I7#I7I<c               (    V ^8  d   QhRRRRRRRR/# )r   termr   textr   r   r   r7   r   )r   s   "r   r   r   K  s(      c  s 9 r!   c                   VP                  V 4      pVR V pW\        V 4      ,           R  pWE,           p\        WV4      p\        V ^*R7       R2.pV F~  p	V	P	                  R4      '       d   K  V	P	                  R4      '       d   K5  V	P	                  R4      '       d"   VP                  RV	R,          ,           4       Km  VP                  V	4       K  	  V# )N)r   z is contained here:Skippingz- z+ rG   :r   NN)findrJ   r   r   rI   rB   )
r  r  r   indexheadtailcorrect_textr   newdiffrN   s
   &&&       r   r   r   K  s    IIdOE<DD	!#$D;Ld'2D4,--@ABG??:&&??4  ??4  NN4$r(?+NN4   Nr!   c                   V ^8  d   QhRR/# )r   r   rT   r   )r   s   "r   r   r   ^  s     6 6t 6r!   c                 r    RR.p \         ;QJ d    R V  4       F  '       g   K   R# 	  R# ! R V  4       4      # )z0Check if we're currently running on a CI system.CIBUILD_NUMBERc              3  F   "   T F  q\         P                  9   x  K  	  R # 5irV   )osenviron)r   vars   & r   r    running_on_ci.<locals>.<genexpr>a  s     5HSbjj Hs   !TF)any)env_varss    r   r   r   ^  s5    n%H35H53353535H555r!   r|   )r   )=__conditional_annotations____doc__
__future__r   collections.abcrX   r,  r  typingr   r   r   r   r   r   r	   r
   unicodedatar   r   r   _pytest._code_pytest._io.pprintr   _pytest._io.safereprr   r   _pytest.configr   r   __annotations__r   r   r   r5   r0   r1   r[   r^   rb   rg   rp   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r2  s   @r   <module>r=     s
   ( "  	          !   , ) 3 ! DH@ G ;?7 >  6X 6
" FN+PB=*C#L"J-`::z			BA-`4n&6r!   