summaryrefslogtreecommitdiff
path: root/numpy/core/einsumfunc.py
diff options
context:
space:
mode:
authorDaniel G. A. Smith <dgasmith@icloud.com>2020-05-30 10:47:08 -0400
committerSebastian Berg <sebastian@sipsolutions.net>2020-06-08 21:28:09 -0500
commit5f6be40bf009aa4438ec89310c4b55ce2eb9ee07 (patch)
treeb6263ede33f64ef2679be1075a86a047804d000a /numpy/core/einsumfunc.py
parenta906c1fa8cb68e937c87bfe63df07073e983338b (diff)
downloadnumpy-5f6be40bf009aa4438ec89310c4b55ce2eb9ee07.tar.gz
BUG: fixes einsum ouput order with optimization (#14615)
Diffstat (limited to 'numpy/core/einsumfunc.py')
-rw-r--r--numpy/core/einsumfunc.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/numpy/core/einsumfunc.py b/numpy/core/einsumfunc.py
index c46ae173d..f65f4015c 100644
--- a/numpy/core/einsumfunc.py
+++ b/numpy/core/einsumfunc.py
@@ -1358,11 +1358,18 @@ def einsum(*operands, out=None, optimize=False, **kwargs):
raise TypeError("Did not understand the following kwargs: %s"
% unknown_kwargs)
-
# Build the contraction list and operand
operands, contraction_list = einsum_path(*operands, optimize=optimize,
einsum_call=True)
+ # Handle order kwarg for output array, c_einsum allows mixed case
+ output_order = kwargs.pop('order', 'K')
+ if output_order.upper() == 'A':
+ if all(arr.flags.f_contiguous for arr in operands):
+ output_order = 'F'
+ else:
+ output_order = 'C'
+
# Start contraction loop
for num, contraction in enumerate(contraction_list):
inds, idx_rm, einsum_str, remaining, blas = contraction
@@ -1412,4 +1419,4 @@ def einsum(*operands, out=None, optimize=False, **kwargs):
if specified_out:
return out
else:
- return operands[0]
+ return asanyarray(operands[0], order=output_order)