From 5f6be40bf009aa4438ec89310c4b55ce2eb9ee07 Mon Sep 17 00:00:00 2001 From: "Daniel G. A. Smith" Date: Sat, 30 May 2020 10:47:08 -0400 Subject: BUG: fixes einsum ouput order with optimization (#14615) --- numpy/core/einsumfunc.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'numpy/core/einsumfunc.py') 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) -- cgit v1.2.1