g_dZddlmZmZddlmZdZdZdZdZ dZ dZ ee eze zeze zz Z e dk\sJdZ d Zdd Zd Zd Zd ZdZeddZdZdZy)zVarious utility functions.) namedtupleCounter) commonprefixTP cnt||z |z }|tkDrd|d|||t||z dfz}|S)Nz%s[%d chars]%s)len_PLACEHOLDER_LEN)s prefixlen suffixlenskips 4/opt/alt/python312/lib64/python3.12/unittest/util.py_shortenrsK q6I  )D  *9 tQs1v 7I7J5KL L Hcttt|}ttt|}|t kr|St |t t |z tztzz }|tkDrIttztz|z zt ksJtt|tfd|DSttttfd|DS)Nc3.K|] }|dzywN.0r prefixr s r z'_common_shorten_repr..'s:TVa m+Tsc3TK|]}t|dttz!ywr)r _MIN_DIFF_LEN _MIN_END_LENrs rrz'_common_shorten_repr..*s- Q(1YZ=-NNs%() tuplemap safe_reprmaxr _MAX_LENGTHr_MIN_BEGIN_LENr _MIN_COMMON_LENr)argsmaxlen common_lenrr s @@r_common_shorten_reprr(s Y% &D S$ F  $ FF I9$~58HHJJO# 00?B"$&12 22&.*=:T::: fno >F     rc t|}|rt |t kr|S|dt dzS#t$rtj|}YBwxYw)Nz [truncated]...)repr Exceptionobject__repr__r r")objshortresults rr r -sW&c CK+- ,; "3 33 &%&s /AAc8|jd|jS)N.) __module__ __qualname__)clss rstrclassr66snnc&6&6 77rcdx}}g}g} ||}||}||kr-|j||dz }|||k(ry|dz }|||k(rnj||kDr-|j||dz }|||k(rG|dz }|||k(rn8|dz } |||k(r|dz }|||k(r|dz }|||k(r|dz }|||k(r #|dz }|||k(r|dz }|||k(rwwxYw#t$r.|j||d|j||dY||fSwxYw)arFinds elements in only one or the other of two, sorted input lists. Returns a two-element tuple of lists. The first list contains those elements in the "expected" list but not in the "actual" list, and the second contains those elements in the "actual" list but not in the "expected" list. Duplicate elements in either input list are ignored. rN)append IndexErrorextend)expectedactualijmissing unexpectedeas rsorted_list_differencerD9s IAGJ   Aq A1uq!QqkQ&FAqkQ&Q!!!$QQi1nFAQi1nQ"1+*Q#1+*FA )q.Q!)q.+ (FA )q.Q!)q.  NN8AB< (   fQRj )  J   sA:C1C8C?B2C0C2CCC1D  D cg}|r%|j} |j||r%||fS#t$r|j|Y#wxYw)zSame behavior as sorted_list_difference but for lists of unorderable items (like dicts). As it does a linear search per item (remove) it has O(n*n) performance.)popremove ValueErrorr9)r<r=r@items runorderable_list_differencerJbsV G ||~ ! MM$   F?  ! NN4  !s.A  A c||kD||kz S)z.Return -1 if x < y, 0 if x == y and 1 if x > yr)xys r three_way_cmprNss Ea!e rMismatchzactual expected valuec<t|t|}}t|t|}}t}g}t|D]y\}} | |ur dx} } t ||D]} || | k(s | dz } ||| <t|D]\} } | | k(s | dz } ||| <| | k7s\t | | | }|j |{t|D]N\}} | |ur d} t ||D]} || | k(s | dz } ||| <t d| | }|j |P|S)HReturns list of (cnt_act, cnt_exp, elem) triples where the counts differrr8)listr r, enumeraterange _Mismatchr9)r=r<r tmnNULLr0r>elemcnt_scnt_tr? other_elemdiffs r_count_diff_all_purposer_ysI <hqA q63q6qA 8D FQ<4 4< q!Att| !'q\MAzT! !* E>UE40D MM$  Q<4 4< q!Att| !E4( d  MrcHt|t|}}g}|jD];\}}|j|d}||k7st|||}|j |=|jD](\}}||vs td||}|j |*|S)rQr)ritemsgetrUr9) r=r<r rVr0rZr[r\r^s r_count_diff_hashablercs 6?GH-qA Fwwy edA E>UE40D MM$  ! wwy e q=Qt,D MM$ ! MrN)F)__doc__ collectionsrros.pathr __unittestr"r r#rr$rrr(r r6rDrJrNrUr_rcrrrrhs +    !11OC !#/01   *48&R" z#: ; !Fr