diff options
author | Daniel G. A. Smith <dgasmith@icloud.com> | 2020-05-30 10:47:08 -0400 |
---|---|---|
committer | Sebastian Berg <sebastian@sipsolutions.net> | 2020-06-08 21:28:09 -0500 |
commit | 5f6be40bf009aa4438ec89310c4b55ce2eb9ee07 (patch) | |
tree | b6263ede33f64ef2679be1075a86a047804d000a /numpy/core/einsumfunc.py | |
parent | a906c1fa8cb68e937c87bfe63df07073e983338b (diff) | |
download | numpy-5f6be40bf009aa4438ec89310c4b55ce2eb9ee07.tar.gz |
BUG: fixes einsum ouput order with optimization (#14615)
Diffstat (limited to 'numpy/core/einsumfunc.py')
-rw-r--r-- | numpy/core/einsumfunc.py | 11 |
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) |