From 3e17027d913a93d61b0791a680690cf790dd31dc Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Wed, 10 Jun 2026 21:48:48 +0000 Subject: [PATCH] python3Packages.matscipy: init at 1.2.0 --- .../python-modules/matscipy/default.nix | 186 ++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 188 insertions(+) create mode 100644 pkgs/development/python-modules/matscipy/default.nix diff --git a/pkgs/development/python-modules/matscipy/default.nix b/pkgs/development/python-modules/matscipy/default.nix new file mode 100644 index 000000000000..9183f200e54d --- /dev/null +++ b/pkgs/development/python-modules/matscipy/default.nix @@ -0,0 +1,186 @@ +{ + lib, + stdenv, + buildPythonPackage, + fetchFromGitHub, + pythonAtLeast, + + fetchpatch, + + # build-system + meson-python, + ninja, + numpy, + + # dependencies + ase, + packaging, + scipy, + + # optional-dependencies + # cli: + argcomplete, + # dislocation: + atomman, + nglview, + ovito, + # docs: + jupytext, + myst-nb, + numpydoc, + pydata-sphinx-theme, + sphinx, + sphinx-copybutton, + sphinx-rtd-theme, + sphinxcontrib-spelling, + + # tests + pytest-subtests, + pytest-timeout, + pytest-xdist, + sympy, + + # tests + pytestCheckHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "matscipy"; + version = "1.2.0"; + pyproject = true; + __structuredAttrs = true; + + src = fetchFromGitHub { + owner = "libAtoms"; + repo = "matscipy"; + tag = "v${finalAttrs.version}"; + hash = "sha256-XmY13B5S8tXYiUaec9gL6e0E3bSnbaMteHHiX2ij2sw="; + }; + + patches = [ + # API: Fix compatibility with ASE 3.27.0 + # https://github.com/libAtoms/matscipy/pull/301 + (fetchpatch { + url = "https://github.com/libAtoms/matscipy/commit/6a91a4646e30796abe51ef3efa4b479d4471aae0.patch"; + hash = "sha256-PH9I+7+nN6fSkugVbxPCs3LqjhP/fQ5NZjiNQ7F70YU="; + }) + (fetchpatch { + url = "https://github.com/libAtoms/matscipy/commit/f6478347bbceeab8ec177042b6ed1243e742d55f.patch"; + hash = "sha256-DKk+1TlP+OngcmycsCIE+7s2h/7wa7Gxv9APbuIAoZg="; + }) + ]; + + postPatch = + # Otherwise the script fails as it can't resolve the version with git + '' + substituteInPlace discover_version.py \ + --replace-fail \ + "version = get_version_from_git()" \ + "version = '${finalAttrs.version}'" + '' + # Failed: [pytest] section in setup.cfg files is no longer supported, change to [tool:pytest] instead. + + '' + substituteInPlace setup.cfg \ + --replace-fail \ + "[pytest]" \ + "[tool:pytest]" + ''; + + build-system = [ + # meson + meson-python + ninja + numpy + ]; + + dependencies = [ + ase + numpy + packaging + scipy + ]; + + optional-dependencies = { + cli = [ + argcomplete + ]; + dislocation = [ + atomman + nglview + ovito + ]; + docs = [ + jupytext + # matscipy + myst-nb + numpydoc + pydata-sphinx-theme + sphinx + sphinx-copybutton + sphinx-rtd-theme + sphinxcontrib-spelling + ]; + }; + + pythonImportsCheck = [ "matscipy" ]; + + nativeCheckInputs = [ + pytest-subtests + pytest-timeout + pytest-xdist + pytestCheckHook + sympy + ]; + + preCheck = '' + rm -rf matscipy + ''; + + disabledTestPaths = [ + # The CLI tests look for the source scripts under `../matscipy/cli` relative to the test + # directory, which we remove in `preCheck` so that tests run against the installed package. + "tests/test_electrochemistry_cli.py" + ] + ++ lib.optionals (pythonAtLeast "3.14") [ + # ValueError: cannot resize an array that may be referenced by another object + "tests/manybody/test_newmb.py" + "tests/test_neighbours.py" + ]; + + disabledTests = [ + # Numerical assertion failure + "test_birch_constants" + + # numpy 2 / ase 3.28 incompatibilities in matscipy 1.2.0 + # `ase.phonons` finite-difference reference no longer matches + "test_hessian_monoatomic" + "test_hessian_amorphous_alloy" + "test_hessian_crystalline_alloy" + + # TypeError: only 0-dimensional arrays can be converted to Python scalars + "test_eam_read_write" + + # AttributeError: 'Log' object has no attribute 'close' + "test_logger" + "test_usage" + ] + ++ lib.optionals (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64) [ + # AssertionError: assert np.False (numerical precision) + "test_fixed_line_atoms" + ] + ++ lib.optionals (pythonAtLeast "3.14") [ + # ValueError: cannot resize an array that may be referenced by another object + "test_harmonic_bond" + "test_read_molecules_from_atoms" + "test_read_molecules_from_lammps_data" + "test_read_write_lammps_data" + ]; + + meta = { + description = "Materials science with Python at the atomic-scale"; + homepage = "https://github.com/libAtoms/matscipy"; + changelog = "https://github.com/libAtoms/matscipy/blob/${finalAttrs.src.tag}/ChangeLog.md"; + license = lib.licenses.lgpl21Only; + maintainers = with lib.maintainers; [ GaetanLepage ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 22c03dc51d65..66728b94791e 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -9752,6 +9752,8 @@ self: super: with self; { matrix-nio = callPackage ../development/python-modules/matrix-nio { }; + matscipy = callPackage ../development/python-modules/matscipy { }; + matter-ble-proxy = callPackage ../development/python-modules/matter-ble-proxy { }; matter-python-client = callPackage ../development/python-modules/matter-python-client { };