B äxác_ã@s¨dZddlmZmZddlmZdZdZdZdZ dZ dZ ee ee ee Z dd „Z d d „Zdd d„Zdd„Zdd„Zdd„Zdd„ZeddƒZdd„Zdd„ZdS)zVarious utility functions.é)Ú namedtupleÚCounter)Ú commonprefixTéPé écCsBt|ƒ||}|tkr>d|d|…||t|ƒ|d…f}|S)Nz%s[%d chars]%s)ÚlenÚ_PLACEHOLDER_LEN)ÚsÚ prefixlenZ suffixlenÚskip©r ú2/opt/alt/python37/lib64/python3.7/unittest/util.pyÚ_shortens&rcsœttt|ƒƒ}ttt|ƒƒ}|tkr(|St|ƒ‰tˆƒ‰t|ˆtt}|t krxt ˆt|ƒ‰t‡‡fdd„|DƒƒSt ˆtt ƒ‰t‡‡fdd„|DƒƒS)Nc3s|]}ˆ|ˆd…VqdS)Nr )Ú.0r )Úprefixr r rú 'sz'_common_shorten_repr..c3s&|]}ˆt|ˆd…ttƒVqdS)N)rÚ _MIN_DIFF_LENÚ _MIN_END_LEN)rr )rr r rr*s) ÚtupleÚmapÚ safe_reprÚmaxrÚ _MAX_LENGTHrÚ_MIN_BEGIN_LENr Ú_MIN_COMMON_LENr)ÚargsÚmaxlenZ common_lenr )rr rÚ_common_shorten_reprs  rFcCsPy t|ƒ}Wntk r*t |¡}YnX|r|rB| ¡}y| |¡Wqtk r>| |¡YqXqW||fS)z­Same 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.)ÚpopÚremoveÚ ValueErrorr*)r-r.r1Úitemr r rÚunorderable_list_differencebsr9cCs||k||kS)z.Return -1 if x < y, 0 if x == y and 1 if x > yr )ÚxÚyr r rÚ three_way_cmpssr<ZMismatchzactual expected valuecCsDt|ƒt|ƒ}}t|ƒt|ƒ}}tƒ}g}x¢t|ƒD]–\}} | |krJq8d} } x.t||ƒD] } || | kr^| d7} ||| <q^Wx,t|ƒD] \} } | | krŒ| d7} ||| <qŒW| | kr8t| | | ƒ}| |¡q8Wxlt|ƒD]`\}} | |krîqÜd} x2t||ƒD]$} || | krþ| d7} ||| <qþWtd| | ƒ}| |¡qÜW|S)zHReturns list of (cnt_act, cnt_exp, elem) triples where the counts differrr))Úlistrr!Ú enumerateÚrangeÚ _Mismatchr*)r.r-r ÚtÚmÚnZNULLr$r/ÚelemÚcnt_sÚcnt_tr0Z other_elemÚdiffr r rÚ_count_diff_all_purposeys<     rHc CsŽt|ƒt|ƒ}}g}x>| ¡D]2\}}| |d¡}||kr t|||ƒ}| |¡q Wx2| ¡D]&\}}||kr`td||ƒ}| |¡q`W|S)zHReturns list of (cnt_act, cnt_exp, elem) triples where the counts differr)rÚitemsÚgetr@r*) r.r-r rAr$rDrErFrGr r rÚ_count_diff_hashableœs   rKN)F)Ú__doc__Ú collectionsrrZos.pathrZ __unittestrr rrrrrrrr(r4r9r<r@rHrKr r r rÚs(  ) #