From d39424b4e89ea303ab3cefc453af8f9c9015f4af Mon Sep 17 00:00:00 2001 From: awarde96 Date: Fri, 16 Aug 2024 08:10:13 +0000 Subject: [PATCH] Refactor options so options config class can now be called by other python modules --- polytope/options.py | 102 +++++++++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 45 deletions(-) diff --git a/polytope/options.py b/polytope/options.py index 7cce36b9d..78c7a20da 100644 --- a/polytope/options.py +++ b/polytope/options.py @@ -6,54 +6,66 @@ from pydantic import ConfigDict +class TransformationConfig(ConfigModel): + model_config = ConfigDict(extra="forbid") + name: str = "" + + +class CyclicConfig(TransformationConfig): + name: Literal["cyclic"] + range: List[float] = [0] + + +class MapperConfig(TransformationConfig): + name: Literal["mapper"] + type: str = "" + resolution: Union[int, List[int]] = 0 + axes: List[str] = [""] + local: Optional[List[float]] = None + + +class ReverseConfig(TransformationConfig): + name: Literal["reverse"] + is_reverse: bool = False + + +class TypeChangeConfig(TransformationConfig): + name: Literal["type_change"] + type: str = "int" + + +class MergeConfig(TransformationConfig): + name: Literal["merge"] + other_axis: str = "" + linkers: List[str] = [""] + + +action_subclasses_union = Union[CyclicConfig, MapperConfig, ReverseConfig, TypeChangeConfig, MergeConfig] + + +class AxisConfig(ConfigModel): + axis_name: str = "" + transformations: list[action_subclasses_union] + + +path_subclasses_union = Union[str, int, float] + + +class GribJumpAxesConfig(ConfigModel): + axis_name: str = "" + values: List[str] = [""] + + +class Config(ConfigModel): + axis_config: List[AxisConfig] = [] + compressed_axes_config: List[str] = [""] + pre_path: Optional[Dict[str, path_subclasses_union]] = {} + alternative_axes: List[GribJumpAxesConfig] = [] + + class PolytopeOptions(ABC): @staticmethod def get_polytope_options(options): - class TransformationConfig(ConfigModel): - model_config = ConfigDict(extra="forbid") - name: str = "" - - class CyclicConfig(TransformationConfig): - name: Literal["cyclic"] - range: List[float] = [0] - - class MapperConfig(TransformationConfig): - name: Literal["mapper"] - type: str = "" - resolution: Union[int, List[int]] = 0 - axes: List[str] = [""] - local: Optional[List[float]] = None - - class ReverseConfig(TransformationConfig): - name: Literal["reverse"] - is_reverse: bool = False - - class TypeChangeConfig(TransformationConfig): - name: Literal["type_change"] - type: str = "int" - - class MergeConfig(TransformationConfig): - name: Literal["merge"] - other_axis: str = "" - linkers: List[str] = [""] - - action_subclasses_union = Union[CyclicConfig, MapperConfig, ReverseConfig, TypeChangeConfig, MergeConfig] - - class AxisConfig(ConfigModel): - axis_name: str = "" - transformations: list[action_subclasses_union] - - path_subclasses_union = Union[str, int, float] - - class GribJumpAxesConfig(ConfigModel): - axis_name: str = "" - values: List[str] = [""] - - class Config(ConfigModel): - axis_config: List[AxisConfig] = [] - compressed_axes_config: List[str] = [""] - pre_path: Optional[Dict[str, path_subclasses_union]] = {} - alternative_axes: List[GribJumpAxesConfig] = [] parser = argparse.ArgumentParser(allow_abbrev=False) conflator = Conflator(app_name="polytope", model=Config, cli=False, argparser=parser, **options)