3 from pybind11_tests
import ConstructorStats
5 np = pytest.importorskip(
"numpy")
6 m = pytest.importorskip(
"pybind11_tests.eigen_matrix")
11 [0.0, 3, 0, 0, 0, 11],
12 [22, 0, 0, 0, 17, 11],
21 np.testing.assert_array_equal(mat, ref)
47 ref2 = np.array([[0.0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]])
48 np.testing.assert_array_equal(m.partial_copy_four_rm_r(ref2), ref2)
49 np.testing.assert_array_equal(m.partial_copy_four_rm_c(ref2), ref2)
50 np.testing.assert_array_equal(m.partial_copy_four_rm_r(ref2[:, 1]), ref2[:, [1]])
51 np.testing.assert_array_equal(m.partial_copy_four_rm_c(ref2[0, :]), ref2[[0], :])
52 np.testing.assert_array_equal(
53 m.partial_copy_four_rm_r(ref2[:, (0, 2)]), ref2[:, (0, 2)]
55 np.testing.assert_array_equal(
56 m.partial_copy_four_rm_c(ref2[(3, 1, 2), :]), ref2[(3, 1, 2), :]
59 np.testing.assert_array_equal(m.partial_copy_four_cm_r(ref2), ref2)
60 np.testing.assert_array_equal(m.partial_copy_four_cm_c(ref2), ref2)
61 np.testing.assert_array_equal(m.partial_copy_four_cm_r(ref2[:, 1]), ref2[:, [1]])
62 np.testing.assert_array_equal(m.partial_copy_four_cm_c(ref2[0, :]), ref2[[0], :])
63 np.testing.assert_array_equal(
64 m.partial_copy_four_cm_r(ref2[:, (0, 2)]), ref2[:, (0, 2)]
66 np.testing.assert_array_equal(
67 m.partial_copy_four_cm_c(ref2[(3, 1, 2), :]), ref2[(3, 1, 2), :]
72 m.partial_copy_four_rm_r,
73 m.partial_copy_four_rm_c,
74 m.partial_copy_four_cm_r,
75 m.partial_copy_four_cm_c,
77 matrix_with_wrong_shape = [[1, 2], [3, 4]]
79 with pytest.raises(TypeError)
as excinfo:
80 f(matrix_with_wrong_shape)
81 assert "incompatible function arguments" in str(excinfo.value)
85 zr = np.arange(30, dtype=
"float32").
reshape(5, 6)
86 zc = zr.reshape(6, 5).transpose()
92 with pytest.raises(TypeError)
as excinfo:
95 "(arg0: numpy.ndarray[numpy.float32[5, 6],"
96 " flags.writeable, flags.c_contiguous]) -> None" in str(excinfo.value)
98 with pytest.raises(TypeError)
as excinfo:
101 "(arg0: numpy.ndarray[numpy.float32[5, 6],"
102 " flags.writeable, flags.f_contiguous]) -> None" in str(excinfo.value)
104 with pytest.raises(TypeError)
as excinfo:
105 m.fixed_mutator_a(np.array([[1, 2], [3, 4]], dtype=
"float32"))
106 assert "(arg0: numpy.ndarray[numpy.float32[5, 6], flags.writeable]) -> None" in str(
109 zr.flags.writeable =
False
110 with pytest.raises(TypeError):
111 m.fixed_mutator_r(zr)
112 with pytest.raises(TypeError):
113 m.fixed_mutator_a(zr)
117 assert m.cpp_copy(m.fixed_r()) == 22.0
118 assert m.cpp_copy(m.fixed_c()) == 22.0
119 z = np.array([[5.0, 6], [7, 8]])
120 assert m.cpp_copy(z) == 7.0
121 assert m.cpp_copy(m.get_cm_ref()) == 21.0
122 assert m.cpp_copy(m.get_rm_ref()) == 21.0
123 assert m.cpp_ref_c(m.get_cm_ref()) == 21.0
124 assert m.cpp_ref_r(m.get_rm_ref()) == 21.0
125 with pytest.raises(RuntimeError)
as excinfo:
127 m.cpp_ref_any(m.fixed_c())
128 assert "Unable to cast Python instance" in str(excinfo.value)
129 with pytest.raises(RuntimeError)
as excinfo:
131 m.cpp_ref_any(m.fixed_r())
132 assert "Unable to cast Python instance" in str(excinfo.value)
133 assert m.cpp_ref_any(m.ReturnTester.create()) == 1.0
135 assert m.cpp_ref_any(m.get_cm_ref()) == 21.0
136 assert m.cpp_ref_any(m.get_cm_ref()) == 21.0
140 z = np.full((5, 6), 42.0)
141 z.flags.writeable =
False
142 np.testing.assert_array_equal(z, m.fixed_copy_r(z))
143 np.testing.assert_array_equal(m.fixed_r_const(), m.fixed_r())
144 assert not m.fixed_r_const().flags.writeable
145 np.testing.assert_array_equal(m.fixed_copy_r(m.fixed_r_const()), m.fixed_r_const())
149 counting_mat = np.arange(9.0, dtype=np.float32).
reshape((3, 3))
150 second_row = counting_mat[1, :]
151 second_col = counting_mat[:, 1]
152 np.testing.assert_array_equal(m.double_row(second_row), 2.0 * second_row)
153 np.testing.assert_array_equal(m.double_col(second_row), 2.0 * second_row)
154 np.testing.assert_array_equal(m.double_complex(second_row), 2.0 * second_row)
155 np.testing.assert_array_equal(m.double_row(second_col), 2.0 * second_col)
156 np.testing.assert_array_equal(m.double_col(second_col), 2.0 * second_col)
157 np.testing.assert_array_equal(m.double_complex(second_col), 2.0 * second_col)
159 counting_3d = np.arange(27.0, dtype=np.float32).
reshape((3, 3, 3))
160 slices = [counting_3d[0, :, :], counting_3d[:, 0, :], counting_3d[:, :, 0]]
161 for ref_mat
in slices:
162 np.testing.assert_array_equal(m.double_mat_cm(ref_mat), 2.0 * ref_mat)
163 np.testing.assert_array_equal(m.double_mat_rm(ref_mat), 2.0 * ref_mat)
166 m.double_threer(second_row)
167 m.double_threec(second_col)
168 np.testing.assert_array_equal(counting_mat, [[0.0, 2, 2], [6, 16, 10], [6, 14, 8]])
172 """Eigen doesn't support (as of yet) negative strides. When a function takes an Eigen matrix by
173 copy or const reference, we can pass a numpy array that has negative strides. Otherwise, an
174 exception will be thrown as Eigen will not be able to map the numpy array."""
176 counting_mat = np.arange(9.0, dtype=np.float32).
reshape((3, 3))
177 counting_mat = counting_mat[::-1, ::-1]
178 second_row = counting_mat[1, :]
179 second_col = counting_mat[:, 1]
180 np.testing.assert_array_equal(m.double_row(second_row), 2.0 * second_row)
181 np.testing.assert_array_equal(m.double_col(second_row), 2.0 * second_row)
182 np.testing.assert_array_equal(m.double_complex(second_row), 2.0 * second_row)
183 np.testing.assert_array_equal(m.double_row(second_col), 2.0 * second_col)
184 np.testing.assert_array_equal(m.double_col(second_col), 2.0 * second_col)
185 np.testing.assert_array_equal(m.double_complex(second_col), 2.0 * second_col)
187 counting_3d = np.arange(27.0, dtype=np.float32).
reshape((3, 3, 3))
188 counting_3d = counting_3d[::-1, ::-1, ::-1]
189 slices = [counting_3d[0, :, :], counting_3d[:, 0, :], counting_3d[:, :, 0]]
190 for ref_mat
in slices:
191 np.testing.assert_array_equal(m.double_mat_cm(ref_mat), 2.0 * ref_mat)
192 np.testing.assert_array_equal(m.double_mat_rm(ref_mat), 2.0 * ref_mat)
195 with pytest.raises(TypeError)
as excinfo:
196 m.double_threer(second_row)
200 double_threer(): incompatible function arguments. The following argument types are supported:
201 1. (arg0: numpy.ndarray[numpy.float32[1, 3], flags.writeable]) -> None
204 +
repr(np.array([5.0, 4.0, 3.0], dtype=
"float32"))
207 with pytest.raises(TypeError)
as excinfo:
208 m.double_threec(second_col)
212 double_threec(): incompatible function arguments. The following argument types are supported:
213 1. (arg0: numpy.ndarray[numpy.float32[3, 1], flags.writeable]) -> None
216 +
repr(np.array([7.0, 4.0, 1.0], dtype=
"float32"))
221 with pytest.raises(RuntimeError)
as excinfo:
222 m.block(ref, 0, 0, 0, 0)
223 assert str(excinfo.value) ==
"type_caster for Eigen::Ref made a copy."
227 assert np.all(m.diagonal(ref) == ref.diagonal())
228 assert np.all(m.diagonal_1(ref) == ref.diagonal(1))
229 for i
in range(-5, 7):
230 assert np.all(m.diagonal_n(ref, i) == ref.diagonal(i)), f
"m.diagonal_n({i})"
234 rof = np.asarray(ref, order=
"F")
235 assert np.all(m.block(rof, 2, 1, 3, 3) == rof[2:5, 1:4])
236 assert np.all(m.block(rof, 1, 4, 4, 2) == rof[1:, 4:])
237 assert np.all(m.block(rof, 1, 4, 3, 2) == rof[1:4, 4:])
241 chols = [m.cholesky1, m.cholesky2, m.cholesky3, m.cholesky4]
242 for i, chol
in enumerate(chols, start=1):
243 mymat = chol(np.array([[1.0, 2, 4], [2, 13, 23], [4, 23, 77]]))
245 mymat == np.array([[1, 0, 0], [2, 3, 0], [4, 5, 6]])
255 z = np.array(a, copy=
True)
261 """Tests various ways of returning references and non-referencing copies"""
263 primary = np.ones((10, 10))
266 assert not a_get1.flags.owndata
267 assert a_get1.flags.writeable
270 assert not a_get2.flags.owndata
271 assert a_get2.flags.writeable
275 assert not a_view1.flags.owndata
276 assert not a_view1.flags.writeable
277 with pytest.raises(ValueError):
279 a_view2 = a.view_ptr()
280 assert not a_view2.flags.owndata
281 assert not a_view2.flags.writeable
282 with pytest.raises(ValueError):
285 a_copy1 = a.copy_get()
286 assert a_copy1.flags.owndata
287 assert a_copy1.flags.writeable
288 np.testing.assert_array_equal(a_copy1, primary)
291 a_copy2 = a.copy_view()
292 assert a_copy2.flags.owndata
293 assert a_copy2.flags.writeable
294 np.testing.assert_array_equal(a_copy2, primary)
299 assert not a_ref1.flags.owndata
300 assert a_ref1.flags.writeable
302 a_ref2 = a.ref_const()
303 assert not a_ref2.flags.owndata
304 assert not a_ref2.flags.writeable
305 with pytest.raises(ValueError):
307 a_ref3 = a.ref_safe()
308 assert not a_ref3.flags.owndata
309 assert a_ref3.flags.writeable
311 a_ref4 = a.ref_const_safe()
312 assert not a_ref4.flags.owndata
313 assert not a_ref4.flags.writeable
314 with pytest.raises(ValueError):
315 a_ref4[7, 0] = 987654321
317 a_copy3 = a.copy_ref()
318 assert a_copy3.flags.owndata
319 assert a_copy3.flags.writeable
320 np.testing.assert_array_equal(a_copy3, primary)
323 a_copy4 = a.copy_ref_const()
324 assert a_copy4.flags.owndata
325 assert a_copy4.flags.writeable
326 np.testing.assert_array_equal(a_copy4, primary)
330 a_block1 = a.block(3, 3, 2, 2)
331 assert not a_block1.flags.owndata
332 assert a_block1.flags.writeable
335 a_block2 = a.block_safe(2, 2, 3, 2)
336 assert not a_block2.flags.owndata
337 assert a_block2.flags.writeable
338 a_block2[2, 1] = -123
340 a_block3 = a.block_const(6, 7, 4, 3)
341 assert not a_block3.flags.owndata
342 assert not a_block3.flags.writeable
343 with pytest.raises(ValueError):
344 a_block3[2, 2] = -44444
346 a_copy5 = a.copy_block(2, 2, 2, 3)
347 assert a_copy5.flags.owndata
348 assert a_copy5.flags.writeable
349 np.testing.assert_array_equal(a_copy5, primary[2:4, 2:5])
353 a_corn1 = a.corners()
354 assert not a_corn1.flags.owndata
355 assert a_corn1.flags.writeable
362 a_corn2 = a.corners_const()
363 assert not a_corn2.flags.owndata
364 assert not a_corn2.flags.writeable
365 with pytest.raises(ValueError):
370 np.testing.assert_array_equal(a_get1, primary)
371 np.testing.assert_array_equal(a_get2, primary)
372 np.testing.assert_array_equal(a_view1, primary)
373 np.testing.assert_array_equal(a_view2, primary)
374 np.testing.assert_array_equal(a_ref1, primary)
375 np.testing.assert_array_equal(a_ref2, primary)
376 np.testing.assert_array_equal(a_ref3, primary)
377 np.testing.assert_array_equal(a_ref4, primary)
378 np.testing.assert_array_equal(a_block1, primary[3:5, 3:5])
379 np.testing.assert_array_equal(a_block2, primary[2:5, 2:4])
380 np.testing.assert_array_equal(a_block3, primary[6:10, 7:10])
381 np.testing.assert_array_equal(
382 a_corn1, primary[0 :: primary.shape[0] - 1, 0 :: primary.shape[1] - 1]
384 np.testing.assert_array_equal(
385 a_corn2, primary[0 :: primary.shape[0] - 1, 0 :: primary.shape[1] - 1]
388 np.testing.assert_array_equal(a_copy1, c1want)
389 np.testing.assert_array_equal(a_copy2, c2want)
390 np.testing.assert_array_equal(a_copy3, c3want)
391 np.testing.assert_array_equal(a_copy4, c4want)
392 np.testing.assert_array_equal(a_copy5, c5want)
397 start_with = cstats.alive()
399 assert cstats.alive() == start_with + 1
401 assert cstats.alive() == start_with + 1
404 assert cstats.alive() == start_with + 1
407 assert cstats.alive() == start_with
413 assert cstats.alive() == 1
414 unsafe = [a.ref(), a.ref_const(), a.block(1, 2, 3, 4)]
420 a.copy_block(4, 3, 2, 1),
423 assert cstats.alive() == 0
429 m.ReturnTester.get_ptr,
431 m.ReturnTester.view_ptr,
432 m.ReturnTester.ref_safe,
433 m.ReturnTester.ref_const_safe,
434 m.ReturnTester.corners,
435 m.ReturnTester.corners_const,
439 for meth
in [m.ReturnTester.block_safe, m.ReturnTester.block_const]:
444 """Tests Eigen's ability to mutate numpy values"""
446 orig = np.array([[1.0, 2, 3], [4, 5, 6], [7, 8, 9]])
448 zc = np.array(orig, order=
"F")
449 m.add_rm(zr, 1, 0, 100)
450 assert np.all(zr == np.array([[1.0, 2, 3], [104, 5, 6], [7, 8, 9]]))
451 m.add_cm(zc, 1, 0, 200)
452 assert np.all(zc == np.array([[1.0, 2, 3], [204, 5, 6], [7, 8, 9]]))
454 m.add_any(zr, 1, 0, 20)
455 assert np.all(zr == np.array([[1.0, 2, 3], [124, 5, 6], [7, 8, 9]]))
456 m.add_any(zc, 1, 0, 10)
457 assert np.all(zc == np.array([[1.0, 2, 3], [214, 5, 6], [7, 8, 9]]))
460 with pytest.raises(TypeError):
461 m.add_rm(zc, 1, 0, 1)
462 with pytest.raises(TypeError):
463 m.add_cm(zr, 1, 0, 1)
466 m.add1(zr, 1, 0, -100)
467 m.add2(zr, 1, 0, -20)
468 assert np.all(zr == orig)
469 m.add1(zc, 1, 0, -200)
470 m.add2(zc, 1, 0, -10)
471 assert np.all(zc == orig)
475 cornersr = zr[0::2, 0::2]
476 cornersc = zc[0::2, 0::2]
478 assert np.all(cornersr == np.array([[1.0, 3], [7, 9]]))
479 assert np.all(cornersc == np.array([[1.0, 3], [7, 9]]))
481 with pytest.raises(TypeError):
482 m.add_rm(cornersr, 0, 1, 25)
483 with pytest.raises(TypeError):
484 m.add_cm(cornersr, 0, 1, 25)
485 with pytest.raises(TypeError):
486 m.add_rm(cornersc, 0, 1, 25)
487 with pytest.raises(TypeError):
488 m.add_cm(cornersc, 0, 1, 25)
489 m.add_any(cornersr, 0, 1, 25)
490 m.add_any(cornersc, 0, 1, 44)
491 assert np.all(zr == np.array([[1.0, 2, 28], [4, 5, 6], [7, 8, 9]]))
492 assert np.all(zc == np.array([[1.0, 2, 47], [4, 5, 6], [7, 8, 9]]))
496 zro.flags.writeable =
False
497 with pytest.raises(TypeError):
498 m.add_rm(zro, 0, 0, 0)
499 with pytest.raises(TypeError):
500 m.add_any(zro, 0, 0, 0)
501 with pytest.raises(TypeError):
503 with pytest.raises(TypeError):
507 zi = np.array([[1, 2], [3, 4]])
508 with pytest.raises(TypeError):
513 """Tests numpy mutating Eigen matrices (for returned Eigen::Ref<...>s)"""
518 zcro = m.get_cm_const_ref()
520 zrro = m.get_rm_const_ref()
522 assert [zc[1, 2], zcro[1, 2], zr[1, 2], zrro[1, 2]] == [23] * 4
524 assert not zc.flags.owndata
525 assert zc.flags.writeable
526 assert not zr.flags.owndata
527 assert zr.flags.writeable
528 assert not zcro.flags.owndata
529 assert not zcro.flags.writeable
530 assert not zrro.flags.owndata
531 assert not zrro.flags.writeable
534 expect = np.array([[11.0, 12, 13], [21, 22, 99], [31, 32, 33]])
536 assert np.all(zc == expect)
537 assert np.all(zcro == expect)
538 assert np.all(m.get_cm_ref() == expect)
541 assert np.all(zr == expect)
542 assert np.all(zrro == expect)
543 assert np.all(m.get_rm_ref() == expect)
546 with pytest.raises(ValueError):
548 with pytest.raises(ValueError):
553 y1 = np.array(m.get_cm_const_ref())
555 assert y1.flags.owndata
556 assert y1.flags.writeable
558 assert y1[1, 2] == 99
560 assert y1[1, 2] == 111
561 assert zc[1, 2] == 99
565 """Tests a complex chain of nested eigen/numpy references"""
571 z2 = m.incr_matrix(z, 1)
573 z3 = m.incr_matrix(z, 2)
575 z4 = m.incr_matrix(z, 3)
577 z5 = m.incr_matrix(z, 4)
579 assert np.all(z == z2)
580 assert np.all(z == z3)
581 assert np.all(z == z4)
582 assert np.all(z == z5)
583 expect = np.array([[0.0, 22, 20], [31, 37, 33], [41, 42, 38]])
584 assert np.all(z == expect)
586 y = np.array(
range(100), dtype=
"float64").
reshape(10, 10)
587 y2 = m.incr_matrix_any(y, 10)
588 y3 = m.incr_matrix_any(
593 y6 = m.incr_matrix_any(y5, 1000)
596 yexpect = np.array(
range(100), dtype=
"float64").
reshape(10, 10)
598 yexpect[0::2, 0::2] -= 33
599 yexpect[0::4, 0::4] += 1000
600 assert np.all(y6 == yexpect[0::4, 0::4])
601 assert np.all(y5 == yexpect[0::4, 0::4])
602 assert np.all(y4 == yexpect[0::4, 0::2])
603 assert np.all(y3 == yexpect[0::2, 0::2])
604 assert np.all(y2 == yexpect)
605 assert np.all(y == yexpect)
611 int_matrix_colmajor = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], order=
"F")
612 dbl_matrix_colmajor = np.array(
613 int_matrix_colmajor, dtype=
"double", order=
"F", copy=
True
615 int_matrix_rowmajor = np.array(int_matrix_colmajor, order=
"C", copy=
True)
616 dbl_matrix_rowmajor = np.array(
617 int_matrix_rowmajor, dtype=
"double", order=
"C", copy=
True
621 assert m.get_elem(int_matrix_colmajor) == 8
622 assert m.get_elem(dbl_matrix_colmajor) == 8
623 assert m.get_elem(int_matrix_rowmajor) == 8
624 assert m.get_elem(dbl_matrix_rowmajor) == 8
627 with pytest.raises(TypeError)
as excinfo:
628 m.get_elem_nocopy(int_matrix_colmajor)
629 assert "get_elem_nocopy(): incompatible function arguments." in str(excinfo.value)
630 assert ", flags.f_contiguous" in str(excinfo.value)
631 assert m.get_elem_nocopy(dbl_matrix_colmajor) == 8
632 with pytest.raises(TypeError)
as excinfo:
633 m.get_elem_nocopy(int_matrix_rowmajor)
634 assert "get_elem_nocopy(): incompatible function arguments." in str(excinfo.value)
635 assert ", flags.f_contiguous" in str(excinfo.value)
636 with pytest.raises(TypeError)
as excinfo:
637 m.get_elem_nocopy(dbl_matrix_rowmajor)
638 assert "get_elem_nocopy(): incompatible function arguments." in str(excinfo.value)
639 assert ", flags.f_contiguous" in str(excinfo.value)
642 with pytest.raises(TypeError)
as excinfo:
643 m.get_elem_rm_nocopy(int_matrix_colmajor)
644 assert "get_elem_rm_nocopy(): incompatible function arguments." in str(
647 assert ", flags.c_contiguous" in str(excinfo.value)
648 with pytest.raises(TypeError)
as excinfo:
649 m.get_elem_rm_nocopy(dbl_matrix_colmajor)
650 assert "get_elem_rm_nocopy(): incompatible function arguments." in str(
653 assert ", flags.c_contiguous" in str(excinfo.value)
654 assert m.get_elem_rm_nocopy(int_matrix_rowmajor) == 8
655 with pytest.raises(TypeError)
as excinfo:
656 m.get_elem_rm_nocopy(dbl_matrix_rowmajor)
657 assert "get_elem_rm_nocopy(): incompatible function arguments." in str(
660 assert ", flags.c_contiguous" in str(excinfo.value)
664 """Ensure the lifetime of temporary arrays created by the `Ref` caster
666 The `Ref` caster sometimes creates a copy which needs to stay alive. This needs to
667 happen both for directs casts (just the array) or indirectly (e.g. list of arrays).
670 a = np.full(shape=10, fill_value=8, dtype=np.int8)
671 assert m.get_elem_direct(a) == 8
674 assert m.get_elem_indirect(list_of_a) == 8
678 assert np.all(m.incr_diag(7) == np.diag([1.0, 2, 3, 4, 5, 6, 7]))
680 asymm = np.array([[1.0, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
681 symm_lower = np.array(asymm)
682 symm_upper = np.array(asymm)
684 for j
in range(i + 1, 4):
685 symm_lower[i, j] = symm_lower[j, i]
686 symm_upper[j, i] = symm_upper[i, j]
688 assert np.all(m.symmetric_lower(asymm) == symm_lower)
689 assert np.all(m.symmetric_upper(asymm) == symm_upper)
696 double_col(arg0: numpy.ndarray[numpy.float32[m, 1]]) -> numpy.ndarray[numpy.float32[m, 1]]
702 double_row(arg0: numpy.ndarray[numpy.float32[1, n]]) -> numpy.ndarray[numpy.float32[1, n]]
705 assert doc(m.double_complex) == (
707 double_complex(arg0: numpy.ndarray[numpy.complex64[m, 1]])"""
708 """ -> numpy.ndarray[numpy.complex64[m, 1]]
711 assert doc(m.double_mat_rm) == (
713 double_mat_rm(arg0: numpy.ndarray[numpy.float32[m, n]])"""
714 """ -> numpy.ndarray[numpy.float32[m, n]]
720 a = np.array([[1.0, 2], [3, 4], [5, 6]])
723 assert np.all(m.matrix_multiply(a, b) == np.array([[3.0], [7], [11]]))
724 assert np.all(m.matrix_multiply(A=a, B=b) == np.array([[3.0], [7], [11]]))
725 assert np.all(m.matrix_multiply(B=b, A=a) == np.array([[3.0], [7], [11]]))
727 with pytest.raises(ValueError)
as excinfo:
728 m.matrix_multiply(b, a)
729 assert str(excinfo.value) ==
"Nonconformable matrices!"
731 with pytest.raises(ValueError)
as excinfo:
732 m.matrix_multiply(A=b, B=a)
733 assert str(excinfo.value) ==
"Nonconformable matrices!"
735 with pytest.raises(ValueError)
as excinfo:
736 m.matrix_multiply(B=a, A=b)
737 assert str(excinfo.value) ==
"Nonconformable matrices!"
741 pytest.importorskip(
"scipy")
751 pytest.importorskip(
"scipy")
755 sparse_copy_r(arg0: scipy.sparse.csr_matrix[numpy.float32]) -> scipy.sparse.csr_matrix[numpy.float32]
761 sparse_copy_c(arg0: scipy.sparse.csc_matrix[numpy.float32]) -> scipy.sparse.csc_matrix[numpy.float32]
767 """Ignore strides on a length-1 dimension (even if they would be incompatible length > 1)"""
768 assert np.all(m.iss738_f1(np.array([[1.0, 2, 3]])) == np.array([[1.0, 102, 203]]))
770 m.iss738_f1(np.array([[1.0], [2], [3]])) == np.array([[1.0], [12], [23]])
773 assert np.all(m.iss738_f2(np.array([[1.0, 2, 3]])) == np.array([[1.0, 102, 203]]))
775 m.iss738_f2(np.array([[1.0], [2], [3]])) == np.array([[1.0], [12], [23]])
779 @pytest.mark.parametrize(
"func", [m.iss738_f1, m.iss738_f2])
780 @pytest.mark.parametrize(
"sizes", [(0, 2), (2, 0)])
782 """Ignore strides on a length-0 dimension (even if they would be incompatible length > 1)"""
783 assert np.all(
func(np.zeros(sizes)) == np.zeros(sizes))
787 """Issue 1105: 1xN or Nx1 input arrays weren't accepted for eigen
788 compile-time row vectors or column vector"""
789 assert m.iss1105_row(np.ones((1, 7)))
790 assert m.iss1105_col(np.ones((7, 1)))
793 with pytest.raises(TypeError)
as excinfo:
794 m.iss1105_row(np.ones((7, 1)))
795 assert "incompatible function arguments" in str(excinfo.value)
796 with pytest.raises(TypeError)
as excinfo:
797 m.iss1105_col(np.ones((1, 7)))
798 assert "incompatible function arguments" in str(excinfo.value)
802 """Using Eigen types as member variables requires a class-specific
803 operator new with proper alignment"""
805 o = m.CustomOperatorNew()
806 np.testing.assert_allclose(o.a, 0.0)
807 np.testing.assert_allclose(o.b.diagonal(), 1.0)