From fd303e8ec93ff376ea81b2597e6ed7608a203c2c Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Mon, 21 Apr 2025 19:37:00 +0200 Subject: [PATCH] python312Packages.pymoo: cleanup, fix build --- .../python-modules/pymoo/default.nix | 89 ++++++++++++------- 1 file changed, 57 insertions(+), 32 deletions(-) diff --git a/pkgs/development/python-modules/pymoo/default.nix b/pkgs/development/python-modules/pymoo/default.nix index 7f9b6c6908b6..6f4d59689c50 100644 --- a/pkgs/development/python-modules/pymoo/default.nix +++ b/pkgs/development/python-modules/pymoo/default.nix @@ -2,22 +2,37 @@ lib, buildPythonPackage, fetchFromGitHub, + + # build-system + cython, setuptools, - pytestCheckHook, - writeText, + + # dependencies autograd, cma, - cython, deprecated, dill, matplotlib, + numpy, + scipy, + + # tests + pytestCheckHook, nbformat, notebook, numba, - numpy, - scipy, + pythonAtLeast, + writeText, }: +let + pymoo_data = fetchFromGitHub { + owner = "anyoptimization"; + repo = "pymoo-data"; + rev = "33f61a78182ceb211b95381dd6d3edee0d2fc0f3"; + hash = "sha256-iGWPepZw3kJzw5HKV09CvemVvkvFQ38GVP+BAryBSs0="; + }; +in buildPythonPackage rec { pname = "pymoo"; version = "0.6.1.3"; @@ -30,27 +45,32 @@ buildPythonPackage rec { hash = "sha256-CbeJwv51lu4cABgGieqy/8DCDJCb8wOPPVqUHk8Jb7E="; }; - pymoo_data = fetchFromGitHub { - owner = "anyoptimization"; - repo = "pymoo-data"; - rev = "33f61a78182ceb211b95381dd6d3edee0d2fc0f3"; - hash = "sha256-iGWPepZw3kJzw5HKV09CvemVvkvFQ38GVP+BAryBSs0="; - }; - - pythonRelaxDeps = [ "cma" ]; - pythonRemoveDeps = [ "alive-progress" ]; - postPatch = '' substituteInPlace pymoo/util/display/display.py \ --replace-fail "from pymoo.util.display.progress import ProgressBar" "" \ - --replace-fail "ProgressBar() if progress else None" \ - "print('Missing alive_progress needed for progress=True!') if progress else None" + --replace-fail \ + "ProgressBar() if progress else None" \ + "print('Missing alive_progress needed for progress=True!') if progress else None" + + substituteInPlace pymoo/algorithms/soo/nonconvex/es.py \ + --replace-fail "np.math.ceil" "np.ceil" + substituteInPlace pymoo/util/mnn.py \ + --replace-fail "np.product" "np.prod" + + substituteInPlace pymoo/config.py \ + --replace-fail \ + "https://raw.githubusercontent.com/anyoptimization/pymoo-data/main/" \ + "file://${pymoo_data}/" ''; + pythonRelaxDeps = [ "cma" ]; + pythonRemoveDeps = [ "alive-progress" ]; + build-system = [ setuptools cython ]; + dependencies = [ autograd cma @@ -62,10 +82,6 @@ buildPythonPackage rec { ]; preCheck = '' - substituteInPlace pymoo/config.py \ - --replace-fail "https://raw.githubusercontent.com/anyoptimization/pymoo-data/main/" \ - "file://$pymoo_data/" - # Some tests require a grad backend to be configured, this is a hacky way to do so. # The choice must be either "jax.numpy" or "autograd.numpy" echo 'from pymoo.gradient import activate; activate("autograd.numpy")' >> tests/conftest.py @@ -78,15 +94,24 @@ buildPythonPackage rec { ]; # Select some lightweight tests pytestFlagsArray = [ "-m 'not long'" ]; - disabledTests = [ - # ModuleNotFoundError: No module named 'pymoo.cython.non_dominated_sorting' - "test_fast_non_dominated_sorting" - "test_efficient_non_dominated_sort" - "test_dominance_degree_non_dominated_sort" + disabledTests = + [ + # ModuleNotFoundError: No module named 'pymoo.cython.non_dominated_sorting' + "test_fast_non_dominated_sorting" + "test_efficient_non_dominated_sort" + "test_dominance_degree_non_dominated_sort" - # sensitive to float precision - "test_cd_and_pcd" - ]; + # sensitive to float precision + "test_cd_and_pcd" + + # TypeError: 'NoneType' object is not subscriptable + "test_dascomp" + "test_mw" + ] + ++ lib.optionals (pythonAtLeast "3.13") [ + # AttributeError: 'ZDT3' object has no attribute 'elementwise' + "test_kktpm_correctness" + ]; disabledTestPaths = [ # sensitive to float precision "tests/algorithms/test_no_modfication.py" @@ -98,10 +123,10 @@ buildPythonPackage rec { pythonImportsCheck = [ "pymoo" ]; - meta = with lib; { + meta = { description = "Multi-objective Optimization in Python"; homepage = "https://pymoo.org/"; - license = licenses.asl20; - maintainers = with maintainers; [ veprbl ]; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ veprbl ]; }; }