From 0ea75b62351f1b6d829bffd0835599ad0a47a3f3 Mon Sep 17 00:00:00 2001 From: Brooks Smith Date: Fri, 24 Feb 2023 11:46:33 +1100 Subject: [PATCH 1/2] Remove scipy dependency by replacing eigvals() function --- anastruct/fem/system_components/solver.py | 4 ++-- dev_requirements.txt | 3 +-- requirements.txt | 1 - requirements_docs.txt | 1 - 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/anastruct/fem/system_components/solver.py b/anastruct/fem/system_components/solver.py index 633fea0f..d4822709 100644 --- a/anastruct/fem/system_components/solver.py +++ b/anastruct/fem/system_components/solver.py @@ -2,7 +2,6 @@ import logging from typing import TYPE_CHECKING, Optional import numpy as np -from scipy import linalg # type: ignore from anastruct.basic import converge @@ -109,7 +108,8 @@ def det_linear_buckling(system: "SystemElements") -> float: kg = system.reduced_system_matrix - k0 # solve (k -λkg)x = 0 - eigenvalues = np.abs(linalg.eigvals(k0, kg)) + invkg_k0 = np.linalg.inv(kg) * k0 + eigenvalues = np.abs(np.linalg.eigvals(invkg_k0)) return float(np.min(eigenvalues)) diff --git a/dev_requirements.txt b/dev_requirements.txt index 7b08d321..f993d963 100644 --- a/dev_requirements.txt +++ b/dev_requirements.txt @@ -1,3 +1,2 @@ matplotlib==3.7.0 -numpy==1.24.2 -scipy==1.10.1 \ No newline at end of file +numpy==1.24.2 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 1101330e..949e5884 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1 @@ numpy>=1.15 -scipy>=1.1.0 diff --git a/requirements_docs.txt b/requirements_docs.txt index 5ae95cf5..5253f8c9 100644 --- a/requirements_docs.txt +++ b/requirements_docs.txt @@ -1,3 +1,2 @@ -scipy matplotlib sphinx_autodoc_typehints From 8d5582cd12b64088ba33bca8a5057239f0bc4cef Mon Sep 17 00:00:00 2001 From: Brooks Smith Date: Fri, 24 Feb 2023 11:53:13 +1100 Subject: [PATCH 2/2] Add comment to clarify the change --- anastruct/fem/system_components/solver.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/anastruct/fem/system_components/solver.py b/anastruct/fem/system_components/solver.py index d4822709..50fa3ada 100644 --- a/anastruct/fem/system_components/solver.py +++ b/anastruct/fem/system_components/solver.py @@ -108,6 +108,9 @@ def det_linear_buckling(system: "SystemElements") -> float: kg = system.reduced_system_matrix - k0 # solve (k -λkg)x = 0 + # The following two lines are equivalent to the cleaner + # scipy.linalg.eigvals(k0, kg), but doing this allows us + # to drop the scipy dependency invkg_k0 = np.linalg.inv(kg) * k0 eigenvalues = np.abs(np.linalg.eigvals(invkg_k0)) return float(np.min(eigenvalues))