sampling mode domain added
This commit is contained in:
committed by
Nicola Demo
parent
fd16fcf9b4
commit
aef5a5d590
@@ -21,6 +21,7 @@ class CartesianDomain(DomainInterface):
|
|||||||
"""
|
"""
|
||||||
self.fixed_ = {}
|
self.fixed_ = {}
|
||||||
self.range_ = {}
|
self.range_ = {}
|
||||||
|
self.sample_modes = ["random", "grid", "lh", "chebyshev", "latin"]
|
||||||
|
|
||||||
for k, v in cartesian_dict.items():
|
for k, v in cartesian_dict.items():
|
||||||
if isinstance(v, (int, float)):
|
if isinstance(v, (int, float)):
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ class Difference(OperationInterface):
|
|||||||
5
|
5
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if mode != "random":
|
if mode != self.sample_modes:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
f"{mode} is not a valid mode for sampling."
|
f"{mode} is not a valid mode for sampling."
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -9,6 +9,30 @@ class DomainInterface(metaclass=ABCMeta):
|
|||||||
Any geometry entity should inherit from this class.
|
Any geometry entity should inherit from this class.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
__available_sampling_modes = ["random", "grid", "lh", "chebyshev", "latin"]
|
||||||
|
|
||||||
|
@property
|
||||||
|
@abstractmethod
|
||||||
|
def sample_modes(self):
|
||||||
|
"""
|
||||||
|
Abstract method returing available samples modes for the Domain.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@sample_modes.setter
|
||||||
|
def sample_modes(self, values):
|
||||||
|
"""
|
||||||
|
TODO
|
||||||
|
"""
|
||||||
|
if not isinstance(values, (list, tuple)):
|
||||||
|
values = [values]
|
||||||
|
for value in values:
|
||||||
|
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}."
|
||||||
|
)
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def sample(self):
|
def sample(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class EllipsoidDomain(DomainInterface):
|
|||||||
self.range_ = {}
|
self.range_ = {}
|
||||||
self._centers = None
|
self._centers = None
|
||||||
self._axis = None
|
self._axis = None
|
||||||
|
self.sample_modes = "random"
|
||||||
|
|
||||||
# checking consistency
|
# checking consistency
|
||||||
check_consistency(sample_surface, bool)
|
check_consistency(sample_surface, bool)
|
||||||
@@ -286,7 +287,7 @@ class EllipsoidDomain(DomainInterface):
|
|||||||
if variables == "all":
|
if variables == "all":
|
||||||
variables = self.variables
|
variables = self.variables
|
||||||
|
|
||||||
if mode in ["random"]:
|
if mode in self.sample_modes:
|
||||||
return _Nd_sampler(n, mode, variables).extract(variables)
|
return _Nd_sampler(n, mode, variables).extract(variables)
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError(f"mode={mode} is not implemented.")
|
raise NotImplementedError(f"mode={mode} is not implemented.")
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ class Exclusion(OperationInterface):
|
|||||||
5
|
5
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if mode != "random":
|
if mode != self.sample_modes:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
f"{mode} is not a valid mode for sampling."
|
f"{mode} is not a valid mode for sampling."
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ class Intersection(OperationInterface):
|
|||||||
5
|
5
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if mode != "random":
|
if mode != self.sample_modes:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
f"{mode} is not a valid mode for sampling."
|
f"{mode} is not a valid mode for sampling."
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ class OperationInterface(DomainInterface, metaclass=ABCMeta):
|
|||||||
# assign geometries
|
# assign geometries
|
||||||
self._geometries = geometries
|
self._geometries = geometries
|
||||||
|
|
||||||
|
# sampling mode, for now random is the only available
|
||||||
|
self.sample_modes = "random"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def geometries(self):
|
def geometries(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -74,6 +74,9 @@ class SimplexDomain(DomainInterface):
|
|||||||
# build cartesian_bound
|
# build cartesian_bound
|
||||||
self._cartesian_bound = self._build_cartesian(self._vertices_matrix)
|
self._cartesian_bound = self._build_cartesian(self._vertices_matrix)
|
||||||
|
|
||||||
|
# sampling mode
|
||||||
|
self.sample_modes = "random"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def variables(self):
|
def variables(self):
|
||||||
return sorted(self._vertices_matrix.labels)
|
return sorted(self._vertices_matrix.labels)
|
||||||
@@ -231,12 +234,13 @@ class SimplexDomain(DomainInterface):
|
|||||||
in ``variables``.
|
in ``variables``.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if variables == "all":
|
# if variables == "all": # TODO: check if this is necessary (from 0.1)
|
||||||
variables = self.variables
|
# variables = self.variables
|
||||||
elif isinstance(variables, (list, tuple)):
|
# elif isinstance(variables, (list, tuple)):
|
||||||
variables = sorted(variables)
|
# variables = sorted(variables)
|
||||||
|
|
||||||
if mode in ["random"]:
|
# if mode in ["random"]:
|
||||||
|
if mode in self.sample_modes:
|
||||||
if self._sample_surface:
|
if self._sample_surface:
|
||||||
sample_pts = self._sample_boundary_randomly(n)
|
sample_pts = self._sample_boundary_randomly(n)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ class Union(OperationInterface):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
super().__init__(geometries)
|
super().__init__(geometries)
|
||||||
|
self.sample_modes = list(
|
||||||
|
set([geom.sample_modes for geom in geometries])
|
||||||
|
)
|
||||||
|
|
||||||
def is_inside(self, point, check_border=False):
|
def is_inside(self, point, check_border=False):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user