forked from enviPath/enviPy
Initial bayer app Show Pack Classification Adjusted docker compose to bayer specifics Adjusted Dockerfile for Bayer Adding secret flags to group, add secret pools to packages Adjusted View for Package creation Prep configs, added Package Create Modal wip More on PES wip wip Wip minor PW interactions API PES wip Make Select Widget reflect required make required generallay available Update UI if pathway mode is set to build Added ais circle adjustments Initial Zoom, fix AD Creation wip
179 lines
5.9 KiB
Python
179 lines
5.9 KiB
Python
import enum
|
|
from typing import Optional
|
|
|
|
from envipy_additional_information import GroupEnum as G
|
|
from envipy_additional_information import SubcategoryEnum as S
|
|
from envipy_additional_information import (
|
|
register,
|
|
register_parser_command,
|
|
EnviPyModel,
|
|
# EnviPyModelParser,
|
|
Interval,
|
|
UIConfig,
|
|
IntervalConfig,
|
|
WidgetType,
|
|
registry,
|
|
)
|
|
|
|
|
|
@register(keyname="compoundlabel", groups=[S.MISC, G.SLUDGE, G.SEDIMENT, G.SOIL])
|
|
class CompoundLabel(EnviPyModel):
|
|
label: str
|
|
|
|
class UI:
|
|
title = "Compound Label"
|
|
label = UIConfig(widget=WidgetType.TEXT, label="Label", order=1)
|
|
|
|
|
|
# TODO Expose EnviPyModelParser in lib and subclass
|
|
@register_parser_command("compoundlabel")
|
|
class CompoundLabelParser:
|
|
@staticmethod
|
|
def from_string(data: str) -> CompoundLabel:
|
|
return CompoundLabel(label=data)
|
|
|
|
|
|
@register(keyname="studywaterstoragecapacity", groups=[S.MISC, G.SLUDGE, G.SEDIMENT, G.SOIL])
|
|
class StudyWaterStorageCapacity(EnviPyModel):
|
|
capacity: str
|
|
|
|
class UI:
|
|
title = "Study Water Storage Capacity"
|
|
capacity = UIConfig(widget=WidgetType.TEXT, label="Study Water Storage Capacity", order=1)
|
|
|
|
|
|
# TODO Expose EnviPyModelParser in lib and subclass
|
|
@register_parser_command("studywst")
|
|
class StudyWaterStorageCapacityParser:
|
|
@staticmethod
|
|
def from_string(data: str) -> StudyWaterStorageCapacity:
|
|
return StudyWaterStorageCapacity(capacity=data)
|
|
|
|
|
|
class ObservationType(enum.Enum):
|
|
OBSERVED = "observed"
|
|
APPLIED = "applied"
|
|
NA = 'NA'
|
|
|
|
|
|
@register(keyname="observation", groups=[S.MISC, G.SLUDGE, G.SEDIMENT, G.SOIL])
|
|
class Observation(EnviPyModel):
|
|
type: ObservationType
|
|
min_value: Optional[float] = None
|
|
max_value: Optional[float] = None
|
|
|
|
class UI:
|
|
title = "Observation"
|
|
type = UIConfig(widget=WidgetType.SELECT, label="Observed or Applied", order=1)
|
|
min_value = UIConfig(widget=WidgetType.NUMBER, label="Min Value", order=2)
|
|
max_value = UIConfig(widget=WidgetType.NUMBER, label="Max Value", order=3)
|
|
|
|
|
|
# TODO Expose EnviPyModelParser in lib and subclass
|
|
@register_parser_command("observation")
|
|
class ObservationParser:
|
|
@staticmethod
|
|
def from_string(data: str) -> Observation:
|
|
parts = data.split(";")
|
|
|
|
observation_type = ObservationType(parts[0])
|
|
min_value = None
|
|
if parts[1]:
|
|
try:
|
|
min_value = float(parts[1])
|
|
except ValueError:
|
|
pass
|
|
|
|
max_value = None
|
|
if parts[2]:
|
|
try:
|
|
max_value = float(parts[2])
|
|
except ValueError:
|
|
pass
|
|
|
|
return Observation(type=observation_type, min_value=min_value, max_value=max_value)
|
|
|
|
|
|
@register(keyname="kinetics", groups=[S.MISC, G.SLUDGE, G.SEDIMENT, G.SOIL])
|
|
class Kinetics(EnviPyModel):
|
|
dt50: Interval[float]
|
|
normalized_dt50: bool
|
|
chi2err: Optional[float] = None
|
|
t_test: Optional[float] = None
|
|
swarc: Optional[float] = None
|
|
visual_fit: Optional[int] = None
|
|
comment: str
|
|
source: str
|
|
kinetic_model: str
|
|
k1: Optional[float] = None
|
|
k2: Optional[float] = None
|
|
g: Optional[float] = None
|
|
tb: Optional[float] = None
|
|
alpha: Optional[float] = None
|
|
beta: Optional[float] = None
|
|
|
|
class UI:
|
|
title = "Kinetics"
|
|
|
|
# Field config
|
|
dt50 = IntervalConfig(label="DT50 Range", order=1, unit="d")
|
|
normalized_dt50 = UIConfig(widget=WidgetType.CHECKBOX, label="Normalized DT50", order=2)
|
|
chi2err = UIConfig(widget=WidgetType.NUMBER, label="Chi2err", order=3)
|
|
t_test = UIConfig(widget=WidgetType.NUMBER, label="T-Test", order=4)
|
|
swarc = UIConfig(widget=WidgetType.NUMBER, label="SWARC", order=5)
|
|
visual_fit = UIConfig(widget=WidgetType.NUMBER, label="Visual Fit", order=6)
|
|
comment = UIConfig(widget=WidgetType.TEXTAREA, label="Comments", order=7)
|
|
source = UIConfig(widget=WidgetType.TEXT, label="Source", order=8)
|
|
kinetic_model = UIConfig(widget=WidgetType.SELECT, label="Kinetic Model", order=9)
|
|
k1 = UIConfig(widget=WidgetType.NUMBER, label="K1", order=10)
|
|
k2 = UIConfig(widget=WidgetType.NUMBER, label="K2", order=11)
|
|
g = UIConfig(widget=WidgetType.NUMBER, label="G", order=12)
|
|
tb = UIConfig(widget=WidgetType.NUMBER, label="TB", order=13)
|
|
alpha = UIConfig(widget=WidgetType.NUMBER, label="Alpha", order=14)
|
|
beta = UIConfig(widget=WidgetType.NUMBER, label="Beta", order=15)
|
|
|
|
|
|
# TODO Expose EnviPyModelParser in lib and subclass
|
|
@register_parser_command("kineticevaluation")
|
|
class KinecticsParser:
|
|
@staticmethod
|
|
def from_string(data: str) -> Kinetics:
|
|
parts = data.split(";")
|
|
dt50 = registry.get_parser("interval").from_string(parts[0])
|
|
normalized_dt50 = parts[1] == "true"
|
|
chi2err = float(parts[2]) if parts[2] else None
|
|
t_test = float(parts[3]) if parts[3] else None
|
|
swarc = float(parts[4]) if parts[4] else None
|
|
visual_fit = int(parts[5]) if parts[5] else None
|
|
comment = parts[6]
|
|
source = parts[7]
|
|
kinetic_model = parts[8]
|
|
k1 = float(parts[9]) if parts[9] else None
|
|
k2 = float(parts[10]) if parts[10] else None
|
|
g = float(parts[11]) if parts[11] else None
|
|
tb = float(parts[12]) if parts[12] else None
|
|
alpha = float(parts[13]) if parts[13] else None
|
|
beta = float(parts[14]) if parts[14] else None
|
|
|
|
return Kinetics(
|
|
dt50=dt50,
|
|
normalized_dt50=normalized_dt50,
|
|
chi2err=chi2err,
|
|
t_test=t_test,
|
|
swarc=swarc,
|
|
visual_fit=visual_fit,
|
|
comment=comment,
|
|
source=source,
|
|
kinetic_model=kinetic_model,
|
|
k1=k1,
|
|
k2=k2,
|
|
g=g,
|
|
tb=tb,
|
|
alpha=alpha,
|
|
beta=beta,
|
|
)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
print(KinecticsParser.from_string("187.0 - 187.0;false;;;;;;;AFO;;;;;;"))
|