better validation and errors

This commit is contained in:
Benoît Sierro
2023-03-17 12:16:50 +01:00
parent 71ec5dd0af
commit 81d7dceb9c

View File

@@ -11,16 +11,16 @@ import numpy as np
import scgenerator as sc import scgenerator as sc
import tomli import tomli
from customfunc.app import PlotApp from customfunc.app import PlotApp
from pydantic import BaseModel from pydantic import BaseModel, ValidationError, confloat
DEFAULT_CONFIG_FILE = "config.toml" DEFAULT_CONFIG_FILE = "config.toml"
class Config(BaseModel): class Config(BaseModel):
wl_min: float wl_min: confloat(ge=100, le=1000)
wl_max: float wl_max: confloat(ge=500, le=6000)
wl_pump: float wl_pump: confloat(ge=200, le=6000)
rep_rate: float rep_rate: confloat(gt=0)
gas: str gas: str
@classmethod @classmethod
@@ -29,7 +29,12 @@ class Config(BaseModel):
with open(config_file, "rb") as file: with open(config_file, "rb") as file:
d = tomli.load(file) d = tomli.load(file)
d = cls.default() | d d = cls.default() | d
return cls(**d) try:
return cls(**d)
except ValidationError as e:
s = f"invalid input in config file {config_file}:\n{e}"
print(s)
sys.exit(1)
@classmethod @classmethod
def default(cls) -> dict[str, Any]: def default(cls) -> dict[str, Any]:
@@ -102,12 +107,12 @@ def app(config_file: os.PathLike | None = None):
with PlotApp( with PlotApp(
f"Dispersion design with {config.gas.title()}", f"Dispersion design with {config.gas.title()}",
wall_thickness_um=np.geomspace(0.01, 10),
core_diameter_um=np.linspace(50, 300), core_diameter_um=np.linspace(50, 300),
pressure_mbar=np.geomspace(1, 2000), pressure_mbar=np.geomspace(1, 2000),
wall_thickness_um=np.geomspace(0.01, 10),
n_tubes=np.arange(6, 16), n_tubes=np.arange(6, 16),
gap_um=np.linspace(1, 15), gap_um=np.linspace(1, 15),
t_fwhm_fs=np.linspace(10, 200), t_fwhm_fs=np.linspace(10, 200, 96),
) as app: ) as app:
# initial setup # initial setup
app[0].horizontal_line("reference", 0, color="gray") app[0].horizontal_line("reference", 0, color="gray")
@@ -211,7 +216,7 @@ def app(config_file: os.PathLike | None = None):
) )
zdw = lim.wl_zero_disp * 1e9 zdw = lim.wl_zero_disp * 1e9
app[0].set_line_data("zdw", [zdw, zdw], [0, 1]) app[0].set_line_data("zdw", [zdw, zdw], [-3, 3])
app[0].set_line_name("zdw", f"ZDW = {zdw:.0f}nm") app[0].set_line_name("zdw", f"ZDW = {zdw:.0f}nm")