Skip to content

Commit 1e83941

Browse files
committed
is_approx: Remove the remaining np.allclose in tests and use nanoeigepy.is_approx instead
1 parent f958a9e commit 1e83941

File tree

4 files changed

+28
-16
lines changed

4 files changed

+28
-16
lines changed

include/nanoeigenpy/decompositions/generalized-self-adjoint-eigen-solver.hpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ template <typename _MatrixType>
1313
void exposeGeneralizedSelfAdjointEigenSolver(nb::module_ m, const char *name) {
1414
using MatrixType = _MatrixType;
1515
using Solver = Eigen::GeneralizedSelfAdjointEigenSolver<MatrixType>;
16+
using Scalar = typename MatrixType::Scalar;
17+
using VectorType = Eigen::Matrix<Scalar, Eigen::Dynamic, 1>;
1618

1719
if (check_registration_alias<Solver>(m)) {
1820
return;
@@ -43,12 +45,16 @@ void exposeGeneralizedSelfAdjointEigenSolver(nb::module_ m, const char *name) {
4345
"Computes the generalized eigendecomposition of given matrix.",
4446
nb::rv_policy::reference)
4547

46-
.def("eigenvalues", &Solver::eigenvalues,
47-
"Returns the eigenvalues of given matrix.",
48-
nb::rv_policy::reference_internal)
49-
.def("eigenvectors", &Solver::eigenvectors,
50-
"Returns the eigenvectors of given matrix.",
51-
nb::rv_policy::reference_internal)
48+
.def(
49+
"eigenvalues",
50+
[](Solver &c) -> const VectorType & { return c.eigenvalues(); },
51+
"Returns the eigenvalues of given matrix.",
52+
nb::rv_policy::reference_internal)
53+
.def(
54+
"eigenvectors",
55+
[](Solver &c) -> const MatrixType & { return c.eigenvectors(); },
56+
"Returns the eigenvectors of given matrix.",
57+
nb::rv_policy::reference_internal)
5258

5359
.def(
5460
"computeDirect",

include/nanoeigenpy/decompositions/self-adjoint-eigen-solver.hpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ template <typename _MatrixType>
1313
void exposeSelfAdjointEigenSolver(nb::module_ m, const char *name) {
1414
using MatrixType = _MatrixType;
1515
using Solver = Eigen::SelfAdjointEigenSolver<MatrixType>;
16+
using Scalar = typename MatrixType::Scalar;
17+
using VectorType = Eigen::Matrix<Scalar, Eigen::Dynamic, 1>;
1618

1719
if (check_registration_alias<Solver>(m)) {
1820
return;
@@ -26,12 +28,16 @@ void exposeSelfAdjointEigenSolver(nb::module_ m, const char *name) {
2628
"matrix"_a, "options"_a = Eigen::ComputeEigenvectors,
2729
"Computes eigendecomposition of given matrix")
2830

29-
.def("eigenvalues", &Solver::eigenvalues,
30-
"Returns the eigenvalues of given matrix.",
31-
nb::rv_policy::reference_internal)
32-
.def("eigenvectors", &Solver::eigenvectors,
33-
"Returns the eigenvectors of given matrix.",
34-
nb::rv_policy::reference_internal)
31+
.def(
32+
"eigenvalues",
33+
[](Solver &c) -> const VectorType & { return c.eigenvalues(); },
34+
"Returns the eigenvalues of given matrix.",
35+
nb::rv_policy::reference_internal)
36+
.def(
37+
"eigenvectors",
38+
[](Solver &c) -> const MatrixType & { return c.eigenvectors(); },
39+
"Returns the eigenvectors of given matrix.",
40+
nb::rv_policy::reference_internal)
3541

3642
.def(
3743
"compute",

tests/test_generalized_self_adjoint_eigen_solver.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
@pytest.mark.parametrize("options", _options)
2222
def test_generalized_selfadjoint_eigensolver(options):
23-
dim = 100
23+
dim = 5
2424
rng = np.random.default_rng()
2525
A = rng.random((dim, dim))
2626
A = (A + A.T) * 0.5
@@ -61,7 +61,7 @@ def test_generalized_selfadjoint_eigensolver(options):
6161
lam = D[i]
6262
ABv = AB @ v
6363
lam_v = lam * v
64-
assert np.allclose(ABv, lam_v)
64+
assert nanoeigenpy.is_approx(ABv, lam_v, 1e-10)
6565

6666
elif options & nanoeigenpy.DecompositionOptions.BAx_lx.value:
6767
BA = B @ A
@@ -70,7 +70,7 @@ def test_generalized_selfadjoint_eigensolver(options):
7070
lam = D[i]
7171
BAv = BA @ v
7272
lam_v = lam * v
73-
assert np.allclose(BAv, lam_v)
73+
assert nanoeigenpy.is_approx(BAv, lam_v, 1e-10)
7474

7575
_gsaes_compute = gsaes.compute(A, B)
7676
_gsaes_compute_options = gsaes.compute(A, B, options)

tests/test_geometry.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
def isapprox(a, b, epsilon=1e-6):
1111
if issubclass(a.__class__, np.ndarray) and issubclass(b.__class__, np.ndarray):
12-
return np.allclose(a, b, epsilon)
12+
return nanoeigenpy.is_approx(a, b, epsilon)
1313
else:
1414
return abs(a - b) < epsilon
1515

0 commit comments

Comments
 (0)