Skip to content
13 changes: 11 additions & 2 deletions ezyrb/parallel/pod.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down
40 changes: 21 additions & 19 deletions ezyrb/parallel/reducedordermodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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)):
Expand Down Expand Up @@ -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)):
Expand Down Expand Up @@ -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(
Expand Down
2 changes: 2 additions & 0 deletions tests/test_parallel/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import matplotlib
matplotlib.use('Agg')
22 changes: 22 additions & 0 deletions tests/test_parallel/test_ae.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_ann.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_approximation.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_database.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_gpr.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_k_neighbors_regressor.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_linear.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_nnshift.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_parameter.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_pod.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_podae.py
Original file line number Diff line number Diff line change
@@ -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 *
22 changes: 22 additions & 0 deletions tests/test_parallel/test_radius_neighbors_regressor.py
Original file line number Diff line number Diff line change
@@ -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 *
Loading
Loading