�`^c@s�dZddlmZmZeZdZed�Zd�Z d�Z
ed�Zedd �Zd
�Z
d�Zd�Zd
S(sVarious utility functions.i�(t
namedtupletOrderedDictiPcCs\yt|�}Wn tk
r2tj|�}nX|sLt|�tkrP|S|t dS(Ns [truncated]...(treprt Exceptiontobjectt__repr__tlent_MAX_LENGTH(tobjtshorttresult((s#/sys/lib/python2.7/unittest/util.pyt safe_reprs
cCsd|j|jfS(Ns%s.%s(t
__module__t__name__(tcls((s#/sys/lib/python2.7/unittest/util.pytstrclassscCshd}}g}g}xEtr]y||}||}||kr}|j|�|d7}x�|||kry|d7}q\Wn�||kr�|j|�|d7}x|||kr�|d7}q�Wn^|d7}z%x|||kr�d7}q�WWd|d7}x|||kr |d7}qWXWqtk
rY|j||�|j||�PqXqW||fS(srFinds 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.
iiN(tTruetappendt
IndexErrortextend(texpectedtactualtitjtmissingt
unexpectedteta((s#/sys/lib/python2.7/unittest/util.pytsorted_list_differences:
cCsg}g}x�|r�|j�}y|j|�Wntk
rR|j|�nX|rxI||fD]8}yxtr�|j|�qrWWqftk
r�qfXqfWqqW|rxU|r|j�}|j|�yxtr�j|�q�WWq�tk
rq�Xq�W||fS||fS(s�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.
(tpoptremovet
ValueErrorRR(RRtignore_duplicateRRtitemtlst((s#/sys/lib/python2.7/unittest/util.pytunorderable_list_difference>s4
tMismatchsactual expected valuecCs�t|�t|�}}t|�t|�}}t�}g}x�|�D]�\}} | |krlqNnd}
}x>t||�D]-}||| kr�|
d7}
|||<q�q�Wx=t|�D]/\}}
|
| kr�|d7}|||<q�q�W|
|krNt|
|| �}|j|�qNqNWx�t|�D]�\}} | |krTq6nd}x>t||�D]-}||| krj|d7}|||<qjqjWtd|| �}|j|�q6W|S(sHReturns list of (cnt_act, cnt_exp, elem) triples where the counts differii(tlistRRt enumeratetranget _MismatchR(RRtstttmtntNULLR
Rtelemtcnt_stcnt_tRt
other_elemtdiff((s#/sys/lib/python2.7/unittest/util.pyt_count_diff_all_purposeds<
cCs8t�}x(|D] }|j|d�d||<qW|S(s@Return dict of element counts, in the order they were first seenii(Rtget(titerabletcR.((s#/sys/lib/python2.7/unittest/util.pyt_ordered_count�s
c Cs�t|�t|�}}g}xZ|j�D]L\}}|j|d�}||kr,t|||�}|j|�q,q,WxH|j�D]:\}}||kr�td||�}|j|�q�q�W|S(sHReturns list of (cnt_act, cnt_exp, elem) triples where the counts differi(R7titemsR4R(R( RRR)R*R
R.R/R0R2((s#/sys/lib/python2.7/unittest/util.pyt_count_diff_hashable�sN(t__doc__tcollectionsRRRt
__unittestRtFalseRRRR#R(R3R7R9(((s#/sys/lib/python2.7/unittest/util.pyt<module>s
)$ #
|