bgYF <UdZddlZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z ddlm Z dd lm Z dd lm Z dd lmZddlZdd lmZdd lmZddlmZddlmZddlmZdZe eeeege efed<dZe eeeegdfed<dZe eed<dedefdZ dede efdZ!de ede efdZ"dede#fdZ$dede#fdZ%dede#fdZ&dede#fdZ'dede#fd Z(dede#fd!Z)dede#fd"Z*dede#fd#Z+dede#fd$Z, d8d&ed'ed(ed)e#de e ef d*Z-d9d'ed(ed+ede efd,Z.d9d'ed(ed+ede efd-Z/de eddfd.Z0 d9d'e ed(e ed+ede efd/Z1 d9d'e ed(e ed+ede efd0Z2 d9d'eed(eed+ede efd1Z3 d9d'e eefd(e eefd+ede efd2Z4d'ed(ed+ede efd3Z5d9d4ed5ed+ede efd6Z6de#fd7Z7dS):z"Utilities for assertion debugging.N) AbstractSet)Any)Callable)Iterable)List)Mapping)Optional)Sequence) normalize)outcomes)_pformat_dispatch)saferepr)saferepr_unlimited)Config _reprcompare_assertion_pass_config explanationreturncht|}t|}d|S)aFormat 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_linesjoin)rlinesresults g/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/_pytest/assertion/util.pyformat_explanationr$s0 { + +E 5 ! !F 99V  c|pdd}|dg}|ddD]7}|r |ddvr||$|dxxd|zz cc<8|S) 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. rrN){}~>z\n)splitappend)r raw_linesrvaluess rrr3s"))$//I q\NEABB-((  (fQi#777 LL "III 'IIII Lrrcrt|dd}dg}dg}|ddD]x}|dr|drd}nd}|t||dxxdz cc<|d|dd t|dz zz|z|ddz|d rH||||dxx|ddz cc<|dd vsJ|dxxdz cc<|d rt|nt|dz }|d |z|ddzzt|dksJ|S) a Format 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"rr#r'zand zwhere z + r$)r%r&r%)list startswithr)lenpop)rrstackstackcntlinesindents rrrDs%)__F CEsHabb 44 ??3   4|  LLV % % % RLLLA LLL OOA    MM$Ua!881s ristextrAks a  rc,t|tSr9)r:dictr>s risdictrDos a  rc:t|ttfSr9)r:set frozensetr>s rissetrHss a#y) * **robjcRt|tot|ddduS)N_fields)r:tuplegetattrrIs r isnamedtuplerOws( c5 ! ! Ogc9d&C&C4&OOrc(t|ddduS)N__dataclass_fields__rMrNs r isdataclsrS{s 3. 5 5T AArc(t|ddduS)N__attrs_attrs__rRrNs risattrsrVs 3)4 0 0 <, for attrs class, the __eq__ should contain "attrs eq generated" __code__ co_filenamezattrs generated eqzT)hasattr__eq__r\r]rV)rI code_filenames rhas_default_eqrasdsz:&&+73:3F +V+V+ +7 3<< 9'=8 8 ** 4rFopleftright use_asciic*|d}t|to6t|to!td|td|k}|dkr#t ||}t ||}n uc " " > eT " "iu&=&= = {{&tyAAA 'CCC c"gg  ! T7iHHH eW JJJ ..R..*..GK ::)$w??KK 8^^d|| @u  @)$w?? =    M T T +88::HHJJ   :    t 9{ ""sA D""A#FFrgcg}t|r"t|rt|||}nddlm}t ||st ||r>t ||r|n|}t ||r|n|}||}nt |t |kr?t|st|st|rt|||}nt|r!t|rt|||}n_t|r!t|rt|||}n/t|r t|rt!|||}t#|r5t#|r&t%|||}|||S)Nr) ApproxBase)rA _diff_text_pytest.python_apir~r: _repr_comparetyperSrVrO_compare_eq_clsr?_compare_eq_sequencerH_compare_eq_setrD_compare_eq_dictrZ_compare_eq_iterableextend)rcrdrgrr~ approx_side other_sideexpls rrnrnsK d||%u % ug66 111111 dJ ' ' A:eZ+H+H A",T:">">I$$EK",T:">">HDJ%33J??KK $ZZ4;; & & dOO'&t}}'0tt|}tt|}|d gz }|d || || |Dz }|S) 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. r)ndiffr"* z@Skipping %s identical leading characters in diff, use -v to showNzASkipping {} identical trailing characters in diff, use -v to showTz;Strings contain only whitespace, escaping them using repr()c8g|]}|dS)r)strip.0r4s r z_diff_text.. s4  4r) difflibrrangeminr0rrisspacereprr= splitlines)rcrdrgrrikeependss rrrs K{{ s3t99c%jj1122  AAw%(""# r66 GARUVVK8D!""IE t99E " "3t99%%  8uaRy((E)2vvR99?  CaRCycrc H ||~~WWCIISZZ  UVV E%**844dooh6O6OPPK rc|ddd}|dvr!d|dddz|d<|g|z|dd<|ddd}|dvr#|ddddz|d<||gz|dd<dSdS) z6Move opening/closing parenthesis/bracket to own lines.rNr")([r#rlr'))]r$,)ropeningclosings r _surrounding_parens_on_own_linesr'sAhrrlG/!!q!""%a9u$aaaBinG/!!"IcrcNS(b G9$aaa"!rc`|dkrtsdgSddl}tj|}tj|}t |}t |}||krBt |}t |}|dks|dkrt|t|dg}|d| ||D|S)NrzUse -v to get more diffr"z Full diff:c3>K|]}|VdSr9)rstriprs r z'_compare_eq_iterable..Ls; r) running_on_cirpprintpformatrr0r rrr) rcrdrgrleft_formattingright_formatting lines_left lines_rightrs rrr3s;!||MOO|)**NNNnT**5577O~e,,7799_%%J&''K[  +D11<<>>,U33>>@@A~~q(999()9:::.K")--0@/"R"R rc@t|tot|t}g}t|}t|}tt ||D]R}||||kr>|r|||dz}|||dz} n||}||} |d|d|d| gz }nS|r|S||z } | rX| dkrd} t ||} nd| z } d} t ||} | dkr || d| gz }n |d | | | fzgz }|S) Nr"z At index z diff:  != rLeftRightz contains one more item: z/%s contains %d more items, first extra item: %s)r:bytesr0rrr) rcrdrgcomparing_bytesrlen_left len_rightr left_value right_valuelen_diff dir_with_moreextras rrrRs!u--J*UE2J2JOK4yyHE I 3x++ , , 7eAh   '"!a!e)_ #AAI. !!W #Ah SSS*SSKSST TK E# &)#H a<<"MT)_--EE8|H#MU8_--E q== }NNuNNO OKK A (E23 K rcg}||z }||z }|r<|d|D]$}|t|%|r<|d|D]$}|t|%|S)NzExtra items in the left set:zExtra items in the right set:)r)r)rcrdrgr diff_left diff_rightitems rrrsKu IJ/9::: / /D   x~~ . . . ./:;;; / /D   x~~ . . . . rcg}t}t}||}fd|D}|r|dkr|dt|zgz }n1|r/|dgz }|tj|z }fd|D}|rA|dgz }|D]8} |t | | idzt | | izgz }9||z } t| } | rg|d| | d krd nd fz|tjfd | D||z } t| } | rg|d | | d krd nd fz|tjfd| D|S)NcFi|]}||k||Srrrkrcrds r z$_compare_eq_dict..s1 > > >1$q'U1X*=*=AtAw*=*=*=rrj,Omitting %s identical items, use -vv to showz Common items:c8h|]}||k|Srrrs r z#_compare_eq_dict..s+ 5 5 5!aE!H!4!4A!4!4!4rzDiffering items:rzLeft contains %d more item%s:r"r!r5c"i|] }|| Srr)rrrcs rrz$_compare_eq_dict..s;;;1AtAw;;;rzRight contains %d more item%s:c"i|] }|| Srr)rrrds rrz$_compare_eq_dict..s===AAuQx===r) rF intersectionr0rrrrr)r)rcrdrgrset_left set_rightcommonsamediffr extra_leftlen_extra_left extra_rightlen_extra_rights`` rrrsr K4yyHE I  " "9 - -F > > > > > > > >D 9! FTRSS 9(( v~d++66888 5 5 5 5 5v 5 5 5D W*++  W WA Haa\22V;h5QR8}>U>UUV VKKI%J__N  +^q%8%8rrcB C     N;;;; ;;; < < G G I I   h&K+&&O  ,o&:&:D E     N======= > > I I K K    rc  t|sgSt|r&ddl}||}d|D}n.s!LLLt|L49LLLrc<g|]}t|d|jS)eq)rMr)rfields rrz#_compare_eq_cls..s*VVV%PTAUAUV5:VVVrFr-r!rjrzMatching attributes:zDiffering attributes:z'Drill down into differing attribute %s:z: rcg|]}|zSrr)rr4r6s rrz#_compare_eq_cls..s- r)rarS dataclassesfieldsrVrUrOrKrMr)r0rrrrn) rcrdrgr all_fieldsfields_to_checkrrrr field_left field_rightr6s @rrrsq $     ''-- LLLLL ) VV:VVV d  ,u F D D  4  75%#8#8 8 8 KK     KK    K tt  9! ICPTIIUVVVV 9.// v~d++66888  /00 v~d++66888   E u--J!%//K 9EA&,feeeZZZM K +J WMM KK rtermtextc||}|d|}||t|zd}||z}t|||}dt|dzg}|D]y} | dr| dr.| dr!|d| ddzd|| z|S) Nz%s is contained here:r)rkSkippingz- z+ r-rj)findr0rrr/r)) rrrgindexheadtail correct_textrnewdiffr4s rroros IIdOOE . s)55Ssbj 555555r)any)env_varss rrrs)n%H 55H555 5 55r)F)r)8__doc__collections.abcr;rrtypingrrrrrrr r unicodedatar _pytest._codersr _pytest._io.safereprr rr_pytest.configrrr=object__annotations__rintrrrrboolr?rArDrHrOrSrVrZrar|rnrrrrrrrrorrrrrs((( !!!!!!222222))))))333333!!!!!! JN hxff 5x} DEFMMM>B(Cc?D#89:AAA!&   C C    CDI" # 49    FN#N$NNNNcdcd+S+T++++PcPdPPPPB3B4BBBB======CD  ,?D1#1#1#1#'*1#7;1# d3i1#1#1#1#h  # c C S    F--S--s-49----` %DI %$ % % % %?@ 3- ( 8; #Y@?@22 3-2 ( 28;2 #Y2222lEF c #.s#3>A #Y$GH&& #s( &$+CH$5&@C& #Y&&&&R0#0c0C0DI0000fcs49&6t666666r