Skip to content
Merged
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
7 changes: 5 additions & 2 deletions src/anemoi/transform/filters/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@

from typing import Any

from anemoi.utils.registry import Registry
from anemoi.transform.filters.fields import filter_registry as fields_filter_registry

filter_registry = Registry(__name__)
filter_registry = fields_filter_registry


def create_filter(context: Any, config: Any) -> Any:
Expand All @@ -33,3 +33,6 @@ def create_filter(context: Any, config: Any) -> Any:
filter = filter_registry.from_config(config)
filter.context = context
return filter


__all__ = ["filter_registry", "create_filter"]
13 changes: 13 additions & 0 deletions src/anemoi/transform/filters/fields/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# (C) Copyright 2026- Anemoi contributors.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# In applying this licence, ECMWF does not waive the privileges and immunities
# granted to it by virtue of its status as an intergovernmental organisation
# nor does it submit to any jurisdiction.


from anemoi.utils.registry import Registry

filter_registry = Registry(__name__)
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
import numpy as np

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.matching import MatchingFieldsFilter
from anemoi.transform.filters.matching import matching
from anemoi.transform.filters.fields.matching import MatchingFieldsFilter
from anemoi.transform.filters.fields.matching import matching


@filter_registry.register("cos_sin_from_rad")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
import numpy as np

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.matching import MatchingFieldsFilter
from anemoi.transform.filters.matching import matching
from anemoi.transform.filters.fields.matching import MatchingFieldsFilter
from anemoi.transform.filters.fields.matching import matching


@filter_registry.register("cos_sin_mean_wave_direction")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
import numpy as np

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.matching import MatchingFieldsFilter
from anemoi.transform.filters.matching import matching
from anemoi.transform.filters.fields.matching import MatchingFieldsFilter
from anemoi.transform.filters.fields.matching import matching

