aboutsummaryrefslogtreecommitdiffstats
path: root/3rdparty/pybind11/tests/test_eigen.py
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2021-01-02 10:15:39 +0100
committerMiodrag Milanovic <mmicko@gmail.com>2021-01-02 10:15:39 +0100
commite76cdab6dd77bad411e6ac9372ee527aff89ef17 (patch)
treee9868f05cf455336d75f33b1312d71034f8fb334 /3rdparty/pybind11/tests/test_eigen.py
parentc6cdf30501dcb2da01361229dd66a05dad73a132 (diff)
downloadnextpnr-e76cdab6dd77bad411e6ac9372ee527aff89ef17.tar.gz
nextpnr-e76cdab6dd77bad411e6ac9372ee527aff89ef17.tar.bz2
nextpnr-e76cdab6dd77bad411e6ac9372ee527aff89ef17.zip
Update pybind11 to version 2.6.1
Diffstat (limited to '3rdparty/pybind11/tests/test_eigen.py')
-rw-r--r--3rdparty/pybind11/tests/test_eigen.py314
1 files changed, 195 insertions, 119 deletions
diff --git a/3rdparty/pybind11/tests/test_eigen.py b/3rdparty/pybind11/tests/test_eigen.py
index 55d93517..a131dc15 100644
--- a/3rdparty/pybind11/tests/test_eigen.py
+++ b/3rdparty/pybind11/tests/test_eigen.py
@@ -1,17 +1,20 @@
+# -*- coding: utf-8 -*-
import pytest
from pybind11_tests import ConstructorStats
-pytestmark = pytest.requires_eigen_and_numpy
+np = pytest.importorskip("numpy")
+m = pytest.importorskip("pybind11_tests.eigen")
-with pytest.suppress(ImportError):
- from pybind11_tests import eigen as m
- import numpy as np
- ref = np.array([[ 0., 3, 0, 0, 0, 11],
- [22, 0, 0, 0, 17, 11],
- [ 7, 5, 0, 1, 0, 11],
- [ 0, 0, 0, 0, 0, 11],
- [ 0, 0, 14, 0, 8, 11]])
+ref = np.array(
+ [
+ [0.0, 3, 0, 0, 0, 11],
+ [22, 0, 0, 0, 17, 11],
+ [7, 5, 0, 1, 0, 11],
+ [0, 0, 0, 0, 0, 11],
+ [0, 0, 14, 0, 8, 11],
+ ]
+)
def assert_equal_ref(mat):
@@ -41,28 +44,37 @@ def test_dense():
def test_partially_fixed():
- ref2 = np.array([[0., 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]])
+ ref2 = np.array([[0.0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]])
np.testing.assert_array_equal(m.partial_copy_four_rm_r(ref2), ref2)
np.testing.assert_array_equal(m.partial_copy_four_rm_c(ref2), ref2)
np.testing.assert_array_equal(m.partial_copy_four_rm_r(ref2[:, 1]), ref2[:, [1]])
np.testing.assert_array_equal(m.partial_copy_four_rm_c(ref2[0, :]), ref2[[0], :])
- np.testing.assert_array_equal(m.partial_copy_four_rm_r(ref2[:, (0, 2)]), ref2[:, (0, 2)])
np.testing.assert_array_equal(
- m.partial_copy_four_rm_c(ref2[(3, 1, 2), :]), ref2[(3, 1, 2), :])
+ m.partial_copy_four_rm_r(ref2[:, (0, 2)]), ref2[:, (0, 2)]
+ )
+ np.testing.assert_array_equal(
+ m.partial_copy_four_rm_c(ref2[(3, 1, 2), :]), ref2[(3, 1, 2), :]
+ )
np.testing.assert_array_equal(m.partial_copy_four_cm_r(ref2), ref2)
np.testing.assert_array_equal(m.partial_copy_four_cm_c(ref2), ref2)
np.testing.assert_array_equal(m.partial_copy_four_cm_r(ref2[:, 1]), ref2[:, [1]])
np.testing.assert_array_equal(m.partial_copy_four_cm_c(ref2[0, :]), ref2[[0], :])
- np.testing.assert_array_equal(m.partial_copy_four_cm_r(ref2[:, (0, 2)]), ref2[:, (0, 2)])
np.testing.assert_array_equal(
- m.partial_copy_four_cm_c(ref2[(3, 1, 2), :]), ref2[(3, 1, 2), :])
+ m.partial_copy_four_cm_r(ref2[:, (0, 2)]), ref2[:, (0, 2)]
+ )
+ np.testing.assert_array_equal(
+ m.partial_copy_four_cm_c(ref2[(3, 1, 2), :]), ref2[(3, 1, 2), :]
+ )
# TypeError should be raise for a shape mismatch
- functions = [m.partial_copy_four_rm_r, m.partial_copy_four_rm_c,
- m.partial_copy_four_cm_r, m.partial_copy_four_cm_c]
- matrix_with_wrong_shape = [[1, 2],
- [3, 4]]
+ functions = [
+ m.partial_copy_four_rm_r,
+ m.partial_copy_four_rm_c,
+ m.partial_copy_four_cm_r,
+ m.partial_copy_four_cm_c,
+ ]
+ matrix_with_wrong_shape = [[1, 2], [3, 4]]
for f in functions:
with pytest.raises(TypeError) as excinfo:
f(matrix_with_wrong_shape)
@@ -70,7 +82,7 @@ def test_partially_fixed():
def test_mutator_descriptors():
- zr = np.arange(30, dtype='float32').reshape(5, 6) # row-major
+ zr = np.arange(30, dtype="float32").reshape(5, 6) # row-major
zc = zr.reshape(6, 5).transpose() # column-major
m.fixed_mutator_r(zr)
@@ -79,16 +91,21 @@ def test_mutator_descriptors():
m.fixed_mutator_a(zc)
with pytest.raises(TypeError) as excinfo:
m.fixed_mutator_r(zc)
- assert ('(arg0: numpy.ndarray[float32[5, 6], flags.writeable, flags.c_contiguous]) -> None'
- in str(excinfo.value))
+ assert (
+ "(arg0: numpy.ndarray[numpy.float32[5, 6],"
+ " flags.writeable, flags.c_contiguous]) -> None" in str(excinfo.value)
+ )
with pytest.raises(TypeError) as excinfo:
m.fixed_mutator_c(zr)
- assert ('(arg0: numpy.ndarray[float32[5, 6], flags.writeable, flags.f_contiguous]) -> None'
- in str(excinfo.value))
+ assert (
+ "(arg0: numpy.ndarray[numpy.float32[5, 6],"
+ " flags.writeable, flags.f_contiguous]) -> None" in str(excinfo.value)
+ )
with pytest.raises(TypeError) as excinfo:
- m.fixed_mutator_a(np.array([[1, 2], [3, 4]], dtype='float32'))
- assert ('(arg0: numpy.ndarray[float32[5, 6], flags.writeable]) -> None'
- in str(excinfo.value))
+ m.fixed_mutator_a(np.array([[1, 2], [3, 4]], dtype="float32"))
+ assert "(arg0: numpy.ndarray[numpy.float32[5, 6], flags.writeable]) -> None" in str(
+ excinfo.value
+ )
zr.flags.writeable = False
with pytest.raises(TypeError):
m.fixed_mutator_r(zr)
@@ -97,26 +114,26 @@ def test_mutator_descriptors():
def test_cpp_casting():
- assert m.cpp_copy(m.fixed_r()) == 22.
- assert m.cpp_copy(m.fixed_c()) == 22.
- z = np.array([[5., 6], [7, 8]])
- assert m.cpp_copy(z) == 7.
- assert m.cpp_copy(m.get_cm_ref()) == 21.
- assert m.cpp_copy(m.get_rm_ref()) == 21.
- assert m.cpp_ref_c(m.get_cm_ref()) == 21.
- assert m.cpp_ref_r(m.get_rm_ref()) == 21.
+ assert m.cpp_copy(m.fixed_r()) == 22.0
+ assert m.cpp_copy(m.fixed_c()) == 22.0
+ z = np.array([[5.0, 6], [7, 8]])
+ assert m.cpp_copy(z) == 7.0
+ assert m.cpp_copy(m.get_cm_ref()) == 21.0
+ assert m.cpp_copy(m.get_rm_ref()) == 21.0
+ assert m.cpp_ref_c(m.get_cm_ref()) == 21.0
+ assert m.cpp_ref_r(m.get_rm_ref()) == 21.0
with pytest.raises(RuntimeError) as excinfo:
# Can't reference m.fixed_c: it contains floats, m.cpp_ref_any wants doubles
m.cpp_ref_any(m.fixed_c())
- assert 'Unable to cast Python instance' in str(excinfo.value)
+ assert "Unable to cast Python instance" in str(excinfo.value)
with pytest.raises(RuntimeError) as excinfo:
# Can't reference m.fixed_r: it contains floats, m.cpp_ref_any wants doubles
m.cpp_ref_any(m.fixed_r())
- assert 'Unable to cast Python instance' in str(excinfo.value)
- assert m.cpp_ref_any(m.ReturnTester.create()) == 1.
+ assert "Unable to cast Python instance" in str(excinfo.value)
+ assert m.cpp_ref_any(m.ReturnTester.create()) == 1.0
- assert m.cpp_ref_any(m.get_cm_ref()) == 21.
- assert m.cpp_ref_any(m.get_cm_ref()) == 21.
+ assert m.cpp_ref_any(m.get_cm_ref()) == 21.0
+ assert m.cpp_ref_any(m.get_cm_ref()) == 21.0
def test_pass_readonly_array():
@@ -141,14 +158,14 @@ def test_nonunit_stride_from_python():
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):
+ for ref_mat in slices:
np.testing.assert_array_equal(m.double_mat_cm(ref_mat), 2.0 * ref_mat)
np.testing.assert_array_equal(m.double_mat_rm(ref_mat), 2.0 * ref_mat)
# Mutator:
m.double_threer(second_row)
m.double_threec(second_col)
- np.testing.assert_array_equal(counting_mat, [[0., 2, 2], [6, 16, 10], [6, 14, 8]])
+ np.testing.assert_array_equal(counting_mat, [[0.0, 2, 2], [6, 16, 10], [6, 14, 8]])
def test_negative_stride_from_python(msg):
@@ -170,33 +187,43 @@ def test_negative_stride_from_python(msg):
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):
+ for ref_mat in slices:
np.testing.assert_array_equal(m.double_mat_cm(ref_mat), 2.0 * ref_mat)
np.testing.assert_array_equal(m.double_mat_rm(ref_mat), 2.0 * ref_mat)
# Mutator:
with pytest.raises(TypeError) as excinfo:
m.double_threer(second_row)
- assert msg(excinfo.value) == """
+ 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
+ 1. (arg0: numpy.ndarray[numpy.float32[1, 3], flags.writeable]) -> None
- Invoked with: """ + repr(np.array([ 5., 4., 3.], dtype='float32')) # noqa: E501 line too long
+ Invoked with: """ # noqa: E501 line too long
+ + repr(np.array([5.0, 4.0, 3.0], dtype="float32"))
+ )
with pytest.raises(TypeError) as excinfo:
m.double_threec(second_col)
- assert msg(excinfo.value) == """
+ assert (
+ msg(excinfo.value)
+ == """
double_threec(): incompatible function arguments. The following argument types are supported:
- 1. (arg0: numpy.ndarray[float32[3, 1], flags.writeable]) -> None
+ 1. (arg0: numpy.ndarray[numpy.float32[3, 1], flags.writeable]) -> None
- Invoked with: """ + repr(np.array([ 7., 4., 1.], dtype='float32')) # noqa: E501 line too long
+ Invoked with: """ # noqa: E501 line too long
+ + repr(np.array([7.0, 4.0, 1.0], dtype="float32"))
+ )
def test_nonunit_stride_to_python():
assert np.all(m.diagonal(ref) == ref.diagonal())
assert np.all(m.diagonal_1(ref) == ref.diagonal(1))
for i in range(-5, 7):
- assert np.all(m.diagonal_n(ref, i) == ref.diagonal(i)), "m.diagonal_n({})".format(i)
+ assert np.all(
+ m.diagonal_n(ref, i) == ref.diagonal(i)
+ ), "m.diagonal_n({})".format(i)
assert np.all(m.block(ref, 2, 1, 3, 3) == ref[2:5, 1:4])
assert np.all(m.block(ref, 1, 4, 4, 2) == ref[1:, 4:])
@@ -206,8 +233,10 @@ def test_nonunit_stride_to_python():
def test_eigen_ref_to_python():
chols = [m.cholesky1, m.cholesky2, m.cholesky3, m.cholesky4]
for i, chol in enumerate(chols, start=1):
- mymat = chol(np.array([[1., 2, 4], [2, 13, 23], [4, 23, 77]]))
- assert np.all(mymat == np.array([[1, 0, 0], [2, 3, 0], [4, 5, 6]])), "cholesky{}".format(i)
+ mymat = chol(np.array([[1.0, 2, 4], [2, 13, 23], [4, 23, 77]]))
+ assert np.all(
+ mymat == np.array([[1, 0, 0], [2, 3, 0], [4, 5, 6]])
+ ), "cholesky{}".format(i)
def assign_both(a1, a2, r, c, v):
@@ -324,8 +353,12 @@ def test_eigen_return_references():
np.testing.assert_array_equal(a_block1, master[3:5, 3:5])
np.testing.assert_array_equal(a_block2, master[2:5, 2:4])
np.testing.assert_array_equal(a_block3, master[6:10, 7:10])
- np.testing.assert_array_equal(a_corn1, master[0::master.shape[0] - 1, 0::master.shape[1] - 1])
- np.testing.assert_array_equal(a_corn2, master[0::master.shape[0] - 1, 0::master.shape[1] - 1])
+ np.testing.assert_array_equal(
+ a_corn1, master[0 :: master.shape[0] - 1, 0 :: master.shape[1] - 1]
+ )
+ np.testing.assert_array_equal(
+ a_corn2, master[0 :: master.shape[0] - 1, 0 :: master.shape[1] - 1]
+ )
np.testing.assert_array_equal(a_copy1, c1want)
np.testing.assert_array_equal(a_copy2, c2want)
@@ -354,16 +387,28 @@ def test_eigen_keepalive():
cstats = ConstructorStats.get(m.ReturnTester)
assert cstats.alive() == 1
unsafe = [a.ref(), a.ref_const(), a.block(1, 2, 3, 4)]
- copies = [a.copy_get(), a.copy_view(), a.copy_ref(), a.copy_ref_const(),
- a.copy_block(4, 3, 2, 1)]
+ copies = [
+ a.copy_get(),
+ a.copy_view(),
+ a.copy_ref(),
+ a.copy_ref_const(),
+ a.copy_block(4, 3, 2, 1),
+ ]
del a
assert cstats.alive() == 0
del unsafe
del copies
- for meth in [m.ReturnTester.get, m.ReturnTester.get_ptr, m.ReturnTester.view,
- m.ReturnTester.view_ptr, m.ReturnTester.ref_safe, m.ReturnTester.ref_const_safe,
- m.ReturnTester.corners, m.ReturnTester.corners_const]:
+ for meth in [
+ m.ReturnTester.get,
+ m.ReturnTester.get_ptr,
+ m.ReturnTester.view,
+ m.ReturnTester.view_ptr,
+ m.ReturnTester.ref_safe,
+ m.ReturnTester.ref_const_safe,
+ m.ReturnTester.corners,
+ m.ReturnTester.corners_const,
+ ]:
assert_keeps_alive(m.ReturnTester, meth)
for meth in [m.ReturnTester.block_safe, m.ReturnTester.block_const]:
@@ -373,18 +418,18 @@ def test_eigen_keepalive():
def test_eigen_ref_mutators():
"""Tests Eigen's ability to mutate numpy values"""
- orig = np.array([[1., 2, 3], [4, 5, 6], [7, 8, 9]])
+ orig = np.array([[1.0, 2, 3], [4, 5, 6], [7, 8, 9]])
zr = np.array(orig)
- zc = np.array(orig, order='F')
+ zc = np.array(orig, order="F")
m.add_rm(zr, 1, 0, 100)
- assert np.all(zr == np.array([[1., 2, 3], [104, 5, 6], [7, 8, 9]]))
+ assert np.all(zr == np.array([[1.0, 2, 3], [104, 5, 6], [7, 8, 9]]))
m.add_cm(zc, 1, 0, 200)
- assert np.all(zc == np.array([[1., 2, 3], [204, 5, 6], [7, 8, 9]]))
+ assert np.all(zc == np.array([[1.0, 2, 3], [204, 5, 6], [7, 8, 9]]))
m.add_any(zr, 1, 0, 20)
- assert np.all(zr == np.array([[1., 2, 3], [124, 5, 6], [7, 8, 9]]))
+ assert np.all(zr == np.array([[1.0, 2, 3], [124, 5, 6], [7, 8, 9]]))
m.add_any(zc, 1, 0, 10)
- assert np.all(zc == np.array([[1., 2, 3], [214, 5, 6], [7, 8, 9]]))
+ assert np.all(zc == np.array([[1.0, 2, 3], [214, 5, 6], [7, 8, 9]]))
# Can't reference a col-major array with a row-major Ref, and vice versa:
with pytest.raises(TypeError):
@@ -405,8 +450,8 @@ def test_eigen_ref_mutators():
cornersr = zr[0::2, 0::2]
cornersc = zc[0::2, 0::2]
- assert np.all(cornersr == np.array([[1., 3], [7, 9]]))
- assert np.all(cornersc == np.array([[1., 3], [7, 9]]))
+ assert np.all(cornersr == np.array([[1.0, 3], [7, 9]]))
+ assert np.all(cornersc == np.array([[1.0, 3], [7, 9]]))
with pytest.raises(TypeError):
m.add_rm(cornersr, 0, 1, 25)
@@ -418,8 +463,8 @@ def test_eigen_ref_mutators():
m.add_cm(cornersc, 0, 1, 25)
m.add_any(cornersr, 0, 1, 25)
m.add_any(cornersc, 0, 1, 44)
- assert np.all(zr == np.array([[1., 2, 28], [4, 5, 6], [7, 8, 9]]))
- assert np.all(zc == np.array([[1., 2, 47], [4, 5, 6], [7, 8, 9]]))
+ assert np.all(zr == np.array([[1.0, 2, 28], [4, 5, 6], [7, 8, 9]]))
+ assert np.all(zc == np.array([[1.0, 2, 47], [4, 5, 6], [7, 8, 9]]))
# You shouldn't be allowed to pass a non-writeable array to a mutating Eigen method:
zro = zr[0:4, 0:4]
@@ -457,7 +502,7 @@ def test_numpy_ref_mutators():
assert not zrro.flags.owndata and not zrro.flags.writeable
zc[1, 2] = 99
- expect = np.array([[11., 12, 13], [21, 22, 99], [31, 32, 33]])
+ expect = np.array([[11.0, 12, 13], [21, 22, 99], [31, 32, 33]])
# We should have just changed zc, of course, but also zcro and the original eigen matrix
assert np.all(zc == expect)
assert np.all(zcro == expect)
@@ -505,18 +550,20 @@ def test_both_ref_mutators():
assert np.all(z == z3)
assert np.all(z == z4)
assert np.all(z == z5)
- expect = np.array([[0., 22, 20], [31, 37, 33], [41, 42, 38]])
+ expect = np.array([[0.0, 22, 20], [31, 37, 33], [41, 42, 38]])
assert np.all(z == expect)
- y = np.array(range(100), dtype='float64').reshape(10, 10)
+ y = np.array(range(100), dtype="float64").reshape(10, 10)
y2 = m.incr_matrix_any(y, 10) # np -> eigen -> np
- y3 = m.incr_matrix_any(y2[0::2, 0::2], -33) # np -> eigen -> np slice -> np -> eigen -> np
+ y3 = m.incr_matrix_any(
+ y2[0::2, 0::2], -33
+ ) # np -> eigen -> np slice -> np -> eigen -> np
y4 = m.even_rows(y3) # numpy -> eigen slice -> (... y3)
y5 = m.even_cols(y4) # numpy -> eigen slice -> (... y4)
y6 = m.incr_matrix_any(y5, 1000) # numpy -> eigen -> (... y5)
# Apply same mutations using just numpy:
- yexpect = np.array(range(100), dtype='float64').reshape(10, 10)
+ yexpect = np.array(range(100), dtype="float64").reshape(10, 10)
yexpect += 10
yexpect[0::2, 0::2] -= 33
yexpect[0::4, 0::4] += 1000
@@ -531,10 +578,14 @@ def test_both_ref_mutators():
def test_nocopy_wrapper():
# get_elem requires a column-contiguous matrix reference, but should be
# callable with other types of matrix (via copying):
- int_matrix_colmajor = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], order='F')
- dbl_matrix_colmajor = np.array(int_matrix_colmajor, dtype='double', order='F', copy=True)
- int_matrix_rowmajor = np.array(int_matrix_colmajor, order='C', copy=True)
- dbl_matrix_rowmajor = np.array(int_matrix_rowmajor, dtype='double', order='C', copy=True)
+ int_matrix_colmajor = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], order="F")
+ dbl_matrix_colmajor = np.array(
+ int_matrix_colmajor, dtype="double", order="F", copy=True
+ )
+ int_matrix_rowmajor = np.array(int_matrix_colmajor, order="C", copy=True)
+ dbl_matrix_rowmajor = np.array(
+ int_matrix_rowmajor, dtype="double", order="C", copy=True
+ )
# All should be callable via get_elem:
assert m.get_elem(int_matrix_colmajor) == 8
@@ -545,32 +596,38 @@ def test_nocopy_wrapper():
# All but the second should fail with m.get_elem_nocopy:
with pytest.raises(TypeError) as excinfo:
m.get_elem_nocopy(int_matrix_colmajor)
- assert ('get_elem_nocopy(): incompatible function arguments.' in str(excinfo.value) and
- ', flags.f_contiguous' in str(excinfo.value))
+ assert "get_elem_nocopy(): incompatible function arguments." in str(
+ excinfo.value
+ ) and ", flags.f_contiguous" in str(excinfo.value)
assert m.get_elem_nocopy(dbl_matrix_colmajor) == 8
with pytest.raises(TypeError) as excinfo:
m.get_elem_nocopy(int_matrix_rowmajor)
- assert ('get_elem_nocopy(): incompatible function arguments.' in str(excinfo.value) and
- ', flags.f_contiguous' in str(excinfo.value))
+ assert "get_elem_nocopy(): incompatible function arguments." in str(
+ excinfo.value
+ ) and ", flags.f_contiguous" in str(excinfo.value)
with pytest.raises(TypeError) as excinfo:
m.get_elem_nocopy(dbl_matrix_rowmajor)
- assert ('get_elem_nocopy(): incompatible function arguments.' in str(excinfo.value) and
- ', flags.f_contiguous' in str(excinfo.value))
+ assert "get_elem_nocopy(): incompatible function arguments." in str(
+ excinfo.value
+ ) and ", flags.f_contiguous" in str(excinfo.value)
# For the row-major test, we take a long matrix in row-major, so only the third is allowed:
with pytest.raises(TypeError) as excinfo:
m.get_elem_rm_nocopy(int_matrix_colmajor)
- assert ('get_elem_rm_nocopy(): incompatible function arguments.' in str(excinfo.value) and
- ', flags.c_contiguous' in str(excinfo.value))
+ assert "get_elem_rm_nocopy(): incompatible function arguments." in str(
+ excinfo.value
+ ) and ", flags.c_contiguous" in str(excinfo.value)
with pytest.raises(TypeError) as excinfo:
m.get_elem_rm_nocopy(dbl_matrix_colmajor)
- assert ('get_elem_rm_nocopy(): incompatible function arguments.' in str(excinfo.value) and
- ', flags.c_contiguous' in str(excinfo.value))
+ assert "get_elem_rm_nocopy(): incompatible function arguments." in str(
+ excinfo.value
+ ) and ", flags.c_contiguous" in str(excinfo.value)
assert m.get_elem_rm_nocopy(int_matrix_rowmajor) == 8
with pytest.raises(TypeError) as excinfo:
m.get_elem_rm_nocopy(dbl_matrix_rowmajor)
- assert ('get_elem_rm_nocopy(): incompatible function arguments.' in str(excinfo.value) and
- ', flags.c_contiguous' in str(excinfo.value))
+ assert "get_elem_rm_nocopy(): incompatible function arguments." in str(
+ excinfo.value
+ ) and ", flags.c_contiguous" in str(excinfo.value)
def test_eigen_ref_life_support():
@@ -588,12 +645,9 @@ def test_eigen_ref_life_support():
def test_special_matrix_objects():
- assert np.all(m.incr_diag(7) == np.diag([1., 2, 3, 4, 5, 6, 7]))
+ assert np.all(m.incr_diag(7) == np.diag([1.0, 2, 3, 4, 5, 6, 7]))
- asymm = np.array([[ 1., 2, 3, 4],
- [ 5, 6, 7, 8],
- [ 9, 10, 11, 12],
- [13, 14, 15, 16]])
+ asymm = np.array([[1.0, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
symm_lower = np.array(asymm)
symm_upper = np.array(asymm)
for i in range(4):
@@ -606,43 +660,55 @@ def test_special_matrix_objects():
def test_dense_signature(doc):
- assert doc(m.double_col) == """
- double_col(arg0: numpy.ndarray[float32[m, 1]]) -> numpy.ndarray[float32[m, 1]]
+ assert (
+ doc(m.double_col)
+ == """
+ double_col(arg0: numpy.ndarray[numpy.float32[m, 1]]) -> numpy.ndarray[numpy.float32[m, 1]]
"""
- assert doc(m.double_row) == """
- double_row(arg0: numpy.ndarray[float32[1, n]]) -> numpy.ndarray[float32[1, n]]
+ )
+ assert (
+ doc(m.double_row)
+ == """
+ double_row(arg0: numpy.ndarray[numpy.float32[1, n]]) -> numpy.ndarray[numpy.float32[1, n]]
"""
- assert doc(m.double_complex) == """
- double_complex(arg0: numpy.ndarray[complex64[m, 1]]) -> numpy.ndarray[complex64[m, 1]]
+ )
+ assert doc(m.double_complex) == (
+ """
+ double_complex(arg0: numpy.ndarray[numpy.complex64[m, 1]])"""
+ """ -> numpy.ndarray[numpy.complex64[m, 1]]
"""
- assert doc(m.double_mat_rm) == """
- double_mat_rm(arg0: numpy.ndarray[float32[m, n]]) -> numpy.ndarray[float32[m, n]]
+ )
+ assert doc(m.double_mat_rm) == (
+ """
+ double_mat_rm(arg0: numpy.ndarray[numpy.float32[m, n]])"""
+ """ -> numpy.ndarray[numpy.float32[m, n]]
"""
+ )
def test_named_arguments():
a = np.array([[1.0, 2], [3, 4], [5, 6]])
b = np.ones((2, 1))
- assert np.all(m.matrix_multiply(a, b) == np.array([[3.], [7], [11]]))
- assert np.all(m.matrix_multiply(A=a, B=b) == np.array([[3.], [7], [11]]))
- assert np.all(m.matrix_multiply(B=b, A=a) == np.array([[3.], [7], [11]]))
+ assert np.all(m.matrix_multiply(a, b) == np.array([[3.0], [7], [11]]))
+ assert np.all(m.matrix_multiply(A=a, B=b) == np.array([[3.0], [7], [11]]))
+ assert np.all(m.matrix_multiply(B=b, A=a) == np.array([[3.0], [7], [11]]))
with pytest.raises(ValueError) as excinfo:
m.matrix_multiply(b, a)
- assert str(excinfo.value) == 'Nonconformable matrices!'
+ assert str(excinfo.value) == "Nonconformable matrices!"
with pytest.raises(ValueError) as excinfo:
m.matrix_multiply(A=b, B=a)
- assert str(excinfo.value) == 'Nonconformable matrices!'
+ assert str(excinfo.value) == "Nonconformable matrices!"
with pytest.raises(ValueError) as excinfo:
m.matrix_multiply(B=a, A=b)
- assert str(excinfo.value) == 'Nonconformable matrices!'
+ assert str(excinfo.value) == "Nonconformable matrices!"
-@pytest.requires_eigen_and_scipy
def test_sparse():
+ pytest.importorskip("scipy")
assert_sparse_equal_ref(m.sparse_r())
assert_sparse_equal_ref(m.sparse_c())
assert_sparse_equal_ref(m.sparse_copy_r(m.sparse_r()))
@@ -651,23 +717,33 @@ def test_sparse():
assert_sparse_equal_ref(m.sparse_copy_c(m.sparse_r()))
-@pytest.requires_eigen_and_scipy
def test_sparse_signature(doc):
- assert doc(m.sparse_copy_r) == """
- sparse_copy_r(arg0: scipy.sparse.csr_matrix[float32]) -> scipy.sparse.csr_matrix[float32]
+ pytest.importorskip("scipy")
+ assert (
+ doc(m.sparse_copy_r)
+ == """
+ sparse_copy_r(arg0: scipy.sparse.csr_matrix[numpy.float32]) -> scipy.sparse.csr_matrix[numpy.float32]
""" # noqa: E501 line too long
- assert doc(m.sparse_copy_c) == """
- sparse_copy_c(arg0: scipy.sparse.csc_matrix[float32]) -> scipy.sparse.csc_matrix[float32]
+ )
+ assert (
+ doc(m.sparse_copy_c)
+ == """
+ sparse_copy_c(arg0: scipy.sparse.csc_matrix[numpy.float32]) -> scipy.sparse.csc_matrix[numpy.float32]
""" # noqa: E501 line too long
+ )
def test_issue738():
"""Ignore strides on a length-1 dimension (even if they would be incompatible length > 1)"""
- assert np.all(m.iss738_f1(np.array([[1., 2, 3]])) == np.array([[1., 102, 203]]))
- assert np.all(m.iss738_f1(np.array([[1.], [2], [3]])) == np.array([[1.], [12], [23]]))
-
- assert np.all(m.iss738_f2(np.array([[1., 2, 3]])) == np.array([[1., 102, 203]]))
- assert np.all(m.iss738_f2(np.array([[1.], [2], [3]])) == np.array([[1.], [12], [23]]))
+ assert np.all(m.iss738_f1(np.array([[1.0, 2, 3]])) == np.array([[1.0, 102, 203]]))
+ assert np.all(
+ m.iss738_f1(np.array([[1.0], [2], [3]])) == np.array([[1.0], [12], [23]])
+ )
+
+ assert np.all(m.iss738_f2(np.array([[1.0, 2, 3]])) == np.array([[1.0, 102, 203]]))
+ assert np.all(
+ m.iss738_f2(np.array([[1.0], [2], [3]])) == np.array([[1.0], [12], [23]])
+ )
def test_issue1105():