-
-
Notifications
You must be signed in to change notification settings - Fork 12.2k
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 ) # failsError 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]
Reactions are currently unavailable