-
-
Notifications
You must be signed in to change notification settings - Fork 11.1k
Closed
Closed
Copy link
Description
The index arrays for einsum do not accept the output of any numpy array, because these datatypes cannot be ints (see #2951; #12322). The test should be modified to accept numpy ints, because converting the datatype to 'int' explicitly is counter-intuitive and unnecessary.
Though easy to circumvent, this will incur a lot of unnecessary debugging time, as it appears to break abstraction boundaries, has strange interactions with tolist
, and indices that work in test environments fail when constructed programatically.
Reproducing code example:
import numpy as np
X = np.arange(9).reshape(3,3)
# each of these results in an identical list [0] as far as equality test is concerned
idx1 = [0] # list[ int ]
idx2 = np.unique(idx1) # np.array [int64]
idx3 = idx2.tolist() # list [int]
idx3 = list(idx2) # list [int64]
np.einsum(X, [0], idx1 ) # succeeds
np.einsum(X, [0], idx2 ) # fails
np.einsum(X, [0], idx3 ) # succeeds
np.einsum(X, [0], idx4 ) # fails
Error message:
ValueError: each subscript must be either an integer or an ellipsis
Full error message if optimize_arg
is False
:
<__array_function__ internals> in einsum(*args, **kwargs)
~/.local/lib/python3.6/site-packages/numpy/core/einsumfunc.py in einsum(*operands, **kwargs)
1354 # If no optimization, run pure einsum
1355 if optimize_arg is False:
-> 1356 return c_einsum(*operands, **kwargs)
1357
1358 valid_einsum_kwargs = ['out', 'dtype', 'order', 'casting']
ValueError: each subscript must be either an integer or an ellipsis
Full error message when optimize_arg
is True
:
<__array_function__ internals> in einsum(*args, **kwargs)
~/.local/lib/python3.6/site-packages/numpy/core/einsumfunc.py in einsum(*operands, **kwargs)
1377 # Build the contraction list and operand
1378 operands, contraction_list = einsum_path(*operands, optimize=optimize_arg,
-> 1379 einsum_call=True)
1380
1381 handle_out = False
Numpy/Python version information:
1.17.3 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0]