From e6b49d6ca34a1de8df202ede89a33087b530df3e Mon Sep 17 00:00:00 2001 From: Matteo Ravasi Date: Sun, 16 Jun 2024 21:41:12 +0300 Subject: [PATCH 1/8] minor: added .pyc to gitignore (#104) * minor: added .pyc to gitignore * Update numpy in txt --------- Co-authored-by: rohanbabbar04 --- .gitignore | 1 + requirements-dev.txt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2dec1f9a..21fb8e94 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ build/ pylops_mpi.egg-info/ .eggs/ dist/ +*.pyc # Documentation docs/source/gallery diff --git a/requirements-dev.txt b/requirements-dev.txt index e1836196..8581d346 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,4 +1,4 @@ -numpy>=1.21.0 +numpy>=1.21.0, <2.0.0 scipy>=1.8.0 pylops>=2.0 mpi4py From 27f510d392c1e27f84557e5ab9f43066edf1cebd Mon Sep 17 00:00:00 2001 From: mrava87 Date: Sun, 16 Jun 2024 23:27:44 +0300 Subject: [PATCH 2/8] minor: revert test_solver --- tests/test_solver.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/tests/test_solver.py b/tests/test_solver.py index e90f53fc..716d2ac7 100644 --- a/tests/test_solver.py +++ b/tests/test_solver.py @@ -90,7 +90,6 @@ ) def test_cg(par): """CG with MPIBlockDiag""" - np.random.seed(42) A = np.ones((par["ny"], par["nx"])) + par[ "imag"] * np.ones((par["ny"], par["nx"])) Aop = MatrixMult(np.conj(A.T) @ A, dtype=par['dtype']) @@ -127,7 +126,7 @@ def test_cg(par): x0 = None y1 = BDiag * x_global xinv1 = pylops.cg(BDiag, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-12) + assert_allclose(xinv_array, xinv1, rtol=1e-14) @pytest.mark.mpi(min_size=2) @@ -136,7 +135,6 @@ def test_cg(par): ) def test_cgls(par): """CGLS with MPIBlockDiag""" - np.random.seed(42) A = np.ones((par["ny"], par["nx"])) + par[ "imag"] * np.ones((par["ny"], par["nx"])) Aop = MatrixMult(np.conj(A.T) @ A + 1e-5 * np.eye(par["nx"], dtype=par['dtype']), @@ -175,7 +173,7 @@ def test_cgls(par): x0 = None y1 = BDiag * x_global xinv1 = pylops.cgls(BDiag, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-12) + assert_allclose(xinv_array, xinv1, rtol=1e-14) @pytest.mark.mpi(min_size=2) @@ -184,7 +182,6 @@ def test_cgls(par): ) def test_cgls_broadcastdata(par): """CGLS with broadcasted data vector""" - np.random.seed(42) A = (rank + 1) * np.ones((par["ny"], par["nx"])) + (rank + 2) * par[ "imag" ] * np.ones((par["ny"], par["nx"])) @@ -222,7 +219,7 @@ def test_cgls_broadcastdata(par): x0 = None y1 = Hstack @ x_global xinv1 = pylops.cgls(Hstack, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-12) + assert_allclose(xinv_array, xinv1, rtol=1e-14) @pytest.mark.mpi(min_size=2) @@ -231,7 +228,6 @@ def test_cgls_broadcastdata(par): ) def test_cgls_broadcastmodel(par): """CGLS with broadcasted model vector""" - np.random.seed(42) A = np.ones((par["ny"], par["nx"])) + par[ "imag"] * np.ones((par["ny"], par["nx"])) Aop = MatrixMult(np.conj(A.T) @ A + 1e-5 * np.eye(par["nx"], dtype=par['dtype']), @@ -272,7 +268,7 @@ def test_cgls_broadcastmodel(par): x0 = None y1 = Vstack @ x_global xinv1 = pylops.cgls(Vstack, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-12) + assert_allclose(xinv_array, xinv1, rtol=1e-14) @pytest.mark.mpi(min_size=2) @@ -281,7 +277,6 @@ def test_cgls_broadcastmodel(par): ) def test_cg_stacked(par): """CG with MPIStackedBlockDiag""" - np.random.seed(42) A = np.ones((par["ny"], par["nx"])) + par[ "imag"] * np.ones((par["ny"], par["nx"])) Aop = MatrixMult(np.conj(A.T) @ A + 1e-5 * np.eye(par["nx"], dtype=par['dtype']), @@ -336,7 +331,7 @@ def test_cg_stacked(par): x0 = None y1 = StackedBDiag * x_global xinv1 = pylops.cg(StackedBDiag, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-12) + assert_allclose(xinv_array, xinv1, rtol=1e-14) @pytest.mark.mpi(min_size=2) @@ -345,7 +340,6 @@ def test_cg_stacked(par): ) def test_cgls_stacked(par): """CGLS with MPIStackedBlockDiag""" - np.random.seed(42) A = np.ones((par["ny"], par["nx"])) + par[ "imag"] * np.ones((par["ny"], par["nx"])) Aop = MatrixMult(np.conj(A.T) @ A + 1e-5 * np.eye(par["nx"], dtype=par['dtype']), @@ -402,4 +396,4 @@ def test_cgls_stacked(par): x0 = None y1 = StackedBDiag * x_global xinv1 = pylops.cgls(StackedBDiag, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-12) + assert_allclose(xinv_array, xinv1, rtol=1e-14) From e81002459850d40e5b7bd0066748a09275ff7d4f Mon Sep 17 00:00:00 2001 From: mrava87 Date: Sun, 16 Jun 2024 23:33:17 +0300 Subject: [PATCH 3/8] minor: more revert of test_solver --- tests/test_solver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_solver.py b/tests/test_solver.py index 716d2ac7..e50a076c 100644 --- a/tests/test_solver.py +++ b/tests/test_solver.py @@ -268,7 +268,7 @@ def test_cgls_broadcastmodel(par): x0 = None y1 = Vstack @ x_global xinv1 = pylops.cgls(Vstack, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-14) + assert_allclose(xinv_array, xinv1, rtol=1e-13) @pytest.mark.mpi(min_size=2) From 4fee9492e08e0fea795bd1d457bed6e3cf00caf1 Mon Sep 17 00:00:00 2001 From: mrava87 Date: Tue, 18 Jun 2024 17:53:38 +0300 Subject: [PATCH 4/8] dtest: relax tol in test_solver --- tests/test_solver.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_solver.py b/tests/test_solver.py index e50a076c..b7140d4e 100644 --- a/tests/test_solver.py +++ b/tests/test_solver.py @@ -126,7 +126,7 @@ def test_cg(par): x0 = None y1 = BDiag * x_global xinv1 = pylops.cg(BDiag, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-14) + assert_allclose(xinv_array, xinv1, rtol=1e-12) @pytest.mark.mpi(min_size=2) @@ -173,7 +173,7 @@ def test_cgls(par): x0 = None y1 = BDiag * x_global xinv1 = pylops.cgls(BDiag, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-14) + assert_allclose(xinv_array, xinv1, rtol=1e-12) @pytest.mark.mpi(min_size=2) @@ -219,7 +219,7 @@ def test_cgls_broadcastdata(par): x0 = None y1 = Hstack @ x_global xinv1 = pylops.cgls(Hstack, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-14) + assert_allclose(xinv_array, xinv1, rtol=1e-12) @pytest.mark.mpi(min_size=2) @@ -331,7 +331,7 @@ def test_cg_stacked(par): x0 = None y1 = StackedBDiag * x_global xinv1 = pylops.cg(StackedBDiag, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-14) + assert_allclose(xinv_array, xinv1, rtol=1e-12) @pytest.mark.mpi(min_size=2) @@ -396,4 +396,4 @@ def test_cgls_stacked(par): x0 = None y1 = StackedBDiag * x_global xinv1 = pylops.cgls(StackedBDiag, y1, x0=x0, niter=par["nx"], tol=1e-5, show=True)[0] - assert_allclose(xinv_array, xinv1, rtol=1e-14) + assert_allclose(xinv_array, xinv1, rtol=1e-12) From 31efeb2d179a757d49e0ed362b86716be5cc848c Mon Sep 17 00:00:00 2001 From: rohanbabbar04 Date: Sat, 29 Jun 2024 10:55:08 +0530 Subject: [PATCH 5/8] Minor: Remove extra saveGt --- tests/test_fredholm.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_fredholm.py b/tests/test_fredholm.py index d203f46f..812c74e4 100644 --- a/tests/test_fredholm.py +++ b/tests/test_fredholm.py @@ -52,7 +52,6 @@ "nz": 5, "saveGt": False, "usematmul": False, - "saveGt": False, "imag": 1j, "dtype": "complex64", } # complex, unsaved Gt From 34b9bca0ce387fe89920050f713468c08ff9ee06 Mon Sep 17 00:00:00 2001 From: rohanbabbar04 Date: Mon, 26 Aug 2024 00:17:51 +0530 Subject: [PATCH 6/8] Test for numpy>=2.0.0 --- environment-dev.yml | 4 ++-- requirements-dev.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/environment-dev.yml b/environment-dev.yml index 86484de7..e91562e8 100644 --- a/environment-dev.yml +++ b/environment-dev.yml @@ -5,10 +5,10 @@ channels: dependencies: - python >= 3.8.0 - pip - - numpy>=1.21.0 + - numpy - scipy>=1.8.0 - mpi4py - - pylops >= 2.0 + - pylops - matplotlib - ipython - pytest diff --git a/requirements-dev.txt b/requirements-dev.txt index 8581d346..a5448eb5 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,6 +1,6 @@ -numpy>=1.21.0, <2.0.0 +numpy scipy>=1.8.0 -pylops>=2.0 +pylops mpi4py matplotlib pytest From aa71545618fe4c91695a6d1cc7b375af33ca7ad6 Mon Sep 17 00:00:00 2001 From: mrava87 Date: Mon, 30 Sep 2024 14:05:20 +0300 Subject: [PATCH 7/8] bug: fix issue in CGLS when using cupy arrays (needs to be forced to real valued number before applying float) --- pylops_mpi/optimization/cls_basic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pylops_mpi/optimization/cls_basic.py b/pylops_mpi/optimization/cls_basic.py index 9ad9a34e..457b3af8 100644 --- a/pylops_mpi/optimization/cls_basic.py +++ b/pylops_mpi/optimization/cls_basic.py @@ -373,7 +373,7 @@ def step(self, x: Union[DistributedArray, StackedDistributedArray], """ - a = float(self.kold / (self.q.dot(self.q.conj()) + self.damp * self.c.dot(self.c.conj()))) + a = float(np.abs(self.kold / (self.q.dot(self.q.conj()) + self.damp * self.c.dot(self.c.conj())))) x += a * self.c self.s -= a * self.q damped_x = self.damp * x From d9f8dacd9579272b7547e7b13a1c7a9af9954975 Mon Sep 17 00:00:00 2001 From: mrava87 Date: Fri, 4 Oct 2024 14:29:22 +0300 Subject: [PATCH 8/8] Added args_FFT1 to MPIMDC --- pylops_mpi/waveeqprocessing/MDC.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pylops_mpi/waveeqprocessing/MDC.py b/pylops_mpi/waveeqprocessing/MDC.py index 391095f7..1d6524d8 100644 --- a/pylops_mpi/waveeqprocessing/MDC.py +++ b/pylops_mpi/waveeqprocessing/MDC.py @@ -173,5 +173,6 @@ def MPIMDC(G, nt, nv, nfreq, dt=1., dr=1., twosided=True, saveGt=saveGt, conj=conj, prescaled=prescaled, base_comm=base_comm, _Fredholm1=MPIFredholm1, - args_FFT={'engine': fftengine}, + args_FFT={"engine": fftengine}, + args_FFT1={"engine": fftengine}, args_Fredholm1={'usematmul': usematmul})