Source code for urbansim.utils.testing

"""
Utilities used in testing of UrbanSim.

"""
import numpy as np
import numpy.testing as npt
import pandas as pd


[docs]def assert_frames_equal(actual, expected, use_close=False): """ Compare DataFrame items by index and column and raise AssertionError if any item is not equal. Ordering is unimportant, items are compared only by label. NaN and infinite values are supported. Parameters ---------- actual : pandas.DataFrame expected : pandas.DataFrame use_close : bool, optional If True, use numpy.testing.assert_allclose instead of numpy.testing.assert_equal. """ if use_close: comp = npt.assert_allclose else: comp = npt.assert_equal assert (isinstance(actual, pd.DataFrame) and isinstance(expected, pd.DataFrame)), \ 'Inputs must both be pandas DataFrames.' for i, exp_row in expected.iterrows(): assert i in actual.index, 'Expected row {!r} not found.'.format(i) act_row = actual.loc[i] for j, exp_item in exp_row.iteritems(): assert j in act_row.index, \ 'Expected column {!r} not found.'.format(j) act_item = act_row[j] try: comp(act_item, exp_item) except AssertionError as e: raise AssertionError( str(e) + '\n\nColumn: {!r}\nRow: {!r}'.format(j, i))
[docs]def assert_index_equal(left, right): """ Similar to pdt.assert_index_equal but is not sensitive to key ordering. Parameters ---------- left: pandas.Index right: pandas.Index """ assert isinstance(left, pd.Index) assert isinstance(right, pd.Index) left_diff = left.difference(right) right_diff = right.difference(left) if len(left_diff) > 0 or len(right_diff) > 0: raise AssertionError("keys not in left [{0}], keys not in right [{1}]".format( left_diff, right_diff))