-
-
Notifications
You must be signed in to change notification settings - Fork 10.8k
BUG: assert_almost_equal fails on subclasses that cannot handle bool #8452
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -669,8 +669,7 @@ def assert_array_compare(comparison, x, y, err_msg='', verbose=True, | |
header='', precision=6, equal_nan=True, | ||
equal_inf=True): | ||
__tracebackhide__ = True # Hide traceback for py.test | ||
from numpy.core import array, isnan, isinf, any, all, inf, zeros_like | ||
from numpy.core.numerictypes import bool_ | ||
from numpy.core import array, isnan, isinf, any, inf | ||
x = array(x, copy=False, subok=True) | ||
y = array(y, copy=False, subok=True) | ||
|
||
|
@@ -726,14 +725,13 @@ def chk_same_position(x_id, y_id, hasval='nan'): | |
raise AssertionError(msg) | ||
|
||
if isnumber(x) and isnumber(y): | ||
x_id, y_id = zeros_like(x, dtype=bool_), zeros_like(y, dtype=bool_) | ||
if equal_nan: | ||
x_isnan, y_isnan = isnan(x), isnan(y) | ||
# Validate that NaNs are in the same place | ||
if any(x_isnan) or any(y_isnan): | ||
chk_same_position(x_isnan, y_isnan, hasval='nan') | ||
x_id |= x_isnan | ||
y_id |= y_isnan | ||
x = x[~x_isnan] | ||
y = y[~y_isnan] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. OK, I am lazy now, but do these assert functions check the shape exactly? Because otherwise, I think there may be a problem with broadcasting if x and y are only broadcastable to one another. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. OK, shape is checked exactly in any case, so no worries. |
||
|
||
if equal_inf: | ||
x_isinf, y_isinf = isinf(x), isinf(y) | ||
|
@@ -742,19 +740,14 @@ def chk_same_position(x_id, y_id, hasval='nan'): | |
# Check +inf and -inf separately, since they are different | ||
chk_same_position(x == +inf, y == +inf, hasval='+inf') | ||
chk_same_position(x == -inf, y == -inf, hasval='-inf') | ||
x_id |= x_isinf | ||
y_id |= y_isinf | ||
x = x[~x_isinf] | ||
y = y[~y_isinf] | ||
|
||
# Only do the comparison if actual values are left | ||
if all(x_id): | ||
if x.size == 0: | ||
return | ||
|
||
if any(x_id): | ||
val = safe_comparison(x[~x_id], y[~y_id]) | ||
else: | ||
val = safe_comparison(x, y) | ||
else: | ||
val = safe_comparison(x, y) | ||
val = safe_comparison(x, y) | ||
|
||
if isinstance(val, bool): | ||
cond = val | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A more trivial change would replace just this line with
but it seems unnecessary to create these arrays in the first place -- and indeed the code becomes quite a bit shorter and, to me at least, clearer by just removing elements from the arrays.