SOIL_TYPE_DIC = {
0: {"theta_pwp": 0.0, "theta_cap": 0.0},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
import numpy as np

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.matching import MatchingFieldsFilter
from anemoi.transform.filters.matching import matching
from anemoi.transform.filters.fields.matching import MatchingFieldsFilter
from anemoi.transform.filters.fields.matching import matching

PUNY = 1e-5
MINTF = 271.15 - PUNY # Assuming a minimum ocean temperature of 271.15K
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@
from earthkit.meteo import vertical
from numpy.typing import NDArray

from ..constants import model_level_AB as predefined_AB
from . import filter_registry
from anemoi.transform.constants import model_level_AB as predefined_AB
from anemoi.transform.filters import filter_registry

from .matching import MatchingFieldsFilter
from .matching import matching

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
import earthkit.data as ekd

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.matching import MatchingFieldsFilter
from anemoi.transform.filters.matching import matching
from anemoi.transform.filters.fields.matching import MatchingFieldsFilter
from anemoi.transform.filters.fields.matching import matching

from .rodeo_opera_preprocessing import clip_opera

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
import numpy as np

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.matching import MatchingFieldsFilter
from anemoi.transform.filters.matching import matching
from anemoi.transform.filters.fields.matching import MatchingFieldsFilter
from anemoi.transform.filters.fields.matching import matching

LOG = logging.getLogger(__name__)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
from pyproj import CRS

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.matching import MatchingFieldsFilter
from anemoi.transform.filters.matching import matching
from anemoi.transform.filters.fields.matching import MatchingFieldsFilter
from anemoi.transform.filters.fields.matching import matching


class RotateWinds(MatchingFieldsFilter):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
import numpy as np

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.matching import MatchingFieldsFilter
from anemoi.transform.filters.matching import matching
from anemoi.transform.filters.fields.matching import MatchingFieldsFilter
from anemoi.transform.filters.fields.matching import matching


def compute_snow_cover(snow_depth: np.ndarray, snow_density: np.ndarray) -> np.ndarray:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
import numpy as np

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.matching import MatchingFieldsFilter
from anemoi.transform.filters.matching import matching
from anemoi.transform.filters.fields.matching import MatchingFieldsFilter
from anemoi.transform.filters.fields.matching import matching

LOG = logging.getLogger(__name__)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
from earthkit.meteo.wind.array import xy_to_polar

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.matching import MatchingFieldsFilter
from anemoi.transform.filters.matching import matching
from anemoi.transform.filters.fields.matching import MatchingFieldsFilter
from anemoi.transform.filters.fields.matching import matching


class WindComponents(MatchingFieldsFilter):
Expand Down
Empty file added tests/field_filters/__init__.py
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

from anemoi.transform.filters import filter_registry

from .utils import collect_fields_by_param
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

from anemoi.transform.filters import filter_registry

from .utils import collect_fields_by_param
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down Expand Up @@ -55,7 +55,7 @@ def side_effect(source_type, path):
mock_field.to_numpy.return_value = mask
return [mock_field]

with mock.patch("anemoi.transform.filters.apply_mask.ekd.from_source", autospec=True) as mock_fn:
with mock.patch("anemoi.transform.filters.fields.apply_mask.ekd.from_source", autospec=True) as mock_fn:
mock_fn.side_effect = side_effect
yield mock_fn

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

from anemoi.transform.filters import filter_registry

from .utils import collect_fields_by_param
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@

from anemoi.transform.filters import filter_registry

from .utils import assert_fields_equal
from .utils import collect_fields_by_param
from ..utils import assert_fields_equal
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@

from anemoi.transform.filters import filter_registry

from .utils import assert_fields_equal
from .utils import collect_fields_by_param
from ..utils import assert_fields_equal
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@

from anemoi.transform.filters import filter_registry

from .utils import SelectFieldSource
from .utils import assert_fields_equal
from .utils import collect_fields_by_param
from ..utils import SelectFieldSource
from ..utils import assert_fields_equal
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

from anemoi.transform.filters import filter_registry

from .utils import collect_fields_by_param
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand All @@ -39,7 +39,7 @@ def mock_mask():


def test_glacier_mask(snow_depth_source, mock_mask):
with mock.patch("anemoi.transform.filters.glacier_mask.ekd.from_source") as mock_earthkit:
with mock.patch("anemoi.transform.filters.fields.glacier_mask.ekd.from_source") as mock_earthkit:
mock_earthkit.return_value = mock_mask

glacier_mask = filter_registry.create("glacier_mask", glacier_mask="glacier_mask.grib")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@

from anemoi.transform.filters import filter_registry

from .utils import SelectAndAddFieldSource
from .utils import assert_fields_equal
from .utils import collect_fields_by_param
from ..utils import SelectAndAddFieldSource
from ..utils import assert_fields_equal
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
4 changes: 2 additions & 2 deletions tests/test_lambda.py → tests/field_filters/test_lambda.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ def test_earthkitfieldlambda(fieldlist: ekd.FieldList) -> None:
before_filter = {field.metadata("param"): field.to_numpy().copy() for field in fieldlist}
filter = filter_registry.create(
"earthkitfieldlambda",
fn="tests.test_lambda.do_something",
fn="tests.field_filters.test_lambda.do_something",
param="sp",
fn_args=[10],
backward_fn="tests.test_lambda.undo_something",
backward_fn="tests.field_filters.test_lambda.undo_something",
)

transformed = filter.forward(fieldlist)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@

from anemoi.transform.filters import filter_registry

from .utils import assert_fields_equal
from .utils import collect_fields_by_param
from ..utils import assert_fields_equal
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
from anemoi.transform.constants import g_gravitational_acceleration
from anemoi.transform.filters import filter_registry

from .utils import assert_fields_equal
from .utils import collect_fields_by_param
from ..utils import assert_fields_equal
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@

from anemoi.transform.filters import filter_registry

from .utils import SelectFieldSource
from .utils import assert_fields_equal
from .utils import collect_fields_by_param
from ..utils import SelectFieldSource
from ..utils import assert_fields_equal
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

from anemoi.transform.filters import filter_registry

from .utils import compare_npz_files
from ..utils import compare_npz_files


@skip_if_offline
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from anemoi.transform.filters import filter_registry

from .utils import collect_fields_by_param
from ..utils import collect_fields_by_param

INPUT_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import numpy as np
import pytest

from anemoi.transform.filters.repeat_members import RepeatMembers
from anemoi.transform.filters.fields.repeat_members import RepeatMembers

NO_MARS = not os.path.exists(os.path.expanduser("~/.ecmwfapirc"))

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from anemoi.transform.filters import filter_registry

from .utils import collect_fields_by_param
from ..utils import collect_fields_by_param

MAX_TP = 12.5

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
import pytest

from anemoi.transform.filters import filter_registry
from anemoi.transform.filters.rodeo_opera_preprocessing import _INF
from anemoi.transform.filters.rodeo_opera_preprocessing import _NODATA
from anemoi.transform.filters.rodeo_opera_preprocessing import _UNDETECTED
from anemoi.transform.filters.fields.rodeo_opera_preprocessing import _INF
from anemoi.transform.filters.fields.rodeo_opera_preprocessing import _NODATA
from anemoi.transform.filters.fields.rodeo_opera_preprocessing import _UNDETECTED

from .utils import collect_fields_by_param
from ..utils import collect_fields_by_param

MAX_TP = 12.5

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from anemoi.transform.filters import filter_registry

from .utils import collect_fields_by_param
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
2 changes: 1 addition & 1 deletion tests/test_snow.py → tests/field_filters/test_snow.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import numpy as np
import pytest

from anemoi.transform.filters.snow_cover import compute_snow_cover
from anemoi.transform.filters.fields.snow_cover import compute_snow_cover


@pytest.mark.skip("Test not implemented")
Expand Down
2 changes: 1 addition & 1 deletion tests/test_sum.py → tests/field_filters/test_sum.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from anemoi.transform.filters import filter_registry

from .utils import collect_fields_by_param
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@

from anemoi.transform.filters import filter_registry

from .utils import assert_fields_equal
from .utils import collect_fields_by_param
from ..utils import assert_fields_equal
from ..utils import collect_fields_by_param

MOCK_FIELD_METADATA = {
"latitudes": [10.0, 0.0, -10.0],
Expand Down
Loading
Loading