Ejemplo n.º 1
0
def test_nonunit_stride_from_python():
    from pybind11_tests import (
        double_row, double_col, double_complex, double_mat_cm, double_mat_rm,
        double_threec, double_threer)

    counting_mat = np.arange(9.0, dtype=np.float32).reshape((3, 3))
    second_row = counting_mat[1, :]
    second_col = counting_mat[:, 1]
    np.testing.assert_array_equal(double_row(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_col(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_complex(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_row(second_col), 2.0 * second_col)
    np.testing.assert_array_equal(double_col(second_col), 2.0 * second_col)
    np.testing.assert_array_equal(double_complex(second_col), 2.0 * second_col)

    counting_3d = np.arange(27.0, dtype=np.float32).reshape((3, 3, 3))
    slices = [counting_3d[0, :, :], counting_3d[:, 0, :], counting_3d[:, :, 0]]
    for slice_idx, ref_mat in enumerate(slices):
        np.testing.assert_array_equal(double_mat_cm(ref_mat), 2.0 * ref_mat)
        np.testing.assert_array_equal(double_mat_rm(ref_mat), 2.0 * ref_mat)

    # Mutator:
    double_threer(second_row)
    double_threec(second_col)
    np.testing.assert_array_equal(counting_mat, [[0., 2, 2], [6, 16, 10], [6, 14, 8]])
Ejemplo n.º 2
0
def test_nonunit_stride_from_python():
    from pybind11_tests import (
        double_row, double_col, double_complex, double_mat_cm, double_mat_rm,
        double_threec, double_threer)

    counting_mat = np.arange(9.0, dtype=np.float32).reshape((3, 3))
    second_row = counting_mat[1, :]
    second_col = counting_mat[:, 1]
    np.testing.assert_array_equal(double_row(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_col(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_complex(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_row(second_col), 2.0 * second_col)
    np.testing.assert_array_equal(double_col(second_col), 2.0 * second_col)
    np.testing.assert_array_equal(double_complex(second_col), 2.0 * second_col)

    counting_3d = np.arange(27.0, dtype=np.float32).reshape((3, 3, 3))
    slices = [counting_3d[0, :, :], counting_3d[:, 0, :], counting_3d[:, :, 0]]
    for slice_idx, ref_mat in enumerate(slices):
        np.testing.assert_array_equal(double_mat_cm(ref_mat), 2.0 * ref_mat)
        np.testing.assert_array_equal(double_mat_rm(ref_mat), 2.0 * ref_mat)

    # Mutator:
    double_threer(second_row)
    double_threec(second_col)
    np.testing.assert_array_equal(counting_mat, [[0., 2, 2], [6, 16, 10], [6, 14, 8]])
Ejemplo n.º 3
0
def test_negative_stride_from_python(msg):
    from pybind11_tests import (
        double_row, double_col, double_complex, double_mat_cm, double_mat_rm,
        double_threec, double_threer)

    # Eigen doesn't support (as of yet) negative strides. When a function takes an Eigen
    # matrix by copy or const reference, we can pass a numpy array that has negative strides.
    # Otherwise, an exception will be thrown as Eigen will not be able to map the numpy array.

    counting_mat = np.arange(9.0, dtype=np.float32).reshape((3, 3))
    counting_mat = counting_mat[::-1, ::-1]
    second_row = counting_mat[1, :]
    second_col = counting_mat[:, 1]
    np.testing.assert_array_equal(double_row(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_col(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_complex(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_row(second_col), 2.0 * second_col)
    np.testing.assert_array_equal(double_col(second_col), 2.0 * second_col)
    np.testing.assert_array_equal(double_complex(second_col), 2.0 * second_col)

    counting_3d = np.arange(27.0, dtype=np.float32).reshape((3, 3, 3))
    counting_3d = counting_3d[::-1, ::-1, ::-1]
    slices = [counting_3d[0, :, :], counting_3d[:, 0, :], counting_3d[:, :, 0]]
    for slice_idx, ref_mat in enumerate(slices):
        np.testing.assert_array_equal(double_mat_cm(ref_mat), 2.0 * ref_mat)
        np.testing.assert_array_equal(double_mat_rm(ref_mat), 2.0 * ref_mat)

    # Mutator:
    with pytest.raises(TypeError) as excinfo:
        double_threer(second_row)
    assert msg(excinfo.value) == """
    double_threer(): incompatible function arguments. The following argument types are supported:
        1. (arg0: numpy.ndarray[float32[1, 3], flags.writeable]) -> None

    Invoked with: array([ 5.,  4.,  3.], dtype=float32)
"""

    with pytest.raises(TypeError) as excinfo:
        double_threec(second_col)
    assert msg(excinfo.value) == """
Ejemplo n.º 4
0
def test_negative_stride_from_python(msg):
    from pybind11_tests import (
        double_row, double_col, double_complex, double_mat_cm, double_mat_rm,
        double_threec, double_threer)

    # Eigen doesn't support (as of yet) negative strides. When a function takes an Eigen
    # matrix by copy or const reference, we can pass a numpy array that has negative strides.
    # Otherwise, an exception will be thrown as Eigen will not be able to map the numpy array.

    counting_mat = np.arange(9.0, dtype=np.float32).reshape((3, 3))
    counting_mat = counting_mat[::-1, ::-1]
    second_row = counting_mat[1, :]
    second_col = counting_mat[:, 1]
    np.testing.assert_array_equal(double_row(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_col(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_complex(second_row), 2.0 * second_row)
    np.testing.assert_array_equal(double_row(second_col), 2.0 * second_col)
    np.testing.assert_array_equal(double_col(second_col), 2.0 * second_col)
    np.testing.assert_array_equal(double_complex(second_col), 2.0 * second_col)

    counting_3d = np.arange(27.0, dtype=np.float32).reshape((3, 3, 3))
    counting_3d = counting_3d[::-1, ::-1, ::-1]
    slices = [counting_3d[0, :, :], counting_3d[:, 0, :], counting_3d[:, :, 0]]
    for slice_idx, ref_mat in enumerate(slices):
        np.testing.assert_array_equal(double_mat_cm(ref_mat), 2.0 * ref_mat)
        np.testing.assert_array_equal(double_mat_rm(ref_mat), 2.0 * ref_mat)

    # Mutator:
    with pytest.raises(TypeError) as excinfo:
        double_threer(second_row)
    assert msg(excinfo.value) == """
    double_threer(): incompatible function arguments. The following argument types are supported:
        1. (arg0: numpy.ndarray[float32[1, 3], flags.writeable]) -> None

    Invoked with: array([ 5.,  4.,  3.], dtype=float32)
"""

    with pytest.raises(TypeError) as excinfo:
        double_threec(second_col)
    assert msg(excinfo.value) == """