Skip to content

Commit

Permalink
refactor: rewritten builder structure
Browse files Browse the repository at this point in the history
  • Loading branch information
rabii-chaarani committed May 10, 2024
1 parent 95ce299 commit 1c0cb45
Show file tree
Hide file tree
Showing 8 changed files with 103 additions and 38 deletions.
3 changes: 2 additions & 1 deletion FoldOptLib/builders/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from base_builder import BaseBuilder
from .base_builder import BaseBuilder
from .structural_frame_builder import StructuralFrameBuilder
22 changes: 3 additions & 19 deletions FoldOptLib/builders/base_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,13 @@
class BaseBuilder(ABC):

@abstractmethod
def set_value_constraints(self):
def set_constraints(self):
pass

@abstractmethod
def set_tangent_constraints(self):
def evaluate_scalar_value(self, *args):
pass

@abstractmethod
def set_normal_constraints(self):
def evaluate_gradient(self, *args):
pass

@abstractmethod
def set_gradient_constraints(self):
pass

@abstractmethod
def build(self):
pass

@abstractmethod
def evaluate_scalar_value(self):
pass

@abstractmethod
def evaluate_gradient(self):
pass
27 changes: 10 additions & 17 deletions FoldOptLib/builders/fold_frame_builder.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,19 @@
from abc import ABC, abstractmethod
from base_builder import BaseBuilder
from .structural_frame_builder import StructuralFrameBuilder
from ..datatypes import ConstraintType, InterpolationConstraints
from LoopStructural import LoopInterpolator, BoundingBox
import numpy


class FoldFrameBuilder(BaseBuilder):
class FoldFrameBuilder(StructuralFrameBuilder):

def set_value_constraints(self):
pass

def set_tangent_constraints(self):
pass

def set_normal_constraints(self):
pass

def set_gradient_constraints(self):
pass
def __init__(self, constraints: InterpolationConstraints, bounding_box: BoundingBox):
super().__init__(constraints, bounding_box)

def build(self):
def build_axial_surface_field(self):
pass

def evaluate_scalar_value(self):
def build_fold_axis_field(self):
pass

def evaluate_gradient(self):
def build_x_axis_field(self):
pass
30 changes: 30 additions & 0 deletions FoldOptLib/builders/structural_frame_builder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from base_builder import BaseBuilder
from ..datatypes import ConstraintType, InterpolationConstraints
from LoopStructural import LoopInterpolator, BoundingBox
import numpy


class StructuralFrameBuilder(BaseBuilder):

def __init__(self, constraints: InterpolationConstraints, bounding_box: BoundingBox):
self.constraints = constraints
self.bounding_box = bounding_box
self.interpolator = LoopInterpolator(
self.bounding_box,
dimensions=3,
nelements=1000
)

def set_constraints(self):
self.interpolator.fit(
values=self.constraints[ConstraintType.VALUE],
tangent_vectors=self.constraints[ConstraintType.TANGENT],
normal_vectors=self.constraints[ConstraintType.NORMAL],
)

def evaluate_scalar_value(self, locations: numpy.ndarray) -> numpy.ndarray:
return self.interpolator.evaluate_scalar_value(locations)

def evaluate_gradient(self, locations: numpy.ndarray) -> numpy.ndarray:
return self.interpolator.evaluate_gradient(locations)

3 changes: 2 additions & 1 deletion FoldOptLib/datatypes/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from .probability_distributions import NormalDistribution, VonMisesFisherDistribution
from .input_geological_knowledge import InputGeologicalKnowledge
from .enums import KnowledgeType, OptimisationType, ObjectiveType, DataType, SolverType
from .enums import KnowledgeType, OptimisationType, ObjectiveType, DataType, SolverType, ConstraintType
from .interpolation_constraints import InterpolationConstraints
13 changes: 13 additions & 0 deletions FoldOptLib/datatypes/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,16 @@ class SolverType(IntEnum):
class RotationType(IntEnum):
LIMB = 0
AXIS = 1


class ConstraintType(IntEnum):
VALUE = 0
TANGENT = 1
NORMAL = 2
GRADIENT = 3


class CoordinateType(IntEnum):
AXIAL_FOLIATION_FIELD = 0
FOLD_AXIS_FIELD = 1
X_AXIS = 2
38 changes: 38 additions & 0 deletions FoldOptLib/datatypes/interpolation_constraints.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from dataclasses import dataclass
from typing import Union, Optional
from enums import ConstraintType
import numpy
import beartype



@dataclass
class InterpolationConstraints:
"""
Class to store interpolation constraints for a given problem.
Attributes
----------
value_constraints : Optional[Union[list, numpy.ndarray]]
The value constraints for the interpolation, [x, y, z, value, weight].
tangent_constraints : Optional[Union[list, numpy.ndarray]]
The tangent constraints for the interpolation, [x, y, z, tx, ty, tz, weight].
normal_constraints : Optional[Union[list, numpy.ndarray]]
The normal constraints for the interpolation., [x, y, z, nx, ny, nz, weight].
gradient_constraints : Optional[Union[list, numpy.ndarray]]
The gradient constraints for the interpolation, [x, y, z, gx, gy, gz, weight].
"""
value_constraints: Optional[Union[list, numpy.ndarray]] = None
tangent_constraints: Optional[Union[list, numpy.ndarray]] = None
normal_constraints: Optional[Union[list, numpy.ndarray]] = None
gradient_constraints: Optional[Union[list, numpy.ndarray]] = None

@beartype.beartype
def __getitem__(self, constraint_type: ConstraintType):
constraints = {
ConstraintType.VALUE: self.value_constraints,
ConstraintType.TANGENT: self.tangent_constraints,
ConstraintType.NORMAL: self.normal_constraints,
ConstraintType.GRADIENT: self.gradient_constraints
}
return constraints[constraint_type]
5 changes: 5 additions & 0 deletions FoldOptLib/input/data_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,8 @@ class InputData:
folded_foliation: pandas.DataFrame
bounding_box: BoundingBox
geological_knowledge: InputGeologicalKnowledge = None


def __post_init__(self):
self.

0 comments on commit 1c0cb45

Please sign in to comment.