def array_equivalent(*args, **kwargs): warnings.warn( "'pandas.core.common.array_equivalent' is deprecated and " "is no longer public API", DeprecationWarning, stacklevel=2) from pandas.core.dtypes import missing return missing.array_equivalent(*args, **kwargs)
def test_array_equivalent_nested(): # reached in groupby aggregations, make sure we use np.any when checking # if the comparison is truthy left = np.array([np.array([50, 70, 90]), np.array([20, 30, 40])], dtype=object) right = np.array([np.array([50, 70, 90]), np.array([20, 30, 40])], dtype=object) assert array_equivalent(left, right, strict_nan=True) assert not array_equivalent(left, right[::-1], strict_nan=True) left = np.array([np.array([50, 50, 50]), np.array([40, 40, 40])], dtype=object) right = np.array([50, 40]) assert not array_equivalent(left, right, strict_nan=True)
def assert_label_values(frame, labels, axis): for label in labels: if axis == 0: expected = frame[label]._values else: expected = frame.loc[label]._values result = frame._get_label_or_level_values(label, axis=axis) assert array_equivalent(expected, result)
def assert_level_values(frame, levels, axis): for level in levels: if axis in {0, "index"}: expected = frame.index.get_level_values(level=level)._values else: expected = frame.columns.get_level_values(level=level)._values result = frame._get_label_or_level_values(level, axis=axis) assert array_equivalent(expected, result)
def assert_level_values(frame, levels, axis): for level in levels: if axis == 0: expected = frame.index.get_level_values(level=level)._values else: expected = (frame.columns.get_level_values(level=level)._values) result = frame._get_label_or_level_values(level, axis=axis) assert array_equivalent(expected, result)
def test_array_equivalent_series(val): arr = np.array([1, 2]) cm = ( tm.assert_produces_warning(FutureWarning, check_stacklevel=False) if isinstance(val, str) else nullcontext() ) with cm: assert not array_equivalent(Series([arr, arr]), Series([arr, val]))
def test_array_equivalent_series(val): arr = np.array([1, 2]) msg = "elementwise comparison failed" cm = ( # stacklevel is chosen to make sense when called from .equals tm.assert_produces_warning( FutureWarning, match=msg, check_stacklevel=False) if isinstance( val, str) else nullcontext()) with cm: assert not array_equivalent(Series([arr, arr]), Series([arr, val]))
def equals(self, other) -> bool: if type(self) != type(other): return False if other.dtype != self.dtype: return False # GH#44382 if e.g. self[1] is np.nan and other[1] is pd.NA, we are NOT # equal. if not np.array_equal(self._mask, other._mask): return False left = self._data[~self._mask] right = other._data[~other._mask] return array_equivalent(left, right, dtype_equal=True)
def equals(self, other): """ Determines if two CategorialIndex objects contain the same elements. """ if self.is_(other): return True if not isinstance(other, Index): return False try: other = self._is_dtype_compat(other) return array_equivalent(self._data, other) except (TypeError, ValueError): pass return False
def _raise(left, right, err_msg): if err_msg is None: if left.shape != right.shape: raise_assert_detail( obj, f"{obj} shapes are different", left.shape, right.shape ) diff = 0 for left_arr, right_arr in zip(left, right): # count up differences if not array_equivalent(left_arr, right_arr, strict_nan=strict_nan): diff += 1 diff = diff * 100.0 / left.size msg = f"{obj} values are different ({np.round(diff, 5)} %)" raise_assert_detail(obj, msg, left, right, index_values=index_values) raise AssertionError(err_msg)
def duplicate_columns(frame: pandas.DataFrame) -> List[str]: """ """ groups = frame.columns.to_series().groupby(frame.dtypes).groups dups = [] for t, v in groups.items(): cs = frame[v].columns vs = frame[v] lcs = len(cs) for i in range(lcs): ia = vs.iloc[:, i].values for j in range(i + 1, lcs): ja = vs.iloc[:, j].values if array_equivalent(ia, ja): dups.append(cs[i]) break return dups
def test_array_equivalent_compat(): # see gh-13388 m = np.array([(1, 2), (3, 4)], dtype=[('a', int), ('b', float)]) n = np.array([(1, 2), (3, 4)], dtype=[('a', int), ('b', float)]) assert (array_equivalent(m, n, strict_nan=True)) assert (array_equivalent(m, n, strict_nan=False)) m = np.array([(1, 2), (3, 4)], dtype=[('a', int), ('b', float)]) n = np.array([(1, 2), (4, 3)], dtype=[('a', int), ('b', float)]) assert (not array_equivalent(m, n, strict_nan=True)) assert (not array_equivalent(m, n, strict_nan=False)) m = np.array([(1, 2), (3, 4)], dtype=[('a', int), ('b', float)]) n = np.array([(1, 2), (3, 4)], dtype=[('b', int), ('a', float)]) assert (not array_equivalent(m, n, strict_nan=True)) assert (not array_equivalent(m, n, strict_nan=False))
def test_array_equivalent_compat(): # see gh-13388 m = np.array([(1, 2), (3, 4)], dtype=[("a", int), ("b", float)]) n = np.array([(1, 2), (3, 4)], dtype=[("a", int), ("b", float)]) assert array_equivalent(m, n, strict_nan=True) assert array_equivalent(m, n, strict_nan=False) m = np.array([(1, 2), (3, 4)], dtype=[("a", int), ("b", float)]) n = np.array([(1, 2), (4, 3)], dtype=[("a", int), ("b", float)]) assert not array_equivalent(m, n, strict_nan=True) assert not array_equivalent(m, n, strict_nan=False) m = np.array([(1, 2), (3, 4)], dtype=[("a", int), ("b", float)]) n = np.array([(1, 2), (3, 4)], dtype=[("b", int), ("a", float)]) assert not array_equivalent(m, n, strict_nan=True) assert not array_equivalent(m, n, strict_nan=False)
def duplicate_columns(frame): """ Source: https://stackoverflow.com/a/32961145/1625856 """ groups = frame.columns.to_series().groupby(frame.dtypes).groups dups = [] for t, v in groups.items(): cs = frame[v].columns vs = frame[v] lcs = len(cs) for i in range(lcs): ia = vs.iloc[:, i].values for j in range(i + 1, lcs): ja = vs.iloc[:, j].values if array_equivalent(ia, ja): dups.append(cs[i]) break return dups
def test_dataframe_creation(): with pd.option_context("mode.data_manager", "block"): df_block = pd.DataFrame({ "a": [1, 2, 3], "b": [0.1, 0.2, 0.3], "c": [4, 5, 6] }) assert isinstance(df_block._mgr, BlockManager) with pd.option_context("mode.data_manager", "array"): df_array = pd.DataFrame({ "a": [1, 2, 3], "b": [0.1, 0.2, 0.3], "c": [4, 5, 6] }) assert isinstance(df_array._mgr, ArrayManager) # also ensure both are seen as equal tm.assert_frame_equal(df_block, df_array) # conversion from one manager to the other result = df_block._as_manager("block") assert isinstance(result._mgr, BlockManager) result = df_block._as_manager("array") assert isinstance(result._mgr, ArrayManager) tm.assert_frame_equal(result, df_block) assert all( array_equivalent(left, right) for left, right in zip(result._mgr.arrays, df_array._mgr.arrays)) result = df_array._as_manager("array") assert isinstance(result._mgr, ArrayManager) result = df_array._as_manager("block") assert isinstance(result._mgr, BlockManager) tm.assert_frame_equal(result, df_array) assert len(result._mgr.blocks) == 2
def equals(self, other) -> bool: if type(self) is not type(other): return False if not is_dtype_equal(self.dtype, other.dtype): return False return bool(array_equivalent(self._ndarray, other._ndarray))
def test_array_equivalent_str(): for dtype in ["O", "S", "U"]: assert array_equivalent(np.array(["A", "B"], dtype=dtype), np.array(["A", "B"], dtype=dtype)) assert not array_equivalent(np.array(["A", "B"], dtype=dtype), np.array(["A", "X"], dtype=dtype))
def test_array_equivalent_different_dtype_but_equal(): # Unclear if this is exposed anywhere in the public-facing API assert array_equivalent(np.array([1, 2]), np.array([1.0, 2.0]))
def test_array_equivalent(): assert array_equivalent(np.array([np.nan, np.nan]), np.array([np.nan, np.nan])) assert array_equivalent(np.array([np.nan, 1, np.nan]), np.array([np.nan, 1, np.nan])) assert array_equivalent(np.array([np.nan, None], dtype='object'), np.array([np.nan, None], dtype='object')) assert array_equivalent(np.array([np.nan, 1 + 1j], dtype='complex'), np.array([np.nan, 1 + 1j], dtype='complex')) assert not array_equivalent(np.array([np.nan, 1 + 1j], dtype='complex'), np.array([np.nan, 1 + 2j], dtype='complex')) assert not array_equivalent(np.array([np.nan, 1, np.nan]), np.array([np.nan, 2, np.nan])) assert not array_equivalent(np.array(['a', 'b', 'c', 'd']), np.array(['e', 'e'])) assert array_equivalent(Float64Index([0, np.nan]), Float64Index([0, np.nan])) assert not array_equivalent(Float64Index([0, np.nan]), Float64Index([1, np.nan])) assert array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan])) assert not array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([1, np.nan])) assert array_equivalent(TimedeltaIndex([0, np.nan]), TimedeltaIndex([0, np.nan])) assert not array_equivalent(TimedeltaIndex([0, np.nan]), TimedeltaIndex([1, np.nan])) with catch_warnings(): filterwarnings("ignore", "Converting timezone", FutureWarning) assert array_equivalent(DatetimeIndex([0, np.nan], tz='US/Eastern'), DatetimeIndex([0, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan], tz='US/Eastern'), DatetimeIndex([1, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan], tz='CET'), DatetimeIndex([0, np.nan], tz='US/Eastern')) assert not array_equivalent(DatetimeIndex([0, np.nan]), TimedeltaIndex([0, np.nan]))
def test_array_equivalent_str(dtype): assert array_equivalent(np.array(["A", "B"], dtype=dtype), np.array(["A", "B"], dtype=dtype)) assert not array_equivalent(np.array(["A", "B"], dtype=dtype), np.array(["A", "X"], dtype=dtype))
def test_array_equivalent(): assert array_equivalent(np.array([np.nan, np.nan]), np.array([np.nan, np.nan])) assert array_equivalent( np.array([np.nan, 1, np.nan]), np.array([np.nan, 1, np.nan]) ) assert array_equivalent( np.array([np.nan, None], dtype="object"), np.array([np.nan, None], dtype="object"), ) assert array_equivalent( np.array([np.nan, 1 + 1j], dtype="complex"), np.array([np.nan, 1 + 1j], dtype="complex"), ) assert not array_equivalent( np.array([np.nan, 1 + 1j], dtype="complex"), np.array([np.nan, 1 + 2j], dtype="complex"), ) assert not array_equivalent( np.array([np.nan, 1, np.nan]), np.array([np.nan, 2, np.nan]) ) assert not array_equivalent(np.array(["a", "b", "c", "d"]), np.array(["e", "e"])) assert array_equivalent(Float64Index([0, np.nan]), Float64Index([0, np.nan])) assert not array_equivalent(Float64Index([0, np.nan]), Float64Index([1, np.nan])) assert array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan])) assert not array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([1, np.nan])) assert array_equivalent(TimedeltaIndex([0, np.nan]), TimedeltaIndex([0, np.nan])) assert not array_equivalent( TimedeltaIndex([0, np.nan]), TimedeltaIndex([1, np.nan]) ) assert array_equivalent( DatetimeIndex([0, np.nan], tz="US/Eastern"), DatetimeIndex([0, np.nan], tz="US/Eastern"), ) assert not array_equivalent( DatetimeIndex([0, np.nan], tz="US/Eastern"), DatetimeIndex([1, np.nan], tz="US/Eastern"), ) assert not array_equivalent( DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan], tz="US/Eastern") ) assert not array_equivalent( DatetimeIndex([0, np.nan], tz="CET"), DatetimeIndex([0, np.nan], tz="US/Eastern"), ) assert not array_equivalent(DatetimeIndex([0, np.nan]), TimedeltaIndex([0, np.nan]))
def array_equivalent(*args, **kwargs): warnings.warn("'pandas.core.common.array_equivalent' is deprecated and " "is no longer public API", DeprecationWarning, stacklevel=2) from pandas.core.dtypes import missing return missing.array_equivalent(*args, **kwargs)
def test_array_equivalent_str(): for dtype in ['O', 'S', 'U']: assert array_equivalent(np.array(['A', 'B'], dtype=dtype), np.array(['A', 'B'], dtype=dtype)) assert not array_equivalent(np.array(['A', 'B'], dtype=dtype), np.array(['A', 'X'], dtype=dtype))
def test_array_equivalent(dtype_equal): assert array_equivalent(np.array([np.nan, np.nan]), np.array([np.nan, np.nan]), dtype_equal=dtype_equal) assert array_equivalent( np.array([np.nan, 1, np.nan]), np.array([np.nan, 1, np.nan]), dtype_equal=dtype_equal, ) assert array_equivalent( np.array([np.nan, None], dtype="object"), np.array([np.nan, None], dtype="object"), dtype_equal=dtype_equal, ) # Check the handling of nested arrays in array_equivalent_object assert array_equivalent( np.array([np.array([np.nan, None], dtype="object"), None], dtype="object"), np.array([np.array([np.nan, None], dtype="object"), None], dtype="object"), dtype_equal=dtype_equal, ) assert array_equivalent( np.array([np.nan, 1 + 1j], dtype="complex"), np.array([np.nan, 1 + 1j], dtype="complex"), dtype_equal=dtype_equal, ) assert not array_equivalent( np.array([np.nan, 1 + 1j], dtype="complex"), np.array([np.nan, 1 + 2j], dtype="complex"), dtype_equal=dtype_equal, ) assert not array_equivalent( np.array([np.nan, 1, np.nan]), np.array([np.nan, 2, np.nan]), dtype_equal=dtype_equal, ) assert not array_equivalent(np.array(["a", "b", "c", "d"]), np.array(["e", "e"]), dtype_equal=dtype_equal) assert array_equivalent(Float64Index([0, np.nan]), Float64Index([0, np.nan]), dtype_equal=dtype_equal) assert not array_equivalent(Float64Index([0, np.nan]), Float64Index([1, np.nan]), dtype_equal=dtype_equal) assert array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan]), dtype_equal=dtype_equal) assert not array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([1, np.nan]), dtype_equal=dtype_equal) assert array_equivalent( TimedeltaIndex([0, np.nan]), TimedeltaIndex([0, np.nan]), dtype_equal=dtype_equal, ) assert not array_equivalent( TimedeltaIndex([0, np.nan]), TimedeltaIndex([1, np.nan]), dtype_equal=dtype_equal, ) msg = "will be interpreted as nanosecond UTC timestamps instead of wall-times" with tm.assert_produces_warning(FutureWarning, match=msg): dti1 = DatetimeIndex([0, np.nan], tz="US/Eastern") dti2 = DatetimeIndex([0, np.nan], tz="CET") dti3 = DatetimeIndex([1, np.nan], tz="US/Eastern") assert array_equivalent( dti1, dti1, dtype_equal=dtype_equal, ) assert not array_equivalent( dti1, dti3, dtype_equal=dtype_equal, ) # The rest are not dtype_equal assert not array_equivalent(DatetimeIndex([0, np.nan]), dti1) assert not array_equivalent( dti2, dti1, ) assert not array_equivalent(DatetimeIndex([0, np.nan]), TimedeltaIndex([0, np.nan]))
def test_array_equivalent(): assert array_equivalent(np.array([np.nan, np.nan]), np.array([np.nan, np.nan])) assert array_equivalent(np.array([np.nan, 1, np.nan]), np.array([np.nan, 1, np.nan])) assert array_equivalent(np.array([np.nan, None], dtype='object'), np.array([np.nan, None], dtype='object')) assert array_equivalent(np.array([np.nan, 1 + 1j], dtype='complex'), np.array([np.nan, 1 + 1j], dtype='complex')) assert not array_equivalent(np.array([np.nan, 1 + 1j], dtype='complex'), np.array([np.nan, 1 + 2j], dtype='complex')) assert not array_equivalent(np.array([np.nan, 1, np.nan]), np.array([np.nan, 2, np.nan])) assert not array_equivalent(np.array(['a', 'b', 'c', 'd']), np.array(['e', 'e'])) assert array_equivalent(Float64Index([0, np.nan]), Float64Index([0, np.nan])) assert not array_equivalent(Float64Index([0, np.nan]), Float64Index([1, np.nan])) assert array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan])) assert not array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([1, np.nan])) assert array_equivalent(TimedeltaIndex([0, np.nan]), TimedeltaIndex([0, np.nan])) assert not array_equivalent(TimedeltaIndex([0, np.nan]), TimedeltaIndex([1, np.nan])) assert array_equivalent(DatetimeIndex([0, np.nan], tz='US/Eastern'), DatetimeIndex([0, np.nan], tz='US/Eastern')) assert not array_equivalent(DatetimeIndex([0, np.nan], tz='US/Eastern'), DatetimeIndex([1, np.nan], tz='US/Eastern')) assert not array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan], tz='US/Eastern')) assert not array_equivalent(DatetimeIndex([0, np.nan], tz='CET'), DatetimeIndex([0, np.nan], tz='US/Eastern')) assert not array_equivalent(DatetimeIndex([0, np.nan]), TimedeltaIndex([0, np.nan]))
def test_array_equivalent(): assert array_equivalent(np.array([np.nan, np.nan]), np.array([np.nan, np.nan])) assert array_equivalent(np.array([np.nan, 1, np.nan]), np.array([np.nan, 1, np.nan])) assert array_equivalent(np.array([np.nan, None], dtype='object'), np.array([np.nan, None], dtype='object')) assert array_equivalent(np.array([np.nan, 1 + 1j], dtype='complex'), np.array([np.nan, 1 + 1j], dtype='complex')) assert not array_equivalent( np.array([np.nan, 1 + 1j], dtype='complex'), np.array( [np.nan, 1 + 2j], dtype='complex')) assert not array_equivalent( np.array([np.nan, 1, np.nan]), np.array([np.nan, 2, np.nan])) assert not array_equivalent( np.array(['a', 'b', 'c', 'd']), np.array(['e', 'e'])) assert array_equivalent(Float64Index([0, np.nan]), Float64Index([0, np.nan])) assert not array_equivalent( Float64Index([0, np.nan]), Float64Index([1, np.nan])) assert array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan])) assert not array_equivalent( DatetimeIndex([0, np.nan]), DatetimeIndex([1, np.nan])) assert array_equivalent(TimedeltaIndex([0, np.nan]), TimedeltaIndex([0, np.nan])) assert not array_equivalent( TimedeltaIndex([0, np.nan]), TimedeltaIndex([1, np.nan])) with catch_warnings(): filterwarnings("ignore", "Converting timezone", FutureWarning) assert array_equivalent(DatetimeIndex([0, np.nan], tz='US/Eastern'), DatetimeIndex([0, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan], tz='US/Eastern'), DatetimeIndex( [1, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan]), DatetimeIndex( [0, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan], tz='CET'), DatetimeIndex( [0, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan]), TimedeltaIndex([0, np.nan]))
def test_array_equivalent(dtype_equal): assert array_equivalent(np.array([np.nan, np.nan]), np.array([np.nan, np.nan]), dtype_equal=dtype_equal) assert array_equivalent( np.array([np.nan, 1, np.nan]), np.array([np.nan, 1, np.nan]), dtype_equal=dtype_equal, ) assert array_equivalent( np.array([np.nan, None], dtype="object"), np.array([np.nan, None], dtype="object"), dtype_equal=dtype_equal, ) # Check the handling of nested arrays in array_equivalent_object assert array_equivalent( np.array([np.array([np.nan, None], dtype="object"), None], dtype="object"), np.array([np.array([np.nan, None], dtype="object"), None], dtype="object"), dtype_equal=dtype_equal, ) assert array_equivalent( np.array([np.nan, 1 + 1j], dtype="complex"), np.array([np.nan, 1 + 1j], dtype="complex"), dtype_equal=dtype_equal, ) assert not array_equivalent( np.array([np.nan, 1 + 1j], dtype="complex"), np.array([np.nan, 1 + 2j], dtype="complex"), dtype_equal=dtype_equal, ) assert not array_equivalent( np.array([np.nan, 1, np.nan]), np.array([np.nan, 2, np.nan]), dtype_equal=dtype_equal, ) assert not array_equivalent(np.array(["a", "b", "c", "d"]), np.array(["e", "e"]), dtype_equal=dtype_equal) assert array_equivalent(Float64Index([0, np.nan]), Float64Index([0, np.nan]), dtype_equal=dtype_equal) assert not array_equivalent(Float64Index([0, np.nan]), Float64Index([1, np.nan]), dtype_equal=dtype_equal) assert array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan]), dtype_equal=dtype_equal) assert not array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([1, np.nan]), dtype_equal=dtype_equal) assert array_equivalent( TimedeltaIndex([0, np.nan]), TimedeltaIndex([0, np.nan]), dtype_equal=dtype_equal, ) assert not array_equivalent( TimedeltaIndex([0, np.nan]), TimedeltaIndex([1, np.nan]), dtype_equal=dtype_equal, ) assert array_equivalent( DatetimeIndex([0, np.nan], tz="US/Eastern"), DatetimeIndex([0, np.nan], tz="US/Eastern"), dtype_equal=dtype_equal, ) assert not array_equivalent( DatetimeIndex([0, np.nan], tz="US/Eastern"), DatetimeIndex([1, np.nan], tz="US/Eastern"), dtype_equal=dtype_equal, ) # The rest are not dtype_equal assert not array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan], tz="US/Eastern")) assert not array_equivalent( DatetimeIndex([0, np.nan], tz="CET"), DatetimeIndex([0, np.nan], tz="US/Eastern"), ) assert not array_equivalent(DatetimeIndex([0, np.nan]), TimedeltaIndex([0, np.nan]))
def assert_numpy_array_equal( left, right, strict_nan=False, check_dtype=True, err_msg=None, check_same=None, obj="numpy array", index_values=None, ): """ Check that 'np.ndarray' is equivalent. Parameters ---------- left, right : numpy.ndarray or iterable The two arrays to be compared. strict_nan : bool, default False If True, consider NaN and None to be different. check_dtype : bool, default True Check dtype if both a and b are np.ndarray. err_msg : str, default None If provided, used as assertion message. check_same : None|'copy'|'same', default None Ensure left and right refer/do not refer to the same memory area. obj : str, default 'numpy array' Specify object name being compared, internally used to show appropriate assertion message. index_values : numpy.ndarray, default None optional index (shared by both left and right), used in output. """ __tracebackhide__ = True # instance validation # Show a detailed error message when classes are different assert_class_equal(left, right, obj=obj) # both classes must be an np.ndarray _check_isinstance(left, right, np.ndarray) def _get_base(obj): return obj.base if getattr(obj, "base", None) is not None else obj left_base = _get_base(left) right_base = _get_base(right) if check_same == "same": if left_base is not right_base: raise AssertionError( f"{repr(left_base)} is not {repr(right_base)}") elif check_same == "copy": if left_base is right_base: raise AssertionError(f"{repr(left_base)} is {repr(right_base)}") def _raise(left, right, err_msg): if err_msg is None: if left.shape != right.shape: raise_assert_detail(obj, f"{obj} shapes are different", left.shape, right.shape) diff = 0 for left_arr, right_arr in zip(left, right): # count up differences if not array_equivalent( left_arr, right_arr, strict_nan=strict_nan): diff += 1 diff = diff * 100.0 / left.size msg = f"{obj} values are different ({np.round(diff, 5)} %)" raise_assert_detail(obj, msg, left, right, index_values=index_values) raise AssertionError(err_msg) # compare shape and values if not array_equivalent(left, right, strict_nan=strict_nan): _raise(left, right, err_msg) if check_dtype: if isinstance(left, np.ndarray) and isinstance(right, np.ndarray): assert_attr_equal("dtype", left, right, obj=obj)
def test_array_equivalent(): assert array_equivalent(np.array([np.nan, np.nan]), np.array([np.nan, np.nan])) assert array_equivalent(np.array([np.nan, 1, np.nan]), np.array([np.nan, 1, np.nan])) assert array_equivalent(np.array([np.nan, None], dtype='object'), np.array([np.nan, None], dtype='object')) assert array_equivalent(np.array([np.nan, 1 + 1j], dtype='complex'), np.array([np.nan, 1 + 1j], dtype='complex')) assert not array_equivalent( np.array([np.nan, 1 + 1j], dtype='complex'), np.array( [np.nan, 1 + 2j], dtype='complex')) assert not array_equivalent( np.array([np.nan, 1, np.nan]), np.array([np.nan, 2, np.nan])) assert not array_equivalent( np.array(['a', 'b', 'c', 'd']), np.array(['e', 'e'])) assert array_equivalent(Float64Index([0, np.nan]), Float64Index([0, np.nan])) assert not array_equivalent( Float64Index([0, np.nan]), Float64Index([1, np.nan])) assert array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan])) assert not array_equivalent( DatetimeIndex([0, np.nan]), DatetimeIndex([1, np.nan])) assert array_equivalent(TimedeltaIndex([0, np.nan]), TimedeltaIndex([0, np.nan])) assert not array_equivalent( TimedeltaIndex([0, np.nan]), TimedeltaIndex([1, np.nan])) assert array_equivalent(DatetimeIndex([0, np.nan], tz='US/Eastern'), DatetimeIndex([0, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan], tz='US/Eastern'), DatetimeIndex( [1, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan]), DatetimeIndex( [0, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan], tz='CET'), DatetimeIndex( [0, np.nan], tz='US/Eastern')) assert not array_equivalent( DatetimeIndex([0, np.nan]), TimedeltaIndex([0, np.nan]))
def test_array_equivalent(): assert array_equivalent(np.array([np.nan, np.nan]), np.array([np.nan, np.nan])) assert array_equivalent(np.array([np.nan, 1, np.nan]), np.array([np.nan, 1, np.nan])) assert array_equivalent( np.array([np.nan, None], dtype="object"), np.array([np.nan, None], dtype="object"), ) assert array_equivalent( np.array([np.nan, 1 + 1j], dtype="complex"), np.array([np.nan, 1 + 1j], dtype="complex"), ) assert not array_equivalent( np.array([np.nan, 1 + 1j], dtype="complex"), np.array([np.nan, 1 + 2j], dtype="complex"), ) assert not array_equivalent(np.array([np.nan, 1, np.nan]), np.array([np.nan, 2, np.nan])) assert not array_equivalent(np.array(["a", "b", "c", "d"]), np.array(["e", "e"])) assert array_equivalent(Float64Index([0, np.nan]), Float64Index([0, np.nan])) assert not array_equivalent(Float64Index([0, np.nan]), Float64Index([1, np.nan])) assert array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan])) assert not array_equivalent(DatetimeIndex([0, np.nan]), DatetimeIndex([1, np.nan])) assert array_equivalent(TimedeltaIndex([0, np.nan]), TimedeltaIndex([0, np.nan])) assert not array_equivalent(TimedeltaIndex([0, np.nan]), TimedeltaIndex([1, np.nan])) with catch_warnings(): filterwarnings("ignore", "Converting timezone", FutureWarning) assert array_equivalent( DatetimeIndex([0, np.nan], tz="US/Eastern"), DatetimeIndex([0, np.nan], tz="US/Eastern"), ) assert not array_equivalent( DatetimeIndex([0, np.nan], tz="US/Eastern"), DatetimeIndex([1, np.nan], tz="US/Eastern"), ) assert not array_equivalent( DatetimeIndex([0, np.nan]), DatetimeIndex([0, np.nan], tz="US/Eastern")) assert not array_equivalent( DatetimeIndex([0, np.nan], tz="CET"), DatetimeIndex([0, np.nan], tz="US/Eastern"), ) assert not array_equivalent(DatetimeIndex([0, np.nan]), TimedeltaIndex([0, np.nan]))