def _assert_numpy_explanation_types(actual, expected): # assert "_" variables equivalence if hasattr(actual, ExplainParams.get_private(ExplainParams.LOCAL_IMPORTANCE_VALUES)): assert(isinstance(actual._local_importance_values, np.ndarray)) assert(isinstance(expected._local_importance_values, np.ndarray)) np.testing.assert_array_equal(actual._local_importance_values, expected._local_importance_values) if hasattr(actual, ExplainParams.get_private(ExplainParams.EVAL_DATA)): assert(isinstance(actual._eval_data, np.ndarray)) assert(isinstance(expected._eval_data, np.ndarray)) np.testing.assert_array_equal(actual._eval_data, expected._eval_data)
def _assert_explanation_equivalence(actual, expected): # get the non-null properties in the expected explanation paramkeys = filter(lambda x, expected=expected: hasattr( expected, getattr(ExplainParams, x)), list(ExplainParams.get_serializable())) for paramkey in paramkeys: param = getattr(ExplainParams, paramkey) actual_value = getattr(actual, param, None) expected_value = getattr(expected, param, None) if isinstance(actual_value, DatasetWrapper) or isinstance( actual_value, DenseData): if isinstance(actual_value.original_dataset, np.ndarray): actual_dataset = actual_value.original_dataset.tolist() else: actual_dataset = actual_value.original_dataset if isinstance(expected_value.original_dataset, np.ndarray): expected_dataset = expected_value.original_dataset.tolist() else: expected_dataset = expected_value.original_dataset np.testing.assert_array_equal(actual_dataset, expected_dataset) elif isinstance(actual_value, (np.ndarray, collections.abc.Sequence)): np.testing.assert_array_equal(actual_value, expected_value) elif isinstance(actual_value, pd.DataFrame) and isinstance( expected_value, pd.DataFrame): np.testing.assert_array_equal(actual_value.values, expected_value.values) else: assert actual_value == expected_value