ž ryMa=c@sždZddlmZmZdZdZddd„Zdd„Z dd „Z d d „Z d d „Z eddƒZ dd„Zdd„Zdd„ZdS(uVarious utility functions.i(u namedtupleu OrderedDictiPc Cscyt|ƒ}Wn!tk r3tj|ƒ}YnX| sMt|ƒtkrQ|S|dt…dS(Nu [truncated]...(urepru Exceptionuobjectu__repr__ulenu _MAX_LENGTH(uobjushorturesult((u2/opt/alt/python33/lib64/python3.3/unittest/util.pyu safe_reprs u safe_reprcCsd|j|jfS(Nu%s.%s(u __module__u__name__(ucls((u2/opt/alt/python33/lib64/python3.3/unittest/util.pyustrclasssustrclasscCsnd}}g}g}xKy||}||}||krw|j|ƒ|d7}xÆ|||krs|d7}qVWn¥||kr¾|j|ƒ|d7}x|||krº|d7}qWn^|d7}z%x|||krë|d7}qÎWWd|d7}x|||kr|d7}qýWXWqtk r`|j||d…ƒ|j||d…ƒPYqXq||fS(urFinds 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(uappendu IndexErroruextend(uexpecteduactualuiujumissingu unexpectedueua((u2/opt/alt/python33/lib64/python3.3/unittest/util.pyusorted_list_differences:             usorted_list_differencec Cs\g}xI|rQ|jƒ}y|j|ƒWq tk rM|j|ƒYq Xq W||fS(u­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.(upopuremoveu ValueErroruappend(uexpecteduactualumissinguitem((u2/opt/alt/python33/lib64/python3.3/unittest/util.pyuunorderable_list_difference=s   uunorderable_list_differencecCs||k||kS(u.Return -1 if x < y, 0 if x == y and 1 if x > y((uxuy((u2/opt/alt/python33/lib64/python3.3/unittest/util.pyu three_way_cmpNsu three_way_cmpuMismatchuactual expected valuecCsÂt|ƒt|ƒ}}t|ƒt|ƒ}}tƒ}g}xåt|ƒD]×\}} | |krlqNnd} } x>t||ƒD]-} || | kr†| d7} ||| t||ƒD]-} || | krj| d7} ||| s  )   #