def METHOD_NAME(impl):
    A_desc = dace.float32[10, 5]
    B_desc = dace.float32[5, 3]
    C_desc = dace.float32[10, 3]
    with change_default(blas, impl):
        @dace.program
        def test_simple_einsum(A: A_desc, B: B_desc, C: C_desc):
            C[:] = np.einsum("ik,kj->ij", A, B)
        A = np.random.rand(*A_desc.shape).astype(np.float32)
        B = np.random.rand(*B_desc.shape).astype(np.float32)
        C = np.zeros(C_desc.shape).astype(np.float32)
        sdfg: dace.SDFG = test_simple_einsum.to_sdfg()
        sdfg.name = impl + "_einsum_simple"
        if impl == "cuBLAS":
            sdfg.apply_gpu_transformations()
        sdfg.expand_library_nodes()
        assert_used_environment(sdfg, impl)
        sdfg(A=A, B=B, C=C)
        assert np.allclose(A @ B, C)