From 36fdab2f1ec01e3c98ba83ce4bdb39c4a7e8e267 Mon Sep 17 00:00:00 2001 From: Justin Carpentier <justin.carpentier@inria.fr> Date: Sun, 11 Feb 2024 08:54:45 +0100 Subject: [PATCH] test/decompositions: add test for sparse Cholmod Cholesky --- unittest/CMakeLists.txt | 15 ++++++++++++ .../cholmod/test_CholdmodSimplicialLDLT.py | 23 +++++++++++++++++++ .../cholmod/test_CholdmodSimplicialLLT.py | 23 +++++++++++++++++++ .../cholmod/test_CholdmodSupernodalLLT.py | 23 +++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 unittest/python/decompositions/sparse/cholmod/test_CholdmodSimplicialLDLT.py create mode 100644 unittest/python/decompositions/sparse/cholmod/test_CholdmodSimplicialLLT.py create mode 100644 unittest/python/decompositions/sparse/cholmod/test_CholdmodSupernodalLLT.py diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index ccaa6837..f214e592 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -156,5 +156,20 @@ if(BUILD_TESTING_SCIPY) if(BUILD_WITH_CHOLMOD_SUPPORT) + add_python_unit_test( + "py-CholmodSimplicialLLT" + "unittest/python/decompositions/sparse/cholmod/test_CholmodSimplicialLLT.py" + "python") + + add_python_unit_test( + "py-CholmodSimplicialLDLT" + "unittest/python/decompositions/sparse/cholmod/test_CholmodSimplicialLDLT.py" + "python") + + add_python_unit_test( + "py-CholmodSupernodalLLT" + "unittest/python/decompositions/sparse/cholmod/test_CholmodSupernodalLLT.py" + "python") + endif(BUILD_WITH_CHOLMOD_SUPPORT) endif() diff --git a/unittest/python/decompositions/sparse/cholmod/test_CholdmodSimplicialLDLT.py b/unittest/python/decompositions/sparse/cholmod/test_CholdmodSimplicialLDLT.py new file mode 100644 index 00000000..328518a5 --- /dev/null +++ b/unittest/python/decompositions/sparse/cholmod/test_CholdmodSimplicialLDLT.py @@ -0,0 +1,23 @@ +import eigenpy + +import numpy as np +from scipy.sparse import csc_matrix + +dim = 100 +A = np.random.rand(dim, dim) +A = (A + A.T) * 0.5 + np.diag(10.0 + np.random.rand(dim)) + +A = csc_matrix(A) + +llt = eigenpy.CholmodSimplicialLDLT(A) + +assert llt.info() == eigenpy.ComputationInfo.Success + +X = np.random.rand(dim, 20) +B = A.dot(X) +X_est = llt.solve(B) +assert eigenpy.is_approx(X, X_est) +assert eigenpy.is_approx(A.dot(X_est), B) + +llt.analyzePattern(A) +llt.factorize(A) diff --git a/unittest/python/decompositions/sparse/cholmod/test_CholdmodSimplicialLLT.py b/unittest/python/decompositions/sparse/cholmod/test_CholdmodSimplicialLLT.py new file mode 100644 index 00000000..f2993770 --- /dev/null +++ b/unittest/python/decompositions/sparse/cholmod/test_CholdmodSimplicialLLT.py @@ -0,0 +1,23 @@ +import eigenpy + +import numpy as np +from scipy.sparse import csc_matrix + +dim = 100 +A = np.random.rand(dim, dim) +A = (A + A.T) * 0.5 + np.diag(10.0 + np.random.rand(dim)) + +A = csc_matrix(A) + +llt = eigenpy.CholmodSimplicialLLT(A) + +assert llt.info() == eigenpy.ComputationInfo.Success + +X = np.random.rand(dim, 20) +B = A.dot(X) +X_est = llt.solve(B) +assert eigenpy.is_approx(X, X_est) +assert eigenpy.is_approx(A.dot(X_est), B) + +llt.analyzePattern(A) +llt.factorize(A) diff --git a/unittest/python/decompositions/sparse/cholmod/test_CholdmodSupernodalLLT.py b/unittest/python/decompositions/sparse/cholmod/test_CholdmodSupernodalLLT.py new file mode 100644 index 00000000..1fd9a720 --- /dev/null +++ b/unittest/python/decompositions/sparse/cholmod/test_CholdmodSupernodalLLT.py @@ -0,0 +1,23 @@ +import eigenpy + +import numpy as np +from scipy.sparse import csc_matrix + +dim = 100 +A = np.random.rand(dim, dim) +A = (A + A.T) * 0.5 + np.diag(10.0 + np.random.rand(dim)) + +A = csc_matrix(A) + +llt = eigenpy.CholmodSupernodalLLT(A) + +assert llt.info() == eigenpy.ComputationInfo.Success + +X = np.random.rand(dim, 20) +B = A.dot(X) +X_est = llt.solve(B) +assert eigenpy.is_approx(X, X_est) +assert eigenpy.is_approx(A.dot(X_est), B) + +llt.analyzePattern(A) +llt.factorize(A) -- GitLab