diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1d0428e..dfc4577 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -17,9 +17,10 @@ Put an `x` in the boxes that apply. You can also fill these out after creating t - [ ] Changes have been tested to ensure that fix is effective or that a feature works. - [ ] Changes pass the unit tests +- [ ] Changes pass the wet run tests - [ ] Code has been run through the `poe quality` task - [ ] I have included necessary documentation or comments (as necessary) - [ ] Any dependent changes have been merged and published ## Notes -All PRs will undergo the unit testing before being reviewed. You may be requested to explain or make additional changes before the PR is accepted. +All PRs will undergo unit and wet run testing before being reviewed. You may be requested to explain or make additional changes before the PR is accepted. diff --git a/.github/workflows/push_conda.yml b/.github/workflows/push_conda.yml new file mode 100644 index 0000000..4230052 --- /dev/null +++ b/.github/workflows/push_conda.yml @@ -0,0 +1,78 @@ +--- +# .github/workflows/build-conda.yml +name: Build and Upload Conda Package +on: + push: + branches: [integrate-conda] + workflow_dispatch: +jobs: + build-and-upload: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Cache conda build cache + uses: actions/cache@v3 + with: + path: /home/runner/miniconda3/conda-bld + key: ${{ runner.os }}-conda-bld-${{ hashFiles('recipe/meta.yaml') }} + restore-keys: | + ${{ runner.os }}-conda-bld- + - name: Setup Miniforge and mamba + uses: conda-incubator/setup-miniconda@v3 + with: + miniforge-variant: Miniforge3 + miniforge-version: latest + mamba-version: '*' + use-mamba: true + conda-solver: libmamba + auto-activate-base: true + - name: Install dependencies + run: | + mamba install -y -c conda-forge conda-build anaconda-client boa + - name: Get latest commit SHA from integrate-conda branch + id: get_sha + run: | + echo "Fetching latest commit on integrate-conda branch..." + COMMIT_SHA=$(git ls-remote origin refs/heads/integrate-conda | cut -f1) + echo "COMMIT_SHA=$COMMIT_SHA" >> $GITHUB_ENV + - name: Update meta.yaml with latest ref and sha256 + run: | + echo "Updating meta.yaml with commit: $COMMIT_SHA" + + # 1) Update the Jinja-set 'ref' (this is fine) + sed -i "s|^{% set ref = \".*\" %}|{% set ref = \"$COMMIT_SHA\" %}|" ./recipe/meta.yaml + + # 2) Download the tarball and compute the checksum + curl -L -o source.tar.gz \ + https://github.com/khanlab/labelmerge/archive/${COMMIT_SHA}.tar.gz + SHA256_SUM=$(sha256sum source.tar.gz | awk '{print $1}') + echo "New sha256: $SHA256_SUM" + + # 3) Replace the literal 'sha256:' line under source: + sed -i "s|^\(\s*sha256:\s*\).*|\1$SHA256_SUM|" ./recipe/meta.yaml + - name: Build & capture path + id: build + run: | + cd recipe + OUT=$(conda build . -c conda-forge -c bioconda --output 2>/dev/null) + echo "PACKAGE_PATH=$OUT" >> $GITHUB_ENV + conda mambabuild . -c conda-forge -c bioconda + - name: Upload package to Khanlab channel + shell: bash -l {0} + env: + ANACONDA_HOSTNAME: "gha-${{ github.run_id }}" + run: |- + conda activate base + + # delete any leftover token or netrc entry + rm -f ~/.anaconda/token ~/.netrc || true + + anaconda login \ + --username ${{ secrets.ANACONDA_USERNAME }} \ + --password ${{ secrets.ANACONDA_PASSWORD }} \ + --hostname "$ANACONDA_HOSTNAME" + + anaconda upload "$PACKAGE_PATH" \ + --label main \ + --force \ diff --git a/.github/workflows/deploy.yml b/.github/workflows/push_docker.yml similarity index 64% rename from .github/workflows/deploy.yml rename to .github/workflows/push_docker.yml index a95bc7a..82eebf5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/push_docker.yml @@ -10,7 +10,3 @@ jobs: secrets: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - deploy-pypi: - uses: khanlab/actions/.github/workflows/workflow-release_task-deployPypi.yml@v0.3.4 - secrets: - PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index da33802..0d7f817 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -2,9 +2,9 @@ name: Lint and format workflow on: push: - branches: ["*", "!push-action/*"] + branches: ['*', '!push-action/*'] pull_request: - branches: ["*", "!push-action/*"] + branches: ['*', '!push-action/*'] jobs: quality: name: Lint code @@ -14,7 +14,7 @@ jobs: - name: Setup Python environment uses: khanlab/actions/.github/actions/action-setup_task-installPyProject@v0.3.4 with: - python-version: "3.10" + python-version: '3.11' - name: yamlfix run: poetry run poe yamlfix-check - name: ruff diff --git a/.github/workflows/wetrun_test.yml b/.github/workflows/wetrun_test.yml new file mode 100644 index 0000000..c69b69b --- /dev/null +++ b/.github/workflows/wetrun_test.yml @@ -0,0 +1,49 @@ +--- +name: test workflow with wet run +on: + pull_request: +jobs: + wetrun_test: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Setup Miniforge and mamba + uses: conda-incubator/setup-miniconda@v3 + with: + miniforge-variant: Miniforge3 + miniforge-version: latest + mamba-version: '*' + use-mamba: true + conda-solver: libmamba + auto-activate-base: true + - name: Create environment with snakebids + run: | + mamba create -n snakebids-env snakebids scikit-learn pandas -c bioconda -c conda-forge -y + - name: Cache Snakemake Conda environments + uses: actions/cache@v4 + with: + path: test_data/labelmerge_cache_dir/conda + key: conda-env-${{ hashFiles('labelmerge/workflow/envs/*.yaml') }} + restore-keys: | + conda-env- + - name: Set LABELMERGE_CACHE_DIR + run: | + echo "LABELMERGE_CACHE_DIR=`pwd`/test_data/labelmerge_cache_dir" >> $GITHUB_ENV + - name: Run wet-run test for cortical and subcortical files + shell: bash -l {0} + run: |- + conda activate snakebids-env + ./labelmerge/run.py test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym test_out participant \ + --base-desc 100Parcels7Networks --overlay_bids_dir test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym \ + --overlay_desc tn --cores all --force-output --conda-frontend mamba | tee labelmerge_output.log +<<<<<<< chain-multiple-labels + - name: Run wet-run test for merging 3 labels + shell: bash -l {0} + run: | + conda activate snakebids-env + ./labelmerge/run.py test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym test_out participant \ + --base-desc 100Parcels7Networks --overlay_bids_dir test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym \ + --overlay_desc tn --overlay2_bids_dir test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/ --overlay2_desc carpet --cores all --force-output --conda-frontend mamba | tee labelmerge_output.log +======= +>>>>>>> integrate-conda diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 97dca8e..e7b34e6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ --- default_language_version: - python: python3.10 + python: python3.11 repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.3.0 diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 369f110..8a4fdfe 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,27 +1,23 @@ +--- # .readthedocs.yml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 - # Build documentation in the docs/ directory with Sphinx sphinx: configuration: docs/conf.py - # Build documentation with MkDocs -#mkdocs: +# mkdocs: # configuration: mkdocs.yml # Optionally build your docs in additional formats such as PDF -formats: - - pdf - +formats: [pdf] build: - os: 'ubuntu-20.04' + os: ubuntu-20.04 tools: - python: '3.10' - + python: '3.11' python: install: - requirements: docs/requirements.txt diff --git a/Dockerfile b/Dockerfile index 8836848..05de1be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,43 @@ -# Stage: build -FROM python:3.9-slim-bullseye AS build -COPY . /opt/labelmerge/ -RUN cd /opt/labelmerge \ - && pip install --prefer-binary --no-cache-dir poetry \ - && poetry build -f wheel - -# Stage: runtime -# NOTE: g++ required to install wheel (snakebids) -FROM python:3.9-slim-bullseye AS runtime -COPY --from=build /opt/labelmerge/dist/*.whl /opt/labelmerge/ -RUN apt-get update -qq \ - && apt-get install -y -q --no-install-recommends \ - g++=4:10.2.1-1 \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ - && WHEEL=`ls /opt/labelmerge | grep whl` \ - && pip install /opt/labelmerge/$WHEEL \ - && rm -r /opt/labelmerge \ - && apt-get purge -y -q g++ \ - && apt-get --purge -y -qq autoremove -ENTRYPOINT ["labelmerge"] +# 1) Start from a minimal base that already includes mamba +FROM condaforge/mambaforge:latest + +# 2) Set working directory +WORKDIR /src/ + +# 3) Copy your entire repository into /src/ +COPY . /src/ + +# 4) Disable user‐site packages +ENV PYTHONNOUSERSITE=1 + + +RUN mamba create -n snakebids-env \ + -c conda-forge \ + -c bioconda \ + snakebids -y \ + && mamba clean --all --yes + +RUN echo "source /opt/conda/etc/profile.d/conda.sh && conda activate snakebids-env" >> ~/.bashrc + +RUN bash -lc "\ + source /opt/conda/etc/profile.d/conda.sh && \ + conda activate snakebids-env && \ + ./labelmerge/run.py \ + test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym \ + test_out participant \ + --base-desc 100Parcels7Networks \ + --overlay_bids_dir test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym \ + --overlay_desc tn \ + --use-conda \ + --conda-create-envs-only \ + --cores all \ + --conda-prefix /src/conda-envs \ + && mamba clean --all --yes \ + && rm -rf /opt/conda/pkgs /root/.cache \ + " + +# 8) Point Snakemake to the correct profile +ENV SNAKEMAKE_PROFILE=/src/labelmerge/workflow/profiles/docker-conda + +# 9) Default entrypoint +ENTRYPOINT ["/src/entrypoint.sh"] diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..bf9e040 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,2 @@ +recursive-include labelmerge/config * +recursive-include labelmerge/workflow * \ No newline at end of file diff --git a/README.md b/README.md index b709436..e99ba23 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ## Labelmerge ![Version](https://img.shields.io/github/v/tag/khanlab/labelmerge?label=version) -![Python3](https://img.shields.io/badge/python-3.8_|_3.9_|_3.10_|_3.11-blue.svg) +![Python3](https://img.shields.io/badge/python-3.11-blue.svg) ![Docker Pulls](https://img.shields.io/docker/pulls/khanlab/labelmerge) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7636410.svg)](https://doi.org/10.5281/zenodo.7636410) diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..e6b9fa5 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/bash +source /opt/conda/etc/profile.d/conda.sh +conda activate snakebids-env +exec /src/labelmerge/run.py "$@" \ No newline at end of file diff --git a/labelmerge-dev.yml b/labelmerge-dev.yml new file mode 100644 index 0000000..0a4951c --- /dev/null +++ b/labelmerge-dev.yml @@ -0,0 +1,14 @@ +--- +name: labelmerge-dev +channels: [conda-forge, bioconda, defaults] +dependencies: + - python=3.11 + - snakebids=0.14.0 + - pytest>=7.0.1,<8.0.0 + - pytest-console-scripts>=1.2,<2.0 + - poethepoet>=0.10.0,<0.11.0 + - pre-commit>=2.17.0,<3.0.0 + - snakefmt>=0.6.1,<0.7.0 + - yamlfix>=1.1.0,<2.0.0 + - mypy>=0.991,<1.0.0 + - ruff>=0.1.14,<0.2.0 diff --git a/labelmerge/__init__.py b/labelmerge/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/labelmerge/config/snakebids.yml b/labelmerge/config/snakebids.yml index f8c230d..1c072c8 100644 --- a/labelmerge/config/snakebids.yml +++ b/labelmerge/config/snakebids.yml @@ -70,24 +70,37 @@ parse_args: help: Directory containing labelmaps to be overlaid on the base input labelmaps. nargs: '?' type: Path + --overlay2_bids_dir: + help: Directory containing labelmaps to be overlaid on the combined labelmaps. + nargs: '?' + type: Path --base_desc: help: Description entity for base labelmaps nargs: '?' --overlay_desc: help: Description entity for overlay labelmaps nargs: '?' + --overlay2_desc: + help: Description entity for second overlay labelmaps + nargs: '?' --base_exceptions: help: Space separated integer labels from the base labelmap to keep over overlay labels at the same voxels. nargs: '*' --overlay_exceptions: help: Space separated integer labels from the overlay image to be overwritten by base labels at the same voxels. nargs: '*' + --overlay2_exceptions: + help: Space separated integer labels from the overlay image 2 to be overwritten by the combined labels at the same voxels. + nargs: '*' --base_drops: help: Space separated integer labels from the base image to drop from the output. nargs: '*' --overlay_drops: help: Space separated integer labels from the overlay image to drop from the output. nargs: '*' + --overlay2_drops: + help: Space separated integer labels from the second overlay image to drop from the output. + nargs: '*' # Workflow specific config diff --git a/labelmerge/run.py b/labelmerge/run.py index f6e5aa3..b121bd7 100755 --- a/labelmerge/run.py +++ b/labelmerge/run.py @@ -1,24 +1,40 @@ #!/usr/bin/env python3 - import os +from pathlib import Path -from snakebids.app import SnakeBidsApp -from snakebids.cli import add_dynamic_args - +from snakebids import bidsapp, plugins -def get_parser(): - """Exposes parser for sphinx doc generation, cwd is the docs dir""" - app = SnakeBidsApp("../labelmerge", skip_parse_args=True) - add_dynamic_args( - app.parser, app.config["parse_args"], app.config["pybids_inputs"] +try: + from labelmerge.workflow.lib import ( + utils as utils, # Works when run as a package ) - return app.parser +except ImportError: + from workflow.lib import utils as utils # Works when run directly + +if "__file__" not in globals(): + __file__ = "../labelmerge/run.py" +app = bidsapp.app( + [ + plugins.SnakemakeBidsApp(Path(__file__).resolve().parent), + plugins.BidsValidator(), + plugins.CliConfig("parse_args"), + plugins.ComponentEdit("pybids_inputs"), + ] +) -def main(): - app = SnakeBidsApp(os.path.abspath(os.path.dirname(__file__))) - app.run_snakemake() +# Set the conda prefix directory +conda_prefix = Path(utils.get_download_dir()) / "conda" + +# Set the environment variable SNAKEMAKE_CONDA_PREFIX if not already set +if "SNAKEMAKE_CONDA_PREFIX" not in os.environ: + os.environ["SNAKEMAKE_CONDA_PREFIX"] = str(conda_prefix) + + +def get_parser(): + """Exposes parser for sphinx doc generation, cwd is the docs dir""" + return app.build_parser().parser if __name__ == "__main__": - main() + app.run() diff --git a/labelmerge/workflow/Snakefile b/labelmerge/workflow/Snakefile index af44ce9..a1ce85e 100644 --- a/labelmerge/workflow/Snakefile +++ b/labelmerge/workflow/Snakefile @@ -31,6 +31,8 @@ base_config = deepcopy(config["pybids_inputs"]) base_config["labelmap"]["filters"]["desc"] = config["base_desc"] overlay_config = deepcopy(config["pybids_inputs"]) overlay_config["labelmap"]["filters"]["desc"] = config["overlay_desc"] +overlay2_config = deepcopy(config["pybids_inputs"]) +overlay2_config["labelmap"]["filters"]["desc"] = config["overlay2_desc"] base_inputs = generate_inputs( bids_dir=config["bids_dir"], @@ -46,6 +48,17 @@ overlay_inputs = generate_inputs( pybids_inputs=overlay_config, participant_label=config["participant_label"], ) +overlay2_inputs = ( + generate_inputs( + bids_dir=config.get("overlay2_bids_dir", config["bids_dir"]), + pybids_config=["bids", "derivatives"], + derivatives=config["derivatives"], + pybids_inputs=overlay2_config, + participant_label=config["participant_label"], + ) + if config.get("overlay2_bids_dir") + else None +) # this adds constraints to the bids naming @@ -60,12 +73,29 @@ wildcard_constraints: include: "rules/label_harmonization.smk" +all_targets = [] + +if config.get("overlay2_bids_dir"): + + # when overlay2 is present, the *only* final targets you care about + # are the merge_labels_again outputs + all_targets += overlay2_inputs["labelmap"].expand( + rules.merge_labels_again.output["merged_map"], + ) + all_targets += overlay2_inputs["labelmap"].expand( + rules.merge_labels_again.output["merged_metadata"], + ) +else: + # when overlay2 is *not* present, your finals are the simple two-way merge + all_targets += base_inputs["labelmap"].expand( + rules.merge_labels.output["merged_map"], + ) + all_targets += base_inputs["labelmap"].expand( + rules.merge_labels.output["merged_metadata"], + ) + + rule all: input: - base_inputs["labelmap"].expand( - rules.merge_labels.output["merged_map"], - ), - base_inputs["labelmap"].expand( - rules.merge_labels.output["merged_metadata"], - ), + all_targets, default_target: True diff --git a/labelmerge/workflow/envs/merge_labels.yaml b/labelmerge/workflow/envs/merge_labels.yaml new file mode 100644 index 0000000..43630b5 --- /dev/null +++ b/labelmerge/workflow/envs/merge_labels.yaml @@ -0,0 +1,8 @@ +--- +name: merge_labels +channels: [conda-forge, defaults] +dependencies: + - python=3.9 + - numpy>=1.22.3,<2.0 + - nibabel>=3.2.2,<4.0 + - xarray>=2022.11.0,<2023.0.0 diff --git a/labelmerge/workflow/lib/__init__.py b/labelmerge/workflow/lib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/labelmerge/workflow/lib/utils.py b/labelmerge/workflow/lib/utils.py new file mode 100644 index 0000000..5e56382 --- /dev/null +++ b/labelmerge/workflow/lib/utils.py @@ -0,0 +1,13 @@ +import os + +from appdirs import AppDirs + + +def get_download_dir(): + if "LABELMERGE_CACHE_DIR" in os.environ.keys(): + download_dir = os.environ["LABELMERGE_CACHE_DIR"] + else: + # create local download dir if it doesn't exist + dirs = AppDirs("labelmerge", "khanlab") + download_dir = dirs.user_cache_dir + return download_dir diff --git a/labelmerge/workflow/profiles/default/config.yaml b/labelmerge/workflow/profiles/default/config.yaml new file mode 100644 index 0000000..9553fc6 --- /dev/null +++ b/labelmerge/workflow/profiles/default/config.yaml @@ -0,0 +1,2 @@ +--- +use-conda: true diff --git a/labelmerge/workflow/profiles/docker-conda/config.yaml b/labelmerge/workflow/profiles/docker-conda/config.yaml new file mode 100644 index 0000000..df95328 --- /dev/null +++ b/labelmerge/workflow/profiles/docker-conda/config.yaml @@ -0,0 +1,3 @@ +--- +use-conda: true +conda-prefix: /src/conda-envs diff --git a/labelmerge/workflow/rules/label_harmonization.smk b/labelmerge/workflow/rules/label_harmonization.smk index f173b14..171eb77 100644 --- a/labelmerge/workflow/rules/label_harmonization.smk +++ b/labelmerge/workflow/rules/label_harmonization.smk @@ -52,10 +52,16 @@ def build_metadata_path(wildcards): Path(expand(overlay_inputs["labelmap"].path, **wildcards)[0]), config["overlay_bids_dir"], ) - return { + out = { "base_metadata": base_metadata, "overlay_metadata": overlay_metadata, } + if config.get("overlay2_bids_dir"): + out["overlay2_metadata"] = load_metadata( + Path(expand(overlay2_inputs["labelmap"].path, **wildcards)[0]), + config["overlay2_bids_dir"], + ) + return out rule merge_labels: @@ -91,9 +97,51 @@ rule merge_labels: else "", resources: script=str(Path(workflow.basedir) / "scripts" / "labelmerge.py"), + conda: + "../envs/merge_labels.yaml" shell: "python3 {resources.script} {input.base_map} {input.base_metadata} " "{input.overlay_map} {input.overlay_metadata} " "{output.merged_map} {output.merged_metadata} " "{params.base_exceptions} {params.overlay_exceptions} " "{params.base_drops} {params.overlay_drops}" + + +rule merge_labels_again: + input: + unpack(build_metadata_path), + base2_metadata=rules.merge_labels.output.merged_metadata, + base_map=rules.merge_labels.output.merged_map, + overlay_map=overlay2_inputs["labelmap"].path + if config.get("overlay2_bids_dir") + else "", + output: + merged_map=bids( + root=str(Path(config["output_dir"]) / "combined2"), + suffix="dseg.nii.gz", + desc="combined2", + **base_inputs["labelmap"].wildcards, + ), + merged_metadata=bids( + root=str(Path(config["output_dir"]) / "combined2"), + suffix="dseg.tsv", + desc="combined2", + **base_inputs["labelmap"].wildcards, + ), + params: + overlay_exceptions=f"--overlay2_exceptions {' '.join(config['overlay2_exceptions'])}" + if config.get("overlay2_exceptions") + else "", + overlay_drops=f"--overlay2_drops {' '.join(config['overlay2_drops'])}" + if config.get("overlay2_drops") + else "", + resources: + script=str(Path(workflow.basedir) / "scripts" / "labelmerge.py"), + conda: + "../envs/merge_labels.yaml" + shell: + "python3 {resources.script} {input.base_map} {input.base2_metadata} " + "{input.overlay_map} {input.overlay2_metadata} " + "{output.merged_map} {output.merged_metadata} " + "{params.overlay_exceptions} " + "{params.overlay_drops}" diff --git a/poetry.lock b/poetry.lock index 2b9e3c2..63ae378 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,18 +2,15 @@ [[package]] name = "acres" -version = "0.3.0" +version = "0.4.1" description = "Access resources on your terms" optional = false python-versions = ">=3.9" files = [ - {file = "acres-0.3.0-py3-none-any.whl", hash = "sha256:9a3138f27c5237edbdf1ea97bf20f48beb4ebfb71de8150a0bc2448012b4e280"}, - {file = "acres-0.3.0.tar.gz", hash = "sha256:b8aa5d46bd4716f914355c633a5181f63c00cbb42bca90826a77b8acf5a07862"}, + {file = "acres-0.4.1-py3-none-any.whl", hash = "sha256:2c55915a1ba1ce39d321cde5a70197b4e9ee00989b6fc2790c6647283ba80cc8"}, + {file = "acres-0.4.1.tar.gz", hash = "sha256:426854074d44cf22376c837ff841a3aa5bb2e07b5ab1ea135d70ea0df8183aa3"}, ] -[package.dependencies] -importlib_resources = {version = ">=5.7", markers = "python_version < \"3.11\""} - [[package]] name = "annotated-types" version = "0.7.0" @@ -112,13 +109,13 @@ bidsschematools = ">=0.10" [[package]] name = "bidsschematools" -version = "1.0.9" +version = "1.0.10" description = "Python tools for working with the BIDS schema." optional = false python-versions = ">=3.9" files = [ - {file = "bidsschematools-1.0.9-py3-none-any.whl", hash = "sha256:66bf7e9bf6744bb8d27bced2576b682196d4c74087489838531e926c5533c2bd"}, - {file = "bidsschematools-1.0.9.tar.gz", hash = "sha256:996db09e9cd30c0b93b4bb0cd0643b4e05076a98af6d8bb727430def0534e90a"}, + {file = "bidsschematools-1.0.10-py3-none-any.whl", hash = "sha256:ed46d96e57ece875e28bb33fe9184d44a5ac3a29b24648962210b0beb2b2a1c5"}, + {file = "bidsschematools-1.0.10.tar.gz", hash = "sha256:e241dd798cc8686d4ab8b625e4d84ef3093d472a158cccd88a850496e4a4a8b9"}, ] [package.dependencies] @@ -161,8 +158,6 @@ click = ">=8.0.0" mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] @@ -317,13 +312,13 @@ files = [ [[package]] name = "click" -version = "8.1.8" +version = "8.2.1" description = "Composable command line interface toolkit" optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" files = [ - {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, - {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, + {file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"}, + {file = "click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202"}, ] [package.dependencies] @@ -393,7 +388,6 @@ files = [ [package.dependencies] colorama = ">=0.4.6" dunamai = ">=1.7.0" -eval-type-backport = {version = ">=0.1.3,<0.3.0", markers = "python_version < \"3.10\""} funcy = ">=1.17" jinja2 = ">=3.1.5" jinja2-ansible-filters = ">=1.3.1" @@ -405,41 +399,6 @@ pydantic = ">=2.4.2" pygments = ">=2.7.1" pyyaml = ">=5.3.1" questionary = ">=1.8.1" -typing-extensions = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} - -[[package]] -name = "datrie" -version = "0.8.2" -description = "Super-fast, efficiently stored Trie for Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "datrie-0.8.2-cp27-cp27m-macosx_10_7_x86_64.whl", hash = "sha256:53969643e2794c37f024d5edaa42d5e6e2627d9937ddcc18d99128e9df700e4c"}, - {file = "datrie-0.8.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:6c9b333035312b79e6e9a10356d033e3d29aadbae6365007f706c854b3a94674"}, - {file = "datrie-0.8.2-cp27-cp27m-win32.whl", hash = "sha256:c783e2c1e28964b2b045a951eb9606833a188c4bd4a780da68d22f557e03e429"}, - {file = "datrie-0.8.2-cp27-cp27m-win_amd64.whl", hash = "sha256:f826e843138698501cbf1a21233f724b851b1e475fad532b638ac5904e115f10"}, - {file = "datrie-0.8.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bf5c956c0a9a9d0f07e3c8923746279171096de18a8a51685e22d9817f8755a6"}, - {file = "datrie-0.8.2-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:2de594d84a2f43a09ddc15316a8afd48aae0fdc456f9279d0940aa59c473d9d5"}, - {file = "datrie-0.8.2-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:651c63325056347b86c5de7ffeea8529230a5787c61ee6dcabc5b6c644bd3252"}, - {file = "datrie-0.8.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:0e3b76676abbae2368cce6bf605bb0ba7cfd11f2c420b96d67959f353d5d423f"}, - {file = "datrie-0.8.2-cp35-cp35m-win32.whl", hash = "sha256:3a3e360a765cc95410898dc222f8585ea1b1bba0538a1af4d8630a5bc3ad6ee7"}, - {file = "datrie-0.8.2-cp35-cp35m-win_amd64.whl", hash = "sha256:fa9f39ac88dc6286672b9dd286fe459646da48133c877a927af24803eaea441e"}, - {file = "datrie-0.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b6fd6c7c149b410a87d46072c1c98f6e87ec557802e1d0e09db7b858746e8550"}, - {file = "datrie-0.8.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:327d9c17efaebc66d1956dca047b76fdd0e5b989d63cb55b9038ec09d8769089"}, - {file = "datrie-0.8.2-cp36-cp36m-win32.whl", hash = "sha256:ee7cd8470a982356e104e62148f2dbe2d3e17545cafaa3ada29f2548984f1e89"}, - {file = "datrie-0.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:31e316ba305cdd7b8a42f8e4af5a0a15a628aee270d2f392c41329a709eeda6d"}, - {file = "datrie-0.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe04704eb41b8440ca61416d3670ca6ddeea847d19731cf121889bac2962d07"}, - {file = "datrie-0.8.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d704ee4fdc03f02d7dacc4d92052dbd490dba551509fccfd8ee52c9039d4ad"}, - {file = "datrie-0.8.2-cp37-cp37m-win32.whl", hash = "sha256:25e9e07ecfceaef78d23bde8d7278e4d6f63e1e3dc5ac00ccb4bec3062f0a8e0"}, - {file = "datrie-0.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf9f34f7c63797219b32713b561c4f94e777ff6c22beecfcd6bdf6b6c25b8518"}, - {file = "datrie-0.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e0582435a4adef1a2fce53aeedb656bf769b0f113b524f98be51d3e3d40720cb"}, - {file = "datrie-0.8.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b2d80fa687173cb8f8bae224ef00d1ad6bda8f8597bbb1a63f85182c7d91aeb3"}, - {file = "datrie-0.8.2-cp38-cp38-win32.whl", hash = "sha256:67603594f5db5c0029b1cf86a08e89cde015fe64cf0c4ae4e539c61114396729"}, - {file = "datrie-0.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:f61cf2726f04c08828bfb4e7af698b0b16bdf2777c3993d042f2898b8e118f21"}, - {file = "datrie-0.8.2-pp273-pypy_73-win32.whl", hash = "sha256:b07bd5fdfc3399a6dab86d6e35c72b1dbd598e80c97509c7c7518ab8774d3fda"}, - {file = "datrie-0.8.2-pp373-pypy36_pp73-win32.whl", hash = "sha256:89ff3d41df4f899387aa07b4b066f5da36e3a10b67b8aeae631c950502ff4503"}, - {file = "datrie-0.8.2.tar.gz", hash = "sha256:525b08f638d5cf6115df6ccd818e5a01298cd230b2dac91c8ff2e6499d18765d"}, -] [[package]] name = "distlib" @@ -509,37 +468,6 @@ files = [ [package.dependencies] packaging = ">=20.9" -[[package]] -name = "eval-type-backport" -version = "0.2.2" -description = "Like `typing._eval_type`, but lets older Python versions use newer typing features." -optional = false -python-versions = ">=3.8" -files = [ - {file = "eval_type_backport-0.2.2-py3-none-any.whl", hash = "sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a"}, - {file = "eval_type_backport-0.2.2.tar.gz", hash = "sha256:f0576b4cf01ebb5bd358d02314d31846af5e07678387486e2c798af0e7d849c1"}, -] - -[package.extras] -tests = ["pytest"] - -[[package]] -name = "exceptiongroup" -version = "1.3.0" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, - {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} - -[package.extras] -test = ["pytest (>=6)"] - [[package]] name = "fastjsonschema" version = "2.21.1" @@ -837,9 +765,6 @@ files = [ {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, ] -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] cover = ["pytest-cov"] @@ -996,18 +921,17 @@ test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"] [[package]] name = "maison" -version = "1.4.3" +version = "2.0.0" description = "Read settings from config files" optional = false -python-versions = ">=3.7.1,<4.0.0" +python-versions = "<4.0.0,>=3.9.1" files = [ - {file = "maison-1.4.3-py3-none-any.whl", hash = "sha256:a36208d0befb3bd8aa3b002ac198ce6f6e61efe568b195132640f4032eff46ac"}, - {file = "maison-1.4.3.tar.gz", hash = "sha256:766222ce82ae27138256c4af9d0bc6b3226288349601e095dcc567884cf0ce36"}, + {file = "maison-2.0.0-py3-none-any.whl", hash = "sha256:e684fbab833f0f049d6e3556a127b8c5abe7cd18620f5b751a483e103dc4cbb5"}, + {file = "maison-2.0.0.tar.gz", hash = "sha256:f5dafbbf4ce57bdb7cae128e075f457434b2cc9573b4f4bb4535f16d2ebd1cc5"}, ] [package.dependencies] click = ">=8.0.1,<9.0.0" -pydantic = ">=2.5.3,<3.0.0" toml = ">=0.10.2,<0.11.0" [[package]] @@ -1148,7 +1072,6 @@ files = [ [package.dependencies] mypy-extensions = ">=0.4.3" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=3.10" [package.extras] @@ -1191,30 +1114,34 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nibabel" -version = "3.2.2" +version = "5.3.2" description = "Access a multitude of neuroimaging data formats" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" files = [ - {file = "nibabel-3.2.2-py3-none-any.whl", hash = "sha256:7df7a2733461441d3aacc61f36f5e100ec533d43ed09a191293bb4ca5a4f10f6"}, - {file = "nibabel-3.2.2.tar.gz", hash = "sha256:b0dcc174b30405ce9e8fec1eab3cbbb20f5c5e4920976c08b22e050b7c124f94"}, + {file = "nibabel-5.3.2-py3-none-any.whl", hash = "sha256:52970a5a8a53b1b55249cba4d9bcfaa8cc57e3e5af35a29d7352237e8680a6f8"}, + {file = "nibabel-5.3.2.tar.gz", hash = "sha256:0bdca6503b1c784b446c745a4542367de7756cfba0d72143b91f9ffb78be569b"}, ] [package.dependencies] -numpy = ">=1.14" -packaging = ">=14.3" -setuptools = "*" +importlib-resources = {version = ">=5.12", markers = "python_version < \"3.12\""} +numpy = ">=1.22" +packaging = ">=20" +typing-extensions = {version = ">=4.6", markers = "python_version < \"3.13\""} [package.extras] -all = ["coverage", "flake8", "gitpython", "h5py", "matplotlib (>=1.5.3)", "numpydoc", "pillow", "pydicom (>=1.0.0)", "pytest (!=5.3.4)", "pytest (<7)", "pytest-cov", "pytest-doctestplus (!=0.9.0)", "scipy", "sphinx (>=0.3,<3)", "texext", "twine"] -dev = ["gitpython", "twine"] -dicom = ["pydicom (>=1.0.0)"] -dicomfs = ["pillow", "pydicom (>=1.0.0)"] -doc = ["matplotlib (>=1.5.3)", "numpydoc", "sphinx (>=0.3,<3)", "texext"] +all = ["h5py", "pillow", "pydicom (>=2.3)", "pyzstd (>=0.14.3)", "scipy"] +dev = ["tox"] +dicom = ["pydicom (>=2.3)"] +dicomfs = ["pillow", "pydicom (>=2.3)"] +doc = ["matplotlib (>=3.5)", "numpydoc", "sphinx", "texext", "tomli"] +doctest = ["tox"] minc2 = ["h5py"] spm = ["scipy"] -style = ["flake8"] -test = ["coverage", "pytest (!=5.3.4)", "pytest (<7)", "pytest-cov", "pytest-doctestplus (!=0.9.0)"] +style = ["tox"] +test = ["coverage (>=7.2)", "pytest", "pytest-cov", "pytest-doctestplus", "pytest-httpserver", "pytest-xdist"] +typing = ["tox"] +zstd = ["pyzstd (>=0.14.3)"] [[package]] name = "nodeenv" @@ -1243,47 +1170,66 @@ docopt = ">=0.6.2" [[package]] name = "numpy" -version = "1.26.4" +version = "2.2.6" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +python-versions = ">=3.10" +files = [ + {file = "numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf"}, + {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83"}, + {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915"}, + {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680"}, + {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289"}, + {file = "numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d"}, + {file = "numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491"}, + {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a"}, + {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf"}, + {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1"}, + {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab"}, + {file = "numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47"}, + {file = "numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282"}, + {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87"}, + {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249"}, + {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49"}, + {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de"}, + {file = "numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4"}, + {file = "numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566"}, + {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f"}, + {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f"}, + {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868"}, + {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d"}, + {file = "numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd"}, + {file = "numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8"}, + {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f"}, + {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa"}, + {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571"}, + {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1"}, + {file = "numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff"}, + {file = "numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00"}, + {file = "numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd"}, ] [[package]] @@ -1538,15 +1484,19 @@ test = ["pytest", "pytest-xdist", "setuptools"] [[package]] name = "pulp" -version = "2.7.0" +version = "3.1.1" description = "PuLP is an LP modeler written in python. PuLP can generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to solve linear problems." optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "PuLP-2.7.0-py3-none-any.whl", hash = "sha256:b6de42c929e80325bf44cc7a2997f02535440800c376b9eb8cb7b4670ed53769"}, - {file = "PuLP-2.7.0.tar.gz", hash = "sha256:e73ee6b32d639c9b8cf4b4aded334ba158be5f8313544e056f796ace0a10ae63"}, + {file = "pulp-3.1.1-py3-none-any.whl", hash = "sha256:ad9d46afaf78a708270a2fa9b38e56536584c048dfbd7a6dbc719abee1051261"}, + {file = "pulp-3.1.1.tar.gz", hash = "sha256:300a330e917c9ca9ac7fda6f5849bbf30d489c368117f197a3e3fd0bc1966d95"}, ] +[package.extras] +open-py = ["cylp", "highspy", "pyscipopt"] +public-py = ["coptpy", "gurobipy", "xpress"] + [[package]] name = "pvandyken-deprecated" version = "0.0.4" @@ -1768,11 +1718,9 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] @@ -2093,13 +2041,13 @@ files = [ [[package]] name = "ruamel-yaml" -version = "0.18.11" +version = "0.18.12" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" optional = false python-versions = ">=3.7" files = [ - {file = "ruamel.yaml-0.18.11-py3-none-any.whl", hash = "sha256:eca06c9fce6ee3220845c4c54e58376586e041a6127e4d1958e12a3142084897"}, - {file = "ruamel.yaml-0.18.11.tar.gz", hash = "sha256:b586a3416676566ed45bf679a0909719f7ea7b58c03a9b6e03f905a1e2cd5076"}, + {file = "ruamel.yaml-0.18.12-py3-none-any.whl", hash = "sha256:790ba4c48b6a6e6b12b532a7308779eb12d2aaab3a80fdb8389216f28ea2b287"}, + {file = "ruamel.yaml-0.18.12.tar.gz", hash = "sha256:5a38fd5ce39d223bebb9e3a6779e86b9427a03fb0bf9f270060f8b149cffe5e2"}, ] [package.dependencies] @@ -2210,45 +2158,66 @@ docs = ["Sphinx"] [[package]] name = "scipy" -version = "1.13.1" +version = "1.15.3" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, - {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, - {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, - {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, - {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, - {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, - {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, - {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, - {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, - {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, - {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, +python-versions = ">=3.10" +files = [ + {file = "scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92"}, + {file = "scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82"}, + {file = "scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40"}, + {file = "scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e"}, + {file = "scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c"}, + {file = "scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1"}, + {file = "scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889"}, + {file = "scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982"}, + {file = "scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9"}, + {file = "scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594"}, + {file = "scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c"}, + {file = "scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45"}, + {file = "scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49"}, + {file = "scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e"}, + {file = "scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539"}, + {file = "scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730"}, + {file = "scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825"}, + {file = "scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7"}, + {file = "scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11"}, + {file = "scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126"}, + {file = "scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb"}, + {file = "scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723"}, + {file = "scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb"}, + {file = "scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4"}, + {file = "scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5"}, + {file = "scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca"}, + {file = "scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf"}, ] [package.dependencies] -numpy = ">=1.22.4,<2.3" +numpy = ">=1.23.5,<2.5" [package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "setuptools" @@ -2464,10 +2433,7 @@ pybids = ">=0.16.0,<0.17" requests = ">=2.31.0" ruamel-yaml = ">=0.17.2" scipy = {version = ">=1.10.0", markers = "python_version >= \"3.9\""} -snakemake = [ - {version = ">=5.28.0,<8", markers = "python_version < \"3.11\""}, - {version = ">=7.18.2", markers = "python_version >= \"3.11\""}, -] +snakemake = {version = ">=7.18.2", markers = "python_version >= \"3.11\""} typing-extensions = ">=3.10.0" [[package]] @@ -2487,48 +2453,6 @@ click = ">=8.0.0,<9.0.0" importlib_metadata = ">=1.7.0,<2.0.0" toml = ">=0.10.2,<0.11.0" -[[package]] -name = "snakemake" -version = "7.32.4" -description = "Workflow management system to create reproducible and scalable data analyses" -optional = false -python-versions = ">=3.7" -files = [ - {file = "snakemake-7.32.4.tar.gz", hash = "sha256:fdc3f15dd7b06fabb7da30d460e0a3b1fba08e4ea91f9c32c47a83705cdc7b6e"}, -] - -[package.dependencies] -appdirs = "*" -configargparse = "*" -connection_pool = ">=0.0.3" -datrie = "*" -docutils = "*" -gitpython = "*" -humanfriendly = "*" -jinja2 = ">=3.0,<4.0" -jsonschema = "*" -nbformat = "*" -packaging = "*" -psutil = "*" -pulp = ">=2.0" -pyyaml = "*" -requests = "*" -reretry = "*" -smart_open = ">=3.0" -stopit = "*" -tabulate = "*" -throttler = "*" -toposort = ">=1.10" -wrapt = "*" -yte = ">=1.5.1,<2.0" - -[package.extras] -azure = ["azure-batch", "azure-core", "azure-identity", "azure-mgmt-batch", "azure-storage-blob"] -google-cloud = ["google-api-python-client", "google-cloud-storage", "google-crc32c", "oauth2client"] -messaging = ["slacker"] -pep = ["eido", "peppy"] -reports = ["pygments"] - [[package]] name = "snakemake" version = "9.5.1" @@ -2747,16 +2671,6 @@ postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] pymysql = ["pymysql"] sqlcipher = ["sqlcipher3_binary"] -[[package]] -name = "stopit" -version = "1.1.2" -description = "Timeout control decorator and context managers, raise any exception in another thread" -optional = false -python-versions = "*" -files = [ - {file = "stopit-1.1.2.tar.gz", hash = "sha256:f7f39c583fd92027bd9d06127b259aee7a5b7945c1f1fa56263811e1e766996d"}, -] - [[package]] name = "tabulate" version = "0.9.0" @@ -2851,17 +2765,6 @@ files = [ {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] -[[package]] -name = "toposort" -version = "1.10" -description = "Implements a topological sort algorithm." -optional = false -python-versions = "*" -files = [ - {file = "toposort-1.10-py3-none-any.whl", hash = "sha256:cbdbc0d0bee4d2695ab2ceec97fe0679e9c10eab4b2a87a9372b929e70563a87"}, - {file = "toposort-1.10.tar.gz", hash = "sha256:bfbb479c53d0a696ea7402601f4e693c97b0367837c8898bc6471adfca37a6bd"}, -] - [[package]] name = "traitlets" version = "5.14.3" @@ -2890,13 +2793,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.13.2" -description = "Backported and Experimental Type Hints for Python 3.8+" +version = "4.14.0" +description = "Backported and Experimental Type Hints for Python 3.9+" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, - {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, + {file = "typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af"}, + {file = "typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4"}, ] [[package]] @@ -3060,44 +2963,21 @@ files = [ {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"}, ] -[[package]] -name = "xarray" -version = "2022.12.0" -description = "N-D labeled arrays and datasets in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "xarray-2022.12.0-py3-none-any.whl", hash = "sha256:eaf3e4c0b62faebf7965f272ce76bc2fc1c9d93c2b966a390e929ef082a796dd"}, - {file = "xarray-2022.12.0.tar.gz", hash = "sha256:083d08e552a7647c7ece136dfa3a4b6a1379256beb55bbed8b8ddf05f1e14ec7"}, -] - -[package.dependencies] -numpy = ">=1.20" -packaging = ">=21.3" -pandas = ">=1.3" - -[package.extras] -accel = ["bottleneck", "flox", "numbagg", "scipy"] -complete = ["bottleneck", "cfgrib", "cftime", "dask[complete]", "flox", "fsspec", "h5netcdf", "matplotlib", "nc-time-axis", "netCDF4", "numbagg", "pooch", "pydap", "rasterio", "scipy", "seaborn", "zarr"] -docs = ["bottleneck", "cfgrib", "cftime", "dask[complete]", "flox", "fsspec", "h5netcdf", "ipykernel", "ipython", "jupyter-client", "matplotlib", "nbsphinx", "nc-time-axis", "netCDF4", "numbagg", "pooch", "pydap", "rasterio", "scanpydoc", "scipy", "seaborn", "sphinx-autosummary-accessors", "sphinx-rtd-theme", "zarr"] -io = ["cfgrib", "cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap", "rasterio", "scipy", "zarr"] -parallel = ["dask[complete]"] -viz = ["matplotlib", "nc-time-axis", "seaborn"] - [[package]] name = "yamlfix" -version = "1.16.0" +version = "1.17.0" description = "A simple opionated yaml formatter that keeps your comments!" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9.1" files = [ - {file = "yamlfix-1.16.0-py3-none-any.whl", hash = "sha256:d92bf8a6d5b6f186bd9d643d633549a1c2424555cb8d176a5d38bce3e678b2b0"}, - {file = "yamlfix-1.16.0.tar.gz", hash = "sha256:72f7990e5b2b4459ef3249df4724dacbd85ce7b87f4ea3503d8a72c48574cc32"}, + {file = "yamlfix-1.17.0-py3-none-any.whl", hash = "sha256:0a510930a3a4f9655ca05a923594f2271849988f33f3c30363d5dee1261b6734"}, + {file = "yamlfix-1.17.0.tar.gz", hash = "sha256:81d7220b62798d1dda580e1574b3d3d6926701ae8cd79588c4e0b33f2e345d85"}, ] [package.dependencies] click = ">=8.1.3" -maison = ">=1.4.0" +maison = ">=2.0.0" +pydantic = ">=2.8.2" ruyaml = ">=0.91.0" [[package]] @@ -3137,5 +3017,5 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" -python-versions = ">=3.9,<4.0" -content-hash = "23cae7b8ad1380db210711d79136a34bfc8e22aad2a735533d6a00a0407242b8" +python-versions = ">=3.11,<4.0" +content-hash = "985b2392e5bb2596247875b767ac5790811b5ec7381a28de8440d83ec55e5685" diff --git a/pyproject.toml b/pyproject.toml index 7926bbf..4487381 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "labelmerge" -version = "0.4.7" +version = "1.0.0" description = "Snakebids app for merging multiple label maps." authors = [ "Jason Kai ", @@ -15,13 +15,9 @@ readme = "README.md" packages = [{ include = "labelmerge" }] [tool.poetry.dependencies] -python = ">=3.9,<4.0" +python = ">=3.11,<4.0" snakebids = "^0.14.0" -nibabel = "^3.2.2" -numpy = "^1.22.3" -xarray = "^2022.11.0" -# Newer versions of pulp incompatible with snakebids -pulp = { version="<2.8.0", python = "<3.11" } +appdirs = "^1.4.4" [tool.poetry.group.dev.dependencies] pytest-console-scripts = "1.2" diff --git a/recipe/meta.yaml b/recipe/meta.yaml new file mode 100644 index 0000000..6f11883 --- /dev/null +++ b/recipe/meta.yaml @@ -0,0 +1,52 @@ +{% set name = "labelmerge" %} +{% set version = "1.0.0" %} +{% set ref = "4a02fc68840b3692e0cda6fe3c6a0021692528bf" %} + +package: + name: {{ name|lower }} + version: {{ version }} + +source: + url: https://github.com/khanlab/labelmerge/archive/{{ ref }}.tar.gz + sha256: 3c68c0871285c5ceecc60378cb593f7b69b8173edf21a6d4a73240a2af4dffd8 + +build: + entry_points: + - labelmerge = labelmerge.run:app.run + noarch: python + script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + number: 0 + +requirements: + host: + - python + - poetry-core + - pip + run: + - python >=3.9,<4.0 + - snakebids >=0.14.0 + - snakemake >=9.0.1 + - appdirs >=1.4.4,<2.0.0 + - pulp <2.8.0 # [py<311] + +test: + imports: + - labelmerge + commands: + - labelmerge --help + + +about: + home: https://github.com/khanlab/labelmerge + summary: | + A BIDS app for merging multiple label maps and metadata into a single parcellation scheme. + description: | + A Brain Imaging Data Structure (BIDS) app that combines the parcellations of multiple + atlases into a single parcellation scheme that can be applied towards downstream analysis. + license: MIT + license_file: LICENSE + + +extra: + recipe-maintainers: + - Dhananjhay \ No newline at end of file diff --git a/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_atlas-MIAL67ThalamicNuclei_desc-tn_dseg.tsv b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_atlas-MIAL67ThalamicNuclei_desc-tn_dseg.tsv new file mode 100644 index 0000000..8dc0294 --- /dev/null +++ b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_atlas-MIAL67ThalamicNuclei_desc-tn_dseg.tsv @@ -0,0 +1,15 @@ +index name color +1 thal-lh-pulvinar #ff0000 +2 thal-lh-ventral-anterior #00ff00 +3 thal-lh-mediodorsal #ffff00 +4 thal-lh-lateral-posterior-ventral-posterior-group #ff7b00 +5 thal-lh-pulvinar-medial-centrolateral-group #00ffff +6 thal-lh-ventrolateral #ff00ff +7 thal-lh-ventral-posterior-ventrolateral-group #0000ff +8 thal-rh-pulvinar #ff0000 +9 thal-rh-ventral-anterior #00ff00 +10 thal-rh-mediodorsal #ffff00 +11 thal-rh-lateral-posterior-ventral-posterior-group #ff7b00 +12 thal-rh-pulvinar-medial-centrolateral-group #00ffff +13 thal-rh-ventrolateral #ff00ff +14 thal-rh-ventral-posterior-ventrolateral-group #0000ff diff --git a/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_atlas-Schaefer2018_desc-100Parcels7Networks_dseg.tsv b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_atlas-Schaefer2018_desc-100Parcels7Networks_dseg.tsv new file mode 100644 index 0000000..407c379 --- /dev/null +++ b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_atlas-Schaefer2018_desc-100Parcels7Networks_dseg.tsv @@ -0,0 +1,101 @@ +index name color +1 7Networks_LH_Vis_1 #781283 +2 7Networks_LH_Vis_2 #781284 +3 7Networks_LH_Vis_3 #781285 +4 7Networks_LH_Vis_4 #781287 +5 7Networks_LH_Vis_5 #781288 +6 7Networks_LH_Vis_6 #781289 +7 7Networks_LH_Vis_7 #78128a +8 7Networks_LH_Vis_8 #78128b +9 7Networks_LH_Vis_9 #78128c +10 7Networks_LH_SomMot_1 #4682b3 +11 7Networks_LH_SomMot_2 #4682b5 +12 7Networks_LH_SomMot_3 #4682b6 +13 7Networks_LH_SomMot_4 #4682b7 +14 7Networks_LH_SomMot_5 #4682b8 +15 7Networks_LH_SomMot_6 #4682b9 +16 7Networks_LH_DorsAttn_Post_1 #00760d +17 7Networks_LH_DorsAttn_Post_2 #00760f +18 7Networks_LH_DorsAttn_Post_3 #007610 +19 7Networks_LH_DorsAttn_Post_4 #007611 +20 7Networks_LH_DorsAttn_Post_5 #007612 +21 7Networks_LH_DorsAttn_Post_6 #007613 +22 7Networks_LH_DorsAttn_FEF_1 #007614 +23 7Networks_LH_DorsAttn_FEF_2 #007615 +24 7Networks_LH_SalVentAttn_ParOper_1 #c43afb +25 7Networks_LH_SalVentAttn_FrOper_1 #c43bfb +26 7Networks_LH_SalVentAttn_FrOper_2 #c43bfc +27 7Networks_LH_SalVentAttn_PFCl_1 #c43bfd +28 7Networks_LH_SalVentAttn_Med_1 #c53afb +29 7Networks_LH_SalVentAttn_Med_2 #c53afc +30 7Networks_LH_SalVentAttn_Med_3 #c53afd +31 7Networks_LH_Limbic_OFC_1 #dcf8a5 +32 7Networks_LH_Limbic_TempPole_1 #dcf8a6 +33 7Networks_LH_Limbic_TempPole_2 #dcf8a7 +34 7Networks_LH_Cont_Par_1 #e69423 +35 7Networks_LH_Cont_PFCl_1 #e69524 +36 7Networks_LH_Cont_pCun_1 #e79523 +37 7Networks_LH_Cont_Cing_1 #e79524 +38 7Networks_LH_Default_Temp_1 #cd3e50 +39 7Networks_LH_Default_Temp_2 #cd3e51 +40 7Networks_LH_Default_Temp_3 #cd3e52 +41 7Networks_LH_Default_Temp_4 #cd3e53 +42 7Networks_LH_Default_PFC_1 #cd3f4c +43 7Networks_LH_Default_PFC_2 #cd3f4d +44 7Networks_LH_Default_PFC_3 #cd3f4f +45 7Networks_LH_Default_PFC_4 #cd3f50 +46 7Networks_LH_Default_PFC_5 #cd3f51 +47 7Networks_LH_Default_PFC_6 #cd3f52 +48 7Networks_LH_Default_PFC_7 #cd3f53 +49 7Networks_LH_Default_PCC_1 #cd3f54 +50 7Networks_LH_Default_PCC_2 #cd3f55 +51 7Networks_RH_Vis_1 #7c1285 +52 7Networks_RH_Vis_2 #7c1286 +53 7Networks_RH_Vis_3 #7c1288 +54 7Networks_RH_Vis_4 #7c1289 +55 7Networks_RH_Vis_5 #7c128a +56 7Networks_RH_Vis_6 #7c128b +57 7Networks_RH_Vis_7 #7c128c +58 7Networks_RH_Vis_8 #7c128d +59 7Networks_RH_SomMot_1 #4a82b3 +60 7Networks_RH_SomMot_2 #4a82b4 +61 7Networks_RH_SomMot_3 #4a82b6 +62 7Networks_RH_SomMot_4 #4a82b7 +63 7Networks_RH_SomMot_5 #4a82b8 +64 7Networks_RH_SomMot_6 #4a82b9 +65 7Networks_RH_SomMot_7 #4a82ba +66 7Networks_RH_SomMot_8 #4a82bb +67 7Networks_RH_DorsAttn_Post_1 #04770e +68 7Networks_RH_DorsAttn_Post_2 #047710 +69 7Networks_RH_DorsAttn_Post_3 #047711 +70 7Networks_RH_DorsAttn_Post_4 #047712 +71 7Networks_RH_DorsAttn_Post_5 #047713 +72 7Networks_RH_DorsAttn_FEF_1 #05760f +73 7Networks_RH_DorsAttn_FEF_2 #057610 +74 7Networks_RH_SalVentAttn_TempOccPar_1 #c93afc +75 7Networks_RH_SalVentAttn_TempOccPar_2 #c93afd +76 7Networks_RH_SalVentAttn_FrOper_1 #c93bfc +77 7Networks_RH_SalVentAttn_Med_1 #c839fa +78 7Networks_RH_SalVentAttn_Med_2 #c839fb +79 7Networks_RH_Limbic_OFC_1 #e0f9a5 +80 7Networks_RH_Limbic_TempPole_1 #e0f9a6 +81 7Networks_RH_Cont_Par_1 #ea9323 +82 7Networks_RH_Cont_Par_2 #ea9324 +83 7Networks_RH_Cont_PFCl_1 #e99422 +84 7Networks_RH_Cont_PFCl_2 #e99423 +85 7Networks_RH_Cont_PFCl_3 #e99424 +86 7Networks_RH_Cont_PFCl_4 #e99425 +87 7Networks_RH_Cont_PFCmp_1 #ea9425 +88 7Networks_RH_Cont_PFCmp_2 #ea9426 +89 7Networks_RH_Cont_PFCmp_3 #ea9427 +90 7Networks_RH_Default_Par_1 #d13e4e +91 7Networks_RH_Default_Temp_1 #d13d4f +92 7Networks_RH_Default_Temp_2 #d13d50 +93 7Networks_RH_Default_Temp_3 #d13d51 +94 7Networks_RH_Default_PFCv_1 #d13d4e +95 7Networks_RH_Default_PFCv_2 #d13d52 +96 7Networks_RH_Default_PFCm_1 #d03e4f +97 7Networks_RH_Default_PFCm_2 #d03e50 +98 7Networks_RH_Default_PFCm_3 #d03e51 +99 7Networks_RH_Default_PCC_1 #d03e4e +100 7Networks_RH_Default_PCC_2 #d03e52 diff --git a/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_desc-carpet_dseg.tsv b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_desc-carpet_dseg.tsv new file mode 100644 index 0000000..81f8932 --- /dev/null +++ b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_desc-carpet_dseg.tsv @@ -0,0 +1,118 @@ +index name xyz +0 background 48, 57, 48 +1 Left Cerebral White Matter 35, 58, 48 +2 Right Cerebral White Matter 62, 59, 48 +3 Left Lateral Ventricle 42, 60, 46 +4 Right Lateral Ventricle 55, 60, 46 +5 Brain-Stem 48, 50, 22 +34 Left Thalamus 43, 56, 42 +35 Left Caudate 42, 71, 44 +36 Left Putamen 36, 66, 39 +37 Left Pallidum 38, 64, 38 +39 Left Hippocampus 36, 55, 32 +40 Left Amygdala 37, 64, 30 +41 Left Accumbens 43, 72, 35 +45 Right Thalamus 53, 57, 42 +46 Right Caudate 55, 71, 44 +47 Right Putamen 61, 67, 39 +48 Right Pallidum 58, 64, 38 +49 Right Hippocampus 61, 56, 32 +50 Right Amygdala 60, 64, 30 +51 Right Accumbens 53, 72, 36 +101 Left Frontal Pole 35, 92, 43 +102 Right Frontal Pole 61, 92, 43 +103 Left Insular Cortex 30, 67, 39 +104 Right Insular Cortex 67, 67, 39 +105 Left Superior Frontal Gyrus 41, 76, 67 +106 Right Superior Frontal Gyrus 56, 75, 68 +107 Left Middle Frontal Gyrus 29, 75, 60 +108 Right Middle Frontal Gyrus 68, 75, 61 +109 Left Inferior Frontal Gyrus pars triangularis 23, 80, 43 +110 Right Inferior Frontal Gyrus pars triangularis 74, 80, 43 +111 Left Inferior Frontal Gyrus pars opercularis 22, 73, 47 +112 Right Inferior Frontal Gyrus pars opercularis 75, 74, 47 +113 Left Precentral Gyrus 31, 60, 64 +114 Right Precentral Gyrus 66, 61, 64 +115 Left Temporal Pole 28, 72, 24 +116 Right Temporal Pole 68, 73, 24 +117 Left Superior Temporal Gyrus anterior division 20, 64, 35 +118 Right Superior Temporal Gyrus anterior division 77, 65, 34 +119 Left Superior Temporal Gyrus posterior division 17, 52, 41 +120 Right Superior Temporal Gyrus posterior division 79, 54, 40 +121 Left Middle temporal Gyrus anterior division 19, 64, 28 +122 Right Middle temporal Gyrus anterior division 77, 65, 27 +123 Left Middle temporal Gyrus posterior division 17, 52, 33 +124 Right Middle temporal Gyrus posterior division 79, 55, 33 +125 Left Middle Temporal Gyrus temporooccipital part 19, 39, 39 +126 Right Middle Temporal Gyrus temporooccipital part 78, 41, 40 +127 Left Inferior Temporal Gyrus anterior division 24, 63, 19 +128 Right Inferior Temporal Gyrus anterior division 71, 65, 18 +129 Left Inferior Temporal Gyrus posterior division 21, 52, 25 +130 Right Inferior Temporal Gyrus posterior division 75, 54, 24 +131 Left Inferior Temporal Gyrus temporooccipital part 22, 39, 30 +132 Right Inferior Temporal Gyrus temporooccipital part 75, 41, 30 +133 Left Postcentral Gyrus 29, 52, 65 +134 Right Postcentral Gyrus 67, 53, 66 +135 Left Superior Parietal Lobule 33, 41, 68 +136 Right Superior Parietal Lobule 63, 42, 69 +137 Left Supramarginal Gyrus anterior division 19, 50, 58 +138 Right Supramarginal Gyrus anterior division 78, 52, 58 +139 Left Supramarginal Gyrus posterior division 20, 43, 56 +140 Right Supramarginal Gyrus posterior division 76, 46, 56 +141 Left Angular Gyrus 23, 38, 54 +142 Right Angylar Gyrus 75, 40, 56 +143 Left Lateral Occipital Cortex superior division 32, 29, 59 +144 Right Lateral Occipital Cortext superior division 65, 30, 59 +145 Left Lateral Occipital Cortex inferior division 25, 28, 38 +146 Right Lateral Occipital Cortext inferior division 71, 29, 38 +147 Left Intracalcarine Cortex 44, 29, 43 +148 Right Intracalcarine Cortex 53, 29, 43 +149 Left Frontal Medial Cortex 46, 88, 30 +150 Right Frontal Medial Cortex 50, 88, 29 +151 Left Juxtapositional Lobule Cortex formerly Supplmentary Motor Cortex 46, 65, 68 +152 Right Juxtapositional Lobule Cortex formerly Supplmentary Motor Cortex 51, 65, 68 +153 Left Subcalosal Cortex 46, 75, 32 +154 Right Subcallosal Cortex 50, 76, 31 +155 Left Paracingulate Gyrus 45, 84, 50 +156 Right Paracingulate Gyrus 51, 84, 50 +157 Left Cingulate Gyrus anterior division 46, 75, 51 +158 Right Cingulate Gyrus anterior division 51, 76, 51 +159 Left Cingulate Gyrus posterior division 46, 47, 54 +160 Right Cingulate Gyrus posterior division 51, 48, 54 +161 Left Precuneous Cortex 45, 36, 58 +162 Right Precuneous Cortex 52, 37, 59 +163 Left Cuneal Cortex 45, 26, 53 +164 Right Cuneal Cortex 52, 27, 53 +165 Left Frontal Orbital Cortex 33, 77, 30 +166 Right Frontal Orbital Cortex 63, 77, 31 +167 Left Parahippocampal Gyrus anterior division 37, 62, 24 +168 Right Parahippocampal Gyrus anterior division 59, 62, 24 +169 Left Parahippocampal Gyrus posterior division 37, 50, 31 +170 Right Parahippocampal Gyrus posterior division 59, 51, 30 +171 Left Lingual Gyrus 43, 33, 36 +172 Right Lingual Gyrus 55, 34, 36 +173 Left Temporal Fusiform Cortex anterior division 32, 64, 18 +174 Right Temporal Fusiform Cortex anterior division 63, 64, 17 +175 Left Temporal Fusiform Cortex posterior division 30, 52, 26 +176 Right Temporal Fusiform Cortex posterior division 66, 54, 25 +177 Left Temporal Occipital Fusiform Cortex 31, 39, 31 +178 Right Temporal Occipital Fusiform Cortex 66, 41, 30 +179 Left Occipital Fusiform Gyrus 35, 27, 31 +180 Right Occipital Fusiform Gyrus 61, 28, 32 +181 Left Frontal Operculum Cortex 28, 75, 41 +182 Right Frontal Operculum Cortex 69, 75, 41 +183 Left Central Opercular Cortex 24, 62, 45 +184 Right Central Opercular Cortex 73, 63, 44 +185 Left Parietal Operculum Cortex 23, 50, 49 +186 Right Parietal Operculum Cortex 73, 52, 50 +187 Left Planum Polare 24, 63, 36 +188 Right Planum Polare 72, 65, 36 +189 Left Heschls Gyrus 25, 56, 43 +190 Right Heschls Gyrus 71, 58, 43 +191 Left Planum Temporale 21, 52, 44 +192 Right Planum Temporale 76, 54, 45 +193 Left Supracalcarine Cortex 45, 28, 46 +194 Right Supracalcarine Cortex 52, 29, 46 +195 Left Occipital Pole 40, 18, 42 +196 Right Occipital Pole 57, 18, 43 +255 Cerebellum and Midbrain 48, 36, 21 \ No newline at end of file diff --git a/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_res-01_atlas-MIAL67ThalamicNuclei_desc-tn_dseg.nii.gz b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_res-01_atlas-MIAL67ThalamicNuclei_desc-tn_dseg.nii.gz new file mode 100644 index 0000000..e812208 Binary files /dev/null and b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_res-01_atlas-MIAL67ThalamicNuclei_desc-tn_dseg.nii.gz differ diff --git a/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_res-01_atlas-Schaefer2018_desc-100Parcels7Networks_dseg.nii.gz b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_res-01_atlas-Schaefer2018_desc-100Parcels7Networks_dseg.nii.gz new file mode 100644 index 0000000..7b6b349 Binary files /dev/null and b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_res-01_atlas-Schaefer2018_desc-100Parcels7Networks_dseg.nii.gz differ diff --git a/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_res-01_desc-carpet_dseg.nii.gz b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_res-01_desc-carpet_dseg.nii.gz new file mode 100644 index 0000000..0809755 Binary files /dev/null and b/test_data/bids_wetrun_testing/tpl-MNI152NLin2009cAsym/anat/tpl-MNI152NLin2009cAsym_res-01_desc-carpet_dseg.nii.gz differ