diff --git a/.github/validation_grid_utils.py b/.github/validation_grid_utils.py index 2d77efe5ef..2e80900faf 100755 --- a/.github/validation_grid_utils.py +++ b/.github/validation_grid_utils.py @@ -24,15 +24,15 @@ import typer -from icon4py.model.testing import definitions, grid_utils +from icon4py.model.testing import definitions as test_defs, grid_utils VALIDATION_GRIDS = ( - definitions.Grids.R01B01_GLOBAL, - definitions.Grids.R02B04_GLOBAL, - definitions.Grids.MCH_CH_R04B09_DSL, - definitions.Grids.MCH_OPR_R04B07_DOMAIN01, - definitions.Grids.TORUS_50000x5000, + test_defs.Grids.R01B01_GLOBAL, + test_defs.Grids.R02B04_GLOBAL, + test_defs.Grids.MCH_CH_R04B09_DSL, + test_defs.Grids.MCH_OPR_R04B07_DOMAIN01, + test_defs.Grids.TORUS_50000x5000, ) # change to MCH_OPR_R04B07_DOMAIN01 app = typer.Typer() diff --git a/.gitignore b/.gitignore index ee47a0e04a..060afac5bf 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ testdata simple_mesh*.nc /prof .profile +pyrightconfig.json ### Sphinx ### **/docs/_source/*.rst diff --git a/model/atmosphere/advection/tests/advection/integration_tests/test_advection.py b/model/atmosphere/advection/tests/advection/integration_tests/test_advection.py index fc17a97d3c..e660a5136d 100644 --- a/model/atmosphere/advection/tests/advection/integration_tests/test_advection.py +++ b/model/atmosphere/advection/tests/advection/integration_tests/test_advection.py @@ -20,7 +20,7 @@ from icon4py.model.common.interpolation.interpolation_fields import compute_lsq_coeffs from icon4py.model.common.utils import data_allocation as data_alloc from icon4py.model.testing import ( - definitions, + definitions as test_defs, grid_utils, grid_utils as gridtest_utils, serialbox as sb, @@ -66,7 +66,7 @@ @pytest.mark.embedded_remap_error @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.MCH_CH_R04B09]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.MCH_CH_R04B09]) @pytest.mark.parametrize( "date, even_timestep, ntracer, horizontal_advection_type, horizontal_advection_limiter, vertical_advection_type, vertical_advection_limiter", [ @@ -125,7 +125,7 @@ def test_advection_run_single_step( backend, advection_init_savepoint, advection_exit_savepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ): # TODO(OngChia): the last datatest fails on GPU (or even CPU) backend when there is no advection because the horizontal flux is not zero. Further check required. if ( @@ -223,7 +223,7 @@ def test_compute_lsq_coeffs( grid_savepoint: sb.IconGridSavepoint, backend: gtx_typing.Backend, interpolation_savepoint: sb.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: gm = grid_utils.get_grid_manager_from_identifier( experiment.grid, diff --git a/model/atmosphere/diffusion/tests/diffusion/integration_tests/test_diffusion.py b/model/atmosphere/diffusion/tests/diffusion/integration_tests/test_diffusion.py index 630c560ff5..7458721c0f 100644 --- a/model/atmosphere/diffusion/tests/diffusion/integration_tests/test_diffusion.py +++ b/model/atmosphere/diffusion/tests/diffusion/integration_tests/test_diffusion.py @@ -19,7 +19,7 @@ from icon4py.model.common.grid import geometry_attributes as geometry_meta, vertical as v_grid from icon4py.model.common.utils import data_allocation as data_alloc from icon4py.model.testing import ( - definitions, + definitions as test_defs, grid_utils, reference_funcs as ref_funcs, serialbox as sb, @@ -38,23 +38,23 @@ grid_functionality = collections.defaultdict(dict) -def get_grid_for_experiment(experiment: definitions.Experiment, backend: gtx_typing.Backend): +def get_grid_for_experiment(experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend): return _get_or_initialize(experiment, backend, "grid") def get_edge_geometry_for_experiment( - experiment: definitions.Experiment, backend: gtx_typing.Backend + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend ): return _get_or_initialize(experiment, backend, "edge_geometry") def get_cell_geometry_for_experiment( - experiment: definitions.Experiment, backend: gtx_typing.Backend + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend ): return _get_or_initialize(experiment, backend, "cell_geometry") -def _get_or_initialize(experiment: definitions.Experiment, backend: gtx_typing.Backend, name: str): +def _get_or_initialize(experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, name: str): if not grid_functionality[experiment.name].get(name): geometry_ = grid_utils.get_grid_geometry(backend, experiment) grid = geometry_.grid @@ -95,7 +95,7 @@ def _get_or_initialize(experiment: definitions.Experiment, backend: gtx_typing.B def test_diffusion_coefficients_with_hdiff_efdt_ratio(experiment): - config = definitions.construct_diffusion_config(experiment, ndyn_substeps=5) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps=5) config.hdiff_efdt_ratio = 1.0 config.hdiff_w_efdt_ratio = 2.0 @@ -108,7 +108,7 @@ def test_diffusion_coefficients_with_hdiff_efdt_ratio(experiment): def test_diffusion_coefficients_without_hdiff_efdt_ratio(experiment): - config = definitions.construct_diffusion_config(experiment) + config = test_defs.construct_diffusion_config(experiment) config.hdiff_efdt_ratio = 0.0 config.hdiff_w_efdt_ratio = 0.0 @@ -121,7 +121,7 @@ def test_diffusion_coefficients_without_hdiff_efdt_ratio(experiment): def test_smagorinski_factor_for_diffusion_type_4(experiment): - config = definitions.construct_diffusion_config(experiment, ndyn_substeps=5) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps=5) config.smagorinski_scaling_factor = 0.15 config.diffusion_type = 4 @@ -134,7 +134,7 @@ def test_smagorinski_factor_for_diffusion_type_4(experiment): def test_smagorinski_heights_diffusion_type_5_are_consistent( experiment, ): - config = definitions.construct_diffusion_config(experiment, ndyn_substeps=5) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps=5) config.smagorinski_scaling_factor = 0.15 config.diffusion_type = 5 @@ -150,7 +150,7 @@ def test_smagorinski_heights_diffusion_type_5_are_consistent( def test_smagorinski_factor_diffusion_type_5(experiment): params = diffusion.DiffusionParams( - definitions.construct_diffusion_config(experiment, ndyn_substeps=5) + test_defs.construct_diffusion_config(experiment, ndyn_substeps=5) ) assert len(params.smagorinski_factor) == len(params.smagorinski_height) assert len(params.smagorinski_factor) == 4 @@ -163,8 +163,8 @@ def test_smagorinski_factor_diffusion_type_5(experiment): @pytest.mark.parametrize( "experiment,step_date_init", [ - (definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"), - (definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:20.000"), + (test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"), + (test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:20.000"), ], ) def test_diffusion_init( @@ -180,7 +180,7 @@ def test_diffusion_init( ndyn_substeps, backend, ): - config = definitions.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps) additional_parameters = diffusion.DiffusionParams(config) grid = get_grid_for_experiment(experiment, backend) @@ -294,10 +294,10 @@ def _verify_init_values_against_savepoint( @pytest.mark.parametrize( "experiment,step_date_init", [ - (definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"), - (definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:20.000"), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000"), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:04.000"), + (test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"), + (test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:20.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:04.000"), ], ) @pytest.mark.parametrize("ndyn_substeps", (2,)) @@ -318,7 +318,7 @@ def test_verify_diffusion_init_against_savepoint( grid = get_grid_for_experiment(experiment, backend) cell_params = get_cell_geometry_for_experiment(experiment, backend) edge_params = get_edge_geometry_for_experiment(experiment, backend) - config = definitions.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps) additional_parameters = diffusion.DiffusionParams(config) vertical_config = v_grid.VerticalGridConfig( grid.num_levels, @@ -356,12 +356,12 @@ def test_verify_diffusion_init_against_savepoint( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -418,7 +418,7 @@ def test_run_diffusion_single_step( vct_b=vct_b, ) - config = definitions.construct_diffusion_config(experiment, ndyn_substeps) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps) additional_parameters = diffusion.DiffusionParams(config) diffusion_granule = diffusion.Diffusion( @@ -447,7 +447,7 @@ def test_run_diffusion_single_step( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), @@ -494,7 +494,7 @@ def test_run_diffusion_multiple_steps( config=vertical_config, vct_a=grid_savepoint.vct_a(), vct_b=grid_savepoint.vct_b() ) - config = definitions.construct_diffusion_config(experiment, ndyn_substeps) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps) additional_parameters = diffusion.DiffusionParams(config) ###################################################################### @@ -574,7 +574,7 @@ def test_run_diffusion_multiple_steps( @pytest.mark.datatest @pytest.mark.embedded_remap_error -@pytest.mark.parametrize("experiment", [definitions.Experiments.MCH_CH_R04B09]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.MCH_CH_R04B09]) @pytest.mark.parametrize("linit", [True]) # TODO(): Enable dace orchestration, currently broken by precompiled programs @pytest.mark.parametrize("orchestration", [False]) @@ -619,7 +619,7 @@ def test_run_diffusion_initial_step( dwdy=savepoint_diffusion_init.dwdy(), ) prognostic_state = savepoint_diffusion_init.construct_prognostics() - config = definitions.construct_diffusion_config(experiment, ndyn_substeps=2) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps=2) params = diffusion.DiffusionParams(config) diffusion_granule = diffusion.Diffusion( @@ -657,14 +657,14 @@ def test_run_diffusion_initial_step( @pytest.mark.parametrize( "experiment,step_date_init", [ - (definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"), + (test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"), ], ) def test_verify_special_diffusion_inital_step_values_against_initial_savepoint( savepoint_diffusion_init, experiment, icon_grid, linit, ndyn_substeps, backend ): savepoint = savepoint_diffusion_init - config = definitions.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps) params = diffusion.DiffusionParams(config) expected_diff_multfac_vn = savepoint.diff_multfac_vn() diff --git a/model/atmosphere/diffusion/tests/diffusion/mpi_tests/test_parallel_diffusion.py b/model/atmosphere/diffusion/tests/diffusion/mpi_tests/test_parallel_diffusion.py index c50885d158..8fbc7c6567 100644 --- a/model/atmosphere/diffusion/tests/diffusion/mpi_tests/test_parallel_diffusion.py +++ b/model/atmosphere/diffusion/tests/diffusion/mpi_tests/test_parallel_diffusion.py @@ -16,7 +16,7 @@ from icon4py.model.common import dimension as dims, type_alias as ta from icon4py.model.common.decomposition import definitions as decomposition, mpi_decomposition from icon4py.model.common.grid import icon, vertical as v_grid -from icon4py.model.testing import definitions, parallel_helpers, serialbox, test_utils +from icon4py.model.testing import definitions as test_defs, parallel_helpers, serialbox, test_utils from .. import utils from ..fixtures import * # noqa: F403 @@ -34,18 +34,18 @@ "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), ], ) @pytest.mark.parametrize("ndyn_substeps", [2]) @pytest.mark.parametrize("orchestration", [False]) @pytest.mark.parametrize("processor_props", [True], indirect=True) def test_parallel_diffusion( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, step_date_init: str, step_date_exit: str, linit: bool, @@ -71,7 +71,7 @@ def test_parallel_diffusion( caplog.set_level("INFO") parallel_helpers.check_comm_size(processor_props) _log.info( - f"rank={processor_props.rank}/{processor_props.comm_size}: initializing diffusion for experiment '{definitions.Experiments.MCH_CH_R04B09}'" + f"rank={processor_props.rank}/{processor_props.comm_size}: initializing diffusion for experiment '{experiment}'" ) _log.info( f"local cells = {decomposition_info.global_index(dims.CellDim, decomposition.DecompositionInfo.EntryType.ALL).shape} " @@ -85,7 +85,7 @@ def test_parallel_diffusion( _log.info( f"rank={processor_props.rank}/{processor_props.comm_size}: using local grid with {icon_grid.num_cells} Cells, {icon_grid.num_edges} Edges, {icon_grid.num_vertices} Vertices" ) - config = definitions.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps) dtime = savepoint_diffusion_init.get_metadata("dtime").get("dtime") _log.info( f"rank={processor_props.rank}/{processor_props.comm_size}: setup: using {processor_props.comm_name} with {processor_props.comm_size} nodes" @@ -161,17 +161,17 @@ def test_parallel_diffusion( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), ], ) @pytest.mark.parametrize("ndyn_substeps", [2]) @pytest.mark.parametrize("processor_props", [True], indirect=True) def test_parallel_diffusion_multiple_steps( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, step_date_init: str, step_date_exit: str, linit: bool, @@ -198,7 +198,7 @@ def test_parallel_diffusion_multiple_steps( caplog.set_level("INFO") parallel_helpers.check_comm_size(processor_props) _log.info( - f"rank={processor_props.rank}/{processor_props.comm_size}: initializing diffusion for experiment '{definitions.Experiments.MCH_CH_R04B09}'" + f"rank={processor_props.rank}/{processor_props.comm_size}: initializing diffusion for experiment '{experiment}'" ) _log.info( f"local cells = {decomposition_info.global_index(dims.CellDim, decomposition.DecompositionInfo.EntryType.ALL).shape} " @@ -222,7 +222,7 @@ def test_parallel_diffusion_multiple_steps( stretch_factor=stretch_factor, rayleigh_damping_height=damping_height, ) - config = definitions.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps) + config = test_defs.construct_diffusion_config(experiment, ndyn_substeps=ndyn_substeps) diffusion_params = diffusion_.DiffusionParams(config) dtime = savepoint_diffusion_init.get_metadata("dtime").get("dtime") _log.info( diff --git a/model/atmosphere/diffusion/tests/diffusion/stencil_tests/test_apply_diffusion_to_w_and_compute_horizontal_gradients_for_turbulence.py b/model/atmosphere/diffusion/tests/diffusion/stencil_tests/test_apply_diffusion_to_w_and_compute_horizontal_gradients_for_turbulence.py index 4e9652ac76..9f3b47855c 100644 --- a/model/atmosphere/diffusion/tests/diffusion/stencil_tests/test_apply_diffusion_to_w_and_compute_horizontal_gradients_for_turbulence.py +++ b/model/atmosphere/diffusion/tests/diffusion/stencil_tests/test_apply_diffusion_to_w_and_compute_horizontal_gradients_for_turbulence.py @@ -16,7 +16,6 @@ from icon4py.model.common import dimension as dims from icon4py.model.common.grid import base, horizontal as h_grid from icon4py.model.common.utils.data_allocation import random_field, zero_field -from icon4py.model.testing import definitions from icon4py.model.testing.stencil_tests import StandardStaticVariants, StencilTest from .test_apply_nabla2_to_w import apply_nabla2_to_w_numpy diff --git a/model/atmosphere/diffusion/tests/diffusion/stencil_tests/test_calculate_nabla2_and_smag_coefficients_for_vn.py b/model/atmosphere/diffusion/tests/diffusion/stencil_tests/test_calculate_nabla2_and_smag_coefficients_for_vn.py index e9cd84bde4..8844151f3e 100644 --- a/model/atmosphere/diffusion/tests/diffusion/stencil_tests/test_calculate_nabla2_and_smag_coefficients_for_vn.py +++ b/model/atmosphere/diffusion/tests/diffusion/stencil_tests/test_calculate_nabla2_and_smag_coefficients_for_vn.py @@ -16,7 +16,7 @@ from icon4py.model.common import dimension as dims, type_alias as ta from icon4py.model.common.grid import base, horizontal as h_grid from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, stencil_tests +from icon4py.model.testing import stencil_tests @pytest.mark.continuous_benchmarking diff --git a/model/atmosphere/dycore/tests/dycore/integration_tests/test_solve_nonhydro.py b/model/atmosphere/dycore/tests/dycore/integration_tests/test_solve_nonhydro.py index 011800753a..041bbde9e1 100644 --- a/model/atmosphere/dycore/tests/dycore/integration_tests/test_solve_nonhydro.py +++ b/model/atmosphere/dycore/tests/dycore/integration_tests/test_solve_nonhydro.py @@ -26,7 +26,7 @@ from icon4py.model.common.grid import horizontal as h_grid, vertical as v_grid from icon4py.model.common.math import smagorinsky from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, test_utils +from icon4py.model.testing import definitions as test_defs, test_utils from .. import utils from ..fixtures import * # noqa: F403 @@ -40,7 +40,7 @@ @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.MCH_CH_R04B09]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.MCH_CH_R04B09]) def test_validate_divdamp_fields_against_savepoint_values( grid_savepoint: sb.IconGridSavepoint, savepoint_nonhydro_init: sb.IconNonHydroInitSavepoint, @@ -107,7 +107,7 @@ def test_validate_divdamp_fields_against_savepoint_values( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.MCH_CH_R04B09]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.MCH_CH_R04B09]) @pytest.mark.parametrize( "istep_init, step_date_init, substep_init, at_initial_timestep", [ @@ -144,12 +144,12 @@ def test_time_step_flags( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -178,7 +178,7 @@ def test_nonhydro_predictor_step( backend, ): caplog.set_level(logging.WARN) - config = definitions.construct_nonhydrostatic_config(experiment) + config = test_defs.construct_nonhydrostatic_config(experiment) sp = savepoint_nonhydro_init sp_exit = savepoint_nonhydro_exit nonhydro_params = solve_nh.NonHydrostaticParams(config) @@ -472,12 +472,12 @@ def test_nonhydro_predictor_step( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -508,7 +508,7 @@ def test_nonhydro_corrector_step( backend, ): caplog.set_level(logging.WARN) - config = definitions.construct_nonhydrostatic_config(experiment) + config = test_defs.construct_nonhydrostatic_config(experiment) init_savepoint = savepoint_nonhydro_init nonhydro_params = solve_nh.NonHydrostaticParams(config) vertical_config = v_grid.VerticalGridConfig( @@ -669,12 +669,12 @@ def test_nonhydro_corrector_step( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -706,7 +706,7 @@ def test_run_solve_nonhydro_single_step( backend, ): caplog.set_level(logging.WARN) - config = definitions.construct_nonhydrostatic_config(experiment) + config = test_defs.construct_nonhydrostatic_config(experiment) sp = savepoint_nonhydro_init sp_step_exit = savepoint_nonhydro_step_final @@ -803,7 +803,7 @@ def test_run_solve_nonhydro_single_step( # why is this not run for APE? @pytest.mark.embedded_remap_error @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.MCH_CH_R04B09]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.MCH_CH_R04B09]) @pytest.mark.parametrize( "istep_init, substep_init, step_date_init, istep_exit, substep_exit, step_date_exit, at_initial_timestep", [ @@ -835,7 +835,7 @@ def test_run_solve_nonhydro_multi_step( ndyn_substeps, backend, ): - config = definitions.construct_nonhydrostatic_config(experiment) + config = test_defs.construct_nonhydrostatic_config(experiment) sp = savepoint_nonhydro_init sp_step_exit = savepoint_nonhydro_step_final nonhydro_params = solve_nh.NonHydrostaticParams(config) @@ -978,7 +978,7 @@ def test_run_solve_nonhydro_multi_step( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.MCH_CH_R04B09]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.MCH_CH_R04B09]) def test_non_hydrostatic_params(savepoint_nonhydro_init): config = solve_nh.NonHydrostaticConfig() params = solve_nh.NonHydrostaticParams(config) @@ -996,12 +996,12 @@ def test_non_hydrostatic_params(savepoint_nonhydro_init): "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -1074,7 +1074,7 @@ def test_compute_perturbed_quantities_and_interpolation( icon_grid, dims.CellDim, dims.KDim, allocator=backend ) - config = definitions.construct_nonhydrostatic_config(experiment) + config = test_defs.construct_nonhydrostatic_config(experiment) igradp_method = config.igradp_method nflatlev = vertical_params.nflatlev @@ -1209,12 +1209,12 @@ def test_compute_perturbed_quantities_and_interpolation( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -1354,12 +1354,12 @@ def test_compute_interpolation_and_nonhydro_buoy( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -1438,7 +1438,7 @@ def test_compute_rho_theta_pgrad_and_update_vn( grf_tend_vn = sp_nh_init.grf_tend_vn() rho_at_edges_on_model_levels = sp_stencil_init.z_rho_e() theta_v_at_edges_on_model_levels = sp_stencil_init.z_theta_v_e() - config = definitions.construct_nonhydrostatic_config(experiment) + config = test_defs.construct_nonhydrostatic_config(experiment) primal_normal_cell_1 = grid_savepoint.primal_normal_cell_x() primal_normal_cell_2 = grid_savepoint.primal_normal_cell_y() dual_normal_cell_1 = grid_savepoint.dual_normal_cell_x() @@ -1565,12 +1565,12 @@ def test_compute_rho_theta_pgrad_and_update_vn( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -1619,7 +1619,7 @@ def test_apply_divergence_damping_and_update_vn( current_vn = sp_stencil_init.vn() next_vn = savepoint_nonhydro_init.vn_new() horizontal_gradient_of_normal_wind_divergence = sp_nh_init.z_graddiv_vn() - config = definitions.construct_nonhydrostatic_config(experiment) + config = test_defs.construct_nonhydrostatic_config(experiment) mean_cell_area = grid_savepoint.mean_cell_area() # TODO: Use serialized data ('enh_divdamp_fac' in icon) instead of computing 'interpolated_fourth_order_divdamp_factor' @@ -1720,12 +1720,12 @@ def test_apply_divergence_damping_and_update_vn( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -1900,12 +1900,12 @@ def test_compute_horizontal_velocity_quantities_and_fluxes( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -2017,12 +2017,12 @@ def test_compute_averaged_vn_and_fluxes( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -2054,7 +2054,7 @@ def test_vertically_implicit_solver_at_predictor_step( ): sp_nh_exit = savepoint_nonhydro_exit sp_stencil_init = savepoint_vertically_implicit_dycore_solver_init - config = definitions.construct_nonhydrostatic_config(experiment) + config = test_defs.construct_nonhydrostatic_config(experiment) xp = data_alloc.import_array_ns(backend) vertical_config = v_grid.VerticalGridConfig( @@ -2219,12 +2219,12 @@ def test_vertically_implicit_solver_at_predictor_step( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000", ), @@ -2267,7 +2267,7 @@ def test_vertically_implicit_solver_at_corrector_step( at_first_substep = substep_init == 0 at_last_substep = substep_exit == 0 - config = definitions.construct_nonhydrostatic_config(experiment) + config = test_defs.construct_nonhydrostatic_config(experiment) nonhydro_params = solve_nh.NonHydrostaticParams(config) diff --git a/model/atmosphere/dycore/tests/dycore/integration_tests/test_velocity_advection.py b/model/atmosphere/dycore/tests/dycore/integration_tests/test_velocity_advection.py index cacfda444c..544d4391fa 100644 --- a/model/atmosphere/dycore/tests/dycore/integration_tests/test_velocity_advection.py +++ b/model/atmosphere/dycore/tests/dycore/integration_tests/test_velocity_advection.py @@ -32,7 +32,7 @@ ) from icon4py.model.common.states import prognostic_state as prognostics from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, serialbox, test_utils +from icon4py.model.testing import definitions as test_defs, serialbox, test_utils from .. import utils from ..fixtures import * # noqa: F403 @@ -72,8 +72,8 @@ def create_vertical_params( @pytest.mark.parametrize( "experiment, step_date_init", [ - (definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000"), + (test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000"), ], ) def test_verify_velocity_init_against_savepoint( @@ -86,7 +86,7 @@ def test_verify_velocity_init_against_savepoint( model_top_height: ta.wpfloat, stretch_factor: ta.wpfloat, damping_height: ta.wpfloat, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: interpolation_state = utils.construct_interpolation_state(interpolation_savepoint) @@ -119,8 +119,8 @@ def test_verify_velocity_init_against_savepoint( @pytest.mark.parametrize( "experiment, step_date_init", [ - (definitions.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000"), + (test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000"), ], ) def test_scale_factors_by_dtime( @@ -169,16 +169,16 @@ def test_scale_factors_by_dtime( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:20.000", "2021-06-20T12:00:20.000", ), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), ], ) def test_velocity_predictor_step( @@ -324,16 +324,16 @@ def test_velocity_predictor_step( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:20.000", "2021-06-20T12:00:20.000", ), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), ], ) def test_velocity_corrector_step( @@ -457,11 +457,11 @@ def test_velocity_corrector_step( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), ], ) def test_compute_diagnostics_from_normal_wind( @@ -588,16 +588,16 @@ def test_compute_diagnostics_from_normal_wind( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:20.000", "2021-06-20T12:00:20.000", ), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), ], ) @pytest.mark.parametrize("istep_init, istep_exit", [(1, 1)]) @@ -738,16 +738,16 @@ def test_compute_advection_in_predictor_vertical_momentum( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:20.000", "2021-06-20T12:00:20.000", ), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), ], ) @pytest.mark.parametrize("istep_init, istep_exit", [(2, 2)]) @@ -883,11 +883,11 @@ def test_compute_advection_in_corrector_vertical_momentum( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), - (definitions.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), + (test_defs.Experiments.EXCLAIM_APE, "2000-01-01T00:00:02.000", "2000-01-01T00:00:02.000"), ], ) @pytest.mark.parametrize("istep_init, istep_exit", [(1, 1), (2, 2)]) diff --git a/model/atmosphere/dycore/tests/dycore/mpi_tests/test_parallel_solve_nonhydro.py b/model/atmosphere/dycore/tests/dycore/mpi_tests/test_parallel_solve_nonhydro.py index 6636ee4a24..b2d78df117 100644 --- a/model/atmosphere/dycore/tests/dycore/mpi_tests/test_parallel_solve_nonhydro.py +++ b/model/atmosphere/dycore/tests/dycore/mpi_tests/test_parallel_solve_nonhydro.py @@ -50,7 +50,7 @@ def test_run_solve_nonhydro_single_step( step_date_init: str, step_date_exit: str, substep_init: int, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, ndyn_substeps: int, icon_grid: icon.IconGrid, savepoint_nonhydro_init: serialbox.IconNonHydroInitSavepoint, diff --git a/model/atmosphere/subgrid_scale_physics/microphysics/tests/microphysics/integration_tests/test_saturation_adjustment.py b/model/atmosphere/subgrid_scale_physics/microphysics/tests/microphysics/integration_tests/test_saturation_adjustment.py index 12af8065ae..4d936e752f 100644 --- a/model/atmosphere/subgrid_scale_physics/microphysics/tests/microphysics/integration_tests/test_saturation_adjustment.py +++ b/model/atmosphere/subgrid_scale_physics/microphysics/tests/microphysics/integration_tests/test_saturation_adjustment.py @@ -17,7 +17,7 @@ from icon4py.model.common import dimension as dims from icon4py.model.common.grid import vertical as v_grid from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, test_utils +from icon4py.model.testing import definitions as test_defs, test_utils from ..fixtures import * # noqa: F403 @@ -34,7 +34,7 @@ @pytest.mark.datatest @pytest.mark.parametrize( "experiment, model_top_height", - [(definitions.Experiments.WEISMAN_KLEMP_TORUS, 30000.0)], + [(test_defs.Experiments.WEISMAN_KLEMP_TORUS, 30000.0)], ) @pytest.mark.parametrize( "date", ["2008-09-01T01:59:48.000", "2008-09-01T01:59:52.000", "2008-09-01T01:59:56.000"] diff --git a/model/atmosphere/subgrid_scale_physics/microphysics/tests/microphysics/integration_tests/test_single_moment_six_class_gscp_graupel.py b/model/atmosphere/subgrid_scale_physics/microphysics/tests/microphysics/integration_tests/test_single_moment_six_class_gscp_graupel.py index 20757bd7a1..d98390c2b8 100644 --- a/model/atmosphere/subgrid_scale_physics/microphysics/tests/microphysics/integration_tests/test_single_moment_six_class_gscp_graupel.py +++ b/model/atmosphere/subgrid_scale_physics/microphysics/tests/microphysics/integration_tests/test_single_moment_six_class_gscp_graupel.py @@ -23,7 +23,7 @@ tracer_state as tracers, ) from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, test_utils +from icon4py.model.testing import definitions as test_defs, test_utils from ..fixtures import * # noqa: F403 @@ -40,14 +40,14 @@ @pytest.mark.parametrize( "experiment, model_top_height", [ - (definitions.Experiments.WEISMAN_KLEMP_TORUS, 30000.0), + (test_defs.Experiments.WEISMAN_KLEMP_TORUS, 30000.0), ], ) @pytest.mark.parametrize( "date", ["2008-09-01T01:59:48.000", "2008-09-01T01:59:52.000", "2008-09-01T01:59:56.000"] ) def test_graupel( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, model_top_height: ta.wpfloat, date: str, *, diff --git a/model/common/tests/common/decomposition/mpi_tests/test_mpi_decomposition.py b/model/common/tests/common/decomposition/mpi_tests/test_mpi_decomposition.py index a4324fefc5..20726f9f0b 100644 --- a/model/common/tests/common/decomposition/mpi_tests/test_mpi_decomposition.py +++ b/model/common/tests/common/decomposition/mpi_tests/test_mpi_decomposition.py @@ -83,7 +83,7 @@ def test_decomposition_info_masked( download_ser_data: Any, decomposition_info: definitions.DecompositionInfo, processor_props: definitions.ProcessProperties, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: parallel_helpers.check_comm_size(processor_props, sizes=(2,)) my_rank = processor_props.rank @@ -138,7 +138,7 @@ def test_decomposition_info_local_index( caplog: Any, decomposition_info: definitions.DecompositionInfo, processor_props: definitions.ProcessProperties, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, ): caplog.set_level(logging.INFO) parallel_helpers.check_comm_size(processor_props, sizes=(2,)) @@ -328,7 +328,7 @@ def test_exchange_on_dummy_data( @pytest.mark.parametrize("processor_props", [False], indirect=True) def test_halo_exchange_for_sparse_field( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: definitions.ProcessProperties, grid_savepoint: serialbox.IconGridSavepoint, icon_grid: icon.IconGrid, diff --git a/model/common/tests/common/diagnostic_calculations/unit_tests/test_diagnostic_calculations.py b/model/common/tests/common/diagnostic_calculations/unit_tests/test_diagnostic_calculations.py index b3e6dbb257..a3ae55519f 100644 --- a/model/common/tests/common/diagnostic_calculations/unit_tests/test_diagnostic_calculations.py +++ b/model/common/tests/common/diagnostic_calculations/unit_tests/test_diagnostic_calculations.py @@ -24,7 +24,7 @@ from icon4py.model.common.interpolation.stencils import edge_2_cell_vector_rbf_interpolation as rbf from icon4py.model.common.states import diagnostic_state as diagnostics, tracer_state as tracers from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, test_utils +from icon4py.model.testing import definitions as test_defs, test_utils from icon4py.model.testing.fixtures.datatest import ( backend, data_provider, @@ -45,7 +45,7 @@ @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.JW]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.JW]) def test_diagnose_temperature( data_provider: sb.IconSerialDataProvider, icon_grid: base_grid.Grid, backend: gtx_typing.Backend ) -> None: @@ -100,7 +100,7 @@ def test_diagnose_temperature( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.JW]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.JW]) def test_diagnose_meridional_and_zonal_winds( data_provider: sb.IconSerialDataProvider, interpolation_savepoint: sb.InterpolationSavepoint, @@ -153,7 +153,7 @@ def test_diagnose_meridional_and_zonal_winds( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.JW]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.JW]) def test_diagnose_surface_pressure( data_provider: sb.IconSerialDataProvider, icon_grid: base_grid.Grid, @@ -192,7 +192,7 @@ def test_diagnose_surface_pressure( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.JW]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.JW]) def test_diagnose_pressure( data_provider: sb.IconSerialDataProvider, icon_grid: base_grid.Grid, @@ -242,7 +242,7 @@ def test_diagnose_pressure( @pytest.mark.parametrize( "experiment, model_top_height, damping_height, stretch_factor", - [(definitions.Experiments.WEISMAN_KLEMP_TORUS, 30000.0, 8000.0, 0.85)], + [(test_defs.Experiments.WEISMAN_KLEMP_TORUS, 30000.0, 8000.0, 0.85)], ) @pytest.mark.parametrize( "date", ["2008-09-01T01:59:48.000", "2008-09-01T01:59:52.000", "2008-09-01T01:59:56.000"] diff --git a/model/common/tests/common/fixtures.py b/model/common/tests/common/fixtures.py index 01b113e551..604ef68ed9 100644 --- a/model/common/tests/common/fixtures.py +++ b/model/common/tests/common/fixtures.py @@ -12,19 +12,18 @@ import gt4py.next.typing as gtx_typing import pytest +from icon4py.model.common.decomposition import definitions as decomposition from icon4py.model.common.grid import geometry, geometry_attributes, gridfile, vertical from icon4py.model.common.interpolation import interpolation_attributes, interpolation_factory from icon4py.model.common.metrics import metrics_attributes, metrics_factory -from icon4py.model.testing import serialbox +from icon4py.model.testing import definitions as test_defs, serialbox from icon4py.model.testing.definitions import construct_metrics_config from icon4py.model.testing.fixtures.datatest import ( backend, backend_like, damping_height, data_provider, - decomposition, decomposition_info, - definitions, download_ser_data, experiment, flat_height, @@ -128,7 +127,7 @@ def metrics_factory_from_savepoint( backend: gtx_typing.Backend, grid_savepoint: serialbox.IconGridSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, decomposition_info: decomposition.DecompositionInfo, processor_props: decomposition.ProcessProperties, geometry_from_savepoint: geometry.GridGeometry, diff --git a/model/common/tests/common/grid/integration_tests/test_horizontal.py b/model/common/tests/common/grid/integration_tests/test_horizontal.py index b37d42eedd..e4b847c99d 100644 --- a/model/common/tests/common/grid/integration_tests/test_horizontal.py +++ b/model/common/tests/common/grid/integration_tests/test_horizontal.py @@ -13,7 +13,7 @@ from gt4py import next as gtx from icon4py.model.common.grid import horizontal as h_grid -from icon4py.model.testing import definitions +from icon4py.model.testing import definitions as test_defs from icon4py.model.testing.fixtures import experiment from ...fixtures import * # noqa: F403 @@ -29,7 +29,7 @@ @pytest.mark.datatest @pytest.mark.parametrize("dim", utils.main_horizontal_dims()) def test_map_icon_start_end_index( - experiment: definitions.Experiment, dim: gtx.Dimension, grid_savepoint: sb.IconGridSavepoint + experiment: test_defs.ExperimentDescription, dim: gtx.Dimension, grid_savepoint: sb.IconGridSavepoint ) -> None: end_indices = grid_savepoint.end_index() start_indices = grid_savepoint.start_index() diff --git a/model/common/tests/common/grid/mpi_tests/test_parallel_icon.py b/model/common/tests/common/grid/mpi_tests/test_parallel_icon.py index d8bf542c55..f64f22c104 100644 --- a/model/common/tests/common/grid/mpi_tests/test_parallel_icon.py +++ b/model/common/tests/common/grid/mpi_tests/test_parallel_icon.py @@ -90,7 +90,7 @@ def test_start_index_end_index_local_zone_on_distributed_lam_grid( processor_props: decomposition.ProcessProperties, dim: gtx.Dimension, icon_grid: base_grid.Grid, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: parallel_helpers.check_comm_size(processor_props) domain = h_grid.domain(dim)(h_grid.Zone.LOCAL) @@ -162,7 +162,7 @@ def test_start_index_end_index_halo_zones_on_distributed_lam_grid( dim: gtx.Dimension, zone: h_grid.Zone, icon_grid: base_grid.Grid, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, level: int, ) -> None: parallel_helpers.check_comm_size(processor_props) diff --git a/model/common/tests/common/grid/unit_tests/test_geometry.py b/model/common/tests/common/grid/unit_tests/test_geometry.py index f918de9210..f7765c1e5f 100644 --- a/model/common/tests/common/grid/unit_tests/test_geometry.py +++ b/model/common/tests/common/grid/unit_tests/test_geometry.py @@ -24,7 +24,7 @@ from icon4py.model.common.grid.geometry import as_sparse_field from icon4py.model.common.math import helpers as math_helpers from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, grid_utils, test_utils +from icon4py.model.testing import definitions as test_defs, grid_utils, test_utils from icon4py.model.testing.fixtures import ( backend, data_provider, @@ -45,7 +45,7 @@ @pytest.mark.datatest def test_geometry_raises_for_unknown_field( - backend: gtx_typing.Backend, experiment: definitions.Experiment + backend: gtx_typing.Backend, experiment: test_defs.ExperimentDescription ) -> None: geometry = grid_utils.get_grid_geometry(backend, experiment) with pytest.raises(ValueError) as e: @@ -57,16 +57,16 @@ def test_geometry_raises_for_unknown_field( @pytest.mark.parametrize( "experiment, rtol", [ - (definitions.Experiments.MCH_CH_R04B09, 1e-7), - (definitions.Experiments.EXCLAIM_APE, 3e-12), - (definitions.Experiments.GAUSS3D, 1e-13), + (test_defs.Experiments.MCH_CH_R04B09, 1e-7), + (test_defs.Experiments.EXCLAIM_APE, 3e-12), + (test_defs.Experiments.GAUSS3D, 1e-13), ], ) @pytest.mark.datatest def test_edge_control_area( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, rtol: float, ) -> None: expected = grid_savepoint.edge_areas() @@ -79,7 +79,7 @@ def test_edge_control_area( def test_coriolis_parameter( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: geometry_source = grid_utils.get_grid_geometry(backend, experiment) expected = grid_savepoint.f_e() @@ -92,7 +92,7 @@ def test_coriolis_parameter( def test_compute_edge_length( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: geometry_source = grid_utils.get_grid_geometry(backend, experiment) expected = grid_savepoint.primal_edge_length() @@ -104,7 +104,7 @@ def test_compute_edge_length( def test_compute_inverse_edge_length( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: expected = grid_savepoint.inverse_primal_edge_lengths() geometry_source = grid_utils.get_grid_geometry(backend, experiment) @@ -117,7 +117,7 @@ def test_compute_inverse_edge_length( def test_compute_dual_edge_length( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) @@ -130,7 +130,7 @@ def test_compute_dual_edge_length( def test_compute_inverse_dual_edge_length( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) expected = grid_savepoint.inv_dual_edge_length() @@ -145,16 +145,16 @@ def test_compute_inverse_dual_edge_length( @pytest.mark.parametrize( "experiment, rtol", [ - (definitions.Experiments.MCH_CH_R04B09, 5e-10), - (definitions.Experiments.EXCLAIM_APE, 1e-12), - (definitions.Experiments.GAUSS3D, 1e-14), + (test_defs.Experiments.MCH_CH_R04B09, 5e-10), + (test_defs.Experiments.EXCLAIM_APE, 1e-12), + (test_defs.Experiments.GAUSS3D, 1e-14), ], ) @pytest.mark.datatest def test_compute_inverse_vertex_vertex_length( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, rtol: float, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) @@ -175,7 +175,7 @@ def test_compute_inverse_vertex_vertex_length( def test_compute_coordinates_of_edge_tangent_and_normal( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) x_normal = grid_geometry.get(attrs.EDGE_NORMAL_X) @@ -203,7 +203,7 @@ def test_compute_coordinates_of_edge_tangent_and_normal( def test_compute_primal_normals( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) primal_normal_u = grid_geometry.get(attrs.EDGE_NORMAL_U) @@ -224,7 +224,7 @@ def test_compute_primal_normals( def test_tangent_orientation( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) result = grid_geometry.get(attrs.TANGENT_ORIENTATION) @@ -237,7 +237,7 @@ def test_tangent_orientation( def test_cell_area( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) result = grid_geometry.get(attrs.CELL_AREA) @@ -250,7 +250,7 @@ def test_cell_area( def test_primal_normal_cell( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) primal_normal_cell_u_ref = grid_savepoint.primal_normal_cell_x().asnumpy() @@ -270,7 +270,7 @@ def test_primal_normal_cell( def test_dual_normal_cell( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) dual_normal_cell_u_ref = grid_savepoint.dual_normal_cell_x().asnumpy() @@ -286,7 +286,7 @@ def test_dual_normal_cell( def test_primal_normal_vert( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) primal_normal_vert_u_ref = grid_savepoint.primal_normal_vert_x().asnumpy() @@ -306,7 +306,7 @@ def test_primal_normal_vert( def test_dual_normal_vert( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) dual_normal_vert_u_ref = grid_savepoint.dual_normal_vert_x().asnumpy() @@ -322,7 +322,7 @@ def test_dual_normal_vert( def test_cartesian_centers_edge( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) grid = grid_geometry.grid @@ -361,7 +361,7 @@ def test_cartesian_centers_edge( def test_cartesian_centers_cell( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) grid = grid_geometry.grid @@ -400,7 +400,7 @@ def test_cartesian_centers_cell( def test_vertex( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: grid_geometry = grid_utils.get_grid_geometry(backend, experiment) grid = grid_geometry.grid @@ -452,7 +452,7 @@ def test_sparse_fields_creator() -> None: @pytest.mark.datatest def test_create_auxiliary_orientation_coordinates( - backend: gtx_typing.Backend, experiment: definitions.Experiment + backend: gtx_typing.Backend, experiment: test_defs.ExperimentDescription ) -> None: gm = grid_utils.get_grid_manager_from_identifier( experiment.grid, @@ -517,7 +517,7 @@ def test_create_auxiliary_orientation_coordinates( def test_geometry_mean_fields( backend: gtx_typing.Backend, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, attr_name: str, ) -> None: assert hasattr(experiment, "name") diff --git a/model/common/tests/common/grid/unit_tests/test_grid_manager.py b/model/common/tests/common/grid/unit_tests/test_grid_manager.py index c809414e77..b5ba4d8449 100644 --- a/model/common/tests/common/grid/unit_tests/test_grid_manager.py +++ b/model/common/tests/common/grid/unit_tests/test_grid_manager.py @@ -29,7 +29,7 @@ vertical as v_grid, ) from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, definitions as test_defs, grid_utils, test_utils +from icon4py.model.testing import definitions as test_defs, grid_utils, test_utils if typing.TYPE_CHECKING: @@ -70,7 +70,7 @@ @pytest.mark.with_netcdf def test_grid_manager_eval_v2e( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -97,7 +97,7 @@ def test_grid_manager_eval_v2e( @pytest.mark.parametrize("dim", [dims.CellDim, dims.EdgeDim, dims.VertexDim]) def test_grid_manager_refin_ctrl( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, dim: gtx.Dimension, backend: gtx_typing.Backend, ) -> None: @@ -116,7 +116,7 @@ def test_grid_manager_refin_ctrl( @pytest.mark.with_netcdf def test_grid_manager_eval_v2c( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -171,7 +171,7 @@ def _reset_invalid_index(index_array: np.ndarray) -> None: @pytest.mark.with_netcdf def test_grid_manager_eval_e2v( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -194,7 +194,7 @@ def has_invalid_index(ar: np.ndarray) -> np.bool_: @pytest.mark.with_netcdf def test_grid_manager_eval_e2c( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -211,7 +211,7 @@ def test_grid_manager_eval_e2c( @pytest.mark.with_netcdf def test_grid_manager_eval_c2e( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -231,7 +231,7 @@ def test_grid_manager_eval_c2e( @pytest.mark.with_netcdf def test_grid_manager_eval_c2e2c( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -245,7 +245,7 @@ def test_grid_manager_eval_c2e2c( @pytest.mark.with_netcdf def test_grid_manager_eval_c2e2cO( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -261,7 +261,7 @@ def test_grid_manager_eval_c2e2cO( @pytest.mark.with_netcdf def test_grid_manager_eval_e2c2e( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -286,7 +286,7 @@ def test_grid_manager_eval_e2c2e( @pytest.mark.with_netcdf def test_grid_manager_eval_e2c2v( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -306,7 +306,7 @@ def test_grid_manager_eval_e2c2v( @pytest.mark.with_netcdf def test_grid_manager_eval_c2v( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -315,11 +315,11 @@ def test_grid_manager_eval_c2v( @pytest.mark.parametrize( - "grid_descriptor", [definitions.Grids.R02B04_GLOBAL, definitions.Grids.MCH_CH_R04B09_DSL] + "grid_descriptor", [test_defs.Grids.R02B04_GLOBAL, test_defs.Grids.MCH_CH_R04B09_DSL] ) @pytest.mark.with_netcdf def test_grid_manager_grid_size( - backend: gtx_typing.Backend, grid_descriptor: definitions.GridDescription + backend: gtx_typing.Backend, grid_descriptor: test_defs.GridDescription ) -> None: grid = utils.run_grid_manager(grid_descriptor, keep_skip_values=True, backend=backend).grid assert grid_descriptor.params.num_cells == grid.size[dims.CellDim] @@ -370,12 +370,12 @@ def test_gt4py_transform_offset_by_1_where_valid(size: int) -> None: @pytest.mark.parametrize( "grid_descriptor, global_num_cells", [ - (definitions.Grids.R02B04_GLOBAL, definitions.Grids.R02B04_GLOBAL.params.num_cells), - (definitions.Grids.MCH_CH_R04B09_DSL, MCH_CH_RO4B09_GLOBAL_NUM_CELLS), + (test_defs.Grids.R02B04_GLOBAL, test_defs.Grids.R02B04_GLOBAL.params.num_cells), + (test_defs.Grids.MCH_CH_R04B09_DSL, MCH_CH_RO4B09_GLOBAL_NUM_CELLS), ], ) def test_grid_manager_grid_level_and_root( - grid_descriptor: definitions.GridDescription, global_num_cells: int, backend: gtx_typing.Backend + grid_descriptor: test_defs.GridDescription, global_num_cells: int, backend: gtx_typing.Backend ) -> None: assert ( global_num_cells @@ -389,11 +389,11 @@ def test_grid_manager_grid_level_and_root( @pytest.mark.with_netcdf @pytest.mark.parametrize( "experiment", - [definitions.Experiments.JW], + [test_defs.Experiments.JW], ) def test_grid_manager_eval_c2e2c2e( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid @@ -411,7 +411,7 @@ def test_grid_manager_eval_c2e2c2e( @pytest.mark.parametrize("dim", utils.main_horizontal_dims()) def test_grid_manager_start_end_index_compare_with_serialized_data( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, dim: gtx.Dimension, backend: gtx_typing.Backend, ) -> None: @@ -419,7 +419,7 @@ def test_grid_manager_start_end_index_compare_with_serialized_data( grid = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend).grid for domain in h_grid.get_domains_for_dim(dim): - if not (experiment == definitions.Experiments.EXCLAIM_APE and domain.dim == dims.EdgeDim): + if not (experiment == test_defs.Experiments.EXCLAIM_APE and domain.dim == dims.EdgeDim): # serialized start indices for EdgeDim are all zero assert grid.start_index(domain) == serialized_grid.start_index( domain @@ -435,7 +435,7 @@ def test_grid_manager_start_end_index_compare_with_serialized_data( @pytest.mark.datatest def test_read_geometry_fields( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: manager = utils.run_grid_manager(experiment.grid, keep_skip_values=True, backend=backend) @@ -452,7 +452,7 @@ def test_read_geometry_fields( @pytest.mark.parametrize("dim", (dims.CellDim, dims.EdgeDim, dims.VertexDim)) def test_coordinates( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, dim: gtx.Dimension, backend: gtx_typing.Backend, ) -> None: @@ -466,7 +466,7 @@ def test_coordinates( @pytest.mark.datatest def test_tangent_orientation( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: expected = grid_savepoint.tangent_orientation() @@ -480,7 +480,7 @@ def test_tangent_orientation( @pytest.mark.datatest def test_edge_orientation_on_vertex( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: expected = grid_savepoint.vertex_edge_orientation() @@ -494,7 +494,7 @@ def test_edge_orientation_on_vertex( @pytest.mark.datatest def test_dual_area( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: expected = grid_savepoint.vertex_dual_area() @@ -507,7 +507,7 @@ def test_dual_area( @pytest.mark.datatest def test_edge_cell_distance( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: expected = grid_savepoint.edge_cell_length() @@ -523,7 +523,7 @@ def test_edge_cell_distance( @pytest.mark.datatest def test_cell_normal_orientation( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: expected = grid_savepoint.edge_orientation() @@ -537,7 +537,7 @@ def test_cell_normal_orientation( @pytest.mark.datatest def test_edge_vertex_distance( grid_savepoint: serialbox.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: expected = grid_savepoint.edge_vert_length() @@ -553,11 +553,11 @@ def test_edge_vertex_distance( @pytest.mark.parametrize( "grid_descriptor, expected", [ - (definitions.Grids.MCH_CH_R04B09_DSL, True), - (definitions.Grids.R02B04_GLOBAL, False), + (test_defs.Grids.MCH_CH_R04B09_DSL, True), + (test_defs.Grids.R02B04_GLOBAL, False), ], ) -def test_limited_area_on_grid(grid_descriptor: definitions.GridDescription, expected: bool) -> None: +def test_limited_area_on_grid(grid_descriptor: test_defs.GridDescription, expected: bool) -> None: grid = utils.run_grid_manager(grid_descriptor, keep_skip_values=True, backend=None).grid assert expected == grid.limited_area @@ -566,7 +566,7 @@ def test_limited_area_on_grid(grid_descriptor: definitions.GridDescription, expe @pytest.mark.parametrize("dim", utils.horizontal_dims()) def test_decomposition_info_single_rank( dim: gtx.Dimension, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, grid_savepoint: serialbox.IconGridSavepoint, backend: gtx_typing.Backend, ) -> None: diff --git a/model/common/tests/common/grid/unit_tests/test_gridfile.py b/model/common/tests/common/grid/unit_tests/test_gridfile.py index b003925830..11ddb5c03d 100644 --- a/model/common/tests/common/grid/unit_tests/test_gridfile.py +++ b/model/common/tests/common/grid/unit_tests/test_gridfile.py @@ -15,7 +15,7 @@ from icon4py.model.common import dimension as dims from icon4py.model.common.grid import gridfile -from icon4py.model.testing import definitions, grid_utils as gridtest_utils +from icon4py.model.testing import definitions as test_defs, grid_utils as gridtest_utils from icon4py.model.testing.fixtures import ( backend, data_provider, @@ -32,7 +32,7 @@ @pytest.mark.with_netcdf def test_grid_file_dimension() -> None: - grid_descriptor = definitions.Grids.R02B04_GLOBAL + grid_descriptor = test_defs.Grids.R02B04_GLOBAL global_grid_file = str(gridtest_utils.resolve_full_grid_file_name(grid_descriptor)) parser = gridfile.GridFile(global_grid_file, offset_transformation=gridfile.NoTransformation()) try: @@ -58,7 +58,7 @@ def test_grid_file_dimension() -> None: @pytest.mark.datatest @pytest.mark.with_netcdf def test_grid_file_vertex_cell_edge_dimensions( - experiment: definitions.Experiment, grid_savepoint: serialbox.IconGridSavepoint + experiment: test_defs.ExperimentDescription, grid_savepoint: serialbox.IconGridSavepoint ) -> None: file = gridtest_utils.resolve_full_grid_file_name(experiment.grid) parser = gridfile.GridFile(str(file), gridfile.ToZeroBasedIndexTransformation()) diff --git a/model/common/tests/common/grid/unit_tests/test_icon.py b/model/common/tests/common/grid/unit_tests/test_icon.py index 546b6bfebc..77a7470214 100644 --- a/model/common/tests/common/grid/unit_tests/test_icon.py +++ b/model/common/tests/common/grid/unit_tests/test_icon.py @@ -19,7 +19,7 @@ from icon4py.model.common import constants, dimension as dims, model_backends from icon4py.model.common.grid import base, gridfile, horizontal as h_grid, icon from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, grid_utils as gridtest_utils +from icon4py.model.testing import definitions as test_defs, grid_utils as gridtest_utils from icon4py.model.testing.fixtures import ( backend, cpu_allocator, @@ -42,15 +42,15 @@ @pytest.fixture(scope="module") -def experiment() -> definitions.Experiment: +def experiment() -> test_defs.ExperimentDescription: """The module uses hard-coded references for the MCH_CH_R04B09 experiment.""" - return definitions.Experiments.MCH_CH_R04B09 + return test_defs.Experiments.MCH_CH_R04B09 @functools.cache def grid_from_limited_area_grid_file() -> icon.IconGrid: return gridtest_utils.get_grid_manager_from_experiment( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, keep_skip_values=True, allocator=model_backends.get_allocator(None), ).grid @@ -180,11 +180,11 @@ def test_grid_size(icon_grid: base_grid.Grid) -> None: @pytest.mark.parametrize( "grid_descriptor", - (definitions.Grids.MCH_CH_R04B09_DSL, definitions.Grids.R02B04_GLOBAL), + (test_defs.Grids.MCH_CH_R04B09_DSL, test_defs.Grids.R02B04_GLOBAL), ) @pytest.mark.parametrize("offset", (utils.horizontal_offsets()), ids=lambda x: x.value) def test_when_keep_skip_value_then_neighbor_table_matches_config( - grid_descriptor: definitions.GridDescription, + grid_descriptor: test_defs.GridDescription, offset: gtx.FieldOffset, backend: gtx_typing.Backend, ) -> None: @@ -204,11 +204,11 @@ def test_when_keep_skip_value_then_neighbor_table_matches_config( @pytest.mark.parametrize( "grid_descriptor", - (definitions.Grids.MCH_CH_R04B09_DSL, definitions.Grids.R02B04_GLOBAL), + (test_defs.Grids.MCH_CH_R04B09_DSL, test_defs.Grids.R02B04_GLOBAL), ) @pytest.mark.parametrize("dim", (utils.local_dims())) def test_when_replace_skip_values_then_only_pentagon_points_remain( - grid_descriptor: definitions.GridDescription, + grid_descriptor: test_defs.GridDescription, dim: gtx.Dimension, backend: gtx_typing.Backend, ) -> None: @@ -351,7 +351,7 @@ def test_grid_shape_fail(geometry_type: base.GeometryType, grid_root: int, grid_ "grid_descriptor, geometry_type, subdivision, radius, domain_length, domain_height, global_num_cells, num_cells, characteristic_length", [ ( - definitions.Grids.R02B04_GLOBAL, + test_defs.Grids.R02B04_GLOBAL, base.GeometryType.ICOSAHEDRON, icon.GridSubdivision(root=2, level=4), constants.EARTH_RADIUS, @@ -362,7 +362,7 @@ def test_grid_shape_fail(geometry_type: base.GeometryType, grid_root: int, grid_ 157817.27689721118, ), ( - definitions.Grids.R02B07_GLOBAL, + test_defs.Grids.R02B07_GLOBAL, base.GeometryType.ICOSAHEDRON, icon.GridSubdivision(root=2, level=7), constants.EARTH_RADIUS, @@ -373,7 +373,7 @@ def test_grid_shape_fail(geometry_type: base.GeometryType, grid_root: int, grid_ 19727.55141796687, ), ( - definitions.Grids.R19_B07_MCH_LOCAL, + test_defs.Grids.R19_B07_MCH_LOCAL, base.GeometryType.ICOSAHEDRON, icon.GridSubdivision(root=19, level=7), constants.EARTH_RADIUS, @@ -384,7 +384,7 @@ def test_grid_shape_fail(geometry_type: base.GeometryType, grid_root: int, grid_ 2029.555708750239, ), ( - definitions.Grids.MCH_OPR_R04B07_DOMAIN01, + test_defs.Grids.MCH_OPR_R04B07_DOMAIN01, base.GeometryType.ICOSAHEDRON, icon.GridSubdivision(root=4, level=7), constants.EARTH_RADIUS, @@ -395,7 +395,7 @@ def test_grid_shape_fail(geometry_type: base.GeometryType, grid_root: int, grid_ 9379.079256436624, ), ( - definitions.Grids.MCH_OPR_R19B08_DOMAIN01, + test_defs.Grids.MCH_OPR_R19B08_DOMAIN01, base.GeometryType.ICOSAHEDRON, icon.GridSubdivision(root=19, level=8), constants.EARTH_RADIUS, @@ -406,7 +406,7 @@ def test_grid_shape_fail(geometry_type: base.GeometryType, grid_root: int, grid_ 1014.8736406119558, ), ( - definitions.Grids.MCH_CH_R04B09_DSL, + test_defs.Grids.MCH_CH_R04B09_DSL, base.GeometryType.ICOSAHEDRON, icon.GridSubdivision(root=4, level=9), constants.EARTH_RADIUS, @@ -417,7 +417,7 @@ def test_grid_shape_fail(geometry_type: base.GeometryType, grid_root: int, grid_ 2501.209495453326, ), ( - definitions.Grids.TORUS_100X116_1000M, + test_defs.Grids.TORUS_100X116_1000M, base.GeometryType.TORUS, None, None, @@ -428,7 +428,7 @@ def test_grid_shape_fail(geometry_type: base.GeometryType, grid_root: int, grid_ 658.0370064762462, ), ( - definitions.Grids.TORUS_50000x5000, + test_defs.Grids.TORUS_50000x5000, base.GeometryType.TORUS, None, None, @@ -441,7 +441,7 @@ def test_grid_shape_fail(geometry_type: base.GeometryType, grid_root: int, grid_ ], ) def test_global_grid_params_from_grid_manager( - grid_descriptor: definitions.GridDescription, + grid_descriptor: test_defs.GridDescription, backend: gtx_typing.Backend, geometry_type: base.GeometryType, subdivision: icon.GridSubdivision, diff --git a/model/common/tests/common/grid/unit_tests/test_topography.py b/model/common/tests/common/grid/unit_tests/test_topography.py index 0ed305d658..96f2ef72f0 100644 --- a/model/common/tests/common/grid/unit_tests/test_topography.py +++ b/model/common/tests/common/grid/unit_tests/test_topography.py @@ -13,7 +13,7 @@ from icon4py.model.common.grid import topography as topo from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, test_utils +from icon4py.model.testing import test_utils from icon4py.model.testing.fixtures import * # noqa: F403 from ... import utils diff --git a/model/common/tests/common/grid/unit_tests/test_vertical.py b/model/common/tests/common/grid/unit_tests/test_vertical.py index 78bbeef5b5..bc08837f13 100644 --- a/model/common/tests/common/grid/unit_tests/test_vertical.py +++ b/model/common/tests/common/grid/unit_tests/test_vertical.py @@ -17,7 +17,7 @@ from icon4py.model.common import dimension as dims, type_alias as ta from icon4py.model.common.grid import vertical as v_grid from icon4py.model.common.utils import data_allocation as data_alloc, device_utils -from icon4py.model.testing import definitions, test_utils +from icon4py.model.testing import definitions as test_defs, test_utils from icon4py.model.testing.fixtures import ( backend, damping_height, @@ -103,7 +103,7 @@ def test_damping_layer_calculation_from_icon_input( @pytest.mark.datatest def test_grid_size( - experiment: definitions.Experiment, grid_savepoint: sb.IconGridSavepoint + experiment: test_defs.ExperimentDescription, grid_savepoint: sb.IconGridSavepoint ) -> None: config = v_grid.VerticalGridConfig(num_levels=grid_savepoint.num(dims.KDim)) vertical_grid = v_grid.VerticalGrid( @@ -154,7 +154,7 @@ def configure_vertical_grid( @pytest.mark.datatest @pytest.mark.parametrize( "experiment, expected_moist_level", - [(definitions.Experiments.MCH_CH_R04B09, 0), (definitions.Experiments.EXCLAIM_APE, 25)], + [(test_defs.Experiments.MCH_CH_R04B09, 0), (test_defs.Experiments.EXCLAIM_APE, 25)], ) def test_moist_level_calculation( grid_savepoint: sb.IconGridSavepoint, expected_moist_level: int @@ -210,7 +210,7 @@ def test_grid_index_top( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.EXCLAIM_APE]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.EXCLAIM_APE]) @pytest.mark.parametrize("dim", [dims.KDim, dims.KHalfDim]) @pytest.mark.parametrize("offset", offsets()) def test_grid_index_damping( @@ -227,7 +227,7 @@ def test_grid_index_damping( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.EXCLAIM_APE]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.EXCLAIM_APE]) @pytest.mark.parametrize("dim", [dims.KDim, dims.KHalfDim]) @pytest.mark.parametrize("offset", offsets()) def test_grid_index_moist( @@ -244,7 +244,7 @@ def test_grid_index_moist( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.EXCLAIM_APE]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.EXCLAIM_APE]) @pytest.mark.parametrize("dim", [dims.KDim, dims.KHalfDim]) @pytest.mark.parametrize("offset", offsets()) def test_grid_index_flat( @@ -263,13 +263,13 @@ def test_grid_index_flat( @pytest.mark.datatest @pytest.mark.parametrize( "experiment", - [definitions.Experiments.MCH_CH_R04B09, definitions.Experiments.EXCLAIM_APE], + [test_defs.Experiments.MCH_CH_R04B09, test_defs.Experiments.EXCLAIM_APE], ) @pytest.mark.parametrize("dim", [dims.KDim, dims.KHalfDim]) @pytest.mark.parametrize("offset", offsets()) def test_grid_index_bottom( grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, dim: gtx.Dimension, offset: int, ) -> None: @@ -281,13 +281,13 @@ def test_grid_index_bottom( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.EXCLAIM_APE]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.EXCLAIM_APE]) @pytest.mark.parametrize("zone", vertical_zones()) @pytest.mark.parametrize("dim", [dims.KDim, dims.KHalfDim]) @pytest.mark.parametrize("offset", offsets()) def test_grid_index_raises_if_index_above_num_levels( grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, zone: v_grid.Zone, dim: gtx.Dimension, offset: int, @@ -301,13 +301,13 @@ def test_grid_index_raises_if_index_above_num_levels( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.EXCLAIM_APE]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.EXCLAIM_APE]) @pytest.mark.parametrize("zone", vertical_zones()) @pytest.mark.parametrize("dim", [dims.KDim, dims.KHalfDim]) @pytest.mark.parametrize("offset", offsets()) def test_grid_index_raises_if_index_below_zero( grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, zone: v_grid.Zone, dim: gtx.Dimension, offset: int, @@ -355,9 +355,9 @@ def test_vct_a_vct_b_calculation_from_icon_input( @pytest.mark.parametrize( "experiment", [ - definitions.Experiments.MCH_CH_R04B09, - definitions.Experiments.GAUSS3D, - definitions.Experiments.EXCLAIM_APE, + test_defs.Experiments.MCH_CH_R04B09, + test_defs.Experiments.GAUSS3D, + test_defs.Experiments.EXCLAIM_APE, ], ) def test_compute_vertical_coordinate( @@ -366,7 +366,7 @@ def test_compute_vertical_coordinate( topography_savepoint: sb.TopographySavepoint, interpolation_savepoint: sb.InterpolationSavepoint, icon_grid: base_grid.Grid, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, model_top_height: float, backend: gtx_typing.Backend, ) -> None: @@ -377,7 +377,7 @@ def test_compute_vertical_coordinate( specific_values = ( {"rayleigh_damping_height": 12500.0, "stretch_factor": 0.65, "lowest_layer_thickness": 20.0} - if experiment == definitions.Experiments.MCH_CH_R04B09 + if experiment == test_defs.Experiments.MCH_CH_R04B09 else { "rayleigh_damping_height": 45000.0, "stretch_factor": 1.0, @@ -401,9 +401,9 @@ def test_compute_vertical_coordinate( assert vertical_geometry.nflatlev == grid_savepoint.nflatlev() topography = None - if experiment in (definitions.Experiments.MCH_CH_R04B09, definitions.Experiments.GAUSS3D): + if experiment in (test_defs.Experiments.MCH_CH_R04B09, test_defs.Experiments.GAUSS3D): topography = topography_savepoint.topo_c() - elif experiment == definitions.Experiments.EXCLAIM_APE: + elif experiment == test_defs.Experiments.EXCLAIM_APE: topography = data_alloc.zero_field( icon_grid, dims.CellDim, allocator=backend, dtype=ta.wpfloat ) diff --git a/model/common/tests/common/grid/utils.py b/model/common/tests/common/grid/utils.py index a36bcfa610..f584b454c4 100644 --- a/model/common/tests/common/grid/utils.py +++ b/model/common/tests/common/grid/utils.py @@ -16,7 +16,7 @@ from icon4py.model.common import dimension as dims, model_backends from icon4py.model.common.grid import grid_manager as gm, horizontal as h_grid from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, grid_utils as gridtest_utils +from icon4py.model.testing import definitions as test_defs, grid_utils as gridtest_utils managers: dict[str, gm.GridManager] = {} @@ -74,7 +74,7 @@ def _domain(dim: gtx.Dimension, zones: Iterator[h_grid.Zone]) -> Iterator[h_grid def run_grid_manager( - grid: definitions.GridDescription, + grid: test_defs.GridDescription, keep_skip_values: bool, backend: gtx_typing.Backend | None, ) -> gm.GridManager: @@ -95,19 +95,19 @@ def run_grid_manager( GRID_REFERENCE_VALUES = { - definitions.Experiments.EXCLAIM_APE.name: { + test_defs.Experiments.EXCLAIM_APE.name: { "mean_edge_length": 240221.1036647776, "mean_dual_edge_length": 138710.63736114913, "mean_cell_area": 24906292887.251026, "mean_dual_area": 49802858653.68937, }, - definitions.Experiments.MCH_CH_R04B09.name: { + test_defs.Experiments.MCH_CH_R04B09.name: { "mean_edge_length": 3803.019140934253, "mean_dual_edge_length": 2180.911493355989, "mean_cell_area": 6256048.940145881, "mean_dual_area": 12259814.063180268, }, - definitions.Experiments.GAUSS3D.name: { + test_defs.Experiments.GAUSS3D.name: { "mean_edge_length": 757.5757575757576, "mean_dual_edge_length": 437.3865675678984, "mean_cell_area": 248515.09520903317, diff --git a/model/common/tests/common/interpolation/mpi_tests/test_parallel_interpolation.py b/model/common/tests/common/interpolation/mpi_tests/test_parallel_interpolation.py index 57f0d4a040..7bb1b8ef18 100644 --- a/model/common/tests/common/interpolation/mpi_tests/test_parallel_interpolation.py +++ b/model/common/tests/common/interpolation/mpi_tests/test_parallel_interpolation.py @@ -68,7 +68,7 @@ def test_distributed_interpolation_with_custom_tolerance( backend: gtx_typing.Backend, interpolation_savepoint: sb.InterpolationSavepoint, grid_savepoint: sb.IconGridSavepoint, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, decomposition_info: decomposition.DecompositionInfo, interpolation_factory_from_savepoint: interpolation_factory.InterpolationFieldsFactory, @@ -107,7 +107,7 @@ def test_distributed_interpolation_fields( backend: gtx_typing.Backend, interpolation_savepoint: sb.InterpolationSavepoint, grid_savepoint: sb.IconGridSavepoint, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, decomposition_info: decomposition.DecompositionInfo, interpolation_factory_from_savepoint: interpolation_factory.InterpolationFieldsFactory, @@ -130,7 +130,7 @@ def test_distributed_interpolation_grg( backend: gtx_typing.Backend, interpolation_savepoint: sb.InterpolationSavepoint, grid_savepoint: sb.IconGridSavepoint, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, decomposition_info: decomposition.DecompositionInfo, interpolation_factory_from_savepoint: interpolation_factory.InterpolationFieldsFactory, @@ -164,7 +164,7 @@ def test_distributed_interpolation_geofac_rot( backend: gtx_typing.Backend, interpolation_savepoint: sb.InterpolationSavepoint, grid_savepoint: sb.IconGridSavepoint, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, decomposition_info: decomposition.DecompositionInfo, interpolation_factory_from_savepoint: interpolation_factory.InterpolationFieldsFactory, @@ -200,7 +200,7 @@ def test_distributed_interpolation_rbf( backend: gtx_typing.Backend, interpolation_savepoint: sb.InterpolationSavepoint, grid_savepoint: sb.IconGridSavepoint, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, decomposition_info: decomposition.DecompositionInfo, interpolation_factory_from_savepoint: interpolation_factory.InterpolationFieldsFactory, @@ -226,7 +226,7 @@ def test_distributed_interpolation_lsq_pseudoinv( backend: gtx_typing.Backend, interpolation_savepoint: sb.InterpolationSavepoint, grid_savepoint: sb.IconGridSavepoint, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, decomposition_info: decomposition.DecompositionInfo, interpolation_factory_from_savepoint: interpolation_factory.InterpolationFieldsFactory, diff --git a/model/common/tests/common/interpolation/unit_tests/test_interpolation_factory.py b/model/common/tests/common/interpolation/unit_tests/test_interpolation_factory.py index 020a1bddce..3a1f325527 100644 --- a/model/common/tests/common/interpolation/unit_tests/test_interpolation_factory.py +++ b/model/common/tests/common/interpolation/unit_tests/test_interpolation_factory.py @@ -28,7 +28,7 @@ from icon4py.model.common.utils import data_allocation as data_alloc from icon4py.model.testing import ( datatest_utils as dt_utils, - definitions, + definitions as test_defs, grid_utils as gridtest_utils, test_utils as test_helpers, ) @@ -64,7 +64,7 @@ def _get_interpolation_factory( backend: gtx_typing.Backend | None, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> interpolation_factory.InterpolationFieldsFactory: registry_key = "_".join((experiment.name, data_alloc.backend_name(backend))) factory = interpolation_factories.get(registry_key) @@ -84,7 +84,7 @@ def _get_interpolation_factory( @pytest.mark.datatest def test_factory_raises_error_on_unknown_field( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, decomposition_info: decomposition.DecompositionInfo, ) -> None: @@ -105,7 +105,7 @@ def test_factory_raises_error_on_unknown_field( @pytest.mark.datatest def test_get_c_lin_e( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = interpolation_savepoint.c_lin_e() @@ -120,7 +120,7 @@ def test_get_c_lin_e( @pytest.mark.datatest def test_get_geofac_div( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = interpolation_savepoint.geofac_div() @@ -134,7 +134,7 @@ def test_get_geofac_div( @pytest.mark.datatest def test_get_geofac_grdiv( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = interpolation_savepoint.geofac_grdiv() @@ -148,7 +148,7 @@ def test_get_geofac_grdiv( @pytest.mark.datatest def test_get_geofac_rot( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = interpolation_savepoint.geofac_rot() @@ -166,7 +166,7 @@ def test_get_geofac_rot( @pytest.mark.datatest def test_get_geofac_n2s( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = interpolation_savepoint.geofac_n2s() @@ -181,7 +181,7 @@ def test_get_geofac_n2s( @pytest.mark.datatest def test_get_geofac_grg( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = interpolation_savepoint.geofac_grg() @@ -200,7 +200,7 @@ def test_get_geofac_grg( @pytest.mark.datatest def test_get_mass_conserving_cell_average_weight( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = interpolation_savepoint.c_bln_avg() @@ -216,7 +216,7 @@ def test_get_mass_conserving_cell_average_weight( @pytest.mark.datatest def test_e_flx_avg( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = interpolation_savepoint.e_flx_avg() @@ -231,15 +231,15 @@ def test_e_flx_avg( @pytest.mark.parametrize( "experiment, rtol", [ - (definitions.Experiments.MCH_CH_R04B09, 1e-10), - (definitions.Experiments.EXCLAIM_APE, 1e-11), - (definitions.Experiments.GAUSS3D, 0), + (test_defs.Experiments.MCH_CH_R04B09, 1e-10), + (test_defs.Experiments.EXCLAIM_APE, 1e-11), + (test_defs.Experiments.GAUSS3D, 0), ], ) @pytest.mark.datatest def test_e_bln_c_s( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, rtol: float, ) -> None: @@ -255,7 +255,7 @@ def test_e_bln_c_s( @pytest.mark.datatest def test_pos_on_tplane_e_x_y( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref_1 = interpolation_savepoint.pos_on_tplane_e_x() @@ -271,7 +271,7 @@ def test_pos_on_tplane_e_x_y( @pytest.mark.datatest def test_cells_aw_verts( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = interpolation_savepoint.c_intp() @@ -287,7 +287,7 @@ def test_cells_aw_verts( @pytest.mark.datatest def test_nudgecoeffs( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = interpolation_savepoint.nudgecoeff_e() @@ -301,7 +301,7 @@ def test_nudgecoeffs( @pytest.mark.datatest def test_rbf_interpolation_coeffs_cell( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref_c1 = interpolation_savepoint.rbf_vec_coeff_c1() @@ -330,7 +330,7 @@ def test_rbf_interpolation_coeffs_cell( @pytest.mark.datatest def test_rbf_interpolation_coeffs_edge( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref_e = interpolation_savepoint.rbf_vec_coeff_e() @@ -351,7 +351,7 @@ def test_rbf_interpolation_coeffs_edge( @pytest.mark.datatest def test_rbf_interpolation_coeffs_vertex( interpolation_savepoint: serialbox.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref_v1 = interpolation_savepoint.rbf_vec_coeff_v1() diff --git a/model/common/tests/common/interpolation/unit_tests/test_interpolation_fields.py b/model/common/tests/common/interpolation/unit_tests/test_interpolation_fields.py index e33277a4bb..6cb2d13d41 100644 --- a/model/common/tests/common/interpolation/unit_tests/test_interpolation_fields.py +++ b/model/common/tests/common/interpolation/unit_tests/test_interpolation_fields.py @@ -32,7 +32,7 @@ compute_pos_on_tplane_e_x_y_torus, ) from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, serialbox as sb +from icon4py.model.testing import definitions as test_defs, serialbox as sb from icon4py.model.testing.fixtures.datatest import ( backend, data_provider, @@ -92,7 +92,7 @@ def test_compute_c_lin_e( @pytest.mark.embedded_only @pytest.mark.datatest def test_compute_geofac_div( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, grid_savepoint: sb.IconGridSavepoint, interpolation_savepoint: sb.InterpolationSavepoint, icon_grid: base_grid.Grid, @@ -117,7 +117,7 @@ def test_compute_geofac_div( @pytest.mark.embedded_only @pytest.mark.datatest def test_compute_geofac_rot( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, grid_savepoint: sb.IconGridSavepoint, interpolation_savepoint: sb.InterpolationSavepoint, icon_grid: base_grid.Grid, diff --git a/model/common/tests/common/interpolation/unit_tests/test_rbf_interpolation.py b/model/common/tests/common/interpolation/unit_tests/test_rbf_interpolation.py index c6bfb0000b..d1e63572b7 100644 --- a/model/common/tests/common/interpolation/unit_tests/test_rbf_interpolation.py +++ b/model/common/tests/common/interpolation/unit_tests/test_rbf_interpolation.py @@ -19,7 +19,7 @@ from icon4py.model.common.interpolation import rbf_interpolation as rbf from icon4py.model.common.utils import data_allocation as data_alloc from icon4py.model.testing import ( - definitions, + definitions as test_defs, grid_utils as gridtest_utils, test_utils as test_helpers, ) @@ -44,19 +44,19 @@ RBF_TOLERANCES = { dims.CellDim: { - definitions.Experiments.EXCLAIM_APE.name: 3.1e-9, - definitions.Experiments.MCH_CH_R04B09.name: 4e-2, - definitions.Experiments.GAUSS3D.name: 1e-14, + test_defs.Experiments.EXCLAIM_APE.name: 3.1e-9, + test_defs.Experiments.MCH_CH_R04B09.name: 4e-2, + test_defs.Experiments.GAUSS3D.name: 1e-14, }, dims.EdgeDim: { - definitions.Experiments.EXCLAIM_APE.name: 8e-14, - definitions.Experiments.MCH_CH_R04B09.name: 2e-9, - definitions.Experiments.GAUSS3D.name: 0, + test_defs.Experiments.EXCLAIM_APE.name: 8e-14, + test_defs.Experiments.MCH_CH_R04B09.name: 2e-9, + test_defs.Experiments.GAUSS3D.name: 0, }, dims.VertexDim: { - definitions.Experiments.EXCLAIM_APE.name: 3e-10, - definitions.Experiments.MCH_CH_R04B09.name: 3e-3, - definitions.Experiments.GAUSS3D.name: 1e-15, + test_defs.Experiments.EXCLAIM_APE.name: 3e-10, + test_defs.Experiments.MCH_CH_R04B09.name: 3e-3, + test_defs.Experiments.GAUSS3D.name: 1e-15, }, } @@ -64,7 +64,7 @@ @pytest.mark.level("unit") @pytest.mark.datatest def test_construct_rbf_matrix_offsets_tables_for_cells( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, grid_savepoint: serialbox.IconGridSavepoint, backend: gtx_typing.Backend | None, ) -> None: @@ -96,7 +96,7 @@ def test_construct_rbf_matrix_offsets_tables_for_cells( @pytest.mark.level("unit") @pytest.mark.datatest def test_construct_rbf_matrix_offsets_tables_for_edges( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, grid_savepoint: serialbox.IconGridSavepoint, backend: gtx_typing.Backend | None, ) -> None: @@ -126,7 +126,7 @@ def test_construct_rbf_matrix_offsets_tables_for_edges( @pytest.mark.level("unit") @pytest.mark.datatest def test_construct_rbf_matrix_offsets_tables_for_vertices( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, grid_savepoint: serialbox.IconGridSavepoint, backend: gtx_typing.Backend | None, ) -> None: @@ -163,7 +163,7 @@ def test_rbf_interpolation_coeffs_cell( grid_savepoint: serialbox.IconGridSavepoint, interpolation_savepoint: serialbox.IconGridSavepoint, backend: gtx_typing.Backend | None, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: geometry = gridtest_utils.get_grid_geometry(backend, experiment) grid = geometry.grid @@ -240,7 +240,7 @@ def test_rbf_interpolation_coeffs_vertex( grid_savepoint: serialbox.IconGridSavepoint, interpolation_savepoint: serialbox.IconGridSavepoint, backend: gtx_typing.Backend | None, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: geometry = gridtest_utils.get_grid_geometry(backend, experiment) grid = geometry.grid @@ -317,7 +317,7 @@ def test_rbf_interpolation_coeffs_edge( grid_savepoint: serialbox.IconGridSavepoint, interpolation_savepoint: serialbox.IconGridSavepoint, backend: gtx_typing.Backend | None, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: geometry = gridtest_utils.get_grid_geometry(backend, experiment) grid = geometry.grid diff --git a/model/common/tests/common/io/unit_tests/test_io.py b/model/common/tests/common/io/unit_tests/test_io.py index d228ba336c..a31d389b31 100644 --- a/model/common/tests/common/io/unit_tests/test_io.py +++ b/model/common/tests/common/io/unit_tests/test_io.py @@ -30,7 +30,7 @@ to_delta, ) from icon4py.model.common.states import data -from icon4py.model.testing import datatest_utils, definitions, grid_utils +from icon4py.model.testing import datatest_utils, definitions as test_defs, grid_utils from ...fixtures import test_path from .. import utils as test_io_utils @@ -146,7 +146,7 @@ def test_io_monitor_write_ugrid_file(test_path): def test_io_monitor_write_and_read_ugrid_dataset(test_path, variables): path_name = test_path.absolute().as_posix() + "/output" grid = grid_utils.get_grid_manager_from_experiment( - definitions.Experiments.EXCLAIM_APE, keep_skip_values=True, allocator=backend + test_defs.Experiments.EXCLAIM_APE, keep_skip_values=True, allocator=backend ).grid vertical_config = v_grid.VerticalGridConfig(num_levels=grid.num_levels) vertical_params = v_grid.VerticalGrid( @@ -198,7 +198,7 @@ def test_io_monitor_write_and_read_ugrid_dataset(test_path, variables): def test_fieldgroup_monitor_write_dataset_file_roll(test_path): grid = grid_utils.get_grid_manager_from_experiment( - definitions.Experiments.EXCLAIM_APE, True, backend + test_defs.Experiments.EXCLAIM_APE, True, backend ).grid vertical_config = v_grid.VerticalGridConfig(num_levels=grid.num_levels) vertical_params = v_grid.VerticalGrid( diff --git a/model/common/tests/common/io/unit_tests/test_ugrid.py b/model/common/tests/common/io/unit_tests/test_ugrid.py index d6e100ac24..6aef644247 100644 --- a/model/common/tests/common/io/unit_tests/test_ugrid.py +++ b/model/common/tests/common/io/unit_tests/test_ugrid.py @@ -17,19 +17,19 @@ extract_horizontal_coordinates, load_data_file, ) -from icon4py.model.testing import datatest_utils, definitions, grid_utils +from icon4py.model.testing import datatest_utils, definitions as test_defs, grid_utils from ...fixtures import test_path def grid_files(): grids = [ - definitions.Grids.R02B04_GLOBAL, - definitions.Grids.MCH_CH_R04B09_DSL, + test_defs.Grids.R02B04_GLOBAL, + test_defs.Grids.MCH_CH_R04B09_DSL, ] for grid in grids: - yield definitions.grids_path().joinpath(grid.name).joinpath(grid.file_name) + yield test_defs.grids_path().joinpath(grid.name).joinpath(grid.file_name) @pytest.mark.parametrize("file", grid_files()) diff --git a/model/common/tests/common/io/utils.py b/model/common/tests/common/io/utils.py index 00fcfb3b55..e7f8a3fcf3 100644 --- a/model/common/tests/common/io/utils.py +++ b/model/common/tests/common/io/utils.py @@ -14,7 +14,7 @@ from icon4py.model.common.io import utils from icon4py.model.common.states import data from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, grid_utils +from icon4py.model.testing import definitions as test_defs, grid_utils # setting backend to fieldview embedded here. @@ -22,11 +22,11 @@ UNLIMITED = None simple_grid = simple.simple_grid() -grid_file = definitions.grids_path().joinpath( - definitions.Grids.R02B04_GLOBAL.name, definitions.Grids.R02B04_GLOBAL.file_name +grid_file = test_defs.grids_path().joinpath( + test_defs.Grids.R02B04_GLOBAL.name, test_defs.Grids.R02B04_GLOBAL.file_name ) global_grid = grid_utils.get_grid_manager_from_experiment( - definitions.Experiments.EXCLAIM_APE, keep_skip_values=True, allocator=backend + test_defs.Experiments.EXCLAIM_APE, keep_skip_values=True, allocator=backend ).grid diff --git a/model/common/tests/common/metrics/mpi_tests/test_parallel_metrics.py b/model/common/tests/common/metrics/mpi_tests/test_parallel_metrics.py index b5f6f5ddf5..3dba6848be 100644 --- a/model/common/tests/common/metrics/mpi_tests/test_parallel_metrics.py +++ b/model/common/tests/common/metrics/mpi_tests/test_parallel_metrics.py @@ -69,7 +69,7 @@ def test_distributed_metrics_attrs( metrics_factory_from_savepoint: metrics_factory.MetricsFieldsFactory, attrs_name: str, metrics_name: str, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: if test_utils.is_embedded(backend) and metrics_name == "ddqz_z_half": pytest.xfail("Embedded backend does not support concat_where") @@ -121,7 +121,7 @@ def test_distributed_metrics_attrs_no_halo( metrics_factory_from_savepoint: metrics_factory.MetricsFieldsFactory, attrs_name: str, metrics_name: str, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: parallel_helpers.check_comm_size(processor_props) parallel_helpers.log_process_properties(processor_props) @@ -153,7 +153,7 @@ def test_distributed_metrics_attrs_no_halo_regional( metrics_factory_from_savepoint: metrics_factory.MetricsFieldsFactory, attrs_name: str, metrics_name: str, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: if test_utils.is_embedded(backend): # https://github.com/GridTools/gt4py/issues/1583 @@ -180,7 +180,7 @@ def test_distributed_metrics_wgtfacq_e( processor_props: decomposition.ProcessProperties, decomposition_info: decomposition.DecompositionInfo, metrics_factory_from_savepoint: metrics_factory.MetricsFieldsFactory, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: parallel_helpers.check_comm_size(processor_props) parallel_helpers.log_process_properties(processor_props) @@ -201,7 +201,7 @@ def test_distributed_metrics_nflat_gradp( processor_props: decomposition.ProcessProperties, decomposition_info: decomposition.DecompositionInfo, metrics_factory_from_savepoint: metrics_factory.MetricsFieldsFactory, - experiment: test_defs.Experiment, + experiment: test_defs.ExperimentDescription, ) -> None: parallel_helpers.check_comm_size(processor_props) parallel_helpers.log_process_properties(processor_props) diff --git a/model/common/tests/common/metrics/unit_tests/test_compute_diffusion_metrics.py b/model/common/tests/common/metrics/unit_tests/test_compute_diffusion_metrics.py index c176edc7d6..250fcc896a 100644 --- a/model/common/tests/common/metrics/unit_tests/test_compute_diffusion_metrics.py +++ b/model/common/tests/common/metrics/unit_tests/test_compute_diffusion_metrics.py @@ -24,7 +24,7 @@ compute_weighted_cell_neighbor_sum, ) from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, test_utils +from icon4py.model.testing import definitions as test_defs, test_utils from icon4py.model.testing.fixtures.datatest import ( backend, data_provider, @@ -50,7 +50,7 @@ @pytest.mark.datatest def test_compute_diffusion_mask_and_coeff( metrics_savepoint: sb.MetricSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, interpolation_savepoint: sb.InterpolationSavepoint, icon_grid: base_grid.Grid, grid_savepoint: sb.IconGridSavepoint, @@ -65,7 +65,7 @@ def test_compute_diffusion_mask_and_coeff( c2e2c = icon_grid.get_connectivity(dims.C2E2C).asnumpy() c_bln_avg = interpolation_savepoint.c_bln_avg() z_mc = metrics_savepoint.z_mc() - (_, _, _, _, _, _, _, _, thslp_zdiffu, thhgtd_zdiffu) = definitions.construct_metrics_config( + (_, _, _, _, _, _, _, _, thslp_zdiffu, thhgtd_zdiffu) = test_defs.construct_metrics_config( experiment ) cell_nudging = icon_grid.start_index(h_grid.domain(dims.CellDim)(h_grid.Zone.NUDGING)) @@ -133,7 +133,7 @@ def test_compute_diffusion_mask_and_coeff( @pytest.mark.datatest def test_compute_diffusion_intcoef_and_vertoffset( metrics_savepoint: sb.MetricSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, interpolation_savepoint: sb.InterpolationSavepoint, icon_grid: base_grid.Grid, grid_savepoint: sb.IconGridSavepoint, @@ -148,7 +148,7 @@ def test_compute_diffusion_intcoef_and_vertoffset( c2e2c = icon_grid.get_connectivity(dims.C2E2C).asnumpy() c_bln_avg = interpolation_savepoint.c_bln_avg() z_mc = metrics_savepoint.z_mc() - (_, _, _, _, _, _, _, _, thslp_zdiffu, thhgtd_zdiffu) = definitions.construct_metrics_config( + (_, _, _, _, _, _, _, _, thslp_zdiffu, thhgtd_zdiffu) = test_defs.construct_metrics_config( experiment ) cell_nudging = icon_grid.start_index(h_grid.domain(dims.CellDim)(h_grid.Zone.NUDGING)) diff --git a/model/common/tests/common/metrics/unit_tests/test_compute_zdiff_gradp_dsl.py b/model/common/tests/common/metrics/unit_tests/test_compute_zdiff_gradp_dsl.py index 1c19a7ae09..c462d40c40 100644 --- a/model/common/tests/common/metrics/unit_tests/test_compute_zdiff_gradp_dsl.py +++ b/model/common/tests/common/metrics/unit_tests/test_compute_zdiff_gradp_dsl.py @@ -17,7 +17,7 @@ from icon4py.model.common.metrics.compute_zdiff_gradp_dsl import compute_zdiff_gradp_dsl from icon4py.model.common.metrics.metric_fields import compute_flat_max_idx from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, test_utils +from icon4py.model.testing import test_utils from icon4py.model.testing.fixtures.datatest import ( backend, data_provider, diff --git a/model/common/tests/common/metrics/unit_tests/test_metric_fields.py b/model/common/tests/common/metrics/unit_tests/test_metric_fields.py index 9caf3fa81c..f1c575a2d5 100644 --- a/model/common/tests/common/metrics/unit_tests/test_metric_fields.py +++ b/model/common/tests/common/metrics/unit_tests/test_metric_fields.py @@ -17,7 +17,7 @@ from icon4py.model.common.grid import grid_refinement as refinement, horizontal from icon4py.model.common.metrics import metric_fields as mf from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, test_utils as testing_helpers +from icon4py.model.testing import definitions as test_defs, test_utils as testing_helpers from icon4py.model.testing.definitions import construct_metrics_config from icon4py.model.testing.fixtures.datatest import ( backend, @@ -137,7 +137,7 @@ def test_compute_scaling_factor_for_3d_divdamp( @pytest.mark.datatest def test_compute_rayleigh_w( icon_grid: base_grid.Grid, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, metrics_savepoint: sb.MetricSavepoint, grid_savepoint: sb.IconGridSavepoint, backend: gtx_typing.Backend, @@ -238,14 +238,14 @@ def test_compute_exner_exfac( grid_savepoint: sb.IconGridSavepoint, icon_grid: base_grid.Grid, metrics_savepoint: sb.MetricSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: horizontal_start = icon_grid.start_index(cell_domain(horizontal.Zone.LATERAL_BOUNDARY_LEVEL_2)) match experiment: - case definitions.Experiments.MCH_CH_R04B09: + case test_defs.Experiments.MCH_CH_R04B09: exner_expol = 0.333 - case definitions.Experiments.WEISMAN_KLEMP_TORUS: + case test_defs.Experiments.WEISMAN_KLEMP_TORUS: exner_expol = 0.333 case _: exner_expol = 1.0 / 3.0 @@ -288,7 +288,7 @@ def test_compute_exner_w_implicit_weight_parameter( grid_savepoint: sb.IconGridSavepoint, metrics_savepoint: sb.MetricSavepoint, interpolation_savepoint: sb.InterpolationSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> None: z_ifc = metrics_savepoint.z_ifc() @@ -346,9 +346,9 @@ def test_compute_exner_w_implicit_weight_parameter( vwind_impl_wgt_ref = metrics_savepoint.vwind_impl_wgt() dual_edge_length = grid_savepoint.dual_edge_length() match experiment: - case definitions.Experiments.MCH_CH_R04B09: + case test_defs.Experiments.MCH_CH_R04B09: vwind_offctr = 0.2 - case definitions.Experiments.WEISMAN_KLEMP_TORUS: + case test_defs.Experiments.WEISMAN_KLEMP_TORUS: vwind_offctr = 0.2 case _: vwind_offctr = 0.15 diff --git a/model/common/tests/common/metrics/unit_tests/test_metrics_factory.py b/model/common/tests/common/metrics/unit_tests/test_metrics_factory.py index 516f7d2d5a..6808304d11 100644 --- a/model/common/tests/common/metrics/unit_tests/test_metrics_factory.py +++ b/model/common/tests/common/metrics/unit_tests/test_metrics_factory.py @@ -20,7 +20,7 @@ from icon4py.model.common.metrics import metrics_attributes as attrs, metrics_factory from icon4py.model.common.utils import data_allocation as data_alloc from icon4py.model.testing import ( - definitions, + definitions as test_defs, grid_utils as gridtest_utils, serialbox, test_utils as test_helpers, @@ -44,7 +44,7 @@ def _get_metrics_factory( backend: gtx_typing.Backend | None, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, grid_savepoint: serialbox.IconGridSavepoint, topography_savepoint: serialbox.TopographySavepoint, exchange: decomposition.ExchangeRuntime = decomposition.single_node_default, @@ -113,7 +113,7 @@ def _get_metrics_factory( def test_factory_nflat_gradp( grid_savepoint: serialbox.IconGridSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: value_ref = grid_savepoint.nflat_gradp() @@ -133,7 +133,7 @@ def test_factory_z_mc( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.z_mc() @@ -153,7 +153,7 @@ def test_factory_ddqz_z_and_inverse( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: inverse_field_ref = metrics_savepoint.inv_ddqz_z_full() @@ -175,7 +175,7 @@ def test_factory_ddqz_full_e( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.ddqz_z_full_e().asnumpy() @@ -196,7 +196,7 @@ def test_factory_ddqz_z_half( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.ddqz_z_half() @@ -216,7 +216,7 @@ def test_factory_scaling_factor_for_3d_divdamp( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.scalfac_dd3d() @@ -236,7 +236,7 @@ def test_factory_rayleigh_w( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.rayleigh_w() @@ -256,7 +256,7 @@ def test_factory_coeffs_dwdz( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref_1 = metrics_savepoint.coeff1_dwdz() @@ -279,7 +279,7 @@ def test_factory_ref_mc( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref_1 = metrics_savepoint.theta_ref_mc() @@ -302,7 +302,7 @@ def test_factory_d2dexdz2_facs_mc( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref_1 = metrics_savepoint.d2dexdz2_fac1_mc() @@ -324,7 +324,7 @@ def test_factory_ddxn_z_full( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.ddxn_z_full() @@ -344,7 +344,7 @@ def test_factory_ddxt_z_full( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.ddxt_z_full().asnumpy() @@ -365,7 +365,7 @@ def test_factory_exner_w_implicit_weight_parameter( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.vwind_impl_wgt() @@ -385,7 +385,7 @@ def test_factory_exner_w_explicit_weight_parameter( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.vwind_expl_wgt() @@ -406,7 +406,7 @@ def test_factory_exner_exfac( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.exner_exfac() @@ -427,7 +427,7 @@ def test_factory_pressure_gradient_fields( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_1_ref = metrics_savepoint.pg_exdist_dsl() @@ -446,7 +446,7 @@ def test_factory_mask_prog_halo_c( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.mask_prog_halo_c() @@ -466,7 +466,7 @@ def test_factory_horizontal_mask_for_3d_divdamp( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.hmask_dd3d() @@ -488,7 +488,7 @@ def test_factory_zdiff_gradp( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: zdiff_gradp_ref = metrics_savepoint.zdiff_gradp() @@ -515,7 +515,7 @@ def test_factory_coeff_gradekin( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.coeff_gradekin() @@ -535,7 +535,7 @@ def test_factory_wgtfacq_e( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: factory = _get_metrics_factory( @@ -558,7 +558,7 @@ def test_vertical_coordinates_on_half_levels( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: factory = _get_metrics_factory( @@ -579,7 +579,7 @@ def test_compute_wgtfac_c( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: factory = _get_metrics_factory( @@ -600,7 +600,7 @@ def test_factory_compute_diffusion_mask_and_coef( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref = metrics_savepoint.zd_diffcoef() @@ -622,7 +622,7 @@ def test_factory_compute_diffusion_intcoeff_and_vertoffset( grid_savepoint: serialbox.IconGridSavepoint, metrics_savepoint: serialbox.MetricSavepoint, topography_savepoint: serialbox.TopographySavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, ) -> None: field_ref_1 = metrics_savepoint.zd_intcoef() diff --git a/model/common/tests/common/states/unit_tests/test_factory.py b/model/common/tests/common/states/unit_tests/test_factory.py index 12067e9818..aa41dd2503 100644 --- a/model/common/tests/common/states/unit_tests/test_factory.py +++ b/model/common/tests/common/states/unit_tests/test_factory.py @@ -21,7 +21,7 @@ from icon4py.model.common.math import helpers as math_helpers from icon4py.model.common.states import factory, model, utils as state_utils from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, serialbox +from icon4py.model.testing import definitions as test_defs, serialbox from icon4py.model.testing.fixtures.datatest import ( backend, data_provider, @@ -132,7 +132,7 @@ def cell_coordinate_source( def height_coordinate_source( metrics_savepoint: sb.MetricSavepoint, grid_savepoint: sb.IconGridSavepoint, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend, ) -> Generator[SimpleFieldSource, None, None]: grid = grid_savepoint.construct_icon_grid(backend=backend) diff --git a/model/common/tests/common/topography/test_jablonowski_williamson_topography.py b/model/common/tests/common/topography/test_jablonowski_williamson_topography.py index 86bc5c3282..bf4b778d26 100644 --- a/model/common/tests/common/topography/test_jablonowski_williamson_topography.py +++ b/model/common/tests/common/topography/test_jablonowski_williamson_topography.py @@ -15,7 +15,7 @@ from icon4py.model.common import dimension as dims from icon4py.model.common.initialization import topography from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, test_utils +from icon4py.model.testing import definitions as test_defs, test_utils from ..fixtures import * # noqa: F403 @@ -28,9 +28,9 @@ @pytest.mark.datatest @pytest.mark.embedded_remap_error -@pytest.mark.parametrize("experiment", [definitions.Experiments.JW]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.JW]) def test_jablonowski_williamson_topography( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, backend: gtx_typing.Backend | None, grid_savepoint: sb.IconGridSavepoint, topography_savepoint: sb.TopographySavepoint, diff --git a/model/driver/tests/driver/integration_tests/test_gauss3d.py b/model/driver/tests/driver/integration_tests/test_gauss3d.py index 443edb8c86..29f758f780 100644 --- a/model/driver/tests/driver/integration_tests/test_gauss3d.py +++ b/model/driver/tests/driver/integration_tests/test_gauss3d.py @@ -13,7 +13,7 @@ from icon4py.model.common.decomposition import definitions as decomposition from icon4py.model.driver.testcases import gauss3d -from icon4py.model.testing import datatest_utils as dt_utils, definitions, test_utils +from icon4py.model.testing import datatest_utils as dt_utils, definitions as test_defs, test_utils from icon4py.model.testing.fixtures.datatest import backend from ..fixtures import * # noqa: F403 @@ -32,11 +32,11 @@ @pytest.mark.parametrize( "experiment, rank", [ - (definitions.Experiments.GAUSS3D, 0), + (test_defs.Experiments.GAUSS3D, 0), ], ) def test_gauss3d_initial_condition( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, backend: gtx_typing.Backend, rank: int, diff --git a/model/driver/tests/driver/integration_tests/test_icon4py.py b/model/driver/tests/driver/integration_tests/test_icon4py.py index d5c6572884..5f3d5255ec 100644 --- a/model/driver/tests/driver/integration_tests/test_icon4py.py +++ b/model/driver/tests/driver/integration_tests/test_icon4py.py @@ -24,7 +24,12 @@ icon4py_driver, initialization_utils as driver_init, ) -from icon4py.model.testing import datatest_utils as dt_utils, definitions, grid_utils, test_utils +from icon4py.model.testing import ( + datatest_utils as dt_utils, + definitions as test_defs, + grid_utils, + test_utils, +) from icon4py.model.testing.fixtures.datatest import backend, backend_like from ..fixtures import * # noqa: F403 @@ -44,7 +49,7 @@ "experiment, istep_init, istep_exit, substep_init, substep_exit, timeloop_date_init, timeloop_date_exit, step_date_init, step_date_exit, timeloop_diffusion_linit_init, timeloop_diffusion_linit_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, 1, 2, 1, @@ -57,7 +62,7 @@ False, ), ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, 1, 2, 1, @@ -70,7 +75,7 @@ False, ), ( - definitions.Experiments.GAUSS3D, + test_defs.Experiments.GAUSS3D, 1, 2, 1, @@ -98,7 +103,7 @@ ], ) def test_run_timeloop_single_step( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, timeloop_date_init: str, timeloop_date_exit: str, timeloop_diffusion_linit_init: bool, @@ -119,10 +124,10 @@ def test_run_timeloop_single_step( savepoint_nonhydro_exit: sb.IconNonHydroExitSavepoint, backend: gtx_typing.Backend, ): - if experiment in (definitions.Experiments.GAUSS3D, definitions.Experiments.JW): + if experiment in (test_defs.Experiments.GAUSS3D, test_defs.Experiments.JW): experiment_type = ( driver_init.ExperimentType.GAUSS3D - if experiment == definitions.Experiments.GAUSS3D + if experiment == test_defs.Experiments.GAUSS3D else driver_init.ExperimentType.JABW ) config = icon4py_configuration.read_config( @@ -134,10 +139,10 @@ def test_run_timeloop_single_step( icon4pyrun_config = config.run_config else: - diffusion_config = definitions.construct_diffusion_config( + diffusion_config = test_defs.construct_diffusion_config( experiment, ndyn_substeps=ndyn_substeps ) - nonhydro_config = definitions.construct_nonhydrostatic_config(experiment) + nonhydro_config = test_defs.construct_nonhydrostatic_config(experiment) icon4pyrun_config = construct_icon4pyrun_config( experiment, timeloop_date_init, @@ -395,7 +400,7 @@ def test_run_timeloop_single_step( "experiment, experiment_type", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, driver_init.ExperimentType.ANY.value, ), ], diff --git a/model/driver/tests/driver/integration_tests/test_jablonowski_williamson.py b/model/driver/tests/driver/integration_tests/test_jablonowski_williamson.py index 1a9b11519e..66c3b363d5 100644 --- a/model/driver/tests/driver/integration_tests/test_jablonowski_williamson.py +++ b/model/driver/tests/driver/integration_tests/test_jablonowski_williamson.py @@ -15,7 +15,7 @@ from icon4py.model.common.decomposition import definitions as decomposition from icon4py.model.common.utils import data_allocation as data_alloc from icon4py.model.driver.testcases import jablonowski_williamson as jabw -from icon4py.model.testing import datatest_utils as dt_utils, definitions, test_utils +from icon4py.model.testing import datatest_utils as dt_utils, definitions as test_defs, test_utils from icon4py.model.testing.fixtures.datatest import backend from ..fixtures import * # noqa: F403 @@ -31,9 +31,9 @@ @pytest.mark.datatest -@pytest.mark.parametrize("experiment, rank", [(definitions.Experiments.JW, 0)]) +@pytest.mark.parametrize("experiment, rank", [(test_defs.Experiments.JW, 0)]) def test_jabw_initial_condition( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, backend: gtx_typing.Backend, rank: int, diff --git a/model/driver/tests/driver/utils.py b/model/driver/tests/driver/utils.py index ffd0b9dbad..9317c40fb0 100644 --- a/model/driver/tests/driver/utils.py +++ b/model/driver/tests/driver/utils.py @@ -11,7 +11,7 @@ import gt4py.next.typing as gtx_typing from icon4py.model.driver import icon4py_configuration as driver_config -from icon4py.model.testing import definitions +from icon4py.model.testing import definitions as test_defs def mch_ch_r04b09_dsl_icon4pyrun_config( @@ -63,18 +63,18 @@ def exclaim_ape_icon4pyrun_config( def construct_icon4pyrun_config( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, date_init: str, date_exit: str, diffusion_linit_init: bool, backend: gtx_typing.Backend, ndyn_substeps: int = 5, ): - if experiment == definitions.Experiments.MCH_CH_R04B09: + if experiment == test_defs.Experiments.MCH_CH_R04B09: return mch_ch_r04b09_dsl_icon4pyrun_config( date_init, date_exit, diffusion_linit_init, backend, ndyn_substeps ) - elif experiment == definitions.Experiments.EXCLAIM_APE: + elif experiment == test_defs.Experiments.EXCLAIM_APE: return exclaim_ape_icon4pyrun_config( date_init, date_exit, diffusion_linit_init, backend, ndyn_substeps ) diff --git a/model/standalone_driver/tests/standalone_driver/integration_tests/test_standalone_driver.py b/model/standalone_driver/tests/standalone_driver/integration_tests/test_standalone_driver.py index e3617291a2..db97251a86 100644 --- a/model/standalone_driver/tests/standalone_driver/integration_tests/test_standalone_driver.py +++ b/model/standalone_driver/tests/standalone_driver/integration_tests/test_standalone_driver.py @@ -9,11 +9,10 @@ import pytest -from icon4py.model.common import model_backends, model_options -from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.standalone_driver import driver_utils, main -from icon4py.model.testing import definitions, grid_utils, serialbox as sb, test_utils -from icon4py.model.testing.fixtures.datatest import backend, backend_like +from icon4py.model.common import model_backends +from icon4py.model.standalone_driver import main +from icon4py.model.testing import definitions as test_defs, grid_utils, serialbox as sb, test_utils +from icon4py.model.testing.fixtures.datatest import backend_like from ..fixtures import * # noqa: F403 @@ -24,7 +23,7 @@ "experiment, istep_exit, substep_exit, timeloop_date_init, timeloop_date_exit, step_date_exit, timeloop_diffusion_linit_init, timeloop_diffusion_linit_exit", [ ( - definitions.Experiments.JW, + test_defs.Experiments.JW, 2, 5, "2008-09-01T00:00:00.000", @@ -36,7 +35,7 @@ ], ) def test_standalone_driver( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, timeloop_date_init: str, timeloop_date_exit: str, timeloop_diffusion_linit_init: bool, diff --git a/model/testing/src/icon4py/model/testing/datatest_utils.py b/model/testing/src/icon4py/model/testing/datatest_utils.py index b8741cbaa1..e73b45347d 100644 --- a/model/testing/src/icon4py/model/testing/datatest_utils.py +++ b/model/testing/src/icon4py/model/testing/datatest_utils.py @@ -8,13 +8,15 @@ from __future__ import annotations +import functools +import json import pathlib import urllib.parse import gt4py.next.typing as gtx_typing from icon4py.model.common.decomposition import definitions as decomposition -from icon4py.model.testing import definitions, serialbox +from icon4py.model.testing import definitions as test_defs, serialbox def get_processor_properties_for_run( @@ -23,19 +25,19 @@ def get_processor_properties_for_run( return decomposition.get_processor_properties(run_instance) -def get_experiment_name_with_version(experiment: definitions.Experiment) -> str: +def get_experiment_name_with_version(experiment: test_defs.ExperimentDescription) -> str: """Generate experiment name with version suffix.""" return f"{experiment.name}_v{experiment.version:02d}" def get_ranked_experiment_name_with_version( - experiment: definitions.Experiment, comm_size: int + experiment: test_defs.ExperimentDescription, comm_size: int ) -> str: """Generate ranked experiment name with version suffix.""" return f"mpitask{comm_size}_{get_experiment_name_with_version(experiment)}" -def get_experiment_archive_filename(experiment: definitions.Experiment, comm_size: int) -> str: +def get_experiment_archive_filename(experiment: test_defs.ExperimentDescription, comm_size: int) -> str: """Generate ranked archive filename for an experiment.""" return f"{get_ranked_experiment_name_with_version(experiment, comm_size)}.tar.gz" @@ -46,7 +48,7 @@ def get_serialized_data_url(root_url: str, filepath: str) -> str: def get_datapath_for_experiment( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, ) -> pathlib.Path: """Get the path to serialized data for an experiment.""" @@ -55,8 +57,8 @@ def get_datapath_for_experiment( experiment, processor_props.comm_size, ) - return definitions.serialized_data_path().joinpath( - experiment_dir, definitions.SERIALIZED_DATA_SUBDIR + return test_defs.serialized_data_path().joinpath( + experiment_dir, test_defs.SERIALIZED_DATA_SUBDIR ) @@ -72,3 +74,235 @@ def create_icon_serial_data_provider( mpi_rank=rank, do_print=True, ) + + +@functools.cache +def _read_namelist_json(json_file_path: pathlib.Path) -> dict: + """ + Read and cache the namelist JSON file. + + Args: + json_file_path: Path to the NAMELIST_ICON_output_atm.json file + + Returns: + Dictionary containing the parsed JSON data + """ + with json_file_path.open() as f: + return json.load(f) + + +def create_experiment_configuration( + experiment: test_defs.ExperimentDescription, + processor_props: decomposition.ProcessProperties, +) -> tuple: + """ + Create configuration objects from the experiment's namelist JSON file. + + This function reads the NAMELIST_ICON_output_atm.json file that comes with + the serialized experiment data and constructs configuration objects for: + - DriverConfig + - VerticalGridConfig + - NonHydrostaticConfig + - DiffusionConfig + + The JSON file is cached so it's only read once per unique path. + + Args: + experiment: The experiment definition + processor_props: Processor properties containing comm_size + + Returns: + Tuple of (DriverConfig, VerticalGridConfig, NonHydrostaticConfig, DiffusionConfig) + """ + from icon4py.model.atmosphere.diffusion import diffusion + from icon4py.model.atmosphere.dycore import dycore_states, solve_nonhydro as solve_nh + from icon4py.model.common.constants import RayleighType + from icon4py.model.common.grid import vertical as v_grid + from icon4py.model.standalone_driver import config as driver_config + + experiment_dir = get_ranked_experiment_name_with_version( + experiment, + processor_props.comm_size, + ) + json_file_path = ( + test_defs.serialized_data_path() + / experiment_dir + / f"{test_defs.NAMELIST_ICON_FNAME}.json" + ) + + nml_data = _read_namelist_json(json_file_path) + + sleve_nml = nml_data["sleve_nml"] + nonhydrostatic_nml = nml_data["nonhydrostatic_nml"] + diffusion_nml = nml_data["diffusion_nml"] + run_nml = nml_data["run_nml"] + + # Create VerticalGridConfig + vertical_config = v_grid.VerticalGridConfig( + num_levels=experiment.num_levels, + lowest_layer_thickness=sleve_nml["min_lay_thckn"], + model_top_height=sleve_nml["top_height"], + maximal_layer_thickness=sleve_nml["max_lay_thckn"], + top_height_limit_for_maximal_layer_thickness=sleve_nml["htop_thcknlimit"], + flat_height=sleve_nml["flat_height"], + stretch_factor=sleve_nml["stretch_fac"], + rayleigh_damping_height=( + nonhydrostatic_nml["damp_height"][0] + if isinstance(nonhydrostatic_nml["damp_height"], list) + else nonhydrostatic_nml["damp_height"] + ), + ) + + # Create NonHydrostaticConfig + # Map divdamp_order from JSON to enum + divdamp_order_value = nonhydrostatic_nml["divdamp_order"] + divdamp_order_map = { + 4: dycore_states.DivergenceDampingOrder.FOURTH_ORDER, + 24: dycore_states.DivergenceDampingOrder.COMBINED, + } + divdamp_order = divdamp_order_map[divdamp_order_value] + + # Map divdamp_type from JSON to enum + divdamp_type_value = nonhydrostatic_nml["divdamp_type"] + divdamp_type_map = { + 3: dycore_states.DivergenceDampingType.THREE_DIMENSIONAL, + 32: dycore_states.DivergenceDampingType.COMBINED, + } + divdamp_type = divdamp_type_map[divdamp_type_value] + + # Map itime_scheme from JSON to enum + itime_scheme_value = nonhydrostatic_nml["itime_scheme"] + itime_scheme_map = { + 4: dycore_states.TimeSteppingScheme.MOST_EFFICIENT, + 5: dycore_states.TimeSteppingScheme.STABLE, + 6: dycore_states.TimeSteppingScheme.EXPENSIVE, + } + itime_scheme = itime_scheme_map[itime_scheme_value] + + # Map iadv_rhotheta from JSON to enum + iadv_rhotheta_value = nonhydrostatic_nml["iadv_rhotheta"] + iadv_rhotheta_map = { + 2: dycore_states.RhoThetaAdvectionType.MIURA, + } + iadv_rhotheta = iadv_rhotheta_map[iadv_rhotheta_value] + + # Map igradp_method from JSON to enum + igradp_method_value = nonhydrostatic_nml["igradp_method"] + igradp_method_map = { + 1: dycore_states.HorizontalPressureDiscretizationType.CONVENTIONAL, + 2: dycore_states.HorizontalPressureDiscretizationType.TAYLOR, + 3: dycore_states.HorizontalPressureDiscretizationType.TAYLOR_HYDRO, + 4: dycore_states.HorizontalPressureDiscretizationType.POLYNOMIAL, + 5: dycore_states.HorizontalPressureDiscretizationType.POLYNOMIAL_HYDRO, + } + igradp_method = igradp_method_map[igradp_method_value] + + # Map rayleigh_type from JSON to enum + rayleigh_type_value = nonhydrostatic_nml["rayleigh_type"] + rayleigh_type_map = { + 2: RayleighType.KLEMP, + } + rayleigh_type = rayleigh_type_map[rayleigh_type_value] + + # Extract rayleigh_coeff (can be a list or single value) + rayleigh_coeff = nonhydrostatic_nml["rayleigh_coeff"] + if isinstance(rayleigh_coeff, list): + rayleigh_coeff = rayleigh_coeff[0] + + nonhydro_config = solve_nh.NonHydrostaticConfig( + itime_scheme=itime_scheme, # type: ignore[arg-type] + iadv_rhotheta=iadv_rhotheta, # type: ignore[arg-type] + igradp_method=igradp_method, # type: ignore[arg-type] + rayleigh_type=rayleigh_type, # type: ignore[arg-type] + rayleigh_coeff=rayleigh_coeff, + divdamp_order=divdamp_order, # type: ignore[arg-type] + divdamp_type=divdamp_type, + divdamp_trans_start=nonhydrostatic_nml["divdamp_trans_start"], + divdamp_trans_end=nonhydrostatic_nml["divdamp_trans_end"], + rhotheta_offctr=nonhydrostatic_nml["rhotheta_offctr"], + veladv_offctr=nonhydrostatic_nml["veladv_offctr"], + fourth_order_divdamp_factor=nonhydrostatic_nml["divdamp_fac"], + fourth_order_divdamp_factor2=nonhydrostatic_nml["divdamp_fac2"], + fourth_order_divdamp_factor3=nonhydrostatic_nml["divdamp_fac3"], + fourth_order_divdamp_factor4=nonhydrostatic_nml["divdamp_fac4"], + fourth_order_divdamp_z=nonhydrostatic_nml["divdamp_z"], + fourth_order_divdamp_z2=nonhydrostatic_nml["divdamp_z2"], + fourth_order_divdamp_z3=nonhydrostatic_nml["divdamp_z3"], + fourth_order_divdamp_z4=nonhydrostatic_nml["divdamp_z4"], + ) + + # Create DiffusionConfig + # Map diffusion_type from hdiff_order + hdiff_order_value = diffusion_nml["hdiff_order"] + diffusion_type_map = { + -1: diffusion.DiffusionType.NO_DIFFUSION, + 2: diffusion.DiffusionType.LINEAR_2ND_ORDER, + 3: diffusion.DiffusionType.SMAGORINSKY_NO_BACKGROUND, + 4: diffusion.DiffusionType.LINEAR_4TH_ORDER, + 5: diffusion.DiffusionType.SMAGORINSKY_4TH_ORDER, + } + diffusion_type = diffusion_type_map[hdiff_order_value] + + # Map type_vn_diffu from itype_vn_diffu + type_vn_diffu_value = diffusion_nml["itype_vn_diffu"] + type_vn_diffu_map = { + 1: diffusion.SmagorinskyStencilType.DIAMOND_VERTICES, + 2: diffusion.SmagorinskyStencilType.CELLS_AND_VERTICES, + } + type_vn_diffu = type_vn_diffu_map[type_vn_diffu_value] + + # Map type_t_diffu from itype_t_diffu + type_t_diffu_value = diffusion_nml["itype_t_diffu"] + type_t_diffu_map = { + 1: diffusion.TemperatureDiscretizationType.HOMOGENEOUS, + 2: diffusion.TemperatureDiscretizationType.HETEROGENOUS, + } + type_t_diffu = type_t_diffu_map[type_t_diffu_value] + + # Extract hdiff_smag_w (can be a list or single value) + lhdiff_smag_w = diffusion_nml["lhdiff_smag_w"] + hdiff_smag_w = lhdiff_smag_w[0] if isinstance(lhdiff_smag_w, list) else lhdiff_smag_w + + # Extract lsmag_3d (can be a list or single value) + lsmag_3d = diffusion_nml["lsmag_3d"] + smag_3d = lsmag_3d[0] if isinstance(lsmag_3d, list) else lsmag_3d + + # Get ndyn_substeps from either nonhydrostatic_nml or run_nml + ndyn_substeps = nonhydrostatic_nml["ndyn_substeps"] + + diffusion_config = diffusion.DiffusionConfig( + diffusion_type=diffusion_type, # type: ignore[arg-type] + hdiff_w=diffusion_nml["lhdiff_w"], + hdiff_vn=diffusion_nml["lhdiff_vn"], + hdiff_temp=diffusion_nml["lhdiff_temp"], + hdiff_smag_w=hdiff_smag_w, + type_vn_diffu=type_vn_diffu, # type: ignore[arg-type] + smag_3d=smag_3d, + type_t_diffu=type_t_diffu, # type: ignore[arg-type] + hdiff_efdt_ratio=diffusion_nml["hdiff_efdt_ratio"], + hdiff_w_efdt_ratio=diffusion_nml["hdiff_w_efdt_ratio"], + smagorinski_scaling_factor=diffusion_nml["hdiff_smag_fac"], + n_substeps=ndyn_substeps, + zdiffu_t=nonhydrostatic_nml["l_zdiffu_t"], + thslp_zdiffu=nonhydrostatic_nml["thslp_zdiffu"], + thhgtd_zdiffu=nonhydrostatic_nml["thhgtd_zdiffu"], + ) + + # Create DriverConfig (using defaults for now, as these are not in the JSON) + # TODO(jcanton): Extract these from the JSON when available + import datetime + + driver_cfg = driver_config.DriverConfig( + experiment_name=experiment.name, + output_path=pathlib.Path(), # Placeholder + profiling_stats=None, + dtime=datetime.timedelta(seconds=run_nml["dtime"]), + start_date=datetime.datetime(1, 1, 1, 0, 0, 0), # Placeholder + end_date=datetime.datetime(1, 1, 1, 1, 0, 0), # Placeholder + apply_extra_second_order_divdamp=nonhydrostatic_nml["lextra_diffu"], + vertical_cfl_threshold=nonhydrostatic_nml["vcfl_threshold"], + ndyn_substeps=ndyn_substeps, + enable_statistics_output=False, + ) + + return driver_cfg, vertical_config, nonhydro_config, diffusion_config diff --git a/model/testing/src/icon4py/model/testing/definitions.py b/model/testing/src/icon4py/model/testing/definitions.py index 3e63e40fa9..68acff5de2 100644 --- a/model/testing/src/icon4py/model/testing/definitions.py +++ b/model/testing/src/icon4py/model/testing/definitions.py @@ -24,6 +24,7 @@ SERIALIZED_DATA_DIR: Final = "ser_icondata" SERIALIZED_DATA_SUBDIR: Final = "ser_data" GRID_DATA_DIR: Final = "grids" +NAMELIST_ICON_FNAME: Final = "NAMELIST_ICON_output_atm" def serialized_data_path() -> pathlib.Path: @@ -221,7 +222,7 @@ class Grids: @dataclasses.dataclass -class Experiment: +class ExperimentDescription: name: str description: str grid: GridDescription @@ -230,31 +231,31 @@ class Experiment: class Experiments: - EXCLAIM_APE: Final = Experiment( + EXCLAIM_APE: Final = ExperimentDescription( name="exclaim_ape_R02B04", description="EXCLAIM Aquaplanet experiment", grid=Grids.R02B04_GLOBAL, num_levels=60, ) - MCH_CH_R04B09: Final = Experiment( + MCH_CH_R04B09: Final = ExperimentDescription( name="exclaim_ch_r04b09_dsl", description="Regional setup used by EXCLAIM to validate the icon-exclaim.", grid=Grids.MCH_CH_R04B09_DSL, num_levels=65, ) - JW: Final = Experiment( + JW: Final = ExperimentDescription( name="exclaim_nh35_tri_jws", description="Jablonowski Williamson atmospheric test case", grid=Grids.R02B04_GLOBAL, num_levels=35, ) - GAUSS3D: Final = Experiment( + GAUSS3D: Final = ExperimentDescription( name="exclaim_gauss3d", description="Gauss 3d test case", grid=Grids.TORUS_50000x5000, num_levels=35, ) - WEISMAN_KLEMP_TORUS: Final = Experiment( + WEISMAN_KLEMP_TORUS: Final = ExperimentDescription( name="exclaim_nh_weisman_klemp", description="Weisman-Klemp experiment on Torus Grid", grid=Grids.TORUS_50000x5000, @@ -264,7 +265,7 @@ class Experiments: # TODO(havogt): the following configs should be part of the serialized experiment def construct_diffusion_config( - experiment: Experiment, ndyn_substeps: int = 5 + experiment: ExperimentDescription, ndyn_substeps: int = 5 ) -> diffusion.DiffusionConfig: from icon4py.model.atmosphere.diffusion import diffusion @@ -307,7 +308,7 @@ def construct_diffusion_config( ) -def construct_nonhydrostatic_config(experiment: Experiment) -> solve_nh.NonHydrostaticConfig: +def construct_nonhydrostatic_config(experiment: ExperimentDescription) -> solve_nh.NonHydrostaticConfig: from icon4py.model.atmosphere.dycore import dycore_states, solve_nonhydro as solve_nh if experiment == Experiments.MCH_CH_R04B09: @@ -332,7 +333,7 @@ def construct_nonhydrostatic_config(experiment: Experiment) -> solve_nh.NonHydro ) -def construct_metrics_config(experiment: Experiment) -> tuple: +def construct_metrics_config(experiment: ExperimentDescription) -> tuple: match experiment: case Experiments.MCH_CH_R04B09: lowest_layer_thickness = 20.0 diff --git a/model/testing/src/icon4py/model/testing/fixtures/datatest.py b/model/testing/src/icon4py/model/testing/fixtures/datatest.py index 7730656d5a..344850458b 100644 --- a/model/testing/src/icon4py/model/testing/fixtures/datatest.py +++ b/model/testing/src/icon4py/model/testing/fixtures/datatest.py @@ -17,7 +17,11 @@ from icon4py.model.common import model_backends, model_options from icon4py.model.common.constants import RayleighType from icon4py.model.common.grid import base as base_grid -from icon4py.model.testing import data_handling, datatest_utils as dt_utils, definitions +from icon4py.model.testing import ( + data_handling, + datatest_utils as dt_utils, + definitions as test_defs, +) if TYPE_CHECKING: @@ -81,27 +85,27 @@ def cpu_allocator() -> gtx_typing.Allocator: @pytest.fixture( params=[ - definitions.Grids.R01B01_GLOBAL, - definitions.Grids.R02B04_GLOBAL, - definitions.Grids.MCH_CH_R04B09_DSL, - definitions.Grids.TORUS_50000x5000, + test_defs.Grids.R01B01_GLOBAL, + test_defs.Grids.R02B04_GLOBAL, + test_defs.Grids.MCH_CH_R04B09_DSL, + test_defs.Grids.TORUS_50000x5000, ], ids=lambda r: r.name, ) -def grid_description(request: pytest.FixtureRequest) -> definitions.GridDescription: +def grid_description(request: pytest.FixtureRequest) -> test_defs.GridDescription: """Default parametrization for grid.""" return request.param @pytest.fixture( params=[ - definitions.Experiments.MCH_CH_R04B09, - definitions.Experiments.EXCLAIM_APE, - definitions.Experiments.GAUSS3D, + test_defs.Experiments.MCH_CH_R04B09, + test_defs.Experiments.EXCLAIM_APE, + test_defs.Experiments.GAUSS3D, ], ids=lambda r: r.name, ) -def experiment(request: pytest.FixtureRequest) -> definitions.Experiment: +def experiment(request: pytest.FixtureRequest) -> test_defs.ExperimentDescription: """Default parametrization for experiments. The default parametrization is often overwritten for specific tests.""" @@ -116,15 +120,15 @@ def processor_props(request: pytest.FixtureRequest) -> decomposition.ProcessProp def _download_ser_data( - _experiment: definitions.Experiment, + _experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, ) -> None: # not a fixture to be able to use this function outside of pytest comm_size = processor_props.comm_size try: - root_url = definitions.SERIALIZED_DATA_ROOT_URLS[comm_size] + root_url = test_defs.SERIALIZED_DATA_ROOT_URLS[comm_size] archive_filename = dt_utils.get_experiment_archive_filename(_experiment, comm_size) - archive_path = definitions.SERIALIZED_DATA_DIR + "/" + archive_filename + archive_path = test_defs.SERIALIZED_DATA_DIR + "/" + archive_filename uri = dt_utils.get_serialized_data_url(root_url, archive_path) destination_path = dt_utils.get_datapath_for_experiment(_experiment, processor_props) data_handling.download_test_data(destination_path.parent, uri) @@ -138,7 +142,7 @@ def _download_ser_data( def download_ser_data( request: pytest.FixtureRequest, processor_props: decomposition.ProcessProperties, - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, pytestconfig: pytest.Config, ) -> None: """ @@ -156,7 +160,7 @@ def download_ser_data( @pytest.fixture def data_provider( download_ser_data: None, # downloads data as side-effect - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, processor_props: decomposition.ProcessProperties, backend: gtx_typing.Backend, ) -> serialbox.IconSerialDataProvider: @@ -166,7 +170,7 @@ def data_provider( @pytest.fixture def grid_savepoint( - data_provider: serialbox.IconSerialDataProvider, experiment: definitions.Experiment + data_provider: serialbox.IconSerialDataProvider, experiment: test_defs.ExperimentDescription ) -> serialbox.IconGridSavepoint: return data_provider.from_savepoint_grid(experiment.name, experiment.grid.params) @@ -185,7 +189,7 @@ def icon_grid( @pytest.fixture def decomposition_info( - data_provider: serialbox.IconSerialDataProvider, experiment: definitions.Experiment + data_provider: serialbox.IconSerialDataProvider, experiment: test_defs.ExperimentDescription ) -> decomposition.DecompositionInfo: return data_provider.from_savepoint_grid( grid_id=experiment.name, global_grid_params=experiment.grid.params @@ -193,14 +197,14 @@ def decomposition_info( @pytest.fixture -def ndyn_substeps(experiment: definitions.Experiment) -> int: +def ndyn_substeps(experiment: test_defs.ExperimentDescription) -> int: """ Return number of dynamical substeps. Serialized data of global and regional experiments uses a reduced number (2 instead of the default 5) in order to reduce the amount of data generated. """ - if experiment == definitions.Experiments.GAUSS3D: + if experiment == test_defs.Experiments.GAUSS3D: return 5 else: return 2 @@ -514,18 +518,18 @@ def istep_exit() -> int: @pytest.fixture -def lowest_layer_thickness(experiment: definitions.Experiment) -> float: - if experiment == definitions.Experiments.MCH_CH_R04B09: +def lowest_layer_thickness(experiment: test_defs.ExperimentDescription) -> float: + if experiment == test_defs.Experiments.MCH_CH_R04B09: return 20.0 else: return 50.0 @pytest.fixture -def model_top_height(experiment: definitions.Experiment) -> float: - if experiment == definitions.Experiments.MCH_CH_R04B09: +def model_top_height(experiment: test_defs.ExperimentDescription) -> float: + if experiment == test_defs.Experiments.MCH_CH_R04B09: return 23000.0 - elif experiment == definitions.Experiments.EXCLAIM_APE: + elif experiment == test_defs.Experiments.EXCLAIM_APE: return 75000.0 else: return 23500.0 @@ -537,20 +541,20 @@ def flat_height() -> float: @pytest.fixture -def stretch_factor(experiment: definitions.Experiment) -> float: - if experiment == definitions.Experiments.MCH_CH_R04B09: +def stretch_factor(experiment: test_defs.ExperimentDescription) -> float: + if experiment == test_defs.Experiments.MCH_CH_R04B09: return 0.65 - elif experiment == definitions.Experiments.EXCLAIM_APE: + elif experiment == test_defs.Experiments.EXCLAIM_APE: return 0.9 else: return 1.0 @pytest.fixture -def damping_height(experiment: definitions.Experiment) -> float: - if experiment == definitions.Experiments.MCH_CH_R04B09: +def damping_height(experiment: test_defs.ExperimentDescription) -> float: + if experiment == test_defs.Experiments.MCH_CH_R04B09: return 12500.0 - elif experiment == definitions.Experiments.EXCLAIM_APE: + elif experiment == test_defs.Experiments.EXCLAIM_APE: return 50000.0 else: return 45000.0 @@ -567,24 +571,24 @@ def maximal_layer_thickness() -> float: @pytest.fixture -def rayleigh_coeff(experiment: definitions.Experiment) -> float: - if experiment == definitions.Experiments.EXCLAIM_APE: +def rayleigh_coeff(experiment: test_defs.ExperimentDescription) -> float: + if experiment == test_defs.Experiments.EXCLAIM_APE: return 0.1 else: return 5.0 @pytest.fixture -def exner_expol(experiment: definitions.Experiment) -> float: - if experiment == definitions.Experiments.EXCLAIM_APE: +def exner_expol(experiment: test_defs.ExperimentDescription) -> float: + if experiment == test_defs.Experiments.EXCLAIM_APE: return 0.3333333333333 else: return 0.333 @pytest.fixture -def vwind_offctr(experiment: definitions.Experiment) -> float: - if experiment == definitions.Experiments.EXCLAIM_APE: +def vwind_offctr(experiment: test_defs.ExperimentDescription) -> float: + if experiment == test_defs.Experiments.EXCLAIM_APE: return 0.15 else: return 0.2 diff --git a/model/testing/src/icon4py/model/testing/fixtures/stencil_tests.py b/model/testing/src/icon4py/model/testing/fixtures/stencil_tests.py index 319f7ec7b2..3124acd3f8 100644 --- a/model/testing/src/icon4py/model/testing/fixtures/stencil_tests.py +++ b/model/testing/src/icon4py/model/testing/fixtures/stencil_tests.py @@ -14,7 +14,7 @@ from icon4py.model.common import model_backends from icon4py.model.common.grid import base as base_grid, grid_manager as gm, simple as simple_grid -from icon4py.model.testing import definitions, grid_utils +from icon4py.model.testing import definitions as test_defs, grid_utils BENCHMARK_DEFAULT_LEVELS: Final[int] = 80 @@ -41,28 +41,28 @@ def _get_grid_manager_from_preset( match grid_preset: case "icon_regional": return grid_utils.get_grid_manager_from_identifier( - definitions.Grids.MCH_CH_R04B09_DSL, + test_defs.Grids.MCH_CH_R04B09_DSL, num_levels=num_levels, keep_skip_values=False, allocator=allocator, ) case "icon_global": return grid_utils.get_grid_manager_from_identifier( - definitions.Grids.R02B04_GLOBAL, + test_defs.Grids.R02B04_GLOBAL, num_levels=num_levels, keep_skip_values=False, allocator=allocator, ) case "icon_benchmark_regional": return grid_utils.get_grid_manager_from_identifier( - definitions.Grids.MCH_OPR_R19B08_DOMAIN01, + test_defs.Grids.MCH_OPR_R19B08_DOMAIN01, num_levels=BENCHMARK_DEFAULT_LEVELS, keep_skip_values=False, allocator=allocator, ) case "icon_benchmark_global": return grid_utils.get_grid_manager_from_identifier( - definitions.Grids.R02B06_GLOBAL, + test_defs.Grids.R02B06_GLOBAL, num_levels=BENCHMARK_DEFAULT_LEVELS, keep_skip_values=False, allocator=allocator, diff --git a/model/testing/src/icon4py/model/testing/grid_utils.py b/model/testing/src/icon4py/model/testing/grid_utils.py index 369dea78a5..a30888c470 100644 --- a/model/testing/src/icon4py/model/testing/grid_utils.py +++ b/model/testing/src/icon4py/model/testing/grid_utils.py @@ -18,14 +18,14 @@ vertical as v_grid, ) from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import config, data_handling, definitions +from icon4py.model.testing import config, data_handling, definitions as test_defs grid_geometries: dict[str, geometry.GridGeometry] = {} def get_grid_manager_from_experiment( - experiment: definitions.Experiment, + experiment: test_defs.ExperimentDescription, keep_skip_values: bool, allocator: gtx_typing.Allocator, ) -> gm.GridManager: @@ -38,7 +38,7 @@ def get_grid_manager_from_experiment( def get_grid_manager_from_identifier( - grid: definitions.GridDescription, + grid: test_defs.GridDescription, num_levels: int, keep_skip_values: bool, allocator: gtx_typing.Allocator, @@ -73,11 +73,11 @@ def get_grid_manager( return manager -def resolve_full_grid_file_name(grid: definitions.GridDescription) -> pathlib.Path: - return definitions.grids_path().joinpath(grid.name, grid.file_name) +def resolve_full_grid_file_name(grid: test_defs.GridDescription) -> pathlib.Path: + return test_defs.grids_path().joinpath(grid.name, grid.file_name) -def _download_grid_file(grid: definitions.GridDescription) -> pathlib.Path: +def _download_grid_file(grid: test_defs.GridDescription) -> pathlib.Path: full_name = resolve_full_grid_file_name(grid) grid_directory = full_name.parent grid_directory.mkdir(parents=True, exist_ok=True) @@ -98,7 +98,7 @@ def _download_grid_file(grid: definitions.GridDescription) -> pathlib.Path: def get_grid_geometry( - backend: gtx_typing.Backend | None, experiment: definitions.Experiment + backend: gtx_typing.Backend | None, experiment: test_defs.ExperimentDescription ) -> geometry.GridGeometry: register_name = "_".join((experiment.name, data_alloc.backend_name(backend))) diff --git a/scripts/run_serialization.py b/scripts/run_serialization.py index d776723b51..f471c31758 100644 --- a/scripts/run_serialization.py +++ b/scripts/run_serialization.py @@ -14,6 +14,7 @@ import re import shutil import subprocess +import sys import tarfile import time from concurrent.futures import ThreadPoolExecutor @@ -22,7 +23,7 @@ import typer -from icon4py.model.testing import datatest_utils as dt_utils, definitions +from icon4py.model.testing import datatest_utils as dt_utils, definitions as test_defs cli = typer.Typer(no_args_is_help=True, help=__doc__) @@ -34,11 +35,11 @@ COMM_SIZES: list[int] = [1, 2, 4] EXPERIMENTS = [ - definitions.Experiments.MCH_CH_R04B09, - definitions.Experiments.JW, - definitions.Experiments.EXCLAIM_APE, - definitions.Experiments.GAUSS3D, - definitions.Experiments.WEISMAN_KLEMP_TORUS, + test_defs.Experiments.MCH_CH_R04B09, + test_defs.Experiments.JW, + test_defs.Experiments.EXCLAIM_APE, + test_defs.Experiments.GAUSS3D, + test_defs.Experiments.WEISMAN_KLEMP_TORUS, ] # Slurm settings @@ -60,7 +61,7 @@ EXPERIMENTS_DIR = BUILD_DIR / "experiments" # Output location for copied ser_data and tarballs -OUTPUT_ROOT = EXPERIMENTS_DIR / definitions.SERIALIZED_DATA_DIR +OUTPUT_ROOT = EXPERIMENTS_DIR / test_defs.SERIALIZED_DATA_DIR # Maximum concurrent threads for running experiments MAX_THREADS: int = 5 @@ -70,33 +71,33 @@ # ====================================== -def get_f90exp_name(experiment: definitions.Experiment) -> str: +def get_f90exp_name(experiment: test_defs.ExperimentDescription) -> str: return f"{experiment.name}_sb" -def get_f90exp_dir(experiment: definitions.Experiment) -> Path: +def get_f90exp_dir(experiment: test_defs.ExperimentDescription) -> Path: return EXPERIMENTS_DIR / get_f90exp_name(experiment) -def get_nmlfile_name(experiment: definitions.Experiment) -> str: +def get_nmlfile_name(experiment: test_defs.ExperimentDescription) -> str: return f"exp.{get_f90exp_name(experiment)}" -def get_slurmscript_name(experiment: definitions.Experiment) -> str: +def get_slurmscript_name(experiment: test_defs.ExperimentDescription) -> str: return f"{get_nmlfile_name(experiment)}.run" -def get_serdata_dst_dir(experiment: definitions.Experiment, comm_size: int) -> Path: +def get_serdata_dst_dir(experiment: test_defs.ExperimentDescription, comm_size: int) -> Path: """Get the destination directory for serialized data.""" return OUTPUT_ROOT / dt_utils.get_ranked_experiment_name_with_version(experiment, comm_size) -def get_tar_path(experiment: definitions.Experiment, comm_size: int) -> Path: +def get_tar_path(experiment: test_defs.ExperimentDescription, comm_size: int) -> Path: """Get the path to the tar archive for the experiment.""" return OUTPUT_ROOT / dt_utils.get_experiment_archive_filename(experiment, comm_size) -def cleanup_exp_output(experiment: definitions.Experiment, comm_size: int) -> None: +def cleanup_exp_output(experiment: test_defs.ExperimentDescription, comm_size: int) -> None: """Clean up experiment output directories and archives. Deletes: @@ -351,7 +352,7 @@ def copy_ser_data(experiment, comm_size: int, job_id: str | None = None) -> Path dest_dir.mkdir(parents=True, exist_ok=True) # Copy ser_data folder - shutil.copytree(src_dir, dest_dir / definitions.SERIALIZED_DATA_SUBDIR) + shutil.copytree(src_dir, dest_dir / test_defs.SERIALIZED_DATA_SUBDIR) # Copy NAMELIST files namelist_files = sorted(exp_dir.glob("NAMELIST_*")) @@ -359,6 +360,14 @@ def copy_ser_data(experiment, comm_size: int, job_id: str | None = None) -> Path if src_file.is_file(): shutil.copy2(src_file, dest_dir / src_file.name) + # Translate to json and copy NAMELIST_ICON_output_atm + cmd = [ + "f90nml", + str(exp_dir / test_defs.NAMELIST_ICON_FNAME), + str(dest_dir / (test_defs.NAMELIST_ICON_FNAME + ".json")), + ] + _ = run_command(cmd) + # Copy LOG file if available if job_id is not None: log_file = RUNSCRIPTS_DIR / f"LOG.{get_slurmscript_name(experiment)}.{job_id}.o" @@ -368,7 +377,7 @@ def copy_ser_data(experiment, comm_size: int, job_id: str | None = None) -> Path return dest_dir -def tar_folder(folder: Path, experiment: definitions.Experiment, comm_size: int) -> Path: +def tar_folder(folder: Path, experiment: test_defs.ExperimentDescription, comm_size: int) -> Path: tar_path = get_tar_path(experiment, comm_size) with tarfile.open(tar_path, "w:gz") as tar: @@ -379,7 +388,7 @@ def tar_folder(folder: Path, experiment: definitions.Experiment, comm_size: int) return tar_path -def generate_update_script(experiment: definitions.Experiment) -> None: +def generate_update_script(experiment: test_defs.ExperimentDescription) -> None: # copy namelist file from repo to build_dir shutil.copy2( ICONF90_DIR / "run" / get_nmlfile_name(experiment), @@ -391,7 +400,7 @@ def generate_update_script(experiment: definitions.Experiment) -> None: _ = run_command(cmd, cwd=BUILD_DIR) -def run_experiment(experiment: definitions.Experiment, comm_size: int) -> None: +def run_experiment(experiment: test_defs.ExperimentDescription, comm_size: int) -> None: """Execute a single experiment with the given communicator size.""" try: # Clean up previous experiment output @@ -431,9 +440,18 @@ def run_experiment(experiment: definitions.Experiment, comm_size: int) -> None: raise +def require_cli(command_name): + if shutil.which(command_name) is None: + print(f"Error: '{command_name}' is not installed or not on PATH.") + sys.exit(1) + + @cli.command() def run_experiment_series() -> None: """Run the serialization experiment series.""" + + require_cli("f90nml") + OUTPUT_ROOT.mkdir(parents=True, exist_ok=True) total_tasks = len(EXPERIMENTS) * len(COMM_SIZES) diff --git a/tools/tests/tools/py2fgen/wrappers/test_diffusion_wrapper.py b/tools/tests/tools/py2fgen/wrappers/test_diffusion_wrapper.py index f85ec964b7..e111576c1e 100644 --- a/tools/tests/tools/py2fgen/wrappers/test_diffusion_wrapper.py +++ b/tools/tests/tools/py2fgen/wrappers/test_diffusion_wrapper.py @@ -15,7 +15,7 @@ from icon4py.model.atmosphere.diffusion import diffusion, diffusion_states from icon4py.model.common import dimension as dims from icon4py.model.common.grid import states as grid_states, vertical as v_grid -from icon4py.model.testing import definitions, test_utils as testing_test_utils +from icon4py.model.testing import definitions as test_defs, test_utils as testing_test_utils from icon4py.tools import py2fgen from icon4py.tools.py2fgen import test_utils from icon4py.tools.py2fgen.wrappers import common as wrapper_common, diffusion_wrapper @@ -29,7 +29,7 @@ "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), @@ -140,7 +140,7 @@ def test_diffusion_wrapper_granule_inputs( dwdy=savepoint_diffusion_init.dwdy(), ) expected_prognostic_state = savepoint_diffusion_init.construct_prognostics() - expected_config = definitions.construct_diffusion_config(experiment, ndyn_substeps) + expected_config = test_defs.construct_diffusion_config(experiment, ndyn_substeps) expected_additional_parameters = diffusion.DiffusionParams(expected_config) # --- Mock and Test Diffusion.init --- @@ -257,7 +257,7 @@ def test_diffusion_wrapper_granule_inputs( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), diff --git a/tools/tests/tools/py2fgen/wrappers/test_dycore_wrapper.py b/tools/tests/tools/py2fgen/wrappers/test_dycore_wrapper.py index 726a86e7bd..d57d0c0830 100644 --- a/tools/tests/tools/py2fgen/wrappers/test_dycore_wrapper.py +++ b/tools/tests/tools/py2fgen/wrappers/test_dycore_wrapper.py @@ -20,7 +20,7 @@ from icon4py.model.common.grid.vertical import VerticalGridConfig from icon4py.model.common.states import prognostic_state as prognostics from icon4py.model.common.utils import data_allocation as data_alloc -from icon4py.model.testing import definitions, test_utils as testing_test_utils +from icon4py.model.testing import definitions as test_defs, test_utils as testing_test_utils from icon4py.tools import py2fgen from icon4py.tools.py2fgen import test_utils from icon4py.tools.py2fgen.wrappers import common as wrapper_common, dycore_wrapper @@ -239,7 +239,7 @@ def solve_nh_init( "experiment, step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), @@ -501,7 +501,7 @@ def test_dycore_wrapper_granule_inputs( coeff2_dwdz=metrics_savepoint.coeff2_dwdz(), coeff_gradekin=metrics_savepoint.coeff_gradekin(), ) - expected_config = definitions.construct_nonhydrostatic_config(experiment) + expected_config = test_defs.construct_nonhydrostatic_config(experiment) expected_additional_parameters = solve_nh.NonHydrostaticParams(expected_config) # --- Expected objects that form inputs into run function --- @@ -802,7 +802,7 @@ def test_dycore_wrapper_granule_inputs( "experiment,step_date_init, step_date_exit", [ ( - definitions.Experiments.MCH_CH_R04B09, + test_defs.Experiments.MCH_CH_R04B09, "2021-06-20T12:00:10.000", "2021-06-20T12:00:10.000", ), @@ -981,7 +981,7 @@ def test_granule_solve_nonhydro_single_step_regional( @pytest.mark.datatest -@pytest.mark.parametrize("experiment", [definitions.Experiments.MCH_CH_R04B09]) +@pytest.mark.parametrize("experiment", [test_defs.Experiments.MCH_CH_R04B09]) @pytest.mark.parametrize( "istep_init, substep_init, step_date_init, istep_exit, substep_exit, step_date_exit, vn_only, at_initial_timestep", [