diff --git a/ezyrb/parallel/pod.py b/ezyrb/parallel/pod.py index 680aff8..60548fe 100644 --- a/ezyrb/parallel/pod.py +++ b/ezyrb/parallel/pod.py @@ -11,8 +11,17 @@ from numpy.linalg import eigh import numpy as np -from pycompss.api.task import task -from pycompss.api.parameter import INOUT, IN +try: + from pycompss.api.task import task + from pycompss.api.parameter import INOUT, IN +except ImportError: + # Fallback: Define a 'do-nothing' decorator and dummy constants + def task(*args, **kwargs): + return lambda f: f + + INOUT = None + IN = None + from .reduction import Reduction diff --git a/ezyrb/parallel/reducedordermodel.py b/ezyrb/parallel/reducedordermodel.py index fe3bb4b..306c69a 100644 --- a/ezyrb/parallel/reducedordermodel.py +++ b/ezyrb/parallel/reducedordermodel.py @@ -4,7 +4,7 @@ import copy import pickle import numpy as np -from scipy.spatial.qhull import Delaunay +from scipy.spatial import Delaunay from sklearn.model_selection import KFold from pycompss.api.api import compss_wait_on @@ -60,30 +60,32 @@ def fit(self, *args, **kwargs): :param \*args: additional parameters to pass to the `fit` method. :param \**kwargs: additional parameters to pass to the `fit` method. """ - self.reduction.fit(self.database.snapshots.T) - reduced_output = self.reduction.transform( - self.database.snapshots.T, self.scaler_red - ) + self.reduction.fit(self.database.snapshots_matrix.T) + reduced_output = self.reduction.transform(self.database.snapshots_matrix.T).T self.approximation.fit( - self.database.parameters, reduced_output, *args, **kwargs + self.database.parameters_matrix, reduced_output, *args, **kwargs ) return self def predict(self, mu): - """ - Calculate predicted solution for given mu + r""" + Predict the solution for given parameters mu. + + This method distributes the evaluation tasks across the + available computational nodes using the PyCOMPSs framework. + + :param numpy.ndarray mu: The parameters $\mu \in \mathbb{R}^d$ to evaluate. + :return: The predicted snapshot $u(\mu)$. """ mu = np.atleast_2d(mu) - if hasattr(self, "database") and self.database.scaler_parameters: - mu = self.database.scaler_parameters.transform(mu) - - predicted_red_sol = self.approximation.predict(mu, self.scaler_red) + + predicted_red_sol = self.approximation.predict(mu) predicted_sol = self.reduction.inverse_transform( - predicted_red_sol, self.database - ) + predicted_red_sol.T + ).T return predicted_sol @@ -166,8 +168,8 @@ def kfold_cv_error(self, n_splits, *args, norm=np.linalg.norm, **kwargs): ).fit(*args, **kwargs) test = self.database[test_index] - predicted_test.append(rom.predict(test.parameters)) - original_test.append(test.snapshots) + predicted_test.append(rom.predict(test.parameters_matrix)) + original_test.append(test.snapshots_matrix) predicted_test = compss_wait_on(predicted_test) for j in range(len(predicted_test)): @@ -216,8 +218,8 @@ def loo_error(self, *args, norm=np.linalg.norm, **kwargs): copy.deepcopy(self.approximation), ).fit(*args, **kwargs) - predicted_test.append(rom.predict(test_db.parameters)) - original_test.append(test_db.snapshots) + predicted_test.append(rom.predict(test_db.parameters_matrix)) + original_test.append(test_db.snapshots_matrix) predicted_test = compss_wait_on(predicted_test) for j in range(len(predicted_test)): @@ -246,7 +248,7 @@ def optimal_mu(self, error=None, k=1): if error is None: error = self.loo_error() - mu = self.database.parameters + mu = self.database.parameters_matrix tria = Delaunay(mu) error_on_simplex = np.array( diff --git a/tests/test_parallel/__init__.py b/tests/test_parallel/__init__.py new file mode 100644 index 0000000..60b27b0 --- /dev/null +++ b/tests/test_parallel/__init__.py @@ -0,0 +1,2 @@ +import matplotlib +matplotlib.use('Agg') diff --git a/tests/test_parallel/test_ae.py b/tests/test_parallel/test_ae.py new file mode 100644 index 0000000..f7ef079 --- /dev/null +++ b/tests/test_parallel/test_ae.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_ae as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_ae'] = serial_module + + +from tests.test_ae import * diff --git a/tests/test_parallel/test_ann.py b/tests/test_parallel/test_ann.py new file mode 100644 index 0000000..4db3afd --- /dev/null +++ b/tests/test_parallel/test_ann.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_ann as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_ann'] = serial_module + + +from tests.test_ann import * diff --git a/tests/test_parallel/test_approximation.py b/tests/test_parallel/test_approximation.py new file mode 100644 index 0000000..ec810a6 --- /dev/null +++ b/tests/test_parallel/test_approximation.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_approximation as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_approximation'] = serial_module + + +from tests.test_approximation import * diff --git a/tests/test_parallel/test_database.py b/tests/test_parallel/test_database.py new file mode 100644 index 0000000..04b3c1b --- /dev/null +++ b/tests/test_parallel/test_database.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_database as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_database'] = serial_module + + +from tests.test_database import * diff --git a/tests/test_parallel/test_gpr.py b/tests/test_parallel/test_gpr.py new file mode 100644 index 0000000..87e5eb9 --- /dev/null +++ b/tests/test_parallel/test_gpr.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_gpr as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_gpr'] = serial_module + + +from tests.test_gpr import * diff --git a/tests/test_parallel/test_k_neighbors_regressor.py b/tests/test_parallel/test_k_neighbors_regressor.py new file mode 100644 index 0000000..2d4db13 --- /dev/null +++ b/tests/test_parallel/test_k_neighbors_regressor.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_k_neighbors_regressor as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_k_neighbors_regressor'] = serial_module + + +from tests.test_k_neighbors_regressor import * diff --git a/tests/test_parallel/test_linear.py b/tests/test_parallel/test_linear.py new file mode 100644 index 0000000..4c64821 --- /dev/null +++ b/tests/test_parallel/test_linear.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_linear as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_linear'] = serial_module + + +from tests.test_linear import * diff --git a/tests/test_parallel/test_nnshift.py b/tests/test_parallel/test_nnshift.py new file mode 100644 index 0000000..cc67a1b --- /dev/null +++ b/tests/test_parallel/test_nnshift.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_nnshift as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_nnshift'] = serial_module + + +from tests.test_nnshift import * diff --git a/tests/test_parallel/test_parameter.py b/tests/test_parallel/test_parameter.py new file mode 100644 index 0000000..daf46be --- /dev/null +++ b/tests/test_parallel/test_parameter.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_parameter as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_parameter'] = serial_module + + +from tests.test_parameter import * diff --git a/tests/test_parallel/test_pod.py b/tests/test_parallel/test_pod.py new file mode 100644 index 0000000..638394b --- /dev/null +++ b/tests/test_parallel/test_pod.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_pod as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_pod'] = serial_module + + +from tests.test_pod import * diff --git a/tests/test_parallel/test_podae.py b/tests/test_parallel/test_podae.py new file mode 100644 index 0000000..6ca330b --- /dev/null +++ b/tests/test_parallel/test_podae.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_podae as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_podae'] = serial_module + + +from tests.test_podae import * diff --git a/tests/test_parallel/test_radius_neighbors_regressor.py b/tests/test_parallel/test_radius_neighbors_regressor.py new file mode 100644 index 0000000..37e7295 --- /dev/null +++ b/tests/test_parallel/test_radius_neighbors_regressor.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_radius_neighbors_regressor as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_radius_neighbors_regressor'] = serial_module + + +from tests.test_radius_neighbors_regressor import * diff --git a/tests/test_parallel/test_reducedordermodel.py b/tests/test_parallel/test_reducedordermodel.py new file mode 100644 index 0000000..1bfb71f --- /dev/null +++ b/tests/test_parallel/test_reducedordermodel.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_reducedordermodel as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_reducedordermodel'] = serial_module + + +from tests.test_reducedordermodel import * diff --git a/tests/test_parallel/test_regular_grid.py b/tests/test_parallel/test_regular_grid.py new file mode 100644 index 0000000..efee3ff --- /dev/null +++ b/tests/test_parallel/test_regular_grid.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_regular_grid as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_regular_grid'] = serial_module + + +from tests.test_regular_grid import * diff --git a/tests/test_parallel/test_scaler.py b/tests/test_parallel/test_scaler.py new file mode 100644 index 0000000..e2c143e --- /dev/null +++ b/tests/test_parallel/test_scaler.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_scaler as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_scaler'] = serial_module + + +from tests.test_scaler import * diff --git a/tests/test_parallel/test_shift.py b/tests/test_parallel/test_shift.py new file mode 100644 index 0000000..39934e3 --- /dev/null +++ b/tests/test_parallel/test_shift.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_shift as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_shift'] = serial_module + + +from tests.test_shift import * diff --git a/tests/test_parallel/test_sklearn_wrappers.py b/tests/test_parallel/test_sklearn_wrappers.py new file mode 100644 index 0000000..756f2ab --- /dev/null +++ b/tests/test_parallel/test_sklearn_wrappers.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_sklearn_wrappers as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_sklearn_wrappers'] = serial_module + + +from tests.test_sklearn_wrappers import * diff --git a/tests/test_parallel/test_snapshot.py b/tests/test_parallel/test_snapshot.py new file mode 100644 index 0000000..4fc60d8 --- /dev/null +++ b/tests/test_parallel/test_snapshot.py @@ -0,0 +1,22 @@ +import unittest +import pytest +import sys + +try: + from ezyrb.parallel import ReducedOrderModel as ParallelROM + import tests.test_snapshot as serial_module + HAS_PARALLEL = True +except ImportError: + HAS_PARALLEL = False + +if not HAS_PARALLEL: + raise unittest.SkipTest("Parallel dependencies (pycompss/pyeddl) missing") + +serial_module.ROM = ParallelROM +if hasattr(serial_module, 'ReducedOrderModel'): + serial_module.ReducedOrderModel = ParallelROM + +sys.modules['tests.test_snapshot'] = serial_module + + +from tests.test_snapshot import *