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 */
|
||||
2, /* Number of 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) }
|
||||
);
|
||||
});
|
||||
|
@ -107,7 +107,7 @@ TEST_SUBMODULE(buffers, m) {
|
||||
return py::buffer_info(
|
||||
m.data(), /* Pointer to buffer */
|
||||
{ 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) }
|
||||
);
|
||||
})
|
||||
|
@ -36,17 +36,21 @@ def test_from_python():
|
||||
# https://bitbucket.org/pypy/pypy/issues/2444
|
||||
@pytest.unsupported_on_pypy
|
||||
def test_to_python():
|
||||
mat = m.Matrix(5, 5)
|
||||
assert memoryview(mat).shape == (5, 5)
|
||||
mat = m.Matrix(5, 4)
|
||||
assert memoryview(mat).shape == (5, 4)
|
||||
|
||||
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[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)
|
||||
assert mat2.shape == (5, 5)
|
||||
assert abs(mat2).sum() == 4
|
||||
assert mat2[2, 3] == 4
|
||||
assert mat2.shape == (5, 4)
|
||||
assert abs(mat2).sum() == 11
|
||||
assert mat2[2, 3] == 4 and mat2[3, 2] == 7
|
||||
mat2[2, 3] = 5
|
||||
assert mat2[2, 3] == 5
|
||||
|
||||
@ -58,7 +62,7 @@ def test_to_python():
|
||||
del mat2 # holds a mat reference
|
||||
pytest.gc_collect()
|
||||
assert cstats.alive() == 0
|
||||
assert cstats.values() == ["5x5 matrix"]
|
||||
assert cstats.values() == ["5x4 matrix"]
|
||||
assert cstats.copy_constructions == 0
|
||||
# assert cstats.move_constructions >= 0 # Don't invoke any
|
||||
assert cstats.copy_assignments == 0
|
||||
|
Loading…
Reference in New Issue
Block a user