Coverage for C: \ Users \ peaco \ OneDrive \ Documents \ GitHub \ mt_metadata \ mt_metadata \ processing \ time_series_decimation.py: 95%
22 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-10 00:11 -0800
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-10 00:11 -0800
1# =====================================================
2# Imports
3# =====================================================
4from typing import Annotated
6from pydantic import Field, model_validator
8from mt_metadata.base import MetadataBase
9from mt_metadata.common.enumerations import StrEnumerationBase
12# =====================================================
13class MethodEnum(StrEnumerationBase):
14 default = "default"
15 other = "other"
18class TimeSeriesDecimation(MetadataBase):
19 level: Annotated[
20 int | None,
21 Field(
22 default=None,
23 description="Decimation level, must be a non-negative integer starting at 0",
24 alias=None,
25 json_schema_extra={
26 "units": None,
27 "required": True,
28 "examples": ["0"],
29 },
30 ),
31 ]
33 factor: Annotated[
34 float,
35 Field(
36 default=1.0,
37 description="Decimation factor between parent sample rate and decimated time series sample rate.",
38 alias=None,
39 json_schema_extra={
40 "units": None,
41 "required": True,
42 "examples": ["4.0"],
43 },
44 ),
45 ]
47 method: Annotated[
48 MethodEnum,
49 Field(
50 default=MethodEnum.default,
51 description="Type of decimation",
52 alias=None,
53 json_schema_extra={
54 "units": "",
55 "required": True,
56 "examples": ["default"],
57 },
58 ),
59 ]
61 sample_rate: Annotated[
62 float,
63 Field(
64 default=1.0,
65 description="Sample rate of the decimation level data (after decimation).",
66 alias=None,
67 json_schema_extra={
68 "units": "samples per second",
69 "required": True,
70 "examples": ["256"],
71 },
72 ),
73 ]
75 anti_alias_filter: Annotated[
76 str | None,
77 Field(
78 default="default",
79 description="Type of anti alias filter for decimation.",
80 alias=None,
81 json_schema_extra={
82 "units": None,
83 "required": True,
84 "examples": ["default"],
85 },
86 ),
87 ]
89 @model_validator(mode="before")
90 @classmethod
91 def check_level(cls, values):
92 """Check that level is a non-negative integer and set anti_alias_filter for level 0."""
93 # Handle both dict and model instances
94 if isinstance(values, dict):
95 level = values.get("level")
96 else:
97 level = getattr(values, "level", None)
99 # Only perform validation if level is an integer or None
100 if level is not None and isinstance(level, int) and level < 0:
101 raise ValueError("Decimation level must be a non-negative integer.")
102 # elif level == 0:
103 # # Set anti_alias_filter to None for level 0
104 # if isinstance(values, dict):
105 # values["anti_alias_filter"] = None
106 # else:
107 # values.anti_alias_filter = None
109 return values