@@ -555,7 +555,7 @@ def _resolve_login_pixi_env(
555555 prefix : str ,
556556 pixi_cfg : dict [str , Any ],
557557 runtime : dict [str , Any ],
558- compute_mpi : str ,
558+ compute_mpi : str | None ,
559559) -> dict [str , str ] | None :
560560 runtime_pixi = runtime .get ('pixi' )
561561 if not isinstance (runtime_pixi , dict ):
@@ -573,6 +573,8 @@ def _resolve_login_pixi_env(
573573 resolved_login_mpi , login_mpi_prefix = _get_mpi_settings (
574574 pixi_cfg = {'mpi' : login_mpi }
575575 )
576+ if resolved_login_mpi is None or login_mpi_prefix is None :
577+ raise ValueError ('login_mpi must resolve to a non-empty MPI setting' )
576578
577579 if 'login_prefix' in runtime_pixi :
578580 login_prefix_raw = runtime_pixi .get ('login_prefix' )
@@ -895,15 +897,12 @@ def _resolve_pixi_mpi(
895897 * ,
896898 pixi_cfg : dict [str , Any ],
897899 runtime : dict [str , Any ],
898- ) -> tuple [str , str ]:
899- mpi_override = None
900+ ) -> tuple [str | None , str | None ]:
901+ mpi_cfg = pixi_cfg
900902 runtime_pixi = runtime .get ('pixi' )
901903 if isinstance (runtime_pixi , dict ):
902- mpi_override = runtime_pixi .get ('mpi' )
903- if mpi_override is not None :
904- mpi_cfg : dict [str , Any ] = {'mpi' : str (mpi_override )}
905- else :
906- mpi_cfg = pixi_cfg
904+ if 'mpi' in runtime_pixi :
905+ mpi_cfg = {'mpi' : runtime_pixi .get ('mpi' )}
907906 return _get_mpi_settings (pixi_cfg = mpi_cfg )
908907
909908
@@ -1416,7 +1415,7 @@ def _write_load_script(
14161415 software_version : str ,
14171416 runtime_version_cmd : str | None ,
14181417 machine : str | None ,
1419- compute_pixi_mpi : str ,
1418+ compute_pixi_mpi : str | None ,
14201419 toolchain_compiler : str | None ,
14211420 toolchain_mpi : str | None ,
14221421 spack_library_view : str | None ,
@@ -1504,7 +1503,7 @@ def _write_load_script(
15041503 runtime_version_cmd_sh = shlex .quote (runtime_version_cmd or '' ),
15051504 machine = machine or '' ,
15061505 load_script = os .path .abspath (script_path ),
1507- compute_pixi_mpi = compute_pixi_mpi ,
1506+ compute_pixi_mpi = compute_pixi_mpi or '' ,
15081507 login_prefix = login_prefix_abs ,
15091508 login_pixi_toml = login_pixi_toml ,
15101509 login_pixi_mpi = login_pixi_mpi ,
@@ -1537,7 +1536,7 @@ def _write_load_scripts(
15371536 software_version : str ,
15381537 runtime_version_cmd : str | None ,
15391538 machine : str | None ,
1540- compute_pixi_mpi : str ,
1539+ compute_pixi_mpi : str | None ,
15411540 toolchain_pairs : list [tuple [str , str ]],
15421541 spack_results : Any ,
15431542 spack_software_env : Any ,
@@ -1710,29 +1709,26 @@ def _pixi_install(
17101709
17111710def _get_mpi_settings (
17121711 pixi_cfg : dict [str , Any ],
1713- ) -> tuple [str , str ]:
1712+ ) -> tuple [str | None , str | None ]:
17141713 """Determine MPI-related template replacements.
17151714
17161715 Returns
17171716 -------
1718- mpi : str
1717+ mpi : str or None
17191718 The conda package name for MPI (e.g. "mpich", "openmpi", or "nompi").
1720- mpi_prefix : str
1719+ mpi_prefix : str or None
17211720 The conda-forge variant prefix used in build-string selectors
17221721 (e.g. "nompi", "mpi_mpich", "mpi_openmpi").
17231722 """
17241723
17251724 if 'mpi' not in pixi_cfg :
1726- raise ValueError (
1727- "'mpi' not found in [pixi] section of deploy/config.yaml.j2"
1728- )
1725+ return None , None
17291726
1730- mpi_raw = pixi_cfg .get ('mpi' )
1731- mpi = str (mpi_raw ).strip ().lower () if mpi_raw is not None else ''
1732- if not mpi :
1733- raise ValueError (
1734- "'mpi' in [pixi] section of deploy/config.yaml.j2 is empty"
1735- )
1727+ mpi = _normalize_optional_token (pixi_cfg .get ('mpi' ))
1728+ if mpi is None :
1729+ return None , None
1730+
1731+ mpi = mpi .lower ()
17361732 if any (ch .isspace () for ch in mpi ):
17371733 raise ValueError (
17381734 "'mpi' in [pixi] section of deploy/config.yaml.j2 must not "
0 commit comments