Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
b1db75e
Infrastructure update
egparedes Mar 18, 2026
611cf05
Update stencil tests
egparedes Mar 18, 2026
e3ad5b5
Fix stenciltests using classmethods for reference
egparedes Mar 19, 2026
679a265
Fix format
egparedes Mar 19, 2026
a6fce49
More stencil_test fixes
egparedes Mar 19, 2026
e815473
Fix logic in stencil_tests decorators
egparedes Mar 19, 2026
9215483
Fix parametrized input data fixtures
egparedes Mar 19, 2026
e6069f3
Fix more non-properly decorated tests
egparedes Mar 20, 2026
4b93007
Final cleanups
egparedes Mar 20, 2026
8b2b36a
Merge branch 'main' into feat/minor-stenciltest-fixes
egparedes Mar 20, 2026
769b8e1
Preparation for massive data_alloc -> self.data_alloc conversion
egparedes Mar 27, 2026
352a7cd
StencilTest fixes
egparedes Mar 27, 2026
87d34da
Mass change
egparedes Mar 27, 2026
eaf3f1d
Merge branch 'main' into feat/minor-stenciltest-fixes
egparedes Mar 27, 2026
6eb9172
Fixes after merge
egparedes Mar 27, 2026
1081d86
Add index_field to DataAllocation
egparedes Mar 31, 2026
15d6833
Merge branch 'main' into feat/minor-stenciltest-fixes
egparedes Mar 31, 2026
c57e408
Fix index_field
egparedes Mar 31, 2026
7a19baa
More fixes
egparedes Mar 31, 2026
4082610
Small refactoring and cleanups
egparedes Mar 31, 2026
bfb06b9
More refactorings to unify reference method implementation
egparedes Mar 31, 2026
6d049a4
Fix usages of connectivities instead of grid in reference methods
egparedes Apr 1, 2026
4b2c806
Fix connectivities
egparedes Apr 1, 2026
c10656c
Fix imports
egparedes Apr 1, 2026
b2b50e7
Merge branch 'main' into feat/minor-stenciltest-fixes
egparedes Apr 1, 2026
e4226f6
More cleanups
egparedes Apr 1, 2026
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 @@ -15,7 +15,7 @@

from icon4py.model.atmosphere.advection.stencils import apply_horizontal_density_increment
from icon4py.model.common import dimension as dims
from icon4py.model.common.utils import data_allocation as data_alloc
from icon4py.model.common.grid import base
from icon4py.model.testing import stencil_tests


Expand All @@ -29,9 +29,9 @@ class TestApplyHorizontalDensityIncrement(stencil_tests.StencilTest):
),
)

