diff --git a/.changeset/hilary-runenv.md b/.changeset/hilary-runenv.md new file mode 100644 index 0000000..8420927 --- /dev/null +++ b/.changeset/hilary-runenv.md @@ -0,0 +1,18 @@ +--- +"@platforma-open/milaboratories.runenv-python-3.12.10-hilary": minor +"@platforma-open/milaboratories.runenv-python-3": minor +--- + +Add the `3.12.10-hilary` Python run environment: HILARy (`hilary`, invoked as `python -m hilary`) plus its +runtime closure, for the Lineage Trees block's clonal-lineage clustering. + +`hilary` is declared under `noDeps`, following the `3.10.21-clustcr` precedent. The builder resolves each +declared package's closure separately, so HILARy's loose requirements (`numpy<3`, `scipy<2,>1.11`, +`pandas<3,>=2.2`) otherwise pulled the newest of each on top of the pinned versions and vendored duplicates. + +`hilary` ships a universal `py3-none-any` wheel, so nothing here compiles. + +There is no Linux ARM64 root, and the CI matrix omits it. `atriegc`, HILARy's trie-based CDR3 neighbour +search, publishes no Linux ARM64 wheel for any Python version, and its 0.0.4 sdist cannot substitute: it +ships `src/main.cpp` but omits the `trie_container.hpp` header that file includes, so a source build fails at +the first compile. diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0be5661..c21da44 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -108,6 +108,11 @@ jobs: {"os":"macos-15-large", "arch":"amd64", "selector":"./python-3.12.10-clustering"}, {"os":"windows-latest", "arch":"amd64", "selector":"./python-3.12.10-clustering"}, + {"os":"ubuntu-large-amd64", "arch":"amd64", "selector":"./python-3.12.10-hilary"}, + {"os":"macos-15", "arch":"arm64", "selector":"./python-3.12.10-hilary"}, + {"os":"macos-15-large", "arch":"amd64", "selector":"./python-3.12.10-hilary"}, + {"os":"windows-latest", "arch":"amd64", "selector":"./python-3.12.10-hilary"}, + {"os":"ubuntu-large-arm64", "arch":"arm64", "selector":"./python-3.10.21-clustcr"}, {"os":"ubuntu-large-amd64", "arch":"amd64", "selector":"./python-3.10.21-clustcr"}, {"os":"macos-15", "arch":"arm64", "selector":"./python-3.10.21-clustcr"}, diff --git a/catalogue/package.json b/catalogue/package.json index 78f0e5c..d29fea4 100644 --- a/catalogue/package.json +++ b/catalogue/package.json @@ -47,6 +47,9 @@ }, "3.10.21-clustcr": { "reference": "@platforma-open/milaboratories.runenv-python-3.10.21-clustcr/dist/tengo/software/main.sw.json" + }, + "3.12.10-hilary": { + "reference": "@platforma-open/milaboratories.runenv-python-3.12.10-hilary/dist/tengo/software/main.sw.json" } } }, @@ -66,7 +69,8 @@ "@platforma-open/milaboratories.runenv-python-3.12.10-torch-cuda": "workspace:*", "@platforma-open/milaboratories.runenv-python-3.12.10-clustering": "workspace:*", "@platforma-open/milaboratories.runenv-python-3.12.10-pgen": "workspace:*", - "@platforma-open/milaboratories.runenv-python-3.10.21-clustcr": "workspace:*" + "@platforma-open/milaboratories.runenv-python-3.10.21-clustcr": "workspace:*", + "@platforma-open/milaboratories.runenv-python-3.12.10-hilary": "workspace:*" }, "devDependencies": { "@platforma-sdk/package-builder": "catalog:" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f2dbaad..7b89943 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,6 +74,9 @@ importers: '@platforma-open/milaboratories.runenv-python-3.12.10-h5ad': specifier: workspace:* version: link:../python-3.12.10-h5ad + '@platforma-open/milaboratories.runenv-python-3.12.10-hilary': + specifier: workspace:* + version: link:../python-3.12.10-hilary '@platforma-open/milaboratories.runenv-python-3.12.10-humanness': specifier: workspace:* version: link:../python-3.12.10-humanness @@ -172,6 +175,18 @@ importers: specifier: 'catalog:' version: 4.20.6 + python-3.12.10-hilary: + devDependencies: + '@platforma-sdk/package-builder': + specifier: 'catalog:' + version: 3.10.7 + runenv-python-builder: + specifier: workspace:* + version: link:../builder + tsx: + specifier: 'catalog:' + version: 4.20.6 + python-3.12.10-humanness: devDependencies: '@platforma-sdk/package-builder': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5fd8e5f..9bd3271 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -11,6 +11,7 @@ packages: - python-3.12.10-humanness - python-3.12.10-torch-cuda - python-3.12.10-clustering + - python-3.12.10-hilary - python-3.10.21-clustcr - python-3.12.10-pgen - catalogue diff --git a/python-3.12.10-hilary/README.md b/python-3.12.10-hilary/README.md new file mode 100644 index 0000000..9f721f2 --- /dev/null +++ b/python-3.12.10-hilary/README.md @@ -0,0 +1,16 @@ +Run environment for the HILARy package used by the Lineage Trees block. + +Everything is pinned explicitly. A variant does not inherit the base environment's +dependency list, so HILARy's whole runtime closure is named here. + +`hilary` is under `noDeps` because the builder resolves each declared package's +closure separately, so HILARy's own loose requirements would vendor a second, +newer copy of numpy, scipy, pandas, tqdm and setuptools alongside the pins. A +consuming block should pin what it wants in its own requirements, since that is +what decides the installed versions. + +There is no Linux ARM64 root. `atriegc`, HILARy's trie-based CDR3 neighbour search, +publishes no Linux ARM64 wheel, and its 0.0.4 sdist cannot substitute: it ships +`src/main.cpp` but omits the `trie_container.hpp` header that file includes, so a +source build fails at the first compile. The other four platforms all have wheels +for every pin, which is why `strictMissing` is on. diff --git a/python-3.12.10-hilary/config.json b/python-3.12.10-hilary/config.json new file mode 100644 index 0000000..07ae507 --- /dev/null +++ b/python-3.12.10-hilary/config.json @@ -0,0 +1,28 @@ +{ + "packages": { + "dependencies": [ + "hilary==1.2.4", + "atriegc==0.0.4", + "structlog==22.3.0", + "textdistance==4.6.3", + "typer==0.27.2", + "tqdm==4.69.0", + "openpyxl==3.1.5", + "pandas==2.2.3", + "scipy==1.15.3", + "numpy==2.2.6", + "setuptools==83.0.0" + ], + "noDeps": [ + "hilary" + ], + "skip": {}, + "overrides": {}, + "platformSpecific": {}, + "resolution": { + "strictMissing": true + }, + "forceSource": {}, + "buildWheel": {} + } +} diff --git a/python-3.12.10-hilary/package.json b/python-3.12.10-hilary/package.json new file mode 100644 index 0000000..09e67fc --- /dev/null +++ b/python-3.12.10-hilary/package.json @@ -0,0 +1,42 @@ +{ + "name": "@platforma-open/milaboratories.runenv-python-3.12.10-hilary", + "version": "0.1.0", + "description": "Python 3.12.10 run environment for the Lineage Trees block (HILARy clonal-lineage clustering and its numeric stack)", + "scripts": { + "cleanup": "rm -rf ./pkg-*.tgz ./pydist ./dist/ ./build/", + "reset": "pnpm run cleanup && rm -rf ./node_modules ./.turbo", + "build": "pl-py-builder", + "after-prebuild": "pl-pkg publish packages", + "before-publish": "pl-pkg prepublish" + }, + "files": [ + "dist/" + ], + "block-software": { + "entrypoints": { + "main": { + "environment": { + "artifact": { + "type": "environment", + "runtime": "python", + "registry": "platforma-open", + "python-version": "3.12.10", + "roots": { + "linux-x64": "./pydist/linux-x64", + "macosx-x64": "./pydist/macosx-x64", + "macosx-aarch64": "./pydist/macosx-aarch64", + "windows-x64": "./pydist/windows-x64" + }, + "binDir": "bin" + } + } + } + } + }, + "license": "UNLICENSED", + "devDependencies": { + "@platforma-sdk/package-builder": "catalog:", + "runenv-python-builder": "workspace:*", + "tsx": "catalog:" + } +}