[WIP] Check for consistency of passing array_ns in functions#1178
[WIP] Check for consistency of passing array_ns in functions#1178
Conversation
|
Hi there, this is jenkins continuous integration... |
1 similar comment
|
Hi there, this is jenkins continuous integration... |
Remove the array_ns: ModuleType parameter from functions that already receive NDArray inputs. Instead, derive the array namespace using data_alloc.array_namespace() from the first input array. Updated functions: - grid/topography.py: compute_nabla2_on_cell, smooth_topography - initialization/topography.py: jablonowski_williamson - math/projection.py: gnomonic_proj - metrics/compute_coeff_gradekin.py: compute_coeff_gradekin - grid/geometry_stencils.py: compute_primal_cart_normal Also updated all callers and removed now-unused imports. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: jcanton <5622559+jcanton@users.noreply.github.com>
Remove array_ns: ModuleType = np parameters from functions that already receive input NDArray arguments. These functions now derive the array namespace internally using data_alloc.array_namespace() from their first input array. Functions modified: - compute_max_nbhgt_array_ns (derives from c2e2c) - _compute_k_start_end (derives from z_mc) - compute_diffusion_mask_and_coef (derives from c2e2c) - compute_diffusion_intcoef_and_vertoffset (derives from c2e2c) - compute_wgtfacq_c_dsl (derives from z_ifc) - compute_wgtfacq_e_dsl (derives from e2c) - compute_zdiff_gradp (derives from z_mc) - compute_flat_max_idx (derives from e2c) - compute_nflat_gradp (derives from flat_idx_max) - compute_exner_w_implicit_weight_parameter (derives from c2e) Callers in metrics_factory.py and test files updated accordingly. Unused imports (ModuleType, numpy) removed where no longer needed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: jcanton <5622559+jcanton@users.noreply.github.com>
…put NDArrays Remove array_ns: ModuleType = np parameters from functions that already receive input NDArray arguments. These functions now derive the array namespace from their input arrays using data_alloc.array_namespace(). Files modified: - base.py: _replace_skip_values, _has_skip_values_in_table - grid_refinement.py: compute_domain_bounds, is_unordered_field, convert_to_non_nested_refinement_values, is_limited_area_grid - grid_manager.py: _get_derived_connectivities, _construct_diamond_vertices, _determine_center_position, _construct_diamond_edges, _construct_triangle_edges, _construct_butterfly_cells, _patch_with_dummy_lastline - vertical.py: _compute_SLEVE_coordinate_from_vcta_and_topography, _check_and_correct_layer_thickness, _check_flatness_of_flat_level, compute_vertical_coordinate All callers updated accordingly. Unused imports removed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: jcanton <5622559+jcanton@users.noreply.github.com>
…put NDArrays Remove array_ns: ModuleType = np parameters from functions that can derive the array namespace from their input NDArray arguments using data_alloc.array_namespace(). Updated functions: - definitions.py: Reductions protocol and SingleNodeReductions methods - halo.py: global_to_local() - mpi_decomposition.py: _reduce, _calc_buffer_size, min, max, sum, mean - grid_manager.py: _get_local_connectivities and its caller - geometry.py: remove functools.partial wrapping for mean reductions - metric_fields.py: update min_reduction callable signature and call Functions without input arrays (_create_dummy_decomposition_arrays, _min_identity, _max_identity, _sum_identity) retain array_ns parameter. Note: Test files in decomposition/mpi_tests/ still pass array_ns to reduction methods and need updating separately (MPI tests require special infrastructure to run). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: jcanton <5622559+jcanton@users.noreply.github.com>
|
Make sure the following scenario is covered: if you are on gpu, you might want to use cupy, but the starting point might be a numpy array after reading from somewhere. |
Context for @copilot: arrays that are read in
but it's good to double check. @copilot can you check for this and make necessary changes? Also continue work on unfinished tasks. |
|
@copilot once you're done with the previous changes, can you make a summary of the state of the following (don't make any changes):
|
Verified and confirmed: the GPU/serialbox scenario is covered. Functions where inputs are already arrays derive I've also completed all the remaining unfinished work:
Commits: |
Here's the current state: 1. Defaulted
So 35 problematic defaulted parameters remain (all in files not yet refactored), and 5 legitimate ones. 2. Places where
Beyond
In total, roughly 26 of the 34 |
@copilot for 1. fix the remaining array_ns uses that still need refactoring. Keep For 2. change the ones where |
…functions in interpolation_fields.py Each function now overrides the array_ns parameter by deriving the array namespace from the first NDArray parameter at runtime. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: msimberg <42977+msimberg@users.noreply.github.com>
… functions Override the array_ns parameter by deriving it from the first NDArray argument using data_alloc.array_namespace() in all 11 functions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: msimberg <42977+msimberg@users.noreply.github.com>
… all/any to member form Agent-Logs-Url: https://github.com/C2SM/icon4py/sessions/328d2ac6-5d1f-45e0-9236-cfe0a64ad8f6 Co-authored-by: msimberg <42977+msimberg@users.noreply.github.com>
Done in commits Task 1: Added Task 2: Converted to member form where
|
Summary
Refactored functions that receive input numpy/cupy arrays to derive
array_nsfrom those inputs usingdata_alloc.array_namespace()instead of requiring it as a parameter. Functions that only produce arrays (no suitable input arrays) retain thearray_nsparameter.GPU/serialbox scenario
Arrays read from serialbox are always numpy. The rule "functions that only produce arrays retain
array_ns" correctly covers this: e.g._get_index_field,_create_dummy_decomposition_arrays,_min_identity/_max_identity/_sum_identityall keeparray_ns.Completed
array_ns.all/anyto member form wherearray_nswould otherwise not be neededApproach
For grid/, metrics/, math/, decomposition/, and initialization/: the
array_nsparameter was removed from function signatures and derived internally from input arrays. Callers were updated accordingly.For interpolation/, driver/testcases/, and standalone_driver/testcases/:
array_ns = data_alloc.array_namespace(first_input)was added at the start of each function body to derive the correct namespace from inputs. Thearray_ns: ModuleType = npparameter is kept in signatures for now for backward compatibility.array_ns.all/any→ member formConverted
array_ns.all(...)/array_ns.any(...)to member form(...).all()/(...).any()wherearray_nswould otherwise not be needed in the function:grid/grid_refinement.py:is_limited_area_grid—(refinement_field > 0).any().item()grid/vertical.py:_check_flatness_of_flat_level—(...).all()Other locations (
base.py,vertical.py:715,compute_diffusion_metrics.py) keeparray_ns.all/anysincearray_nsis required for other operations in those functions.Functions that correctly KEEP
array_ns_get_index_fieldin grid_manager.py (input is file name)_create_dummy_decomposition_arraysin halo.py (input issize: int)_min_identity,_max_identity,_sum_identityin mpi_decomposition.py (input isdtype)NumpyFieldBufferAllocator.__call__in factory.py (allocates from shape/dtype)⌨️ Start Copilot coding agent tasks without leaving your editor — available in VS Code, Visual Studio, JetBrains IDEs and Eclipse.