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