Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@

from __future__ import annotations

from typing import Any, ClassVar, Literal, Protocol, runtime_checkable
from typing import ClassVar, Literal, Protocol, runtime_checkable

import pandas as pd
from evo.common import IContext, IFeedback
from evo.objects import ObjectSchema
from evo.objects.typed import BaseObject, object_from_reference
from pydantic import BaseModel, Field, SerializerFunctionWrapHandler, field_validator, model_serializer
from pydantic import BaseModel, Field, field_validator

from ..common import (
AttributeExpression,
Expand Down Expand Up @@ -103,14 +103,6 @@ class TailExtrapolationParams(BaseModel):
upper: UpperTailParams
lower: LowerTailParams | None = None

@model_serializer(mode="wrap")
def _serialize(self, handler: SerializerFunctionWrapHandler) -> dict[str, Any]:
result = handler(self)
# The service requires this key even when null; TaskRunner dumps with exclude_none=True.
if self.lower is None:
result["lower"] = None
return result


class DistributionParams(BaseModel):
"""Parameters for the continuous distribution used for normal-score transformation."""
Expand All @@ -124,14 +116,6 @@ class DistributionParams(BaseModel):
tail_extrapolation: TailExtrapolationParams | None = None
"""Optional tail extrapolation parameters."""

@model_serializer(mode="wrap")
def _serialize(self, handler: SerializerFunctionWrapHandler) -> dict[str, Any]:
result = handler(self)
# The service requires this key even when null; TaskRunner dumps with exclude_none=True.
if self.tail_extrapolation is None:
result["tail_extrapolation"] = None
return result


class ConSimMaterialCategory(BaseModel):
"""Material category for loss calculation within simulation."""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@

from __future__ import annotations

from typing import Any, ClassVar, Literal
from typing import ClassVar, Literal

from evo.common import IContext
from pydantic import BaseModel, Field, SerializerFunctionWrapHandler, field_validator, model_serializer
from pydantic import BaseModel, Field, field_validator

from ..common import (
AttributeExpression,
Expand Down Expand Up @@ -107,14 +107,6 @@ class SimulationReportDistribution(BaseModel):
weights: AttributeExpression | None = None
"""Optional sample weights. Accepts a typed attribute or an attribute expression."""

@model_serializer(mode="wrap")
def _serialize(self, handler: SerializerFunctionWrapHandler) -> dict[str, Any]:
result = handler(self)
# The service requires this key even when null; TaskRunner dumps with exclude_none=True.
if self.tail_extrapolation is None:
result["tail_extrapolation"] = None
return result


class SimReportContextItem(BaseModel):
"""Single key-value detail for a simulation report."""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,20 +176,18 @@ def test_distribution_params(self):
d = _dump(params)
self.assertEqual(d["distribution"]["tail_extrapolation"]["upper"]["power"], 0.5)

def test_distribution_without_tail_extrapolation_sends_null(self):
def test_distribution_without_tail_extrapolation_omits_key(self):
d = _dump(_params(distribution=DistributionParams(weights="declustering_weights")))
self.assertEqual(d["distribution"], {"weights": "declustering_weights", "tail_extrapolation": None})
self.assertEqual(d["distribution"], {"weights": "declustering_weights"})

def test_tail_extrapolation_without_lower_sends_null(self):
def test_tail_extrapolation_without_lower_omits_key(self):
params = _params(
distribution=DistributionParams(
tail_extrapolation=TailExtrapolationParams(upper=UpperTailParams(power=0.5, max=100.0)),
),
)
d = _dump(params)
self.assertEqual(
d["distribution"]["tail_extrapolation"], {"upper": {"power": 0.5, "max": 100.0}, "lower": None}
)
self.assertEqual(d["distribution"]["tail_extrapolation"], {"upper": {"power": 0.5, "max": 100.0}})

def test_tail_extrapolation_with_lower(self):
params = _params(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,16 +180,14 @@ def test_distribution_with_weights(self):
d = _dump(_params(distribution=SimulationReportDistribution(weights="declustering_weights")))
self.assertEqual(d["distribution"]["weights"], "declustering_weights")

def test_distribution_without_tail_extrapolation_sends_null(self):
def test_distribution_without_tail_extrapolation_omits_key(self):
d = _dump(_params(distribution=SimulationReportDistribution(weights="declustering_weights")))
self.assertEqual(d["distribution"], {"weights": "declustering_weights", "tail_extrapolation": None})
self.assertEqual(d["distribution"], {"weights": "declustering_weights"})

def test_distribution_with_tail_extrapolation(self):
tail = TailExtrapolationParams(upper=UpperTailParams(power=0.5, max=100.0))
d = _dump(_params(distribution=SimulationReportDistribution(tail_extrapolation=tail)))
self.assertEqual(
d["distribution"]["tail_extrapolation"], {"upper": {"power": 0.5, "max": 100.0}, "lower": None}
)
self.assertEqual(d["distribution"]["tail_extrapolation"], {"upper": {"power": 0.5, "max": 100.0}})

def test_report_context(self):
d = _dump(
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading