From 3d8eb0e6d1aa8c7e52012d73f69ddf0a02445698 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 12:29:02 +0200 Subject: [PATCH 01/11] python3Packages.wasmtime: init at 44.0.0 Python WebAssembly runtime powered by Wasmtime https://github.com/bytecodealliance/wasmtime-py --- .../python-modules/wasmtime/default.nix | 83 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 85 insertions(+) create mode 100644 pkgs/development/python-modules/wasmtime/default.nix diff --git a/pkgs/development/python-modules/wasmtime/default.nix b/pkgs/development/python-modules/wasmtime/default.nix new file mode 100644 index 000000000000..0d6385e2d5ee --- /dev/null +++ b/pkgs/development/python-modules/wasmtime/default.nix @@ -0,0 +1,83 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + python, + pkgs, + pycparser, + pytest-mypy, + pytestCheckHook, + setuptools-git-versioning, + setuptools, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "wasmtime"; + version = "44.0.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "bytecodealliance"; + repo = "wasmtime-py"; + tag = finalAttrs.version; + hash = "sha256-7K0j4jMsRB7/wNIj0pXxFTy0y7aN37wgCD1XKM92Ayw="; + }; + + postPatch = '' + substituteInPlace pyproject.toml \ + --replace-fail "setuptools-git-versioning>=2.0,<3" "setuptools-git-versioning" \ + --replace-fail 'build-backend = "backend"' 'build-backend = "setuptools.build_meta"' + + substituteInPlace ci/cbindgen.py \ + --replace-fail "'-D__builtin_va_list=int'," "'-D__builtin_va_list=int', '-Dnullptr_t=void*'," + + sed -i '/^backend-path = \[/,/^\]/d' pyproject.toml + + # Use nixpkgs' wasmtime instead of downloading prebuilt C API artifacts. + mkdir -p wasmtime/linux-x86_64 wasmtime/linux-aarch64 + ln -s ${lib.getLib pkgs.wasmtime}/lib/libwasmtime.so wasmtime/linux-x86_64/_libwasmtime.so + ln -s ${lib.getLib pkgs.wasmtime}/lib/libwasmtime.so wasmtime/linux-aarch64/_libwasmtime.so + ''; + + build-system = [ + setuptools + setuptools-git-versioning + ]; + + buildInputs = [ pkgs.wasmtime ]; + + postInstall = '' + # Ensure the installed module can find the shared library at runtime + mkdir -p "$out/${python.sitePackages}/wasmtime/linux-x86_64" + mkdir -p "$out/${python.sitePackages}/wasmtime/linux-aarch64" + ln -sf ${lib.getLib pkgs.wasmtime}/lib/libwasmtime.so "$out/${python.sitePackages}/wasmtime/linux-x86_64/_libwasmtime.so" + ln -sf ${lib.getLib pkgs.wasmtime}/lib/libwasmtime.so "$out/${python.sitePackages}/wasmtime/linux-aarch64/_libwasmtime.so" + ''; + + nativeCheckInputs = [ + pycparser + pytest-mypy + pytestCheckHook + writableTmpDirAsHomeHook + ]; + + disabledTestPaths = [ + "ci/cbindgen.py" + ]; + + pythonImportsCheck = [ "wasmtime" ]; + + preCheck = '' + # cbindgen.py checks bindings against C headers during test collection. + ln -s ${lib.getDev pkgs.wasmtime}/include wasmtime/include + ''; + + meta = { + description = "Python WebAssembly runtime powered by Wasmtime"; + homepage = "https://github.com/bytecodealliance/wasmtime-py"; + changelog = "https://github.com/bytecodealliance/wasmtime-py/releases/tag/{${finalAttrs.src.tag}}"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ fab ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 0f03e26a4ce5..626f12dc1151 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -21071,6 +21071,8 @@ self: super: with self; { wasmerPackages = lib.recurseIntoAttrs (callPackage ../development/python-modules/wasmer { }); + wasmtime = callPackage ../development/python-modules/wasmtime { }; + wasserstein = callPackage ../development/python-modules/wasserstein { }; wassima = callPackage ../development/python-modules/wassima { }; From fe5a63cd70a6c69f7d11dc066f7ae50de2584b85 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 12:32:44 +0200 Subject: [PATCH 02/11] python3Packages.itkwasm: init at 1.0b195 Python interface to itk-wasm WebAssembly (Wasm) modules https://pypi.org/project/itkwasm --- .../python-modules/itkwasm/default.nix | 47 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 49 insertions(+) create mode 100644 pkgs/development/python-modules/itkwasm/default.nix diff --git a/pkgs/development/python-modules/itkwasm/default.nix b/pkgs/development/python-modules/itkwasm/default.nix new file mode 100644 index 000000000000..663df3e947b0 --- /dev/null +++ b/pkgs/development/python-modules/itkwasm/default.nix @@ -0,0 +1,47 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + hatchling, + importlib-metadata, + numpy, + platformdirs, + typing-extensions, + wasmtime, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "itkwasm"; + version = "1.0b195"; + pyproject = true; + + src = fetchPypi { + inherit (finalAttrs) pname version; + hash = "sha256-1OQ0SieMEcrWiIgWT1dQxXdk9lCbWD+1xJ0jfIr0isU="; + }; + + build-system = [ hatchling ]; + + nativeBuildInputs = [ writableTmpDirAsHomeHook ]; + + dependencies = [ + importlib-metadata + numpy + platformdirs + typing-extensions + wasmtime + ]; + + # No test available + doCheck = false; + + pythonImportsCheck = [ "itkwasm" ]; + + meta = { + description = "Python interface to itk-wasm WebAssembly (Wasm) modules"; + homepage = "https://pypi.org/project/itkwasm"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ fab ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 626f12dc1151..0ab96896d06f 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -7801,6 +7801,8 @@ self: super: with self; { } ); + itkwasm = callPackage ../development/python-modules/itkwasm { }; + itsdangerous = callPackage ../development/python-modules/itsdangerous { }; itunespy = callPackage ../development/python-modules/itunespy { }; From 10774551da531d6927138b020407d2e7fceb1b28 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 12:53:01 +0200 Subject: [PATCH 03/11] python3Packages.itkwasm-downsample-wasi: init at 1.8.1 Pipelines for downsampling images https://pypi.org/project/itkwasm-downsample-wasi --- .../itkwasm-downsample-wasi/default.nix | 46 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 48 insertions(+) create mode 100644 pkgs/development/python-modules/itkwasm-downsample-wasi/default.nix diff --git a/pkgs/development/python-modules/itkwasm-downsample-wasi/default.nix b/pkgs/development/python-modules/itkwasm-downsample-wasi/default.nix new file mode 100644 index 000000000000..71b72fdf8a28 --- /dev/null +++ b/pkgs/development/python-modules/itkwasm-downsample-wasi/default.nix @@ -0,0 +1,46 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + hatch-vcs, + hatchling, + importlib-resources, + itkwasm, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "itkwasm-downsample-wasi"; + version = "1.8.1"; + pyproject = true; + + src = fetchPypi { + pname = "itkwasm_downsample_wasi"; + inherit (finalAttrs) version; + hash = "sha256-OykKkZRlRGDw+SsK69z6dqh6LY7eUlyHGdZwmkKsMKQ="; + }; + + build-system = [ + hatch-vcs + hatchling + ]; + + nativeBuildInputs = [ writableTmpDirAsHomeHook ]; + + dependencies = [ + importlib-resources + itkwasm + ]; + + # No tests available + doCheck = false; + + pythonImportsCheck = [ "itkwasm_downsample_wasi" ]; + + meta = { + description = "Pipelines for downsampling images"; + homepage = "https://pypi.org/project/itkwasm-downsample-wasi"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ fab ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 0ab96896d06f..78cbfb0d9b4d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -7803,6 +7803,8 @@ self: super: with self; { itkwasm = callPackage ../development/python-modules/itkwasm { }; + itkwasm-downsample-wasi = callPackage ../development/python-modules/itkwasm-downsample-wasi { }; + itsdangerous = callPackage ../development/python-modules/itsdangerous { }; itunespy = callPackage ../development/python-modules/itunespy { }; From 969dd63526e49ff3f3b7e3e1fff4419d5e3f9a4e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 12:56:45 +0200 Subject: [PATCH 04/11] python3Packages.itkwasm-downsample-emscripten: init at 1.8.1 Pipelines for downsampling images https://pypi.org/project/itkwasm-downsample-emscripten --- .../itkwasm-downsample-emscripten/default.nix | 42 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 6 +++ 2 files changed, 48 insertions(+) create mode 100644 pkgs/development/python-modules/itkwasm-downsample-emscripten/default.nix diff --git a/pkgs/development/python-modules/itkwasm-downsample-emscripten/default.nix b/pkgs/development/python-modules/itkwasm-downsample-emscripten/default.nix new file mode 100644 index 000000000000..87fa26c38d1c --- /dev/null +++ b/pkgs/development/python-modules/itkwasm-downsample-emscripten/default.nix @@ -0,0 +1,42 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + hatch-vcs, + hatchling, + itkwasm, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "itkwasm-downsample-emscripten"; + version = "1.8.1"; + pyproject = true; + + src = fetchPypi { + pname = "itkwasm_downsample_emscripten"; + inherit (finalAttrs) version; + hash = "sha256-kF851K6cy1jozPxd5zE8XVnBAHMljmOqtvpmfmQDZy4="; + }; + + build-system = [ + hatch-vcs + hatchling + ]; + + nativeBuildInputs = [ writableTmpDirAsHomeHook ]; + + dependencies = [ itkwasm ]; + + pythonImportsCheck = [ "itkwasm_downsample_emscripten" ]; + + # No tests available + doCheck = false; + + meta = { + description = "Pipelines for downsampling images"; + homepage = "https://pypi.org/project/itkwasm-downsample-emscripten"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ fab ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 78cbfb0d9b4d..f9e005f4bcad 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -7803,6 +7803,12 @@ self: super: with self; { itkwasm = callPackage ../development/python-modules/itkwasm { }; + itkwasm-downsample = callPackage ../development/python-modules/itkwasm-downsample { }; + + itkwasm-downsample-emscripten = + callPackage ../development/python-modules/itkwasm-downsample-emscripten + { }; + itkwasm-downsample-wasi = callPackage ../development/python-modules/itkwasm-downsample-wasi { }; itsdangerous = callPackage ../development/python-modules/itsdangerous { }; From 7508f0c1e6020bf0287c33a6a66a5d6cf0ec415c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 13:00:21 +0200 Subject: [PATCH 05/11] python3Packages.itkwasm-downsample: init at 1.8.1 Pipelines for downsampling images https://pypi.org/project/itkwasm-downsample --- .../itkwasm-downsample/default.nix | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 pkgs/development/python-modules/itkwasm-downsample/default.nix diff --git a/pkgs/development/python-modules/itkwasm-downsample/default.nix b/pkgs/development/python-modules/itkwasm-downsample/default.nix new file mode 100644 index 000000000000..6e0176183017 --- /dev/null +++ b/pkgs/development/python-modules/itkwasm-downsample/default.nix @@ -0,0 +1,48 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + hatch-vcs, + hatchling, + itkwasm, + itkwasm-downsample-emscripten, + itkwasm-downsample-wasi, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "itkwasm-downsample"; + version = "1.8.1"; + pyproject = true; + + src = fetchPypi { + pname = "itkwasm_downsample"; + inherit (finalAttrs) version; + hash = "sha256-tKkct5+39p5jM/vBj3RTSM1YZZoLnajh85Eon4/wavs="; + }; + + build-system = [ + hatch-vcs + hatchling + ]; + + nativeBuildInputs = [ writableTmpDirAsHomeHook ]; + + dependencies = [ + itkwasm + itkwasm-downsample-emscripten + itkwasm-downsample-wasi + ]; + + # No tests available + doCheck = false; + + pythonImportsCheck = [ "itkwasm_downsample" ]; + + meta = { + description = "Pipelines for downsampling images"; + homepage = "https://pypi.org/project/itkwasm-downsample"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ fab ]; + }; +}) From 100796d5a96a1e88ce08c1f2684ceaf58e9a22b6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 13:22:27 +0200 Subject: [PATCH 06/11] python3Packages.itkwasm-image-io-emscripten: init at 1.6.1 Input and output for scientific and medical image file formats https://pypi.org/project/itkwasm-image-io-emscripten --- .../itkwasm-image-io-emscripten/default.nix | 39 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 6 +++ 2 files changed, 45 insertions(+) create mode 100644 pkgs/development/python-modules/itkwasm-image-io-emscripten/default.nix diff --git a/pkgs/development/python-modules/itkwasm-image-io-emscripten/default.nix b/pkgs/development/python-modules/itkwasm-image-io-emscripten/default.nix new file mode 100644 index 000000000000..953a3cefa2d4 --- /dev/null +++ b/pkgs/development/python-modules/itkwasm-image-io-emscripten/default.nix @@ -0,0 +1,39 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + hatch-vcs, + hatchling, + itkwasm, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "itkwasm-image-io-emscripten"; + version = "1.6.1"; + pyproject = true; + + src = fetchPypi { + pname = "itkwasm_image_io_emscripten"; + inherit (finalAttrs) version; + hash = "sha256-lFYLpPM4LVSPANpKGg7WSYrrfvpmE2T1w4igidUUL3I="; + }; + + build-system = [ + hatch-vcs + hatchling + ]; + + nativeBuildInputs = [ writableTmpDirAsHomeHook ]; + + dependencies = [ itkwasm ]; + + pythonImportsCheck = [ "itkwasm_image_io_emscripten" ]; + + meta = { + description = "Input and output for scientific and medical image file formats"; + homepage = "https://pypi.org/project/itkwasm-image-io-emscripten"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ fab ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index f9e005f4bcad..24de9276aae4 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -7811,6 +7811,12 @@ self: super: with self; { itkwasm-downsample-wasi = callPackage ../development/python-modules/itkwasm-downsample-wasi { }; + itkwasm-image-io = callPackage ../development/python-modules/itkwasm-image-io { }; + + itkwasm-image-io-emscripten = + callPackage ../development/python-modules/itkwasm-image-io-emscripten + { }; + itsdangerous = callPackage ../development/python-modules/itsdangerous { }; itunespy = callPackage ../development/python-modules/itunespy { }; From 300effc4d6f47ff48bfb6673d40efe8ecc274767 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 13:27:05 +0200 Subject: [PATCH 07/11] python3Packages.itkwasm-image-io-wasi: init at 1.6.1 Input and output for scientific and medical image file formats https://pypi.org/project/itkwasm-image-io-wasi --- .../itkwasm-image-io-wasi/default.nix | 46 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 48 insertions(+) create mode 100644 pkgs/development/python-modules/itkwasm-image-io-wasi/default.nix diff --git a/pkgs/development/python-modules/itkwasm-image-io-wasi/default.nix b/pkgs/development/python-modules/itkwasm-image-io-wasi/default.nix new file mode 100644 index 000000000000..8bee064ec41d --- /dev/null +++ b/pkgs/development/python-modules/itkwasm-image-io-wasi/default.nix @@ -0,0 +1,46 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + hatch-vcs, + hatchling, + importlib-resources, + itkwasm, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "itkwasm-image-io-wasi"; + version = "1.6.1"; + pyproject = true; + + src = fetchPypi { + pname = "itkwasm_image_io_wasi"; + inherit (finalAttrs) version; + hash = "sha256-g3w/OPU9N1GxJkW9kKrOvGtVPRVb6zTy5n2nB5WU7+Q="; + }; + + build-system = [ + hatch-vcs + hatchling + ]; + + nativeBuildInputs = [ writableTmpDirAsHomeHook ]; + + dependencies = [ + importlib-resources + itkwasm + ]; + + pythonImportsCheck = [ "itkwasm_image_io_wasi" ]; + + # No tests available + doCheck = false; + + meta = { + description = "Input and output for scientific and medical image file formats"; + homepage = "https://pypi.org/project/itkwasm-image-io-wasi"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ fab ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 24de9276aae4..e58e99dd34b0 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -7817,6 +7817,8 @@ self: super: with self; { callPackage ../development/python-modules/itkwasm-image-io-emscripten { }; + itkwasm-image-io-wasi = callPackage ../development/python-modules/itkwasm-image-io-wasi { }; + itsdangerous = callPackage ../development/python-modules/itsdangerous { }; itunespy = callPackage ../development/python-modules/itunespy { }; From 48a3cee63f6c25927b6881ba4a18aeca72411cf7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 13:30:52 +0200 Subject: [PATCH 08/11] python3Packages.itkwasm-image-io: init at 1.6.1 Input and output for scientific and medical image file formats https://pypi.org/project/itkwasm-image-io --- .../itkwasm-image-io/default.nix | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 pkgs/development/python-modules/itkwasm-image-io/default.nix diff --git a/pkgs/development/python-modules/itkwasm-image-io/default.nix b/pkgs/development/python-modules/itkwasm-image-io/default.nix new file mode 100644 index 000000000000..ac2df19cb267 --- /dev/null +++ b/pkgs/development/python-modules/itkwasm-image-io/default.nix @@ -0,0 +1,48 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + hatch-vcs, + hatchling, + itkwasm, + itkwasm-image-io-emscripten, + itkwasm-image-io-wasi, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "itkwasm-image-io"; + version = "1.6.1"; + pyproject = true; + + src = fetchPypi { + pname = "itkwasm_image_io"; + inherit (finalAttrs) version; + hash = "sha256-Iwb6Xd+N3P+QsWhhu5q1Dx/joUClNgHBaWrgUalx0V4="; + }; + + build-system = [ + hatch-vcs + hatchling + ]; + + nativeBuildInputs = [ writableTmpDirAsHomeHook ]; + + dependencies = [ + itkwasm + itkwasm-image-io-emscripten + itkwasm-image-io-wasi + ]; + + pythonImportsCheck = [ "itkwasm_image_io" ]; + + # No tests available + doCheck = false; + + meta = { + description = "Input and output for scientific and medical image file formats"; + homepage = "https://pypi.org/project/itkwasm-image-io"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ fab ]; + }; +}) From 86ba090bd48bee4f13b6bd8d8f45f9d0985acf6a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 15:18:18 +0200 Subject: [PATCH 09/11] python3Packages.ngff-zarr: init at 0.34.0 Open Microscopy Environment (OME) Next Generation File Format (NGFF) Zarr implementation https://github.com/fideus-labs/ngff-zarr --- .../python-modules/ngff-zarr/default.nix | 142 ++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 144 insertions(+) create mode 100644 pkgs/development/python-modules/ngff-zarr/default.nix diff --git a/pkgs/development/python-modules/ngff-zarr/default.nix b/pkgs/development/python-modules/ngff-zarr/default.nix new file mode 100644 index 000000000000..9f9385019067 --- /dev/null +++ b/pkgs/development/python-modules/ngff-zarr/default.nix @@ -0,0 +1,142 @@ +{ + lib, + buildPythonPackage, + dask, + dask-image, + deepdiff, + fetchFromGitHub, + hatchling, + importlib-resources, + itk, + itkwasm-downsample, + itkwasm-image-io, + itkwasm, + jsonschema, + nibabel, + imageio, + numpy, + imagecodecs, + platformdirs, + pooch, + psutil, + pytestCheckHook, + rich-argparse, + rich, + tensorstore, + tifffile, + typing-extensions, + writableTmpDirAsHomeHook, + zarr, +}: + +buildPythonPackage (finalAttrs: { + pname = "ngff-zarr"; + version = "0.34.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "fideus-labs"; + repo = "ngff-zarr"; + tag = "py-v${finalAttrs.version}"; + hash = "sha256-5OiC1NHVEX60oHPwTJ0RN2fQnitwPBMNSfvbMcKAgvc="; + }; + + sourceRoot = "${finalAttrs.src.name}/py/"; + + build-system = [ hatchling ]; + + dependencies = [ + dask + importlib-resources + itkwasm + itkwasm-downsample + numpy + platformdirs + psutil + rich + rich-argparse + typing-extensions + zarr + ] + ++ dask.optional-dependencies.array; + + optional-dependencies = { + dask-image = [ dask-image ]; + # itk = [ itk-filtering ]; + cli = [ + # itk-filtering + # itk-io + # liffile + dask + dask-image + imagecodecs + imageio + itk + itkwasm-image-io + nibabel + tifffile + ] + ++ dask.optional-dependencies.distributed; + tensorstore = [ tensorstore ]; + validate = [ jsonschema ]; + }; + + nativeCheckInputs = [ + deepdiff + pooch + pytestCheckHook + writableTmpDirAsHomeHook + ] + ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies); + + pythonImportsCheck = [ "ngff_zarr" ]; + + disabledTestPaths = [ + # No CLI tests + "test/test_cli_input_to_ngff_image.py" + "test/test_cli_output.py" + "test/test_cli_relative_paths.py" + # Attribute errors + "test/test_pyramid_integrity.py" + "test/test_multiscales_type.py" + "test/test_convert_ome_zarr_version.py" + "test/test_itk_image_to_ngff_image.py" + # Data missing + "test/test_hcs.py" + "test/test_hcs_simple.py" + "test/test_ngff_validation.py" + "test/test_nibabel_image_to_ngff_image.py" + # Network access + "test/test_from_ngff_zarr_tensorstore.py" + "test/test_from_ngff_zarr.py" + "test/test_large_serialization.py" + "test/test_ngff_image_to_itk_image.py" + "test/test_omero.py" + "test/test_rfc9_ozx.py" + "test/test_to_ngff_zarr_dask_image.py" + "test/test_to_ngff_zarr_itk.py" + "test/test_to_ngff_zarr_itkwasm.py" + "test/test_to_ngff_zarr_rfc2_zarr_v3.py" + "test/test_to_ngff_zarr_sharding.py" + "test/test_to_ngff_zarr_tensorstore.py" + "test/test_to_ngff_zarr_v3_compression.py" + # Missing dependencies + "test/test_lif_to_ngff_image.py" + ]; + + disabledTests = [ + # Assertion errors + "test_2d_yx" + "test_3d_zyx" + "test_smaller_dask_graph" + "test_tensorstore_compression" + ]; + + meta = { + description = "Open Microscopy Environment (OME) Next Generation File Format (NGFF) Zarr implementation"; + homepage = "https://github.com/fideus-labs/ngff-zarr"; + changelog = "https://github.com/fideus-labs/ngff-zarr/releases/tag/${finalAttrs.src.tag}"; + license = lib.licenses.isc; + maintainers = with lib.maintainers; [ fab ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index e58e99dd34b0..c69083a4038b 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -11090,6 +11090,8 @@ self: super: with self; { nftables = callPackage ../os-specific/linux/nftables/python.nix { inherit (pkgs) nftables; }; + ngff-zarr = callPackage ../development/python-modules/ngff-zarr { }; + nglview = callPackage ../development/python-modules/nglview { }; nh3 = callPackage ../development/python-modules/nh3 { }; From b8b85bf6e77a404504ada366302f4f8649a17018 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 15:22:14 +0200 Subject: [PATCH 10/11] python3Packages.multiscale-spatial-image: update build-system - add imssing inputs --- .../multiscale-spatial-image/default.nix | 44 +++++++++---------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/pkgs/development/python-modules/multiscale-spatial-image/default.nix b/pkgs/development/python-modules/multiscale-spatial-image/default.nix index b946c4cfe038..4aa584e13df2 100644 --- a/pkgs/development/python-modules/multiscale-spatial-image/default.nix +++ b/pkgs/development/python-modules/multiscale-spatial-image/default.nix @@ -1,23 +1,20 @@ { lib, buildPythonPackage, - fetchFromGitHub, - hatchling, + dask-image, dask, + fetchFromGitHub, + fsspec, + hatch-vcs, + hatchling, + ngff-zarr, numpy, python-dateutil, spatial-image, - xarray, + writableTmpDirAsHomeHook, xarray-dataclass, + xarray, zarr, - dask-image, - fsspec, - jsonschema, - nbmake, - pooch, - pytestCheckHook, - pytest-mypy, - urllib3, }: buildPythonPackage rec { @@ -32,10 +29,20 @@ buildPythonPackage rec { hash = "sha256-uF9ZccLvP1ref6qn3l6EpedsoK29Q8lAdr68JjsYMis="; }; - build-system = [ hatchling ]; + pythonRelaxDeps = [ + "dask" + "ngff-zarr" + "xarray" + ]; + + build-system = [ + hatch-vcs + hatchling + ]; dependencies = [ dask + ngff-zarr numpy python-dateutil spatial-image @@ -49,20 +56,9 @@ buildPythonPackage rec { #itk = [ # itk-filtering # not in nixpkgs yet #]; - test = [ - dask-image - fsspec - #ipfsspec # not in nixpkgs - #itk-filtering # not in nixpkgs - jsonschema - nbmake - pooch - pytest-mypy - urllib3 - ]; }; - nativeCheckInputs = [ pytestCheckHook ] ++ optional-dependencies.test; + nativeBuildInputs = [ writableTmpDirAsHomeHook ]; doCheck = false; # all test files try to download data From 9ef8398d10668ddb9f7afde9d6f1f0e4945a5e14 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 4 May 2026 15:23:22 +0200 Subject: [PATCH 11/11] python3Packages.multiscale-spatial-image: migrate to finalAttrs --- .../python-modules/multiscale-spatial-image/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/development/python-modules/multiscale-spatial-image/default.nix b/pkgs/development/python-modules/multiscale-spatial-image/default.nix index 4aa584e13df2..3e9f6837875e 100644 --- a/pkgs/development/python-modules/multiscale-spatial-image/default.nix +++ b/pkgs/development/python-modules/multiscale-spatial-image/default.nix @@ -17,7 +17,7 @@ zarr, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "multiscale-spatial-image"; version = "2.1.0"; pyproject = true; @@ -25,7 +25,7 @@ buildPythonPackage rec { src = fetchFromGitHub { owner = "spatial-image"; repo = "multiscale-spatial-image"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-uF9ZccLvP1ref6qn3l6EpedsoK29Q8lAdr68JjsYMis="; }; @@ -67,8 +67,8 @@ buildPythonPackage rec { meta = { description = "Generate a multiscale, chunked, multi-dimensional spatial image data structure that can serialized to OME-NGFF"; homepage = "https://github.com/spatial-image/multiscale-spatial-image"; - changelog = "https://github.com/spatial-image/multiscale-spatial-image/releases/tag/${src.tag}"; + changelog = "https://github.com/spatial-image/multiscale-spatial-image/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.asl20; maintainers = with lib.maintainers; [ bcdarwin ]; }; -} +})