* Adding Collector for handling data sampling/collection before dataset/dataloader

* Modify domain by adding sample_mode, variables as property
* Small change concatenate -> cat in lno/avno
* Create different factory classes for conditions
This commit is contained in:
Dario Coscia
2024-10-04 13:57:18 +02:00
committed by Nicola Demo
parent aef5a5d590
commit 1bd3f40f54
18 changed files with 225 additions and 277 deletions

View File

@@ -21,7 +21,6 @@ class CartesianDomain(DomainInterface):
"""
self.fixed_ = {}
self.range_ = {}
self.sample_modes = ["random", "grid", "lh", "chebyshev", "latin"]
for k, v in cartesian_dict.items():
if isinstance(v, (int, float)):
@@ -31,6 +30,10 @@ class CartesianDomain(DomainInterface):
else:
raise TypeError
@property
def sample_modes(self):
return ["random", "grid", "lh", "chebyshev", "latin"]
@property
def variables(self):
"""Spatial variables.

View File

@@ -9,7 +9,7 @@ class DomainInterface(metaclass=ABCMeta):
Any geometry entity should inherit from this class.
"""
__available_sampling_modes = ["random", "grid", "lh", "chebyshev", "latin"]
available_sampling_modes = ["random", "grid", "lh", "chebyshev", "latin"]
@property
@abstractmethod
@@ -19,6 +19,14 @@ class DomainInterface(metaclass=ABCMeta):
"""
pass
@property
@abstractmethod
def variables(self):
"""
Abstract method returing Domain variables.
"""
pass
@sample_modes.setter
def sample_modes(self, values):
"""
@@ -27,10 +35,10 @@ class DomainInterface(metaclass=ABCMeta):
if not isinstance(values, (list, tuple)):
values = [values]
for value in values:
if value not in DomainInterface.__available_sampling_modes:
if value not in DomainInterface.available_sampling_modes:
raise TypeError(f"mode {value} not valid. Expected at least "
"one in "
f"{DomainInterface.__available_sampling_modes}."
f"{DomainInterface.available_sampling_modes}."
)
@abstractmethod

View File

@@ -39,7 +39,6 @@ class EllipsoidDomain(DomainInterface):
self.range_ = {}
self._centers = None
self._axis = None
self.sample_modes = "random"
# checking consistency
check_consistency(sample_surface, bool)
@@ -72,6 +71,10 @@ class EllipsoidDomain(DomainInterface):
self._centers = dict(zip(self.range_.keys(), centers.tolist()))
self._axis = dict(zip(self.range_.keys(), ellipsoid_axis.tolist()))
@property
def sample_modes(self):
return ["random"]
@property
def variables(self):
"""Spatial variables.

View File

@@ -24,8 +24,9 @@ class OperationInterface(DomainInterface, metaclass=ABCMeta):
# assign geometries
self._geometries = geometries
# sampling mode, for now random is the only available
self.sample_modes = "random"
@property
def sample_modes(self):
return ["random"]
@property
def geometries(self):

View File

@@ -74,9 +74,10 @@ class SimplexDomain(DomainInterface):
# build cartesian_bound
self._cartesian_bound = self._build_cartesian(self._vertices_matrix)
# sampling mode
self.sample_modes = "random"
@property
def sample_modes(self):
return ["random"]
@property
def variables(self):
return sorted(self._vertices_matrix.labels)

View File

@@ -32,9 +32,16 @@ class Union(OperationInterface):
"""
super().__init__(geometries)
@property
def sample_modes(self):
self.sample_modes = list(
set([geom.sample_modes for geom in geometries])
set([geom.sample_modes for geom in self.geometries])
)
@property
def variables(self):
return list(set([geom.variables for geom in self.geometries]))
def is_inside(self, point, check_border=False):
"""