@staticmethod
@stencil_tests.static_reference
def reference(
connectivities: dict[gtx.Dimension, np.ndarray],
grid: base.Grid,
p_rhodz_new: np.ndarray,
p_mflx_contra_v: np.ndarray,
deepatmo_divzl: np.ndarray,
Expand All @@ -43,15 +43,15 @@ def reference(
rhodz_ast2 = np.maximum(0.1 * p_rhodz_new, p_rhodz_new) - p_dtime * tmp
return dict(rhodz_ast2=rhodz_ast2)

@pytest.fixture
def input_data(self, grid) -> dict:
p_rhodz_new = data_alloc.random_field(grid, dims.CellDim, dims.KDim)
p_mflx_contra_v = data_alloc.random_field(
grid, dims.CellDim, dims.KDim, extend={dims.KDim: 1}
@stencil_tests.input_data_fixture
def input_data(self, grid: base.Grid) -> dict:
p_rhodz_new = self.data_alloc.random_field(dims.CellDim, dims.KDim)
p_mflx_contra_v = self.data_alloc.random_field(
dims.CellDim, dims.KDim, extend={dims.KDim: 1}
)
deepatmo_divzl = data_alloc.random_field(grid, dims.KDim)
deepatmo_divzu = data_alloc.random_field(grid, dims.KDim)
rhodz_ast2 = data_alloc.zero_field(grid, dims.CellDim, dims.KDim)
deepatmo_divzl = self.data_alloc.random_field(dims.KDim)
deepatmo_divzu = self.data_alloc.random_field(dims.KDim)
rhodz_ast2 = self.data_alloc.zero_field(dims.CellDim, dims.KDim)
p_dtime = 0.1
return dict(
p_rhodz_new=p_rhodz_new,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,16 @@
)
from icon4py.model.common import dimension as dims
from icon4py.model.common.grid import base
from icon4py.model.common.utils import data_allocation as data_alloc
from icon4py.model.testing import stencil_tests


class TestApplyInterpolatedTracerTimeTendency(stencil_tests.StencilTest):
PROGRAM = apply_interpolated_tracer_time_tendency
OUTPUTS = ("p_tracer_new",)

@staticmethod
@stencil_tests.static_reference
def reference(
connectivities: dict[gtx.Dimension, np.ndarray],
grid: base.Grid,
p_tracer_now: np.ndarray,
p_grf_tend_tracer: np.ndarray,
p_dtime: float,
Expand All @@ -37,11 +36,11 @@ def reference(

return dict(p_tracer_new=p_tracer_new)

@pytest.fixture
@stencil_tests.input_data_fixture
def input_data(self, grid: base.Grid) -> dict:
p_tracer_now = data_alloc.random_field(grid, dims.CellDim, dims.KDim)
p_grf_tend_tracer = data_alloc.random_field(grid, dims.CellDim, dims.KDim)
p_tracer_new = data_alloc.random_field(grid, dims.CellDim, dims.KDim)
p_tracer_now = self.data_alloc.random_field(dims.CellDim, dims.KDim)
p_grf_tend_tracer = self.data_alloc.random_field(dims.CellDim, dims.KDim)
p_tracer_new = self.data_alloc.random_field(dims.CellDim, dims.KDim)
p_dtime = np.float64(5.0)
return dict(
p_tracer_now=p_tracer_now,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
)
from icon4py.model.common import dimension as dims
from icon4py.model.common.grid import base
from icon4py.model.common.utils import data_allocation as data_alloc
from icon4py.model.testing import stencil_tests


Expand All @@ -30,9 +29,9 @@ class TestApplyVerticalDensityIncrement(stencil_tests.StencilTest):
),
)

@staticmethod
@stencil_tests.static_reference
def reference(
connectivities: dict[gtx.Dimension, np.ndarray],
grid: base.Grid,
rhodz_ast: np.ndarray,
p_mflx_contra_v: np.ndarray,
deepatmo_divzl: np.ndarray,
Expand All @@ -47,15 +46,15 @@ def reference(

return dict(rhodz_ast2=rhodz_ast2)

@pytest.fixture
@stencil_tests.input_data_fixture
def input_data(self, grid: base.Grid) -> dict:
rhodz_ast = data_alloc.random_field(grid, dims.CellDim, dims.KDim)
p_mflx_contra_v = data_alloc.random_field(
grid, dims.CellDim, dims.KDim, extend={dims.KDim: 1}
rhodz_ast = self.data_alloc.random_field(dims.CellDim, dims.KDim)
p_mflx_contra_v = self.data_alloc.random_field(
dims.CellDim, dims.KDim, extend={dims.KDim: 1}
)
deepatmo_divzl = data_alloc.random_field(grid, dims.KDim)
deepatmo_divzu = data_alloc.random_field(grid, dims.KDim)
rhodz_ast2 = data_alloc.zero_field(grid, dims.CellDim, dims.KDim)
deepatmo_divzl = self.data_alloc.random_field(dims.KDim)
deepatmo_divzu = self.data_alloc.random_field(dims.KDim)
rhodz_ast2 = self.data_alloc.zero_field(dims.CellDim, dims.KDim)
p_dtime = 0.1
return dict(
rhodz_ast=rhodz_ast,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,28 @@
)
from icon4py.model.common import dimension as dims
from icon4py.model.common.grid import base
from icon4py.model.common.utils import data_allocation as data_alloc
from icon4py.model.testing import stencil_tests


class TestAverageHorizontalFluxSubcycling2(stencil_tests.StencilTest):
PROGRAM = average_horizontal_flux_subcycling_2
OUTPUTS = ("p_out_e",)

@staticmethod
@stencil_tests.static_reference
def reference(
connectivities: dict[gtx.Dimension, np.ndarray],
grid: base.Grid,
z_tracer_mflx_1_dsl: np.ndarray,
z_tracer_mflx_2_dsl: np.ndarray,
**kwargs: Any,
) -> dict:
p_out_e = (z_tracer_mflx_1_dsl + z_tracer_mflx_2_dsl) / float(2)
return dict(p_out_e=p_out_e)

@pytest.fixture
@stencil_tests.input_data_fixture
def input_data(self, grid: base.Grid) -> dict:
z_tracer_mflx_1_dsl = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
z_tracer_mflx_2_dsl = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
p_out_e = data_alloc.zero_field(grid, dims.EdgeDim, dims.KDim)
z_tracer_mflx_1_dsl = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
z_tracer_mflx_2_dsl = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
p_out_e = self.data_alloc.zero_field(dims.EdgeDim, dims.KDim)
return dict(
z_tracer_mflx_1_dsl=z_tracer_mflx_1_dsl,
z_tracer_mflx_2_dsl=z_tracer_mflx_2_dsl,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,16 @@
)
from icon4py.model.common import dimension as dims
from icon4py.model.common.grid import base
from icon4py.model.common.utils import data_allocation as data_alloc
from icon4py.model.testing import stencil_tests


class TestAverageHorizontalFluxSubcycling3(stencil_tests.StencilTest):
PROGRAM = average_horizontal_flux_subcycling_3
OUTPUTS = ("p_out_e",)

@staticmethod
@stencil_tests.static_reference
def reference(
connectivities: dict[gtx.Dimension, np.ndarray],
grid: base.Grid,
z_tracer_mflx_1_dsl: np.ndarray,
z_tracer_mflx_2_dsl: np.ndarray,
z_tracer_mflx_3_dsl: np.ndarray,
Expand All @@ -35,12 +34,12 @@ def reference(
p_out_e = (z_tracer_mflx_1_dsl + z_tracer_mflx_2_dsl + z_tracer_mflx_3_dsl) / float(3)
return dict(p_out_e=p_out_e)

@pytest.fixture
@stencil_tests.input_data_fixture
def input_data(self, grid: base.Grid) -> dict:
z_tracer_mflx_1_dsl = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
z_tracer_mflx_2_dsl = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
z_tracer_mflx_3_dsl = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
p_out_e = data_alloc.zero_field(grid, dims.EdgeDim, dims.KDim)
z_tracer_mflx_1_dsl = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
z_tracer_mflx_2_dsl = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
z_tracer_mflx_3_dsl = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
p_out_e = self.data_alloc.zero_field(dims.EdgeDim, dims.KDim)
return dict(
z_tracer_mflx_1_dsl=z_tracer_mflx_1_dsl,
z_tracer_mflx_2_dsl=z_tracer_mflx_2_dsl,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,18 @@
# Please, refer to the LICENSE file in the root directory.
# SPDX-License-Identifier: BSD-3-Clause

from collections.abc import Mapping
from typing import cast

import gt4py.next as gtx
import numpy as np
import pytest

import icon4py.model.common.utils.data_allocation as data_alloc
from icon4py.model.atmosphere.advection.stencils.compute_antidiffusive_cell_fluxes_and_min_max import (
compute_antidiffusive_cell_fluxes_and_min_max,
)
from icon4py.model.common import dimension as dims
from icon4py.model.common.grid import base
from icon4py.model.testing import stencil_tests


Expand All @@ -28,9 +31,9 @@ class TestComputeAntidiffusiveCellFluxesAndMinMax(stencil_tests.StencilTest):
"z_tracer_min",
)

@staticmethod
@stencil_tests.static_reference
def reference(
connectivities: dict[gtx.Dimension, np.ndarray],
grid: base.Grid,
geofac_div: np.ndarray,
p_rhodz_now: np.ndarray,
p_rhodz_new: np.ndarray,
Expand All @@ -40,7 +43,8 @@ def reference(
p_dtime: float,
**kwargs,
) -> dict:
c2e = connectivities[dims.C2EDim]
connectivities = stencil_tests.connectivities_asnumpy(grid)
c2e = connectivities[dims.C2E]
z_anti_c2e = z_anti[c2e]

geofac_div = np.expand_dims(geofac_div, axis=-1)
Expand Down Expand Up @@ -77,21 +81,21 @@ def reference(
z_tracer_min=z_tracer_min,
)

@pytest.fixture
def input_data(self, grid) -> dict:
geofac_div = data_alloc.random_field(grid, dims.CellDim, dims.C2EDim)
p_rhodz_now = data_alloc.random_field(grid, dims.CellDim, dims.KDim)
p_rhodz_new = data_alloc.random_field(grid, dims.CellDim, dims.KDim)
z_mflx_low = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
z_anti = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
p_cc = data_alloc.random_field(grid, dims.CellDim, dims.KDim)
@stencil_tests.input_data_fixture
def input_data(self, grid: base.Grid) -> dict:
geofac_div = self.data_alloc.random_field(dims.CellDim, dims.C2EDim)
p_rhodz_now = self.data_alloc.random_field(dims.CellDim, dims.KDim)
p_rhodz_new = self.data_alloc.random_field(dims.CellDim, dims.KDim)
z_mflx_low = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
z_anti = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
p_cc = self.data_alloc.random_field(dims.CellDim, dims.KDim)
p_dtime = 5.0

z_mflx_anti_in = data_alloc.zero_field(grid, dims.CellDim, dims.KDim)
z_mflx_anti_out = data_alloc.zero_field(grid, dims.CellDim, dims.KDim)
z_tracer_new_low = data_alloc.zero_field(grid, dims.CellDim, dims.KDim)
z_tracer_max = data_alloc.zero_field(grid, dims.CellDim, dims.KDim)
z_tracer_min = data_alloc.zero_field(grid, dims.CellDim, dims.KDim)
z_mflx_anti_in = self.data_alloc.zero_field(dims.CellDim, dims.KDim)
z_mflx_anti_out = self.data_alloc.zero_field(dims.CellDim, dims.KDim)
z_tracer_new_low = self.data_alloc.zero_field(dims.CellDim, dims.KDim)
z_tracer_max = self.data_alloc.zero_field(dims.CellDim, dims.KDim)
z_tracer_min = self.data_alloc.zero_field(dims.CellDim, dims.KDim)

return dict(
geofac_div=geofac_div,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,21 @@
import numpy as np
import pytest

import icon4py.model.common.utils.data_allocation as data_alloc
from icon4py.model.atmosphere.advection.stencils.compute_barycentric_backtrajectory import (
compute_barycentric_backtrajectory,
)
from icon4py.model.common import dimension as dims
from icon4py.model.common.grid import base
from icon4py.model.testing import stencil_tests


class TestComputeBarycentricBacktrajectory(stencil_tests.StencilTest):
PROGRAM = compute_barycentric_backtrajectory
OUTPUTS = ("p_cell_idx", "p_distv_bary_1", "p_distv_bary_2")

@staticmethod
@stencil_tests.static_reference
def reference(
connectivities: dict[gtx.Dimension, np.ndarray],
grid: base.Grid,
p_vn: np.ndarray,
p_vt: np.ndarray,
cell_idx: np.ndarray,
Expand Down Expand Up @@ -79,24 +79,24 @@ def reference(
p_distv_bary_2=p_distv_bary_2,
)

@pytest.fixture
def input_data(self, grid) -> dict:
p_vn = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
p_vt = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
@stencil_tests.input_data_fixture
def input_data(self, grid: base.Grid) -> dict:
p_vn = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
p_vt = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
cell_idx = grid.get_connectivity("E2C")
pos_on_tplane_e_1 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
pos_on_tplane_e_2 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
primal_normal_cell_1 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
pos_on_tplane_e_1 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)
pos_on_tplane_e_2 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)
primal_normal_cell_1 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)

dual_normal_cell_1 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
primal_normal_cell_2 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
dual_normal_cell_1 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)
primal_normal_cell_2 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)

dual_normal_cell_2 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
dual_normal_cell_2 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)

p_cell_idx = data_alloc.zero_field(grid, dims.EdgeDim, dims.KDim, dtype=gtx.int32)
p_cell_rel_idx_dsl = data_alloc.zero_field(grid, dims.EdgeDim, dims.KDim, dtype=gtx.int32)
p_distv_bary_1 = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
p_distv_bary_2 = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
p_cell_idx = self.data_alloc.zero_field(dims.EdgeDim, dims.KDim, dtype=gtx.int32)
p_cell_rel_idx_dsl = self.data_alloc.zero_field(dims.EdgeDim, dims.KDim, dtype=gtx.int32)
p_distv_bary_1 = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
p_distv_bary_2 = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
p_dthalf = 2.0

return dict(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,21 @@
import numpy as np
import pytest

import icon4py.model.common.utils.data_allocation as data_alloc
from icon4py.model.atmosphere.advection.stencils.compute_barycentric_backtrajectory_alt import (
compute_barycentric_backtrajectory_alt,
)
from icon4py.model.common import dimension as dims
from icon4py.model.common.grid import base
from icon4py.model.testing import stencil_tests


class TestComputeBarycentricBacktrajectoryAlt(stencil_tests.StencilTest):
PROGRAM = compute_barycentric_backtrajectory_alt
OUTPUTS = ("p_distv_bary_1", "p_distv_bary_2")

@staticmethod
@stencil_tests.static_reference
def reference(
connectivities: dict[gtx.Dimension, np.ndarray],
grid: base.Grid,
p_vn: np.ndarray,
p_vt: np.ndarray,
pos_on_tplane_e_1: np.ndarray,
Expand Down Expand Up @@ -72,18 +72,18 @@ def reference(
p_distv_bary_2=p_distv_bary_2,
)

@pytest.fixture
def input_data(self, grid) -> dict:
p_vn = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
p_vt = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
pos_on_tplane_e_1 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
pos_on_tplane_e_2 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
primal_normal_cell_1 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
dual_normal_cell_1 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
primal_normal_cell_2 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
dual_normal_cell_2 = data_alloc.random_field(grid, dims.EdgeDim, dims.E2CDim)
p_distv_bary_1 = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
p_distv_bary_2 = data_alloc.random_field(grid, dims.EdgeDim, dims.KDim)
@stencil_tests.input_data_fixture
def input_data(self, grid: base.Grid) -> dict:
p_vn = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
p_vt = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
pos_on_tplane_e_1 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)
pos_on_tplane_e_2 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)
primal_normal_cell_1 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)
dual_normal_cell_1 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)
primal_normal_cell_2 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)
dual_normal_cell_2 = self.data_alloc.random_field(dims.EdgeDim, dims.E2CDim)
p_distv_bary_1 = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
p_distv_bary_2 = self.data_alloc.random_field(dims.EdgeDim, dims.KDim)
p_dthalf = 2.0

return dict(
Expand Down
Loading
Loading