diff --git a/pkgs/development/python-modules/mpi-pytest/default.nix b/pkgs/development/python-modules/mpi-pytest/default.nix new file mode 100644 index 000000000000..0d7933098a1f --- /dev/null +++ b/pkgs/development/python-modules/mpi-pytest/default.nix @@ -0,0 +1,59 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + mpi4py, + pytest, + pytestCheckHook, + mpiCheckPhaseHook, +}: + +buildPythonPackage rec { + pname = "mpi-pytest"; + version = "2025.4.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "firedrakeproject"; + repo = "mpi-pytest"; + tag = "v${version}"; + hash = "sha256-r9UB5H+qAJc6k2SVAiOCI2yRDLNv2zKRmfrAan+cX9I="; + }; + + # A temporary fixup to support fork mode with openmpi implemention + # See https://github.com/firedrakeproject/mpi-pytest/pull/17 + postPatch = lib.optionalString (mpi4py.mpi.pname == "openmpi") '' + substituteInPlace pytest_mpi/plugin.py \ + --replace-fail '"-genv", CHILD_PROCESS_FLAG, "1"' '"-x", f"{CHILD_PROCESS_FLAG}=1"' + ''; + + build-system = [ + setuptools + ]; + + dependencies = [ + mpi4py + pytest + ]; + + pythonImportsCheck = [ + "pytest_mpi" + ]; + + nativeCheckInputs = [ + pytestCheckHook + mpiCheckPhaseHook + mpi4py.mpi + ]; + + __darwinAllowLocalNetworking = true; + + meta = { + homepage = "https://github.com/firedrakeproject/mpi-pytest"; + description = "Pytest plugin that lets you run tests in parallel with MPI"; + changelog = "https://github.com/firedrakeproject/mpi-pytest/releases/tag/${src.tag}"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ qbisi ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 1613dfd9e0b5..0d1b444b63c3 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -9102,6 +9102,8 @@ self: super: with self; { mpegdash = callPackage ../development/python-modules/mpegdash { }; + mpi-pytest = callPackage ../development/python-modules/mpi-pytest { }; + mpi4py = callPackage ../development/python-modules/mpi4py { }; mpire = callPackage ../development/python-modules/mpire { };