mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-22 05:05:11 +00:00
correct stride in matrix example and test
This also matches the Eigen example for the row-major case. This also enhances one of the tests to trigger a failure (and fixes it in the PR). (This isn't really a flaw in pybind itself, but rather fixes wrong code in the test code and docs).
This commit is contained in:
parent
d2757d0440
commit
a22dd2d1df
@ -41,7 +41,7 @@ completely avoid copy operations with Python expressions like
|
|||||||
py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
|
py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
|
||||||
2, /* Number of dimensions */
|
2, /* Number of dimensions */
|
||||||
{ m.rows(), m.cols() }, /* Buffer dimensions */
|
{ m.rows(), m.cols() }, /* Buffer dimensions */
|
||||||
{ sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
|
{ sizeof(float) * m.cols(), /* Strides (in bytes) for each index */
|
||||||
sizeof(float) }
|
sizeof(float) }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -107,7 +107,7 @@ TEST_SUBMODULE(buffers, m) {
|
|||||||
return py::buffer_info(
|
return py::buffer_info(
|
||||||
m.data(), /* Pointer to buffer */
|
m.data(), /* Pointer to buffer */
|
||||||
{ m.rows(), m.cols() }, /* Buffer dimensions */
|
{ m.rows(), m.cols() }, /* Buffer dimensions */
|
||||||
{ sizeof(float) * size_t(m.rows()), /* Strides (in bytes) for each index */
|
{ sizeof(float) * size_t(m.cols()), /* Strides (in bytes) for each index */
|
||||||
sizeof(float) }
|
sizeof(float) }
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
|
@ -36,17 +36,21 @@ def test_from_python():
|
|||||||
# https://bitbucket.org/pypy/pypy/issues/2444
|
# https://bitbucket.org/pypy/pypy/issues/2444
|
||||||
@pytest.unsupported_on_pypy
|
@pytest.unsupported_on_pypy
|
||||||
def test_to_python():
|
def test_to_python():
|
||||||
mat = m.Matrix(5, 5)
|
mat = m.Matrix(5, 4)
|
||||||
assert memoryview(mat).shape == (5, 5)
|
assert memoryview(mat).shape == (5, 4)
|
||||||
|
|
||||||
assert mat[2, 3] == 0
|
assert mat[2, 3] == 0
|
||||||
mat[2, 3] = 4
|
mat[2, 3] = 4.0
|
||||||
|
mat[3, 2] = 7.0
|
||||||
assert mat[2, 3] == 4
|
assert mat[2, 3] == 4
|
||||||
|
assert mat[3, 2] == 7
|
||||||
|
assert struct.unpack_from('f', mat, (3 * 4 + 2) * 4) == (7, )
|
||||||
|
assert struct.unpack_from('f', mat, (2 * 4 + 3) * 4) == (4, )
|
||||||
|
|
||||||
mat2 = np.array(mat, copy=False)
|
mat2 = np.array(mat, copy=False)
|
||||||
assert mat2.shape == (5, 5)
|
assert mat2.shape == (5, 4)
|
||||||
assert abs(mat2).sum() == 4
|
assert abs(mat2).sum() == 11
|
||||||
assert mat2[2, 3] == 4
|
assert mat2[2, 3] == 4 and mat2[3, 2] == 7
|
||||||
mat2[2, 3] = 5
|
mat2[2, 3] = 5
|
||||||
assert mat2[2, 3] == 5
|
assert mat2[2, 3] == 5
|
||||||
|
|
||||||
@ -58,7 +62,7 @@ def test_to_python():
|
|||||||
del mat2 # holds a mat reference
|
del mat2 # holds a mat reference
|
||||||
pytest.gc_collect()
|
pytest.gc_collect()
|
||||||
assert cstats.alive() == 0
|
assert cstats.alive() == 0
|
||||||
assert cstats.values() == ["5x5 matrix"]
|
assert cstats.values() == ["5x4 matrix"]
|
||||||
assert cstats.copy_constructions == 0
|
assert cstats.copy_constructions == 0
|
||||||
# assert cstats.move_constructions >= 0 # Don't invoke any
|
# assert cstats.move_constructions >= 0 # Don't invoke any
|
||||||
assert cstats.copy_assignments == 0
|
assert cstats.copy_assignments == 0
|
||||||
|
Loading…
Reference in New Issue
Block a user