For a contraction over C-contiguous operands, dpnp.einsum returns a strided array while numpy.einsum returns a C-contiguous. computed output is correct
Reproducer
import numpy as np
import dpnp
ha = np.random.random((4, 5))
hb = np.random.random((5, 6))
n_out = np.einsum("ij,jk->ik", ha, hb)
d_out = dpnp.einsum("ij,jk->ik", dpnp.asarray(ha), dpnp.asarray(hb))
print(n_out.flags.c_contiguous, n_out.strides) # True (48, 8)
print(d_out.flags.c_contiguous, d_out.strides) # False (8, 32)
print(np.abs(dpnp.asnumpy(d_out) - n_out).max()) # ~2e-16, values agree
output:
True (48, 8)
False (8, 32)
2.220446049250313e-16
For a contraction over C-contiguous operands,
dpnp.einsumreturns a strided array whilenumpy.einsumreturns a C-contiguous. computed output is correctReproducer
output: