diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..87c55ee3 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,75 @@ +name: Build and Publish + +on: + push: + branches: + - master + tags: + - "**" + +jobs: + + python: + runs-on: ubuntu-latest + steps: + - name: Checkout code + id: checkout + uses: actions/checkout@v4 + with: + token: ${{ secrets.GH_BRIDGE_PAT }} + - name: Build and publish to PyPI + id: publish + uses: JRubics/poetry-publish@v2.1 + with: + python_version: 3.12 + pypi_token: ${{ secrets.PYPI }} + poetry_install_options: --without dev + + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + id: checkout + uses: actions/checkout@v3 + with: + token: ${{ secrets.GH_BRIDGE_PAT }} + + - name: Fetch version + id: version + uses: SebRollen/toml-action@v1.0.2 + with: + file: 'pyproject.toml' + field: 'tool.poetry.version' + + - name: Setup QEMU + id: qemu + uses: docker/setup-qemu-action@v3 + + - name: Setup Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + id: login + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push + id: docker_build_push + uses: docker/build-push-action@v5 + with: + push: true + tags: | + dmri/neurodock:latest + dmri/neurodock:${{ steps.version.outputs.value }} + ghcr.io/muscbridge/PyDesigner:latest + ghcr.io/muscbridge/PyDesigner:${{ steps.version.outputs.value }} diff --git a/.github/workflows/pydesigner_build.yml b/.github/workflows/pydesigner_build.yml deleted file mode 100644 index ef11bce5..00000000 --- a/.github/workflows/pydesigner_build.yml +++ /dev/null @@ -1,39 +0,0 @@ -# name: Docker Build and Push - -# on: -# push: -# tags: -# - '**' - -# jobs: -# docker: -# runs-on: ubuntu-latest -# steps: -# - -# name: Checkout -# uses: actions/checkout@v3 -# - -# name: Fetch version -# uses: SebRollen/toml-action@v1.0.2 -# id: version -# with: -# file: 'pyproject.toml' -# field: 'tool.poetry.version' -# - -# name: Set up QEMU -# uses: docker/setup-qemu-action@v3 -# - -# name: Set up Docker Buildx -# uses: docker/setup-buildx-action@v3 -# - -# name: Login to Docker Hub -# uses: docker/login-action@v3 -# with: -# username: ${{ secrets.DOCKERHUB_USERNAME }} -# password: ${{ secrets.DOCKERHUB_TOKEN }} -# - -# name: Build and push -# uses: docker/build-push-action@v5 -# with: -# push: true -# tags: dmri/neurodock:latest,dmri/neurodock:${{ steps.version.outputs.value }} diff --git a/.github/workflows/pydesigner_ci.yml b/.github/workflows/pydesigner_ci.yml index 5eafe0d2..9fee76e0 100644 --- a/.github/workflows/pydesigner_ci.yml +++ b/.github/workflows/pydesigner_ci.yml @@ -3,26 +3,140 @@ name: CI on: pull_request: push: - branches: [main] + branches: master + tags: + - "**" +permissions: + checks: write + pull-requests: write - jobs: pre-commit: runs-on: ubuntu-latest steps: - name: Checkout + id: checkout uses: actions/checkout@v3 + with: + token: ${{ secrets.GH_BRIDGE_PAT }} + - name: Set up Python - uses: actions/setup-python@v3 + id: setup-python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + architecture: 'x64' + - name: Run Pre-Commit + id: pre-commit uses: pre-commit/action@v3.0.0 + continue-on-error: true with: - pre-commit_version: latest - python_version: 3.8 - system: true - # - name: Auto-commit changed files - # uses: stefanzweifel/git-auto-commit-action@v5 - # with: - # commit_message: "Pre-commit fixes" - - \ No newline at end of file + extra_args: --all-files + + - name: Auto-commit changed files + id: git-auto-commit + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "Pre-commit autofix" + + - name: Return pre-commit response + if: steps.pre-commit.outcome == 'failure' + run: exit 1 + + pytest: + needs: pre-commit + runs-on: ubuntu-latest + steps: + - name: Checkout code + id: checkout + uses: actions/checkout@v4 + with: + token: ${{ secrets.GH_BRIDGE_PAT }} + + - name: Login to Docker Hub + id: login + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build Docker image + run: docker build -t pydesigner-test -f tests/Dockerfile . + + - name: Run tests in Docker container + run: docker run --name pydesigner-test-container pydesigner-test + + - name: Copy test results + if: always() + run: docker cp pydesigner-test-container:/test_results/ ./test_results + + - name: Upload test results + uses: actions/upload-artifact@v4 + if: always() + with: + name: test-results + path: ./test_results/results.xml + + - name: Upload coverage report + if: always() + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: ./test_results/coverage.xml + + - name: Clean up + run: | + docker container rm pydesigner-test-container + docker image rm pydesigner-test + + summary-reports: + needs: pytest + if: always() + runs-on: ubuntu-latest + steps: + - name: Checkout code + id: checkout + uses: actions/checkout@v4 + with: + token: ${{ secrets.GH_BRIDGE_PAT }} + + - name: Download test results + uses: actions/download-artifact@v4 + with: + name: test-results + path: ./test_results + + - name: Download coverage report + uses: actions/download-artifact@v4 + with: + name: coverage-report + path: ./test_results + + - name: Code coverage summary report + uses: irongut/CodeCoverageSummary@v1.3.0 + with: + filename: ./test_results/coverage.xml + badge: true + fail_below_min: true + format: markdown + hide_branch_rate: false + hide_complexity: true + indicators: true + output: both + thresholds: '10 50' + + - name: Publish Coverage PR Comment + uses: marocchino/sticky-pull-request-comment@v2 + with: + recreate: true + path: code-coverage-results.md + + - name: Output Coverage to Job Summary + run: cat code-coverage-results.md >> $GITHUB_STEP_SUMMARY + + - name: Publish Test Results + uses: EnricoMi/publish-unit-test-result-action@v2 + with: + files: | + test_results/results.xml diff --git a/.gitignore b/.gitignore index cbb34060..c1d803da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Folders to ignore +.coverage* .idea/ __pycache__/ .ipynb_checkpoints/ @@ -13,6 +14,8 @@ docs/html/ docs/doctrees/ # Files to ignore -.DS_Store +**.DS_Store +**._. +**._./ designer/._DESIGNER.py .nii diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5d610c94..c72c86cc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,13 +1,13 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: 'v4.5.0' + rev: 'v5.0.0' hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/python-jsonschema/check-jsonschema - rev: '0.27.0' + rev: '0.33.0' hooks: - id: check-readthedocs @@ -18,20 +18,20 @@ repos: args: ['--html-dir', 'docs/html', '--source-dir', 'docs/source'] language_version: python3 -- repo: https://github.com/psf/black - rev: '23.9.1' - hooks: - - id: black - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: 'v0.1.0' + rev: 'v0.11.7' hooks: - id: ruff - args: [--fix, --exit-non-zero-on-fix] + args: [--config, pyproject.toml, --fix, --exit-non-zero-on-fix] + - id: ruff-format - repo: https://github.com/python-poetry/poetry - rev: '1.6.0' + rev: '1.8.0' hooks: + - id: poetry-lock + args: ["--no-update"] - id: poetry-check - # - id: poetry-lock - id: poetry-export + args: ["--without-hashes", "-f", "requirements.txt", "-o", "requirements.txt"] + - id: poetry-export + args: ["--without-hashes", "--only", "dev", "-f", "requirements.txt", "-o", "requirements-dev.txt"] diff --git a/Dockerfile b/Dockerfile index 723a0cd6..82914a15 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,101 +4,40 @@ # FSL, and Python to preprocess diffusion MRI images. # # Maintainer: Siddhartha Dhiman -# ------------------------------------------------------------------------------ -# Current Dependencies -# 1.) FSL -# 2.) MRTRIX3 -# 3.) Python 2.7 -# 4.) Python 3.6 -# 6.) PyDesigner # ============================================================================== # Load base Ubuntu image -FROM python:3.11-bullseye +FROM dmri/ci-cd-py3.12:6f2600ca AS base +SHELL ["/bin/bash", "-euxo", "pipefail", "-c"] +WORKDIR /src # Labels LABEL maintainer="Siddhartha Dhiman (siddhartha.dhiman@gmail.com)" -LABEL org.label-schema.schema-version="1.0.0-rc1" LABEL org.label-schema.name="dmri/pydesigner" LABEL org.label-schema.description="A state-of-the-art difusion and kurtosis MRI processing pipeline" LABEL org.label-schema.url="https://github.com/m-ama/" LABEL org.label-schema.vcs-url="https://github.com/m-ama/NeuroDock.git" LABEL org.label-schema.vendor="MUSC BRIDGE" -# ARG DEBIAN_FRONTEND=noninteractive - -# Initial update -RUN apt update && \ - apt-get install -y \ - apt-utils \ - wget \ - curl \ - nano \ - software-properties-common \ - python3 \ - python3-pip \ - jq \ - libblas-dev \ - liblapack-dev \ - libatlas-base-dev \ - gfortran \ - git \ - g++ \ - python \ - libeigen3-dev \ - zlib1g-dev \ - libqt5opengl5-dev \ - libqt5svg5-dev \ - libgl1-mesa-dev \ - libfftw3-dev \ - libtiff5-dev \ - libpng-dev - # Copy and install PyDesigner -RUN mkdir -p /pydesigner -COPY /pydesigner /app/pydesigner -COPY pyproject.toml app/ -RUN ls -RUN ls -la /app -WORKDIR /app -ENV PYTHONPATH=${PYTHONPATH}:${PWD} -RUN pip3 install poetry -RUN poetry config virtualenvs.create false -RUN poetry install --no-dev - -# Install Python dependencies -RUN pip3 install --upgrade setuptools && \ - pip3 install numpy \ - pandas \ - scipy \ - joblib \ - multiprocess \ - tqdm \ - nibabel \ - cvxpy - -# Install FSL -RUN curl https://fsl.fmrib.ox.ac.uk/fsldownloads/fslinstaller.py -o /tmp/fslinstaller.py -RUN echo "/usr/local/fsl" | python2 /tmp/fslinstaller.py -V 6.0.3 - -# Configure FSL Environment -ENV FSLDIR=/usr/local/fsl -ENV FSLOUTPUTTYPE=NIFTI_GZ -ENV PATH=$PATH:$FSLDIR/bin -ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$FSLDIR - -# Build and Configure MRTRIX3 -RUN git clone https://github.com/MRtrix3/mrtrix3.git /usr/lib/mrtrix3 -ENV CXX=/usr/bin/clang++ -ENV ARCH=native -RUN cd /usr/lib/mrtrix3 && \ - ./configure -nogui -openmp && \ - ./build && \ - ./set_path -ENV PATH=$PATH:/usr/lib/mrtrix3/bin - -# Remove unwanted packages -RUN apt-get autoremove && apt-get clean -RUN rm /tmp/fslinstaller.py && rm -r /tmp/PyDesigner - +FROM base AS dependencies +COPY requirements.txt ./ +RUN uv pip install -r requirements.txt + +FROM dependencies AS development +COPY requirements-dev.txt ./ +RUN uv pip install -rrequirements-dev.txt +COPY . . +RUN uv pip install --no-deps -e. + +FROM dependencies AS pyc +COPY . . +RUN python -m compileall -bqj0 . +RUN find . -name "*.py" -not -name "__init__.py" -delete + +FROM pyc AS production +COPY --from=pyc /src . +RUN uv pip install --no-deps -e. + +RUN useradd -ms /bin/bash bridge USER bridge diff --git a/LICENSE b/LICENSE old mode 100755 new mode 100644 diff --git a/docker/Dockerfile_develop b/docker/Dockerfile_develop deleted file mode 100644 index 79c1b350..00000000 --- a/docker/Dockerfile_develop +++ /dev/null @@ -1,97 +0,0 @@ -# ============================================================================== -# NeuroDock -# A docker container that contains all PyDesigner dependencies such as MRTRIX3, -# FSL, and Python to preprocess diffusion MRI images. -# -# Maintainer: Siddhartha Dhiman -# ------------------------------------------------------------------------------ -# Current Dependencies -# 1.) FSL -# 2.) MRTRIX3 -# 3.) Python 2.7 -# 4.) Python 3.6 -# 6.) PyDesigner -# ============================================================================== - -# Load base Ubuntu image -FROM debian:buster-slim - -# Add LABEL Information -ARG BUILD_DATE -ARG VCS_REF - -# Labels. -LABEL maintainer="Siddhartha Dhiman (dhiman@musc.edu)" -LABEL org.label-schema.schema-version="1.0.0-rc1" -LABEL org.label-schema.build-date=$BUILD_DATE -LABEL org.label-schema.name="dmri/pydesigner" -LABEL org.label-schema.description="A state-of-the-art difusion and kurtosis MRI processing pipeline" -LABEL org.label-schema.url="https://github.com/m-ama/" -LABEL org.label-schema.vcs-url="https://github.com/m-ama/NeuroDock.git" -LABEL org.label-schema.vcs-ref=$VCS_REF -LABEL org.label-schema.vendor="MAMA" - -ARG DEBIAN_FRONTEND=noninteractive - -# Initial update -RUN apt-get update && \ - apt-get install -y \ - apt-utils \ - wget \ - curl \ - nano \ - software-properties-common \ - python2.7 python-pip \ - python3-pip \ - libblas-dev \ - liblapack-dev \ - libatlas-base-dev \ - gfortran - -# Install MRTRIX3 dependencies -RUN apt-get install -y --no-install-recommends \ - clang \ - git \ - python-numpy \ - libeigen3-dev \ - zlib1g-dev \ - libqt4-opengl-dev \ - libgl1-mesa-dev \ - libfftw3-dev \ - libtiff5-dev \ - libomp-dev \ - libhdf5-serial-dev - -RUN rm /bin/sh && ln -s /bin/bash /bin/sh - -# Clone PyDesigner -RUN mkdir -p /tmp/PyDesigner -RUN pip3 install cmake -RUN git clone -b develop --single-branch https://github.com/m-ama/PyDesigner.git /tmp/PyDesigner -RUN pip3 install /tmp/PyDesigner -RUN echo "alias python=python3" >> ~/.bashrc && source ~/.bashrc -RUN echo "alias pip=pip3" >> ~/.bashrc && source ~/.bashrc - -# Install FSL -RUN curl https://fsl.fmrib.ox.ac.uk/fsldownloads/fslinstaller.py -o /tmp/fslinstaller.py -RUN python /tmp/fslinstaller.py -V 6.0.6 -d /usr/local/fsl - -# Configure FSL Environment -ENV FSLDIR=/usr/local/fsl -ENV FSLOUTPUTTYPE=NIFTI_GZ -ENV PATH=$PATH:$FSLDIR/bin -ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$FSLDIR - -# Build and Configure MRTRIX3 -RUN git clone https://github.com/MRtrix3/mrtrix3.git /usr/local/mrtrix3 -ENV CXX=/usr/bin/clang++ -ENV ARCH=native -RUN cd /usr/local/mrtrix3 && \ - ./configure -nogui -openmp && \ - ./build && \ - ./set_path -ENV PATH=$PATH:/usr/local/mrtrix3/bin - -# Remove unwanted packages -RUN apt-get autoremove && apt-get clean -RUN rm /tmp/fslinstaller.py && rm -r /tmp/PyDesigner diff --git a/docker/Dockerfile_release b/docker/Dockerfile_release deleted file mode 100644 index 6241c604..00000000 --- a/docker/Dockerfile_release +++ /dev/null @@ -1,100 +0,0 @@ -# ============================================================================== -# NeuroDock -# A docker container that contains all PyDesigner dependencies such as MRTRIX3, -# FSL, and Python to preprocess diffusion MRI images. -# -# Maintainer: Siddhartha Dhiman -# ------------------------------------------------------------------------------ -# Current Dependencies -# 1.) FSL -# 2.) MRTRIX3 -# 3.) Python 2.7 -# 4.) Python 3.6 -# 6.) PyDesigner -# ============================================================================== - -# Load base Ubuntu image -FROM debian:buster-slim - -# Add LABEL Information -# ARG BUILD_DATE -# ARG VCS_REF - -# Labels. -LABEL maintainer="Siddhartha Dhiman (dhiman@musc.edu)" -LABEL org.label-schema.schema-version="1.0.0-rc1" -LABEL org.label-schema.build-date=$BUILD_DATE -LABEL org.label-schema.name="dmri/pydesigner" -LABEL org.label-schema.description="A state-of-the-art difusion and kurtosis MRI processing pipeline" -LABEL org.label-schema.url="https://github.com/m-ama/" -LABEL org.label-schema.vcs-url="https://github.com/m-ama/NeuroDock.git" -LABEL org.label-schema.vcs-ref=$VCS_REF -LABEL org.label-schema.vendor="MAMA" - -ARG DEBIAN_FRONTEND=noninteractive - -# Initial update -RUN apt-get update && \ - apt-get install -y \ - apt-utils \ - wget \ - curl \ - nano \ - software-properties-common \ - python2.7 python-pip \ - python3-pip \ - libblas-dev \ - liblapack-dev \ - libatlas-base-dev \ - gfortran - -# Install MRTRIX3 dependencies -RUN apt-get install -y --no-install-recommends \ - clang \ - git \ - # python-numpy \ - libeigen3-dev \ - zlib1g-dev \ - libqt4-opengl-dev \ - libgl1-mesa-dev \ - libfftw3-dev \ - libtiff5-dev \ - libomp-dev \ - libhdf5-serial-dev - -RUN rm /bin/sh && ln -s /bin/bash /bin/sh - -# Clone PyDesigner -ADD install_pydesigner_release /tmp/install_pydesigner_release -RUN sed -i 's/\r//g' /tmp/install_pydesigner_release -RUN pip3 install cmake==3.22.0 -RUN chmod +x /tmp/install_pydesigner_release && bash /tmp/install_pydesigner_release -RUN cd /tmp/PyDesigner && pip3 install . -RUN echo "alias python=python3" >> ~/.bashrc && source ~/.bashrc -RUN echo "alias pip=pip3" >> ~/.bashrc && source ~/.bashrc - -# Install FSL -RUN curl https://fsl.fmrib.ox.ac.uk/fsldownloads/fslinstaller.py -o /tmp/fslinstaller.py -RUN python /tmp/fslinstaller.py -V 6.0.6 -d /usr/local/fsl - -# Configure FSL Environment -ENV FSLDIR=/usr/local/fsl -ENV FSLOUTPUTTYPE=NIFTI_GZ -ENV PATH=$PATH:$FSLDIR/bin -ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$FSLDIR - -# Build and Configure MRTRIX3 -RUN git clone https://github.com/MRtrix3/mrtrix3.git /usr/local/mrtrix3 -ENV CXX=/usr/bin/clang++ -ENV ARCH=native -RUN cd /usr/local/mrtrix3 && \ - ./configure -nogui -openmp && \ - ./build && \ - ./set_path -ENV PATH=$PATH:/usr/local/mrtrix3/bin - -# Remove unwanted packages -RUN apt-get autoremove && apt-get clean -RUN rm /tmp/fslinstaller.py && \ - rm /tmp/install_pydesigner_release && \ - rm -r /tmp/PyDesigner diff --git a/docker/install_pydesigner_release b/docker/install_pydesigner_release deleted file mode 100644 index f902e4f9..00000000 --- a/docker/install_pydesigner_release +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -# Downloads and extractslatest release PyDesigner into /tmp/PyDesigner -mkdir -p /tmp/PyDesigner -export URL=$(curl -s https://api.github.com/repos/m-ama/PyDesigner/releases/latest | grep "tarball" | cut -d '"' -f 4) -wget -q -O - $URL | tar -xzvf - -C /tmp/PyDesigner --strip 1 diff --git a/docs/Makefile b/docs/Makefile index e42acb9f..67248096 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -11,7 +11,7 @@ BUILDDIR = build # Added to auto build API doc during make APIBUILD ?= sphinx-apidoc APIBUILDDIR = source/api -APIDIR = ../designer +APIDIR = ../pydesigner # Put it first so that "make" without argument is like "make help". help: diff --git a/docs/source/conf.py b/docs/source/conf.py index 21769533..78e64922 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -7,7 +7,6 @@ # -- Imports ----------------------------------------------------------------- # import os # import sys -import sphinx_rtd_theme # -- Path setup -------------------------------------------------------------- diff --git a/docs/source/installation/pydesigner.rst b/docs/source/installation/pydesigner.rst index 3a3df593..e9918117 100644 --- a/docs/source/installation/pydesigner.rst +++ b/docs/source/installation/pydesigner.rst @@ -12,48 +12,4 @@ PyDesigner can be installed using the PyPI package manager using the command $ pip install PyDesigner-DWI -**Note**: - Remember to switch to your conda environement before parsing this - command. - That's it, you're done! - -Instructions on installing PyDesigner manually from the GitHub repository -are list below. - -Download --------- -You may clone the main `PyDesigner repository`_ for the latest build, -or download the build version of your choice from the `Releases tab`_. - -.. _PyDesigner repository: https://github.com/m-ama/PyDesigner -.. _Releases tab: https://github.com/m-ama/PyDesigner/releases - -To clone the PyDesigner repository, in terminal, run: - -.. code-block:: console - - $ git clone https://github.com/m-ama/PyDesigner.git - -Install -------- -PyDesigner can be automatically installed with all dependencies by -opening a CLI and changing directory to root PyDesigner directory, -followed by - -.. code-block:: console - - $ pip install . - -**Note**: - Remember to switch to your conda environement before parsing this - command. - -This will execute the :code:`setup.py` script in root directory to -automatically configure your Python environment for PyDesigner. When -running the automated methods, PyDesigner can simply be called with -the commad :code:`pydesigner`. - -**Note:** If you need a stable, tested and versioned build, download -the most recent release from the Release tab. Click on Source code -(zip) link and decompress (unzip) to any folder you desire. diff --git a/extras/dke_parameters.txt b/extras/dke_parameters.txt old mode 100755 new mode 100644 diff --git a/installer b/installer deleted file mode 100755 index fd989e73..00000000 --- a/installer +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/bash -# This script installs PyDesigner and all dependencies within -# Debian-based systems -# Author: Siddhartha Dhiman -# -# Note: -# The scipt will ask for root password if not run by root user - -# Declate predefined variables -ISFSL=0 -ISMRTRIX=0 -ISPYD=0 -FSLINSTALL=/usr/local/fsl -MRTRIXINSTALL=/usr/local/mrtrix3 -RED='\033[0;31m' -GREEN='\033[32m' -NC='\033[0m' - - -# Install dependencies -sudo apt-get update && \ - sudo apt-get install -y \ - apt-utils \ - wget \ - curl \ - nano \ - software-properties-common \ - python2.7 python-pip \ - python3 python3-pip \ - jq - -sudo apt-get install -y --no-install-recommends \ - clang \ - git \ - python-numpy \ - libeigen3-dev \ - zlib1g-dev \ - libqt4-opengl-dev \ - libgl1-mesa-dev \ - libfftw3-dev \ - libtiff5-dev \ - libomp-dev - -# Check installation of FSL, MRtrix3 and PyDesigner -if [[ $(echo $FSLDIR) ]]; then - echo -e "${GREEN}Existing FSL installation found${NC}\n" - ISFSL=1 -else - echo -e "${RED}FSL installation not found...marked for installation\n${NC}" - ISFSL=0 -fi - -if [[ $(which dwipreproc) ]]; then - echo -e "${GREEN}Existing MRtrix3 installation found\n${NC}" - ISMRTRIX=1 -else - echo -e "${RED}MRtrix3 installation not found...marked for installation\n${NC}" - ISMRTRIX=0 -fi - -if [[ $(which pydesigner) ]]; then - echo -e "${GREEN}Existing PyDesigner installation found\n${NC}" - ISPYD=1 -else - echo -e "${RED}PyDesigner installation not found...marked for installation\n${NC}" - ISPYD=0 -fi - -# Install PyDesigner -if [ "$ISPYD" -eq "0" ]; then - sudo mkdir -p /tmp/PyDesigner - export PYDVER=$(curl -s https://api.github.com/repos/m-ama/PyDesigner/releases | jq -r '.[0] | .tag_name') - export URL=$(curl -s https://api.github.com/repos/m-ama/PyDesigner/releases | jq -r '.[0] | .tarball_url') - echo -e "${NC}Installing PyDesigner $PYDVER${NC}" - sudo wget -q -O - $URL | sudo tar -xzf - -C /tmp/PyDesigner --strip 1 - sudo pip3 install /tmp/PyDesigner - sudo rm -r /tmp/PyDesigner -else - : -fi - -# Install FSL -if [ "$ISFSL" -eq "0" ]; then - echo -e "${NC}Installing FSL${NC}" - curl https://fsl.fmrib.ox.ac.uk/fsldownloads/fslinstaller.py -o /tmp/fslinstaller.py - sudo echo $FSLINSTALL| python2 /tmp/fslinstaller.py -V 6.0.3 - sudo echo 'export FSLDIR=/usr/local/fsl' >> ~/.bashrc - sudo echo 'export FSLOUTPUTTYPE=NIFTI_GZ' >> ~/.bashrc - sudo echo 'export PATH=$PATH:$FSLDIR/bin' >> ~/.bashrc - sudo echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$FSLDIR' >> ~/.bashrc -else - : -fi - -# Install MRtrix3 -if [ "$ISMRTRIX" -eq "0" ]; then - echo -e "${NC}Installing MRTrix3${NC}" - sudo git clone https://github.com/MRtrix3/mrtrix3.git /usr/local/mrtrix3 - CXX=/usr/bin/clang++ - ARCH=native - ./usr/local/mrtrix3/configure && \ - ./usr/local/mrtrix3/build && \ - ./usr/local/mrtrix3/set_path - sudo echo 'export PATH=$PATH:/usr/local/mrtrix3/bin' >> ~/.bashrc -else - : -fi - -source ~/.bashrc -echo -e "${GREEN}Installation Complete" -echo -e "Please close this Terminal window and reopen a new window for" -echo -e "changes to take effect\n${NC}" diff --git a/poetry.lock b/poetry.lock index 4cf6f523..c016a46d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,20 +1,31 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.0 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] [[package]] name = "clarabel" -version = "0.6.0" +version = "0.9.0" description = "Clarabel Conic Interior Point Solver for Rust / Python" optional = false python-versions = ">=3.7" files = [ - {file = "clarabel-0.6.0-cp37-abi3-macosx_10_7_x86_64.whl", hash = "sha256:4f366de79b8bc66bef8dc170987840b672ccab9222e710c09536d78ef47f606d"}, - {file = "clarabel-0.6.0-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:edcebbfc14073cd32bfb664317fd2555716c96be8b2a54efdb2b728453582bea"}, - {file = "clarabel-0.6.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e737d2818b9ca10e92ccd3fa9ad1a805b039976016415a0c45adef3427d70792"}, - {file = "clarabel-0.6.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e0b1891d8e507eb0bfc7e0b981584c388b2ab28658056e600997dbbc23f1ab4"}, - {file = "clarabel-0.6.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9946d3b5db346421b6d839d868e7b1151b590f871344fe95113bfd55b5be2433"}, - {file = "clarabel-0.6.0-cp37-abi3-win32.whl", hash = "sha256:73ed408c975a8ea021c3d8262d5d023a18e1ac3f6bb59a37cd69a11dba8f86ed"}, - {file = "clarabel-0.6.0-cp37-abi3-win_amd64.whl", hash = "sha256:5a6be4df9fed98b6f73f034836def913a1ecd52e8b79ca230ddf7cd66ebcdee7"}, - {file = "clarabel-0.6.0.tar.gz", hash = "sha256:ef909a393e72981ca10b1d866d9cc7fb6295ece20ae035def764338894961184"}, + {file = "clarabel-0.9.0-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:702cc4666c0ccf893c936f9f1f55cbb3233ae2d5fa05f67b370ac3e7ec50f222"}, + {file = "clarabel-0.9.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8ea616757b460153ead375b3dd3ce763d46fc3717248077bbfa7b2c844b1775f"}, + {file = "clarabel-0.9.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b5ae16d7dd87aabf72260cf9590ba0d037c52d48555bcf3a86b1f0d9cf88dd4"}, + {file = "clarabel-0.9.0-cp37-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:85cb560a5c4cdfb079e3437e21f0b62b69ba766ae082aeb96ced0b5763214077"}, + {file = "clarabel-0.9.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0eaeb3fbb5a90b598700d5435c7f102592a1a79ee25df5a097e0af575838786b"}, + {file = "clarabel-0.9.0-cp37-abi3-win32.whl", hash = "sha256:759c2fa0ccc61ae1a02691c43753638a0ae793bf1de81c6f6763c346789a7e25"}, + {file = "clarabel-0.9.0-cp37-abi3-win_amd64.whl", hash = "sha256:d24e4ed1b686eb2fe2a1b6e77935af6ad62a2c044131e70801ec1d3ef3d33280"}, + {file = "clarabel-0.9.0.tar.gz", hash = "sha256:0d6d3fe8800be5b4b5d40a8e14bd492667b3e46cc5dbe37677ce5ed25f0719d4"}, ] [package.dependencies] @@ -34,189 +45,214 @@ files = [ [[package]] name = "contourpy" -version = "1.1.0" +version = "1.3.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"}, - {file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, - {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, - {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, - {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, - {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, - {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, - {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, - {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, - {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"}, - {file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"}, + {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, + {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595"}, + {file = "contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697"}, + {file = "contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f"}, + {file = "contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375"}, + {file = "contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d"}, + {file = "contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e"}, + {file = "contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1"}, + {file = "contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82"}, + {file = "contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53"}, + {file = "contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699"}, ] [package.dependencies] -numpy = ">=1.16" +numpy = ">=1.23" [package.extras] bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "wurlitzer"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] [[package]] -name = "contourpy" -version = "1.1.1" -description = "Python library for calculating contours of 2D quadrilateral grids" +name = "coverage" +version = "7.6.10" +description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"}, - {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"}, - {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"}, - {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"}, - {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"}, - {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"}, - {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"}, - {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"}, - {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"}, - {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"}, - {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"}, - {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"}, - {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"}, - {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"}, - {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"}, - {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"}, - {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"}, - {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"}, - {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"}, - {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"}, - {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"}, - {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"}, - {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"}, - {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"}, - {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"}, - {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"}, - {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"}, - {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"}, - {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"}, - {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"}, - {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"}, - {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"}, + {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, + {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, + {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, + {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, + {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, + {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, + {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, + {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, + {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, + {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, + {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, + {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, + {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, + {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, + {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, + {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, ] -[package.dependencies] -numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""} - [package.extras] -bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"] -test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "wurlitzer"] +toml = ["tomli"] [[package]] name = "cvxpy" -version = "1.4.1" +version = "1.6.0" description = "A domain-specific language for modeling convex optimization problems in Python." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "cvxpy-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:03588055b660c043848f5281fe24dbd21f005b34bd8bd3b56906d8ad457c14ae"}, - {file = "cvxpy-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:315609ff96adeda4970471b349bc19d44ff4043e15630cf5ac70c029658fe8fc"}, - {file = "cvxpy-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55e08ffb973d62b3fabc675ad464cb6013ea5ce69799f330b33a084a2e580d8d"}, - {file = "cvxpy-1.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f1482558b785f2db51c76b9c6e91cc85dbd146675b126a799e7d7aab5b15354"}, - {file = "cvxpy-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:2f84687d15d11f9b49ca902f20103a2076efd47773c399cace71237ef53cdadc"}, - {file = "cvxpy-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d6bfbd535fdaabc5fa55f28de7a1d40f3a803a27fe3fec86e90700fa159a3afc"}, - {file = "cvxpy-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:71a95aaccf22431fd25a63bcb12d583e1b0baeaeb4fafa3e25857cec03b9e2f3"}, - {file = "cvxpy-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bae3bf31e4eb6ed6407f78c6bc3c7bc4b4145cdbbb9ba8c61c3fc541d7067"}, - {file = "cvxpy-1.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41cfaecf86f85162ca53c7be7377b4143e316204fb9b6a7df8b7a08c826e3806"}, - {file = "cvxpy-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:edf66010e49b64d3f2dd1a7abde8fa3e615ce7a2b3eb185ab744b0beb3a6adb9"}, - {file = "cvxpy-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6b0f17dca85b2a410e73f5d84b28f35f57a20cfec1b0adc9b16f0f8aabff9961"}, - {file = "cvxpy-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9318c4e679b3db470e76e7f23cce362b038bd2d68c4a7326a7c21577ddbdc542"}, - {file = "cvxpy-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a46ef722c8d1590875e86360d5781703dfcbd08be73eb98a2fc91a280870064"}, - {file = "cvxpy-1.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57593a852c563ce77bdb075a3e75f23d36d4b3162ebf3199b54cc7fe75088ef2"}, - {file = "cvxpy-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:db89b55025514bad821b1f1781bed373cbb6aa22fe84420431efd510dbe7f858"}, - {file = "cvxpy-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:372c0825cc6e6bb03ecc550d83718761a1bbdbbb48010fec6f9718581ebd45b5"}, - {file = "cvxpy-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:163caffd7f7f27b6cb151f4ccff283068e063c3673158793048761690cbe4bbe"}, - {file = "cvxpy-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f24067c54979b09910aea0a03256247121d8a8169538facf087c1923e9e2701a"}, - {file = "cvxpy-1.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a3ec054279880a9ebf5fd9d2ac4109acf944b8c45ea8b24e461680e34f3d7b5"}, - {file = "cvxpy-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:d220a7ee55907da9b55b98e5238d03735118d03b82855ba87b872cb2e6977367"}, - {file = "cvxpy-1.4.1.tar.gz", hash = "sha256:7a9ef34e3c57ff8c844d86f0a3834fb5575af19233947639de0ba577c6122e3e"}, + {file = "cvxpy-1.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:45fa557789ff5d9ecdf88dee15c47dbd2f79fa47aa4d71e939126ad654e43484"}, + {file = "cvxpy-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aaff709f5a12a5984b33303a0db5c129aeeba39c98001b630e6943d0cd5a53ed"}, + {file = "cvxpy-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:376e43113f19c2e448b5a1fc06e276eae0952e398c6b76092b2fd21c8e14333f"}, + {file = "cvxpy-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32bbc9ad7c4423a68e8ec0ac7b59187937d0472e9a331e84c811c89c24799512"}, + {file = "cvxpy-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe295d5eff0f7adab80fca54e2796da878827432f4f97f5d87e47208d52e0aab"}, + {file = "cvxpy-1.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:99f3f72d84b6424dcbac582f9d50853ab0b473ef63087f1afefd0ddebd94999f"}, + {file = "cvxpy-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5f8c2535541baca557a170a90fad5722f413f9898d3b6111f5f0d46707009b02"}, + {file = "cvxpy-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96de6ec5d2cb7ca2c2f767d8a8485ef9c7fb0269f5668d52210c8d7c32dda610"}, + {file = "cvxpy-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccc3fc4a54126e90c858eee6d2d729afe954d9fab09d23ec92551728ce1e490c"}, + {file = "cvxpy-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:94da5c6897db0718376153ac51a40d6cd6e33b4cc033d99783c506db794caeca"}, + {file = "cvxpy-1.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3ad0a0928dbd051d3e3b34bf76b078ee3e3b3b3418a86e406c048f9c06196ffa"}, + {file = "cvxpy-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bc013ce8f868c2c25917a79c33e78ca6da7e9f4a498a35c3172a57a5d2626851"}, + {file = "cvxpy-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a4305e85cc4c916a560818f03fe61521492c7cd4d43783e9e8713ed9dd6854d"}, + {file = "cvxpy-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12067d6a540037c0bf2d936961b84482002a231f37a994b5c9adff71360ba7a2"}, + {file = "cvxpy-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca12f4045e6118a296e2fdbc451d4fa5f4c3bb1f4e8a770e5065b070144b9342"}, + {file = "cvxpy-1.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1f0fcf10d3d85e0e4828197348426ca49403c637cc7f19d68a2a2bd0ecf08b7e"}, + {file = "cvxpy-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52412e4af1137ce8fb4ae927b2cffb00d71ece2ace1c9fa784827a3672b22fff"}, + {file = "cvxpy-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cee9e376a45b9b0d7f20ec4ef380102cb960d496e074f49e596a0415c01dc00"}, + {file = "cvxpy-1.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6df39b5b5d0400b2edacdf784f42459237e956ba4a844d7ee33acc6af2a91709"}, + {file = "cvxpy-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:d4a368defabbe07188c061865851075a38632aadbdc09b587b86fdbea215b79e"}, + {file = "cvxpy-1.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6be5987555efcedce8f3cf52a2c56204927b370fb9bd2be81b3126c68fc5130c"}, + {file = "cvxpy-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2f1ca20b753eb96e2e2d410d7735191cddf7f9a81944161e7f203ecf966166c4"}, + {file = "cvxpy-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed19c2ee4d874241217a5205af0b002dfe4f60f4a193518579f71260c1ef3343"}, + {file = "cvxpy-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8b83be26ac70f8ce961386389e7f56a3c1a18bb524fae38b10b3041348810a6"}, + {file = "cvxpy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:1ce23246463a61478190ba5c5b6e5c22d52b06afd1875d28214925a49abec1ad"}, + {file = "cvxpy-1.6.0.tar.gz", hash = "sha256:679a9531877dfe0e2defabe106bc62a3e7ea094a7fcfcb797e121127ff8ff39a"}, ] [package.dependencies] clarabel = ">=0.5.0" -ecos = ">=2" -numpy = ">=1.15" +numpy = ">=1.20" osqp = ">=0.6.2" -pybind11 = "*" scipy = ">=1.1.0" -scs = ">=3.0" +scs = ">=3.2.4.post1" [package.extras] cbc = ["cylp (>=0.91.5)"] -clarabel = ["clarabel"] cvxopt = ["cvxopt"] +daqp = ["daqp"] diffcp = ["diffcp"] -glop = ["ortools (>=9.5,<9.8)"] +doc = ["sphinx", "sphinx-design", "sphinx-immaterial (>=0.11.7)", "sphinx-inline-tabs", "sphinxcontrib.jquery"] +ecos = ["ecos"] +ecos-bb = ["ecos"] +glop = ["ortools (>=9.7,<9.10)"] glpk = ["cvxopt"] glpk-mi = ["cvxopt"] gurobi = ["gurobipy"] -highs = ["scipy (>=1.6.1)"] +highs = ["highspy"] mosek = ["Mosek"] -pdlp = ["ortools (>=9.5,<9.8)"] +pdlp = ["ortools (>=9.7,<9.10)"] piqp = ["piqp"] proxqp = ["proxsuite"] scip = ["PySCIPOpt"] scipy = ["scipy"] scs = ["setuptools (>65.5.1)"] +testing = ["hypothesis", "pytest"] xpress = ["xpress"] [[package]] @@ -234,190 +270,212 @@ files = [ docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] tests = ["pytest", "pytest-cov", "pytest-xdist"] +[[package]] +name = "deepdiff" +version = "8.1.1" +description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other." +optional = false +python-versions = ">=3.8" +files = [ + {file = "deepdiff-8.1.1-py3-none-any.whl", hash = "sha256:b0231fa3afb0f7184e82535f2b4a36636442ed21e94a0cf3aaa7982157e7ebca"}, + {file = "deepdiff-8.1.1.tar.gz", hash = "sha256:dd7bc7d5c8b51b5b90f01b0e2fe23c801fd8b4c6a7ee7e31c5a3c3663fcc7ceb"}, +] + +[package.dependencies] +orderly-set = ">=5.2.3,<6" + +[package.extras] +cli = ["click (==8.1.7)", "pyyaml (==6.0.2)"] +optimize = ["orjson"] + [[package]] name = "dill" -version = "0.3.7" +version = "0.3.9" description = "serialize all of Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, - {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, + {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, + {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, ] [package.extras] graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "dipy" -version = "1.7.0" -description = "Diffusion MRI utilities in python" +version = "1.10.0" +description = "Diffusion MRI Imaging in Python" optional = false -python-versions = ">= 3.6" +python-versions = ">=3.9" files = [ - {file = "dipy-1.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:34f1c6323f4e884dcd0e3f1dd51666d9059f1abb146fd78105aaf4c33f45184c"}, - {file = "dipy-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8ea49b11abf423fb8abcd28dc8549467e4ea32a297db1c89301cfb49c57eb99"}, - {file = "dipy-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77cf294ac16fe548cbbca4aaea2a9c993e1d2e4230416926973d50aebae91b43"}, - {file = "dipy-1.7.0-cp310-none-win_amd64.whl", hash = "sha256:c5df095b3bf41d8bb8568efe3b6a83ec87fe4bbc6bdc5895d0160a1688961e21"}, - {file = "dipy-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cce5db9595e4910fe5818f50d1ef45f29239a47ddb06e46c3c43559abe30aadb"}, - {file = "dipy-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:83fd19a0347d52590ed45d5fa4ca0e6723a6c96a455c46f3696dc4feba131f53"}, - {file = "dipy-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ff4cc129fed6f30d11f925350dc79edda6eda7815b04a59b486415746faa6a9"}, - {file = "dipy-1.7.0-cp311-none-win_amd64.whl", hash = "sha256:53cac93c25e0ee5c3ecbbc17a1fcef6607564098ae1eedfbd5f548dbdde74bdd"}, - {file = "dipy-1.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c4b7f8acc389065ee62c16d5087a625de0545fc1fcdbd28866749b7195e3f761"}, - {file = "dipy-1.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d21c069950ea7319e9580c5513c84232f5d06c68b4c047ab4bd8a11b2bcf51b5"}, - {file = "dipy-1.7.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ffe4638780d2224871c139a74b83ab4dfb443705e405f8dbf1ee5956a5d413aa"}, - {file = "dipy-1.7.0-cp38-none-win_amd64.whl", hash = "sha256:d70498b8950a75f250059362244a63e4c597f9ab70b5d8ad1537d311b92b7303"}, - {file = "dipy-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e333506d3eb29c8474fa2431928684cc04a79531d23647e7e9906c0753817ea9"}, - {file = "dipy-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2dff5b1b19d3df497ff2252cb25a2610390068d1e6cd1e822719732d8701d7f"}, - {file = "dipy-1.7.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67b55e6f379396c55fbe9dde9e888b9e60543285839110e0f096030bdb5d0968"}, - {file = "dipy-1.7.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21bd7b14048f80ef7b74cd52a6ffeaf2b8b7337f5cf4e88e95af9827cfea7f96"}, - {file = "dipy-1.7.0-cp39-none-win_amd64.whl", hash = "sha256:a6e0b216b91e3f98dbb2140a8668daff9d0b469630eeaab3482975034d791aed"}, - {file = "dipy-1.7.0.tar.gz", hash = "sha256:59bb647128aae7793215c813bb8ea35dae260ac9f0d938c724064f0af5a05cc3"}, + {file = "dipy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4c9ba9204f85fcd75277cbdca3dab3d7ed299d5e4c9a5b4d1eda0f76395c426"}, + {file = "dipy-1.10.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:85abe515c0baf6f1feb8d6452e4fe28915bc5d909dfb8625b3669fc0b494d816"}, + {file = "dipy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97594288b1118b9cb0598ecf1bd5a3304a327c0c7b39a7cf60e1837e6b10d602"}, + {file = "dipy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc654c86d662ec4005d41f3f763502d59da64854135f5a4c56be1f68c7cd761"}, + {file = "dipy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:a1b8494d21b02df6ae92fdff3c01dd07b0161b39d371dc31f3b4f81190d843ea"}, + {file = "dipy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4a8e0fc3cb039d3924aab960d5947942f7cd72077cf202bb85f2fd7b0118fb"}, + {file = "dipy-1.10.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:8b9108806270de7ea12ce8d28a975a2d63cf62d60843f102cdfc4baddcf44af1"}, + {file = "dipy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0545345b704b46ab4bc53da39632d4fe024d6d830ef20f5bcc0d58fd068188e"}, + {file = "dipy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:273fbed45693398627083376a7249f4c03bed86230a6e8d187626728cbb4b005"}, + {file = "dipy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:d198a9184e85eb2aa870eb10c02240fa5bc39c72eae8c305b171b00ff747e72a"}, + {file = "dipy-1.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bea75f2c564e0d667e61e2ea0bc5e67a91f9058bcdc59f2a6392801e7babb145"}, + {file = "dipy-1.10.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:57c13806ee63d4cf9f253e813401e69b4044d878a48141e2834aa07c31fe9a0a"}, + {file = "dipy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:777530dff6ab26c84792a699b08ab91f07d461d99fd2cf1949847b5918defd3b"}, + {file = "dipy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734baf9bbeb2ae6bc09346a3cc042fee7d8f2f992f3dcf9cd1853606cda5546a"}, + {file = "dipy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:fcd2df5c1000d1c24123f29ea24d83029600ddb1ce2e512f4486c7c52f85db33"}, + {file = "dipy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7507b739ca08163212b626fcad3d4599ccf7df3039cc8375396859218133b4b3"}, + {file = "dipy-1.10.0-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:0719e28970ab907d8682475103a43a1e15c8206d52f3ebf55dcd90c859252b71"}, + {file = "dipy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6aa0885fc6432576a01f0c6832da974e813df1a64988e47bdf6d47cc0e8325cf"}, + {file = "dipy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a1f2c4f28a69738b3853ab042656a87c8b50e9194be5a7deca50fa73f545e1f"}, + {file = "dipy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cf58a1d995cf9f8228425836c00b0002779dc21c97121792bad0b7c6fb44e82"}, + {file = "dipy-1.10.0.tar.gz", hash = "sha256:b9c8559c1ceec118bd8ebafa1c654582fc13d64c66266ca4d15a2df2367be870"}, ] [package.dependencies] -h5py = ">=2.8.0" +h5py = ">=3.1.0" nibabel = ">=3.0.0" -scipy = ">=1.1" +numpy = ">=1.22.4" +packaging = ">=21" +scipy = ">=1.8" tqdm = ">=4.30.0" +trx-python = ">=0.2.9" [package.extras] -all = ["boto3", "coverage", "coveralls", "cvxpy", "cython", "fury (>=0.8.0)", "h5py", "h5py (<3.0.0)", "matplotlib", "nibabel (>=3.0.0)", "numpy", "pandas", "pytest", "scikit-image", "scikit-learn", "scipy", "statsmodels", "tables", "tensorflowtensorflow-addons"] -doc = ["boto3", "cvxpy", "cython", "fury (>=0.8.0)", "h5py", "h5py (<3.0.0)", "matplotlib", "nibabel (>=3.0.0)", "numpy", "pandas", "scikit-image", "scikit-learn", "scipy", "statsmodels", "tables"] -ml = ["pandas", "scikit-learn", "statsmodels", "tables", "tensorflowtensorflow-addons"] -test = ["coverage", "coveralls", "pytest"] -viz = ["fury (>=0.8.0)", "matplotlib"] +all = ["dipy[dev,doc,extra,ml,style,test,viz]"] +dev = ["Cython (>=0.29.35)", "build", "meson-python (>=0.13)", "ninja", "numpy (>=1.22.4)", "packaging (>=21)", "setuptools (>=69.5,<70.0)", "spin (>=0.5)", "wheel"] +doc = ["Jinja2", "grg-sphinx-theme (>=0.4.0)", "numpydoc", "sphinx (>=7.2.6)", "sphinx-gallery (>=0.10.0)", "sphinx_design", "sphinxcontrib-bibtex", "texext", "tomli", "tomli (>=2.0.1)"] +extra = ["boto3", "cvxpy", "dipy[ml,viz]", "scikit-image"] +ml = ["pandas", "scikit_learn", "statsmodels (>=0.14.0)", "tables", "tensorflow", "torch"] +style = ["pre-commit", "ruff"] +test = ["asv", "codecov", "coverage", "coveralls", "pytest"] +viz = ["fury (>=0.10.0)", "matplotlib"] [[package]] -name = "ecos" -version = "2.0.12" -description = "This is the Python package for ECOS: Embedded Cone Solver. See Github page for more information." +name = "execnet" +version = "2.1.1" +description = "execnet: rapid multi-Python deployment" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "ecos-2.0.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:835298a299c88c207b3402fba60ad9b5688b59bbbf2ac34a46de5b37165d773a"}, - {file = "ecos-2.0.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608bc822ee8e070927ab3519169b13a1a0fe88f3d562212d6b5dbb1039776360"}, - {file = "ecos-2.0.12-cp310-cp310-win_amd64.whl", hash = "sha256:5184a9d8521ad1af90ffcd9902a6fa75c7bc473f37d30d86f97beda1033dfca2"}, - {file = "ecos-2.0.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eba07599084724eedc20b2862d5580eebebb09609f4740baadc78401cb99827c"}, - {file = "ecos-2.0.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4979dc2d1cb6667e371a45a61887068505c1305437eef104ed6ef16f4b6aa0e3"}, - {file = "ecos-2.0.12-cp311-cp311-win_amd64.whl", hash = "sha256:da8fbbca3feb83a9e27075d29b3765417d0c80af8ea83cbdc4a558cae7b564af"}, - {file = "ecos-2.0.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f70e4547966f530fd7715756f7a65d5b9b90b312b9d37f243ef9356c05e7d74c"}, - {file = "ecos-2.0.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:617be25d74222849622b0f82b94a11abcf1fae78ccaf69977b328321ee6ffa0b"}, - {file = "ecos-2.0.12-cp37-cp37m-win_amd64.whl", hash = "sha256:29d00164eaea66ed54697a3b361c575284a8bca54f2623381a0635806c7303a7"}, - {file = "ecos-2.0.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4e86671397d1d2cd7cccff8a9c45be0541b0c60af8b92a0ff3581c9ed869db67"}, - {file = "ecos-2.0.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:858a4dd3177bdc8cc6e362031732f5177b62138a1e4ef91c0dc3c6bd7d2d1248"}, - {file = "ecos-2.0.12-cp38-cp38-win_amd64.whl", hash = "sha256:528b02f53835bd1baeb2e23f8153b8d6cc2b3704e1768be6a1a972f542241670"}, - {file = "ecos-2.0.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e42bd4c19af6e04f76ccc85d941b1f1adc7faeee4d06d482395a6beb7bec895"}, - {file = "ecos-2.0.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6def54336a15b5a49bc3bfcaa36035e8557cae8a4853b17ca84f5a29c93bcaea"}, - {file = "ecos-2.0.12-cp39-cp39-win_amd64.whl", hash = "sha256:7af08941552fce108bd80145cdb6be7fa74477a20bacdac170800442cc7027d4"}, - {file = "ecos-2.0.12.tar.gz", hash = "sha256:f48816d73b87ae325556ea537b7c8743187311403c80e3832035224156337c4e"}, + {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, + {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, ] -[package.dependencies] -numpy = ">=1.6" -scipy = ">=0.9" +[package.extras] +testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "fonttools" -version = "4.43.1" +version = "4.55.6" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.43.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf11e2cca121df35e295bd34b309046c29476ee739753bc6bc9d5050de319273"}, - {file = "fonttools-4.43.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10b3922875ffcba636674f406f9ab9a559564fdbaa253d66222019d569db869c"}, - {file = "fonttools-4.43.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f727c3e3d08fd25352ed76cc3cb61486f8ed3f46109edf39e5a60fc9fecf6ca"}, - {file = "fonttools-4.43.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad0b3f6342cfa14be996971ea2b28b125ad681c6277c4cd0fbdb50340220dfb6"}, - {file = "fonttools-4.43.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b7ad05b2beeebafb86aa01982e9768d61c2232f16470f9d0d8e385798e37184"}, - {file = "fonttools-4.43.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c54466f642d2116686268c3e5f35ebb10e49b0d48d41a847f0e171c785f7ac7"}, - {file = "fonttools-4.43.1-cp310-cp310-win32.whl", hash = "sha256:1e09da7e8519e336239fbd375156488a4c4945f11c4c5792ee086dd84f784d02"}, - {file = "fonttools-4.43.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cf9e974f63b1080b1d2686180fc1fbfd3bfcfa3e1128695b5de337eb9075cef"}, - {file = "fonttools-4.43.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5db46659cfe4e321158de74c6f71617e65dc92e54980086823a207f1c1c0e24b"}, - {file = "fonttools-4.43.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1952c89a45caceedf2ab2506d9a95756e12b235c7182a7a0fff4f5e52227204f"}, - {file = "fonttools-4.43.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c36da88422e0270fbc7fd959dc9749d31a958506c1d000e16703c2fce43e3d0"}, - {file = "fonttools-4.43.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bbbf8174501285049e64d174e29f9578495e1b3b16c07c31910d55ad57683d8"}, - {file = "fonttools-4.43.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d4071bd1c183b8d0b368cc9ed3c07a0f6eb1bdfc4941c4c024c49a35429ac7cd"}, - {file = "fonttools-4.43.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d21099b411e2006d3c3e1f9aaf339e12037dbf7bf9337faf0e93ec915991f43b"}, - {file = "fonttools-4.43.1-cp311-cp311-win32.whl", hash = "sha256:b84a1c00f832feb9d0585ca8432fba104c819e42ff685fcce83537e2e7e91204"}, - {file = "fonttools-4.43.1-cp311-cp311-win_amd64.whl", hash = "sha256:9a2f0aa6ca7c9bc1058a9d0b35483d4216e0c1bbe3962bc62ce112749954c7b8"}, - {file = "fonttools-4.43.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4d9740e3783c748521e77d3c397dc0662062c88fd93600a3c2087d3d627cd5e5"}, - {file = "fonttools-4.43.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:884ef38a5a2fd47b0c1291647b15f4e88b9de5338ffa24ee52c77d52b4dfd09c"}, - {file = "fonttools-4.43.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9648518ef687ba818db3fcc5d9aae27a369253ac09a81ed25c3867e8657a0680"}, - {file = "fonttools-4.43.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95e974d70238fc2be5f444fa91f6347191d0e914d5d8ae002c9aa189572cc215"}, - {file = "fonttools-4.43.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:34f713dad41aa21c637b4e04fe507c36b986a40f7179dcc86402237e2d39dcd3"}, - {file = "fonttools-4.43.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:360201d46165fc0753229afe785900bc9596ee6974833124f4e5e9f98d0f592b"}, - {file = "fonttools-4.43.1-cp312-cp312-win32.whl", hash = "sha256:bb6d2f8ef81ea076877d76acfb6f9534a9c5f31dc94ba70ad001267ac3a8e56f"}, - {file = "fonttools-4.43.1-cp312-cp312-win_amd64.whl", hash = "sha256:25d3da8a01442cbc1106490eddb6d31d7dffb38c1edbfabbcc8db371b3386d72"}, - {file = "fonttools-4.43.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8da417431bfc9885a505e86ba706f03f598c85f5a9c54f67d63e84b9948ce590"}, - {file = "fonttools-4.43.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:51669b60ee2a4ad6c7fc17539a43ffffc8ef69fd5dbed186a38a79c0ac1f5db7"}, - {file = "fonttools-4.43.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748015d6f28f704e7d95cd3c808b483c5fb87fd3eefe172a9da54746ad56bfb6"}, - {file = "fonttools-4.43.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a58eb5e736d7cf198eee94844b81c9573102ae5989ebcaa1d1a37acd04b33d"}, - {file = "fonttools-4.43.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6bb5ea9076e0e39defa2c325fc086593ae582088e91c0746bee7a5a197be3da0"}, - {file = "fonttools-4.43.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5f37e31291bf99a63328668bb83b0669f2688f329c4c0d80643acee6e63cd933"}, - {file = "fonttools-4.43.1-cp38-cp38-win32.whl", hash = "sha256:9c60ecfa62839f7184f741d0509b5c039d391c3aff71dc5bc57b87cc305cff3b"}, - {file = "fonttools-4.43.1-cp38-cp38-win_amd64.whl", hash = "sha256:fe9b1ec799b6086460a7480e0f55c447b1aca0a4eecc53e444f639e967348896"}, - {file = "fonttools-4.43.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13a9a185259ed144def3682f74fdcf6596f2294e56fe62dfd2be736674500dba"}, - {file = "fonttools-4.43.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2adca1b46d69dce4a37eecc096fe01a65d81a2f5c13b25ad54d5430ae430b13"}, - {file = "fonttools-4.43.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18eefac1b247049a3a44bcd6e8c8fd8b97f3cad6f728173b5d81dced12d6c477"}, - {file = "fonttools-4.43.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2062542a7565091cea4cc14dd99feff473268b5b8afdee564f7067dd9fff5860"}, - {file = "fonttools-4.43.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18a2477c62a728f4d6e88c45ee9ee0229405e7267d7d79ce1f5ce0f3e9f8ab86"}, - {file = "fonttools-4.43.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a7a06f8d95b7496e53af80d974d63516ffb263a468e614978f3899a6df52d4b3"}, - {file = "fonttools-4.43.1-cp39-cp39-win32.whl", hash = "sha256:10003ebd81fec0192c889e63a9c8c63f88c7d72ae0460b7ba0cd2a1db246e5ad"}, - {file = "fonttools-4.43.1-cp39-cp39-win_amd64.whl", hash = "sha256:e117a92b07407a061cde48158c03587ab97e74e7d73cb65e6aadb17af191162a"}, - {file = "fonttools-4.43.1-py3-none-any.whl", hash = "sha256:4f88cae635bfe4bbbdc29d479a297bb525a94889184bb69fa9560c2d4834ddb9"}, - {file = "fonttools-4.43.1.tar.gz", hash = "sha256:17dbc2eeafb38d5d0e865dcce16e313c58265a6d2d20081c435f84dc5a9d8212"}, + {file = "fonttools-4.55.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:57d55fc965e5dd20c8a60d880e0f43bafb506be87af0b650bdc42591e41e0d0d"}, + {file = "fonttools-4.55.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:127999618afe3a2490fad54bab0650c5fbeab1f8109bdc0205f6ad34306deb8b"}, + {file = "fonttools-4.55.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3226d40cb92787e09dcc3730f54b3779dfe56bdfea624e263685ba17a6faac4"}, + {file = "fonttools-4.55.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e82772f70b84e17aa36e9f236feb2a4f73cb686ec1e162557a36cf759d1acd58"}, + {file = "fonttools-4.55.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a632f85bd73e002b771bcbcdc512038fa5d2e09bb18c03a22fb8d400ea492ddf"}, + {file = "fonttools-4.55.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:791e0cf862cdd3a252df395f1bb5f65e3a760f1da3c7ce184d0f7998c266614d"}, + {file = "fonttools-4.55.6-cp310-cp310-win32.whl", hash = "sha256:94f7f2c5c5f3a6422e954ecb6d37cc363e27d6f94050a7ed3f79f12157af6bb2"}, + {file = "fonttools-4.55.6-cp310-cp310-win_amd64.whl", hash = "sha256:2d15e02b93a46982a8513a208e8f89148bca8297640527365625be56151687d0"}, + {file = "fonttools-4.55.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0879f99eabbf2171dfadd9c8c75cec2b7b3aa9cd1f3955dd799c69d60a5189ef"}, + {file = "fonttools-4.55.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d77d83ca77a4c3156a2f4cbc7f09f5a8503795da658fa255b987ad433a191266"}, + {file = "fonttools-4.55.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07478132407736ee5e54f9f534e73923ae28e9bb6dba17764a35e3caf7d7fea3"}, + {file = "fonttools-4.55.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1c06fbc2fd76b9bab03eddfd8aa9fb7c0981d314d780e763c80aa76be1c9982"}, + {file = "fonttools-4.55.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:09ed667c4753e1270994e5398cce8703e6423c41702a55b08f843b2907b1be65"}, + {file = "fonttools-4.55.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0ee6ed68af8d57764d69da099db163aaf37d62ba246cfd42f27590e3e6724b55"}, + {file = "fonttools-4.55.6-cp311-cp311-win32.whl", hash = "sha256:9f99e7876518b2d059a9cc67c506168aebf9c71ac8d81006d75e684222f291d2"}, + {file = "fonttools-4.55.6-cp311-cp311-win_amd64.whl", hash = "sha256:3aa6c684007723895aade9b2fe76d07008c9dc90fd1ef6c310b3ca9c8566729f"}, + {file = "fonttools-4.55.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:51120695ee13001533e50abd40eec32c01b9c6f44c5567db38a7acd3eedcd19d"}, + {file = "fonttools-4.55.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:76ac5a595f86892b49ba86ba2e46185adc76328ce6eff0583b30e5c3ab02a914"}, + {file = "fonttools-4.55.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7535a5ac386e549e2b00b34c59b53f805e2423000676723b6867df3c10df04"}, + {file = "fonttools-4.55.6-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c42009177d3690894288082d5e3dac6bdc9f5d38e25054535e341a19cf5183a4"}, + {file = "fonttools-4.55.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:88f74bc19dbab3dee6a00ca67ca54bb4793e44ff0c4dcf1fa61d68651ae3fa0a"}, + {file = "fonttools-4.55.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bc6f58976ffc19fe1630119a2736153b66151d023c6f30065f31c9e8baed1303"}, + {file = "fonttools-4.55.6-cp312-cp312-win32.whl", hash = "sha256:4259159715142c10b0f4d121ef14da3fa6eafc719289d9efa4b20c15e57fef82"}, + {file = "fonttools-4.55.6-cp312-cp312-win_amd64.whl", hash = "sha256:d91fce2e9a87cc0db9f8042281b6458f99854df810cfefab2baf6ab2acc0f4b4"}, + {file = "fonttools-4.55.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9394813cc73fa22c5413ec1c5745c0a16f68dd2b890f7c55eaba5cb40187ed55"}, + {file = "fonttools-4.55.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ac817559a7d245454231374e194b4e457dca6fefa5b52af466ab0516e9a09c6e"}, + {file = "fonttools-4.55.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34405f1314f1e88b1877a9f9e497fe45190e8c4b29a6c7cd85ed7f666a57d702"}, + {file = "fonttools-4.55.6-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af5469bbf555047efd8752d85faeb2a3510916ddc6c50dd6fb168edf1677408f"}, + {file = "fonttools-4.55.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8a8004a19195eb8a8a13de69e26ec9ed60a5bc1fde336d0021b47995b368fac9"}, + {file = "fonttools-4.55.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:73a4aaf672e7b2265c6354a69cbbadf71b7f3133ecb74e98fec4c67c366698a3"}, + {file = "fonttools-4.55.6-cp313-cp313-win32.whl", hash = "sha256:73bdff9c44d36c57ea84766afc20517eda0c9bb1571b4a09876646264bd5ff3b"}, + {file = "fonttools-4.55.6-cp313-cp313-win_amd64.whl", hash = "sha256:132fa22be8a99784de8cb171b30425a581f04a40ec1c05183777fb2b1fe3bac9"}, + {file = "fonttools-4.55.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8398928acb8a57073606feb9a310682d4a7e2d7536f2c61719261f4c0974504c"}, + {file = "fonttools-4.55.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2f78ebfdef578d4db7c44bc207ac5f9a5c1f22c9db606460dcc8ad48e183338"}, + {file = "fonttools-4.55.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fb545f3a4ebada908fa717ec732277de18dd10161f03ee3b3144d34477804de"}, + {file = "fonttools-4.55.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1062daa0390b32bfd062ded2b450db9e9cf10e5a9919561c13f535e818b1952b"}, + {file = "fonttools-4.55.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:860ab9ed3f9e088d3bdb77b9074e656635f173b039e77d550b603cba052a0dca"}, + {file = "fonttools-4.55.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:03701e7de70c71eb5965cb200986b0c11dfa3cf8e843e4f517ee30a0f43f0a25"}, + {file = "fonttools-4.55.6-cp38-cp38-win32.whl", hash = "sha256:f66561fbfb75785d06513b8025a50be37bf970c3c413e87581cc6eff10bc78f1"}, + {file = "fonttools-4.55.6-cp38-cp38-win_amd64.whl", hash = "sha256:edf159a8f1e48dc4683a715b36da76dd2f82954b16bfe11a215d58e963d31cfc"}, + {file = "fonttools-4.55.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61aa1997c520bee4cde14ffabe81efc4708c500c8c81dce37831551627a2be56"}, + {file = "fonttools-4.55.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7954ea66a8d835f279c17d8474597a001ddd65a2c1ca97e223041bfbbe11f65e"}, + {file = "fonttools-4.55.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f4e88f15f5ed4d2e4bdfcc98540bb3987ae25904f9be304be9a604e7a7050a1"}, + {file = "fonttools-4.55.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d419483a6295e83cabddb56f1c7b7bfdc8169de2fcb5c68d622bd11140355f9"}, + {file = "fonttools-4.55.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:acc74884afddc2656bffc50100945ff407574538c152931c402fccddc46f0abc"}, + {file = "fonttools-4.55.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a55489c7e9d5ea69690a2afad06723c3d0c48c6d276a25391ea97cb31a16b37c"}, + {file = "fonttools-4.55.6-cp39-cp39-win32.whl", hash = "sha256:8c9de8d16d02ecc8b65e3f3d2d1e3002be2c4a3f094d580faf76d7f768bd45fe"}, + {file = "fonttools-4.55.6-cp39-cp39-win_amd64.whl", hash = "sha256:471961af7a4b8461fac0c8ee044b4986e6fe3746d4c83a1aacbdd85b4eb53f93"}, + {file = "fonttools-4.55.6-py3-none-any.whl", hash = "sha256:d20ab5a78d0536c26628eaadba661e7ae2427b1e5c748a0a510a44d914e1b155"}, + {file = "fonttools-4.55.6.tar.gz", hash = "sha256:1beb4647a0df5ceaea48015656525eb8081af226fe96554089fd3b274d239ef0"}, ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "scipy"] -lxml = ["lxml (>=4.0,<5)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.0.0)"] +unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] name = "h5py" -version = "3.10.0" +version = "3.12.1" description = "Read and write HDF5 files from Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "h5py-3.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b963fb772964fc1d1563c57e4e2e874022ce11f75ddc6df1a626f42bd49ab99f"}, - {file = "h5py-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:012ab448590e3c4f5a8dd0f3533255bc57f80629bf7c5054cf4c87b30085063c"}, - {file = "h5py-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:781a24263c1270a62cd67be59f293e62b76acfcc207afa6384961762bb88ea03"}, - {file = "h5py-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f42e6c30698b520f0295d70157c4e202a9e402406f50dc08f5a7bc416b24e52d"}, - {file = "h5py-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:93dd840bd675787fc0b016f7a05fc6efe37312a08849d9dd4053fd0377b1357f"}, - {file = "h5py-3.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2381e98af081b6df7f6db300cd88f88e740649d77736e4b53db522d8874bf2dc"}, - {file = "h5py-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:667fe23ab33d5a8a6b77970b229e14ae3bb84e4ea3382cc08567a02e1499eedd"}, - {file = "h5py-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90286b79abd085e4e65e07c1bd7ee65a0f15818ea107f44b175d2dfe1a4674b7"}, - {file = "h5py-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c013d2e79c00f28ffd0cc24e68665ea03ae9069e167087b2adb5727d2736a52"}, - {file = "h5py-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:92273ce69ae4983dadb898fd4d3bea5eb90820df953b401282ee69ad648df684"}, - {file = "h5py-3.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c97d03f87f215e7759a354460fb4b0d0f27001450b18b23e556e7856a0b21c3"}, - {file = "h5py-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86df4c2de68257b8539a18646ceccdcf2c1ce6b1768ada16c8dcfb489eafae20"}, - {file = "h5py-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9ab36be991119a3ff32d0c7cbe5faf9b8d2375b5278b2aea64effbeba66039"}, - {file = "h5py-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2c8e4fda19eb769e9a678592e67eaec3a2f069f7570c82d2da909c077aa94339"}, - {file = "h5py-3.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:492305a074327e8d2513011fa9fffeb54ecb28a04ca4c4227d7e1e9616d35641"}, - {file = "h5py-3.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9450464b458cca2c86252b624279115dcaa7260a40d3cb1594bf2b410a2bd1a3"}, - {file = "h5py-3.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd6f6d1384a9f491732cee233b99cd4bfd6e838a8815cc86722f9d2ee64032af"}, - {file = "h5py-3.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3074ec45d3dc6e178c6f96834cf8108bf4a60ccb5ab044e16909580352010a97"}, - {file = "h5py-3.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:212bb997a91e6a895ce5e2f365ba764debeaef5d2dca5c6fb7098d66607adf99"}, - {file = "h5py-3.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5dfc65ac21fa2f630323c92453cadbe8d4f504726ec42f6a56cf80c2f90d6c52"}, - {file = "h5py-3.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d4682b94fd36ab217352be438abd44c8f357c5449b8995e63886b431d260f3d3"}, - {file = "h5py-3.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aece0e2e1ed2aab076c41802e50a0c3e5ef8816d60ece39107d68717d4559824"}, - {file = "h5py-3.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43a61b2c2ad65b1fabc28802d133eed34debcc2c8b420cb213d3d4ef4d3e2229"}, - {file = "h5py-3.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:ae2f0201c950059676455daf92700eeb57dcf5caaf71b9e1328e6e6593601770"}, - {file = "h5py-3.10.0.tar.gz", hash = "sha256:d93adc48ceeb33347eb24a634fb787efc7ae4644e6ea4ba733d099605045c049"}, + {file = "h5py-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f0f1a382cbf494679c07b4371f90c70391dedb027d517ac94fa2c05299dacda"}, + {file = "h5py-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cb65f619dfbdd15e662423e8d257780f9a66677eae5b4b3fc9dca70b5fd2d2a3"}, + {file = "h5py-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b15d8dbd912c97541312c0e07438864d27dbca857c5ad634de68110c6beb1c2"}, + {file = "h5py-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59685fe40d8c1fbbee088c88cd4da415a2f8bee5c270337dc5a1c4aa634e3307"}, + {file = "h5py-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:577d618d6b6dea3da07d13cc903ef9634cde5596b13e832476dd861aaf651f3e"}, + {file = "h5py-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccd9006d92232727d23f784795191bfd02294a4f2ba68708825cb1da39511a93"}, + {file = "h5py-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad8a76557880aed5234cfe7279805f4ab5ce16b17954606cca90d578d3e713ef"}, + {file = "h5py-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1473348139b885393125126258ae2d70753ef7e9cec8e7848434f385ae72069e"}, + {file = "h5py-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:018a4597f35092ae3fb28ee851fdc756d2b88c96336b8480e124ce1ac6fb9166"}, + {file = "h5py-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fdf95092d60e8130ba6ae0ef7a9bd4ade8edbe3569c13ebbaf39baefffc5ba4"}, + {file = "h5py-3.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06a903a4e4e9e3ebbc8b548959c3c2552ca2d70dac14fcfa650d9261c66939ed"}, + {file = "h5py-3.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b3b8f3b48717e46c6a790e3128d39c61ab595ae0a7237f06dfad6a3b51d5351"}, + {file = "h5py-3.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:050a4f2c9126054515169c49cb900949814987f0c7ae74c341b0c9f9b5056834"}, + {file = "h5py-3.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c4b41d1019322a5afc5082864dfd6359f8935ecd37c11ac0029be78c5d112c9"}, + {file = "h5py-3.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4d51919110a030913201422fb07987db4338eba5ec8c5a15d6fab8e03d443fc"}, + {file = "h5py-3.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:513171e90ed92236fc2ca363ce7a2fc6f2827375efcbb0cc7fbdd7fe11fecafc"}, + {file = "h5py-3.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:59400f88343b79655a242068a9c900001a34b63e3afb040bd7cdf717e440f653"}, + {file = "h5py-3.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e465aee0ec353949f0f46bf6c6f9790a2006af896cee7c178a8c3e5090aa32"}, + {file = "h5py-3.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba51c0c5e029bb5420a343586ff79d56e7455d496d18a30309616fdbeed1068f"}, + {file = "h5py-3.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:52ab036c6c97055b85b2a242cb540ff9590bacfda0c03dd0cf0661b311f522f8"}, + {file = "h5py-3.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2b8dd64f127d8b324f5d2cd1c0fd6f68af69084e9e47d27efeb9e28e685af3e"}, + {file = "h5py-3.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4532c7e97fbef3d029735db8b6f5bf01222d9ece41e309b20d63cfaae2fb5c4d"}, + {file = "h5py-3.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdf6d7936fa824acfa27305fe2d9f39968e539d831c5bae0e0d83ed521ad1ac"}, + {file = "h5py-3.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84342bffd1f82d4f036433e7039e241a243531a1d3acd7341b35ae58cdab05bf"}, + {file = "h5py-3.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:62be1fc0ef195891949b2c627ec06bc8e837ff62d5b911b6e42e38e0f20a897d"}, + {file = "h5py-3.12.1.tar.gz", hash = "sha256:326d70b53d31baa61f00b8aa5f95c2fcb9621a3ee8365d770c551a13dbbcbfdf"}, ] [package.dependencies] -numpy = ">=1.17.3" +numpy = ">=1.19.3" [[package]] name = "iniconfig" @@ -432,300 +490,321 @@ files = [ [[package]] name = "joblib" -version = "1.3.2" +version = "1.4.2" description = "Lightweight pipelining with Python functions" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, - {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, + {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, + {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, ] [[package]] name = "kiwisolver" -version = "1.4.5" +version = "1.4.8" description = "A fast implementation of the Cassowary constraint solver" optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" files = [ - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, - {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"}, + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b"}, + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e"}, + {file = "kiwisolver-1.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751"}, + {file = "kiwisolver-1.4.8-cp310-cp310-win_arm64.whl", hash = "sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67"}, + {file = "kiwisolver-1.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34"}, + {file = "kiwisolver-1.4.8-cp311-cp311-win_arm64.whl", hash = "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8"}, + {file = "kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50"}, + {file = "kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb"}, + {file = "kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2"}, + {file = "kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b"}, + {file = "kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e"}, ] [[package]] name = "matplotlib" -version = "3.8.0" +version = "3.10.0" description = "Python plotting package" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "matplotlib-3.8.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c4940bad88a932ddc69734274f6fb047207e008389489f2b6f77d9ca485f0e7a"}, - {file = "matplotlib-3.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a33bd3045c7452ca1fa65676d88ba940867880e13e2546abb143035fa9072a9d"}, - {file = "matplotlib-3.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ea6886e93401c22e534bbfd39201ce8931b75502895cfb115cbdbbe2d31f287"}, - {file = "matplotlib-3.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d670b9348e712ec176de225d425f150dc8e37b13010d85233c539b547da0be39"}, - {file = "matplotlib-3.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7b37b74f00c4cb6af908cb9a00779d97d294e89fd2145ad43f0cdc23f635760c"}, - {file = "matplotlib-3.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:0e723f5b96f3cd4aad99103dc93e9e3cdc4f18afdcc76951f4857b46f8e39d2d"}, - {file = "matplotlib-3.8.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5dc945a9cb2deb7d197ba23eb4c210e591d52d77bf0ba27c35fc82dec9fa78d4"}, - {file = "matplotlib-3.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8b5a1bf27d078453aa7b5b27f52580e16360d02df6d3dc9504f3d2ce11f6309"}, - {file = "matplotlib-3.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f25ffb6ad972cdffa7df8e5be4b1e3cadd2f8d43fc72085feb1518006178394"}, - {file = "matplotlib-3.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee482731c8c17d86d9ddb5194d38621f9b0f0d53c99006275a12523ab021732"}, - {file = "matplotlib-3.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:36eafe2128772195b373e1242df28d1b7ec6c04c15b090b8d9e335d55a323900"}, - {file = "matplotlib-3.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:061ee58facb3580cd2d046a6d227fb77e9295599c5ec6ad069f06b5821ad1cfc"}, - {file = "matplotlib-3.8.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3cc3776836d0f4f22654a7f2d2ec2004618d5cf86b7185318381f73b80fd8a2d"}, - {file = "matplotlib-3.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c49a2bd6981264bddcb8c317b6bd25febcece9e2ebfcbc34e7f4c0c867c09dc"}, - {file = "matplotlib-3.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23ed11654fc83cd6cfdf6170b453e437674a050a452133a064d47f2f1371f8d3"}, - {file = "matplotlib-3.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae97fdd6996b3a25da8ee43e3fc734fff502f396801063c6b76c20b56683196"}, - {file = "matplotlib-3.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:87df75f528020a6299f76a1d986c0ed4406e3b2bd44bc5e306e46bca7d45e53e"}, - {file = "matplotlib-3.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:90d74a95fe055f73a6cd737beecc1b81c26f2893b7a3751d52b53ff06ca53f36"}, - {file = "matplotlib-3.8.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c3499c312f5def8f362a2bf761d04fa2d452b333f3a9a3f58805273719bf20d9"}, - {file = "matplotlib-3.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31e793c8bd4ea268cc5d3a695c27b30650ec35238626961d73085d5e94b6ab68"}, - {file = "matplotlib-3.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d5ee602ef517a89d1f2c508ca189cfc395dd0b4a08284fb1b97a78eec354644"}, - {file = "matplotlib-3.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5de39dc61ca35342cf409e031f70f18219f2c48380d3886c1cf5ad9f17898e06"}, - {file = "matplotlib-3.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dd386c80a98b5f51571b9484bf6c6976de383cd2a8cd972b6a9562d85c6d2087"}, - {file = "matplotlib-3.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f691b4ef47c7384d0936b2e8ebdeb5d526c81d004ad9403dfb9d4c76b9979a93"}, - {file = "matplotlib-3.8.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0b11f354aae62a2aa53ec5bb09946f5f06fc41793e351a04ff60223ea9162955"}, - {file = "matplotlib-3.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f54b9fb87ca5acbcdd0f286021bedc162e1425fa5555ebf3b3dfc167b955ad9"}, - {file = "matplotlib-3.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:60a6e04dfd77c0d3bcfee61c3cd335fff1b917c2f303b32524cd1235e194ef99"}, - {file = "matplotlib-3.8.0.tar.gz", hash = "sha256:df8505e1c19d5c2c26aff3497a7cbd3ccfc2e97043d1e4db3e76afa399164b69"}, + {file = "matplotlib-3.10.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2c5829a5a1dd5a71f0e31e6e8bb449bc0ee9dbfb05ad28fc0c6b55101b3a4be6"}, + {file = "matplotlib-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2a43cbefe22d653ab34bb55d42384ed30f611bcbdea1f8d7f431011a2e1c62e"}, + {file = "matplotlib-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:607b16c8a73943df110f99ee2e940b8a1cbf9714b65307c040d422558397dac5"}, + {file = "matplotlib-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01d2b19f13aeec2e759414d3bfe19ddfb16b13a1250add08d46d5ff6f9be83c6"}, + {file = "matplotlib-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e6c6461e1fc63df30bf6f80f0b93f5b6784299f721bc28530477acd51bfc3d1"}, + {file = "matplotlib-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:994c07b9d9fe8d25951e3202a68c17900679274dadfc1248738dcfa1bd40d7f3"}, + {file = "matplotlib-3.10.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:fd44fc75522f58612ec4a33958a7e5552562b7705b42ef1b4f8c0818e304a363"}, + {file = "matplotlib-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c58a9622d5dbeb668f407f35f4e6bfac34bb9ecdcc81680c04d0258169747997"}, + {file = "matplotlib-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:845d96568ec873be63f25fa80e9e7fae4be854a66a7e2f0c8ccc99e94a8bd4ef"}, + {file = "matplotlib-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5439f4c5a3e2e8eab18e2f8c3ef929772fd5641876db71f08127eed95ab64683"}, + {file = "matplotlib-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4673ff67a36152c48ddeaf1135e74ce0d4bce1bbf836ae40ed39c29edf7e2765"}, + {file = "matplotlib-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e8632baebb058555ac0cde75db885c61f1212e47723d63921879806b40bec6a"}, + {file = "matplotlib-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59"}, + {file = "matplotlib-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d44cb942af1693cced2604c33a9abcef6205601c445f6d0dc531d813af8a2f5a"}, + {file = "matplotlib-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a994f29e968ca002b50982b27168addfd65f0105610b6be7fa515ca4b5307c95"}, + {file = "matplotlib-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8"}, + {file = "matplotlib-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:503feb23bd8c8acc75541548a1d709c059b7184cde26314896e10a9f14df5f12"}, + {file = "matplotlib-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:c40ba2eb08b3f5de88152c2333c58cee7edcead0a2a0d60fcafa116b17117adc"}, + {file = "matplotlib-3.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96f2886f5c1e466f21cc41b70c5a0cd47bfa0015eb2d5793c88ebce658600e25"}, + {file = "matplotlib-3.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:12eaf48463b472c3c0f8dbacdbf906e573013df81a0ab82f0616ea4b11281908"}, + {file = "matplotlib-3.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fbbabc82fde51391c4da5006f965e36d86d95f6ee83fb594b279564a4c5d0d2"}, + {file = "matplotlib-3.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad2e15300530c1a94c63cfa546e3b7864bd18ea2901317bae8bbf06a5ade6dcf"}, + {file = "matplotlib-3.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3547d153d70233a8496859097ef0312212e2689cdf8d7ed764441c77604095ae"}, + {file = "matplotlib-3.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:c55b20591ced744aa04e8c3e4b7543ea4d650b6c3c4b208c08a05b4010e8b442"}, + {file = "matplotlib-3.10.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ade1003376731a971e398cc4ef38bb83ee8caf0aee46ac6daa4b0506db1fd06"}, + {file = "matplotlib-3.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95b710fea129c76d30be72c3b38f330269363fbc6e570a5dd43580487380b5ff"}, + {file = "matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdbaf909887373c3e094b0318d7ff230b2ad9dcb64da7ade654182872ab2593"}, + {file = "matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d907fddb39f923d011875452ff1eca29a9e7f21722b873e90db32e5d8ddff12e"}, + {file = "matplotlib-3.10.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3b427392354d10975c1d0f4ee18aa5844640b512d5311ef32efd4dd7db106ede"}, + {file = "matplotlib-3.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5fd41b0ec7ee45cd960a8e71aea7c946a28a0b8a4dcee47d2856b2af051f334c"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:81713dd0d103b379de4516b861d964b1d789a144103277769238c732229d7f03"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:359f87baedb1f836ce307f0e850d12bb5f1936f70d035561f90d41d305fdacea"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80dc3a4add4665cf2faa90138384a7ffe2a4e37c58d83e115b54287c4f06ef"}, + {file = "matplotlib-3.10.0.tar.gz", hash = "sha256:b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278"}, ] [package.dependencies] contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" -kiwisolver = ">=1.0.1" -numpy = ">=1.21,<2" +kiwisolver = ">=1.3.1" +numpy = ">=1.23" packaging = ">=20.0" -pillow = ">=6.2.0" +pillow = ">=8" pyparsing = ">=2.3.1" python-dateutil = ">=2.7" -setuptools_scm = ">=7" + +[package.extras] +dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] [[package]] name = "multiprocess" -version = "0.70.15" +version = "0.70.17" description = "better multiprocessing and multithreading in Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "multiprocess-0.70.15-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aa36c7ed16f508091438687fe9baa393a7a8e206731d321e443745e743a0d4e5"}, - {file = "multiprocess-0.70.15-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:20e024018c46d0d1602024c613007ac948f9754659e3853b0aa705e83f6931d8"}, - {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_i686.whl", hash = "sha256:e576062981c91f0fe8a463c3d52506e598dfc51320a8dd8d78b987dfca91c5db"}, - {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:e73f497e6696a0f5433ada2b3d599ae733b87a6e8b008e387c62ac9127add177"}, - {file = "multiprocess-0.70.15-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:73db2e7b32dcc7f9b0f075c2ffa45c90b6729d3f1805f27e88534c8d321a1be5"}, - {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_i686.whl", hash = "sha256:4271647bd8a49c28ecd6eb56a7fdbd3c212c45529ad5303b40b3c65fc6928e5f"}, - {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:cf981fb998d6ec3208cb14f0cf2e9e80216e834f5d51fd09ebc937c32b960902"}, - {file = "multiprocess-0.70.15-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:18f9f2c7063346d1617bd1684fdcae8d33380ae96b99427260f562e1a1228b67"}, - {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_i686.whl", hash = "sha256:0eac53214d664c49a34695e5824872db4006b1a465edd7459a251809c3773370"}, - {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1a51dd34096db47fb21fa2b839e615b051d51b97af9a67afbcdaa67186b44883"}, - {file = "multiprocess-0.70.15-py310-none-any.whl", hash = "sha256:7dd58e33235e83cf09d625e55cffd7b0f0eede7ee9223cdd666a87624f60c21a"}, - {file = "multiprocess-0.70.15-py311-none-any.whl", hash = "sha256:134f89053d82c9ed3b73edd3a2531eb791e602d4f4156fc92a79259590bd9670"}, - {file = "multiprocess-0.70.15-py37-none-any.whl", hash = "sha256:f7d4a1629bccb433114c3b4885f69eccc200994323c80f6feee73b0edc9199c5"}, - {file = "multiprocess-0.70.15-py38-none-any.whl", hash = "sha256:bee9afba476c91f9ebee7beeee0601face9eff67d822e893f9a893725fbd6316"}, - {file = "multiprocess-0.70.15-py39-none-any.whl", hash = "sha256:3e0953f5d52b4c76f1c973eaf8214554d146f2be5decb48e928e55c7a2d19338"}, - {file = "multiprocess-0.70.15.tar.gz", hash = "sha256:f20eed3036c0ef477b07a4177cf7c1ba520d9a2677870a4f47fe026f0cd6787e"}, + {file = "multiprocess-0.70.17-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ddb24e5bcdb64e90ec5543a1f05a39463068b6d3b804aa3f2a4e16ec28562d6"}, + {file = "multiprocess-0.70.17-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d729f55198a3579f6879766a6d9b72b42d4b320c0dcb7844afb774d75b573c62"}, + {file = "multiprocess-0.70.17-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2c82d0375baed8d8dd0d8c38eb87c5ae9c471f8e384ad203a36f095ee860f67"}, + {file = "multiprocess-0.70.17-pp38-pypy38_pp73-macosx_10_9_arm64.whl", hash = "sha256:a22a6b1a482b80eab53078418bb0f7025e4f7d93cc8e1f36481477a023884861"}, + {file = "multiprocess-0.70.17-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:349525099a0c9ac5936f0488b5ee73199098dac3ac899d81d326d238f9fd3ccd"}, + {file = "multiprocess-0.70.17-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:27b8409c02b5dd89d336107c101dfbd1530a2cd4fd425fc27dcb7adb6e0b47bf"}, + {file = "multiprocess-0.70.17-pp39-pypy39_pp73-macosx_10_13_arm64.whl", hash = "sha256:2ea0939b0f4760a16a548942c65c76ff5afd81fbf1083c56ae75e21faf92e426"}, + {file = "multiprocess-0.70.17-pp39-pypy39_pp73-macosx_10_13_x86_64.whl", hash = "sha256:2b12e081df87ab755190e227341b2c3b17ee6587e9c82fecddcbe6aa812cd7f7"}, + {file = "multiprocess-0.70.17-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a0f01cd9d079af7a8296f521dc03859d1a414d14c1e2b6e676ef789333421c95"}, + {file = "multiprocess-0.70.17-py310-none-any.whl", hash = "sha256:38357ca266b51a2e22841b755d9a91e4bb7b937979a54d411677111716c32744"}, + {file = "multiprocess-0.70.17-py311-none-any.whl", hash = "sha256:2884701445d0177aec5bd5f6ee0df296773e4fb65b11903b94c613fb46cfb7d1"}, + {file = "multiprocess-0.70.17-py312-none-any.whl", hash = "sha256:2818af14c52446b9617d1b0755fa70ca2f77c28b25ed97bdaa2c69a22c47b46c"}, + {file = "multiprocess-0.70.17-py313-none-any.whl", hash = "sha256:20c28ca19079a6c879258103a6d60b94d4ffe2d9da07dda93fb1c8bc6243f522"}, + {file = "multiprocess-0.70.17-py38-none-any.whl", hash = "sha256:1d52f068357acd1e5bbc670b273ef8f81d57863235d9fbf9314751886e141968"}, + {file = "multiprocess-0.70.17-py39-none-any.whl", hash = "sha256:c3feb874ba574fbccfb335980020c1ac631fbf2a3f7bee4e2042ede62558a021"}, + {file = "multiprocess-0.70.17.tar.gz", hash = "sha256:4ae2f11a3416809ebc9a48abfc8b14ecce0652a0944731a1493a3c1ba44ff57a"}, ] [package.dependencies] -dill = ">=0.3.7" +dill = ">=0.3.9" [[package]] name = "nibabel" -version = "5.1.0" +version = "5.3.2" description = "Access a multitude of neuroimaging data formats" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "nibabel-5.1.0-py3-none-any.whl", hash = "sha256:b3deb8130c835b9d26e80880b0d5e443d9e3f30972b3b0302dd2fafa3ca629f8"}, - {file = "nibabel-5.1.0.tar.gz", hash = "sha256:ce73ca5e957209e7219a223cb71f77235c9df2acf4d3f27f861ba38e9481ac53"}, + {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.19" -packaging = ">=17" +numpy = ">=1.22" +packaging = ">=20" +typing-extensions = {version = ">=4.6", markers = "python_version < \"3.13\""} [package.extras] -all = ["nibabel[dev,dicomfs,doc,minc2,spm,style,test,zstd]"] -dev = ["gitpython", "nibabel[style]", "twine"] -dicom = ["pydicom (>=1.0.0)"] -dicomfs = ["nibabel[dicom]", "pillow"] -doc = ["matplotlib (>=1.5.3)", "numpydoc", "sphinx (>=5.3,<6.0)", "texext", "tomli"] -doctest = ["nibabel[doc,test]"] +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 = ["blue", "flake8", "isort"] -test = ["coverage", "pytest (!=5.3.4)", "pytest-cov", "pytest-doctestplus", "pytest-httpserver", "pytest-xdist"] -typing = ["importlib-resources", "mypy", "pydicom", "pytest", "pyzstd", "types-pillow", "types-setuptools"] +style = ["tox"] +test = ["coverage (>=7.2)", "pytest", "pytest-cov", "pytest-doctestplus", "pytest-httpserver", "pytest-xdist"] +typing = ["tox"] zstd = ["pyzstd (>=0.14.3)"] [[package]] name = "numpy" -version = "1.25.2" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, - {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, - {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, - {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, - {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, - {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, - {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, - {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, - {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, - {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, - {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, - {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, - {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, - {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, - {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, - {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, - {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, - {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, - {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, - {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, - {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, - {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, - {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, - {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, - {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, + {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"}, +] + +[[package]] +name = "orderly-set" +version = "5.2.3" +description = "Orderly set" +optional = false +python-versions = ">=3.8" +files = [ + {file = "orderly_set-5.2.3-py3-none-any.whl", hash = "sha256:d357cedcf67f4ebff0d4cbd5b0997e98eeb65dd24fdf5c990a501ae9e82c7d34"}, + {file = "orderly_set-5.2.3.tar.gz", hash = "sha256:571ed97c5a5fca7ddeb6b2d26c19aca896b0ed91f334d9c109edd2f265fb3017"}, ] [[package]] name = "osqp" -version = "0.6.3" +version = "0.6.7.post3" description = "OSQP: The Operator Splitting QP Solver" optional = false python-versions = "*" files = [ - {file = "osqp-0.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6b7d923c836f1d07115057e595245ccc1694ecae730a1affda78fc6f3c8d239"}, - {file = "osqp-0.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dfda08c38c3521012740a73ef782f97dfc54a41deae4b0bc4afd18d0e74da0"}, - {file = "osqp-0.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7eafa3f3e82dd36c52f3f4ef19a95142405c807c272c4b53c5971c53535d7804"}, - {file = "osqp-0.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:3cbb6efdaffb7387dc0037dfe3259d4803e5ad7217e6f20fb605c92953214b9d"}, - {file = "osqp-0.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1b2049b2c42565dcaa63ddca1c4028b1fb20aab141453f5d77e8ff5b1a99a2cf"}, - {file = "osqp-0.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:146b89f2cfbf59eaeb2c47e3a312f2034138df78d80ce052364810dc0ef70fc4"}, - {file = "osqp-0.6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0084e3d733c75687d68bc133bc380ce471dfe6f7724af2718a43491782eec8d6"}, - {file = "osqp-0.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:1b573fe1cd0e82239a279c58817c1d365187ef862e928b2b9c828c3c516ad3c2"}, - {file = "osqp-0.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c3951ef505177b858c6cd34de980346014cae3d2234c93db960b12c5885f9a2"}, - {file = "osqp-0.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc18f87c9549032c163ce590a5e32079df94ee656c8fb357ba607aa9d78fab81"}, - {file = "osqp-0.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c07b1a4b538aab629b0fae69f644b7e76f81f94d65230014d482e296dacd046b"}, - {file = "osqp-0.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:60abec3593870990b16f00bd5017096a7091fb00b68d0db3383fc048ca8e55c9"}, - {file = "osqp-0.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b73bdd9589901841af83c5ed6a4092b4fac5a0beff9e32682d8526d1f16a728c"}, - {file = "osqp-0.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71d9f611823af4a8b241c86805920e5382cd65c7f94fd3615b4eef999ed94c7c"}, - {file = "osqp-0.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30fbc3b3c028c06a6c5f1e66be7b7106ad48a29e0dc5bd82393f82dd68235ef8"}, - {file = "osqp-0.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fe57e4bde071b388518ecb068f26319506dd9cb107363d3d80c12d2e59fc1e81"}, - {file = "osqp-0.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41f304d1d7f91af07d8f0b01e5af29ec3bb8824f0102c7fd8b13b497be120da4"}, - {file = "osqp-0.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea7d8c92bcdf4fef98d777f13d39060d425ef2e8778ed487c96a6fa10848cdea"}, - {file = "osqp-0.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a3c6d2708868e5e3fe2da300d6523cbf68a3d8734ce9c5043db37391969f5"}, - {file = "osqp-0.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:1c548a0b3691850e7e22f3624a128d8af33416d70a9b5976a47d4d832028dcd8"}, - {file = "osqp-0.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:387e7abd737dfe32c9ec00ad74af25328cdd0d0f634d79530655c040a5cb9590"}, - {file = "osqp-0.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1445e10a94e01698e13c87a7debf6ac1a15f3acd1f8f6340cb1ad945db4732b"}, - {file = "osqp-0.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0441c10f7fe5f46692a9b44a57138977bb112ae3f8127151671968c5d9ec5dbb"}, - {file = "osqp-0.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:b15e65a307fbbabf60248bb9bc204e61d5d4ae64e00427a69e2dad9622f4c29d"}, - {file = "osqp-0.6.3.tar.gz", hash = "sha256:03e460e683ec2ce0f839353ddfa3c4c8ffa509ab8cf6a2b2afbb586fa453e180"}, + {file = "osqp-0.6.7.post3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f751ca1332b480753cfe3c08bf14ca66259bf69679b572e1f8095ad3e26b201d"}, + {file = "osqp-0.6.7.post3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1b30df65f2d938452e3bd2ca11388b5b16ec7406daedfc4b9dce3747c282e44"}, + {file = "osqp-0.6.7.post3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e1c4550853a5f1e0a90ae7ccbee1cb990f34f98514911955ad14841613110dd"}, + {file = "osqp-0.6.7.post3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0cce816af77b28fc5eff1a4e6d8d25d0653f48275e6e2814bd5f1767181e715"}, + {file = "osqp-0.6.7.post3-cp310-cp310-win_amd64.whl", hash = "sha256:78a1d63b36876996a7125e061145280949334d667060a20895c5d1f183c70242"}, + {file = "osqp-0.6.7.post3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b1a1dcd869fd6ac501e06262c21483a3691b6281e4f3f65af6951330958b89ca"}, + {file = "osqp-0.6.7.post3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46b93d1110dc0ad311f6691c4df9ee41cbbde5ffc0d8c8d520d4555bf5d8765b"}, + {file = "osqp-0.6.7.post3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5209104d6fe3ace4fdbf9ace08caa2cba9de1e7ccd5f56279a346c235917138b"}, + {file = "osqp-0.6.7.post3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdfefa07740e9fb1c574cdc836e5afe2600b73c0c12089955d4ae6587c55f0eb"}, + {file = "osqp-0.6.7.post3-cp311-cp311-win_amd64.whl", hash = "sha256:c48c91dfba02ce11e8b8f5d401ec5b67a316782bfdf4f53ca753e49907f7387f"}, + {file = "osqp-0.6.7.post3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:023af06764f7aba9c64536ecb7204019906bb7e78237f335f82b404f16623eef"}, + {file = "osqp-0.6.7.post3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4cec7cb5bf1615c4129277275dc08e20a037372a874cff35eb891b4b35a463de"}, + {file = "osqp-0.6.7.post3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb882ab24b97b14843b7c71d2474fb8b415bafc8dd60aa94870c2ef338c20bfb"}, + {file = "osqp-0.6.7.post3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:502fde0ae710cef1e6418fb8d26efef9597d1dcba877489a1c2eb9c3eb2ff2e9"}, + {file = "osqp-0.6.7.post3-cp312-cp312-win_amd64.whl", hash = "sha256:468588cfb690becba4d1f460c2a53e75530584e3efcf2caed59f5219032e6888"}, + {file = "osqp-0.6.7.post3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cee478eedf9cfad11ff9c27ef0b1e032506a16888b8b874f622816cf8749db7f"}, + {file = "osqp-0.6.7.post3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5dd739c4c6c91e40d2e3ea2bb78c635c897e07697ab24a46d3a5d197e254b0f3"}, + {file = "osqp-0.6.7.post3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:002f280f23d15ad3c6386a868688f0b17c90dba13d0f7f8da1c833a14fc4d7f8"}, + {file = "osqp-0.6.7.post3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a2922fe8cb666964cf01b643da81eadf4bb435139a5f042d5bb6dcb87496778"}, + {file = "osqp-0.6.7.post3-cp313-cp313-win_amd64.whl", hash = "sha256:acb219e941f5248da5de3ee9b70e6a5aaddf5f3989dffd1d4c03b0f7b1dfa17b"}, + {file = "osqp-0.6.7.post3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d12757f9594f87219820aa7ae06ce7800fef9ea52828b7d1970016d6c9749b5f"}, + {file = "osqp-0.6.7.post3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:565205e0dbe5b6ac1dcd7eee8d2e9c4ba5d88b7aaaa522140cdb7d197a9275bb"}, + {file = "osqp-0.6.7.post3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34974c8441260e8952f63a17b0461da9b554a3ed9122042dd0f2e0a4c19e9732"}, + {file = "osqp-0.6.7.post3-cp36-cp36m-win_amd64.whl", hash = "sha256:01d99ced6f43d0d10fa0f01631c5b0a27aca44a5e4743b7ce9a174fcfebfde6e"}, + {file = "osqp-0.6.7.post3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d54837f762b17cb77aa16be3e85cc424cb93fd4ec84f5cbb14f9c0520191fecf"}, + {file = "osqp-0.6.7.post3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c353997ebe57cd8252bd5d7100d997086ab0524b946dc49a4e4d4a774752ee9"}, + {file = "osqp-0.6.7.post3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30c37552731443295b629999c6d100f76310a2cd368503095af6165e2f52993d"}, + {file = "osqp-0.6.7.post3-cp37-cp37m-win_amd64.whl", hash = "sha256:2c3c31712c60d0421178040a6ee9644318fb579bd83375af4ffd9d5d7c9d2d2e"}, + {file = "osqp-0.6.7.post3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb3c73386d18be58097115f5f8623860d5736c5b956eb54e492b91380cab549e"}, + {file = "osqp-0.6.7.post3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:27396891b4c52baae44d9aef4ad2abf7da9a19946c5cbdd163f96a55de02515f"}, + {file = "osqp-0.6.7.post3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb39a937c5fbfe935cebc21c9ef51434cabe5a6f415a775b8a0939c39aa31671"}, + {file = "osqp-0.6.7.post3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:204857fdd4100ad0d487cac4e9c1698843440ec49c1d49b03aa369588cd2db65"}, + {file = "osqp-0.6.7.post3-cp38-cp38-win_amd64.whl", hash = "sha256:4981c0f2b28bce3731d614953da11b4dd30106ea3e4d7d0a5f7dd3a93270934a"}, + {file = "osqp-0.6.7.post3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21e605e3ec1547a23be16ea52ade3157d4e2e7935472dd9c0c089a9c6b3463be"}, + {file = "osqp-0.6.7.post3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:82f14aaf099be0888b47e50699006c16107b30f53a7bc27070075d56d23c822c"}, + {file = "osqp-0.6.7.post3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7938f6e4fe2b8b9737b4b7b0dda48bf0f11c14104b79c07ce0b1fe475f4e1308"}, + {file = "osqp-0.6.7.post3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:298617772814480fce4610ea1f3abac3deac3ffdc978b0df4916f1021d128c66"}, + {file = "osqp-0.6.7.post3-cp39-cp39-win_amd64.whl", hash = "sha256:894e65b8e4c81f0ef069af6b2ec398881aafe4dd265869b1647ee18a2a9393b1"}, + {file = "osqp-0.6.7.post3.tar.gz", hash = "sha256:b0c5e0a721f21c9724097a4fd50108304d296468d124e16f34ac67046f7020e1"}, ] [package.dependencies] @@ -733,93 +812,117 @@ numpy = ">=1.7" qdldl = "*" scipy = ">=0.13.2" +[package.extras] +dev = ["scipy (!=1.12.0)"] + [[package]] name = "packaging" -version = "23.2" +version = "24.2" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] name = "pillow" -version = "10.0.1" +version = "11.1.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "Pillow-10.0.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:8f06be50669087250f319b706decf69ca71fdecd829091a37cc89398ca4dc17a"}, - {file = "Pillow-10.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50bd5f1ebafe9362ad622072a1d2f5850ecfa44303531ff14353a4059113b12d"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6a90167bcca1216606223a05e2cf991bb25b14695c518bc65639463d7db722d"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f11c9102c56ffb9ca87134bd025a43d2aba3f1155f508eff88f694b33a9c6d19"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f"}, - {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff"}, - {file = "Pillow-10.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d889b53ae2f030f756e61a7bff13684dcd77e9af8b10c6048fb2c559d6ed6eaf"}, - {file = "Pillow-10.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:552912dbca585b74d75279a7570dd29fa43b6d93594abb494ebb31ac19ace6bd"}, - {file = "Pillow-10.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:787bb0169d2385a798888e1122c980c6eff26bf941a8ea79747d35d8f9210ca0"}, - {file = "Pillow-10.0.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1"}, - {file = "Pillow-10.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2d7e91b4379f7a76b31c2dda84ab9e20c6220488e50f7822e59dac36b0cd92b1"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93139acd8109edcdeffd85e3af8ae7d88b258b3a1e13a038f542b79b6d255c54"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:92a23b0431941a33242b1f0ce6c88a952e09feeea9af4e8be48236a68ffe2205"}, - {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cbe68deb8580462ca0d9eb56a81912f59eb4542e1ef8f987405e35a0179f4ea2"}, - {file = "Pillow-10.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:522ff4ac3aaf839242c6f4e5b406634bfea002469656ae8358644fc6c4856a3b"}, - {file = "Pillow-10.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:84efb46e8d881bb06b35d1d541aa87f574b58e87f781cbba8d200daa835b42e1"}, - {file = "Pillow-10.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:898f1d306298ff40dc1b9ca24824f0488f6f039bc0e25cfb549d3195ffa17088"}, - {file = "Pillow-10.0.1-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:bcf1207e2f2385a576832af02702de104be71301c2696d0012b1b93fe34aaa5b"}, - {file = "Pillow-10.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d6c9049c6274c1bb565021367431ad04481ebb54872edecfcd6088d27edd6ed"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28444cb6ad49726127d6b340217f0627abc8732f1194fd5352dec5e6a0105635"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de596695a75496deb3b499c8c4f8e60376e0516e1a774e7bc046f0f48cd620ad"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:2872f2d7846cf39b3dbff64bc1104cc48c76145854256451d33c5faa55c04d1a"}, - {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4ce90f8a24e1c15465048959f1e94309dfef93af272633e8f37361b824532e91"}, - {file = "Pillow-10.0.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ee7810cf7c83fa227ba9125de6084e5e8b08c59038a7b2c9045ef4dde61663b4"}, - {file = "Pillow-10.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b1be1c872b9b5fcc229adeadbeb51422a9633abd847c0ff87dc4ef9bb184ae08"}, - {file = "Pillow-10.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:98533fd7fa764e5f85eebe56c8e4094db912ccbe6fbf3a58778d543cadd0db08"}, - {file = "Pillow-10.0.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:764d2c0daf9c4d40ad12fbc0abd5da3af7f8aa11daf87e4fa1b834000f4b6b0a"}, - {file = "Pillow-10.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:697a06bdcedd473b35e50a7e7506b1d8ceb832dc238a336bd6f4f5aa91a4b500"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f665d1e6474af9f9da5e86c2a3a2d2d6204e04d5af9c06b9d42afa6ebde3f21"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:2fa6dd2661838c66f1a5473f3b49ab610c98a128fc08afbe81b91a1f0bf8c51d"}, - {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:3a04359f308ebee571a3127fdb1bd01f88ba6f6fb6d087f8dd2e0d9bff43f2a7"}, - {file = "Pillow-10.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:723bd25051454cea9990203405fa6b74e043ea76d4968166dfd2569b0210886a"}, - {file = "Pillow-10.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:71671503e3015da1b50bd18951e2f9daf5b6ffe36d16f1eb2c45711a301521a7"}, - {file = "Pillow-10.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:44e7e4587392953e5e251190a964675f61e4dae88d1e6edbe9f36d6243547ff3"}, - {file = "Pillow-10.0.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:3855447d98cced8670aaa63683808df905e956f00348732448b5a6df67ee5849"}, - {file = "Pillow-10.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ed2d9c0704f2dc4fa980b99d565c0c9a543fe5101c25b3d60488b8ba80f0cce1"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5bb289bb835f9fe1a1e9300d011eef4d69661bb9b34d5e196e5e82c4cb09b37"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0d3e54ab1df9df51b914b2233cf779a5a10dfd1ce339d0421748232cea9876"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:2cc6b86ece42a11f16f55fe8903595eff2b25e0358dec635d0a701ac9586588f"}, - {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ca26ba5767888c84bf5a0c1a32f069e8204ce8c21d00a49c90dabeba00ce0145"}, - {file = "Pillow-10.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f0b4b06da13275bc02adfeb82643c4a6385bd08d26f03068c2796f60d125f6f2"}, - {file = "Pillow-10.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bc2e3069569ea9dbe88d6b8ea38f439a6aad8f6e7a6283a38edf61ddefb3a9bf"}, - {file = "Pillow-10.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:8b451d6ead6e3500b6ce5c7916a43d8d8d25ad74b9102a629baccc0808c54971"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:32bec7423cdf25c9038fef614a853c9d25c07590e1a870ed471f47fb80b244db"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cf63d2c6928b51d35dfdbda6f2c1fddbe51a6bc4a9d4ee6ea0e11670dd981e"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4"}, - {file = "Pillow-10.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:847e8d1017c741c735d3cd1883fa7b03ded4f825a6e5fcb9378fd813edee995f"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:7f771e7219ff04b79e231d099c0a28ed83aa82af91fd5fa9fdb28f5b8d5addaf"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459307cacdd4138edee3875bbe22a2492519e060660eaf378ba3b405d1c66317"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b059ac2c4c7a97daafa7dc850b43b2d3667def858a4f112d1aa082e5c3d6cf7d"}, - {file = "Pillow-10.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6caf3cd38449ec3cd8a68b375e0c6fe4b6fd04edb6c9766b55ef84a6e8ddf2d"}, - {file = "Pillow-10.0.1.tar.gz", hash = "sha256:d72967b06be9300fed5cfbc8b5bafceec48bf7cdc7dab66b1d2549035287191d"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"}, + {file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"}, + {file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"}, + {file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"}, + {file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"}, + {file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"}, + {file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"}, + {file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"}, + {file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"}, + {file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"}, + {file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"}, + {file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"}, + {file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"}, + {file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"}, + {file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"}, + {file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"}, + {file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"}, + {file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"}, + {file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"}, + {file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"}, + {file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "pluggy" -version = "1.3.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -827,28 +930,146 @@ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] [[package]] -name = "pybind11" -version = "2.11.1" -description = "Seamless operability between C++11 and Python" +name = "pydantic" +version = "2.10.6" +description = "Data validation using Python type hints" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pybind11-2.11.1-py3-none-any.whl", hash = "sha256:33cdd02a6453380dd71cc70357ce388ad1ee8d32bd0e38fc22b273d050aa29b3"}, - {file = "pybind11-2.11.1.tar.gz", hash = "sha256:00cd59116a6e8155aecd9174f37ba299d1d397ed4a6b86ac1dfe01b3e40f2cc4"}, + {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, + {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, ] +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.27.2" +typing-extensions = ">=4.12.2" + [package.extras] -global = ["pybind11-global (==2.11.1)"] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] + +[[package]] +name = "pydantic-core" +version = "2.27.2" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, + {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pyparsing" -version = "3.1.1" +version = "3.2.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false -python-versions = ">=3.6.8" +python-versions = ">=3.9" files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, + {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, + {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, ] [package.extras] @@ -856,13 +1077,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "7.4.2" +version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, - {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, ] [package.dependencies] @@ -874,15 +1095,53 @@ pluggy = ">=0.12,<2.0" [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +[[package]] +name = "pytest-cov" +version = "5.0.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + +[[package]] +name = "pytest-xdist" +version = "3.6.1" +description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, + {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, +] + +[package.dependencies] +execnet = ">=2.1" +pytest = ">=7.0.0" + +[package.extras] +psutil = ["psutil (>=3.0)"] +setproctitle = ["setproctitle"] +testing = ["filelock"] + [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -890,30 +1149,50 @@ six = ">=1.5" [[package]] name = "qdldl" -version = "0.1.7.post0" +version = "0.1.7.post5" description = "QDLDL, a free LDL factorization routine." optional = false python-versions = "*" files = [ - {file = "qdldl-0.1.7.post0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ab02e8b9ff86bd644a1935718387c82fbe04c31e3309cf9f7a121d02b1deda8"}, - {file = "qdldl-0.1.7.post0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e5d6753310377451ed4dc09b1ef28faf40108b713e7f55c8a8ae94d679a672"}, - {file = "qdldl-0.1.7.post0-cp310-cp310-win_amd64.whl", hash = "sha256:718d8e141832e96ba71ca1807a74813836c6403110faaa3d33a67de1af3b29c4"}, - {file = "qdldl-0.1.7.post0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0e3f06e8a49ddd834b24fc3d7afbba4fec0923101045aa2666e18d2a9980e329"}, - {file = "qdldl-0.1.7.post0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a81c46522dd6b3042e2348fa98128bb5c0e466f42bce214e80cfb766ff40930"}, - {file = "qdldl-0.1.7.post0-cp311-cp311-win_amd64.whl", hash = "sha256:4a86155f3de66c5db0e21544b7a2421c671028fa20da407686d2a8d0e9b57e51"}, - {file = "qdldl-0.1.7.post0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:717cb1892b033c01a0aae84ededcfa1f05bcb97013095d779c497e6c32f90dac"}, - {file = "qdldl-0.1.7.post0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc35432913085d94b2327242cf51388467ef7a37ac0d71eb31b594b575dd498"}, - {file = "qdldl-0.1.7.post0-cp36-cp36m-win_amd64.whl", hash = "sha256:fd5cfd8c50f33ddacb830594a63b8c1093a24aea45312b9d2ed826cea5ece08a"}, - {file = "qdldl-0.1.7.post0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:981ca8672e9506976c663552c1eb6f6daf9726d62650b3bf5900260946156166"}, - {file = "qdldl-0.1.7.post0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8ec670d97cf756f9159dc0a11de5cf054e88aefe84bea1c7282f00334642843"}, - {file = "qdldl-0.1.7.post0-cp37-cp37m-win_amd64.whl", hash = "sha256:aa208703b44337a7e77f6f2663f7a452144becb4421970d534ff8297b92e1e10"}, - {file = "qdldl-0.1.7.post0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b42649484f7c0d8ee659224ecaac0a3e97f12531018207f4d7323e4071320eb1"}, - {file = "qdldl-0.1.7.post0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26aa3d6f0da7779265d72e8f418094003e75fa53c515a53bc03fd8b9bcfbf7de"}, - {file = "qdldl-0.1.7.post0-cp38-cp38-win_amd64.whl", hash = "sha256:e55bcd6962178029faf543addd49db145302dd51e19855fefa71b5fd55840eea"}, - {file = "qdldl-0.1.7.post0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1dd0e570e65aaf35e10b7fb345f7ac763fd05a2227b9c06ce65e07993fc4984"}, - {file = "qdldl-0.1.7.post0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae161342529852b6248ace4642bc4ee371a7c1e0707b7bc43a43ef7e73c06ca3"}, - {file = "qdldl-0.1.7.post0-cp39-cp39-win_amd64.whl", hash = "sha256:092f6606690a2b9bd3c939f3147887e02de13bb068fbed5ffdc7459034def623"}, - {file = "qdldl-0.1.7.post0.tar.gz", hash = "sha256:f346a114c8342ee6d4dbd6471eef314199fb268d3bf7b95885ca351fde2b023f"}, + {file = "qdldl-0.1.7.post5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:882658853edd24a7d16912af29e77320e061b150b4ed7cf94fd01907f2e925b4"}, + {file = "qdldl-0.1.7.post5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e30a80d71ab5889a1e169304b12bc3ab69210775f6428153873584ff8dfb50e5"}, + {file = "qdldl-0.1.7.post5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3640594ea643e4b2c2b40a6f21ad7a6c5bdfaaf5f13a5256538b631d474d7b77"}, + {file = "qdldl-0.1.7.post5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba00c93f547eff8aa13af300c7b7573b27caf30209b25ec8f16f2ff810b9653f"}, + {file = "qdldl-0.1.7.post5-cp310-cp310-win_amd64.whl", hash = "sha256:66c5e0e9175dd0c2a511b4dc9e0ee106ababc5e4e05ef8107598f14e346c5632"}, + {file = "qdldl-0.1.7.post5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa22df45e625c763d129b2893b284b7bde16a535a7e900288d588be9dc24fe9f"}, + {file = "qdldl-0.1.7.post5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e196871dafe4febb86c2886713c8a2226d19455226e56e3b9480aa78eb59b5e"}, + {file = "qdldl-0.1.7.post5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba5ff31a66d1f92b41d0b97d27288d28a8c849dd6db2221a579b1a5a5a6df0f"}, + {file = "qdldl-0.1.7.post5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c34872867c2bcac60279034594eac8dee042b9dedd4c45948e55884b8c5c9cd0"}, + {file = "qdldl-0.1.7.post5-cp311-cp311-win_amd64.whl", hash = "sha256:b1280e886f734e3d0d67f643e3d76c55d2e23d0e7b06d89b987681dc165892c5"}, + {file = "qdldl-0.1.7.post5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d67a95d0ba73147a05cf98dc9284103f64150c9e2c214cd35ee0258f06922c5e"}, + {file = "qdldl-0.1.7.post5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e23d684427ce49f5d657e353322363555d1a31605fe72cbe4b965a4e260742c"}, + {file = "qdldl-0.1.7.post5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c4953d4fe61951fb515a6439009248b5a7b73627d74ee929d02b19bea41b19d"}, + {file = "qdldl-0.1.7.post5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:520dbe4006a333c773ff474d2dc1e0af928c0dc7d9ca36db5637ba738ee608ba"}, + {file = "qdldl-0.1.7.post5-cp312-cp312-win_amd64.whl", hash = "sha256:13dfc0b225a5c180512488fa51f1771e8fa3c06d7fce9fd3c1d018bc03ba0eec"}, + {file = "qdldl-0.1.7.post5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7600985d2321cb15f71f8bb3a92ef2a85284b4fd740d8bbd4960b8c2f7ee6d33"}, + {file = "qdldl-0.1.7.post5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:314153f574641c846a85ff9b4a5c0e0d23e32d0de11d8381866bb27577088bef"}, + {file = "qdldl-0.1.7.post5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b1ee3840d7d8ef4f1e3ffce0620116a71abd72c52ba46e0c194d4b294a0ad2"}, + {file = "qdldl-0.1.7.post5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba6df1eedbaea844485e1c7a6ae9013bbdc86f07c4ebb13c89249b003de4ef4"}, + {file = "qdldl-0.1.7.post5-cp313-cp313-win_amd64.whl", hash = "sha256:cc9be378e7bec67d4c62b7fa27cafb4f77d3e5e059d753c3dce0a5ae1ef5fea0"}, + {file = "qdldl-0.1.7.post5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f25708dde1978aaec11fc161040230c007d81d4a7528c279f6045bd692bd7ea7"}, + {file = "qdldl-0.1.7.post5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08c191fc6b595b5b31c5ee3b30277e77dd0e4cfc7cd452d76acb564b8342d8f5"}, + {file = "qdldl-0.1.7.post5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3373b02e31965a6032a6a96992737ce1986911758d96338633ebc72bdd01a216"}, + {file = "qdldl-0.1.7.post5-cp36-cp36m-win_amd64.whl", hash = "sha256:c7db6c8426cd5bbe6dc88d6a8e4f76de01309315aa3d9f57ed03549bb8671c48"}, + {file = "qdldl-0.1.7.post5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:20ba0aa2e4f15c3708125493610377920132ab4542d0a6e02b190a7134ccbf3b"}, + {file = "qdldl-0.1.7.post5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6da81b4799dfe95ed4b17aab05777e2385417e60dfe684930b7c3c1a89502934"}, + {file = "qdldl-0.1.7.post5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c78bcb478ff9a791e8125685a6e0ebe666e3d75e33e84ba6ac90de182b85032e"}, + {file = "qdldl-0.1.7.post5-cp37-cp37m-win_amd64.whl", hash = "sha256:c082c39c28def441d59812f88e7a6d2c96179bcf045a5e444aa32f49a7422284"}, + {file = "qdldl-0.1.7.post5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5e4d995569dd004729a9fc11b005be0051815acb60cec3f96615ac57353fcfb6"}, + {file = "qdldl-0.1.7.post5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f03dc5c21deeb111b8585dc4dfba0015ef4d1c7d21267e8f3beb7383229cd1cb"}, + {file = "qdldl-0.1.7.post5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f64b13d37a5a4254b38370c9396196918e4463c1a9578b4b11480d4f12461090"}, + {file = "qdldl-0.1.7.post5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63543e19350160d2a5f5789026678646c3290c55cd9fde0978ee7afba905b3a1"}, + {file = "qdldl-0.1.7.post5-cp38-cp38-win_amd64.whl", hash = "sha256:9719a2baea306fe53ae53a7bbf556a4f042c7d9a218240f2410368071a3fe8f7"}, + {file = "qdldl-0.1.7.post5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e89019cf035d9c3bbd03391c59be2efd9553fcde72c8326a1d6ffa8987a5c4"}, + {file = "qdldl-0.1.7.post5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6eb7368d8b82f11344e89032a29d57c2f83a4acd39e1e529a777cf1a7c15bcba"}, + {file = "qdldl-0.1.7.post5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d778ce1a96e0705a2d89c69b619abdb2dfdd156157ddb4191b3086eab8f95ab"}, + {file = "qdldl-0.1.7.post5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aea639a5a2f85cd102710c65a709270d5293f0695a75d9656f1c175750afb065"}, + {file = "qdldl-0.1.7.post5-cp39-cp39-win_amd64.whl", hash = "sha256:eac992a8f4287328078b6ed0f5022bf68e43d5fce3e9d067765b40c95ed45f51"}, + {file = "qdldl-0.1.7.post5.tar.gz", hash = "sha256:0b1399e1c49b5bed5aac8fd63ef08ab708d340c37fb426fe00128bc1f36b286e"}, ] [package.dependencies] @@ -922,151 +1201,220 @@ scipy = ">=0.13.2" [[package]] name = "scipy" -version = "1.9.3" +version = "1.15.1" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"}, - {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"}, - {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"}, - {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"}, - {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"}, - {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"}, - {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"}, + {file = "scipy-1.15.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:c64ded12dcab08afff9e805a67ff4480f5e69993310e093434b10e85dc9d43e1"}, + {file = "scipy-1.15.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5b190b935e7db569960b48840e5bef71dc513314cc4e79a1b7d14664f57fd4ff"}, + {file = "scipy-1.15.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:4b17d4220df99bacb63065c76b0d1126d82bbf00167d1730019d2a30d6ae01ea"}, + {file = "scipy-1.15.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:63b9b6cd0333d0eb1a49de6f834e8aeaefe438df8f6372352084535ad095219e"}, + {file = "scipy-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f151e9fb60fbf8e52426132f473221a49362091ce7a5e72f8aa41f8e0da4f25"}, + {file = "scipy-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21e10b1dd56ce92fba3e786007322542361984f8463c6d37f6f25935a5a6ef52"}, + {file = "scipy-1.15.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5dff14e75cdbcf07cdaa1c7707db6017d130f0af9ac41f6ce443a93318d6c6e0"}, + {file = "scipy-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:f82fcf4e5b377f819542fbc8541f7b5fbcf1c0017d0df0bc22c781bf60abc4d8"}, + {file = "scipy-1.15.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:5bd8d27d44e2c13d0c1124e6a556454f52cd3f704742985f6b09e75e163d20d2"}, + {file = "scipy-1.15.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:be3deeb32844c27599347faa077b359584ba96664c5c79d71a354b80a0ad0ce0"}, + {file = "scipy-1.15.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5eb0ca35d4b08e95da99a9f9c400dc9f6c21c424298a0ba876fdc69c7afacedf"}, + {file = "scipy-1.15.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:74bb864ff7640dea310a1377d8567dc2cb7599c26a79ca852fc184cc851954ac"}, + {file = "scipy-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:667f950bf8b7c3a23b4199db24cb9bf7512e27e86d0e3813f015b74ec2c6e3df"}, + {file = "scipy-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395be70220d1189756068b3173853029a013d8c8dd5fd3d1361d505b2aa58fa7"}, + {file = "scipy-1.15.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ce3a000cd28b4430426db2ca44d96636f701ed12e2b3ca1f2b1dd7abdd84b39a"}, + {file = "scipy-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fe1d95944f9cf6ba77aa28b82dd6bb2a5b52f2026beb39ecf05304b8392864b"}, + {file = "scipy-1.15.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c09aa9d90f3500ea4c9b393ee96f96b0ccb27f2f350d09a47f533293c78ea776"}, + {file = "scipy-1.15.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0ac102ce99934b162914b1e4a6b94ca7da0f4058b6d6fd65b0cef330c0f3346f"}, + {file = "scipy-1.15.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:09c52320c42d7f5c7748b69e9f0389266fd4f82cf34c38485c14ee976cb8cb04"}, + {file = "scipy-1.15.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:cdde8414154054763b42b74fe8ce89d7f3d17a7ac5dd77204f0e142cdc9239e9"}, + {file = "scipy-1.15.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c9d8fc81d6a3b6844235e6fd175ee1d4c060163905a2becce8e74cb0d7554ce"}, + {file = "scipy-1.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fb57b30f0017d4afa5fe5f5b150b8f807618819287c21cbe51130de7ccdaed2"}, + {file = "scipy-1.15.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:491d57fe89927fa1aafbe260f4cfa5ffa20ab9f1435025045a5315006a91b8f5"}, + {file = "scipy-1.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:900f3fa3db87257510f011c292a5779eb627043dd89731b9c461cd16ef76ab3d"}, + {file = "scipy-1.15.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:100193bb72fbff37dbd0bf14322314fc7cbe08b7ff3137f11a34d06dc0ee6b85"}, + {file = "scipy-1.15.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:2114a08daec64980e4b4cbdf5bee90935af66d750146b1d2feb0d3ac30613692"}, + {file = "scipy-1.15.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6b3e71893c6687fc5e29208d518900c24ea372a862854c9888368c0b267387ab"}, + {file = "scipy-1.15.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:837299eec3d19b7e042923448d17d95a86e43941104d33f00da7e31a0f715d3c"}, + {file = "scipy-1.15.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82add84e8a9fb12af5c2c1a3a3f1cb51849d27a580cb9e6bd66226195142be6e"}, + {file = "scipy-1.15.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070d10654f0cb6abd295bc96c12656f948e623ec5f9a4eab0ddb1466c000716e"}, + {file = "scipy-1.15.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:55cc79ce4085c702ac31e49b1e69b27ef41111f22beafb9b49fea67142b696c4"}, + {file = "scipy-1.15.1-cp313-cp313-win_amd64.whl", hash = "sha256:c352c1b6d7cac452534517e022f8f7b8d139cd9f27e6fbd9f3cbd0bfd39f5bef"}, + {file = "scipy-1.15.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0458839c9f873062db69a03de9a9765ae2e694352c76a16be44f93ea45c28d2b"}, + {file = "scipy-1.15.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:af0b61c1de46d0565b4b39c6417373304c1d4f5220004058bdad3061c9fa8a95"}, + {file = "scipy-1.15.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:71ba9a76c2390eca6e359be81a3e879614af3a71dfdabb96d1d7ab33da6f2364"}, + {file = "scipy-1.15.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14eaa373c89eaf553be73c3affb11ec6c37493b7eaaf31cf9ac5dffae700c2e0"}, + {file = "scipy-1.15.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f735bc41bd1c792c96bc426dece66c8723283695f02df61dcc4d0a707a42fc54"}, + {file = "scipy-1.15.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2722a021a7929d21168830790202a75dbb20b468a8133c74a2c0230c72626b6c"}, + {file = "scipy-1.15.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc7136626261ac1ed988dca56cfc4ab5180f75e0ee52e58f1e6aa74b5f3eacd5"}, + {file = "scipy-1.15.1.tar.gz", hash = "sha256:033a75ddad1463970c96a88063a1df87ccfddd526437136b6ee81ff0312ebdf6"}, ] [package.dependencies] -numpy = ">=1.18.5,<1.26.0" +numpy = ">=1.23.5,<2.5" [package.extras] -dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"] -doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"] -test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "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.16.5)", "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 = "scs" -version = "3.2.3" -description = "scs: splitting conic solver" +version = "3.2.7.post2" +description = "Splitting conic solver" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "scs-3.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d7f7fd2d2cd88938c159b15e8915d9536610e50a9c34ecf36ce0290807afe55"}, - {file = "scs-3.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:368194620918301bf5309a35a7cd0444f1b1992b182c0a29033c26eb97b3dcb2"}, - {file = "scs-3.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:2d835a74c283be73bff6e1978d3ae77a60d9e87db1fdd12916464fa2a1dda517"}, - {file = "scs-3.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81511fda3254c0d29089443dcd2305e81d203509e4d77afd160e9174b15ad75a"}, - {file = "scs-3.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715ca4532de39b462bd393f9e8b4bf57be4122e20f0780d00db3cab1450a585d"}, - {file = "scs-3.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:fcf4b985a787135b3e83682a4c5b9bce9c6290cfead1d7225c38f34f5ead7187"}, - {file = "scs-3.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:91f5194cfabe354c9b1f0ea1de82114028d81c5a4a633177b8da2fe36f301758"}, - {file = "scs-3.2.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0d15f21e9053c5df37dab0d700da55fcc71f2f454748f364b9de594988b2ab3"}, - {file = "scs-3.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:6a80727167ad73151ced202a1ac6c0c7644b00b2e2607edec8a8807fc0443ac8"}, - {file = "scs-3.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79d7d6c42ee636821460d317b8250945ce04363a47a63aef6b1eae0bd7a418fc"}, - {file = "scs-3.2.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6f64d23247797cfa289095fb5ddea6eeff5adf98961e953da90233278827e0c"}, - {file = "scs-3.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:9a14a7c80efb34b469eb4dbaf26a9104dd2ca93e477985f948d8f28cd4b1a2ba"}, - {file = "scs-3.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3eb601738b260e3dcad117f3e02aceaca5d1e8eac2be225be1c0f9cbf83e75cb"}, - {file = "scs-3.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1b24176de97ecedf698596086f85da6dad472fe38a4b21cf4b460f87cae2c37"}, - {file = "scs-3.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:ddaa5af34a0e1f636d312eb1901bd407383f0b04dda50fba7242d56e618c0966"}, - {file = "scs-3.2.3.tar.gz", hash = "sha256:e3bd779e7e977e3ae5a2f2035aa4c2a309e29082d59a722d5d6592edc4bdb4b3"}, + {file = "scs-3.2.7.post2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b7271ff566ac9df929c8cf7d1b024b89c3882b541c21a7a6d9aa94480822bccb"}, + {file = "scs-3.2.7.post2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb2997f53ef3426934599517c6e0e77f4f05cc23c3aa2380fd176c7fd22bc0c8"}, + {file = "scs-3.2.7.post2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8307b7302f8105148478a5723a2f7d5a3cbf86ef3cc6f27567203addfa3b10"}, + {file = "scs-3.2.7.post2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:f34cc43c9eb1092423b55f01430ad99b4e5825a6595ead8e081f985032685e8c"}, + {file = "scs-3.2.7.post2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f645f3789bc4659de2a468c2e4db552f6656bcb286e81f3cb42d5a607028627b"}, + {file = "scs-3.2.7.post2-cp310-cp310-win_amd64.whl", hash = "sha256:e5f90940c383b68dd7960b734105cd1dd6c11c80275321de3a6388f563a1ff19"}, + {file = "scs-3.2.7.post2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d551b90d9e2c0497ee17d8c3db325d6fcefa4419057954e68709da8b9184d4f"}, + {file = "scs-3.2.7.post2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c15d035dda04a6626d3cd9b68d3bf814d2e0eb3cb372021775bd358fd8c7405"}, + {file = "scs-3.2.7.post2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6da6add18f039e7e08f0ebc13cb1f853ec4c96ae81d7a578f46e0f9f0e5bf4b5"}, + {file = "scs-3.2.7.post2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d6c965f026e56c92b59a9c96744eb90178982c270ab196f58a0260ac392785aa"}, + {file = "scs-3.2.7.post2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0427a5bf9aa43eb2a22083e1a43412db5054a88d695fdaa6018cd6fb3a9f0203"}, + {file = "scs-3.2.7.post2-cp311-cp311-win_amd64.whl", hash = "sha256:4d05ec092c891eb842630f343ebc0c46d2ef6047f325a835771b13f9804d6b3b"}, + {file = "scs-3.2.7.post2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:99e4af2968b046ee55fa0dc89dcd3bfba771f1027d9224cb6efa10008d8bfee1"}, + {file = "scs-3.2.7.post2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bc46fef9743d4629337382f034fda92dfce338659e8377afae674517b7d8345f"}, + {file = "scs-3.2.7.post2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f92e925d89004276a449850926a45536f75c03cab701b5e758b1a7efa119ba08"}, + {file = "scs-3.2.7.post2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:640faf61f85b933fdfc3d33d7ce4f0049b082b245e82d2d6a8c2c54aa0b7f540"}, + {file = "scs-3.2.7.post2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a520c9bef84eee734df0da3e5e06aa9192d3be34cd5e6d4221cc01f4d09b20c0"}, + {file = "scs-3.2.7.post2-cp312-cp312-win_amd64.whl", hash = "sha256:2995d4099943c3fd754b3e39fe178a9c03dcb9c7d84b40f64ac5eb26d8d6085a"}, + {file = "scs-3.2.7.post2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aaa3753e82250913e17c792e7ca7eb0bde03ac41200923f3dfd3f6bd5ec6f308"}, + {file = "scs-3.2.7.post2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:08e9c20b482c03f292b3da7ce4cbddb2697508ffd747304564868e87da7cb4b2"}, + {file = "scs-3.2.7.post2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56af9310bd2d000c45d7829e2935b5445480ea6bcc6091c58d4e3ab2a94125be"}, + {file = "scs-3.2.7.post2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:ec6e7bdb18d4b84c7f56f94db445ec0c43deec5aa659201467aa85b2f64b8123"}, + {file = "scs-3.2.7.post2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:91316903b2ea625990abe18bb92e8ce63536e5eafb9623ecf1cb199fb05ea574"}, + {file = "scs-3.2.7.post2-cp313-cp313-win_amd64.whl", hash = "sha256:a2c48cd19e39bf87dae0b20a289fff44930458fc2ca2afa0f899058dc41e5545"}, + {file = "scs-3.2.7.post2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1efca4a10fca530b22ded7bdbca004059e047e2c97a5023d5b7d5146897a7d8a"}, + {file = "scs-3.2.7.post2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:604abfabdfd4a14389144791b43e1ee22507ad1d0bde27a52908166f64f1ab96"}, + {file = "scs-3.2.7.post2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:d17f6258d58a430acef79aa4f004e6ded323724443baed05eaa73fc4cfa40c27"}, + {file = "scs-3.2.7.post2-cp37-cp37m-win_amd64.whl", hash = "sha256:de11c855577eb6f695ba93088d47c348858e7c34812139a3c532ebb36bd2d81d"}, + {file = "scs-3.2.7.post2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:900ccd6040f635ef6869779d70ba7260a73a0b8bcc9eb3e5eac55f54d6611044"}, + {file = "scs-3.2.7.post2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c4fd9b7bd328d1d432d4fbb86054982a1e5c2aa589394c8257bd5f67ae84ea51"}, + {file = "scs-3.2.7.post2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:746a3ee4f9307a000c6599c6e3067a0a377f3902c36e6a7c7ea01ee040b06f54"}, + {file = "scs-3.2.7.post2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:b5f974c29c40eab2bf12b273c00daa7cc8011a2628c5397e3c61ac6b32ab9485"}, + {file = "scs-3.2.7.post2-cp38-cp38-win_amd64.whl", hash = "sha256:05da761821a14b8ebe54427510cbe10722b3433db4e953acd7a067893e955781"}, + {file = "scs-3.2.7.post2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ed80e841680d62a3c3b4e5757852f88df19ca6ef85bd61f7abaefb64994cfd04"}, + {file = "scs-3.2.7.post2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93de54f8acf83d224e007babfa410823838b28dc4a2d2c964396b52e13b78c61"}, + {file = "scs-3.2.7.post2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3562d84b6187959f9c7bcf2ad254e82a6674593729c4d85917d2f8536f89f2b2"}, + {file = "scs-3.2.7.post2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:f9d523d91904e2fba13ae0348789badd3270bba329208126d5457869e0180da2"}, + {file = "scs-3.2.7.post2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4a30b9d9bdcdc823acfaf5b72b7689dd699e8ab80b9dfab529628e9b2c765266"}, + {file = "scs-3.2.7.post2-cp39-cp39-win_amd64.whl", hash = "sha256:82422e7bc04300f6381afc4a6df2897e577cbe072daba29cd67856b28dba9718"}, + {file = "scs-3.2.7.post2.tar.gz", hash = "sha256:4245a4f76328cc73911f20e1414df68d41ead4bcc4a187503a9cd639b644014b"}, ] [package.dependencies] -numpy = ">=1.7" -scipy = ">=0.13.2" +numpy = "*" +scipy = "*" [[package]] name = "setuptools" -version = "68.2.2" +version = "75.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, + {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, + {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "setuptools-scm" -version = "8.0.4" +version = "8.1.0" description = "the blessed package to manage your versions by scm tags" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-scm-8.0.4.tar.gz", hash = "sha256:b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"}, - {file = "setuptools_scm-8.0.4-py3-none-any.whl", hash = "sha256:b47844cd2a84b83b3187a5782c71128c28b4c94cad8bfb871da2784a5cb54c4f"}, + {file = "setuptools_scm-8.1.0-py3-none-any.whl", hash = "sha256:897a3226a6fd4a6eb2f068745e49733261a21f70b1bb28fce0339feb978d9af3"}, + {file = "setuptools_scm-8.1.0.tar.gz", hash = "sha256:42dea1b65771cba93b7a515d65a65d8246e560768a66b9106a592c8e7f26c8a7"}, ] [package.dependencies] packaging = ">=20" setuptools = "*" -typing-extensions = "*" [package.extras] -docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] +docs = ["entangled-cli (>=2.0,<3.0)", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] rich = ["rich"] -test = ["build", "pytest", "rich", "wheel"] +test = ["build", "pytest", "rich", "typing-extensions", "wheel"] [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] name = "tqdm" -version = "4.66.1" +version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, - {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "trx-python" +version = "0.3" +description = "Experiments with new file format for tractography" +optional = false +python-versions = ">=3.8" +files = [ + {file = "trx_python-0.3-py3-none-any.whl", hash = "sha256:b00efb1024022a7835cc8b36e024a4ea575f19ce3fae81deb50b709fc8abcb49"}, + {file = "trx_python-0.3.tar.gz", hash = "sha256:193e3282eaf03610c7e1b848aec04ddb9498fad3a7b684b30ca358e06751fbfd"}, +] + +[package.dependencies] +deepdiff = "*" +nibabel = ">=5" +numpy = ">=1.22" +setuptools-scm = "*" + +[package.extras] +all = ["astroid (==2.15.8)", "flake8", "numpydoc", "psutil", "pydata-sphinx-theme", "pytest (>=7)", "pytest-console-scripts (>=0)", "sphinx", "sphinx-autoapi"] +doc = ["astroid (==2.15.8)", "numpydoc", "pydata-sphinx-theme", "sphinx", "sphinx-autoapi"] +test = ["flake8", "psutil", "pytest (>=7)", "pytest-console-scripts (>=0)"] + [[package]] name = "typing-extensions" -version = "4.8.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [metadata] lock-version = "2.0" -python-versions = ">=3.11, <4.0" -content-hash = "3bae969f933471e95154b83aa690405a5379de1358aa6c31c20f0e4e4d0bcdd4" +python-versions = ">=3.12, <4.0" +content-hash = "5ab05dad4d959bc77cd144636991501995ee9f7e6ef1a46a8b55c81633a509e7" diff --git a/pydesigner/Tensor_Fit_Guide.ipynb b/pydesigner/Tensor_Fit_Guide.ipynb index ff04752d..163d5982 100644 --- a/pydesigner/Tensor_Fit_Guide.ipynb +++ b/pydesigner/Tensor_Fit_Guide.ipynb @@ -24,12 +24,10 @@ "metadata": {}, "outputs": [], "source": [ - "import nibabel as nib\n", - "import numpy as np\n", - "from fitting import dwipy as dp \n", + "import os\n", + "\n", "import matplotlib.pyplot as plt\n", - "import time\n", - "import os" + "from fitting import dwipy as dp" ] }, { @@ -49,8 +47,8 @@ "metadata": {}, "outputs": [], "source": [ - "niiPath = '/Users/sid/Downloads/MUS_C_001/out/preprocessed_dwi.nii'\n", - "savePath = '/Users/sid/Downloads/MUS_C_001/out/expit2'" + "niiPath = \"/Users/sid/Downloads/MUS_C_001/out/preprocessed_dwi.nii\"\n", + "savePath = \"/Users/sid/Downloads/MUS_C_001/out/expit2\"" ] }, { @@ -133,19 +131,19 @@ } ], "source": [ - "fig = plt.figure(figsize=(18, 16), dpi= 80)\n", - "img1 = fig.add_subplot(1,3,1)\n", - "img1.imshow(myimage.img[:,:,30,0]) # Plot first volume, slice 30 (B0)\n", - "img1.title.set_text('B0')\n", - "img1.axis('off')\n", - "img2 = fig.add_subplot(1,3,2)\n", - "img2.imshow(myimage.img[:,:,30,10]) # Plot 10th volume, slice 30 (B1000)\n", - "img2.title.set_text('B1000')\n", - "img2.axis('off')\n", - "img3 = fig.add_subplot(1,3,3)\n", - "img3.imshow(myimage.img[:,:,30,60]) # Plot 70th volume, slice 30 (B2000)\n", - "img3.title.set_text('B2000')\n", - "img3.axis('off')" + "fig = plt.figure(figsize=(18, 16), dpi=80)\n", + "img1 = fig.add_subplot(1, 3, 1)\n", + "img1.imshow(myimage.img[:, :, 30, 0]) # Plot first volume, slice 30 (B0)\n", + "img1.title.set_text(\"B0\")\n", + "img1.axis(\"off\")\n", + "img2 = fig.add_subplot(1, 3, 2)\n", + "img2.imshow(myimage.img[:, :, 30, 10]) # Plot 10th volume, slice 30 (B1000)\n", + "img2.title.set_text(\"B1000\")\n", + "img2.axis(\"off\")\n", + "img3 = fig.add_subplot(1, 3, 3)\n", + "img3.imshow(myimage.img[:, :, 30, 60]) # Plot 70th volume, slice 30 (B2000)\n", + "img3.title.set_text(\"B2000\")\n", + "img3.axis(\"off\")" ] }, { @@ -185,7 +183,7 @@ } ], "source": [ - "outliers, dt_est = myimage.irlls() # Produce 4D outlier map" + "outliers, dt_est = myimage.irlls() # Produce 4D outlier map" ] }, { @@ -225,19 +223,19 @@ } ], "source": [ - "fig = plt.figure(figsize=(18, 16), dpi= 80)\n", - "img1 = fig.add_subplot(1,3,1)\n", - "img1.imshow(outliers[:,:,30,0]) # Plot first volume, slice 30 (B0)\n", - "img1.title.set_text('B0')\n", - "img1.axis('off')\n", - "img2 = fig.add_subplot(1,3,2)\n", - "img2.imshow(outliers[:,:,30,10]) # Plot 10th volume, slice 30 (B1000)\n", - "img2.title.set_text('B1000')\n", - "img2.axis('off')\n", - "img3 = fig.add_subplot(1,3,3)\n", - "img3.imshow(outliers[:,:,30,60]) # Plot 100th volume, slice 30 (B2000)\n", - "img3.title.set_text('B2000')\n", - "img3.axis('off')" + "fig = plt.figure(figsize=(18, 16), dpi=80)\n", + "img1 = fig.add_subplot(1, 3, 1)\n", + "img1.imshow(outliers[:, :, 30, 0]) # Plot first volume, slice 30 (B0)\n", + "img1.title.set_text(\"B0\")\n", + "img1.axis(\"off\")\n", + "img2 = fig.add_subplot(1, 3, 2)\n", + "img2.imshow(outliers[:, :, 30, 10]) # Plot 10th volume, slice 30 (B1000)\n", + "img2.title.set_text(\"B1000\")\n", + "img2.axis(\"off\")\n", + "img3 = fig.add_subplot(1, 3, 3)\n", + "img3.imshow(outliers[:, :, 30, 60]) # Plot 100th volume, slice 30 (B2000)\n", + "img3.title.set_text(\"B2000\")\n", + "img3.axis(\"off\")" ] }, { @@ -273,7 +271,7 @@ } ], "source": [ - "myimage.fit(constraints=[0,1,0])" + "myimage.fit(constraints=[0, 1, 0])" ] }, { @@ -346,22 +344,22 @@ } ], "source": [ - "print('This is a ' + myimage.tensorType().upper() + ' image')\n", + "print(\"This is a \" + myimage.tensorType().upper() + \" image\")\n", "\n", "DT, KT = myimage.tensorReorder(myimage.tensorType())\n", "\n", - "print('Shape of DT tensor is ' + str(DT.shape))\n", - "print('Shape of KT tensor is ' + str(KT.shape))\n", + "print(\"Shape of DT tensor is \" + str(DT.shape))\n", + "print(\"Shape of KT tensor is \" + str(KT.shape))\n", "\n", - "fig = plt.figure(figsize=(18, 16), dpi= 80)\n", - "img1 = fig.add_subplot(1,2,1)\n", - "img1.imshow(DT[:,:,30,1]) \n", - "img1.title.set_text('DT 2 2')\n", - "img1.axis('off')\n", - "img2 = fig.add_subplot(1,2,2)\n", - "img2.imshow(KT[:,:,30, 7]) \n", - "img2.title.set_text('K 2 2 2 2')\n", - "img2.axis('off')" + "fig = plt.figure(figsize=(18, 16), dpi=80)\n", + "img1 = fig.add_subplot(1, 2, 1)\n", + "img1.imshow(DT[:, :, 30, 1])\n", + "img1.title.set_text(\"DT 2 2\")\n", + "img1.axis(\"off\")\n", + "img2 = fig.add_subplot(1, 2, 2)\n", + "img2.imshow(KT[:, :, 30, 7])\n", + "img2.title.set_text(\"K 2 2 2 2\")\n", + "img2.axis(\"off\")" ] }, { @@ -421,7 +419,7 @@ } ], "source": [ - "myimage.akccorrect(akc_out=akc_out, window=7, connectivity='all')\n", + "myimage.akccorrect(akc_out=akc_out, window=7, connectivity=\"all\")\n", "mk, rk, ak, kfa, mkt, trace = myimage.extractDKI()" ] }, @@ -449,28 +447,28 @@ "metadata": {}, "outputs": [], "source": [ - "mdPath = os.path.join(savePath, 'MD.nii')\n", - "rdPath = os.path.join(savePath, 'RD.nii')\n", - "adPath = os.path.join(savePath, 'AD.nii')\n", - "faPath = os.path.join(savePath, 'FA.nii')\n", - "fePath = os.path.join(savePath, 'FE.nii')\n", - "tracePath = os.path.join(savePath, 'Trace.nii')\n", - "mkPath = os.path.join(savePath, 'MK.nii')\n", - "rkPath = os.path.join(savePath, 'RK.nii')\n", - "akPath = os.path.join(savePath, 'AK.nii')\n", - "outlierPath = os.path.join(savePath, 'Outliers_IRLLS.nii')\n", - "akcPath = os.path.join(savePath, 'Outliers_AKC.nii')\n", - "kfaPath = akPath = os.path.join(savePath, 'KFA.nii')\n", - "mktPath = os.path.join(savePath, 'MKT.nii')\n", - "dtPath = os.path.join(savePath, 'DT.nii')\n", - "ktPath = os.path.join(savePath, 'KT.nii')\n", - "awfPath = os.path.join(savePath, 'wmti_awf.nii')\n", - "easadPath = os.path.join(savePath, 'wmti_eas_ad.nii')\n", - "easrdPath = os.path.join(savePath, 'wmti_eas_rd.nii')\n", - "eastortPath = os.path.join(savePath, 'wmti_eas_tort.nii')\n", - "iasadPath = os.path.join(savePath, 'wmti_ias_ad.nii')\n", - "iasrdPath = os.path.join(savePath, 'wmti_ias_rd.nii')\n", - "iastortPath = os.path.join(savePath, 'wmti_ias_tort.nii')\n", + "mdPath = os.path.join(savePath, \"MD.nii\")\n", + "rdPath = os.path.join(savePath, \"RD.nii\")\n", + "adPath = os.path.join(savePath, \"AD.nii\")\n", + "faPath = os.path.join(savePath, \"FA.nii\")\n", + "fePath = os.path.join(savePath, \"FE.nii\")\n", + "tracePath = os.path.join(savePath, \"Trace.nii\")\n", + "mkPath = os.path.join(savePath, \"MK.nii\")\n", + "rkPath = os.path.join(savePath, \"RK.nii\")\n", + "akPath = os.path.join(savePath, \"AK.nii\")\n", + "outlierPath = os.path.join(savePath, \"Outliers_IRLLS.nii\")\n", + "akcPath = os.path.join(savePath, \"Outliers_AKC.nii\")\n", + "kfaPath = akPath = os.path.join(savePath, \"KFA.nii\")\n", + "mktPath = os.path.join(savePath, \"MKT.nii\")\n", + "dtPath = os.path.join(savePath, \"DT.nii\")\n", + "ktPath = os.path.join(savePath, \"KT.nii\")\n", + "awfPath = os.path.join(savePath, \"wmti_awf.nii\")\n", + "easadPath = os.path.join(savePath, \"wmti_eas_ad.nii\")\n", + "easrdPath = os.path.join(savePath, \"wmti_eas_rd.nii\")\n", + "eastortPath = os.path.join(savePath, \"wmti_eas_tort.nii\")\n", + "iasadPath = os.path.join(savePath, \"wmti_ias_ad.nii\")\n", + "iasrdPath = os.path.join(savePath, \"wmti_ias_rd.nii\")\n", + "iastortPath = os.path.join(savePath, \"wmti_ias_tort.nii\")\n", "dp.writeNii(md, myimage.hdr, mdPath)\n", "dp.writeNii(rd, myimage.hdr, rdPath)\n", "dp.writeNii(ad, myimage.hdr, adPath)\n", @@ -568,15 +566,15 @@ "source": [ "# fig = plt.figure(figsize=(18, 16), dpi= 80)\n", "# img1 = fig.add_subplot(1,3,1)\n", - "# img1.imshow(fa[:,:,30]) \n", + "# img1.imshow(fa[:,:,30])\n", "# img1.title.set_text('FA')\n", "# img1.axis('off')\n", "# img2 = fig.add_subplot(1,3,2)\n", - "# img2.imshow(md[:,:,30]) \n", + "# img2.imshow(md[:,:,30])\n", "# img2.title.set_text('MD')\n", "# img2.axis('off')\n", "# img3 = fig.add_subplot(1,3,3)\n", - "# img3.imshow(mk_clipped[:,:,30]) \n", + "# img3.imshow(mk_clipped[:,:,30])\n", "# img3.title.set_text('MK')\n", "# img3.axis('off')" ] diff --git a/pydesigner/__init__.py b/pydesigner/__init__.py index e69de29b..9dd81be4 100644 --- a/pydesigner/__init__.py +++ b/pydesigner/__init__.py @@ -0,0 +1,3 @@ +from importlib.metadata import version + +__version__ = version(__name__) diff --git a/pydesigner/fitting/dwipy.py b/pydesigner/fitting/dwipy.py index b0de0c5d..4fc120a2 100644 --- a/pydesigner/fitting/dwipy.py +++ b/pydesigner/fitting/dwipy.py @@ -14,6 +14,7 @@ from tqdm import tqdm from ..plotting import outlierplot +from ..system.models import input_path_validator from ..system.utils import highprecisionexp, highprecisionpower, vectorize, writeNii from ..tractography import dsistudio, odf, sphericalsampling from . import dwi_fnames, dwidirs @@ -77,7 +78,8 @@ def __init__( all physically present workers). """ if not os.path.exists(imPath): - raise OSError("Input image {} not found".format(imPath)) + msg = f"Input image ({imPath}) not found." + raise FileNotFoundError(msg) self.hdr = nib.load(imPath) self.img = np.array(self.hdr.dataobj) truncateIdx = np.logical_or(np.isnan(self.img), (self.img < minZero)) @@ -87,17 +89,11 @@ def __init__( # Remove extension from NIFTI filename fName = os.path.splitext(file)[0] if bvecPath: - if not isinstance(bvecPath, str): - raise TypeError("Path to .bvec is not specified " "as a string") - if not os.path.exists(bvecPath): - raise OSError("Path to .bvec does not exist: " "{}".format(bvecPath)) + input_path_validator(bvecPath, ".bvec") else: bvecPath = os.path.join(path, fName + ".bvec") if bvalPath: - if not isinstance(bvalPath, str): - raise TypeError("Path to .bval is not specified " "as a string") - if not os.path.exists(bvalPath): - raise OSError("Path to .bvec does not exist: " "{}".format(bvalPath)) + input_path_validator(bvalPath, ".bval") else: bvalPath = os.path.join(path, fName + ".bval") if os.path.exists(bvalPath) and os.path.exists(bvecPath): @@ -113,7 +109,11 @@ def __init__( # number of DWI volumes. [Gx Gy Gz Bval] self.grad = np.c_[np.transpose(bvecs), bvals] else: - raise OSError("Unable to locate BVAL or BVEC files") + msg = "Unable to locate BVAL or BVEC files" + msg += "\nPaths being used are:" + msg += f"\nBVAL: {bvalPath}" + msg += f"\nBVEC: {bvecPath}" + raise OSError(msg) if mask is None: maskPath = os.path.join(path, "brain_mask.nii") else: @@ -125,13 +125,16 @@ def __init__( else: self.mask = np.ones((self.img.shape[0], self.img.shape[1], self.img.shape[2]), order="F") self.maskStatus = False - print("No brain mask supplied") - tqdm.write("Image " + fName + ".nii loaded successfully") + msg = "No brain mask supplied" + print(msg) + tqdm.write(f"Image {fName}.nii loaded successfully") if nthreads is not None: if not isinstance(nthreads, int): - raise TypeError("Variable nthreads need to be an integer") + msg = "Variable nthreads need to be an integer" + raise TypeError(msg) if nthreads < -1 or nthreads == 0: - raise ValueError("Variable nthreads is a positive integer or -1") + msg = "Variable nthreads is a positive integer or -1" + raise ValueError(msg) if nthreads is None: self.workers = -1 else: @@ -184,7 +187,7 @@ def maxBval(self) -> float: a = dwi.maxBval(), where dwi is the DWI class object. """ - return max(np.unique(self.grad[:, 3])).astype(int) + return max(np.unique(self.grad[:, 3])) def maxDTIBval(self) -> float: """Returns the maximum DTI b-value in a dataset. @@ -200,7 +203,7 @@ def maxDTIBval(self) -> float: """ exclude_idx = self.grad[:, 3] <= th.__maxdtibval__ - return max(np.unique(self.grad[exclude_idx, 3])).astype(int) + return max(np.unique(self.grad[exclude_idx, 3])) def maxDKIBval(self) -> float: """Returns the maximum DKI b-value in a dataset. @@ -216,7 +219,7 @@ def maxDKIBval(self) -> float: """ exclude_idx = self.grad[:, 3] <= th.__maxdkibval__ - return max(np.unique(self.grad[exclude_idx, 3])).astype(int) + return max(np.unique(self.grad[exclude_idx, 3])) def maxFBIBval(self) -> float: """Returns the maximum FBI b-value in a dataset. @@ -232,7 +235,7 @@ def maxFBIBval(self) -> float: """ exclude_idx = self.grad[:, 3] <= th.__maxfbibval__ - return max(np.unique(self.grad[exclude_idx, 3])).astype(int) + return max(np.unique(self.grad[exclude_idx, 3])) def idxb0(self) -> np.ndarray[bool]: """Returns the index of all B-zeros according to bvals @@ -332,7 +335,7 @@ def tensorType(self) -> List[str]: if "fbi" in type and "dki" in type: type.append("fbwm") if not type: - raise ValueError("tensortype: Error in determining maximum " "BVAL") + raise ValueError("tensortype: Error in determining maximum BVAL") return type def isdti(self) -> bool: @@ -519,7 +522,7 @@ def createTensorOrder(self, order: Union[int, None] = None) -> Tuple[np.ndarray[ - 1 ) else: - raise ValueError("createTensorOrder: Please enter valid " "order values (2 or 4).") + raise ValueError("createTensorOrder: Please enter valid order values (2 or 4).") return cnt, ind def fibonacciSphere(self, samples: int = 1, randomize: bool = True) -> np.ndarray[float]: @@ -1015,7 +1018,8 @@ def createConstraints(self, constraints: List[int] = [0, 1, 0]) -> np.ndarray[fl axis=0, ) else: - print('Invalid constraints. Please use format "[0, 0, 0]"') + msg = "Invalid contraints. Please use format [0, 0, 0]" + raise ValueError(msg) return C def extractDTI( @@ -1099,11 +1103,7 @@ def extractDTI( md = (l1 + l2 + l3) / 3 rd = (l2 + l3) / 2 ad = l1 - fa = ( - np.sqrt(1 / 2) - * np.sqrt((l1 - l2) ** 2 + (l2 - l3) ** 2 + (l3 - l1) ** 2) - / np.sqrt(l1**2 + l2**2 + l3**2) - ) + fa = np.sqrt(1 / 2) * np.sqrt((l1 - l2) ** 2 + (l2 - l3) ** 2 + (l3 - l1) ** 2) / np.sqrt(l1**2 + l2**2 + l3**2) fe = np.abs(np.stack((fa * v1[:, :, :, 0], fa * v1[:, :, :, 1], fa * v1[:, :, :, 2]), axis=3)) trace = vectorize(trace.T, self.mask) return md, rd, ad, fa, fe, trace @@ -1192,7 +1192,7 @@ def optimal_lmax(self) -> int: l_max suitable for DWI. """ if not self.isfbi(): - raise Exception("Input DWI is not an " "FBI or HARDI acquisiton. Cannot compute " "l_max.") + raise Exception("Input DWI is not an FBI or HARDI acquisiton. Cannot compute l_max.") fbi_vols = np.count_nonzero(self.grad[self.idxfbi(), -1]) l_max = 0 vols = (l_max + 1) * (l_max / 2 + 1) @@ -1370,9 +1370,7 @@ def __costCalculator(grid, BT, GT, b0, IMG, iDT, iaDT, zeta, shB, Pl0, g2l_fa_R_ (-BT[b] * (1 - awf) ** -1) * np.diag((GT[b].dot((iDT - (awf**3 * zeta**-2) * iaDT).dot(GT[b].T)))) ) - ) * ( - 1 - awf - ) # Eq. 3 FBWM paper + ) * (1 - awf) # Eq. 3 FBWM paper Sa = (2 * np.pi * b0 * zeta * np.sqrt(np.pi / BT[b])) * ( shB[b].dot((Pl0 * g2l_fa_R_b[b, idx, :][0] * clm)) ) # Eq. 4 FBM paper @@ -1557,8 +1555,7 @@ def fbi_helper( gamma((l_num + 1) / 2 + int_grid) * gamma(l_num + (3 / 2)) * ( - (-BT[b] * f_grid[idx_hyper] ** 2 * zeta**-2) - * np.ones((1, len(f_grid[idx_hyper]))) + (-BT[b] * f_grid[idx_hyper] ** 2 * zeta**-2) * np.ones((1, len(f_grid[idx_hyper]))) ).T ** int_grid / (factorial(int_grid) * gamma(l_num + (3 / 2) + int_grid) * gamma((l_num + 1) / 2)) @@ -1580,11 +1577,7 @@ def fbi_helper( idx_Y = 0 for l_num in degs[::2]: g2l_fa_R_large[idx_Y : idx_Y + (2 * l_num + 1), np.squeeze(~idx_hyper)] = npm.repmat( - ( - np.exp( - -l_num // 2 * (l_num + 1) / ((2 * BT[b] * (f_grid[~idx_hyper] ** 2 * zeta**-2))) - ) - ), + (np.exp(-l_num // 2 * (l_num + 1) / (2 * BT[b] * (f_grid[~idx_hyper] ** 2 * zeta**-2)))), (2 * l_num + 1), 1, ) # Eq. 20 FBI paper @@ -1677,7 +1670,7 @@ def fbi_helper( "Please run DWI.fit(constraints) before running DWI.fbi()." ) if l_max % 2 != 0: - raise Exception("Please provide l_max as a postive " "and even integer") + raise Exception("Please provide l_max as a postive and even integer") if l_max > self.optimal_lmax(): print( "[WARNING]: l_max value provided ({}) is " @@ -1887,7 +1880,13 @@ def fbi_helper( def extractWMTI( self, - ) -> Tuple[np.ndarray[float], np.ndarray[float], np.ndarray[float], np.ndarray[float], np.ndarray[float],]: + ) -> Tuple[ + np.ndarray[float], + np.ndarray[float], + np.ndarray[float], + np.ndarray[float], + np.ndarray[float], + ]: """Returns white matter tract integrity (WMTI) parameters. Warning: this can only be run after fitting and DWI.extractDTI(). @@ -2167,8 +2166,7 @@ def akccorrect(self, akc_out: np.ndarray[bool], window: int = 3, connectivity: s connLimit = 24 else: raise Exception( - 'Connectivity choice "{}" is invalid. Please ' - 'enter either "all" or "face".'.format(connectivity) + 'Connectivity choice "{}" is invalid. Please enter either "all" or "face".'.format(connectivity) ) nVoil = np.sum(patchViol) @@ -2235,13 +2233,13 @@ def irlls( # assert('option: Excludeb0 should be set to True or False') if maxiter < 1 or maxiter > 200: - assert "option: Maxiter should be set to a value between 1 " "and 200" + assert "option: Maxiter should be set to a value between 1 and 200" if convcrit < 0 or convcrit > 1: - assert "option: Maxiter should be set to a value between 1 " "and 200" + assert "option: Maxiter should be set to a value between 1 and 200" if not (mode == "DKI" or mode == "DTI"): assert "Mode should be set to DKI or DTI" if leverage < 0 or leverage > 1: - assert "option: Leverage should be set to a value between 0 " "and 1" + assert "option: Leverage should be set to a value between 0 and 1" if bounds < 1: assert "option: Bounds should be set to a value >= 1" exclude_idx = np.ones_like(self.grad[:, 3], dtype=bool) @@ -2616,7 +2614,7 @@ def tensorReorder(self, dwiType: str) -> Tuple[np.ndarray[float], np.ndarray[flo 20 14 """ if self.dt is None: - raise Exception("Please run dwi.fit() to generate a tensor " "prior to reordering tensors.") + raise Exception("Please run dwi.fit() to generate a tensor prior to reordering tensors.") if dwiType == "dti": dt = np.zeros((6, self.dt.shape[1])) @@ -2700,6 +2698,7 @@ def fit_regime( res: str = "med", n_fibers: int = 5, mask: Union[str, None] = None, + window: bool = False, nthreads: Union[int, None] = None, ) -> None: """Performs the entire tensor fitting regime and writes out maps. @@ -2743,6 +2742,9 @@ def fit_regime( mask : str Path to brain mask (Default: None) + window : bool + Window metric map within biological limits + (Default: False) nthreads : int Number of workers to use in processing. Default value uses all available workers. @@ -2833,10 +2835,10 @@ def fit_regime( # DTI Parameters if img.isdti(): md, rd, ad, fa, fe, trace = img.extractDTI() - writeNii(md, img.hdr, op.join(output, fname_dti["md"])) - writeNii(rd, img.hdr, op.join(output, fname_dti["rd"])) - writeNii(ad, img.hdr, op.join(output, fname_dti["ad"])) - writeNii(fa, img.hdr, op.join(output, fname_dti["fa"])) + writeNii(md, img.hdr, op.join(output, fname_dti["md"]), range=th.__md__, clip=window) + writeNii(rd, img.hdr, op.join(output, fname_dti["rd"]), range=th.__rd__, clip=window) + writeNii(ad, img.hdr, op.join(output, fname_dti["ad"]), range=th.__ad__, clip=window) + writeNii(fa, img.hdr, op.join(output, fname_dti["fa"]), range=th.__fa__, clip=window) writeNii(fe, img.hdr, op.join(output, fname_dti["fe"])) writeNii(trace, img.hdr, op.join(output, fname_dti["trace"])) dtimodel = odf.odfmodel(dt=op.join(output, fname_tensor["DT"]), mask=mask, l_max=2, res=res) @@ -2859,19 +2861,19 @@ def fit_regime( if img.isdki(): # DKI Parameters mk, rk, ak, kfa, mkt, trace = img.extractDKI() - writeNii(mk, img.hdr, op.join(output, fname_dki["mk"])) - writeNii(rk, img.hdr, op.join(output, fname_dki["rk"])) - writeNii(ak, img.hdr, op.join(output, fname_dki["ak"])) - writeNii(kfa, img.hdr, op.join(output, fname_dki["kfa"])) + writeNii(mk, img.hdr, op.join(output, fname_dki["mk"]), range=th.__mk__, clip=window) + writeNii(rk, img.hdr, op.join(output, fname_dki["rk"]), range=th.__rk__, clip=window) + writeNii(ak, img.hdr, op.join(output, fname_dki["ak"]), range=th.__ak__, clip=window) + writeNii(kfa, img.hdr, op.join(output, fname_dki["kfa"]), range=th.__kfa__, clip=window) writeNii(mkt, img.hdr, op.join(output, fname_dki["mkt"])) writeNii(trace, img.hdr, op.join(output, fname_dki["trace"])) # WMTI Parameters awf, eas_ad, eas_rd, eas_tort, ias_da = img.extractWMTI() - writeNii(awf, img.hdr, op.join(output, fname_wmti["awf"])) - writeNii(eas_ad, img.hdr, op.join(output, fname_wmti["eas_ad"])) - writeNii(eas_rd, img.hdr, op.join(output, fname_wmti["eas_rd"])) - writeNii(eas_tort, img.hdr, op.join(output, fname_wmti["eas_tort"])) - writeNii(ias_da, img.hdr, op.join(output, fname_wmti["ias_da"])) + writeNii(awf, img.hdr, op.join(output, fname_wmti["awf"]), range=th.__wawf__, clip=window) + writeNii(eas_ad, img.hdr, op.join(output, fname_wmti["eas_ad"]), range=th.__eas_ad__, clip=window) + writeNii(eas_rd, img.hdr, op.join(output, fname_wmti["eas_rd"]), range=th.__eas_rd__, clip=window) + writeNii(eas_tort, img.hdr, op.join(output, fname_wmti["eas_tort"]), range=th.__tort__, clip=window) + writeNii(ias_da, img.hdr, op.join(output, fname_wmti["ias_da"]), range=th.__ias_da__, clip=window) dkimodel = odf.odfmodel( dt=op.join(output, fname_tensor["DT"]), kt=op.join(output, fname_tensor["KT"]), @@ -2920,16 +2922,16 @@ def fit_regime( min_cost, min_cost_fn, ) = img.fbi(l_max=l_max, fbwm=True, rectify=rectify) - writeNii(zeta, img.hdr, op.join(output, fname_fbi["zeta"])) - writeNii(faa, img.hdr, op.join(output, fname_fbi["faa"])) + writeNii(zeta, img.hdr, op.join(output, fname_fbi["zeta"]), range=th.__zeta__, clip=window) + writeNii(faa, img.hdr, op.join(output, fname_fbi["faa"]), range=th.__faa__, clip=window) writeNii(np.real(sph), img.hdr, op.join(output, fname_fbi["odf"])) writeNii(np.real(sph_mrtrix), img.hdr, op.join(output, fname_fbi["odf_mrtrix"])) - writeNii(min_awf, img.hdr, op.join(output, fname_fbi["awf"])) - writeNii(Da, img.hdr, op.join(output, fname_fbi["Da"])) - writeNii(De_mean, img.hdr, op.join(output, fname_fbi["De_mean"])) - writeNii(De_ax, img.hdr, op.join(output, fname_fbi["De_ax"])) - writeNii(De_rad, img.hdr, op.join(output, fname_fbi["De_rad"])) - writeNii(De_fa, img.hdr, op.join(output, fname_fbi["fae"])) + writeNii(min_awf, img.hdr, op.join(output, fname_fbi["awf"]), range=th.__fawf__, clip=window) + writeNii(Da, img.hdr, op.join(output, fname_fbi["Da"]), range=th.__da__, clip=window) + writeNii(De_mean, img.hdr, op.join(output, fname_fbi["De_mean"]), range=th.__de_mean__, clip=window) + writeNii(De_ax, img.hdr, op.join(output, fname_fbi["De_ax"]), range=th.__de__ax__, clip=window) + writeNii(De_rad, img.hdr, op.join(output, fname_fbi["De_rad"]), range=th.__de_rad__, clip=window) + writeNii(De_fa, img.hdr, op.join(output, fname_fbi["fae"]), range=th.__de_fa__, clip=window) writeNii(min_cost, img.hdr, op.join(output, fname_fbi["min_cost"])) writeNii(min_cost_fn, img.hdr, op.join(output, fname_fbi["min_cost_fn"])) dsistudio.makefib( diff --git a/pydesigner/fitting/thresholds.py b/pydesigner/fitting/thresholds.py index e6c2fb11..ce085693 100644 --- a/pydesigner/fitting/thresholds.py +++ b/pydesigner/fitting/thresholds.py @@ -9,3 +9,29 @@ __pkT__ = 0.4 # peak thresholding for white matter fiber tracking __minZero__ = 10e-8 # threshold under which all numbers are zero __dirs__ = 256 # Define number of directions to resample after computing all tensors +# DTI windows +__fa__ = [0, 1] +__md__ = [0, 5] +__rd__ = [0, 5] +__ad__ = [0, 5] +# DKI windows +__kfa__ = [0, 1] +__mk__ = [0, 10] +__rk__ = [0, 10] +__ak__ = [0, 10] +# WMTI windows +__wawf__ = [0, 1] +__eas_rd__ = [0, 5] +__eas_ad__ = [0, 5] +__tort__ = [0, 100] +__ias_da__ = [0, 5] +# FBI windows +__zeta__ = [0, 10] +__faa__ = [0, 1] +# FBWM windows +__fawf__ = [0, 1] +__da__ = [0, 5] +__de_mean__ = [0, 5] +__de_rad__ = [0, 5] +__de__ax__ = [0, 5] +__de_fa__ = [0, 1] diff --git a/pydesigner/main.py b/pydesigner/main.py index 6b7070b2..4d5d08ed 100644 --- a/pydesigner/main.py +++ b/pydesigner/main.py @@ -1,9 +1,9 @@ -"""Runs the PyDesigner pipeline -""" +"""Runs the PyDesigner pipeline""" import argparse # ArgumentParser, add_argument import glob # recursive file search import json +import logging import os # mkdir import os.path as op # path import shutil # which, rmtree @@ -13,19 +13,25 @@ import numpy as np # array, ndarray +from . import __version__ from .fitting import dwipy as dp -from .info import __version__ from .plotting import motionplot, snrplot from .postprocessing import filters from .preprocessing import mrinfoutil, mrpreproc, util +log = logging.getLogger(__name__) +log.setLevel(logging.DEBUG) +console_handler = logging.StreamHandler() +console_handler.setLevel(logging.INFO) +log.addHandler(console_handler) + DWIFile = util.DWIFile DWIParser = util.DWIParser # Locate mrtrix3 via which-ing dwidenoise dwidenoise_location = shutil.which("dwidenoise") if dwidenoise_location is None: - raise Exception("Cannot find mrtrix3, please see " "https://github.com/m-ama/PyDesigner/wiki" " to troubleshoot.") + raise OSError("Cannot find mrtrix3, please see https://github.com/m-ama/PyDesigner/wiki to troubleshoot.") # Extract mrtrix3 path from dwidenoise_location mrtrix3path = op.dirname(dwidenoise_location) @@ -33,7 +39,7 @@ # Locate FSL via which-ing fsl fsl_location = shutil.which("fsl") if fsl_location is None: - raise Exception("Cannot find FSL, please see " "https://github.com/m-ama/PyDesigner/wiki" " to troubleshoot.") + raise OSError("Cannot find FSL, please see https://github.com/m-ama/PyDesigner/wiki to troubleshoot.") # Extract FSL path from fsl_location fslpath = op.dirname(fsl_location) @@ -101,24 +107,42 @@ def main(): ) # Specify arguments below - # Mandatory parser.add_argument( "dwi", nargs="+", - help="The diffusion dataset you would like " "to process. ", + help="The diffusion dataset you would like to process. ", type=str, ) + preprocessing_control = parser.add_argument_group( + title="Preprocessing controls", + description="Fine-tune DWI preprocessing", + ) + estimation_control = parser.add_argument_group( + title="DTI/DKI/WMTI/FBI/FBWM controls", + description="Control estimation of diffusion estimation", + ) + qc_control = parser.add_argument_group( + title="QC controls", + description="Controls for QC metrics", + ) + tractography_control = parser.add_argument_group( + title="Tractography controls", description="Fine-tune tractography" + ) + program_control = parser.add_argument_group( + title="PyDesigner CLI controls", description="Change PyDesigner app behavior" + ) + # Optional - parser.add_argument( + preprocessing_control.add_argument( "-o", "--output", metavar="directory", - help="Output location. " "Default: same path as dwi.", + help="Output location. Default: same path as dwi.", type=str, ) - parser.add_argument( + preprocessing_control.add_argument( "-s", "--standard", action="store_true", @@ -127,20 +151,20 @@ def main(): "options. See Appendix:Standard pipeline steps " "for more information. ", ) - parser.add_argument( + preprocessing_control.add_argument( "-n", "--denoise", action="store_true", default=False, help="Run thermal denoising with dwidenoise.", ) - parser.add_argument( + preprocessing_control.add_argument( "--extent", metavar="n,n,n", default="5,5,5", - help="Denoising extent formatted n,n,n (forces " " denoising. " "Default: 5,5,5.", + help="Denoising extent formatted n,n,n (forces denoising. Default: 5,5,5.", ) - parser.add_argument( + preprocessing_control.add_argument( "-g", "--degibbs", action="store_true", @@ -149,14 +173,14 @@ def main(): "have full Fourier encoding. The program will check " "for you if you have a .json sidecar.", ) - parser.add_argument( + preprocessing_control.add_argument( "-u", "--undistort", action="store_true", default=False, - help="Run FSL eddy to perform image undistortion. " "NOTE: needs a --topup to run.", + help="Run FSL eddy to perform image undistortion. NOTE: needs a --topup to run.", ) - parser.add_argument( + preprocessing_control.add_argument( "--rpe_pairs", default=0, type=int, @@ -167,34 +191,34 @@ def main(): "Specfying 0 results in using all B0 pairs." "We recommend using just one pair. Default: 0", ) - parser.add_argument( + preprocessing_control.add_argument( "-z", "--smooth", action="store_true", default=False, help="Perform smoothing on the DWI data.", ) - parser.add_argument( + preprocessing_control.add_argument( "--fwhm", type=float, default=1.25, metavar="n", - help="The FWHM to use as a multiple of voxel size. " "Default 1.25", + help="The FWHM to use as a multiple of voxel size. Default 1.25", ) - parser.add_argument( + preprocessing_control.add_argument( "-r", "--rician", action="store_true", default=False, - help="Perform Rician noise correction on the data " "(requires --denoise to generate a noisemap).", + help="Perform Rician noise correction on the data (requires --denoise to generate a noisemap).", ) - parser.add_argument( + preprocessing_control.add_argument( "--nofit", action="store_true", default=False, help="Do not fit DTI or DKI tensors.", ) - parser.add_argument( + preprocessing_control.add_argument( "--akc", action="store_true", default=False, @@ -202,13 +226,13 @@ def main(): "a median filter to tensor voxels that exhibit AKC " "values of less than 2 and more than 10.", ) - parser.add_argument( + preprocessing_control.add_argument( "--nooutliers", action="store_true", default=False, - help="Do not perform outlier correction on kurtosis " "fitting metrics.", + help="Do not perform outlier correction on kurtosis fitting metrics.", ) - parser.add_argument( + preprocessing_control.add_argument( "-m", "--mask", action="store_true", @@ -217,26 +241,26 @@ def main(): "to strip skull and improve efficiency. Optionally, " "use --maskthr to specify a threshold manually.", ) - parser.add_argument( + preprocessing_control.add_argument( "--maskthr", metavar="n", default=0.25, - help="FSL bet threshold used for brain masking. " "Default: 0.25", + help="FSL bet threshold used for brain masking. Default: 0.25", ) - parser.add_argument( + preprocessing_control.add_argument( "--user_mask", metavar="path", help="Path to user-supplied brain mask.", type=str, ) - parser.add_argument( + preprocessing_control.add_argument( "-cf", "--csf_fsl", action="store_true", default=False, - help="Compute a CSF mask for CSF-excluded " "smoothing to minimize partial volume " "effects using FSL FAST.", + help="Compute a CSF mask for CSF-excluded smoothing to minimize partial volume effects using FSL FAST.", ) - parser.add_argument( + preprocessing_control.add_argument( "-cd", "--csf_adc", metavar="n", @@ -246,7 +270,7 @@ def main(): "effects using thresholding a pseudo-ADC map " "computed as ln(S0/S1000)/b1000. Default: 2", ) - parser.add_argument( + preprocessing_control.add_argument( "--reslice", metavar="x,y,z", help="Relices DWI to voxel resolution " @@ -256,15 +280,27 @@ def main(): "greater than 9 will switch from mm voxel " "reslicing to output image reslicing.", ) - parser.add_argument( + preprocessing_control.add_argument( "--interp", action="store_true", default="linear", - help="Set the interpolation to use when " - "reslicing. Choices are linear (default), " - "nearest, cubic, and sinc.", + help="Set the interpolation to use when reslicing. Choices are linear (default), nearest, cubic, and sinc.", ) - parser.add_argument( + preprocessing_control.add_argument( + "--median", + action="store_true", + default=False, + help="Performs postprocessing median filtering of " + "final maps. WARNING: Use on a case-by-case " + "basis for bad data only. When applied, the " + "filter alters the values of most voxels, so " + "it should be used with caution and avoided " + "when data quality is otherwise adequate. " + "While maps appear visually soother with " + "this flag on, they may nonetheless be less " + "accurate.", + ) + preprocessing_control.add_argument( "-te", "--multite", action="store_true", @@ -274,20 +310,23 @@ def main(): "TEs together, then extract metric values of " "each TE separately.", ) - parser.add_argument( + preprocessing_control.add_argument( + "-w", "--window", action="store_true", default=False, help="Window final metric maps within biological ranges" + ) + estimation_control.add_argument( "--fit_constraints", default="0,1,0", metavar="D>0,K>0,K < 3/(b*D)", - help="Constrain the WLLS fit. " "Default: 0,1,0.", + help="Constrain the WLLS fit. Default: 0,1,0.", ) - parser.add_argument( + estimation_control.add_argument( "--l_max", default=6, type=int, metavar="n", - help="Maximum spherical harmonic degree for " "FBI spherical harmonic expansion", + help="Maximum spherical harmonic degree for FBI spherical harmonic expansion", ) - parser.add_argument( + estimation_control.add_argument( "--no_rectify", action="store_true", default=False, @@ -296,7 +335,7 @@ def main(): "acquisitions results in degradation of FBI " "or FBWM metric maps", ) - parser.add_argument( + tractography_control.add_argument( "--t_res", type=str, default="med", @@ -304,56 +343,43 @@ def main(): "Higher resolution implies slower computation. Choose " 'between "low", "med", or "high". Default: "med"', ) - parser.add_argument( + tractography_control.add_argument( "--t_fibers", type=int, default=5, - help="The maximum number ODF maxima to extract per " "voxel for tractography. Default: 5", + help="The maximum number ODF maxima to extract per voxel for tractography. Default: 5", ) - parser.add_argument( + qc_control.add_argument( "--noqc", action="store_true", default=False, help="Disable QC saving of QC metrics", ) - parser.add_argument( - "--median", - action="store_true", - default=False, - help="Performs postprocessing median filtering of " - "final maps. WARNING: Use on a case-by-case " - "basis for bad data only. When applied, the " - "filter alters the values of most voxels, so " - "it should be used with caution and avoided " - "when data quality is otherwise adequate. " - "While maps appear visually soother with " - "this flag on, they may nonetheless be less " - "accurate.", - ) - parser.add_argument( + + program_control.add_argument( "--nthreads", type=int, default=None, - help="Number of threads to use for computation. " "Note that using too many threads will cause a slow-" "down.", + help="Number of threads to use for computation. Note that using too many threads will cause a slow-down.", ) - parser.add_argument( + program_control.add_argument( "--resume", action="store_true", - help="Continue from an aborted or partial previous " "run of pydesigner.", + help="Continue from an aborted or partial previous run of pydesigner.", ) - parser.add_argument( + program_control.add_argument( "--force", action="store_true", - help="Force overwrites of existing files. Otherwise, " "there will be an error at runtime.", + help="Force overwrites of existing files. Otherwise, there will be an error at runtime.", ) - parser.add_argument( + program_control.add_argument( "--verbose", action="store_true", help="Print out all output. This is a very messy " "option. We recommend piping output to a text file " "if you use this option.", ) - parser.add_argument( + program_control.add_argument( "--adv", action="store_true", help="Disables safety checks for advanced users who " @@ -363,10 +389,11 @@ def main(): "RUNNING WITH THIS FLAG COULD POTENTIALLY " "RESULT IN IMPRECISE AND INACCURATE RESULTS.", ) - parser.add_argument("-v", "--version", action="version", version=__version__) + program_control.add_argument("-v", "--version", action="version", version=__version__) # Use argument specification to actually get args args = parser.parse_args() + print(args) # ----------------------------------------------------------------- # Parse Input Image @@ -461,7 +488,7 @@ def main(): # Cannot run --user_mask and --mask at the same time if args.user_mask and args.mask: errmsg += "Cannot run with both --mask and --user_mask; " - errmsg += "--mask if you do not have a custom brain mask and " "--user_mask if you want to supply a mask." + errmsg += "--mask if you do not have a custom brain mask and --user_mask if you want to supply a mask." # Cannot run --csf_fsl and --csf_adc at the same time if args.csf_fsl and args.csf_adc: @@ -512,11 +539,11 @@ def main(): # Print warnings if warningmsg != "": - print(warningmsg) + log.warn(warningmsg) # If things are unsalvageable, point out all errors and quit if errmsg != "": - print(errmsg) + log.error(errmsg) # Begin keeping track of nifti files filetable = {"dwi": DWIFile(init_nii)} @@ -532,7 +559,7 @@ def main(): args.degibbs = True else: if args.degibbs and filetable["dwi"].isPartialFourier(): - print( + log.warn( "[WARNING] Given DWI is partial fourier, overriding " "--degibbs; no unringing correction will be done to " 'avoid artifacts.Use the "--adv" flag to run forced ' @@ -881,7 +908,7 @@ def main(): cmd = ["mrcalc", "-force", brainmask_out, csfmask_out, "-mult", csfmask_out] completion = subprocess.run(cmd) if completion.returncode != 0: - raise Exception("Unable to multiply CSF mask with brain " "mask. See above for errors.") + raise Exception("Unable to multiply CSF mask with brain mask. See above for errors.") # ----------------------------------------------------------------- # Smooth # ----------------------------------------------------------------- @@ -916,9 +943,9 @@ def main(): os.rename(mif_smoothing, working_path) # update command history cmdtable["smooth"] = [ - "designer.preprocessing.mrpreproc.smooth(input={}, " - "output={}, " - "fwhm={}".format(working_path, mif_smoothing, args.fwhm) + "designer.preprocessing.mrpreproc.smooth(input={}, output={}, fwhm={}".format( + working_path, mif_smoothing, args.fwhm + ) ] cmdtable["smooth"].append(mrinfoutil.commandhistory(working_path)[-1]) cmdtable["HEAD"] = cmdtable["smooth"] @@ -957,10 +984,9 @@ def main(): os.rename(mif_rician, working_path) # update command history cmdtable["rician"] = [ - "designer.preprocessing.mrpreproc." - "riciancorrect(input={}, " - "output={}, " - "noise={})".format(working_path, mif_rician, filetable["noisemap"].getFull()) + "designer.preprocessing.mrpreproc.riciancorrect(input={}, output={}, noise={})".format( + working_path, mif_rician, filetable["noisemap"].getFull() + ) ] cmdtable["rician"].append(mrinfoutil.commandhistory(working_path)[-1]) cmdtable["HEAD"] = cmdtable["rician"] @@ -1056,7 +1082,7 @@ def main(): ) snr.makeplot(path=qcpath, smooth=True, smoothfactor=3) except: # noqa: E722 - print("[WARNING] SNR plotting failed, see above. " "Proceeding with processing.") + print("[WARNING] SNR plotting failed, see above. Proceeding with processing.") # ----------------------------------------------------------------- # Write logs @@ -1114,6 +1140,7 @@ def main(): qcpath=fitqcpath, fit_constraints=fit_constraints, mask=fit_mask, + window=args.window, nthreads=args.nthreads, ) else: @@ -1132,6 +1159,7 @@ def main(): qcpath=fitqcpath, fit_constraints=fit_constraints, mask=fit_mask, + window=args.window, nthreads=args.nthreads, ) diff --git a/pydesigner/plotting/motionplot.py b/pydesigner/plotting/motionplot.py index 49de075a..1d7d7a11 100644 --- a/pydesigner/plotting/motionplot.py +++ b/pydesigner/plotting/motionplot.py @@ -24,18 +24,16 @@ def plot(input: str, output: str, voxel: Union[Tuple[float], None] = None) -> No See Also -------- - outlierplot : plots outliers from IRLLS + outlierplot : plots outliers from IRLLSp snrplot : plots DWI's SNR """ print("Plotting motion...") if not op.exists(input): raise OSError("Input file {} does not exist".format(input)) if op.isdir(output): - raise OSError( - "Output {} cannot be a directory. Please " "define the output to be an image file.".format(output) - ) + raise OSError("Output {} cannot be a directory. Please define the output to be an image file.".format(output)) if op.splitext(output)[-1] != ".png": - raise OSError("Output path {} does not indicate a PNG file" " ".format(input)) + raise OSError("Output path {} does not indicate a PNG file ".format(input)) # Load file dat = np.loadtxt(input) if dat.shape[-1] != 2: @@ -63,7 +61,7 @@ def plot(input: str, output: str, voxel: Union[Tuple[float], None] = None) -> No relbef = dat[:, 1] x = np.arange(start=1, stop=nvols + 1, step=1) # Plot - plt.style.use("seaborn") + plt.style.use("seaborn-v0_8") fig, ax = plt.subplots() ax.plot(x, relone, linewidth=1, label="Relative to first volume") ax.plot(x, relbef, linewidth=1, label="Relative to previous volume") @@ -73,9 +71,9 @@ def plot(input: str, output: str, voxel: Union[Tuple[float], None] = None) -> No plt.text( 0, -2, - "$\dag$ average voxel dimension is used in " - "converting voxel displacement to head displacement " - "$V_{avg} = (V_x + V_y + V_z) / 3$", + r"$\dag$ average voxel dimension is used in " + r"converting voxel displacement to head displacement " + r"$V_{avg} = (V_x + V_y + V_z) / 3$", ha="left", size=6, ) diff --git a/pydesigner/plotting/outlierplot.py b/pydesigner/plotting/outlierplot.py index 94289645..94ad9502 100644 --- a/pydesigner/plotting/outlierplot.py +++ b/pydesigner/plotting/outlierplot.py @@ -42,11 +42,9 @@ def plot( if op.splitext(input)[-1] != ".nii": raise OSError("Input file {} is not nifti type".format(input)) if op.isdir(output): - raise OSError( - "Output {} cannot be a directory. Please " "define the output to be an image file.".format(output) - ) + raise OSError("Output {} cannot be a directory. Please define the output to be an image file.".format(output)) if op.splitext(output)[-1] != ".png": - raise OSError("Output path {} does not indicate a PNG file" "".format(input)) + raise OSError("Output path {} does not indicate a PNG file".format(input)) hdr = nib.load(input) img = np.array(hdr.dataobj) truncateIdx = np.isnan(img) @@ -55,11 +53,11 @@ def plot( dims[0] * dims[1] * dims[2] # no. of voxels vols = dims[-1] # number of volumes if np.ndim(img) != 4: - raise Exception("Only 4D nifti files can be read. " "User-supplied file is not a 4D nifti.") + raise Exception("Only 4D nifti files can be read. User-supplied file is not a 4D nifti.") if mask is not None: if op.exists(mask): if op.splitext(mask)[-1] != ".nii": - raise OSError("Input maks {} is not nifti type " "".format(mask)) + raise OSError("Input maks {} is not nifti type ".format(mask)) hdr_mask = nib.load(mask) bw = np.array(hdr_mask.dataobj) else: @@ -82,7 +80,7 @@ def plot( # Normalize to percentage of voxels y = (y / np.count_nonzero(bw)) * 100 # Plot - plt.style.use("seaborn") + plt.style.use("seaborn-v0_8") fig, ax = plt.subplots() plt.plot(x, y, "-", lw=1, color="black", alpha=0.40) scat = plt.scatter(x, y, c=bvals, s=10, linewidths=0, alpha=1, cmap="Set1") diff --git a/pydesigner/plotting/snrplot.py b/pydesigner/plotting/snrplot.py index 4b0d6979..fe018a4b 100644 --- a/pydesigner/plotting/snrplot.py +++ b/pydesigner/plotting/snrplot.py @@ -54,14 +54,14 @@ def __init__( Path to nifti brain mask (Default: None). """ if noisepath is None: - raise Exception("Please provide the path to noise map from " '"dwidenoise"') + raise Exception('Please provide the path to noise map from "dwidenoise"') self.nDWI = len(dwilist) # Number of input DWIs self.DWInames = [op.split(i)[-1] for i in dwilist] # Open the first image in list self.hdr = nib.load(dwilist[0]) if self.hdr.ndim != 4: - raise IOError("Input DWIs need are not 4D. Please ensure you " "use 4D NifTi files only.") + raise IOError("Input DWIs need are not 4D. Please ensure you use 4D NifTi files only.") # Load image into 2D array self.img = np.array(self.hdr.dataobj) # Load noise into a vector @@ -90,13 +90,13 @@ def __init__( tmp = vectorize(np.array(nib.load(dwilist[i]).dataobj), self.mask) self.img = np.dstack((self.img, tmp)) except: # noqa: E722 - raise ValueError("all input DWIs must have the same " "shape.") + raise ValueError("all input DWIs must have the same shape.") try: fName = op.splitext(dwilist[i])[0] bvalPath = op.join(fName + ".bval") self.bval = np.stack((self.bval, np.rint(np.loadtxt(bvalPath) / 1000))) except: # noqa: E722 - raise IOError("Unable to locate BVAL file for image: {" "}".format(dwilist[i])) + raise IOError("Unable to locate BVAL file for image: {}".format(dwilist[i])) truncateIdx = np.logical_or(np.isnan(self.img), (self.img < minZero)) self.img[truncateIdx] = minZero @@ -185,7 +185,7 @@ def histcount(self, nbins: int = 100) -> Tuple[np.ndarray[int], np.ndarray[float Array containing all unique B-values detected. """ if not isinstance(nbins, int): - raise ValueError("Number of bins (nbins) entered is not an " "integer. Please specify and integer.") + raise ValueError("Number of bins (nbins) entered is not an integer. Please specify and integer.") bval_list = self.getuniquebval() snr = self.computesnr() # Get min and max values of SNR @@ -203,9 +203,7 @@ def histcount(self, nbins: int = 100) -> Tuple[np.ndarray[int], np.ndarray[float (count[:, i, j], edges[:, i, j]) = np.histogram(vals, bins=nbins, range=(minVal, maxVal), density=True) edges = np.unique(edges) if edges.size != nbins + 1: - raise Exception( - "Number of binning edges across B-values and " "DWIs is not consistent. Aborting SNR " "binning." - ) + raise Exception("Number of binning edges across B-values and DWIs is not consistent. Aborting SNR binning.") binval = np.zeros((nbins)) for i in range(binval.size): binval[i] = np.median([edges[i], edges[i + 1]]) @@ -228,7 +226,7 @@ def makeplot(self, path: str, smooth: bool = True, smoothfactor: int = 5) -> Non None: Writes out image into directory as SNR.png """ if not isinstance(smoothfactor, int): - raise ValueError("Please specify an integer for smooth " "factor.") + raise ValueError("Please specify an integer for smooth factor.") if not op.isdir(path): raise IOError("Output path defined does not exist.") outpath = op.join(path, "SNR.png") @@ -246,7 +244,7 @@ def makeplot(self, path: str, smooth: bool = True, smoothfactor: int = 5) -> Non count_interp[:, y, z] = spl(binval_interp) count = count_interp binval = binval_interp - plt.style.use("seaborn") + plt.style.use("seaborn-v0_8") nplots = unibvals.size titles = ["B" + str(i * 1000) for i in unibvals] fig = plt.figure(figsize=(8, 10)) diff --git a/pydesigner/postprocessing/filters.py b/pydesigner/postprocessing/filters.py index f7d2fa3d..145851bd 100644 --- a/pydesigner/postprocessing/filters.py +++ b/pydesigner/postprocessing/filters.py @@ -1,8 +1,7 @@ #!/usr/bin/env python # -*- coding : utf-8 -*- -"""This module contains filter(s) for postprocessing DTI/DKI maps -""" +"""This module contains filter(s) for postprocessing DTI/DKI maps""" # --------------------------------------------------------------------- # Package Management @@ -78,7 +77,7 @@ def median(input: str, output: str, mask: Union[str, None] = None) -> None: hdr, img = readnii(input) if mask is not None: if not op.exists(mask): - raise IOError("Input mask {} does not " "exist.".format(input)) + raise IOError("Input mask {} does not exist.".format(input)) maskhdr, mask = readnii(mask) else: mask = np.ones((img.shape[0], img.shape[1], img.shape[2]), order="F") @@ -90,5 +89,5 @@ def median(input: str, output: str, mask: Union[str, None] = None) -> None: elif np.ndim(img) == 3: img = median_filter(img, footprint=conn, mode="constant", cval=float("nan")) * mask else: - raise Exception("Input nifti image needs to be either 3D or " "4D. Please check the file provided.") + raise Exception("Input nifti image needs to be either 3D or 4D. Please check the file provided.") writenii(hdr, img, output) diff --git a/pydesigner/preprocessing/mrinfoutil.py b/pydesigner/preprocessing/mrinfoutil.py index 20fe04a4..435a8835 100644 --- a/pydesigner/preprocessing/mrinfoutil.py +++ b/pydesigner/preprocessing/mrinfoutil.py @@ -29,14 +29,15 @@ def getconsole(path: int, flag: str) -> str: MRtrix3's mrinfo console output. """ if not op.exists(path): - raise OSError("Input path does not exist. Please ensure that the " "folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not isinstance(flag, str): raise TypeError("Input flag is not a string") arg = ["mrinfo", flag] arg.append(path) completion = subprocess.run(arg, stdout=subprocess.PIPE) if completion.returncode != 0: - raise IOError("Input {} is not currently supported by " "PyDesigner.".format(path)) + msg = "MRtrix error. See below for more information." + raise OSError(msg) console = str(completion.stdout).split("\\n")[0] console = console.split("b")[-1] console = console.replace("'", "") @@ -197,12 +198,12 @@ def transform(path: str) -> Tuple[float]: Image transformation matrix. """ if not op.exists(path): - raise OSError("Input path does not exist. Please ensure that the " "folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") arg = ["mrinfo", "-transform"] arg.append(path) completion = subprocess.run(arg, stdout=subprocess.PIPE) if completion.returncode != 0: - raise IOError("Input {} is not currently supported by " "PyDesigner.".format(path)) + raise IOError("Input {} is not currently supported by PyDesigner.".format(path)) console = str(completion.stdout).split("\\n") num = [re.findall(r"[-+]?\d*\.\d+|\d+", s) for s in console] num = [s for s in num if s != []] @@ -224,7 +225,7 @@ def commandhistory(path: str) -> List[str]: command history of input file """ if not op.exists(path): - raise OSError("Input path does not exist. Please ensure that the " "folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") ftype = format(path) if ftype != "MRtrix": raise IOError( @@ -236,7 +237,7 @@ def commandhistory(path: str) -> List[str]: arg.append(path) completion = subprocess.run(arg, stdout=subprocess.PIPE) if completion.returncode != 0: - raise IOError("Input {} is not currently supported by " "PyDesigner.".format(path)) + raise IOError("Input {} is not currently supported by PyDesigner.".format(path)) # Remove new line delimiter console = str(completion.stdout).split("\\n") # Remove 'b' @@ -268,7 +269,7 @@ def dwscheme(path: str) -> List[float]: diffusion weighing scheme. """ if not op.exists(path): - raise OSError("Input path does not exist. Please ensure that the " "folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") ftype = format(path) if ftype != "MRtrix": raise IOError( @@ -280,7 +281,7 @@ def dwscheme(path: str) -> List[float]: arg.append(path) completion = subprocess.run(arg, stdout=subprocess.PIPE) if completion.returncode != 0: - raise IOError("Input {} is not currently supported by " "PyDesigner.".format(path)) + raise IOError("Input {} is not currently supported by PyDesigner.".format(path)) # Remove new line delimiter console = str(completion.stdout).split("\\n") # Remove 'b' @@ -316,7 +317,7 @@ def pescheme(path: str) -> List[float]: Phase encoding scheme. """ if not op.exists(path): - raise OSError("Input path does not exist. Please ensure that the " "folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") ftype = format(path) if ftype != "MRtrix": raise IOError( @@ -328,7 +329,7 @@ def pescheme(path: str) -> List[float]: arg.append(path) completion = subprocess.run(arg, stdout=subprocess.PIPE) if completion.returncode != 0: - raise IOError("Input {} is not currently supported by " "PyDesigner.".format(path)) + raise IOError("Input {} is not currently supported by PyDesigner.".format(path)) # Remove new line delimiter console = str(completion.stdout).split("\\n") # Remove 'b' @@ -363,7 +364,7 @@ def shells(path: str) -> int: Number of shells. """ if not op.exists(path): - raise OSError("Input path does not exist. Please ensure that the " "folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") ftype = format(path) if ftype != "MRtrix": raise IOError( @@ -375,7 +376,7 @@ def shells(path: str) -> int: arg.append(path) completion = subprocess.run(arg, stdout=subprocess.PIPE) if completion.returncode != 0: - raise IOError("Input {} is not currently supported by " "PyDesigner.".format(path)) + raise IOError("Input {} is not currently supported by PyDesigner.".format(path)) # Remove new line delimiter console = str(completion.stdout).split("\\n") # Remove 'b' @@ -408,7 +409,7 @@ def num_shells(path: str) -> int: Number of shells. """ if not op.exists(path): - raise OSError("Input path does not exist. Please ensure that the " "folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") ftype = format(path) if ftype != "MRtrix": raise IOError( @@ -434,7 +435,7 @@ def max_shell(path: str) -> int: Max b-value """ if not op.exists(path): - raise OSError("Input path does not exist. Please ensure that the " "folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") ftype = format(path) if ftype != "MRtrix": raise IOError( @@ -446,7 +447,7 @@ def max_shell(path: str) -> int: arg.append(path) completion = subprocess.run(arg, stdout=subprocess.PIPE) if completion.returncode != 0: - raise IOError("Input {} is not currently supported by " "PyDesigner.".format(path)) + raise IOError("Input {} is not currently supported by PyDesigner.".format(path)) # Remove new line delimiter console = str(completion.stdout).split("\\n") # Remove 'b' @@ -481,7 +482,7 @@ def is_fullsphere(path: str) -> bool: False if half-spherical sampling. """ if not op.exists(path): - raise OSError("Input path does not exist. Please ensure that the " "folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") ftype = format(path) if ftype != "MRtrix": raise IOError( @@ -492,7 +493,7 @@ def is_fullsphere(path: str) -> bool: arg = ["dirstat", path, "-output", "ASYM"] completion = subprocess.run(arg, stdout=subprocess.PIPE) if completion.returncode != 0: - raise IOError("Input {} is not currently supported by " "PyDesigner.".format(path)) + raise IOError("Input {} is not currently supported by PyDesigner.".format(path)) # Remove new line delimiter console = str(completion.stdout).split("\\n") # Remove 'b' @@ -540,7 +541,7 @@ def echotime(path: str) -> Union[int, str]: 'variable' """ if not op.exists(path): - raise OSError("Input path does not exist. Please ensure that the " "folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") ftype = format(path) if ftype != "MRtrix": raise IOError( @@ -552,7 +553,7 @@ def echotime(path: str) -> Union[int, str]: arg.append(path) completion = subprocess.run(arg, stdout=subprocess.PIPE) if completion.returncode != 0: - raise IOError("Input {} is not currently supported by " "PyDesigner.".format(path)) + raise IOError("Input {} is not currently supported by PyDesigner.".format(path)) console = str(completion.stdout).split("\\n")[0] console = console.split("b")[-1] console = console.replace("'", "") diff --git a/pydesigner/preprocessing/mrpreproc.py b/pydesigner/preprocessing/mrpreproc.py index c40f1dbb..1115f97e 100644 --- a/pydesigner/preprocessing/mrpreproc.py +++ b/pydesigner/preprocessing/mrpreproc.py @@ -1,8 +1,7 @@ #!/usr/bin/env python # -*- coding : utf-8 -*- -"""Utilities for running various MRtrix3's DWI preprocessing tools -""" +"""Utilities for running various MRtrix3's DWI preprocessing tools""" import os import os.path as op @@ -12,9 +11,17 @@ import numpy as np from ..preprocessing import mrinfoutil, rician, smoothing +from ..system.errors import MRTrixError +from ..system.models import input_path_validator, modelmrtrix, output_path_validator -def miftonii(input, output, nthreads=None, force=True, verbose=False): +def miftonii( + input: str, + output: str, + nthreads: int = None, + force: bool = True, + verbose: bool = False, +) -> None: """Converts input `.mif` images to output `.nii` images Parameters @@ -40,46 +47,47 @@ def miftonii(input, output, nthreads=None, force=True, verbose=False): -------- niitomif """ - if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") - if not op.exists(op.dirname(output)): - raise OSError( - "Specifed directory for output file {} does not " - "exist. Please ensure that this is a valid " - "directory.".format(op.dirname(output)) - ) - if op.splitext(output)[-1] != ".nii": - raise OSError("Output specified does not possess the .nii " "extension.") - if nthreads is not None: - if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") - if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") - if not isinstance(verbose, bool): - raise Exception("Please specify whether verbose is True or False.") + opts = modelmrtrix( + input=input_path_validator(input, ".mif"), + output=output_path_validator(output, ".nii"), + nthreads=nthreads, + force=force, + verbose=verbose, + ) + input_path_validator(opts.input, ".mif") + output_path_validator(opts.output, ".nii") arg = ["mrconvert"] - if force: + if opts.force: arg.append("-force") - if not verbose: + if not opts.verbose: arg.append("-quiet") - if nthreads is not None: + if opts.nthreads is not None: arg.extend(["-nthreads", str(nthreads)]) arg.extend( [ "-export_grad_fsl", - op.splitext(output)[0] + ".bvec", - op.splitext(output)[0] + ".bval", + op.splitext(opts.output)[0] + ".bvec", + op.splitext(opts.output)[0] + ".bval", ] ) arg.extend(["-json_export", op.splitext(output)[0] + ".json"]) - arg.extend([input, output]) + arg.extend([opts.input, opts.output]) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Conversion from .mif to .nii failed; check " "above for errors.") - - -def niitomif(input, output, nthreads=None, force=True, verbose=False): - """Converts input `.nii` images to output `.nif` images provided that + msg = f"Conversion from .mif to .nii failed. Return code: {completion.returncode}" + msg += f"\nCommand: {' '.join(arg)}" + msg += f"\nMRtrix3 error: {completion.stderr}" + raise MRTrixError(msg) + + +def niitomif( + input: str, + output: str, + nthreads: int = None, + force: bool = True, + verbose: bool = False, +) -> None: + """Converts input `.nii` images to output `.mif` images provided that all BVEC, BVAL and JSON files are provided and named same as input .nii Parameters @@ -105,45 +113,44 @@ def niitomif(input, output, nthreads=None, force=True, verbose=False): -------- miftonii """ - if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") - if not op.exists(op.dirname(output)): - raise OSError( - "Specifed directory for output file {} does not " - "exist. Please ensure that this is a valid " - "directory.".format(op.dirname(output)) - ) - if op.splitext(output)[-1] != ".mif": - raise OSError("Output specified does not possess the .mif " "extension.") - if not op.exists(op.splitext(input)[0] + ".bvec"): - raise OSError('Unable to locate BVEC file" {}'.format(op.splitext(output)[0] + ".bvec")) - if not op.exists(op.splitext(input)[0] + ".bval"): - raise OSError('Unable to locate BVAL file" {}'.format(op.splitext(output)[0] + ".bval")) - if not op.exists(op.splitext(input)[0] + ".json"): - raise OSError('Unable to locate JSON file" {}'.format(op.splitext(output)[0] + ".json")) - if nthreads is not None: - if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") - if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") - if not isinstance(verbose, bool): - raise Exception("Please specify whether verbose is True or False.") + opts = modelmrtrix( + input=input_path_validator(input, ".nii"), + output=output_path_validator(output, ".mif"), + nthreads=nthreads, + force=force, + verbose=verbose, + ) + input_path_validator(opts.input, ".nii") + path_bvec = input_path_validator(op.splitext(opts.input)[0] + ".bvec", ".bvec") + path_bval = input_path_validator(op.splitext(opts.input)[0] + ".bval", ".bval") + path_json = input_path_validator(op.splitext(opts.input)[0] + ".json", ".json") + output_path_validator(opts.output, ".mif") arg = ["mrconvert"] - if force: + if opts.force: arg.append("-force") - if not verbose: + if not opts.verbose: arg.append("-quiet") - if nthreads is not None: - arg.extend(["-nthreads", str(nthreads)]) - arg.extend(["-fslgrad", op.splitext(input)[0] + ".bvec", op.splitext(input)[0] + ".bval"]) - arg.extend(["-json_import", op.splitext(input)[0] + ".json"]) - arg.extend([input, output]) + if opts.nthreads is not None: + arg.extend(["-nthreads", str(opts.nthreads)]) + arg.extend(["-fslgrad", path_bvec, path_bval]) + arg.extend(["-json_import", path_json]) + arg.extend([opts.input, opts.output]) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Conversion from .nii to .mif failed; check " "above for errors.") - - -def stride_match(target, moving, output, nthreads=None, force=True, verbose=False): + msg = f"Conversion from .nii to .mif failed. Return code: {completion.returncode}" + msg += f"\nCommand: {' '.join(arg)}" + msg += f"\nMRtrix3 error: {completion.stderr}" + raise MRTrixError(msg) + + +def stride_match( + target: str, + moving: str, + output: str, + nthreads: int = None, + force: bool = True, + verbose: bool = False, +) -> None: """Matches strides on inputs target and moving by converting strides on moving image to those of target image. @@ -168,51 +175,35 @@ def stride_match(target, moving, output, nthreads=None, force=True, verbose=Fals ------- None; writes out file """ - if not op.exists(target): - raise OSError("Input target path does not exist. Please ensure that " "the folder or file specified exists.") - if op.splitext(target)[-1] not in [".nii", ".mif"]: - raise OSError("Input target image needs to be a .nii or .mif file") - if not op.exists(moving): - raise OSError("Input moving path does not exist. Please ensure that " "the folder or file specified exists.") - if op.splitext(moving)[-1] not in [".nii", ".mif"]: - raise OSError("Input moving image needs to be a .nii or .mif file") - if not op.exists(op.dirname(output)): - raise OSError( - "Specifed directory for output file {} does not " - "exist. Please ensure that this is a valid " - "directory.".format(op.dirname(output)) - ) - if op.splitext(output)[-1] not in [".nii", ".mif"]: - raise OSError("Output specified does not possess the .nii " "extension.") - if nthreads is not None: - if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") - if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") - if not isinstance(verbose, bool): - raise Exception("Please specify whether verbose is True or False.") + opts = modelmrtrix(output=output, nthreads=nthreads, force=force, verbose=verbose) + target = input_path_validator(target) + moving = input_path_validator(moving) + arg = ["mrconvert"] - if force: + if opts.force: arg.append("-force") - if not verbose: + if not opts.verbose: arg.append("-quiet") - if nthreads is not None: + if opts.nthreads is not None: arg.extend(["-nthreads", str(nthreads)]) - arg.extend(["-strides", target, moving, output]) + arg.extend(["-strides", target, moving, opts.output]) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Stride matching failed; check above for errors.") + msg = f"Stride matching failed. Return code: {completion.returncode}" + msg += f"\nCommand: {' '.join(arg)}" + msg += f"\nMRtrix3 error: {completion.stderr}" + raise MRTrixError(msg) def denoise( - input, - output, - noisemap=True, - extent="5,5,5", - nthreads=None, - force=True, - verbose=False, -): + input: str, + output: str, + noisemap: bool = True, + extent: str = "5,5,5", + nthreads: int = None, + force: bool = True, + verbose: bool = False, +) -> None: """Runs MRtrix3's `dwidenoise` command with optimal parameters for PyDesigner. @@ -241,44 +232,43 @@ def denoise( ------- None; writes out file """ - if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") - if not op.exists(op.dirname(output)): - raise OSError( - "Specifed directory for output file {} does not " - "exist. Please ensure that this is a valid " - "directory.".format(op.dirname(output)) - ) + opts = modelmrtrix( + input=input_path_validator(input, ".mif"), + output=output_path_validator(output, ".mif"), + nthreads=nthreads, + force=force, + verbose=verbose, + ) if not isinstance(noisemap, bool): - raise Exception("Please specify whether noisemap generation " "is True or False.") - if not isinstance(extent, str): - raise Exception("Please specify extent as a string formatted as " '"n,n,n".') - if nthreads is not None: - if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") - if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") - if not isinstance(verbose, bool): - raise Exception("Please specify whether verbose is True or False.") - noisemap_path = op.join(op.dirname(input), "noisemap.nii") + raise TypeError("Please specify whether noisemap generation is True or False.") + noisemap_path = op.join(op.dirname(opts.output), "noisemap.nii") arg = ["dwidenoise"] - if force: + if opts.force: arg.append("-force") - if not verbose: + if not opts.verbose: arg.append("-quiet") - if nthreads is not None: + if opts.nthreads is not None: arg.extend(["-nthreads", str(nthreads)]) if noisemap: arg.extend(["-noise", noisemap_path]) if extent is not None: arg.extend(["-extent", extent]) - arg.extend([input, output]) + arg.extend([opts.input, opts.output]) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("dwidenoise failed, please look above for error " "sources.") - - -def degibbs(input, output, nthreads=None, force=False, verbose=False): + msg = f"Dwidenoise failed. Return code: {completion.returncode}" + msg += f"\nCommand: {' '.join(arg)}" + msg += f"\nMRtrix3 error: {completion.stderr}" + raise MRTrixError(msg) + + +def degibbs( + input: str, + output: str, + nthreads: int = None, + force: bool = False, + verbose: bool = False, +) -> None: """Runs MRtrix3's `mrdegibbs` command with optimal parameters for PyDesigner. @@ -301,32 +291,27 @@ def degibbs(input, output, nthreads=None, force=False, verbose=False): ------- None; writes out file """ - if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") - if not op.exists(op.dirname(output)): - raise OSError( - "Specifed directory for output file {} does not " - "exist. Please ensure that this is a valid " - "directory.".format(op.dirname(output)) - ) - if nthreads is not None: - if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") - if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") - if not isinstance(verbose, bool): - raise Exception("Please specify whether verbose is True or False.") + opts = modelmrtrix( + input=input_path_validator(input, ".mif"), + output=output_path_validator(output, ".mif"), + nthreads=nthreads, + force=force, + verbose=verbose, + ) arg = ["mrdegibbs"] - if force: + if opts.force: arg.append("-force") - if not verbose: + if not opts.verbose: arg.append("-quiet") - if nthreads is not None: + if opts.nthreads is not None: arg.extend(["-nthreads", str(nthreads)]) - arg.extend([input, output]) + arg.extend([opts.input, opts.output]) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("mrdegibbs failed, please look above for error " "sources.") + msg = f"Mrdegibbs failed. Return code: {completion.returncode}" + msg += f"\nCommand: {' '.join(arg)}" + msg += f"\nMRtrix3 error: {completion.stderr}" + raise MRTrixError(msg) def undistort( @@ -348,7 +333,7 @@ def undistort( Path to input .mif file output : str Path to output .mif file - rpe : str, {'rpe_header', 'rpe-pair', 'rpe_all, 'rpe_all'}, optional + rpe : str, {'rpe_header', 'rpe-pair', 'rpe_none, 'rpe_all'}, optional Reverse phase encoding of the dataset. (Default: 'rpe_header') epib0 : int Number of reverse PE dir B0 pairs to use in TOPUP correction @@ -368,37 +353,31 @@ def undistort( ------- None; writes out file """ - if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") - if not op.exists(op.dirname(output)): - raise OSError( - "Specifed directory for output file {} does not " - "exist. Please ensure that this is a valid " - "directory.".format(op.dirname(output)) - ) + opts = modelmrtrix( + input=input_path_validator(input, ".mif"), + output=output_path_validator(output, ".mif"), + nthreads=nthreads, + force=force, + verbose=verbose, + ) + if rpe not in ["rpe_none", "rpe_pair", "rpe_all", "rpe_header"]: - raise Exception( - "Entered RPE selection is not valid. Please " - 'choose either "rpe_none", "rpe_pair", ' - '"rpe_all", or "rpe_header".' - ) + msg = "Entered RPE selection is not valid. Please choose either " + msg += "'rpe_none', 'rpe_pair' 'rpe_all', or 'rpe_header'" + raise ValueError(msg) if not isinstance(epib0, int): - raise Exception("Number of TOPUP B0s need to be specified as " "as an integer.") + msg = "Number of TOPUP B0s need to be specified as a positive integer." + raise ValueError(msg) if qc is not None: if not isinstance(qc, str): - raise Exception("Please specify QC directory as a string") + msg = "Please specify QC directory as a string" + raise TypeError(msg) if not op.exists(qc): - raise OSError("Specified QC directory does not exist. " "Please ensure that this is a valid " "directory.") - if nthreads is not None: - if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") - if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") - if not isinstance(verbose, bool): - raise Exception("Please specify whether verbose is True or False.") + msg = "Specified QC directory does not exist. Please ensure that this is a valid directory." + raise OSError(msg) rpe = "-" + rpe # Get output directory - outdir = op.dirname(output) + outdir = op.dirname(opts.output) # Extract BVEC and BVALS for shell sampling deduction arg_extract = ["mrinfo"] arg_extract.extend( @@ -408,23 +387,24 @@ def undistort( op.join(outdir, "dwiec.bval"), ] ) - arg_extract.append(input) + arg_extract.append(opts.input) completion = subprocess.run(arg_extract) if completion.returncode != 0: - raise Exception( - "extracting FSL BVEC and BVEC gradients " "failed during undistortion, please look " "above for errors." - ) + msg = "Extraction of FSL BVEC and BVAL gradients failed. Return code: {completion.returncode}" + msg += f"\nCommand: {' '.join(arg_extract)}" + msg += f"\nMRtrix3 error: {completion.stderr}" + raise MRTrixError(msg) # Form main undistortion argument arg = [] if which("dwipreproc") is None: arg.append("dwifslpreproc") else: arg.append("dwipreproc") - if force: + if opts.force: arg.append("-force") - if not verbose: + if not opts.verbose: arg.append("-quiet") - if nthreads is not None: + if opts.nthreads is not None: arg.extend(["-nthreads", str(nthreads)]) # Determine whether half or full sphere sampling repol_string = "--repol " @@ -447,7 +427,7 @@ def undistort( ) arg.extend(["-se_epi", epi_path]) except: # noqa: E722 - print("[WARNING] Unable to apply TOPUPBOOST because DWI " "consists of single PE direction.") + print("[WARNING] Unable to apply TOPUPBOOST because DWI consists of single PE direction.") # Remove the B0_ALL.mif file that is created when epiboost # function fails try: @@ -458,10 +438,13 @@ def undistort( arg.append(rpe) if qc is not None: arg.extend(["-eddyqc_all", qc]) - arg.extend([input, output]) + arg.extend([opts.input, opts.output]) completion = subprocess.run(arg, cwd=outdir) if completion.returncode != 0: - raise Exception("dwifslpreproc failed, please look above for " "error sources.") + msg = "Dwifslpreproc failed. Return code: {completion.returncode}" + msg += f"\nCommand: {' '.join(arg_extract)}" + msg += f"\nMRtrix3 error: {completion.stderr}" + raise (MRTrixError(msg)) # Remove temporarily generated files os.remove(op.join(outdir, "dwiec.bvec")) os.remove(op.join(outdir, "dwiec.bval")) @@ -469,7 +452,7 @@ def undistort( try: os.remove(epi_path) except: # noqa: E722 - print("[Warning] unable to remove {} because it does not " "exist".format(epi_path)) + print("[Warning] unable to remove {} because it does not exist".format(epi_path)) def brainmask(input, output, thresh=0.25, nthreads=None, force=False, verbose=False): @@ -497,48 +480,41 @@ def brainmask(input, output, thresh=0.25, nthreads=None, force=False, verbose=Fa ------- None; writes out file """ - if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") - if not op.exists(op.dirname(output)): - raise OSError( - "Specifed directory for output file {} does not " - "exist. Please ensure that this is a valid " - "directory.".format(op.dirname(output)) - ) + opts = modelmrtrix(input=input, output=output, nthreads=nthreads, force=force, verbose=verbose) if (thresh < 0) or (thresh > 1): raise ValueError("BET Threshold needs to be within 0 to 1 range.") - if nthreads is not None: - if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") - if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") - if not isinstance(verbose, bool): - raise Exception("Please specify whether verbose is True or False.") # Read FSL NifTi output format and change it if not '.nii' fsl_suffix = os.getenv("FSLOUTPUTTYPE") if fsl_suffix is None: - raise OSError( - "Unable to determine system environment variable " - "FSF_OUTPUT_FORMAT. Ensure that FSL is installed " - "correctly." - ) + msg = "Unable to determine system environment variable 'FSF_OUTPUT_FORMAT'. " + msg += "Ensure that FSL is installed correctly." + raise OSError(msg) if fsl_suffix == "NIFTI_GZ": os.environ["FSLOUTPUTTYPE"] = "NIFTI" - outdir = op.dirname(output) + outdir = op.dirname(opts.output) B0_nan = op.join(outdir, "B0_nan.nii") mask = op.join(outdir, "brain") tmp_brain = op.join(outdir, "brain.nii") # Extract averaged B0 from DWI - extractmeanbzero(input=input, output=B0_nan, nthreads=nthreads, force=force, verbose=verbose) + extractmeanbzero( + input=opts.input, + output=B0_nan, + nthreads=opts.nthreads, + force=opts.force, + verbose=opts.verbose, + ) # Compute brain mask arg_mask = ["bet", B0_nan, mask, "-m", "-f", str(thresh)] completion = subprocess.run(arg_mask) if completion.returncode != 0: - raise Exception("Unable to compute brain mask from B0. See above " "for errors") + msg = rf"Unable to compute brain mask from B0. Return code: {completion.returncode}" + msg += rf"\nCommand: {' '.join(arg_mask)}" + msg += rf"\FSL error: {completion.stderr}" + raise MRTrixError(msg) # Remove intermediary file os.remove(B0_nan) os.remove(tmp_brain) - os.rename(op.join(outdir, mask + "_mask.nii"), output) + os.rename(op.join(outdir, mask + "_mask.nii"), opts.output) def csfmask( @@ -582,7 +558,7 @@ def csfmask( None; writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -590,14 +566,14 @@ def csfmask( "directory.".format(op.dirname(output)) ) if (op.splitext(output))[-1] != ".nii": - raise IOError("Output filename {} must be specified as a " "NifTi (.nii) file.") + raise IOError("Output filename {} must be specified as a NifTi (.nii) file.") if (thresh < 0) or (thresh > 1): raise ValueError("BET Threshold needs to be within 0 to 1 range.") if nthreads is not None: if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") + raise Exception("Please specify the number of threads as an integer.") if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") + raise Exception("Please specify whether forced overwrite is True or False.") if not isinstance(verbose, bool): raise Exception("Please specify whether verbose is True or False.") outdir = op.dirname(output) @@ -623,14 +599,14 @@ def csfmask( arg_mask = ["bet", B0_nan, path_brain, "-m", "-f", str(thresh)] completion = subprocess.run(arg_mask) if completion.returncode != 0: - raise Exception("Unable to compute brain mask from B0. See above " "for errors") + raise Exception("Unable to compute brain mask from B0. See above for errors") arg = ["fast"] if verbose: arg.append("-v") arg.extend(["-n", "4", "-t", "2", "-o", path_tissue, path_brain + f_suffix]) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("FSL FAST segmentation of brain tissue failed. " "See above for errors.") + raise Exception("FSL FAST segmentation of brain tissue failed. See above for errors.") csfclass = [] for i in range(4): arg = [ @@ -643,7 +619,7 @@ def csfmask( ] completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("FSLMATHS tissue thresholding failed. " "See above for errors.") + raise Exception("FSLMATHS tissue thresholding failed. See above for errors.") arg = [ "fslstats", path_brain + ".nii", @@ -654,7 +630,7 @@ def csfmask( ] completion = subprocess.run(arg, stdout=subprocess.PIPE) if completion.returncode != 0: - raise Exception("FSLSTATS tissue thresholding failed. " "See above for errors.") + raise Exception("FSLSTATS tissue thresholding failed. See above for errors.") console = str(completion.stdout).split("\\n")[0] console = console.split("b")[-1] console = console.replace("'", "") @@ -674,7 +650,7 @@ def csfmask( ] completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Unable to create CSF mask. " "See above for errors.") + raise Exception("Unable to create CSF mask. See above for errors.") # Remove intermediate files os.remove(B0_nan) os.remove(op.join(outdir, path_brain + f_suffix)) @@ -728,7 +704,7 @@ def csfmask( ) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Unable to compute pseudo ADC. " "See above for errors.") + raise Exception("Unable to compute pseudo ADC. See above for errors.") os.remove(path_b0) os.remove(path_shell) @@ -753,7 +729,7 @@ def smooth(input, output, csfname=None, fwhm=1.25, size=5): None; writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -762,11 +738,11 @@ def smooth(input, output, csfname=None, fwhm=1.25, size=5): ) if csfname is not None: if not op.exists(csfname): - raise OSError("Path to CSF mask does not exist. Please " "ensure that the file specified exists.") + raise OSError("Path to CSF mask does not exist. Please ensure that the file specified exists.") if fwhm < 0: raise Exception("FWHM cannot be less than zero.") if size < 0: - raise Exception("Size cannot be less than zero. Please " "specify size as a positive integer.") + raise Exception("Size cannot be less than zero. Please specify size as a positive integer.") # Convert input .mif to .nii outdir = op.dirname(output) nii_path = op.join(outdir, "dwism.nii") @@ -799,7 +775,7 @@ def riciancorrect(input, output, noise=None): None; writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -812,7 +788,7 @@ def riciancorrect(input, output, noise=None): if op.splitext(noise)[-1] != ".nii": raise OSError("Noisemap needs to be in NifTi format.") else: - raise Exception("Rician correction cannot be performed without a " "noisemap.") + raise Exception("Rician correction cannot be performed without a noisemap.") # Convert input .mif to .nii outdir = op.dirname(output) nii_path = op.join(outdir, "dwirc.nii") @@ -851,7 +827,7 @@ def extractbzero(input, output, nthreads=None, force=False, verbose=False): None; writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -860,9 +836,9 @@ def extractbzero(input, output, nthreads=None, force=False, verbose=False): ) if nthreads is not None: if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") + raise Exception("Please specify the number of threads as an integer.") if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") + raise Exception("Please specify whether forced overwrite is True or False.") if not isinstance(verbose, bool): raise Exception("Please specify whether verbose is True or False.") arg = ["dwiextract"] @@ -875,7 +851,7 @@ def extractbzero(input, output, nthreads=None, force=False, verbose=False): arg.extend(["-bzero", input, output]) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Unable to extract B0s from DWI for computation " "of brain mask. See above for errors.") + raise Exception("Unable to extract B0s from DWI for computation of brain mask. See above for errors.") def extractmeanbzero(input, output, nthreads=None, force=False, verbose=False): @@ -901,7 +877,7 @@ def extractmeanbzero(input, output, nthreads=None, force=False, verbose=False): None; writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -910,9 +886,9 @@ def extractmeanbzero(input, output, nthreads=None, force=False, verbose=False): ) if nthreads is not None: if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") + raise Exception("Please specify the number of threads as an integer.") if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") + raise Exception("Please specify whether forced overwrite is True or False.") if not isinstance(verbose, bool): raise Exception("Please specify whether verbose is True or False.") outdir = op.dirname(output) @@ -923,11 +899,11 @@ def extractmeanbzero(input, output, nthreads=None, force=False, verbose=False): arg_mean = ["mrmath", "-axis", "3", fname_bzero, "mean", fname_mean] completion = subprocess.run(arg_mean) if completion.returncode != 0: - raise Exception("Unable to compute mean of B0s. See above for" "errors.") + raise Exception("Unable to compute mean of B0s. See above forerrors.") arg_nan = ["mrcalc", fname_mean, "-finite", fname_mean, "0", "-if", output] completion = subprocess.run(arg_nan) if completion.returncode != 0: - raise Exception("Unable to remove NaNs from averaged B0. See " "above for errors.") + raise Exception("Unable to remove NaNs from averaged B0. See above for errors.") # Remove non-essential files os.remove(fname_bzero) os.remove(fname_mean) @@ -956,7 +932,7 @@ def extractnonbzero(input, output, nthreads=None, force=False, verbose=False): None; writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -965,9 +941,9 @@ def extractnonbzero(input, output, nthreads=None, force=False, verbose=False): ) if nthreads is not None: if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") + raise Exception("Please specify the number of threads as an integer.") if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") + raise Exception("Please specify whether forced overwrite is True or False.") if not isinstance(verbose, bool): raise Exception("Please specify whether verbose is True or False.") arg = ["dwiextract"] @@ -980,7 +956,7 @@ def extractnonbzero(input, output, nthreads=None, force=False, verbose=False): arg.extend(["-no_bzero", input, output]) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Unable to extract B0s from DWI for computation " "of brain mask. See above for errors.") + raise Exception("Unable to extract B0s from DWI for computation of brain mask. See above for errors.") def extractshell(input, output, shell, nthreads=None, force=False, verbose=False): @@ -1008,7 +984,7 @@ def extractshell(input, output, shell, nthreads=None, force=False, verbose=False None; writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -1016,14 +992,14 @@ def extractshell(input, output, shell, nthreads=None, force=False, verbose=False "directory.".format(op.dirname(output)) ) if not isinstance(shell, int): - raise Exception("Please specify the shell to extract as an " "integer.") + raise Exception("Please specify the shell to extract as an integer.") if shell < 0: - raise Exception("Please specify the shell to extract as a " "positive (more than 0) integer.") + raise Exception("Please specify the shell to extract as a positive (more than 0) integer.") if nthreads is not None: if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") + raise Exception("Please specify the number of threads as an integer.") if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") + raise Exception("Please specify whether forced overwrite is True or False.") if not isinstance(verbose, bool): raise Exception("Please specify whether verbose is True or False.") arg = ["dwiextract"] @@ -1036,7 +1012,7 @@ def extractshell(input, output, shell, nthreads=None, force=False, verbose=False arg.extend(["-no_bzero", "-singleshell", "-shell", str(shell), input, output]) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Unable to extract specified shells from DWI. " "See above for errors.") + raise Exception("Unable to extract specified shells from DWI. See above for errors.") def extractmeanshell(input, output, shell, nthreads=None, force=False, verbose=False): @@ -1064,7 +1040,7 @@ def extractmeanshell(input, output, shell, nthreads=None, force=False, verbose=F None; writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -1072,14 +1048,14 @@ def extractmeanshell(input, output, shell, nthreads=None, force=False, verbose=F "directory.".format(op.dirname(output)) ) if not isinstance(shell, int): - raise Exception("Please specify the shell to extract as an " "integer.") + raise Exception("Please specify the shell to extract as an integer.") if shell < 0: - raise Exception("Please specify the shell to extract as a " "positive (more than 0) integer.") + raise Exception("Please specify the shell to extract as a positive (more than 0) integer.") if nthreads is not None: if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") + raise Exception("Please specify the number of threads as an integer.") if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") + raise Exception("Please specify whether forced overwrite is True or False.") if not isinstance(verbose, bool): raise Exception("Please specify whether verbose is True or False.") outdir = op.dirname(output) @@ -1091,11 +1067,11 @@ def extractmeanshell(input, output, shell, nthreads=None, force=False, verbose=F arg_mean = ["mrmath", "-axis", "3", fname_shell, "mean", fname_mean] completion = subprocess.run(arg_mean) if completion.returncode != 0: - raise Exception("Unable to compute mean of B0s. See above for" "errors.") + raise Exception("Unable to compute mean of B0s. See above forerrors.") arg_nan = ["mrcalc", fname_mean, "-finite", fname_mean, "0", "-if", output] completion = subprocess.run(arg_nan) if completion.returncode != 0: - raise Exception("Unable to remove NaNs from averaged shell " "image. See above for errors.") + raise Exception("Unable to remove NaNs from averaged shell image. See above for errors.") # Remove non-essential files os.remove(fname_shell) os.remove(fname_mean) @@ -1131,7 +1107,7 @@ def epiboost(input, output, num=1, nthreads=None, force=False, verbose=False): """ print("Applying EPIBOOST") if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if op.splitext(output)[-1] != ".mif": raise OSError("Output should be specified as a .mif file.") if not op.exists(op.dirname(output)): @@ -1141,14 +1117,14 @@ def epiboost(input, output, num=1, nthreads=None, force=False, verbose=False): "directory.".format(op.dirname(output)) ) if not isinstance(num, int): - raise Exception("Number of B0s to use needs to be specified " "as an integer.") + raise Exception("Number of B0s to use needs to be specified as an integer.") if not num > 0: - raise Exception("Number of B0s to use needs to be a positive " "integer greater than 0.") + raise Exception("Number of B0s to use needs to be a positive integer greater than 0.") if nthreads is not None: if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") + raise Exception("Please specify the number of threads as an integer.") if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") + raise Exception("Please specify whether forced overwrite is True or False.") if not isinstance(verbose, bool): raise Exception("Please specify whether verbose is True or False.") outdir = op.dirname(output) @@ -1171,7 +1147,7 @@ def epiboost(input, output, num=1, nthreads=None, force=False, verbose=False): uPE, indPE, iPE = np.unique(pe_scheme, axis=0, return_index=True, return_inverse=True) nPE = len(uPE) if nPE < 2: - raise Exception("DWI consists of just one PE direction. " "Unable to extract B0s.") + raise Exception("DWI consists of just one PE direction. Unable to extract B0s.") # Index unique PE directions bval = [] bind = [] @@ -1205,7 +1181,7 @@ def epiboost(input, output, num=1, nthreads=None, force=False, verbose=False): arg_epi.extend([fname_bzero, output]) completion = subprocess.run(arg_epi) if completion.returncode != 0: - raise Exception("EPIBOOST: failed to extract specified " "TOPUP B0 indices. See above for errors.") + raise Exception("EPIBOOST: failed to extract specified TOPUP B0 indices. See above for errors.") # Remove temp files os.remove(fname_bzero) @@ -1250,7 +1226,7 @@ def reslice(input, output, size, interp="linear", nthreads=None, force=False, ve """ dim_str = "-voxel" if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -1258,7 +1234,7 @@ def reslice(input, output, size, interp="linear", nthreads=None, force=False, ve "directory.".format(op.dirname(output)) ) if not isinstance(size, str): - raise Exception("Voxel size needs to be defined as a string " " of three values") + raise Exception("Voxel size needs to be defined as a string of three values") if len(size.split(",")) != 3: raise Exception( "Please specify voxel size for each axis or " @@ -1269,14 +1245,14 @@ def reslice(input, output, size, interp="linear", nthreads=None, force=False, ve if max([float(x) for x in size.split(",")]) > 9: dim_str = "-size" if not isinstance(interp, str): - raise Exception("Interpolation method needs to be specified " "as a string") + raise Exception("Interpolation method needs to be specified as a string") if interp not in ("linear", "nearest", "cubic", "sinc"): - raise Exception("User specified interpoaltion method {} is " "not a valid option".format(interp)) + raise Exception("User specified interpoaltion method {} is not a valid option".format(interp)) if nthreads is not None: if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") + raise Exception("Please specify the number of threads as an integer.") if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") + raise Exception("Please specify whether forced overwrite is True or False.") if not isinstance(verbose, bool): raise Exception("Please specify whether verbose is True or False.") if dim_str == "-voxel": @@ -1336,16 +1312,16 @@ def dwiextract(input, output, start, end, nthreads=None, force=False, verbose=Fa None; writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not isinstance(start, int): raise Exception("Starting index is needs to be an integer.") if not isinstance(end, int): raise Exception("Ending index is needs to be an integer.") if nthreads is not None: if not isinstance(nthreads, int): - raise Exception("Please specify the number of threads as an " "integer.") + raise Exception("Please specify the number of threads as an integer.") if not isinstance(force, bool): - raise Exception("Please specify whether forced overwrite is True " "or False.") + raise Exception("Please specify whether forced overwrite is True or False.") if not isinstance(verbose, bool): raise Exception("Please specify whether verbose is True or False.") fname, ext = op.splitext(output) @@ -1372,4 +1348,4 @@ def dwiextract(input, output, start, end, nthreads=None, force=False, verbose=Fa ) completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Failed to extract indexed DWI volumes. See " "above for errors.") + raise Exception("Failed to extract indexed DWI volumes. See above for errors.") diff --git a/pydesigner/preprocessing/preparation.py b/pydesigner/preprocessing/preparation.py index 6026ec00..99e27bc6 100644 --- a/pydesigner/preprocessing/preparation.py +++ b/pydesigner/preprocessing/preparation.py @@ -1,8 +1,7 @@ #!/usr/bin/env python # -*- coding : utf-8 -*- -"""Adds utilities for preparing the data for eddy and analysis -""" +"""Adds utilities for preparing the data for eddy and analysis""" import os # mkdir import os.path as op # dirname, basename, join, splitext @@ -188,7 +187,7 @@ def make_se_epi(filetable): get_rpe_info_args = ["mrinfo", "-size", tmp_tp] completion = subprocess.run(get_rpe_info_args, capture_output=True) if completion.returncode != 0: - raise Exception("Extracted topup information failed, " "please see above") + raise Exception("Extracted topup information failed, please see above") ndrpexstr = completion.stdout.decode("utf-8").rstrip().split(" ")[-1] ndrpex = int(ndrpexstr.rstrip('"')) diff --git a/pydesigner/preprocessing/util.py b/pydesigner/preprocessing/util.py index 9954a23a..f360f290 100644 --- a/pydesigner/preprocessing/util.py +++ b/pydesigner/preprocessing/util.py @@ -1,7 +1,7 @@ -"""Adds utilities for the command-line interface -""" +"""Adds utilities for the command-line interface""" import json # decode +import logging import os import os.path as op # dirname, basename, join, splitext import pprint # pprint @@ -12,6 +12,8 @@ from pydesigner.preprocessing import mrinfoutil +log = logging.getLogger(__name__) + def find_valid_ext(pathname): """Finds valid extensions for dwifile, helper function @@ -296,7 +298,7 @@ def isPartialFourier(self): else: return True else: - print( + log.warn( "Insufficient information in .json file to " "determine Fourier status. Assuming DWI is " "partial Fourier" @@ -436,7 +438,7 @@ def cat(self, path, ext=".nii", verbose=False, force=False, resume=False): try: json2fslgrad(i) except: # noqa: E722 - raise IOError("Please supply a valid JSON file " "accompanying {}".format(i)) + raise IOError("Please supply a valid JSON file accompanying {}".format(i)) convert_args = ["mrconvert"] if verbose is False: convert_args.append("-quiet") @@ -472,9 +474,7 @@ def cat(self, path, ext=".nii", verbose=False, force=False, resume=False): completion = subprocess.run(cmd, shell=True) if completion.returncode != 0: raise Exception( - 'Please use the "--force" flag to ' - "overwrite existing outputs, or clear " - "the output directory" + 'Please use the "--force" flag to overwrite existing outputs, or clear the output directory' ) # The following command concatenates all DWI(i) into a single # .mif file if nDWI > 1 @@ -490,7 +490,7 @@ def cat(self, path, ext=".nii", verbose=False, force=False, resume=False): cmd = " ".join(str(e) for e in cat_arg) completion = subprocess.run(cmd, shell=True) if completion.returncode != 0: - raise Exception("Failed to concatenate multiple " "series.") + raise Exception("Failed to concatenate multiple series.") else: cat_arg = ["mrconvert"] if verbose is False: diff --git a/pydesigner/system/errors.py b/pydesigner/system/errors.py new file mode 100644 index 00000000..0afa16f0 --- /dev/null +++ b/pydesigner/system/errors.py @@ -0,0 +1,10 @@ +class FileExtensionError(FileNotFoundError): + """Raise an exception for extension-related issues.""" + + pass + + +class MRTrixError(IOError): + """Raise an exception for MRPreproc-related issues.""" + + pass diff --git a/pydesigner/system/models.py b/pydesigner/system/models.py new file mode 100644 index 00000000..8a225f05 --- /dev/null +++ b/pydesigner/system/models.py @@ -0,0 +1,123 @@ +import os.path as op +import typing as t + +from pydantic import BaseModel, StrictBool, ValidationInfo, field_validator + +from .errors import FileExtensionError + + +class modelmrtrix(BaseModel): + """Define model validator for common MRtrix3 CLI options.""" + + input: t.Optional[t.Union[str, t.Any]] = None + output: t.Optional[t.Union[str, t.Any]] = None + nthreads: t.Optional[t.Union[int, t.Any]] = None + verbose: t.Optional[StrictBool] = None + force: t.Optional[StrictBool] = None + + @field_validator("input", mode="before") + @classmethod + def input_valid(cls, var: str, info: ValidationInfo) -> str: + """Validate that input file is correct type and exists.""" + if not isinstance(var, str): + msg = f"Input file path ({info.field_name}={var}) is not a string type. Type entered is {type(var)}." + raise TypeError(msg) + if not op.exists(op.dirname(var)): + msg = f"Specified directory ({op.dirname(var)}) for output file " + msg += f"({op.basename(var)}) does not exist. " + msg += "Pleasure ensure that the input parent directory exists." + raise OSError(msg) + if not op.exists(var): + msg = f"Input file path ({var}) does not exist." + raise FileNotFoundError(msg) + return var + + @field_validator("output", mode="before") + @classmethod + def output_valid(cls, var: str, info: ValidationInfo) -> str: + """Validate output filename and parent folder.""" + if not isinstance(var, str): + msg = f"Output file path ({info.field_name}={var}) is not a string type. " + msg += f"Type entered is {type(var)}." + raise TypeError(msg) + if not op.exists(op.dirname(var)): + msg = f"Specified directory ({op.dirname(var)}) for output file " + msg += f"({op.basename(var)}) does not exist. " + msg += "Pleasure ensure that the output parent directory exists." + raise OSError(msg) + return var + + @field_validator("nthreads", mode="before") + @classmethod + def correct_nthreads(cls, var: int, info: ValidationInfo) -> int: + """Check that nthreads is a postive integer.""" + if var is not None: + if not isinstance(var, int): + msg = f"{info.field_name} is provided as a {type(var)}. " + msg += "Please provide a positive integer." + raise TypeError(msg) + if var <= 0: + raise ValueError(f"{info.field_name} needs to be a valid positive integer.") + return int(var) + else: + return var + + +def input_path_validator(path: str, ctype: str = None): + """Validates a provided input path + + Parameters + ---------- + path : str + Path to input file + ctype : str + File extension to enfore on input path + + Returns + ------- + str + Sanitized path + + See Also + -------- + output_path_validator + """ + opts = modelmrtrix(input=path) + if ctype is not None: + if not isinstance(ctype, str): + msg = f"ctype variable (ctype={ctype}) needs to be a valid string." + raise (TypeError(msg)) + if ctype: + if op.splitext(op.basename(opts.input))[-1] != ctype: + msg = f"Input file ({path}) does not posses the required {ctype} extension." + raise FileExtensionError(msg) + return str(path) + + +def output_path_validator(path: str, ctype: str = None): + """Validates a provided input path + Parameters + ---------- + path : str + Path to output file + ctype : str + File extension to enfore on output path + + Returns + ------- + str + Sanitized path + + See Also + -------- + input_path_validator + """ + if ctype is not None: + if not isinstance(ctype, str): + msg = f"ctype variable (ctype={ctype}) needs to be a valid string." + raise (TypeError(msg)) + if ctype: + if op.splitext(op.basename(path))[-1] != ctype: + msg = f"Output file ({path}) does not posses the required {ctype} extension." + raise FileExtensionError(msg) + return str(path) diff --git a/pydesigner/system/utils.py b/pydesigner/system/utils.py index 108020c7..edd623de 100644 --- a/pydesigner/system/utils.py +++ b/pydesigner/system/utils.py @@ -51,7 +51,7 @@ def vectorize(img, mask) -> np.ndarray[float]: return np.squeeze(s) -def writeNii(map, hdr, outDir, range=None) -> None: +def writeNii(map, hdr, outDir, range=None, clip=False) -> None: """Write clipped NifTi images Parameters @@ -65,6 +65,9 @@ def writeNii(map, hdr, outDir, range=None) -> None: range : array_like [1 x 2] vector specifying range to clip, inclusive of value in range, e.g. range = [0, 1] for FA map + clip: bool + Clip and apply values specified in range + (Default: False) Returns ------- @@ -72,13 +75,15 @@ def writeNii(map, hdr, outDir, range=None) -> None: Examples -------- - writeNii(matrix, header, output_directory, [0, 2]) + writeNii(matrix, header, output_directory, [0, 2], clip=True) See Also -------- clipImage(img, range) : this function is wrapped around """ - if range is None: + if clip and not range: + raise Exception("Range is required in order to clip an image.") + if not clip: clipped_img = nib.Nifti1Image(map, hdr.affine, hdr.header) else: clipped_img = clipImage(map, range) @@ -104,7 +109,7 @@ def clipImage(img, range) -> np.ndarray[float]: Examples -------- - clippedImage = clipImage(image, [0 3]) + clippedImage = clipImage(image, [0, 3]) Clips input matrix in the range 0 to 3 """ img[img > range[1]] = range[1] diff --git a/pydesigner/tractography/dsistudio.py b/pydesigner/tractography/dsistudio.py index 09940594..a805acf4 100644 --- a/pydesigner/tractography/dsistudio.py +++ b/pydesigner/tractography/dsistudio.py @@ -11,7 +11,6 @@ """ - import os import os.path as op import subprocess @@ -21,11 +20,13 @@ import numpy as np from dipy.core.geometry import cart2sphere from dipy.core.sphere import HemiSphere -from dipy.direction import gfa, peak_directions +from dipy.direction import peak_directions +from dipy.reconst.odf import gfa from scipy.io.matlab import loadmat, savemat from tqdm import tqdm -from . import sphericalsampling +# from . import sphericalsampling +from pydesigner.tractography import sphericalsampling ODF_COLS = 20000 # Number of columns in DSI Studio odf split tqdmWidth = 70 @@ -68,7 +69,7 @@ def convertLPS(input, output) -> None: None, writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -76,13 +77,13 @@ def convertLPS(input, output) -> None: "directory.".format(op.dirname(output)) ) if op.splitext(input)[-1] != ".nii": - raise IOError("Input file needs to specified as a NifTI " "(.nii)") + raise IOError("Input file needs to specified as a NifTI (.nii)") if op.splitext(output)[-1] != ".nii": - raise IOError("Output file needs to specified as a NifTI " "(.nii)") + raise IOError("Output file needs to specified as a NifTI (.nii)") arg = ["mrconvert", "-quiet", "-force", input, "-strides", "-1,-2,3,4", output] completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Conversion of NifTI file to LPS failed. " "Check above for errors.") + raise Exception("Conversion of NifTI file to LPS failed. Check above for errors.") def makefib(input, output, map=None, mask=None, n_fibers=5, scale=1, other_maps=None) -> None: @@ -124,7 +125,7 @@ def makefib(input, output, map=None, mask=None, n_fibers=5, scale=1, other_maps= None, writes out file """ if not op.exists(input): - raise OSError("Input path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input path does not exist. Please ensure that the folder or file specified exists.") if not op.exists(op.dirname(output)): raise OSError( "Specifed directory for output file {} does not " @@ -132,22 +133,22 @@ def makefib(input, output, map=None, mask=None, n_fibers=5, scale=1, other_maps= "directory.".format(op.dirname(output)) ) if op.splitext(input)[-1] != ".nii": - raise IOError("Input file needs to specified as a NifTI " "(.nii)") + raise IOError("Input file needs to specified as a NifTI (.nii)") if op.splitext(output)[-1] != ".fib": raise IOError("Output file needs to specified as a .fib file") if map is not None: if not op.exists(map): - raise OSError("Path to map image does not exist. Please " "ensure that the folder specified exists.") + raise OSError("Path to map image does not exist. Please ensure that the folder specified exists.") if mask is not None: if not op.exists(mask): - raise OSError("Path to brain mask does not exist. Please " "ensure that the folder specified exists.") + raise OSError("Path to brain mask does not exist. Please ensure that the folder specified exists.") if isinstance(other_maps, list) or other_maps is None: if isinstance(other_maps, list): if any([not op.exists(x) for x in other_maps]): - raise OSError("One of the paths defined in other maps does not " "exist Please ensure all files exist.") + raise OSError("One of the paths defined in other maps does not exist Please ensure all files exist.") else: raise TypeError( - "Path to other maps needs to be entered as a list of " "strings defining paths to other metric files." + "Path to other maps needs to be entered as a list of strings defining paths to other metric files." ) outdir = op.dirname(output) # Convert to LPS @@ -188,31 +189,35 @@ def makefib(input, output, map=None, mask=None, n_fibers=5, scale=1, other_maps= ] completion = subprocess.run(arg) if completion.returncode != 0: - raise Exception("Failed to determine amplitude of SH " "coefficients. Check above for errors.") + raise Exception("Failed to determine amplitude of SH coefficients. Check above for errors.") # Load images - amplitudes_img = nib.load(odf_amplitudes_nii) - ampl_data = amplitudes_img.get_fdata() + amplitudes_data = nib.load(odf_amplitudes_nii) + amplitudes_img = amplitudes_data.get_fdata() if mask is not None: - mask_img = nib.load(mask_) - if not np.allclose(mask_img.affine, amplitudes_img.affine): - raise ValueError("Differing orientation between mask and " "amplitudes.") + mask_data = nib.load(mask_) + mask_img = mask_data.get_fdata() + if not np.allclose(mask_data.affine, amplitudes_data.affine): + raise ValueError("Differing orientation between mask and amplitudes.") if not mask_img.shape == amplitudes_img.shape[:3]: - raise ValueError("Differing grid between mask and " "amplitudes") - mask_img = mask_img.get_fdata() + raise ValueError("Differing grid between mask and amplitudes") else: - mask_img = np.ones((ampl_data.shape[0], ampl_data.shape[1], ampl_data.shape[2]), order="F") + mask_img = np.ones( + (amplitudes_img.shape[0], amplitudes_img.shape[1], amplitudes_img.shape[2]), + order="F", + ) # Make flat mask flat_mask = mask_img.flatten(order="F") > 0 - odf_array = ampl_data.reshape(-1, ampl_data.shape[3], order="F") + odf_array = amplitudes_img.reshape(-1, amplitudes_img.shape[3], order="F") masked_odfs = odf_array[flat_mask, :] masked_odfs = np.nan_to_num(masked_odfs) if map is not None: - map_img = nib.load(map_) - if not np.allclose(map_img.affine, amplitudes_img.affine): - raise ValueError("Differing orientation between map image and " "amplitudes.") + map_data = nib.load(map_) + map_img = map_data.get_fdata() + if not np.allclose(map_data.affine, amplitudes_data.affine): + raise ValueError("Differing orientation between map image and amplitudes.") if not map_img.shape == amplitudes_img.shape[:3]: - raise ValueError("Differing grid between map image and " "amplitudes") - map_img = map_img.get_fdata().flatten(order="F") + raise ValueError("Differing grid between map image and amplitudes") + map_img = map_img.flatten(order="F") map_img[map_img < 0] = 0 masked_map = map_img[flat_mask] @@ -248,8 +253,8 @@ def makefib(input, output, map=None, mask=None, n_fibers=5, scale=1, other_maps= peak_vals = np.zeros((n_odfs, n_fibers)) dsi_mat = {} # Create matfile that can be read by dsi Studio - dsi_mat["dimension"] = np.array(amplitudes_img.shape[:3]) - dsi_mat["voxel_size"] = np.array(amplitudes_img.header.get_zooms()[:3]) + dsi_mat["dimension"] = np.array(amplitudes_data.shape[:3]) + dsi_mat["voxel_size"] = np.array(amplitudes_data.header.get_zooms()[:3]) n_voxels = int(np.prod(dsi_mat["dimension"])) for odfnum in tqdm( range(masked_odfs.shape[0]), @@ -298,10 +303,11 @@ def makefib(input, output, map=None, mask=None, n_fibers=5, scale=1, other_maps= map_dir = op.dirname(path_map) map_lps = op.join(map_dir, map_name + "_lps" + ext) convertLPS(path_map, map_lps) - other_img = nib.load(map_lps) + other_data = nib.load(map_lps) + other_img = other_data.get_fdata() if not other_img.shape == amplitudes_img.shape[:3]: - raise ValueError("Differing grid between other map image: {} " "and amplitudes".format(path_map)) - gmap = other_img.get_fdata().flatten(order="F") + raise ValueError("Differing grid between other map image: {} and amplitudes".format(path_map)) + gmap = other_img.flatten(order="F") dsi_mat[map_name] = gmap.astype(np.float32) os.remove(map_lps) savemat(output, dsi_mat, format="4", appendmat=False) @@ -313,3 +319,15 @@ def makefib(input, output, map=None, mask=None, n_fibers=5, scale=1, other_maps= os.remove(map_) os.remove(dirs_txt) os.remove(odf_amplitudes_nii) + + +# path_sh = "/mnt/d/Datasets/PyDesigner_Test/test_run/metrics/dki_odf.nii" +# path_mask = "/mnt/d/Datasets/PyDesigner_Test/test_run/brain_mask.nii" +# path_out = "/mnt/d/Datasets/PyDesigner_Test/dki_odf/dki.fib" +# path_fa = "/mnt/d/Datasets/PyDesigner_Test/test_run/metrics/dti_fa.nii" +# makefib( +# input=path_sh, +# output=path_out, +# mask=path_mask, +# map = path_fa, +# ) diff --git a/pydesigner/tractography/odf.py b/pydesigner/tractography/odf.py index fd432891..955357e0 100644 --- a/pydesigner/tractography/odf.py +++ b/pydesigner/tractography/odf.py @@ -4,6 +4,7 @@ """Function for computing DTI and DKI spherical harmonics from diffusion and kurtosis tensors """ + import multiprocessing import os.path as op import warnings @@ -64,20 +65,18 @@ def __init__( (Default: 4) """ if not op.exists(dt): - raise OSError("Input DT path does not exist. Please ensure that " "the folder or file specified exists.") + raise OSError("Input DT path does not exist. Please ensure that the folder or file specified exists.") if kt is not None: if not op.exists(kt): - raise OSError( - "Input KT path does not exist. Please ensure that " "the folder or file specified exists." - ) + raise OSError("Input KT path does not exist. Please ensure that the folder or file specified exists.") if mask is not None: if not op.exists(mask): - raise OSError("Path to brain mask does not exist. Please " "ensure that the file specified exists.") + raise OSError("Path to brain mask does not exist. Please ensure that the file specified exists.") if scale is not None: if not op.exists(scale): - raise OSError("Path to scale image does not exist. Please " "ensure that the file specified exists.") + raise OSError("Path to scale image does not exist. Please ensure that the file specified exists.") if not isinstance(res, str): - raise Exception("Please specify resolution as a string. Possible " 'choices are "low", "med", or "high"') + raise Exception('Please specify resolution as a string. Possible choices are "low", "med", or "high"') # Load images self.hdr = nib.load(dt) self.DT = self.hdr.get_fdata() @@ -94,10 +93,10 @@ def __init__( else: self.scale_img = np.ones(self.DT.shape[0:3]) if l_max % 2 != 0: - raise Exception("Please provide l_max as a postive " "and even integer") + raise Exception("Please provide l_max as a postive and even integer") self.l_max = l_max if radial_weight is None: - warnings.warn("Radial weight for dODF computation not specified. " "Using default value of 4.") + warnings.warn("Radial weight for dODF computation not specified. Using default value of 4.") self.radial_weight = 4 else: self.radial_weight = radial_weight @@ -472,7 +471,7 @@ def dkiodf(self, form="spherical", fa_t=0.90) -> np.ndarray[float]: raise Exception("Please select a valid form of ODF to receive") if self.KT is None: raise AttributeError( - "WOAH! Cannot compute DKI ODFs without " "kurtosis tensor (KT). Try using dtiodf(), Jumbo." + "WOAH! Cannot compute DKI ODFs without kurtosis tensor (KT). Try using dtiodf(), Jumbo." ) # Vectorize images DT = vectorize(self.DT, self.mask_img) @@ -545,7 +544,7 @@ def dtiodf(self, form="spherical") -> np.ndarray[float]: DTI ODF in defined form """ if self.DT is None: - raise AttributeError("WOAH! Cannot compute DTI ODFs without " "diffusion tensor (DT), Jumbo.") + raise AttributeError("WOAH! Cannot compute DTI ODFs without diffusion tensor (DT), Jumbo.") # Vectorize images DT = vectorize(self.DT, self.mask_img) nvox = DT.shape[-1] @@ -913,7 +912,7 @@ def shbasis(deg, phi, theta, method="scipy") -> np.ndarray[complex]: try: deg = [int(x) for x in deg] except: # noqa: E722 - raise TypeError("Please supply degree of " "shperical harmonic as an integer") + raise TypeError("Please supply degree of shperical harmonic as an integer") if not isinstance(method, str): raise TypeError("Please enter method as a string") if method not in ["scipy", "tournier", "descoteaux"]: diff --git a/pydesigner/tractography/sphericalsampling.py b/pydesigner/tractography/sphericalsampling.py index d8864f8c..5658e825 100644 --- a/pydesigner/tractography/sphericalsampling.py +++ b/pydesigner/tractography/sphericalsampling.py @@ -1,7 +1,6 @@ #!/usr/bin/env python # -*- coding : utf-8 -*- -"""Various definitions of spherical sampling -""" +"""Various definitions of spherical sampling""" import numpy as np @@ -61896,9 +61895,9 @@ def odfgrid(res="med") -> np.ndarray[float]: Average separation angle between each peak and its nearest neighbors. """ if not isinstance(res, str): - raise Exception("Please specify resolution as a string. Possible " 'choices are "low", "med", or "high"') + raise Exception('Please specify resolution as a string. Possible choices are "low", "med", or "high"') if res not in ["low", "med", "high"]: - raise Exception(". Invalid ODF resolution. Possible resolution choices " 'are "low", "med", or "high"') + raise Exception('. Invalid ODF resolution. Possible resolution choices are "low", "med", or "high"') if res == "low": S = np.array( [ diff --git a/pyproject.toml b/pyproject.toml index fb89f3c9..b7bf98d9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,42 +27,35 @@ classifiers = [ ] [tool.poetry.dependencies] -python = ">=3.11, <4.0" -numpy = ">=1.20.0, <1.26.0" +python = ">=3.12, <4.0" +numpy = ">=1.20.0, <1.30.0" scipy = ">=1.5.0, <2.0.0" joblib = ">=1.2.0, <2.0.0" tqdm = ">=4.65.0, <5.0.0" multiprocess = ">=0.70.00, <0.80.00" nibabel = ">=5.0.0, <6.0.0" dipy = ">=1.7.0, <2.0.0" -cvxpy = ">1.3.0, <2.0.0" +cvxpy = ">=1.3.0, <2.0.0" matplotlib = ">=3.7.0, <4.0.0" - -[tool.poetry.scripts] -pydesigner = "pydesigner.main:main" +pydantic = "^2.7.0" [tool.poetry.group.dev.dependencies] pytest = ">=7.4.0, <8.0.0" +pytest-cov = "^5.0.0" +pytest-xdist = "^3.6.1" + +[tool.poetry.scripts] +pydesigner = "pydesigner.main:main" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" -[tool.black] -line-length = 120 -target-version = ["py311", "py312"] -exclude = "docs/" - [tool.ruff] -# Enable the pycodestyle (`E`) and Pyflakes (`F`) rules by default. -# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or -# McCabe complexity (`C901`) by default. -select = ["E", "F", "I"] -ignore = [] +line-length = 120 -# Allow fix for all enabled rules (when `--fix`) is provided. -fixable = ["ALL"] -unfixable = [] +# Assume Python 3.12 +target-version = "py312" # Exclude a variety of commonly ignored directories. exclude = [ @@ -88,19 +81,38 @@ exclude = [ "node_modules", "venv", "docs", + "tests", "setup.py", ] -# Same as Black -line-length = 120 +[tool.ruff.lint] +# Enable the pycodestyle (`E`) and Pyflakes (`F`) rules by default. +# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or +# McCabe complexity (`C901`) by default. +select = ["E", "F", "I"] +ignore = ["F841"] + +# Allow fix for all enabled rules (when `--fix`) is provided. +fixable = ["ALL"] +unfixable = [] # Allow unused variables when underscore-prefixed. dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" -# Assume Python 3.11 -target-version = "py311" +[tool.ruff.format] +# Like Black, use double quotes for strings. +quote-style = "double" + +# Like Black, indent with spaces, rather than tabs. +indent-style = "space" + +# Like Black, respect magic trailing commas. +skip-magic-trailing-comma = false + +# Like Black, automatically detect the appropriate line ending. +line-ending = "auto" -[tool.ruff.per-file-ignores] +[tool.ruff.lint.per-file-ignores] "pydesigner/fitting/__init__.py" = ["F401"] "pydesigner/plotting/__init__.py" = ["F401"] "pydesigner/postprocessing/__init__.py" = ["F401"] diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 00000000..add68540 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,9 @@ +colorama==0.4.6 ; python_version >= "3.12" and python_version < "4.0" and sys_platform == "win32" +coverage[toml]==7.6.10 ; python_version >= "3.12" and python_version < "4.0" +execnet==2.1.1 ; python_version >= "3.12" and python_version < "4.0" +iniconfig==2.0.0 ; python_version >= "3.12" and python_version < "4.0" +packaging==24.2 ; python_version >= "3.12" and python_version < "4.0" +pluggy==1.5.0 ; python_version >= "3.12" and python_version < "4.0" +pytest-cov==5.0.0 ; python_version >= "3.12" and python_version < "4.0" +pytest-xdist==3.6.1 ; python_version >= "3.12" and python_version < "4.0" +pytest==7.4.4 ; python_version >= "3.12" and python_version < "4.0" diff --git a/requirements.txt b/requirements.txt index 23f17380..cbb9024e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,548 +1,34 @@ -clarabel==0.6.0 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:2e0b1891d8e507eb0bfc7e0b981584c388b2ab28658056e600997dbbc23f1ab4 \ - --hash=sha256:4f366de79b8bc66bef8dc170987840b672ccab9222e710c09536d78ef47f606d \ - --hash=sha256:5a6be4df9fed98b6f73f034836def913a1ecd52e8b79ca230ddf7cd66ebcdee7 \ - --hash=sha256:73ed408c975a8ea021c3d8262d5d023a18e1ac3f6bb59a37cd69a11dba8f86ed \ - --hash=sha256:9946d3b5db346421b6d839d868e7b1151b590f871344fe95113bfd55b5be2433 \ - --hash=sha256:e737d2818b9ca10e92ccd3fa9ad1a805b039976016415a0c45adef3427d70792 \ - --hash=sha256:edcebbfc14073cd32bfb664317fd2555716c96be8b2a54efdb2b728453582bea \ - --hash=sha256:ef909a393e72981ca10b1d866d9cc7fb6295ece20ae035def764338894961184 -colorama==0.4.6 ; python_version >= "3.11" and python_version < "4.0" and platform_system == "Windows" \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 -contourpy==1.1.1 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6 \ - --hash=sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33 \ - --hash=sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8 \ - --hash=sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d \ - --hash=sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d \ - --hash=sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c \ - --hash=sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf \ - --hash=sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e \ - --hash=sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e \ - --hash=sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163 \ - --hash=sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532 \ - --hash=sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2 \ - --hash=sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8 \ - --hash=sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1 \ - --hash=sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b \ - --hash=sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9 \ - --hash=sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916 \ - --hash=sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23 \ - --hash=sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb \ - --hash=sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a \ - --hash=sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e \ - --hash=sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442 \ - --hash=sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684 \ - --hash=sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34 \ - --hash=sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d \ - --hash=sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d \ - --hash=sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9 \ - --hash=sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45 \ - --hash=sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718 \ - --hash=sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab \ - --hash=sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3 \ - --hash=sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae \ - --hash=sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb \ - --hash=sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5 \ - --hash=sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba \ - --hash=sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0 \ - --hash=sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217 \ - --hash=sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887 \ - --hash=sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887 \ - --hash=sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62 \ - --hash=sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431 \ - --hash=sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b \ - --hash=sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce \ - --hash=sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b \ - --hash=sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f \ - --hash=sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85 \ - --hash=sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e \ - --hash=sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7 \ - --hash=sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251 \ - --hash=sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970 \ - --hash=sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0 \ - --hash=sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7 -cvxpy==1.4.1 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:03588055b660c043848f5281fe24dbd21f005b34bd8bd3b56906d8ad457c14ae \ - --hash=sha256:0f1482558b785f2db51c76b9c6e91cc85dbd146675b126a799e7d7aab5b15354 \ - --hash=sha256:163caffd7f7f27b6cb151f4ccff283068e063c3673158793048761690cbe4bbe \ - --hash=sha256:2f84687d15d11f9b49ca902f20103a2076efd47773c399cace71237ef53cdadc \ - --hash=sha256:315609ff96adeda4970471b349bc19d44ff4043e15630cf5ac70c029658fe8fc \ - --hash=sha256:372c0825cc6e6bb03ecc550d83718761a1bbdbbb48010fec6f9718581ebd45b5 \ - --hash=sha256:41cfaecf86f85162ca53c7be7377b4143e316204fb9b6a7df8b7a08c826e3806 \ - --hash=sha256:55e08ffb973d62b3fabc675ad464cb6013ea5ce69799f330b33a084a2e580d8d \ - --hash=sha256:57593a852c563ce77bdb075a3e75f23d36d4b3162ebf3199b54cc7fe75088ef2 \ - --hash=sha256:5a3ec054279880a9ebf5fd9d2ac4109acf944b8c45ea8b24e461680e34f3d7b5 \ - --hash=sha256:6b0f17dca85b2a410e73f5d84b28f35f57a20cfec1b0adc9b16f0f8aabff9961 \ - --hash=sha256:71a95aaccf22431fd25a63bcb12d583e1b0baeaeb4fafa3e25857cec03b9e2f3 \ - --hash=sha256:7a46ef722c8d1590875e86360d5781703dfcbd08be73eb98a2fc91a280870064 \ - --hash=sha256:7a9ef34e3c57ff8c844d86f0a3834fb5575af19233947639de0ba577c6122e3e \ - --hash=sha256:9318c4e679b3db470e76e7f23cce362b038bd2d68c4a7326a7c21577ddbdc542 \ - --hash=sha256:9d3bae3bf31e4eb6ed6407f78c6bc3c7bc4b4145cdbbb9ba8c61c3fc541d7067 \ - --hash=sha256:d220a7ee55907da9b55b98e5238d03735118d03b82855ba87b872cb2e6977367 \ - --hash=sha256:d6bfbd535fdaabc5fa55f28de7a1d40f3a803a27fe3fec86e90700fa159a3afc \ - --hash=sha256:db89b55025514bad821b1f1781bed373cbb6aa22fe84420431efd510dbe7f858 \ - --hash=sha256:edf66010e49b64d3f2dd1a7abde8fa3e615ce7a2b3eb185ab744b0beb3a6adb9 \ - --hash=sha256:f24067c54979b09910aea0a03256247121d8a8169538facf087c1923e9e2701a -cycler==0.12.1 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 \ - --hash=sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c -dill==0.3.7 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e \ - --hash=sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03 -dipy==1.7.0 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:21bd7b14048f80ef7b74cd52a6ffeaf2b8b7337f5cf4e88e95af9827cfea7f96 \ - --hash=sha256:34f1c6323f4e884dcd0e3f1dd51666d9059f1abb146fd78105aaf4c33f45184c \ - --hash=sha256:4ff4cc129fed6f30d11f925350dc79edda6eda7815b04a59b486415746faa6a9 \ - --hash=sha256:53cac93c25e0ee5c3ecbbc17a1fcef6607564098ae1eedfbd5f548dbdde74bdd \ - --hash=sha256:59bb647128aae7793215c813bb8ea35dae260ac9f0d938c724064f0af5a05cc3 \ - --hash=sha256:67b55e6f379396c55fbe9dde9e888b9e60543285839110e0f096030bdb5d0968 \ - --hash=sha256:77cf294ac16fe548cbbca4aaea2a9c993e1d2e4230416926973d50aebae91b43 \ - --hash=sha256:83fd19a0347d52590ed45d5fa4ca0e6723a6c96a455c46f3696dc4feba131f53 \ - --hash=sha256:a6e0b216b91e3f98dbb2140a8668daff9d0b469630eeaab3482975034d791aed \ - --hash=sha256:a8ea49b11abf423fb8abcd28dc8549467e4ea32a297db1c89301cfb49c57eb99 \ - --hash=sha256:c4b7f8acc389065ee62c16d5087a625de0545fc1fcdbd28866749b7195e3f761 \ - --hash=sha256:c5df095b3bf41d8bb8568efe3b6a83ec87fe4bbc6bdc5895d0160a1688961e21 \ - --hash=sha256:cce5db9595e4910fe5818f50d1ef45f29239a47ddb06e46c3c43559abe30aadb \ - --hash=sha256:d21c069950ea7319e9580c5513c84232f5d06c68b4c047ab4bd8a11b2bcf51b5 \ - --hash=sha256:d2dff5b1b19d3df497ff2252cb25a2610390068d1e6cd1e822719732d8701d7f \ - --hash=sha256:d70498b8950a75f250059362244a63e4c597f9ab70b5d8ad1537d311b92b7303 \ - --hash=sha256:e333506d3eb29c8474fa2431928684cc04a79531d23647e7e9906c0753817ea9 \ - --hash=sha256:ffe4638780d2224871c139a74b83ab4dfb443705e405f8dbf1ee5956a5d413aa -ecos==2.0.12 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:29d00164eaea66ed54697a3b361c575284a8bca54f2623381a0635806c7303a7 \ - --hash=sha256:3e42bd4c19af6e04f76ccc85d941b1f1adc7faeee4d06d482395a6beb7bec895 \ - --hash=sha256:4979dc2d1cb6667e371a45a61887068505c1305437eef104ed6ef16f4b6aa0e3 \ - --hash=sha256:4e86671397d1d2cd7cccff8a9c45be0541b0c60af8b92a0ff3581c9ed869db67 \ - --hash=sha256:5184a9d8521ad1af90ffcd9902a6fa75c7bc473f37d30d86f97beda1033dfca2 \ - --hash=sha256:528b02f53835bd1baeb2e23f8153b8d6cc2b3704e1768be6a1a972f542241670 \ - --hash=sha256:608bc822ee8e070927ab3519169b13a1a0fe88f3d562212d6b5dbb1039776360 \ - --hash=sha256:617be25d74222849622b0f82b94a11abcf1fae78ccaf69977b328321ee6ffa0b \ - --hash=sha256:6def54336a15b5a49bc3bfcaa36035e8557cae8a4853b17ca84f5a29c93bcaea \ - --hash=sha256:7af08941552fce108bd80145cdb6be7fa74477a20bacdac170800442cc7027d4 \ - --hash=sha256:835298a299c88c207b3402fba60ad9b5688b59bbbf2ac34a46de5b37165d773a \ - --hash=sha256:858a4dd3177bdc8cc6e362031732f5177b62138a1e4ef91c0dc3c6bd7d2d1248 \ - --hash=sha256:da8fbbca3feb83a9e27075d29b3765417d0c80af8ea83cbdc4a558cae7b564af \ - --hash=sha256:eba07599084724eedc20b2862d5580eebebb09609f4740baadc78401cb99827c \ - --hash=sha256:f48816d73b87ae325556ea537b7c8743187311403c80e3832035224156337c4e \ - --hash=sha256:f70e4547966f530fd7715756f7a65d5b9b90b312b9d37f243ef9356c05e7d74c -fonttools==4.43.1 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:10003ebd81fec0192c889e63a9c8c63f88c7d72ae0460b7ba0cd2a1db246e5ad \ - --hash=sha256:10b3922875ffcba636674f406f9ab9a559564fdbaa253d66222019d569db869c \ - --hash=sha256:13a9a185259ed144def3682f74fdcf6596f2294e56fe62dfd2be736674500dba \ - --hash=sha256:17dbc2eeafb38d5d0e865dcce16e313c58265a6d2d20081c435f84dc5a9d8212 \ - --hash=sha256:18a2477c62a728f4d6e88c45ee9ee0229405e7267d7d79ce1f5ce0f3e9f8ab86 \ - --hash=sha256:18eefac1b247049a3a44bcd6e8c8fd8b97f3cad6f728173b5d81dced12d6c477 \ - --hash=sha256:1952c89a45caceedf2ab2506d9a95756e12b235c7182a7a0fff4f5e52227204f \ - --hash=sha256:1cf9e974f63b1080b1d2686180fc1fbfd3bfcfa3e1128695b5de337eb9075cef \ - --hash=sha256:1e09da7e8519e336239fbd375156488a4c4945f11c4c5792ee086dd84f784d02 \ - --hash=sha256:2062542a7565091cea4cc14dd99feff473268b5b8afdee564f7067dd9fff5860 \ - --hash=sha256:25d3da8a01442cbc1106490eddb6d31d7dffb38c1edbfabbcc8db371b3386d72 \ - --hash=sha256:34f713dad41aa21c637b4e04fe507c36b986a40f7179dcc86402237e2d39dcd3 \ - --hash=sha256:360201d46165fc0753229afe785900bc9596ee6974833124f4e5e9f98d0f592b \ - --hash=sha256:3b7ad05b2beeebafb86aa01982e9768d61c2232f16470f9d0d8e385798e37184 \ - --hash=sha256:4c54466f642d2116686268c3e5f35ebb10e49b0d48d41a847f0e171c785f7ac7 \ - --hash=sha256:4d9740e3783c748521e77d3c397dc0662062c88fd93600a3c2087d3d627cd5e5 \ - --hash=sha256:4f88cae635bfe4bbbdc29d479a297bb525a94889184bb69fa9560c2d4834ddb9 \ - --hash=sha256:51669b60ee2a4ad6c7fc17539a43ffffc8ef69fd5dbed186a38a79c0ac1f5db7 \ - --hash=sha256:5db46659cfe4e321158de74c6f71617e65dc92e54980086823a207f1c1c0e24b \ - --hash=sha256:5f37e31291bf99a63328668bb83b0669f2688f329c4c0d80643acee6e63cd933 \ - --hash=sha256:6bb5ea9076e0e39defa2c325fc086593ae582088e91c0746bee7a5a197be3da0 \ - --hash=sha256:748015d6f28f704e7d95cd3c808b483c5fb87fd3eefe172a9da54746ad56bfb6 \ - --hash=sha256:7bbbf8174501285049e64d174e29f9578495e1b3b16c07c31910d55ad57683d8 \ - --hash=sha256:884ef38a5a2fd47b0c1291647b15f4e88b9de5338ffa24ee52c77d52b4dfd09c \ - --hash=sha256:8da417431bfc9885a505e86ba706f03f598c85f5a9c54f67d63e84b9948ce590 \ - --hash=sha256:95e974d70238fc2be5f444fa91f6347191d0e914d5d8ae002c9aa189572cc215 \ - --hash=sha256:9648518ef687ba818db3fcc5d9aae27a369253ac09a81ed25c3867e8657a0680 \ - --hash=sha256:9a2f0aa6ca7c9bc1058a9d0b35483d4216e0c1bbe3962bc62ce112749954c7b8 \ - --hash=sha256:9c36da88422e0270fbc7fd959dc9749d31a958506c1d000e16703c2fce43e3d0 \ - --hash=sha256:9c60ecfa62839f7184f741d0509b5c039d391c3aff71dc5bc57b87cc305cff3b \ - --hash=sha256:9f727c3e3d08fd25352ed76cc3cb61486f8ed3f46109edf39e5a60fc9fecf6ca \ - --hash=sha256:a7a06f8d95b7496e53af80d974d63516ffb263a468e614978f3899a6df52d4b3 \ - --hash=sha256:ad0b3f6342cfa14be996971ea2b28b125ad681c6277c4cd0fbdb50340220dfb6 \ - --hash=sha256:b2adca1b46d69dce4a37eecc096fe01a65d81a2f5c13b25ad54d5430ae430b13 \ - --hash=sha256:b84a1c00f832feb9d0585ca8432fba104c819e42ff685fcce83537e2e7e91204 \ - --hash=sha256:bb6d2f8ef81ea076877d76acfb6f9534a9c5f31dc94ba70ad001267ac3a8e56f \ - --hash=sha256:bf11e2cca121df35e295bd34b309046c29476ee739753bc6bc9d5050de319273 \ - --hash=sha256:d21099b411e2006d3c3e1f9aaf339e12037dbf7bf9337faf0e93ec915991f43b \ - --hash=sha256:d4071bd1c183b8d0b368cc9ed3c07a0f6eb1bdfc4941c4c024c49a35429ac7cd \ - --hash=sha256:e117a92b07407a061cde48158c03587ab97e74e7d73cb65e6aadb17af191162a \ - --hash=sha256:f7a58eb5e736d7cf198eee94844b81c9573102ae5989ebcaa1d1a37acd04b33d \ - --hash=sha256:fe9b1ec799b6086460a7480e0f55c447b1aca0a4eecc53e444f639e967348896 -h5py==3.10.0 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:012ab448590e3c4f5a8dd0f3533255bc57f80629bf7c5054cf4c87b30085063c \ - --hash=sha256:212bb997a91e6a895ce5e2f365ba764debeaef5d2dca5c6fb7098d66607adf99 \ - --hash=sha256:2381e98af081b6df7f6db300cd88f88e740649d77736e4b53db522d8874bf2dc \ - --hash=sha256:2c8e4fda19eb769e9a678592e67eaec3a2f069f7570c82d2da909c077aa94339 \ - --hash=sha256:3074ec45d3dc6e178c6f96834cf8108bf4a60ccb5ab044e16909580352010a97 \ - --hash=sha256:3c97d03f87f215e7759a354460fb4b0d0f27001450b18b23e556e7856a0b21c3 \ - --hash=sha256:43a61b2c2ad65b1fabc28802d133eed34debcc2c8b420cb213d3d4ef4d3e2229 \ - --hash=sha256:492305a074327e8d2513011fa9fffeb54ecb28a04ca4c4227d7e1e9616d35641 \ - --hash=sha256:5dfc65ac21fa2f630323c92453cadbe8d4f504726ec42f6a56cf80c2f90d6c52 \ - --hash=sha256:667fe23ab33d5a8a6b77970b229e14ae3bb84e4ea3382cc08567a02e1499eedd \ - --hash=sha256:6c013d2e79c00f28ffd0cc24e68665ea03ae9069e167087b2adb5727d2736a52 \ - --hash=sha256:781a24263c1270a62cd67be59f293e62b76acfcc207afa6384961762bb88ea03 \ - --hash=sha256:86df4c2de68257b8539a18646ceccdcf2c1ce6b1768ada16c8dcfb489eafae20 \ - --hash=sha256:90286b79abd085e4e65e07c1bd7ee65a0f15818ea107f44b175d2dfe1a4674b7 \ - --hash=sha256:92273ce69ae4983dadb898fd4d3bea5eb90820df953b401282ee69ad648df684 \ - --hash=sha256:93dd840bd675787fc0b016f7a05fc6efe37312a08849d9dd4053fd0377b1357f \ - --hash=sha256:9450464b458cca2c86252b624279115dcaa7260a40d3cb1594bf2b410a2bd1a3 \ - --hash=sha256:ae2f0201c950059676455daf92700eeb57dcf5caaf71b9e1328e6e6593601770 \ - --hash=sha256:aece0e2e1ed2aab076c41802e50a0c3e5ef8816d60ece39107d68717d4559824 \ - --hash=sha256:b963fb772964fc1d1563c57e4e2e874022ce11f75ddc6df1a626f42bd49ab99f \ - --hash=sha256:ba9ab36be991119a3ff32d0c7cbe5faf9b8d2375b5278b2aea64effbeba66039 \ - --hash=sha256:d4682b94fd36ab217352be438abd44c8f357c5449b8995e63886b431d260f3d3 \ - --hash=sha256:d93adc48ceeb33347eb24a634fb787efc7ae4644e6ea4ba733d099605045c049 \ - --hash=sha256:f42e6c30698b520f0295d70157c4e202a9e402406f50dc08f5a7bc416b24e52d \ - --hash=sha256:fd6f6d1384a9f491732cee233b99cd4bfd6e838a8815cc86722f9d2ee64032af -joblib==1.3.2 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1 \ - --hash=sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9 -kiwisolver==1.4.5 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf \ - --hash=sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e \ - --hash=sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af \ - --hash=sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f \ - --hash=sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046 \ - --hash=sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3 \ - --hash=sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5 \ - --hash=sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71 \ - --hash=sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee \ - --hash=sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3 \ - --hash=sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9 \ - --hash=sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b \ - --hash=sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985 \ - --hash=sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea \ - --hash=sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16 \ - --hash=sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89 \ - --hash=sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c \ - --hash=sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9 \ - --hash=sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712 \ - --hash=sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342 \ - --hash=sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a \ - --hash=sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958 \ - --hash=sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d \ - --hash=sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a \ - --hash=sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130 \ - --hash=sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff \ - --hash=sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898 \ - --hash=sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b \ - --hash=sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f \ - --hash=sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265 \ - --hash=sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93 \ - --hash=sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929 \ - --hash=sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635 \ - --hash=sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709 \ - --hash=sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b \ - --hash=sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb \ - --hash=sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a \ - --hash=sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920 \ - --hash=sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e \ - --hash=sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544 \ - --hash=sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45 \ - --hash=sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390 \ - --hash=sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77 \ - --hash=sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355 \ - --hash=sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff \ - --hash=sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4 \ - --hash=sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7 \ - --hash=sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20 \ - --hash=sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c \ - --hash=sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162 \ - --hash=sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228 \ - --hash=sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437 \ - --hash=sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc \ - --hash=sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a \ - --hash=sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901 \ - --hash=sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4 \ - --hash=sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770 \ - --hash=sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525 \ - --hash=sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad \ - --hash=sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a \ - --hash=sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29 \ - --hash=sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90 \ - --hash=sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250 \ - --hash=sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d \ - --hash=sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3 \ - --hash=sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54 \ - --hash=sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f \ - --hash=sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1 \ - --hash=sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da \ - --hash=sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238 \ - --hash=sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa \ - --hash=sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523 \ - --hash=sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0 \ - --hash=sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205 \ - --hash=sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3 \ - --hash=sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4 \ - --hash=sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac \ - --hash=sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9 \ - --hash=sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb \ - --hash=sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced \ - --hash=sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd \ - --hash=sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0 \ - --hash=sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da \ - --hash=sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18 \ - --hash=sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9 \ - --hash=sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276 \ - --hash=sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333 \ - --hash=sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b \ - --hash=sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db \ - --hash=sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126 \ - --hash=sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9 \ - --hash=sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09 \ - --hash=sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0 \ - --hash=sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec \ - --hash=sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7 \ - --hash=sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff \ - --hash=sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9 \ - --hash=sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192 \ - --hash=sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8 \ - --hash=sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d \ - --hash=sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6 \ - --hash=sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797 \ - --hash=sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892 \ - --hash=sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f -matplotlib==3.8.0 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:061ee58facb3580cd2d046a6d227fb77e9295599c5ec6ad069f06b5821ad1cfc \ - --hash=sha256:0b11f354aae62a2aa53ec5bb09946f5f06fc41793e351a04ff60223ea9162955 \ - --hash=sha256:0d5ee602ef517a89d1f2c508ca189cfc395dd0b4a08284fb1b97a78eec354644 \ - --hash=sha256:0e723f5b96f3cd4aad99103dc93e9e3cdc4f18afdcc76951f4857b46f8e39d2d \ - --hash=sha256:23ed11654fc83cd6cfdf6170b453e437674a050a452133a064d47f2f1371f8d3 \ - --hash=sha256:2ea6886e93401c22e534bbfd39201ce8931b75502895cfb115cbdbbe2d31f287 \ - --hash=sha256:31e793c8bd4ea268cc5d3a695c27b30650ec35238626961d73085d5e94b6ab68 \ - --hash=sha256:36eafe2128772195b373e1242df28d1b7ec6c04c15b090b8d9e335d55a323900 \ - --hash=sha256:3cc3776836d0f4f22654a7f2d2ec2004618d5cf86b7185318381f73b80fd8a2d \ - --hash=sha256:5dc945a9cb2deb7d197ba23eb4c210e591d52d77bf0ba27c35fc82dec9fa78d4 \ - --hash=sha256:5de39dc61ca35342cf409e031f70f18219f2c48380d3886c1cf5ad9f17898e06 \ - --hash=sha256:60a6e04dfd77c0d3bcfee61c3cd335fff1b917c2f303b32524cd1235e194ef99 \ - --hash=sha256:6c49a2bd6981264bddcb8c317b6bd25febcece9e2ebfcbc34e7f4c0c867c09dc \ - --hash=sha256:6f25ffb6ad972cdffa7df8e5be4b1e3cadd2f8d43fc72085feb1518006178394 \ - --hash=sha256:7b37b74f00c4cb6af908cb9a00779d97d294e89fd2145ad43f0cdc23f635760c \ - --hash=sha256:7f54b9fb87ca5acbcdd0f286021bedc162e1425fa5555ebf3b3dfc167b955ad9 \ - --hash=sha256:87df75f528020a6299f76a1d986c0ed4406e3b2bd44bc5e306e46bca7d45e53e \ - --hash=sha256:90d74a95fe055f73a6cd737beecc1b81c26f2893b7a3751d52b53ff06ca53f36 \ - --hash=sha256:a33bd3045c7452ca1fa65676d88ba940867880e13e2546abb143035fa9072a9d \ - --hash=sha256:c3499c312f5def8f362a2bf761d04fa2d452b333f3a9a3f58805273719bf20d9 \ - --hash=sha256:c4940bad88a932ddc69734274f6fb047207e008389489f2b6f77d9ca485f0e7a \ - --hash=sha256:d670b9348e712ec176de225d425f150dc8e37b13010d85233c539b547da0be39 \ - --hash=sha256:dae97fdd6996b3a25da8ee43e3fc734fff502f396801063c6b76c20b56683196 \ - --hash=sha256:dd386c80a98b5f51571b9484bf6c6976de383cd2a8cd972b6a9562d85c6d2087 \ - --hash=sha256:df8505e1c19d5c2c26aff3497a7cbd3ccfc2e97043d1e4db3e76afa399164b69 \ - --hash=sha256:eee482731c8c17d86d9ddb5194d38621f9b0f0d53c99006275a12523ab021732 \ - --hash=sha256:f691b4ef47c7384d0936b2e8ebdeb5d526c81d004ad9403dfb9d4c76b9979a93 \ - --hash=sha256:f8b5a1bf27d078453aa7b5b27f52580e16360d02df6d3dc9504f3d2ce11f6309 -multiprocess==0.70.15 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:0eac53214d664c49a34695e5824872db4006b1a465edd7459a251809c3773370 \ - --hash=sha256:134f89053d82c9ed3b73edd3a2531eb791e602d4f4156fc92a79259590bd9670 \ - --hash=sha256:18f9f2c7063346d1617bd1684fdcae8d33380ae96b99427260f562e1a1228b67 \ - --hash=sha256:1a51dd34096db47fb21fa2b839e615b051d51b97af9a67afbcdaa67186b44883 \ - --hash=sha256:20e024018c46d0d1602024c613007ac948f9754659e3853b0aa705e83f6931d8 \ - --hash=sha256:3e0953f5d52b4c76f1c973eaf8214554d146f2be5decb48e928e55c7a2d19338 \ - --hash=sha256:4271647bd8a49c28ecd6eb56a7fdbd3c212c45529ad5303b40b3c65fc6928e5f \ - --hash=sha256:73db2e7b32dcc7f9b0f075c2ffa45c90b6729d3f1805f27e88534c8d321a1be5 \ - --hash=sha256:7dd58e33235e83cf09d625e55cffd7b0f0eede7ee9223cdd666a87624f60c21a \ - --hash=sha256:aa36c7ed16f508091438687fe9baa393a7a8e206731d321e443745e743a0d4e5 \ - --hash=sha256:bee9afba476c91f9ebee7beeee0601face9eff67d822e893f9a893725fbd6316 \ - --hash=sha256:cf981fb998d6ec3208cb14f0cf2e9e80216e834f5d51fd09ebc937c32b960902 \ - --hash=sha256:e576062981c91f0fe8a463c3d52506e598dfc51320a8dd8d78b987dfca91c5db \ - --hash=sha256:e73f497e6696a0f5433ada2b3d599ae733b87a6e8b008e387c62ac9127add177 \ - --hash=sha256:f20eed3036c0ef477b07a4177cf7c1ba520d9a2677870a4f47fe026f0cd6787e \ - --hash=sha256:f7d4a1629bccb433114c3b4885f69eccc200994323c80f6feee73b0edc9199c5 -nibabel==5.1.0 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:b3deb8130c835b9d26e80880b0d5e443d9e3f30972b3b0302dd2fafa3ca629f8 \ - --hash=sha256:ce73ca5e957209e7219a223cb71f77235c9df2acf4d3f27f861ba38e9481ac53 -numpy==1.25.2 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2 \ - --hash=sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55 \ - --hash=sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf \ - --hash=sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01 \ - --hash=sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca \ - --hash=sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901 \ - --hash=sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d \ - --hash=sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4 \ - --hash=sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf \ - --hash=sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380 \ - --hash=sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044 \ - --hash=sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545 \ - --hash=sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f \ - --hash=sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f \ - --hash=sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3 \ - --hash=sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364 \ - --hash=sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9 \ - --hash=sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418 \ - --hash=sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f \ - --hash=sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295 \ - --hash=sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3 \ - --hash=sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187 \ - --hash=sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926 \ - --hash=sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357 \ - --hash=sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760 -osqp==0.6.3 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:0084e3d733c75687d68bc133bc380ce471dfe6f7724af2718a43491782eec8d6 \ - --hash=sha256:03e460e683ec2ce0f839353ddfa3c4c8ffa509ab8cf6a2b2afbb586fa453e180 \ - --hash=sha256:0441c10f7fe5f46692a9b44a57138977bb112ae3f8127151671968c5d9ec5dbb \ - --hash=sha256:146b89f2cfbf59eaeb2c47e3a312f2034138df78d80ce052364810dc0ef70fc4 \ - --hash=sha256:1b2049b2c42565dcaa63ddca1c4028b1fb20aab141453f5d77e8ff5b1a99a2cf \ - --hash=sha256:1b573fe1cd0e82239a279c58817c1d365187ef862e928b2b9c828c3c516ad3c2 \ - --hash=sha256:1c548a0b3691850e7e22f3624a128d8af33416d70a9b5976a47d4d832028dcd8 \ - --hash=sha256:30fbc3b3c028c06a6c5f1e66be7b7106ad48a29e0dc5bd82393f82dd68235ef8 \ - --hash=sha256:387e7abd737dfe32c9ec00ad74af25328cdd0d0f634d79530655c040a5cb9590 \ - --hash=sha256:3cbb6efdaffb7387dc0037dfe3259d4803e5ad7217e6f20fb605c92953214b9d \ - --hash=sha256:3f3a3c6d2708868e5e3fe2da300d6523cbf68a3d8734ce9c5043db37391969f5 \ - --hash=sha256:41f304d1d7f91af07d8f0b01e5af29ec3bb8824f0102c7fd8b13b497be120da4 \ - --hash=sha256:60abec3593870990b16f00bd5017096a7091fb00b68d0db3383fc048ca8e55c9 \ - --hash=sha256:6c3951ef505177b858c6cd34de980346014cae3d2234c93db960b12c5885f9a2 \ - --hash=sha256:71d9f611823af4a8b241c86805920e5382cd65c7f94fd3615b4eef999ed94c7c \ - --hash=sha256:7eafa3f3e82dd36c52f3f4ef19a95142405c807c272c4b53c5971c53535d7804 \ - --hash=sha256:b15e65a307fbbabf60248bb9bc204e61d5d4ae64e00427a69e2dad9622f4c29d \ - --hash=sha256:b73bdd9589901841af83c5ed6a4092b4fac5a0beff9e32682d8526d1f16a728c \ - --hash=sha256:c07b1a4b538aab629b0fae69f644b7e76f81f94d65230014d482e296dacd046b \ - --hash=sha256:dc18f87c9549032c163ce590a5e32079df94ee656c8fb357ba607aa9d78fab81 \ - --hash=sha256:e1445e10a94e01698e13c87a7debf6ac1a15f3acd1f8f6340cb1ad945db4732b \ - --hash=sha256:e1dfda08c38c3521012740a73ef782f97dfc54a41deae4b0bc4afd18d0e74da0 \ - --hash=sha256:e6b7d923c836f1d07115057e595245ccc1694ecae730a1affda78fc6f3c8d239 \ - --hash=sha256:ea7d8c92bcdf4fef98d777f13d39060d425ef2e8778ed487c96a6fa10848cdea \ - --hash=sha256:fe57e4bde071b388518ecb068f26319506dd9cb107363d3d80c12d2e59fc1e81 -packaging==23.2 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ - --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 -pillow==10.0.1 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff \ - --hash=sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f \ - --hash=sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21 \ - --hash=sha256:28444cb6ad49726127d6b340217f0627abc8732f1194fd5352dec5e6a0105635 \ - --hash=sha256:2872f2d7846cf39b3dbff64bc1104cc48c76145854256451d33c5faa55c04d1a \ - --hash=sha256:2cc6b86ece42a11f16f55fe8903595eff2b25e0358dec635d0a701ac9586588f \ - --hash=sha256:2d7e91b4379f7a76b31c2dda84ab9e20c6220488e50f7822e59dac36b0cd92b1 \ - --hash=sha256:2fa6dd2661838c66f1a5473f3b49ab610c98a128fc08afbe81b91a1f0bf8c51d \ - --hash=sha256:32bec7423cdf25c9038fef614a853c9d25c07590e1a870ed471f47fb80b244db \ - --hash=sha256:3855447d98cced8670aaa63683808df905e956f00348732448b5a6df67ee5849 \ - --hash=sha256:3a04359f308ebee571a3127fdb1bd01f88ba6f6fb6d087f8dd2e0d9bff43f2a7 \ - --hash=sha256:3a0d3e54ab1df9df51b914b2233cf779a5a10dfd1ce339d0421748232cea9876 \ - --hash=sha256:44e7e4587392953e5e251190a964675f61e4dae88d1e6edbe9f36d6243547ff3 \ - --hash=sha256:459307cacdd4138edee3875bbe22a2492519e060660eaf378ba3b405d1c66317 \ - --hash=sha256:4ce90f8a24e1c15465048959f1e94309dfef93af272633e8f37361b824532e91 \ - --hash=sha256:50bd5f1ebafe9362ad622072a1d2f5850ecfa44303531ff14353a4059113b12d \ - --hash=sha256:522ff4ac3aaf839242c6f4e5b406634bfea002469656ae8358644fc6c4856a3b \ - --hash=sha256:552912dbca585b74d75279a7570dd29fa43b6d93594abb494ebb31ac19ace6bd \ - --hash=sha256:5d6c9049c6274c1bb565021367431ad04481ebb54872edecfcd6088d27edd6ed \ - --hash=sha256:697a06bdcedd473b35e50a7e7506b1d8ceb832dc238a336bd6f4f5aa91a4b500 \ - --hash=sha256:71671503e3015da1b50bd18951e2f9daf5b6ffe36d16f1eb2c45711a301521a7 \ - --hash=sha256:723bd25051454cea9990203405fa6b74e043ea76d4968166dfd2569b0210886a \ - --hash=sha256:764d2c0daf9c4d40ad12fbc0abd5da3af7f8aa11daf87e4fa1b834000f4b6b0a \ - --hash=sha256:787bb0169d2385a798888e1122c980c6eff26bf941a8ea79747d35d8f9210ca0 \ - --hash=sha256:7f771e7219ff04b79e231d099c0a28ed83aa82af91fd5fa9fdb28f5b8d5addaf \ - --hash=sha256:847e8d1017c741c735d3cd1883fa7b03ded4f825a6e5fcb9378fd813edee995f \ - --hash=sha256:84efb46e8d881bb06b35d1d541aa87f574b58e87f781cbba8d200daa835b42e1 \ - --hash=sha256:898f1d306298ff40dc1b9ca24824f0488f6f039bc0e25cfb549d3195ffa17088 \ - --hash=sha256:8b451d6ead6e3500b6ce5c7916a43d8d8d25ad74b9102a629baccc0808c54971 \ - --hash=sha256:8f06be50669087250f319b706decf69ca71fdecd829091a37cc89398ca4dc17a \ - --hash=sha256:92a23b0431941a33242b1f0ce6c88a952e09feeea9af4e8be48236a68ffe2205 \ - --hash=sha256:93139acd8109edcdeffd85e3af8ae7d88b258b3a1e13a038f542b79b6d255c54 \ - --hash=sha256:98533fd7fa764e5f85eebe56c8e4094db912ccbe6fbf3a58778d543cadd0db08 \ - --hash=sha256:9f665d1e6474af9f9da5e86c2a3a2d2d6204e04d5af9c06b9d42afa6ebde3f21 \ - --hash=sha256:b059ac2c4c7a97daafa7dc850b43b2d3667def858a4f112d1aa082e5c3d6cf7d \ - --hash=sha256:b1be1c872b9b5fcc229adeadbeb51422a9633abd847c0ff87dc4ef9bb184ae08 \ - --hash=sha256:b7cf63d2c6928b51d35dfdbda6f2c1fddbe51a6bc4a9d4ee6ea0e11670dd981e \ - --hash=sha256:bc2e3069569ea9dbe88d6b8ea38f439a6aad8f6e7a6283a38edf61ddefb3a9bf \ - --hash=sha256:bcf1207e2f2385a576832af02702de104be71301c2696d0012b1b93fe34aaa5b \ - --hash=sha256:ca26ba5767888c84bf5a0c1a32f069e8204ce8c21d00a49c90dabeba00ce0145 \ - --hash=sha256:cbe68deb8580462ca0d9eb56a81912f59eb4542e1ef8f987405e35a0179f4ea2 \ - --hash=sha256:d6caf3cd38449ec3cd8a68b375e0c6fe4b6fd04edb6c9766b55ef84a6e8ddf2d \ - --hash=sha256:d72967b06be9300fed5cfbc8b5bafceec48bf7cdc7dab66b1d2549035287191d \ - --hash=sha256:d889b53ae2f030f756e61a7bff13684dcd77e9af8b10c6048fb2c559d6ed6eaf \ - --hash=sha256:de596695a75496deb3b499c8c4f8e60376e0516e1a774e7bc046f0f48cd620ad \ - --hash=sha256:e6a90167bcca1216606223a05e2cf991bb25b14695c518bc65639463d7db722d \ - --hash=sha256:ed2d9c0704f2dc4fa980b99d565c0c9a543fe5101c25b3d60488b8ba80f0cce1 \ - --hash=sha256:ee7810cf7c83fa227ba9125de6084e5e8b08c59038a7b2c9045ef4dde61663b4 \ - --hash=sha256:f0b4b06da13275bc02adfeb82643c4a6385bd08d26f03068c2796f60d125f6f2 \ - --hash=sha256:f11c9102c56ffb9ca87134bd025a43d2aba3f1155f508eff88f694b33a9c6d19 \ - --hash=sha256:f5bb289bb835f9fe1a1e9300d011eef4d69661bb9b34d5e196e5e82c4cb09b37 \ - --hash=sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4 \ - --hash=sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68 \ - --hash=sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1 -pybind11==2.11.1 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:00cd59116a6e8155aecd9174f37ba299d1d397ed4a6b86ac1dfe01b3e40f2cc4 \ - --hash=sha256:33cdd02a6453380dd71cc70357ce388ad1ee8d32bd0e38fc22b273d050aa29b3 -pyparsing==3.1.1 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb \ - --hash=sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db -python-dateutil==2.8.2 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ - --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 -qdldl==0.1.7.post0 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:092f6606690a2b9bd3c939f3147887e02de13bb068fbed5ffdc7459034def623 \ - --hash=sha256:0e3f06e8a49ddd834b24fc3d7afbba4fec0923101045aa2666e18d2a9980e329 \ - --hash=sha256:26aa3d6f0da7779265d72e8f418094003e75fa53c515a53bc03fd8b9bcfbf7de \ - --hash=sha256:3a81c46522dd6b3042e2348fa98128bb5c0e466f42bce214e80cfb766ff40930 \ - --hash=sha256:40e5d6753310377451ed4dc09b1ef28faf40108b713e7f55c8a8ae94d679a672 \ - --hash=sha256:4a86155f3de66c5db0e21544b7a2421c671028fa20da407686d2a8d0e9b57e51 \ - --hash=sha256:717cb1892b033c01a0aae84ededcfa1f05bcb97013095d779c497e6c32f90dac \ - --hash=sha256:718d8e141832e96ba71ca1807a74813836c6403110faaa3d33a67de1af3b29c4 \ - --hash=sha256:8ab02e8b9ff86bd644a1935718387c82fbe04c31e3309cf9f7a121d02b1deda8 \ - --hash=sha256:8fc35432913085d94b2327242cf51388467ef7a37ac0d71eb31b594b575dd498 \ - --hash=sha256:981ca8672e9506976c663552c1eb6f6daf9726d62650b3bf5900260946156166 \ - --hash=sha256:aa208703b44337a7e77f6f2663f7a452144becb4421970d534ff8297b92e1e10 \ - --hash=sha256:ae161342529852b6248ace4642bc4ee371a7c1e0707b7bc43a43ef7e73c06ca3 \ - --hash=sha256:b42649484f7c0d8ee659224ecaac0a3e97f12531018207f4d7323e4071320eb1 \ - --hash=sha256:b8ec670d97cf756f9159dc0a11de5cf054e88aefe84bea1c7282f00334642843 \ - --hash=sha256:c1dd0e570e65aaf35e10b7fb345f7ac763fd05a2227b9c06ce65e07993fc4984 \ - --hash=sha256:e55bcd6962178029faf543addd49db145302dd51e19855fefa71b5fd55840eea \ - --hash=sha256:f346a114c8342ee6d4dbd6471eef314199fb268d3bf7b95885ca351fde2b023f \ - --hash=sha256:fd5cfd8c50f33ddacb830594a63b8c1093a24aea45312b9d2ed826cea5ece08a -scipy==1.9.3 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31 \ - --hash=sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108 \ - --hash=sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0 \ - --hash=sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b \ - --hash=sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e \ - --hash=sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e \ - --hash=sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5 \ - --hash=sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840 \ - --hash=sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58 \ - --hash=sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523 \ - --hash=sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd \ - --hash=sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab \ - --hash=sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c \ - --hash=sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb \ - --hash=sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096 \ - --hash=sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0 \ - --hash=sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc \ - --hash=sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9 \ - --hash=sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c \ - --hash=sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95 \ - --hash=sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027 -scs==3.2.3 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:2d835a74c283be73bff6e1978d3ae77a60d9e87db1fdd12916464fa2a1dda517 \ - --hash=sha256:368194620918301bf5309a35a7cd0444f1b1992b182c0a29033c26eb97b3dcb2 \ - --hash=sha256:3eb601738b260e3dcad117f3e02aceaca5d1e8eac2be225be1c0f9cbf83e75cb \ - --hash=sha256:6a80727167ad73151ced202a1ac6c0c7644b00b2e2607edec8a8807fc0443ac8 \ - --hash=sha256:715ca4532de39b462bd393f9e8b4bf57be4122e20f0780d00db3cab1450a585d \ - --hash=sha256:79d7d6c42ee636821460d317b8250945ce04363a47a63aef6b1eae0bd7a418fc \ - --hash=sha256:81511fda3254c0d29089443dcd2305e81d203509e4d77afd160e9174b15ad75a \ - --hash=sha256:91f5194cfabe354c9b1f0ea1de82114028d81c5a4a633177b8da2fe36f301758 \ - --hash=sha256:9a14a7c80efb34b469eb4dbaf26a9104dd2ca93e477985f948d8f28cd4b1a2ba \ - --hash=sha256:9d7f7fd2d2cd88938c159b15e8915d9536610e50a9c34ecf36ce0290807afe55 \ - --hash=sha256:c0d15f21e9053c5df37dab0d700da55fcc71f2f454748f364b9de594988b2ab3 \ - --hash=sha256:ddaa5af34a0e1f636d312eb1901bd407383f0b04dda50fba7242d56e618c0966 \ - --hash=sha256:e3bd779e7e977e3ae5a2f2035aa4c2a309e29082d59a722d5d6592edc4bdb4b3 \ - --hash=sha256:e6f64d23247797cfa289095fb5ddea6eeff5adf98961e953da90233278827e0c \ - --hash=sha256:f1b24176de97ecedf698596086f85da6dad472fe38a4b21cf4b460f87cae2c37 \ - --hash=sha256:fcf4b985a787135b3e83682a4c5b9bce9c6290cfead1d7225c38f34f5ead7187 -setuptools-scm==8.0.4 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:b47844cd2a84b83b3187a5782c71128c28b4c94cad8bfb871da2784a5cb54c4f \ - --hash=sha256:b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7 -setuptools==68.2.2 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ - --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a -six==1.16.0 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 -tqdm==4.66.1 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386 \ - --hash=sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7 -typing-extensions==4.8.0 ; python_version >= "3.11" and python_version < "4.0" \ - --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ - --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef +annotated-types==0.7.0 ; python_version >= "3.12" and python_version < "4.0" +clarabel==0.9.0 ; python_version >= "3.12" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Windows" +contourpy==1.3.1 ; python_version >= "3.12" and python_version < "4.0" +cvxpy==1.6.0 ; python_version >= "3.12" and python_version < "4.0" +cycler==0.12.1 ; python_version >= "3.12" and python_version < "4.0" +deepdiff==8.1.1 ; python_version >= "3.12" and python_version < "4.0" +dill==0.3.9 ; python_version >= "3.12" and python_version < "4.0" +dipy==1.10.0 ; python_version >= "3.12" and python_version < "4.0" +fonttools==4.55.6 ; python_version >= "3.12" and python_version < "4.0" +h5py==3.12.1 ; python_version >= "3.12" and python_version < "4.0" +joblib==1.4.2 ; python_version >= "3.12" and python_version < "4.0" +kiwisolver==1.4.8 ; python_version >= "3.12" and python_version < "4.0" +matplotlib==3.10.0 ; python_version >= "3.12" and python_version < "4.0" +multiprocess==0.70.17 ; python_version >= "3.12" and python_version < "4.0" +nibabel==5.3.2 ; python_version >= "3.12" and python_version < "4.0" +numpy==1.26.4 ; python_version >= "3.12" and python_version < "4.0" +orderly-set==5.2.3 ; python_version >= "3.12" and python_version < "4.0" +osqp==0.6.7.post3 ; python_version >= "3.12" and python_version < "4.0" +packaging==24.2 ; python_version >= "3.12" and python_version < "4.0" +pillow==11.1.0 ; python_version >= "3.12" and python_version < "4.0" +pydantic-core==2.27.2 ; python_version >= "3.12" and python_version < "4.0" +pydantic==2.10.6 ; python_version >= "3.12" and python_version < "4.0" +pyparsing==3.2.1 ; python_version >= "3.12" and python_version < "4.0" +python-dateutil==2.9.0.post0 ; python_version >= "3.12" and python_version < "4.0" +qdldl==0.1.7.post5 ; python_version >= "3.12" and python_version < "4.0" +scipy==1.15.1 ; python_version >= "3.12" and python_version < "4.0" +scs==3.2.7.post2 ; python_version >= "3.12" and python_version < "4.0" +setuptools-scm==8.1.0 ; python_version >= "3.12" and python_version < "4.0" +setuptools==75.8.0 ; python_version >= "3.12" and python_version < "4.0" +six==1.17.0 ; python_version >= "3.12" and python_version < "4.0" +tqdm==4.67.1 ; python_version >= "3.12" and python_version < "4.0" +trx-python==0.3 ; python_version >= "3.12" and python_version < "4.0" +typing-extensions==4.12.2 ; python_version >= "3.12" and python_version < "4.0" diff --git a/tests/Dockerfile b/tests/Dockerfile new file mode 100644 index 00000000..40a6fb43 --- /dev/null +++ b/tests/Dockerfile @@ -0,0 +1,12 @@ +FROM dmri/ci-cd-py3.12:6f2600ca +SHELL ["/bin/bash", "-euxo", "pipefail", "-c"] +WORKDIR /src +COPY . /src +ENV TEST_DIR=/results + +RUN uv pip install -rrequirements.txt && \ + uv pip install -rrequirements-dev.txt && \ + uv pip install --no-deps -e. +COPY ./tests/entrypoint.sh /usr/local/bin/entrypoint.sh +RUN chmod +x /usr/local/bin/entrypoint.sh +ENTRYPOINT ["entrypoint.sh"] diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 00000000..c14719b9 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,32 @@ +import os +from pathlib import Path + +TEST_DIR = Path(__file__).parent +DATA_DIR = os.path.join(TEST_DIR, "data") + + +def load_data(type: str = "hifi") -> dict: + """Loads sample dataset paths. + + Args: + type (str): Type of data to load. Defaults to "hifi". + + Returns: + dict: Sample data paths. + """ + if type == "hifi": + data_path = os.path.join(DATA_DIR, type) + data = { + "nifti": os.path.join(data_path, "hifi_splenium_4vox.nii"), + "mif": os.path.join(data_path, "hifi_splenium_4vox.mif"), + "bval": os.path.join(data_path, "hifi_splenium_4vox.bval"), + "bvec": os.path.join(data_path, "hifi_splenium_4vox.bvec"), + "json": os.path.join(data_path, "hifi_splenium_4vox.json"), + "mask": os.path.join(data_path, "brain_mask.nii"), + "mean_b0": os.path.join(data_path, "mean_b0.mif"), + "no_json": os.path.join(data_path, "hifi_splenium_4vox_no_json.nii"), + "no_bval": os.path.join(data_path, "hifi_splenium_4vox_no_bval.nii"), + "no_bvec": os.path.join(data_path, "hifi_splenium_4vox_no_bvec.nii"), + "no_sidecar": os.path.join(data_path, "hifi_splenium_4vox_no_sidecar.nii"), + } + return data diff --git a/tests/data/brain_mask.nii b/tests/data/hifi/brain_mask.nii similarity index 100% rename from tests/data/brain_mask.nii rename to tests/data/hifi/brain_mask.nii diff --git a/tests/data/hifi_splenium_4vox.bval b/tests/data/hifi/hifi_splenium_4vox.bval old mode 100755 new mode 100644 similarity index 100% rename from tests/data/hifi_splenium_4vox.bval rename to tests/data/hifi/hifi_splenium_4vox.bval diff --git a/tests/data/hifi_splenium_4vox.bvec b/tests/data/hifi/hifi_splenium_4vox.bvec old mode 100755 new mode 100644 similarity index 100% rename from tests/data/hifi_splenium_4vox.bvec rename to tests/data/hifi/hifi_splenium_4vox.bvec diff --git a/tests/data/hifi_splenium_4vox.json b/tests/data/hifi/hifi_splenium_4vox.json old mode 100755 new mode 100644 similarity index 100% rename from tests/data/hifi_splenium_4vox.json rename to tests/data/hifi/hifi_splenium_4vox.json diff --git a/tests/data/hifi_splenium_4vox.mif b/tests/data/hifi/hifi_splenium_4vox.mif similarity index 100% rename from tests/data/hifi_splenium_4vox.mif rename to tests/data/hifi/hifi_splenium_4vox.mif diff --git a/tests/data/hifi_splenium_4vox.nii b/tests/data/hifi/hifi_splenium_4vox.nii similarity index 100% rename from tests/data/hifi_splenium_4vox.nii rename to tests/data/hifi/hifi_splenium_4vox.nii diff --git a/tests/data/hifi/hifi_splenium_4vox_no_bval.bvec b/tests/data/hifi/hifi_splenium_4vox_no_bval.bvec new file mode 100644 index 00000000..e3fee315 --- /dev/null +++ b/tests/data/hifi/hifi_splenium_4vox_no_bval.bvec @@ -0,0 +1,3 @@ +-0 -0.107124436001454 0.292553778318882 0.494975549316603 -0.331179674274064 -0.157720250015796 -0.834493821724479 -0.671508391113715 -0.306520502359992 -0.65361541138022 -0.658926395149459 -0.318114581098245 -0.398100641931373 -0.697536306225592 -0.981993401975305 -0.897844407618251 -0.05749490996072 -0.0173815402385974 0.602463273606934 0.254720773175283 -0.294508619265963 0.106322835260603 0.639320679066917 0.32864937320069 0.243418786119065 0.470326120054345 0.79658601973857 0.779037414572222 0.864894922448373 0.805427064571242 0.966718900520119 -0.107921247134797 0.291493465986041 0.49489597010419 -0.332251279533071 -0.157921198286174 -0.834809560953567 -0.672001119091198 -0.307981681628018 -0.654661432000005 -0.659022241992732 -0.317969611787417 -0.396691056302237 -0.696506342141238 -0.982081909648241 -0.897240098487686 -0.0578306855591161 -0.0169599340356157 0.602626565271525 0.254908947256818 -0.29386495145142 0.106555922032881 0.639915336542027 0.329030492757739 0.243830631262792 0.470170910384088 0.796578144002612 0.778897305158068 0.864851375031768 0.805132475654841 0.966691152381495 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0.167433636091709 0.179656737305558 -0.0319575747280528 -0.0143841733120731 -0.150743520908163 -0.303955935925382 -0.317375150906513 0.316161622678813 0.0576137924897586 -0.0998821108089945 0.251607742872031 0.119513427496056 0.139152141248287 0.00811342631813633 -0.126173972596276 -0.287117555819235 -0.42642109558518 -0.447990584600667 -0.454066554451056 0.419819730886576 0.228070993481824 0.0767817998845401 -0.0847183608456306 -0.238203829521202 -0.385201022273246 0.395789122696084 0.26501653858044 0.283168598062746 0.158380384065096 0.0260917598194689 -0.111815578492353 -0.263336143945509 -0.408986191103439 -0.536359861887816 -0.567851107798206 -0.580743324029991 0.560817010049981 0.517773141788814 0.364627307461488 0.220893774187588 0.0743969333776136 -0.0752947169215366 -0.223374605031268 -0.367907517642424 -0.523670700716794 0.530659897486596 0.399829799021347 0.418713802163608 0.298818137799082 0.170820203478567 0.0357410534599787 -0.110810641102434 -0.261271926536265 -0.401290971139577 -0.521219369657943 -0.639537363719768 -0.674358058105033 -0.694219036611602 0.683661103367533 0.651639794497528 0.593749263466993 0.450529094115072 0.302850168228056 0.150426680201142 -0.0258566033630011 -0.179890252905505 -0.33053890412517 -0.473467700323968 -0.508280833822366 0.651435723356128 0.643651110737854 0.52487130843158 0.570751260843916 0.45078985212529 0.322319854214945 0.18664160569201 0.0416419801901304 -0.111007808492149 -0.263077580381236 -0.395279705814662 -0.516162869593069 -0.628449064214919 -0.730450974482124 -0.769835697909747 -0.792670875813156 -0.792475068139004 0.76807947886133 0.722090352512831 0.652452979556596 0.517965885641621 0.373138590280993 0.219604663742949 0.0491690752636899 -0.122515270026359 -0.278090020481486 -0.426629344326822 -0.566765566094908 -0.612719282281588 -0.638859670224636 -0.75460985108015 0.756163035290835 0.724934354145726 0.672672324802485 0.571438775010477 0.454833352456424 0.327010861283958 0.18958723629555 0.0432919092236701 -0.105990822497774 -0.256825010403566 -0.395143768333053 -0.524355877800953 -0.642755355415142 -0.750352601195467 -0.830854105642591 -0.866113771869038 -0.878529206028974 0.866717663926795 0.832917810512381 0.776556768254895 0.698164180515984 0.571720712766676 0.434215778391318 0.283640997628457 0.119073208496367 -0.0496705726957847 -0.215229040282561 -0.368972054354225 -0.513423633175848 -0.645990885558272 -0.7013674090827 -0.734149833401637 -0.84011593641403 0.85008389880337 0.830703036059772 0.786545599808296 0.701593378182944 0.591924796586187 0.469357480540893 0.335662679850628 0.192903774440221 0.049878694004121 -0.100044979205718 -0.251374589587069 -0.382847962156195 -0.515830781414033 -0.636642969121791 -0.748883655194952 -0.842966725053158 -0.907161824274664 -0.935306732664578 0.938379400673389 0.917742518598187 0.874966158717709 0.811324189718348 0.727584841637569 0.612728450155558 0.485305379144235 0.344645353476748 0.186880589903409 0.0210919319949235 -0.14527066140956 -0.305357826611001 -0.454799737058373 -0.588906166308115 -0.709661471050083 -0.769970478726108 -0.810384328931198 -0.900250422440969 -0.918924969126702 0.911676269779964 0.876576010838229 0.807846251614615 0.711113249739593 0.595616028633419 0.46667809577296 0.329444512007713 0.192081721899303 0.0521971412333846 -0.0948025972446438 -0.243386010351146 -0.334538920333269 -0.474208640225734 -0.606529258656643 -0.724031197912207 -0.831758790319117 -0.913512992772813 -0.962950348032104 -0.980513517944312 0.97136650143098 0.937663900942668 0.879936395135582 0.797367286136809 0.673470535273132 0.547598639829381 0.413449092584784 0.263488097473679 0.179394780669564 0.0977298076025707 -0.072144551185754 -0.240042635406511 -0.400172362037935 -0.544035552986569 -0.67411461420622 -0.793777594098811 -0.858151754807062 -0.934272415068186 -0.962964161001181 0.966734135096639 0.943326347444415 0.889739329677937 0.806796588393981 0.69776634417946 0.571736235904738 0.435181120188989 0.297819130777425 0.155131597426621 0.0018551817998249 -0.0855682243697374 -0.180517923851594 -0.26085863018715 -0.41419612071205 -0.553471861514429 -0.68389843063013 -0.795026149357325 -0.89235381999681 -0.959879026189289 -0.993200892650552 0.997106344047171 0.974006171088818 0.924706558419229 0.849114763990332 0.738154943196382 0.605368356717236 0.473599153423011 0.333239277136907 0.247346470092292 0.0907097477937002 0.00677203225136 -0.167178906983263 -0.335579206811288 -0.485834332653544 -0.621376234493193 -0.749141689830632 -0.847129279238113 -0.878565109300628 -0.931451819798382 -0.977549311800925 -0.994478522987698 0.984341997050764 0.945930033291897 0.879663586263887 0.781898553431126 0.660273635754016 0.524418870524445 0.388454199926447 -0 -0 -0 -0 -0 -0 -0 -0 -0 +0 0.379257779214057 0.380028586538598 0.0311300404752942 0.632117908174625 0.885317264740848 0.49858841390496 0.439248509673855 0.0299784461876069 0.06622480965825 0.75181895288965 0.944963155933383 0.632772374168768 0.596824154113576 0.187270121088906 0.246887874344585 0.82674922058841 0.982177197127591 0.595554341723376 0.633620836609146 0.321193361084627 0.320274775262929 0.751995562848586 0.944363756483312 0.882894783782941 0.631379694270032 0.0666183459863263 0.437395077431438 0.498226275662756 0.246551046797496 0.186417114374406 0.377496038032817 0.377998480501619 0.0292535278510531 0.630638474884174 0.884645963044246 0.498258256122319 0.438706697508762 0.0294453871830644 0.0662522141216181 0.751658235914066 0.945074650557898 0.632900014499533 0.596468703643633 0.186971310627323 0.246856220507888 0.826415403987137 0.982016734157863 0.59546466163237 0.632904573244427 0.320717994722603 0.320225395458026 0.751438348848095 0.944236306751208 0.882719677010993 0.630840492959272 0.0663725464694736 0.437699704026877 0.498363109187612 0.246210892813304 0.18584935255013 0 0 0 0 0 0 0 0 0 0 0 0.167928288193019 0.0029604118401354 0.0715353993301404 0.239061260590483 0.328020048620526 0.257694817333406 0.0995898977869368 0.0645802802255113 0.0986602774836945 0.0361973576438834 0.0254684614576017 0.134645568806127 0.302766147626028 0.398265076194483 0.478910862480201 0.409637489588946 0.340420664336257 0.176576075193864 0.0114058020725989 0.162755676332985 0.19064086787296 0.248917478285229 0.197986367727544 0.140718414281233 0.0803647145712618 0.0823274969250801 0.192115650695801 0.362161023718856 0.462688808216714 0.548487119328465 0.618228644341628 0.544639106764373 0.50944388872733 0.399776511008387 0.237999381427001 0.0733767333842213 0.0987241211745738 0.265639468948484 0.307541202057346 0.348257082834974 0.398474551441859 0.354755024310063 0.303591846110307 0.244049598766782 0.0191439652175515 0.139286228787605 0.246896405488795 0.413631357191603 0.517479243519003 0.608571884097896 0.6834513248808 0.737349342615467 0.662251664321132 0.655554259399003 0.551556178925268 0.432776754768013 0.280991922554223 0.122362871802692 0.0423514305447128 0.206488143038679 0.368030425037424 0.421615439614268 0.469139881637708 0.515913850205523 0.513425620518419 0.466727292603339 0.408663234707862 0.342635534016983 0.18162280741493 0.0600399484283135 0.22673683517266 0.297093319038815 0.414162790615952 0.539768517992339 0.643477016785925 0.729103345262706 0.794241958332362 0.834129481085845 0.766885459903341 0.773819799930531 0.679521904419892 0.573445374357227 0.45461601354854 0.310927188685883 0.161310011605193 0.00463254206408693 0.153354646855444 0.308798736690098 0.461139887305438 0.524195338145866 0.575954968004512 0.622932500284083 0.633182842629397 0.615183379788991 0.565588995924314 0.50267476395021 0.424963042782632 0.267524264320895 0.104247530832477 0.0251304270895389 0.134944429995088 0.296253055263495 0.436697428834918 0.55785655734783 0.665797191288765 0.756957744666237 0.830393624941839 0.882294751246035 0.91017657879408 0.855608825508986 0.851941546626368 0.764754591415583 0.660310406694139 0.539634171072302 0.382153211609403 0.227664171604027 0.0673971399691882 0.0908858417629177 0.247200344810918 0.39643258769535 0.540104582666383 0.612909079303664 0.667334958360142 0.71486396784627 0.736307019584135 0.732782185716544 0.702782612294701 0.64919742589495 0.578471121411532 0.495793786257999 0.347550671044417 0.186849915419866 0.0977117674765231 0.0624642109429796 0.223808001629232 0.382426409550607 0.534258239140307 0.655019662674649 0.757921819852695 0.841939315411948 0.906226395883584 0.947119358761004 0.962654475775129 0.920453799336134 0.905540199546341 0.82890875124907 0.733123308151609 0.615981249209934 0.468035602298133 0.303387513176571 0.141192249296391 0.0195199381669131 0.176593644540127 0.326748545265499 0.469588858365502 0.600855103180556 0.681650038384194 0.742432846040428 0.790104012606158 0.819665194238945 0.827562269884572 0.811515441546546 0.770905339268484 0.711078059985128 0.638555128158869 0.550269417426094 0.416163858067192 0.256584865362134 0.173604345716626 0.0118276849053527 0.150377601386909 0.311386020696751 0.473437854126533 0.617869583387912 0.734419762229036 0.831182328499966 0.906222689017614 0.958215780379309 0.98678952976733 0.99089456500804 0.960147070796914 0.942371210124114 0.879162069772608 0.791347175108519 0.682724763373749 0.541735788330845 0.379938868125404 0.207902709898412 0.0420556198188551 0.120010489508093 0.277329907735662 0.428521121620715 0.571193475223454 0.70425641895082 0.785417952741133 0.841857822613764 0.879684446343327 0.943739165730559 0.899279350885811 0.895892973807508 0.866791430966747 0.815242864758753 0.747945178518228 0.659697706809126 0.520690443345492 0.334999493706992 0.248533473459681 0.0896794648937834 0.0732547641572388 0.23411160792235 0.395476197197533 0.551791395321912 0.689816977095479 0.80206366645187 0.889495670365764 0.950789689648239 0.987583749948049 0.999572769050548 0.98113581402264 0.982903501600488 0.950734914502896 0.900815357807083 0.828358579058253 0.726985360532619 0.606000413592186 0.451331450124525 0.279051024155475 0.109751190101701 0.0553877049018462 0.218478255175028 0.375921574697323 0.525275776054447 0.670065333852344 0.788236176762092 0.864578484874424 0.914810177747132 0.963298866460808 0.983676830637946 0.952924698778989 0.93631319898352 0.894227741095038 0.834837713149542 0.753149338709885 0.634381938473254 0.511089993812499 0.40327607841238 0.344992170353783 0.17950977609742 0.014047835370413 0.149453678575656 0.312207598421112 0.467812056255361 0.62005637622142 0.749842759864831 0.851393422431793 0.920454215835452 0 0 0 0 0 0 0 0 0 +0 -0.91906903555249 -0.877491059944128 -0.868349080799967 -0.700533349324232 -0.437421608486221 -0.234584004088739 -0.596772341306253 -0.951391861637602 -0.75392384802178 0.0241716315873972 -0.076470564041132 0.664164890189053 0.396540074373992 -0.0248769000306931 0.364584417145145 0.559624929406177 0.187151904788865 0.531369015005129 0.730508017170567 0.900055274904537 0.941339217831496 0.160535798860295 -0.0129106514693161 -0.401552107975757 -0.616565505381362 -0.600843331531709 -0.44920624758946 -0.0610520372809271 0.538980356843232 0.175223362709891 -0.919700900113954 -0.878719925802386 -0.868459676595755 -0.701358824872065 -0.438705385423489 -0.23416171149956 -0.596616233014068 -0.950936513617504 -0.753013315624885 0.0264495936193729 -0.0756916831710072 0.664886289086857 0.398878428808692 -0.02359770490839 0.366090442534124 0.560083200792729 0.188030567750061 0.531284349126007 0.731063081888559 0.900435093805821 0.941329661457988 0.16077552657072 -0.0125192601158792 -0.401687185668277 -0.617235439233315 -0.600880974555797 -0.449152487614092 -0.0605500662636889 0.539575660068271 0.175977936131446 0 0 0 0 0 0 0 0 0 0 0 0.97147623104106 -0.983724907062845 0.996925975173927 0.970897939660362 0.932565943327548 0.917171832390404 0.94305613083502 -0.94650473622067 -0.993451961912741 -0.994340643458945 0.96749413494112 0.983660058915596 0.942851707060397 0.917234485454764 0.868748821195983 0.865887196009335 0.838020775711205 0.876427592988548 0.890894759160692 -0.892895281337299 -0.95479824123517 -0.96547638195297 -0.976536838767196 -0.960966837886296 -0.919326756377414 0.914643730418693 0.944911536051819 0.88806246290493 0.872258402501558 0.835751817249731 0.778004254263722 0.796255184466852 0.75709789314981 0.743301311584661 0.787972977802011 0.810773116577401 -0.822032742076401 -0.813232221539934 -0.878900071539237 -0.911001067379417 -0.914157058852638 -0.931922517311958 -0.926248226380427 -0.897264649807067 -0.851705645081376 0.836061851539958 0.882710766213638 0.808447804286143 0.801824764559484 0.774894005610198 0.729120609746515 0.666360974912205 0.702253311454172 0.639698498873341 0.651242005938383 0.635370947470352 0.682850458740739 0.709286442015812 -0.728569730347213 -0.729882336460013 -0.715552526579764 -0.78693326052588 -0.829571905912656 -0.843329540011107 -0.857744465616797 -0.865912888918622 -0.850728154841237 -0.811436521008894 -0.841821685288455 0.756324469332393 0.730960775464377 0.7976500920961 0.70902198916265 0.710941949946524 0.694296219552291 0.658462772560026 0.606172959746279 0.540282588270721 0.58538609319323 0.494931178349684 0.521369229514593 0.525558917966945 0.509672104486906 0.55738432129562 0.587921731822697 0.60988671568086 -0.621720408492739 -0.619054814245057 -0.601377679867909 -0.675966410989983 -0.727353742881393 -0.750818814232113 -0.772438923082178 -0.778806405886589 -0.776385875844176 -0.75186799658627 -0.705820944184717 -0.74364363047034 -0.762227508113841 -0.655692332040698 0.640318252766773 0.621855537388195 0.597333490728029 0.601875226221753 0.591473348089542 0.565755131943632 0.523930441505397 0.468702232341215 0.400430444667208 0.449415678212296 0.34359424252097 0.37443467838619 0.388401493164187 0.381793052958947 0.404524879407125 0.44498984169703 0.472910202499617 -0.490449033902391 -0.495116057610507 -0.489694587467412 -0.469950866386408 -0.545415334467593 -0.605079094897083 -0.639153574601204 -0.666088240304235 -0.678647996073074 -0.678065675347729 -0.665133313935025 -0.633851192734092 -0.580417347585194 -0.622328119644437 -0.652771883045379 -0.53353315156179 0.52292981105763 0.509747431798423 0.484867054718182 0.471523982004838 0.469653358027216 0.4530541584652 0.422455624320061 0.376220484764075 0.316981128977744 0.251569796244618 0.29929186271401 0.182823370756525 0.216399831374262 0.239198547156923 0.244418435376369 0.265235321039913 0.291570645810749 0.324447321695955 -0.345055173140205 -0.355757437370661 -0.357308842990776 -0.348194433072706 -0.331049004262106 -0.399896325916625 -0.461813986341144 -0.506907515806095 -0.54150218320928 -0.560977557416148 -0.565985090907414 -0.558982607600581 -0.536213755597077 -0.495415861206878 -0.43998200510134 -0.483686990787462 -0.526727108048242 -0.399262705661962 -0.394255002421204 0.38240417910786 0.366951282005216 0.351057021144198 0.335492360441849 0.325375412721591 0.302237475769876 0.265003304531992 0.211960209337646 0.153368452876475 0.09560558903486 0.137407614324494 0.00449588998534156 0.0469065092300759 0.0767587574462008 0.0983144032181155 0.121242114618932 0.14539762201855 0.171764636576789 0.191897279499905 -0.205047804999931 -0.209462481559225 -0.205137975412291 -0.194790720803189 -0.224633778360866 -0.288538332328319 -0.346893721953502 -0.395890511869559 -0.277801907195613 -0.426316236934011 -0.438373063908279 -0.437095125049625 -0.418618146061485 -0.380267441486103 -0.332217432770241 -0.314322435354915 -0.389038436347184 -0.255668079828189 -0.254278623090244 0.245069075123809 0.235217255496314 0.227952851779751 0.211200191812938 0.193066483505053 0.172660219850669 0.139337163410114 0.0854560201310879 0.0247492278969808 -0.0291691228988581 -0.173351069699069 -0.036248939796438 -0.16749894729897 -0.130281482905269 -0.0865503492350303 -0.0614428370555946 -0.0263992536395022 0.00214056578655217 0.027618489999061 0.038815759345062 -0.052068616961396 -0.0598266724981131 -0.0600062531839142 -0.055583061111579 -0.078356417529529 -0.110511910390595 -0.16795203298997 -0.228197114030911 -0.104283352298941 -0.155407961607421 -0.303131420535323 -0.308818403561359 -0.29621502840768 -0.258864818014424 -0.216003816699498 -0.190647015997106 -0.14546134360088 -0.255913566297054 -0.115662914690123 -0.110333962501028 -0.103995796709698 0.0934581764888281 0.0879931110879873 0.0856962949675841 0.0645348164660964 0.0421255432993888 0.0106812206143581 -0.0432130908752722 0 0 0 0 0 0 0 0 0 diff --git a/tests/data/hifi/hifi_splenium_4vox_no_bval.json b/tests/data/hifi/hifi_splenium_4vox_no_bval.json new file mode 100644 index 00000000..08d5f226 --- /dev/null +++ b/tests/data/hifi/hifi_splenium_4vox_no_bval.json @@ -0,0 +1,4140 @@ +{ + "AcquisitionMatrixPE": 74, + "AcquisitionNumber": 1, + "AcquisitionTime": "variable", + "BandwidthPerPixelPhaseEncode": 36.5229988, + "BaseResolution": 74, + "BodyPartExamined": "BRAIN", + "ConsistencyInfo": "N4_VE11C_LATEST_20160120", + "ConversionSoftware": "dcm2niix", + "ConversionSoftwareVersion": "v1.0.20190902", + "DerivedVendorReportedEchoSpacing": 0.000739999989, + "DeviceSerialNumber": 167021, + "DiffusionScheme": "Monopolar", + "DwellTime": 4.39999985e-06, + "EchoTime": 0.0989999995, + "EchoTrainLength": 37, + "EffectiveEchoSpacing": 0.000369999994, + "FlipAngle": 90, + "ImageOrientationPatientDICOM": [ + 0.994345, + -0.0163522, + -0.104929, + 2.73897e-08, + 0.988074, + -0.153983 + ], + "ImageType": "variable", + "ImagingFrequency": 123.230003, + "InPlanePhaseEncodingDirectionDICOM": "COL", + "InstitutionAddress": "XXXXX", + "InstitutionName": "XXXXX", + "InstitutionalDepartmentName": "XXXXX", + "MRAcquisitionType": "2D", + "MagneticFieldStrength": 3, + "Manufacturer": "Siemens", + "ManufacturersModelName": "Prisma_fit", + "Modality": "MR", + "ParallelReductionFactorInPlane": 2, + "PartialFourier": 1, + "PatientPosition": "HFS", + "PercentPhaseFOV": 100, + "PhaseEncodingSteps": 74, + "PhaseResolution": 1, + "PixelBandwidth": 1535, + "ProcedureStepDescription": "XXXXX", + "ProtocolName": "variable", + "PulseSequenceDetails": "%SiemensSeq%_ep2d_diff", + "ReceiveCoilActiveElements": "HEA;HEP", + "ReceiveCoilName": "Head_32", + "ReconMatrixPE": 74, + "RefLinesPE": 24, + "RepetitionTime": 3.9000001, + "SAR": "variable", + "ScanOptions": "FS", + "ScanningSequence": "EP", + "SequenceName": "_ep_b0", + "SequenceVariant": "SK_SP", + "SeriesDescription": "variable", + "SeriesNumber": "variable", + "ShimSetting": [ + 3695, + -10046, + 2626, + 292, + 83, + -279, + -134, + 102 + ], + "SliceThickness": 3, + "SoftwareVersions": "syngo_MR_E11", + "SpacingBetweenSlices": 3, + "StationName": "MRC35104", + "TxRefAmp": 222.089005, + "command_history": [ + "variable", + "mrcat -axis 3 /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi0.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi1.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi2.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif (version=3.0.1-24-g62bb3c69)", + "dwidenoise -noise /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/noisemap.nii -extent '5,5,5' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/1_dwi_denoised.mif (version=3.0.1-24-g62bb3c69)", + "mrdegibbs /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/2_dwi_degibbs.mif (version=3.0.1-24-g62bb3c69)", + "/usr/local/mrtrix3/bin/dwifslpreproc -se_epi /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/B0_EPI.mif -eddy_options '--repol --data_is_shelled' -rpe_header -eddyqc_all /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/metrics_qc/eddy /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/3_dwi_undistorted.mif (version=3.0.1-24-g62bb3c69)", + "mrconvert -force -quiet -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.json -strides '1,2,3,4' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/4_dwi_smoothed.mif (version=3.0.1-24-g62bb3c69)", + "mrconvert -force -quiet -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.json -strides '1,2,3,4' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/5_dwi_rician.mif (version=3.0.1-24-g62bb3c69)" + ], + "comments": [ + "TE=99;Time=104142.333;phase=1;mb=2", + "TE=99;Time=104634.188;phase=0;mb=2", + "TE=99;Time=102301.625;phase=1;mb=2", + "TE=99;Time=104142", + "TE=99;Time=104142" + ], + "dw_scheme": [ + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.2041193387, + 0.5137031909, + -0.833333263, + 1000.0 + ], + [ + -0.1977141975, + 0.5146343525, + -0.8343024508, + 1000.0 + ], + [ + -0.3999621792, + 0.1718072214, + -0.900284696, + 1000.0 + ], + [ + 0.4037001972, + 0.7264234052, + -0.5561790963, + 1000.0 + ], + [ + 0.2032804557, + 0.9391539284, + -0.2768879831, + 1000.0 + ], + [ + 0.8546867084, + 0.5149137883, + -0.06613940621, + 1000.0 + ], + [ + 0.7310855427, + 0.5144020839, + -0.4482236331, + 1000.0 + ], + [ + 0.4058203992, + 0.1702779517, + -0.8979505681, + 1000.0 + ], + [ + 0.7299824555, + 0.1701815673, + -0.6619394601, + 1000.0 + ], + [ + 0.6526334818, + 0.7283765637, + 0.2086555051, + 1000.0 + ], + [ + 0.3244365682, + 0.9401997848, + 0.1037558568, + 1000.0 + ], + [ + 0.3253184522, + 0.5170243383, + 0.791740954, + 1000.0 + ], + [ + 0.6514813496, + 0.5175849347, + 0.554687197, + 1000.0 + ], + [ + 0.9790823445, + 0.1727878311, + 0.1074342964, + 1000.0 + ], + [ + 0.8540502963, + 0.1734394521, + 0.4904251705, + 1000.0 + ], + [ + -0.002259620983, + 0.7302636963, + 0.6831616412, + 1000.0 + ], + [ + -0.002591339745, + 0.9415239344, + 0.3369361451, + 1000.0 + ], + [ + -0.6554853118, + 0.5169442435, + 0.5505521367, + 1000.0 + ], + [ + -0.3308567768, + 0.5183798452, + 0.7885531874, + 1000.0 + ], + [ + 0.1972617938, + 0.1747377061, + 0.9646525378, + 1000.0 + ], + [ + -0.2056872366, + 0.1740635009, + 0.963013322, + 1000.0 + ], + [ + -0.6527536174, + 0.7289013255, + 0.2064353957, + 1000.0 + ], + [ + -0.3254198893, + 0.9404517877, + 0.09824627548, + 1000.0 + ], + [ + -0.1993994297, + 0.9378278089, + -0.2841106622, + 1000.0 + ], + [ + -0.402190306, + 0.7259439266, + -0.5578963821, + 1000.0 + ], + [ + -0.7282749406, + 0.170845989, + -0.6636469384, + 1000.0 + ], + [ + -0.7269286759, + 0.5136962899, + -0.455731085, + 1000.0 + ], + [ + -0.8535207681, + 0.5157749553, + -0.07401684809, + 1000.0 + ], + [ + -0.8581097023, + 0.1742568347, + 0.4829930584, + 1000.0 + ], + [ + -0.9798602664, + 0.1731730579, + 0.09942308757, + 1000.0 + ], + [ + 0.204978745, + 0.5120461773, + -0.8341417304, + 2000.0 + ], + [ + -0.1965293814, + 0.5127992738, + -0.8357111385, + 2000.0 + ], + [ + -0.3998713053, + 0.1699687211, + -0.9006739549, + 2000.0 + ], + [ + 0.4048534043, + 0.7250704832, + -0.5571054796, + 2000.0 + ], + [ + 0.2036165985, + 0.9386839084, + -0.2782315599, + 2000.0 + ], + [ + 0.8549558168, + 0.5145177471, + -0.06574221798, + 2000.0 + ], + [ + 0.7315589065, + 0.5138347744, + -0.4481019872, + 2000.0 + ], + [ + 0.4072249602, + 0.1696576375, + -0.8974319572, + 2000.0 + ], + [ + 0.7309258671, + 0.1700521269, + -0.6609308972, + 2000.0 + ], + [ + 0.6524868782, + 0.7278674133, + 0.2108788811, + 2000.0 + ], + [ + 0.3242097053, + 0.9401930644, + 0.1045230534, + 2000.0 + ], + [ + 0.3238402283, + 0.5170630515, + 0.7923214671, + 2000.0 + ], + [ + 0.6502088878, + 0.516892536, + 0.5568217924, + 2000.0 + ], + [ + 0.9790345074, + 0.1722952772, + 0.1086543635, + 2000.0 + ], + [ + 0.8532894718, + 0.1731874673, + 0.4918365364, + 2000.0 + ], + [ + -0.001974410286, + 0.7298582035, + 0.6835957171, + 2000.0 + ], + [ + -0.00310387162, + 0.9412377457, + 0.3377304724, + 2000.0 + ], + [ + -0.655638689, + 0.5168712665, + 0.5504380105, + 2000.0 + ], + [ + -0.331102832, + 0.5175902144, + 0.788968494, + 2000.0 + ], + [ + 0.1965814308, + 0.1742203798, + 0.9648849674, + 2000.0 + ], + [ + -0.2059179905, + 0.1740199847, + 0.9629718719, + 2000.0 + ], + [ + -0.6533703702, + 0.7283237759, + 0.2065227271, + 2000.0 + ], + [ + -0.3258404176, + 0.9402721635, + 0.09857119676, + 2000.0 + ], + [ + -0.1997946014, + 0.9376822071, + -0.2843135519, + 2000.0 + ], + [ + -0.4019648303, + 0.7255111928, + -0.5586213246, + 2000.0 + ], + [ + -0.7282631119, + 0.1706087558, + -0.6637209446, + 2000.0 + ], + [ + -0.7267950678, + 0.513986761, + -0.4556166579, + 2000.0 + ], + [ + -0.8535307738, + 0.5158325871, + -0.07349802909, + 2000.0 + ], + [ + -0.8578799975, + 0.1738247724, + 0.4835564687, + 2000.0 + ], + [ + -0.9799128072, + 0.1724960796, + 0.1000799318, + 2000.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.06332081897, + 0.01444310468, + 0.9978887065, + 8000.0 + ], + [ + -0.07417404809, + 0.1564827949, + -0.98489154, + 8000.0 + ], + [ + -0.07409180858, + -0.08248148301, + 0.9938345983, + 8000.0 + ], + [ + -0.08880178295, + 0.08731895646, + 0.9922145147, + 8000.0 + ], + [ + 0.05085716826, + 0.1788560869, + 0.9825599466, + 8000.0 + ], + [ + 0.2048379922, + 0.1092212416, + 0.972682948, + 8000.0 + ], + [ + 0.2154325352, + -0.05118067635, + 0.9751765795, + 8000.0 + ], + [ + -0.2138596396, + 0.2139010684, + -0.9531581125, + 8000.0 + ], + [ + 0.0482117501, + 0.2505349565, + -0.9669063361, + 8000.0 + ], + [ + 0.2049114349, + 0.1863776562, + -0.9608718297, + 8000.0 + ], + [ + -0.3529281357, + -0.1188557216, + 0.9280706053, + 8000.0 + ], + [ + -0.223297512, + -0.01561593684, + 0.9746252427, + 8000.0 + ], + [ + -0.2384915225, + 0.1570689408, + 0.9583585663, + 8000.0 + ], + [ + -0.1054733643, + 0.2532084332, + 0.9616448714, + 8000.0 + ], + [ + 0.03320362423, + 0.3381202338, + 0.9405169997, + 8000.0 + ], + [ + 0.1935410102, + 0.2674794086, + 0.9439261853, + 8000.0 + ], + [ + 0.3350161077, + 0.2010768489, + 0.9205065499, + 8000.0 + ], + [ + 0.3523850069, + 0.03295309449, + 0.9352747727, + 8000.0 + ], + [ + 0.3568902721, + -0.1325617364, + 0.9246927705, + 8000.0 + ], + [ + -0.3226246533, + 0.3043923819, + -0.8962469587, + 8000.0 + ], + [ + -0.1253864024, + 0.3382875593, + -0.932652013, + 8000.0 + ], + [ + 0.02618126578, + 0.3950301729, + -0.9182949982, + 8000.0 + ], + [ + 0.1879427584, + 0.343759089, + -0.9200582635, + 8000.0 + ], + [ + 0.3389068547, + 0.2822803585, + -0.8974742019, + 8000.0 + ], + [ + 0.4806508488, + 0.2138671441, + -0.8504325994, + 8000.0 + ], + [ + -0.4906817579, + -0.05222510449, + 0.8697723558, + 8000.0 + ], + [ + -0.3638629425, + 0.04948088767, + 0.9301373021, + 8000.0 + ], + [ + -0.3758752589, + 0.2264993174, + 0.8985632137, + 8000.0 + ], + [ + -0.2501143667, + 0.3262073881, + 0.9116093152, + 8000.0 + ], + [ + -0.11469697, + 0.4144088082, + 0.902834395, + 8000.0 + ], + [ + 0.02856305646, + 0.4899053085, + 0.8713076038, + 8000.0 + ], + [ + 0.1772886584, + 0.4119213007, + 0.8938062283, + 8000.0 + ], + [ + 0.3262734121, + 0.3807595781, + 0.8651981301, + 8000.0 + ], + [ + 0.454391951, + 0.272429718, + 0.8481214557, + 8000.0 + ], + [ + 0.4809612063, + 0.1052273006, + 0.8704042355, + 8000.0 + ], + [ + 0.4913592531, + -0.06113377373, + 0.8688088087, + 8000.0 + ], + [ + -0.4703498943, + 0.2325802215, + -0.8512798702, + 8000.0 + ], + [ + -0.4284839936, + 0.3954535384, + -0.8124148978, + 8000.0 + ], + [ + -0.269230545, + 0.4444057824, + -0.8544111506, + 8000.0 + ], + [ + -0.12290081, + 0.4872007472, + -0.8645986484, + 8000.0 + ], + [ + 0.02310278889, + 0.5349069715, + -0.8445950468, + 8000.0 + ], + [ + 0.1738345832, + 0.4919811729, + -0.8530744769, + 8000.0 + ], + [ + 0.3204745421, + 0.4381379528, + -0.8398399861, + 8000.0 + ], + [ + 0.4611122499, + 0.3725046699, + -0.8053668505, + 8000.0 + ], + [ + 0.6111564904, + 0.1407586621, + -0.7788932811, + 8000.0 + ], + [ + -0.6164448666, + 0.0182915636, + 0.7871855849, + 8000.0 + ], + [ + -0.491308456, + 0.1153364724, + 0.8633154112, + 8000.0 + ], + [ + -0.5021993072, + 0.2917622033, + 0.8140458664, + 8000.0 + ], + [ + -0.3822782783, + 0.3934250602, + 0.8361100645, + 8000.0 + ], + [ + -0.2521442149, + 0.4854616575, + 0.8371082809, + 8000.0 + ], + [ + -0.1129679822, + 0.5642476573, + 0.8178403366, + 8000.0 + ], + [ + 0.03941977651, + 0.6247156598, + 0.77985667, + 8000.0 + ], + [ + 0.185218657, + 0.5425577119, + 0.8193443588, + 8000.0 + ], + [ + 0.3310889531, + 0.5432284415, + 0.7715458285, + 8000.0 + ], + [ + 0.4491133268, + 0.436742144, + 0.7794571954, + 8000.0 + ], + [ + 0.5684476951, + 0.319874619, + 0.7579890804, + 8000.0 + ], + [ + 0.5980293927, + 0.1620609684, + 0.7849185232, + 8000.0 + ], + [ + 0.6149706868, + 0.0009513636549, + 0.7885493956, + 8000.0 + ], + [ + -0.6024246598, + 0.1645783385, + -0.7810240071, + 8000.0 + ], + [ + -0.5704450247, + 0.3264348418, + -0.7536794862, + 8000.0 + ], + [ + -0.5144035982, + 0.482909799, + -0.7086515816, + 8000.0 + ], + [ + -0.3644130073, + 0.5444430013, + -0.7555031294, + 8000.0 + ], + [ + -0.2130411425, + 0.5955142482, + -0.7745813397, + 8000.0 + ], + [ + -0.06001856711, + 0.641344364, + -0.7649020711, + 8000.0 + ], + [ + 0.1167986839, + 0.6382102822, + -0.7609505261, + 8000.0 + ], + [ + 0.2708287664, + 0.5908007885, + -0.7600040839, + 8000.0 + ], + [ + 0.419013, + 0.5286408254, + -0.7382187911, + 8000.0 + ], + [ + 0.5569609966, + 0.455047383, + -0.6947850945, + 8000.0 + ], + [ + 0.5948040245, + 0.3000380191, + -0.7457783582, + 8000.0 + ], + [ + -0.7280700238, + -0.04582590336, + 0.6839693173, + 8000.0 + ], + [ + -0.7176359257, + 0.1226390699, + 0.6855350733, + 8000.0 + ], + [ + -0.6066098645, + 0.1800032163, + 0.7743534816, + 8000.0 + ], + [ + -0.6428185047, + 0.3099967155, + 0.7004901187, + 8000.0 + ], + [ + -0.5237393276, + 0.4318488107, + 0.734304924, + 8000.0 + ], + [ + -0.3942280895, + 0.5347683254, + 0.7474001951, + 8000.0 + ], + [ + -0.2555117198, + 0.6226413207, + 0.7396158102, + 8000.0 + ], + [ + -0.1057790974, + 0.6926381847, + 0.7134865995, + 8000.0 + ], + [ + 0.05300474118, + 0.7396424228, + 0.6709095198, + 8000.0 + ], + [ + 0.1994248317, + 0.6638078249, + 0.7208251578, + 8000.0 + ], + [ + 0.340485266, + 0.6823473806, + 0.6468939911, + 8000.0 + ], + [ + 0.4578772784, + 0.5831494363, + 0.6710328851, + 8000.0 + ], + [ + 0.5690836021, + 0.4758604012, + 0.6705972952, + 8000.0 + ], + [ + 0.6721958221, + 0.3592127516, + 0.6473939881, + 8000.0 + ], + [ + 0.7062910286, + 0.2092882899, + 0.6762776018, + 8000.0 + ], + [ + 0.7257541526, + 0.05640646761, + 0.6856378201, + 8000.0 + ], + [ + 0.7232268738, + -0.1017622955, + 0.6830719759, + 8000.0 + ], + [ + -0.6977125493, + 0.2592782172, + -0.667811354, + 8000.0 + ], + [ + -0.6522665461, + 0.4117082555, + -0.6364311944, + 8000.0 + ], + [ + -0.5849001722, + 0.5583872161, + -0.5882988233, + 8000.0 + ], + [ + -0.4432526, + 0.6299118936, + -0.6377602519, + 8000.0 + ], + [ + -0.2937871727, + 0.6865539754, + -0.6650809996, + 8000.0 + ], + [ + -0.1386295555, + 0.7340533923, + -0.6647912933, + 8000.0 + ], + [ + 0.03313822298, + 0.7447047783, + -0.666570815, + 8000.0 + ], + [ + 0.2045279417, + 0.7250875013, + -0.6575837867, + 8000.0 + ], + [ + 0.3589659154, + 0.673169997, + -0.6465180792, + 8000.0 + ], + [ + 0.5040616146, + 0.6048231825, + -0.6165312698, + 8000.0 + ], + [ + 0.6385154351, + 0.5186963987, + -0.5685526229, + 8000.0 + ], + [ + 0.6882258778, + 0.3681749577, + -0.625133859, + 8000.0 + ], + [ + 0.7161919627, + 0.2092634907, + -0.6657911565, + 8000.0 + ], + [ + 0.8199740941, + 0.1128854052, + -0.5611589528, + 8000.0 + ], + [ + -0.819885839, + 0.0476596813, + 0.5705398897, + 8000.0 + ], + [ + -0.7868730917, + 0.2093606719, + 0.5805160175, + 8000.0 + ], + [ + -0.7323024624, + 0.3510300601, + 0.5835332043, + 8000.0 + ], + [ + -0.6321236638, + 0.4683934059, + 0.617274081, + 8000.0 + ], + [ + -0.5150729771, + 0.5747325861, + 0.6359105933, + 8000.0 + ], + [ + -0.3852421309, + 0.6666535005, + 0.6380921648, + 8000.0 + ], + [ + -0.2441540138, + 0.7433702255, + 0.6227274889, + 8000.0 + ], + [ + -0.09282097362, + 0.8007161943, + 0.5918089583, + 8000.0 + ], + [ + 0.06286774212, + 0.8362776041, + 0.5446902018, + 8000.0 + ], + [ + 0.2076470152, + 0.7723939575, + 0.6002418609, + 8000.0 + ], + [ + 0.3564213436, + 0.7827111091, + 0.5102226431, + 8000.0 + ], + [ + 0.4816276925, + 0.6897290431, + 0.540655725, + 8000.0 + ], + [ + 0.5978744474, + 0.582455926, + 0.5507188388, + 8000.0 + ], + [ + 0.705565045, + 0.4624713035, + 0.5369341307, + 8000.0 + ], + [ + 0.7831973251, + 0.3020716403, + 0.5434654305, + 8000.0 + ], + [ + 0.8139604231, + 0.1426528656, + 0.5631328348, + 8000.0 + ], + [ + 0.8233406414, + -0.02018070931, + 0.5671886169, + 8000.0 + ], + [ + -0.8097333473, + 0.1790681973, + -0.558808095, + 8000.0 + ], + [ + -0.7756290022, + 0.3336803, + -0.535777107, + 8000.0 + ], + [ + -0.7201623938, + 0.4793810155, + -0.5015575425, + 8000.0 + ], + [ + -0.6443097748, + 0.6170346265, + -0.4518110045, + 8000.0 + ], + [ + -0.5105673453, + 0.6984576953, + -0.5014756562, + 8000.0 + ], + [ + -0.3675039569, + 0.7591211833, + -0.5372856509, + 8000.0 + ], + [ + -0.214162085, + 0.8088383146, + -0.5476451243, + 8000.0 + ], + [ + -0.04766454497, + 0.8314585939, + -0.5535383435, + 8000.0 + ], + [ + 0.1214588272, + 0.8271395101, + -0.5487148478, + 8000.0 + ], + [ + 0.2860192726, + 0.7947013157, + -0.5353903198, + 8000.0 + ], + [ + 0.4375195625, + 0.7372610723, + -0.5148035972, + 8000.0 + ], + [ + 0.5778323019, + 0.6602265138, + -0.4798028567, + 8000.0 + ], + [ + 0.7039755117, + 0.5681861023, + -0.4261256061, + 8000.0 + ], + [ + 0.7634896137, + 0.4272225035, + -0.4843186371, + 8000.0 + ], + [ + 0.7993196384, + 0.2725635687, + -0.535534515, + 8000.0 + ], + [ + 0.892023962, + 0.1644988813, + -0.4209909372, + 8000.0 + ], + [ + -0.9008095313, + -0.00444673563, + 0.4341916798, + 8000.0 + ], + [ + -0.8801383526, + 0.1566742573, + 0.4481179056, + 8000.0 + ], + [ + -0.833588434, + 0.3164883212, + 0.4527311181, + 8000.0 + ], + [ + -0.7476996175, + 0.4671631635, + 0.471915099, + 8000.0 + ], + [ + -0.6384525233, + 0.584977424, + 0.5001797566, + 8000.0 + ], + [ + -0.5148155306, + 0.6871896114, + 0.512577221, + 8000.0 + ], + [ + -0.3786273152, + 0.7727038682, + 0.5094802138, + 8000.0 + ], + [ + -0.2317657191, + 0.8409689541, + 0.4889334, + 8000.0 + ], + [ + -0.08325846942, + 0.8881056773, + 0.4520357654, + 8000.0 + ], + [ + 0.07276379679, + 0.9110191785, + 0.405893442, + 8000.0 + ], + [ + 0.2181698334, + 0.8595404182, + 0.4621603546, + 8000.0 + ], + [ + 0.3612681501, + 0.8604875047, + 0.359230536, + 8000.0 + ], + [ + 0.4899333344, + 0.7774544789, + 0.3943727438, + 8000.0 + ], + [ + 0.6076412517, + 0.677345114, + 0.4146995368, + 8000.0 + ], + [ + 0.7186929217, + 0.5589655307, + 0.4135674307, + 8000.0 + ], + [ + 0.8100333253, + 0.4080585691, + 0.4211106935, + 8000.0 + ], + [ + 0.8710687337, + 0.2402921623, + 0.4283677602, + 8000.0 + ], + [ + 0.8955631444, + 0.07453726985, + 0.4386466115, + 8000.0 + ], + [ + -0.8964299798, + 0.08746374523, + -0.4344690837, + 8000.0 + ], + [ + -0.8747732604, + 0.2439653071, + -0.4186319049, + 8000.0 + ], + [ + -0.8320740318, + 0.3918674458, + -0.3925464438, + 8000.0 + ], + [ + -0.7697598404, + 0.5305679724, + -0.3549188847, + 8000.0 + ], + [ + -0.6883147697, + 0.6562741874, + -0.3090743742, + 8000.0 + ], + [ + -0.5667966036, + 0.7447687085, + -0.3522231976, + 8000.0 + ], + [ + -0.4335187154, + 0.8122232692, + -0.3903266379, + 8000.0 + ], + [ + -0.2888653644, + 0.8639301371, + -0.4125306285, + 8000.0 + ], + [ + -0.1283189259, + 0.8958558073, + -0.4254134762, + 8000.0 + ], + [ + 0.03860043854, + 0.9039295961, + -0.4259357833, + 8000.0 + ], + [ + 0.2045540783, + 0.8861204638, + -0.4158703557, + 8000.0 + ], + [ + 0.3629923696, + 0.8423047515, + -0.398446038, + 8000.0 + ], + [ + 0.5091712898, + 0.7772611108, + -0.36960758, + 8000.0 + ], + [ + 0.6381868495, + 0.6971635412, + -0.3266198737, + 8000.0 + ], + [ + 0.752372513, + 0.5994685683, + -0.2730806426, + 8000.0 + ], + [ + 0.8169817446, + 0.472667973, + -0.3303419686, + 8000.0 + ], + [ + 0.8617377132, + 0.3209212823, + -0.3929601052, + 8000.0 + ], + [ + 0.9375595419, + 0.2179446082, + -0.2710761023, + 8000.0 + ], + [ + 0.9555966918, + 0.05702525674, + -0.2891073895, + 8000.0 + ], + [ + -0.9471304776, + 0.1049414681, + 0.3032014953, + 8000.0 + ], + [ + -0.9105876731, + 0.2658216855, + 0.3164947411, + 8000.0 + ], + [ + -0.840558662, + 0.4272505338, + 0.3330437166, + 8000.0 + ], + [ + -0.7427197603, + 0.570761042, + 0.3501416721, + 8000.0 + ], + [ + -0.6268012665, + 0.6855815813, + 0.3702675622, + 8000.0 + ], + [ + -0.496135299, + 0.7826243854, + 0.3759638766, + 8000.0 + ], + [ + -0.3557236392, + 0.8602266998, + 0.3653364442, + 8000.0 + ], + [ + -0.2135046737, + 0.9174750369, + 0.3356416407, + 8000.0 + ], + [ + -0.06818893746, + 0.9523916699, + 0.2971537916, + 8000.0 + ], + [ + 0.08411369757, + 0.9628881513, + 0.2564591469, + 8000.0 + ], + [ + 0.2274177456, + 0.9236773123, + 0.3083851355, + 8000.0 + ], + [ + 0.3321697904, + 0.9249732567, + 0.1846285586, + 8000.0 + ], + [ + 0.4665459188, + 0.8537404989, + 0.2312186545, + 8000.0 + ], + [ + 0.5949481397, + 0.7602384547, + 0.2609103353, + 8000.0 + ], + [ + 0.7094965346, + 0.647689679, + 0.2776918203, + 8000.0 + ], + [ + 0.814180146, + 0.5031101104, + 0.289811847, + 8000.0 + ], + [ + 0.8929068524, + 0.3382074937, + 0.2972087551, + 8000.0 + ], + [ + 0.9392646018, + 0.1633776009, + 0.3018108137, + 8000.0 + ], + [ + 0.9545904645, + -0.003861267585, + 0.2978961826, + 8000.0 + ], + [ + -0.9440986455, + 0.1658584334, + -0.2849012595, + 8000.0 + ], + [ + -0.9101178014, + 0.3214264192, + -0.2614778091, + 8000.0 + ], + [ + -0.8531759641, + 0.4692083556, + -0.2278909683, + 8000.0 + ], + [ + -0.7721725819, + 0.607244662, + -0.1870920209, + 8000.0 + ], + [ + -0.645807238, + 0.7412639773, + -0.1829227356, + 8000.0 + ], + [ + -0.513860755, + 0.8291838007, + -0.2200030663, + 8000.0 + ], + [ + -0.3742727226, + 0.8916918008, + -0.2545695612, + 8000.0 + ], + [ + -0.2199564893, + 0.9341170799, + -0.2811484019, + 8000.0 + ], + [ + -0.1488791261, + 0.9779519823, + -0.1464408619, + 8000.0 + ], + [ + -0.05190444702, + 0.9554263089, + -0.290631204, + 8000.0 + ], + [ + 0.1182897011, + 0.9511485388, + -0.2851736378, + 8000.0 + ], + [ + 0.2851026621, + 0.9194528994, + -0.2707819008, + 8000.0 + ], + [ + 0.4423647384, + 0.8630716032, + -0.2437639146, + 8000.0 + ], + [ + 0.5813417681, + 0.7883521096, + -0.201352179, + 8000.0 + ], + [ + 0.7055825937, + 0.6916730098, + -0.1540832602, + 8000.0 + ], + [ + 0.8226685514, + 0.5496269159, + -0.1453502938, + 8000.0 + ], + [ + 0.894613166, + 0.3765378384, + -0.2405962167, + 8000.0 + ], + [ + 0.956140104, + 0.2694377303, + -0.1148886898, + 8000.0 + ], + [ + 0.9845220492, + 0.1117963671, + -0.1349737267, + 8000.0 + ], + [ + -0.9872926918, + 0.05066637614, + 0.15061892, + 8000.0 + ], + [ + -0.9629710484, + 0.2107304325, + 0.1681649333, + 8000.0 + ], + [ + -0.9089156, + 0.3704065174, + 0.1914978953, + 8000.0 + ], + [ + -0.8246628192, + 0.5260661652, + 0.2078115119, + 8000.0 + ], + [ + -0.7143233921, + 0.6634391927, + 0.2226893107, + 8000.0 + ], + [ + -0.5868388963, + 0.7754107475, + 0.2331486274, + 8000.0 + ], + [ + -0.447517209, + 0.8646691738, + 0.2282007178, + 8000.0 + ], + [ + -0.3052100428, + 0.9312358401, + 0.19911464, + 8000.0 + ], + [ + -0.156882597, + 0.9745527475, + 0.1601086914, + 8000.0 + ], + [ + 0.0012529542, + 0.992147907, + 0.1250638269, + 8000.0 + ], + [ + 0.103493427, + 0.9945772314, + -0.01025871795, + 8000.0 + ], + [ + 0.1833466381, + 0.9737792427, + 0.1346773801, + 8000.0 + ], + [ + 0.2771711523, + 0.9607764896, + 0.009202679436, + 8000.0 + ], + [ + 0.4256892524, + 0.9032464531, + 0.05417107545, + 8000.0 + ], + [ + 0.5595333971, + 0.8226806043, + 0.1005932442, + 8000.0 + ], + [ + 0.6865561464, + 0.7165393857, + 0.1233368017, + 8000.0 + ], + [ + 0.7933340115, + 0.5898145858, + 0.1507975484, + 8000.0 + ], + [ + 0.8870805306, + 0.431028964, + 0.165233666, + 8000.0 + ], + [ + 0.9515182668, + 0.2557980704, + 0.1708225252, + 8000.0 + ], + [ + 0.9834626085, + 0.08625805841, + 0.1592508873, + 8000.0 + ], + [ + -0.9859385825, + 0.07900435081, + -0.1472529258, + 8000.0 + ], + [ + -0.9621451618, + 0.2409599237, + -0.1273381437, + 8000.0 + ], + [ + -0.9131052483, + 0.3957468441, + -0.09809811843, + 8000.0 + ], + [ + -0.8384106194, + 0.5414064462, + -0.06282271332, + 8000.0 + ], + [ + -0.7256598187, + 0.6861416117, + -0.05125930337, + 8000.0 + ], + [ + -0.5902093395, + 0.8056551284, + -0.05072227971, + 8000.0 + ], + [ + -0.4530853873, + 0.8877269874, + -0.08157467544, + 8000.0 + ], + [ + -0.3071214675, + 0.9442886333, + -0.1183020761, + 8000.0 + ], + [ + -0.2348733933, + 0.9718218262, + 0.01992052207, + 8000.0 + ], + [ + -0.07369321841, + 0.9972231773, + -0.01073518634, + 8000.0 + ], + [ + 0.02545736524, + 0.9880834471, + -0.1517992892, + 8000.0 + ], + [ + 0.1990285953, + 0.9696963233, + -0.1416921266, + 8000.0 + ], + [ + 0.3651382256, + 0.9234293502, + -0.1181199028, + 8000.0 + ], + [ + 0.5105772936, + 0.8565718699, + -0.07480280104, + 8000.0 + ], + [ + 0.6408011166, + 0.7670788095, + -0.03104881642, + 8000.0 + ], + [ + 0.7651513262, + 0.6437562058, + -0.01101796353, + 8000.0 + ], + [ + 0.8577863249, + 0.5134139191, + 0.02467323426, + 8000.0 + ], + [ + 0.9007738794, + 0.4232833333, + -0.09714750669, + 8000.0 + ], + [ + 0.9384675954, + 0.3433556976, + 0.03722146364, + 8000.0 + ], + [ + 0.9837385072, + 0.1782771958, + 0.02181263184, + 8000.0 + ], + [ + 0.9998989022, + 0.01354134724, + 0.004337901547, + 8000.0 + ], + [ + -0.9887006469, + 0.1494578566, + 0.01154902032, + 8000.0 + ], + [ + -0.9499255232, + 0.3104793482, + 0.03527144325, + 8000.0 + ], + [ + -0.8837898775, + 0.4634960663, + 0.06392846706, + 8000.0 + ], + [ + -0.7843304257, + 0.6155660518, + 0.07683891774, + 8000.0 + ], + [ + -0.6610135002, + 0.745246834, + 0.08756888122, + 8000.0 + ], + [ + -0.5225877151, + 0.8481793297, + 0.08656734195, + 8000.0 + ], + [ + -0.3816685677, + 0.9224450057, + 0.05851765547, + 8000.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "mrtrix_version": "3.0.1-24-g62bb3c69", + "prior_pe_scheme": [ + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + 1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ] + ] +} diff --git a/tests/data/hifi_splenium_4vox no_sidecar.nii b/tests/data/hifi/hifi_splenium_4vox_no_bval.nii similarity index 100% rename from tests/data/hifi_splenium_4vox no_sidecar.nii rename to tests/data/hifi/hifi_splenium_4vox_no_bval.nii diff --git a/tests/data/hifi/hifi_splenium_4vox_no_bvec.bval b/tests/data/hifi/hifi_splenium_4vox_no_bvec.bval new file mode 100644 index 00000000..8f84e817 --- /dev/null +++ b/tests/data/hifi/hifi_splenium_4vox_no_bvec.bval @@ -0,0 +1 @@ +0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 0 0 0 0 0 0 0 0 0 diff --git a/tests/data/hifi/hifi_splenium_4vox_no_bvec.json b/tests/data/hifi/hifi_splenium_4vox_no_bvec.json new file mode 100644 index 00000000..08d5f226 --- /dev/null +++ b/tests/data/hifi/hifi_splenium_4vox_no_bvec.json @@ -0,0 +1,4140 @@ +{ + "AcquisitionMatrixPE": 74, + "AcquisitionNumber": 1, + "AcquisitionTime": "variable", + "BandwidthPerPixelPhaseEncode": 36.5229988, + "BaseResolution": 74, + "BodyPartExamined": "BRAIN", + "ConsistencyInfo": "N4_VE11C_LATEST_20160120", + "ConversionSoftware": "dcm2niix", + "ConversionSoftwareVersion": "v1.0.20190902", + "DerivedVendorReportedEchoSpacing": 0.000739999989, + "DeviceSerialNumber": 167021, + "DiffusionScheme": "Monopolar", + "DwellTime": 4.39999985e-06, + "EchoTime": 0.0989999995, + "EchoTrainLength": 37, + "EffectiveEchoSpacing": 0.000369999994, + "FlipAngle": 90, + "ImageOrientationPatientDICOM": [ + 0.994345, + -0.0163522, + -0.104929, + 2.73897e-08, + 0.988074, + -0.153983 + ], + "ImageType": "variable", + "ImagingFrequency": 123.230003, + "InPlanePhaseEncodingDirectionDICOM": "COL", + "InstitutionAddress": "XXXXX", + "InstitutionName": "XXXXX", + "InstitutionalDepartmentName": "XXXXX", + "MRAcquisitionType": "2D", + "MagneticFieldStrength": 3, + "Manufacturer": "Siemens", + "ManufacturersModelName": "Prisma_fit", + "Modality": "MR", + "ParallelReductionFactorInPlane": 2, + "PartialFourier": 1, + "PatientPosition": "HFS", + "PercentPhaseFOV": 100, + "PhaseEncodingSteps": 74, + "PhaseResolution": 1, + "PixelBandwidth": 1535, + "ProcedureStepDescription": "XXXXX", + "ProtocolName": "variable", + "PulseSequenceDetails": "%SiemensSeq%_ep2d_diff", + "ReceiveCoilActiveElements": "HEA;HEP", + "ReceiveCoilName": "Head_32", + "ReconMatrixPE": 74, + "RefLinesPE": 24, + "RepetitionTime": 3.9000001, + "SAR": "variable", + "ScanOptions": "FS", + "ScanningSequence": "EP", + "SequenceName": "_ep_b0", + "SequenceVariant": "SK_SP", + "SeriesDescription": "variable", + "SeriesNumber": "variable", + "ShimSetting": [ + 3695, + -10046, + 2626, + 292, + 83, + -279, + -134, + 102 + ], + "SliceThickness": 3, + "SoftwareVersions": "syngo_MR_E11", + "SpacingBetweenSlices": 3, + "StationName": "MRC35104", + "TxRefAmp": 222.089005, + "command_history": [ + "variable", + "mrcat -axis 3 /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi0.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi1.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi2.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif (version=3.0.1-24-g62bb3c69)", + "dwidenoise -noise /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/noisemap.nii -extent '5,5,5' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/1_dwi_denoised.mif (version=3.0.1-24-g62bb3c69)", + "mrdegibbs /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/2_dwi_degibbs.mif (version=3.0.1-24-g62bb3c69)", + "/usr/local/mrtrix3/bin/dwifslpreproc -se_epi /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/B0_EPI.mif -eddy_options '--repol --data_is_shelled' -rpe_header -eddyqc_all /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/metrics_qc/eddy /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/3_dwi_undistorted.mif (version=3.0.1-24-g62bb3c69)", + "mrconvert -force -quiet -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.json -strides '1,2,3,4' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/4_dwi_smoothed.mif (version=3.0.1-24-g62bb3c69)", + "mrconvert -force -quiet -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.json -strides '1,2,3,4' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/5_dwi_rician.mif (version=3.0.1-24-g62bb3c69)" + ], + "comments": [ + "TE=99;Time=104142.333;phase=1;mb=2", + "TE=99;Time=104634.188;phase=0;mb=2", + "TE=99;Time=102301.625;phase=1;mb=2", + "TE=99;Time=104142", + "TE=99;Time=104142" + ], + "dw_scheme": [ + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.2041193387, + 0.5137031909, + -0.833333263, + 1000.0 + ], + [ + -0.1977141975, + 0.5146343525, + -0.8343024508, + 1000.0 + ], + [ + -0.3999621792, + 0.1718072214, + -0.900284696, + 1000.0 + ], + [ + 0.4037001972, + 0.7264234052, + -0.5561790963, + 1000.0 + ], + [ + 0.2032804557, + 0.9391539284, + -0.2768879831, + 1000.0 + ], + [ + 0.8546867084, + 0.5149137883, + -0.06613940621, + 1000.0 + ], + [ + 0.7310855427, + 0.5144020839, + -0.4482236331, + 1000.0 + ], + [ + 0.4058203992, + 0.1702779517, + -0.8979505681, + 1000.0 + ], + [ + 0.7299824555, + 0.1701815673, + -0.6619394601, + 1000.0 + ], + [ + 0.6526334818, + 0.7283765637, + 0.2086555051, + 1000.0 + ], + [ + 0.3244365682, + 0.9401997848, + 0.1037558568, + 1000.0 + ], + [ + 0.3253184522, + 0.5170243383, + 0.791740954, + 1000.0 + ], + [ + 0.6514813496, + 0.5175849347, + 0.554687197, + 1000.0 + ], + [ + 0.9790823445, + 0.1727878311, + 0.1074342964, + 1000.0 + ], + [ + 0.8540502963, + 0.1734394521, + 0.4904251705, + 1000.0 + ], + [ + -0.002259620983, + 0.7302636963, + 0.6831616412, + 1000.0 + ], + [ + -0.002591339745, + 0.9415239344, + 0.3369361451, + 1000.0 + ], + [ + -0.6554853118, + 0.5169442435, + 0.5505521367, + 1000.0 + ], + [ + -0.3308567768, + 0.5183798452, + 0.7885531874, + 1000.0 + ], + [ + 0.1972617938, + 0.1747377061, + 0.9646525378, + 1000.0 + ], + [ + -0.2056872366, + 0.1740635009, + 0.963013322, + 1000.0 + ], + [ + -0.6527536174, + 0.7289013255, + 0.2064353957, + 1000.0 + ], + [ + -0.3254198893, + 0.9404517877, + 0.09824627548, + 1000.0 + ], + [ + -0.1993994297, + 0.9378278089, + -0.2841106622, + 1000.0 + ], + [ + -0.402190306, + 0.7259439266, + -0.5578963821, + 1000.0 + ], + [ + -0.7282749406, + 0.170845989, + -0.6636469384, + 1000.0 + ], + [ + -0.7269286759, + 0.5136962899, + -0.455731085, + 1000.0 + ], + [ + -0.8535207681, + 0.5157749553, + -0.07401684809, + 1000.0 + ], + [ + -0.8581097023, + 0.1742568347, + 0.4829930584, + 1000.0 + ], + [ + -0.9798602664, + 0.1731730579, + 0.09942308757, + 1000.0 + ], + [ + 0.204978745, + 0.5120461773, + -0.8341417304, + 2000.0 + ], + [ + -0.1965293814, + 0.5127992738, + -0.8357111385, + 2000.0 + ], + [ + -0.3998713053, + 0.1699687211, + -0.9006739549, + 2000.0 + ], + [ + 0.4048534043, + 0.7250704832, + -0.5571054796, + 2000.0 + ], + [ + 0.2036165985, + 0.9386839084, + -0.2782315599, + 2000.0 + ], + [ + 0.8549558168, + 0.5145177471, + -0.06574221798, + 2000.0 + ], + [ + 0.7315589065, + 0.5138347744, + -0.4481019872, + 2000.0 + ], + [ + 0.4072249602, + 0.1696576375, + -0.8974319572, + 2000.0 + ], + [ + 0.7309258671, + 0.1700521269, + -0.6609308972, + 2000.0 + ], + [ + 0.6524868782, + 0.7278674133, + 0.2108788811, + 2000.0 + ], + [ + 0.3242097053, + 0.9401930644, + 0.1045230534, + 2000.0 + ], + [ + 0.3238402283, + 0.5170630515, + 0.7923214671, + 2000.0 + ], + [ + 0.6502088878, + 0.516892536, + 0.5568217924, + 2000.0 + ], + [ + 0.9790345074, + 0.1722952772, + 0.1086543635, + 2000.0 + ], + [ + 0.8532894718, + 0.1731874673, + 0.4918365364, + 2000.0 + ], + [ + -0.001974410286, + 0.7298582035, + 0.6835957171, + 2000.0 + ], + [ + -0.00310387162, + 0.9412377457, + 0.3377304724, + 2000.0 + ], + [ + -0.655638689, + 0.5168712665, + 0.5504380105, + 2000.0 + ], + [ + -0.331102832, + 0.5175902144, + 0.788968494, + 2000.0 + ], + [ + 0.1965814308, + 0.1742203798, + 0.9648849674, + 2000.0 + ], + [ + -0.2059179905, + 0.1740199847, + 0.9629718719, + 2000.0 + ], + [ + -0.6533703702, + 0.7283237759, + 0.2065227271, + 2000.0 + ], + [ + -0.3258404176, + 0.9402721635, + 0.09857119676, + 2000.0 + ], + [ + -0.1997946014, + 0.9376822071, + -0.2843135519, + 2000.0 + ], + [ + -0.4019648303, + 0.7255111928, + -0.5586213246, + 2000.0 + ], + [ + -0.7282631119, + 0.1706087558, + -0.6637209446, + 2000.0 + ], + [ + -0.7267950678, + 0.513986761, + -0.4556166579, + 2000.0 + ], + [ + -0.8535307738, + 0.5158325871, + -0.07349802909, + 2000.0 + ], + [ + -0.8578799975, + 0.1738247724, + 0.4835564687, + 2000.0 + ], + [ + -0.9799128072, + 0.1724960796, + 0.1000799318, + 2000.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.06332081897, + 0.01444310468, + 0.9978887065, + 8000.0 + ], + [ + -0.07417404809, + 0.1564827949, + -0.98489154, + 8000.0 + ], + [ + -0.07409180858, + -0.08248148301, + 0.9938345983, + 8000.0 + ], + [ + -0.08880178295, + 0.08731895646, + 0.9922145147, + 8000.0 + ], + [ + 0.05085716826, + 0.1788560869, + 0.9825599466, + 8000.0 + ], + [ + 0.2048379922, + 0.1092212416, + 0.972682948, + 8000.0 + ], + [ + 0.2154325352, + -0.05118067635, + 0.9751765795, + 8000.0 + ], + [ + -0.2138596396, + 0.2139010684, + -0.9531581125, + 8000.0 + ], + [ + 0.0482117501, + 0.2505349565, + -0.9669063361, + 8000.0 + ], + [ + 0.2049114349, + 0.1863776562, + -0.9608718297, + 8000.0 + ], + [ + -0.3529281357, + -0.1188557216, + 0.9280706053, + 8000.0 + ], + [ + -0.223297512, + -0.01561593684, + 0.9746252427, + 8000.0 + ], + [ + -0.2384915225, + 0.1570689408, + 0.9583585663, + 8000.0 + ], + [ + -0.1054733643, + 0.2532084332, + 0.9616448714, + 8000.0 + ], + [ + 0.03320362423, + 0.3381202338, + 0.9405169997, + 8000.0 + ], + [ + 0.1935410102, + 0.2674794086, + 0.9439261853, + 8000.0 + ], + [ + 0.3350161077, + 0.2010768489, + 0.9205065499, + 8000.0 + ], + [ + 0.3523850069, + 0.03295309449, + 0.9352747727, + 8000.0 + ], + [ + 0.3568902721, + -0.1325617364, + 0.9246927705, + 8000.0 + ], + [ + -0.3226246533, + 0.3043923819, + -0.8962469587, + 8000.0 + ], + [ + -0.1253864024, + 0.3382875593, + -0.932652013, + 8000.0 + ], + [ + 0.02618126578, + 0.3950301729, + -0.9182949982, + 8000.0 + ], + [ + 0.1879427584, + 0.343759089, + -0.9200582635, + 8000.0 + ], + [ + 0.3389068547, + 0.2822803585, + -0.8974742019, + 8000.0 + ], + [ + 0.4806508488, + 0.2138671441, + -0.8504325994, + 8000.0 + ], + [ + -0.4906817579, + -0.05222510449, + 0.8697723558, + 8000.0 + ], + [ + -0.3638629425, + 0.04948088767, + 0.9301373021, + 8000.0 + ], + [ + -0.3758752589, + 0.2264993174, + 0.8985632137, + 8000.0 + ], + [ + -0.2501143667, + 0.3262073881, + 0.9116093152, + 8000.0 + ], + [ + -0.11469697, + 0.4144088082, + 0.902834395, + 8000.0 + ], + [ + 0.02856305646, + 0.4899053085, + 0.8713076038, + 8000.0 + ], + [ + 0.1772886584, + 0.4119213007, + 0.8938062283, + 8000.0 + ], + [ + 0.3262734121, + 0.3807595781, + 0.8651981301, + 8000.0 + ], + [ + 0.454391951, + 0.272429718, + 0.8481214557, + 8000.0 + ], + [ + 0.4809612063, + 0.1052273006, + 0.8704042355, + 8000.0 + ], + [ + 0.4913592531, + -0.06113377373, + 0.8688088087, + 8000.0 + ], + [ + -0.4703498943, + 0.2325802215, + -0.8512798702, + 8000.0 + ], + [ + -0.4284839936, + 0.3954535384, + -0.8124148978, + 8000.0 + ], + [ + -0.269230545, + 0.4444057824, + -0.8544111506, + 8000.0 + ], + [ + -0.12290081, + 0.4872007472, + -0.8645986484, + 8000.0 + ], + [ + 0.02310278889, + 0.5349069715, + -0.8445950468, + 8000.0 + ], + [ + 0.1738345832, + 0.4919811729, + -0.8530744769, + 8000.0 + ], + [ + 0.3204745421, + 0.4381379528, + -0.8398399861, + 8000.0 + ], + [ + 0.4611122499, + 0.3725046699, + -0.8053668505, + 8000.0 + ], + [ + 0.6111564904, + 0.1407586621, + -0.7788932811, + 8000.0 + ], + [ + -0.6164448666, + 0.0182915636, + 0.7871855849, + 8000.0 + ], + [ + -0.491308456, + 0.1153364724, + 0.8633154112, + 8000.0 + ], + [ + -0.5021993072, + 0.2917622033, + 0.8140458664, + 8000.0 + ], + [ + -0.3822782783, + 0.3934250602, + 0.8361100645, + 8000.0 + ], + [ + -0.2521442149, + 0.4854616575, + 0.8371082809, + 8000.0 + ], + [ + -0.1129679822, + 0.5642476573, + 0.8178403366, + 8000.0 + ], + [ + 0.03941977651, + 0.6247156598, + 0.77985667, + 8000.0 + ], + [ + 0.185218657, + 0.5425577119, + 0.8193443588, + 8000.0 + ], + [ + 0.3310889531, + 0.5432284415, + 0.7715458285, + 8000.0 + ], + [ + 0.4491133268, + 0.436742144, + 0.7794571954, + 8000.0 + ], + [ + 0.5684476951, + 0.319874619, + 0.7579890804, + 8000.0 + ], + [ + 0.5980293927, + 0.1620609684, + 0.7849185232, + 8000.0 + ], + [ + 0.6149706868, + 0.0009513636549, + 0.7885493956, + 8000.0 + ], + [ + -0.6024246598, + 0.1645783385, + -0.7810240071, + 8000.0 + ], + [ + -0.5704450247, + 0.3264348418, + -0.7536794862, + 8000.0 + ], + [ + -0.5144035982, + 0.482909799, + -0.7086515816, + 8000.0 + ], + [ + -0.3644130073, + 0.5444430013, + -0.7555031294, + 8000.0 + ], + [ + -0.2130411425, + 0.5955142482, + -0.7745813397, + 8000.0 + ], + [ + -0.06001856711, + 0.641344364, + -0.7649020711, + 8000.0 + ], + [ + 0.1167986839, + 0.6382102822, + -0.7609505261, + 8000.0 + ], + [ + 0.2708287664, + 0.5908007885, + -0.7600040839, + 8000.0 + ], + [ + 0.419013, + 0.5286408254, + -0.7382187911, + 8000.0 + ], + [ + 0.5569609966, + 0.455047383, + -0.6947850945, + 8000.0 + ], + [ + 0.5948040245, + 0.3000380191, + -0.7457783582, + 8000.0 + ], + [ + -0.7280700238, + -0.04582590336, + 0.6839693173, + 8000.0 + ], + [ + -0.7176359257, + 0.1226390699, + 0.6855350733, + 8000.0 + ], + [ + -0.6066098645, + 0.1800032163, + 0.7743534816, + 8000.0 + ], + [ + -0.6428185047, + 0.3099967155, + 0.7004901187, + 8000.0 + ], + [ + -0.5237393276, + 0.4318488107, + 0.734304924, + 8000.0 + ], + [ + -0.3942280895, + 0.5347683254, + 0.7474001951, + 8000.0 + ], + [ + -0.2555117198, + 0.6226413207, + 0.7396158102, + 8000.0 + ], + [ + -0.1057790974, + 0.6926381847, + 0.7134865995, + 8000.0 + ], + [ + 0.05300474118, + 0.7396424228, + 0.6709095198, + 8000.0 + ], + [ + 0.1994248317, + 0.6638078249, + 0.7208251578, + 8000.0 + ], + [ + 0.340485266, + 0.6823473806, + 0.6468939911, + 8000.0 + ], + [ + 0.4578772784, + 0.5831494363, + 0.6710328851, + 8000.0 + ], + [ + 0.5690836021, + 0.4758604012, + 0.6705972952, + 8000.0 + ], + [ + 0.6721958221, + 0.3592127516, + 0.6473939881, + 8000.0 + ], + [ + 0.7062910286, + 0.2092882899, + 0.6762776018, + 8000.0 + ], + [ + 0.7257541526, + 0.05640646761, + 0.6856378201, + 8000.0 + ], + [ + 0.7232268738, + -0.1017622955, + 0.6830719759, + 8000.0 + ], + [ + -0.6977125493, + 0.2592782172, + -0.667811354, + 8000.0 + ], + [ + -0.6522665461, + 0.4117082555, + -0.6364311944, + 8000.0 + ], + [ + -0.5849001722, + 0.5583872161, + -0.5882988233, + 8000.0 + ], + [ + -0.4432526, + 0.6299118936, + -0.6377602519, + 8000.0 + ], + [ + -0.2937871727, + 0.6865539754, + -0.6650809996, + 8000.0 + ], + [ + -0.1386295555, + 0.7340533923, + -0.6647912933, + 8000.0 + ], + [ + 0.03313822298, + 0.7447047783, + -0.666570815, + 8000.0 + ], + [ + 0.2045279417, + 0.7250875013, + -0.6575837867, + 8000.0 + ], + [ + 0.3589659154, + 0.673169997, + -0.6465180792, + 8000.0 + ], + [ + 0.5040616146, + 0.6048231825, + -0.6165312698, + 8000.0 + ], + [ + 0.6385154351, + 0.5186963987, + -0.5685526229, + 8000.0 + ], + [ + 0.6882258778, + 0.3681749577, + -0.625133859, + 8000.0 + ], + [ + 0.7161919627, + 0.2092634907, + -0.6657911565, + 8000.0 + ], + [ + 0.8199740941, + 0.1128854052, + -0.5611589528, + 8000.0 + ], + [ + -0.819885839, + 0.0476596813, + 0.5705398897, + 8000.0 + ], + [ + -0.7868730917, + 0.2093606719, + 0.5805160175, + 8000.0 + ], + [ + -0.7323024624, + 0.3510300601, + 0.5835332043, + 8000.0 + ], + [ + -0.6321236638, + 0.4683934059, + 0.617274081, + 8000.0 + ], + [ + -0.5150729771, + 0.5747325861, + 0.6359105933, + 8000.0 + ], + [ + -0.3852421309, + 0.6666535005, + 0.6380921648, + 8000.0 + ], + [ + -0.2441540138, + 0.7433702255, + 0.6227274889, + 8000.0 + ], + [ + -0.09282097362, + 0.8007161943, + 0.5918089583, + 8000.0 + ], + [ + 0.06286774212, + 0.8362776041, + 0.5446902018, + 8000.0 + ], + [ + 0.2076470152, + 0.7723939575, + 0.6002418609, + 8000.0 + ], + [ + 0.3564213436, + 0.7827111091, + 0.5102226431, + 8000.0 + ], + [ + 0.4816276925, + 0.6897290431, + 0.540655725, + 8000.0 + ], + [ + 0.5978744474, + 0.582455926, + 0.5507188388, + 8000.0 + ], + [ + 0.705565045, + 0.4624713035, + 0.5369341307, + 8000.0 + ], + [ + 0.7831973251, + 0.3020716403, + 0.5434654305, + 8000.0 + ], + [ + 0.8139604231, + 0.1426528656, + 0.5631328348, + 8000.0 + ], + [ + 0.8233406414, + -0.02018070931, + 0.5671886169, + 8000.0 + ], + [ + -0.8097333473, + 0.1790681973, + -0.558808095, + 8000.0 + ], + [ + -0.7756290022, + 0.3336803, + -0.535777107, + 8000.0 + ], + [ + -0.7201623938, + 0.4793810155, + -0.5015575425, + 8000.0 + ], + [ + -0.6443097748, + 0.6170346265, + -0.4518110045, + 8000.0 + ], + [ + -0.5105673453, + 0.6984576953, + -0.5014756562, + 8000.0 + ], + [ + -0.3675039569, + 0.7591211833, + -0.5372856509, + 8000.0 + ], + [ + -0.214162085, + 0.8088383146, + -0.5476451243, + 8000.0 + ], + [ + -0.04766454497, + 0.8314585939, + -0.5535383435, + 8000.0 + ], + [ + 0.1214588272, + 0.8271395101, + -0.5487148478, + 8000.0 + ], + [ + 0.2860192726, + 0.7947013157, + -0.5353903198, + 8000.0 + ], + [ + 0.4375195625, + 0.7372610723, + -0.5148035972, + 8000.0 + ], + [ + 0.5778323019, + 0.6602265138, + -0.4798028567, + 8000.0 + ], + [ + 0.7039755117, + 0.5681861023, + -0.4261256061, + 8000.0 + ], + [ + 0.7634896137, + 0.4272225035, + -0.4843186371, + 8000.0 + ], + [ + 0.7993196384, + 0.2725635687, + -0.535534515, + 8000.0 + ], + [ + 0.892023962, + 0.1644988813, + -0.4209909372, + 8000.0 + ], + [ + -0.9008095313, + -0.00444673563, + 0.4341916798, + 8000.0 + ], + [ + -0.8801383526, + 0.1566742573, + 0.4481179056, + 8000.0 + ], + [ + -0.833588434, + 0.3164883212, + 0.4527311181, + 8000.0 + ], + [ + -0.7476996175, + 0.4671631635, + 0.471915099, + 8000.0 + ], + [ + -0.6384525233, + 0.584977424, + 0.5001797566, + 8000.0 + ], + [ + -0.5148155306, + 0.6871896114, + 0.512577221, + 8000.0 + ], + [ + -0.3786273152, + 0.7727038682, + 0.5094802138, + 8000.0 + ], + [ + -0.2317657191, + 0.8409689541, + 0.4889334, + 8000.0 + ], + [ + -0.08325846942, + 0.8881056773, + 0.4520357654, + 8000.0 + ], + [ + 0.07276379679, + 0.9110191785, + 0.405893442, + 8000.0 + ], + [ + 0.2181698334, + 0.8595404182, + 0.4621603546, + 8000.0 + ], + [ + 0.3612681501, + 0.8604875047, + 0.359230536, + 8000.0 + ], + [ + 0.4899333344, + 0.7774544789, + 0.3943727438, + 8000.0 + ], + [ + 0.6076412517, + 0.677345114, + 0.4146995368, + 8000.0 + ], + [ + 0.7186929217, + 0.5589655307, + 0.4135674307, + 8000.0 + ], + [ + 0.8100333253, + 0.4080585691, + 0.4211106935, + 8000.0 + ], + [ + 0.8710687337, + 0.2402921623, + 0.4283677602, + 8000.0 + ], + [ + 0.8955631444, + 0.07453726985, + 0.4386466115, + 8000.0 + ], + [ + -0.8964299798, + 0.08746374523, + -0.4344690837, + 8000.0 + ], + [ + -0.8747732604, + 0.2439653071, + -0.4186319049, + 8000.0 + ], + [ + -0.8320740318, + 0.3918674458, + -0.3925464438, + 8000.0 + ], + [ + -0.7697598404, + 0.5305679724, + -0.3549188847, + 8000.0 + ], + [ + -0.6883147697, + 0.6562741874, + -0.3090743742, + 8000.0 + ], + [ + -0.5667966036, + 0.7447687085, + -0.3522231976, + 8000.0 + ], + [ + -0.4335187154, + 0.8122232692, + -0.3903266379, + 8000.0 + ], + [ + -0.2888653644, + 0.8639301371, + -0.4125306285, + 8000.0 + ], + [ + -0.1283189259, + 0.8958558073, + -0.4254134762, + 8000.0 + ], + [ + 0.03860043854, + 0.9039295961, + -0.4259357833, + 8000.0 + ], + [ + 0.2045540783, + 0.8861204638, + -0.4158703557, + 8000.0 + ], + [ + 0.3629923696, + 0.8423047515, + -0.398446038, + 8000.0 + ], + [ + 0.5091712898, + 0.7772611108, + -0.36960758, + 8000.0 + ], + [ + 0.6381868495, + 0.6971635412, + -0.3266198737, + 8000.0 + ], + [ + 0.752372513, + 0.5994685683, + -0.2730806426, + 8000.0 + ], + [ + 0.8169817446, + 0.472667973, + -0.3303419686, + 8000.0 + ], + [ + 0.8617377132, + 0.3209212823, + -0.3929601052, + 8000.0 + ], + [ + 0.9375595419, + 0.2179446082, + -0.2710761023, + 8000.0 + ], + [ + 0.9555966918, + 0.05702525674, + -0.2891073895, + 8000.0 + ], + [ + -0.9471304776, + 0.1049414681, + 0.3032014953, + 8000.0 + ], + [ + -0.9105876731, + 0.2658216855, + 0.3164947411, + 8000.0 + ], + [ + -0.840558662, + 0.4272505338, + 0.3330437166, + 8000.0 + ], + [ + -0.7427197603, + 0.570761042, + 0.3501416721, + 8000.0 + ], + [ + -0.6268012665, + 0.6855815813, + 0.3702675622, + 8000.0 + ], + [ + -0.496135299, + 0.7826243854, + 0.3759638766, + 8000.0 + ], + [ + -0.3557236392, + 0.8602266998, + 0.3653364442, + 8000.0 + ], + [ + -0.2135046737, + 0.9174750369, + 0.3356416407, + 8000.0 + ], + [ + -0.06818893746, + 0.9523916699, + 0.2971537916, + 8000.0 + ], + [ + 0.08411369757, + 0.9628881513, + 0.2564591469, + 8000.0 + ], + [ + 0.2274177456, + 0.9236773123, + 0.3083851355, + 8000.0 + ], + [ + 0.3321697904, + 0.9249732567, + 0.1846285586, + 8000.0 + ], + [ + 0.4665459188, + 0.8537404989, + 0.2312186545, + 8000.0 + ], + [ + 0.5949481397, + 0.7602384547, + 0.2609103353, + 8000.0 + ], + [ + 0.7094965346, + 0.647689679, + 0.2776918203, + 8000.0 + ], + [ + 0.814180146, + 0.5031101104, + 0.289811847, + 8000.0 + ], + [ + 0.8929068524, + 0.3382074937, + 0.2972087551, + 8000.0 + ], + [ + 0.9392646018, + 0.1633776009, + 0.3018108137, + 8000.0 + ], + [ + 0.9545904645, + -0.003861267585, + 0.2978961826, + 8000.0 + ], + [ + -0.9440986455, + 0.1658584334, + -0.2849012595, + 8000.0 + ], + [ + -0.9101178014, + 0.3214264192, + -0.2614778091, + 8000.0 + ], + [ + -0.8531759641, + 0.4692083556, + -0.2278909683, + 8000.0 + ], + [ + -0.7721725819, + 0.607244662, + -0.1870920209, + 8000.0 + ], + [ + -0.645807238, + 0.7412639773, + -0.1829227356, + 8000.0 + ], + [ + -0.513860755, + 0.8291838007, + -0.2200030663, + 8000.0 + ], + [ + -0.3742727226, + 0.8916918008, + -0.2545695612, + 8000.0 + ], + [ + -0.2199564893, + 0.9341170799, + -0.2811484019, + 8000.0 + ], + [ + -0.1488791261, + 0.9779519823, + -0.1464408619, + 8000.0 + ], + [ + -0.05190444702, + 0.9554263089, + -0.290631204, + 8000.0 + ], + [ + 0.1182897011, + 0.9511485388, + -0.2851736378, + 8000.0 + ], + [ + 0.2851026621, + 0.9194528994, + -0.2707819008, + 8000.0 + ], + [ + 0.4423647384, + 0.8630716032, + -0.2437639146, + 8000.0 + ], + [ + 0.5813417681, + 0.7883521096, + -0.201352179, + 8000.0 + ], + [ + 0.7055825937, + 0.6916730098, + -0.1540832602, + 8000.0 + ], + [ + 0.8226685514, + 0.5496269159, + -0.1453502938, + 8000.0 + ], + [ + 0.894613166, + 0.3765378384, + -0.2405962167, + 8000.0 + ], + [ + 0.956140104, + 0.2694377303, + -0.1148886898, + 8000.0 + ], + [ + 0.9845220492, + 0.1117963671, + -0.1349737267, + 8000.0 + ], + [ + -0.9872926918, + 0.05066637614, + 0.15061892, + 8000.0 + ], + [ + -0.9629710484, + 0.2107304325, + 0.1681649333, + 8000.0 + ], + [ + -0.9089156, + 0.3704065174, + 0.1914978953, + 8000.0 + ], + [ + -0.8246628192, + 0.5260661652, + 0.2078115119, + 8000.0 + ], + [ + -0.7143233921, + 0.6634391927, + 0.2226893107, + 8000.0 + ], + [ + -0.5868388963, + 0.7754107475, + 0.2331486274, + 8000.0 + ], + [ + -0.447517209, + 0.8646691738, + 0.2282007178, + 8000.0 + ], + [ + -0.3052100428, + 0.9312358401, + 0.19911464, + 8000.0 + ], + [ + -0.156882597, + 0.9745527475, + 0.1601086914, + 8000.0 + ], + [ + 0.0012529542, + 0.992147907, + 0.1250638269, + 8000.0 + ], + [ + 0.103493427, + 0.9945772314, + -0.01025871795, + 8000.0 + ], + [ + 0.1833466381, + 0.9737792427, + 0.1346773801, + 8000.0 + ], + [ + 0.2771711523, + 0.9607764896, + 0.009202679436, + 8000.0 + ], + [ + 0.4256892524, + 0.9032464531, + 0.05417107545, + 8000.0 + ], + [ + 0.5595333971, + 0.8226806043, + 0.1005932442, + 8000.0 + ], + [ + 0.6865561464, + 0.7165393857, + 0.1233368017, + 8000.0 + ], + [ + 0.7933340115, + 0.5898145858, + 0.1507975484, + 8000.0 + ], + [ + 0.8870805306, + 0.431028964, + 0.165233666, + 8000.0 + ], + [ + 0.9515182668, + 0.2557980704, + 0.1708225252, + 8000.0 + ], + [ + 0.9834626085, + 0.08625805841, + 0.1592508873, + 8000.0 + ], + [ + -0.9859385825, + 0.07900435081, + -0.1472529258, + 8000.0 + ], + [ + -0.9621451618, + 0.2409599237, + -0.1273381437, + 8000.0 + ], + [ + -0.9131052483, + 0.3957468441, + -0.09809811843, + 8000.0 + ], + [ + -0.8384106194, + 0.5414064462, + -0.06282271332, + 8000.0 + ], + [ + -0.7256598187, + 0.6861416117, + -0.05125930337, + 8000.0 + ], + [ + -0.5902093395, + 0.8056551284, + -0.05072227971, + 8000.0 + ], + [ + -0.4530853873, + 0.8877269874, + -0.08157467544, + 8000.0 + ], + [ + -0.3071214675, + 0.9442886333, + -0.1183020761, + 8000.0 + ], + [ + -0.2348733933, + 0.9718218262, + 0.01992052207, + 8000.0 + ], + [ + -0.07369321841, + 0.9972231773, + -0.01073518634, + 8000.0 + ], + [ + 0.02545736524, + 0.9880834471, + -0.1517992892, + 8000.0 + ], + [ + 0.1990285953, + 0.9696963233, + -0.1416921266, + 8000.0 + ], + [ + 0.3651382256, + 0.9234293502, + -0.1181199028, + 8000.0 + ], + [ + 0.5105772936, + 0.8565718699, + -0.07480280104, + 8000.0 + ], + [ + 0.6408011166, + 0.7670788095, + -0.03104881642, + 8000.0 + ], + [ + 0.7651513262, + 0.6437562058, + -0.01101796353, + 8000.0 + ], + [ + 0.8577863249, + 0.5134139191, + 0.02467323426, + 8000.0 + ], + [ + 0.9007738794, + 0.4232833333, + -0.09714750669, + 8000.0 + ], + [ + 0.9384675954, + 0.3433556976, + 0.03722146364, + 8000.0 + ], + [ + 0.9837385072, + 0.1782771958, + 0.02181263184, + 8000.0 + ], + [ + 0.9998989022, + 0.01354134724, + 0.004337901547, + 8000.0 + ], + [ + -0.9887006469, + 0.1494578566, + 0.01154902032, + 8000.0 + ], + [ + -0.9499255232, + 0.3104793482, + 0.03527144325, + 8000.0 + ], + [ + -0.8837898775, + 0.4634960663, + 0.06392846706, + 8000.0 + ], + [ + -0.7843304257, + 0.6155660518, + 0.07683891774, + 8000.0 + ], + [ + -0.6610135002, + 0.745246834, + 0.08756888122, + 8000.0 + ], + [ + -0.5225877151, + 0.8481793297, + 0.08656734195, + 8000.0 + ], + [ + -0.3816685677, + 0.9224450057, + 0.05851765547, + 8000.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "mrtrix_version": "3.0.1-24-g62bb3c69", + "prior_pe_scheme": [ + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + 1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ], + [ + 0.0, + -1.0, + 0.0, + 0.027 + ] + ] +} diff --git a/tests/data/hifi/hifi_splenium_4vox_no_bvec.nii b/tests/data/hifi/hifi_splenium_4vox_no_bvec.nii new file mode 100644 index 00000000..047688bb Binary files /dev/null and b/tests/data/hifi/hifi_splenium_4vox_no_bvec.nii differ diff --git a/tests/data/hifi/hifi_splenium_4vox_no_json.bval b/tests/data/hifi/hifi_splenium_4vox_no_json.bval new file mode 100644 index 00000000..8f84e817 --- /dev/null +++ b/tests/data/hifi/hifi_splenium_4vox_no_json.bval @@ -0,0 +1 @@ +0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 0 0 0 0 0 0 0 0 0 0 0 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 0 0 0 0 0 0 0 0 0 diff --git a/tests/data/hifi/hifi_splenium_4vox_no_json.bvec b/tests/data/hifi/hifi_splenium_4vox_no_json.bvec new file mode 100644 index 00000000..e3fee315 --- /dev/null +++ b/tests/data/hifi/hifi_splenium_4vox_no_json.bvec @@ -0,0 +1,3 @@ +-0 -0.107124436001454 0.292553778318882 0.494975549316603 -0.331179674274064 -0.157720250015796 -0.834493821724479 -0.671508391113715 -0.306520502359992 -0.65361541138022 -0.658926395149459 -0.318114581098245 -0.398100641931373 -0.697536306225592 -0.981993401975305 -0.897844407618251 -0.05749490996072 -0.0173815402385974 0.602463273606934 0.254720773175283 -0.294508619265963 0.106322835260603 0.639320679066917 0.32864937320069 0.243418786119065 0.470326120054345 0.79658601973857 0.779037414572222 0.864894922448373 0.805427064571242 0.966718900520119 -0.107921247134797 0.291493465986041 0.49489597010419 -0.332251279533071 -0.157921198286174 -0.834809560953567 -0.672001119091198 -0.307981681628018 -0.654661432000005 -0.659022241992732 -0.317969611787417 -0.396691056302237 -0.696506342141238 -0.982081909648241 -0.897240098487686 -0.0578306855591161 -0.0169599340356157 0.602626565271525 0.254908947256818 -0.29386495145142 0.106555922032881 0.639915336542027 0.329030492757739 0.243830631262792 0.470170910384088 0.796578144002612 0.778897305158068 0.864851375031768 0.805132475654841 0.966691152381495 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0.167433636091709 0.179656737305558 -0.0319575747280528 -0.0143841733120731 -0.150743520908163 -0.303955935925382 -0.317375150906513 0.316161622678813 0.0576137924897586 -0.0998821108089945 0.251607742872031 0.119513427496056 0.139152141248287 0.00811342631813633 -0.126173972596276 -0.287117555819235 -0.42642109558518 -0.447990584600667 -0.454066554451056 0.419819730886576 0.228070993481824 0.0767817998845401 -0.0847183608456306 -0.238203829521202 -0.385201022273246 0.395789122696084 0.26501653858044 0.283168598062746 0.158380384065096 0.0260917598194689 -0.111815578492353 -0.263336143945509 -0.408986191103439 -0.536359861887816 -0.567851107798206 -0.580743324029991 0.560817010049981 0.517773141788814 0.364627307461488 0.220893774187588 0.0743969333776136 -0.0752947169215366 -0.223374605031268 -0.367907517642424 -0.523670700716794 0.530659897486596 0.399829799021347 0.418713802163608 0.298818137799082 0.170820203478567 0.0357410534599787 -0.110810641102434 -0.261271926536265 -0.401290971139577 -0.521219369657943 -0.639537363719768 -0.674358058105033 -0.694219036611602 0.683661103367533 0.651639794497528 0.593749263466993 0.450529094115072 0.302850168228056 0.150426680201142 -0.0258566033630011 -0.179890252905505 -0.33053890412517 -0.473467700323968 -0.508280833822366 0.651435723356128 0.643651110737854 0.52487130843158 0.570751260843916 0.45078985212529 0.322319854214945 0.18664160569201 0.0416419801901304 -0.111007808492149 -0.263077580381236 -0.395279705814662 -0.516162869593069 -0.628449064214919 -0.730450974482124 -0.769835697909747 -0.792670875813156 -0.792475068139004 0.76807947886133 0.722090352512831 0.652452979556596 0.517965885641621 0.373138590280993 0.219604663742949 0.0491690752636899 -0.122515270026359 -0.278090020481486 -0.426629344326822 -0.566765566094908 -0.612719282281588 -0.638859670224636 -0.75460985108015 0.756163035290835 0.724934354145726 0.672672324802485 0.571438775010477 0.454833352456424 0.327010861283958 0.18958723629555 0.0432919092236701 -0.105990822497774 -0.256825010403566 -0.395143768333053 -0.524355877800953 -0.642755355415142 -0.750352601195467 -0.830854105642591 -0.866113771869038 -0.878529206028974 0.866717663926795 0.832917810512381 0.776556768254895 0.698164180515984 0.571720712766676 0.434215778391318 0.283640997628457 0.119073208496367 -0.0496705726957847 -0.215229040282561 -0.368972054354225 -0.513423633175848 -0.645990885558272 -0.7013674090827 -0.734149833401637 -0.84011593641403 0.85008389880337 0.830703036059772 0.786545599808296 0.701593378182944 0.591924796586187 0.469357480540893 0.335662679850628 0.192903774440221 0.049878694004121 -0.100044979205718 -0.251374589587069 -0.382847962156195 -0.515830781414033 -0.636642969121791 -0.748883655194952 -0.842966725053158 -0.907161824274664 -0.935306732664578 0.938379400673389 0.917742518598187 0.874966158717709 0.811324189718348 0.727584841637569 0.612728450155558 0.485305379144235 0.344645353476748 0.186880589903409 0.0210919319949235 -0.14527066140956 -0.305357826611001 -0.454799737058373 -0.588906166308115 -0.709661471050083 -0.769970478726108 -0.810384328931198 -0.900250422440969 -0.918924969126702 0.911676269779964 0.876576010838229 0.807846251614615 0.711113249739593 0.595616028633419 0.46667809577296 0.329444512007713 0.192081721899303 0.0521971412333846 -0.0948025972446438 -0.243386010351146 -0.334538920333269 -0.474208640225734 -0.606529258656643 -0.724031197912207 -0.831758790319117 -0.913512992772813 -0.962950348032104 -0.980513517944312 0.97136650143098 0.937663900942668 0.879936395135582 0.797367286136809 0.673470535273132 0.547598639829381 0.413449092584784 0.263488097473679 0.179394780669564 0.0977298076025707 -0.072144551185754 -0.240042635406511 -0.400172362037935 -0.544035552986569 -0.67411461420622 -0.793777594098811 -0.858151754807062 -0.934272415068186 -0.962964161001181 0.966734135096639 0.943326347444415 0.889739329677937 0.806796588393981 0.69776634417946 0.571736235904738 0.435181120188989 0.297819130777425 0.155131597426621 0.0018551817998249 -0.0855682243697374 -0.180517923851594 -0.26085863018715 -0.41419612071205 -0.553471861514429 -0.68389843063013 -0.795026149357325 -0.89235381999681 -0.959879026189289 -0.993200892650552 0.997106344047171 0.974006171088818 0.924706558419229 0.849114763990332 0.738154943196382 0.605368356717236 0.473599153423011 0.333239277136907 0.247346470092292 0.0907097477937002 0.00677203225136 -0.167178906983263 -0.335579206811288 -0.485834332653544 -0.621376234493193 -0.749141689830632 -0.847129279238113 -0.878565109300628 -0.931451819798382 -0.977549311800925 -0.994478522987698 0.984341997050764 0.945930033291897 0.879663586263887 0.781898553431126 0.660273635754016 0.524418870524445 0.388454199926447 -0 -0 -0 -0 -0 -0 -0 -0 -0 +0 0.379257779214057 0.380028586538598 0.0311300404752942 0.632117908174625 0.885317264740848 0.49858841390496 0.439248509673855 0.0299784461876069 0.06622480965825 0.75181895288965 0.944963155933383 0.632772374168768 0.596824154113576 0.187270121088906 0.246887874344585 0.82674922058841 0.982177197127591 0.595554341723376 0.633620836609146 0.321193361084627 0.320274775262929 0.751995562848586 0.944363756483312 0.882894783782941 0.631379694270032 0.0666183459863263 0.437395077431438 0.498226275662756 0.246551046797496 0.186417114374406 0.377496038032817 0.377998480501619 0.0292535278510531 0.630638474884174 0.884645963044246 0.498258256122319 0.438706697508762 0.0294453871830644 0.0662522141216181 0.751658235914066 0.945074650557898 0.632900014499533 0.596468703643633 0.186971310627323 0.246856220507888 0.826415403987137 0.982016734157863 0.59546466163237 0.632904573244427 0.320717994722603 0.320225395458026 0.751438348848095 0.944236306751208 0.882719677010993 0.630840492959272 0.0663725464694736 0.437699704026877 0.498363109187612 0.246210892813304 0.18584935255013 0 0 0 0 0 0 0 0 0 0 0 0.167928288193019 0.0029604118401354 0.0715353993301404 0.239061260590483 0.328020048620526 0.257694817333406 0.0995898977869368 0.0645802802255113 0.0986602774836945 0.0361973576438834 0.0254684614576017 0.134645568806127 0.302766147626028 0.398265076194483 0.478910862480201 0.409637489588946 0.340420664336257 0.176576075193864 0.0114058020725989 0.162755676332985 0.19064086787296 0.248917478285229 0.197986367727544 0.140718414281233 0.0803647145712618 0.0823274969250801 0.192115650695801 0.362161023718856 0.462688808216714 0.548487119328465 0.618228644341628 0.544639106764373 0.50944388872733 0.399776511008387 0.237999381427001 0.0733767333842213 0.0987241211745738 0.265639468948484 0.307541202057346 0.348257082834974 0.398474551441859 0.354755024310063 0.303591846110307 0.244049598766782 0.0191439652175515 0.139286228787605 0.246896405488795 0.413631357191603 0.517479243519003 0.608571884097896 0.6834513248808 0.737349342615467 0.662251664321132 0.655554259399003 0.551556178925268 0.432776754768013 0.280991922554223 0.122362871802692 0.0423514305447128 0.206488143038679 0.368030425037424 0.421615439614268 0.469139881637708 0.515913850205523 0.513425620518419 0.466727292603339 0.408663234707862 0.342635534016983 0.18162280741493 0.0600399484283135 0.22673683517266 0.297093319038815 0.414162790615952 0.539768517992339 0.643477016785925 0.729103345262706 0.794241958332362 0.834129481085845 0.766885459903341 0.773819799930531 0.679521904419892 0.573445374357227 0.45461601354854 0.310927188685883 0.161310011605193 0.00463254206408693 0.153354646855444 0.308798736690098 0.461139887305438 0.524195338145866 0.575954968004512 0.622932500284083 0.633182842629397 0.615183379788991 0.565588995924314 0.50267476395021 0.424963042782632 0.267524264320895 0.104247530832477 0.0251304270895389 0.134944429995088 0.296253055263495 0.436697428834918 0.55785655734783 0.665797191288765 0.756957744666237 0.830393624941839 0.882294751246035 0.91017657879408 0.855608825508986 0.851941546626368 0.764754591415583 0.660310406694139 0.539634171072302 0.382153211609403 0.227664171604027 0.0673971399691882 0.0908858417629177 0.247200344810918 0.39643258769535 0.540104582666383 0.612909079303664 0.667334958360142 0.71486396784627 0.736307019584135 0.732782185716544 0.702782612294701 0.64919742589495 0.578471121411532 0.495793786257999 0.347550671044417 0.186849915419866 0.0977117674765231 0.0624642109429796 0.223808001629232 0.382426409550607 0.534258239140307 0.655019662674649 0.757921819852695 0.841939315411948 0.906226395883584 0.947119358761004 0.962654475775129 0.920453799336134 0.905540199546341 0.82890875124907 0.733123308151609 0.615981249209934 0.468035602298133 0.303387513176571 0.141192249296391 0.0195199381669131 0.176593644540127 0.326748545265499 0.469588858365502 0.600855103180556 0.681650038384194 0.742432846040428 0.790104012606158 0.819665194238945 0.827562269884572 0.811515441546546 0.770905339268484 0.711078059985128 0.638555128158869 0.550269417426094 0.416163858067192 0.256584865362134 0.173604345716626 0.0118276849053527 0.150377601386909 0.311386020696751 0.473437854126533 0.617869583387912 0.734419762229036 0.831182328499966 0.906222689017614 0.958215780379309 0.98678952976733 0.99089456500804 0.960147070796914 0.942371210124114 0.879162069772608 0.791347175108519 0.682724763373749 0.541735788330845 0.379938868125404 0.207902709898412 0.0420556198188551 0.120010489508093 0.277329907735662 0.428521121620715 0.571193475223454 0.70425641895082 0.785417952741133 0.841857822613764 0.879684446343327 0.943739165730559 0.899279350885811 0.895892973807508 0.866791430966747 0.815242864758753 0.747945178518228 0.659697706809126 0.520690443345492 0.334999493706992 0.248533473459681 0.0896794648937834 0.0732547641572388 0.23411160792235 0.395476197197533 0.551791395321912 0.689816977095479 0.80206366645187 0.889495670365764 0.950789689648239 0.987583749948049 0.999572769050548 0.98113581402264 0.982903501600488 0.950734914502896 0.900815357807083 0.828358579058253 0.726985360532619 0.606000413592186 0.451331450124525 0.279051024155475 0.109751190101701 0.0553877049018462 0.218478255175028 0.375921574697323 0.525275776054447 0.670065333852344 0.788236176762092 0.864578484874424 0.914810177747132 0.963298866460808 0.983676830637946 0.952924698778989 0.93631319898352 0.894227741095038 0.834837713149542 0.753149338709885 0.634381938473254 0.511089993812499 0.40327607841238 0.344992170353783 0.17950977609742 0.014047835370413 0.149453678575656 0.312207598421112 0.467812056255361 0.62005637622142 0.749842759864831 0.851393422431793 0.920454215835452 0 0 0 0 0 0 0 0 0 +0 -0.91906903555249 -0.877491059944128 -0.868349080799967 -0.700533349324232 -0.437421608486221 -0.234584004088739 -0.596772341306253 -0.951391861637602 -0.75392384802178 0.0241716315873972 -0.076470564041132 0.664164890189053 0.396540074373992 -0.0248769000306931 0.364584417145145 0.559624929406177 0.187151904788865 0.531369015005129 0.730508017170567 0.900055274904537 0.941339217831496 0.160535798860295 -0.0129106514693161 -0.401552107975757 -0.616565505381362 -0.600843331531709 -0.44920624758946 -0.0610520372809271 0.538980356843232 0.175223362709891 -0.919700900113954 -0.878719925802386 -0.868459676595755 -0.701358824872065 -0.438705385423489 -0.23416171149956 -0.596616233014068 -0.950936513617504 -0.753013315624885 0.0264495936193729 -0.0756916831710072 0.664886289086857 0.398878428808692 -0.02359770490839 0.366090442534124 0.560083200792729 0.188030567750061 0.531284349126007 0.731063081888559 0.900435093805821 0.941329661457988 0.16077552657072 -0.0125192601158792 -0.401687185668277 -0.617235439233315 -0.600880974555797 -0.449152487614092 -0.0605500662636889 0.539575660068271 0.175977936131446 0 0 0 0 0 0 0 0 0 0 0 0.97147623104106 -0.983724907062845 0.996925975173927 0.970897939660362 0.932565943327548 0.917171832390404 0.94305613083502 -0.94650473622067 -0.993451961912741 -0.994340643458945 0.96749413494112 0.983660058915596 0.942851707060397 0.917234485454764 0.868748821195983 0.865887196009335 0.838020775711205 0.876427592988548 0.890894759160692 -0.892895281337299 -0.95479824123517 -0.96547638195297 -0.976536838767196 -0.960966837886296 -0.919326756377414 0.914643730418693 0.944911536051819 0.88806246290493 0.872258402501558 0.835751817249731 0.778004254263722 0.796255184466852 0.75709789314981 0.743301311584661 0.787972977802011 0.810773116577401 -0.822032742076401 -0.813232221539934 -0.878900071539237 -0.911001067379417 -0.914157058852638 -0.931922517311958 -0.926248226380427 -0.897264649807067 -0.851705645081376 0.836061851539958 0.882710766213638 0.808447804286143 0.801824764559484 0.774894005610198 0.729120609746515 0.666360974912205 0.702253311454172 0.639698498873341 0.651242005938383 0.635370947470352 0.682850458740739 0.709286442015812 -0.728569730347213 -0.729882336460013 -0.715552526579764 -0.78693326052588 -0.829571905912656 -0.843329540011107 -0.857744465616797 -0.865912888918622 -0.850728154841237 -0.811436521008894 -0.841821685288455 0.756324469332393 0.730960775464377 0.7976500920961 0.70902198916265 0.710941949946524 0.694296219552291 0.658462772560026 0.606172959746279 0.540282588270721 0.58538609319323 0.494931178349684 0.521369229514593 0.525558917966945 0.509672104486906 0.55738432129562 0.587921731822697 0.60988671568086 -0.621720408492739 -0.619054814245057 -0.601377679867909 -0.675966410989983 -0.727353742881393 -0.750818814232113 -0.772438923082178 -0.778806405886589 -0.776385875844176 -0.75186799658627 -0.705820944184717 -0.74364363047034 -0.762227508113841 -0.655692332040698 0.640318252766773 0.621855537388195 0.597333490728029 0.601875226221753 0.591473348089542 0.565755131943632 0.523930441505397 0.468702232341215 0.400430444667208 0.449415678212296 0.34359424252097 0.37443467838619 0.388401493164187 0.381793052958947 0.404524879407125 0.44498984169703 0.472910202499617 -0.490449033902391 -0.495116057610507 -0.489694587467412 -0.469950866386408 -0.545415334467593 -0.605079094897083 -0.639153574601204 -0.666088240304235 -0.678647996073074 -0.678065675347729 -0.665133313935025 -0.633851192734092 -0.580417347585194 -0.622328119644437 -0.652771883045379 -0.53353315156179 0.52292981105763 0.509747431798423 0.484867054718182 0.471523982004838 0.469653358027216 0.4530541584652 0.422455624320061 0.376220484764075 0.316981128977744 0.251569796244618 0.29929186271401 0.182823370756525 0.216399831374262 0.239198547156923 0.244418435376369 0.265235321039913 0.291570645810749 0.324447321695955 -0.345055173140205 -0.355757437370661 -0.357308842990776 -0.348194433072706 -0.331049004262106 -0.399896325916625 -0.461813986341144 -0.506907515806095 -0.54150218320928 -0.560977557416148 -0.565985090907414 -0.558982607600581 -0.536213755597077 -0.495415861206878 -0.43998200510134 -0.483686990787462 -0.526727108048242 -0.399262705661962 -0.394255002421204 0.38240417910786 0.366951282005216 0.351057021144198 0.335492360441849 0.325375412721591 0.302237475769876 0.265003304531992 0.211960209337646 0.153368452876475 0.09560558903486 0.137407614324494 0.00449588998534156 0.0469065092300759 0.0767587574462008 0.0983144032181155 0.121242114618932 0.14539762201855 0.171764636576789 0.191897279499905 -0.205047804999931 -0.209462481559225 -0.205137975412291 -0.194790720803189 -0.224633778360866 -0.288538332328319 -0.346893721953502 -0.395890511869559 -0.277801907195613 -0.426316236934011 -0.438373063908279 -0.437095125049625 -0.418618146061485 -0.380267441486103 -0.332217432770241 -0.314322435354915 -0.389038436347184 -0.255668079828189 -0.254278623090244 0.245069075123809 0.235217255496314 0.227952851779751 0.211200191812938 0.193066483505053 0.172660219850669 0.139337163410114 0.0854560201310879 0.0247492278969808 -0.0291691228988581 -0.173351069699069 -0.036248939796438 -0.16749894729897 -0.130281482905269 -0.0865503492350303 -0.0614428370555946 -0.0263992536395022 0.00214056578655217 0.027618489999061 0.038815759345062 -0.052068616961396 -0.0598266724981131 -0.0600062531839142 -0.055583061111579 -0.078356417529529 -0.110511910390595 -0.16795203298997 -0.228197114030911 -0.104283352298941 -0.155407961607421 -0.303131420535323 -0.308818403561359 -0.29621502840768 -0.258864818014424 -0.216003816699498 -0.190647015997106 -0.14546134360088 -0.255913566297054 -0.115662914690123 -0.110333962501028 -0.103995796709698 0.0934581764888281 0.0879931110879873 0.0856962949675841 0.0645348164660964 0.0421255432993888 0.0106812206143581 -0.0432130908752722 0 0 0 0 0 0 0 0 0 diff --git a/tests/data/hifi/hifi_splenium_4vox_no_json.nii b/tests/data/hifi/hifi_splenium_4vox_no_json.nii new file mode 100644 index 00000000..047688bb Binary files /dev/null and b/tests/data/hifi/hifi_splenium_4vox_no_json.nii differ diff --git a/tests/data/hifi/hifi_splenium_4vox_no_sidecar.nii b/tests/data/hifi/hifi_splenium_4vox_no_sidecar.nii new file mode 100644 index 00000000..047688bb Binary files /dev/null and b/tests/data/hifi/hifi_splenium_4vox_no_sidecar.nii differ diff --git a/tests/data/hifi/hifi_splenium_mrgrid.mif b/tests/data/hifi/hifi_splenium_mrgrid.mif new file mode 100644 index 00000000..8f862967 --- /dev/null +++ b/tests/data/hifi/hifi_splenium_mrgrid.mif @@ -0,0 +1,1101 @@ +mrtrix image +dim: 1,1,1,337 +vox: 222,222,126,3.9 +layout: +1,+2,+3,+0 +datatype: Float32LE +transform: 0.994345310289832, 2.73896740248844e-08, -0.106195121171422, -2.84486473639056 +transform: -0.0163522207646128, 0.988073569252652, -0.153111814252808, 14.990506163459 +transform: 0.104928588957842, 0.153982537140822, 0.982486319790561, -3.95726479753769 +AcquisitionMatrixPE: 74 +AcquisitionNumber: 1 +AcquisitionTime: variable +BandwidthPerPixelPhaseEncode: 36.5229988 +BaseResolution: 74 +BodyPartExamined: BRAIN +ConsistencyInfo: N4_VE11C_LATEST_20160120 +ConversionSoftware: dcm2niix +ConversionSoftwareVersion: v1.0.20190902 +DerivedVendorReportedEchoSpacing: 0.000739999989 +DeviceSerialNumber: 167021 +DiffusionScheme: Monopolar +DwellTime: 4.39999985e-06 +EchoTime: 0.0989999995 +EchoTrainLength: 37 +EffectiveEchoSpacing: 0.000369999994 +FlipAngle: 90 +ImageOrientationPatientDICOM: 0.994345,-0.0163522,-0.104929,2.73897e-08,0.988074,-0.153983 +ImageType: variable +ImagingFrequency: 123.230003 +InPlanePhaseEncodingDirectionDICOM: COL +InstitutionAddress: Bee_Street_30_Charleston_South_Carolina_US_29425 +InstitutionName: Medical_University_of_South_Carolina +InstitutionalDepartmentName: Department +MRAcquisitionType: 2D +MagneticFieldStrength: 3 +Manufacturer: Siemens +ManufacturersModelName: Prisma_fit +Modality: MR +ParallelReductionFactorInPlane: 2 +PartialFourier: 1 +PatientPosition: HFS +PercentPhaseFOV: 100 +PhaseEncodingSteps: 74 +PhaseResolution: 1 +PixelBandwidth: 1535 +ProcedureStepDescription: Research_HELPERN +ProtocolName: variable +PulseSequenceDetails: %SiemensSeq%_ep2d_diff +ReceiveCoilActiveElements: HEA;HEP +ReceiveCoilName: Head_32 +ReconMatrixPE: 74 +RefLinesPE: 24 +RepetitionTime: 3.9000001 +SAR: variable +ScanOptions: FS +ScanningSequence: EP +SequenceName: _ep_b0 +SequenceVariant: SK_SP +SeriesDescription: variable +SeriesNumber: variable +ShimSetting: 3695,-10046,2626,292,83,-279,-134,102 +SliceThickness: 3 +SoftwareVersions: syngo_MR_E11 +SpacingBetweenSlices: 3 +StationName: MRC35104 +TxRefAmp: 222.089005 +command_history: variable +command_history: mrcat -axis 3 /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi0.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi1.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi2.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif (version=3.0.1-24-g62bb3c69) +command_history: dwidenoise -noise /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/noisemap.nii -extent '5,5,5' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/1_dwi_denoised.mif (version=3.0.1-24-g62bb3c69) +command_history: mrdegibbs /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/2_dwi_degibbs.mif (version=3.0.1-24-g62bb3c69) +command_history: /usr/local/mrtrix3/bin/dwifslpreproc -se_epi /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/B0_EPI.mif -eddy_options '--repol --data_is_shelled' -rpe_header -eddyqc_all /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/metrics_qc/eddy /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/3_dwi_undistorted.mif (version=3.0.1-24-g62bb3c69) +command_history: mrconvert -force -quiet -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.json -strides '1,2,3,4' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/4_dwi_smoothed.mif (version=3.0.1-24-g62bb3c69) +command_history: mrconvert -force -quiet -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.json -strides '1,2,3,4' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/5_dwi_rician.mif (version=3.0.1-24-g62bb3c69) +command_history: mrconvert -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.json /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif (version=3.0.1-24-g62bb3c69) +command_history: mrgrid /Users/siddhiman/Datasets/IAM_HiFI/out/pydesigner/working.mif regrid -size '1,1,1' /Users/siddhiman/Repos/PyDesigner/tests/data/hifi_splenium_mrgrid.mif (version=3.0.4) +command_history: mrconvert -import_pe_table tests/data/pe_scheme tests/data/hifi/hifi_splenium_mrgrid.mif tests/data/hifi/hifi_splenium_mrgrid_pe.mif (version=3.0.3) +comments: TE=99;Time=104142.333;phase=1;mb=2 +comments: TE=99;Time=104634.188;phase=0;mb=2 +comments: TE=99;Time=102301.625;phase=1;mb=2 +comments: TE=99;Time=104142 +comments: TE=99;Time=104142 +comments: TE=99;Time=104142 +dw_scheme: 0,0,0,0 +dw_scheme: 0.2041193387,0.5137031909,-0.833333263,1000 +dw_scheme: -0.1977141975,0.5146343525,-0.8343024508,1000 +dw_scheme: -0.3999621792,0.1718072214,-0.900284696,1000 +dw_scheme: 0.4037001972,0.7264234052,-0.5561790963,1000 +dw_scheme: 0.2032804557,0.9391539284,-0.2768879831,1000 +dw_scheme: 0.8546867084,0.5149137883,-0.06613940621,1000 +dw_scheme: 0.7310855427,0.5144020839,-0.4482236331,999.9999999 +dw_scheme: 0.4058203992,0.1702779517,-0.8979505681,1000 +dw_scheme: 0.7299824555,0.1701815673,-0.6619394601,1000 +dw_scheme: 0.6526334818,0.7283765637,0.2086555051,999.9999999 +dw_scheme: 0.3244365682,0.9401997848,0.1037558568,999.9999999 +dw_scheme: 0.3253184522,0.5170243383,0.791740954,1000 +dw_scheme: 0.6514813496,0.5175849347,0.554687197,1000 +dw_scheme: 0.9790823445,0.1727878311,0.1074342964,999.9999999 +dw_scheme: 0.8540502963,0.1734394521,0.4904251705,1000 +dw_scheme: -0.002259620983,0.7302636963,0.6831616412,1000 +dw_scheme: -0.002591339745,0.9415239344,0.3369361451,1000 +dw_scheme: -0.6554853118,0.5169442435,0.5505521367,1000 +dw_scheme: -0.3308567768,0.5183798452,0.7885531874,1000 +dw_scheme: 0.1972617938,0.1747377061,0.9646525378,999.9999999 +dw_scheme: -0.2056872366,0.1740635009,0.963013322,1000 +dw_scheme: -0.6527536174,0.7289013255,0.2064353957,999.9999999 +dw_scheme: -0.3254198893,0.9404517877,0.09824627548,1000 +dw_scheme: -0.1993994297,0.9378278089,-0.2841106622,1000 +dw_scheme: -0.402190306,0.7259439266,-0.5578963821,1000 +dw_scheme: -0.7282749406,0.170845989,-0.6636469384,999.9999999 +dw_scheme: -0.7269286759,0.5136962899,-0.455731085,999.9999999 +dw_scheme: -0.8535207681,0.5157749553,-0.07401684809,999.9999999 +dw_scheme: -0.8581097023,0.1742568347,0.4829930584,1000 +dw_scheme: -0.9798602664,0.1731730579,0.09942308757,1000 +dw_scheme: 0.204978745,0.5120461773,-0.8341417304,2000 +dw_scheme: -0.1965293814,0.5127992738,-0.8357111385,2000 +dw_scheme: -0.3998713053,0.1699687211,-0.9006739549,2000 +dw_scheme: 0.4048534043,0.7250704832,-0.5571054796,2000 +dw_scheme: 0.2036165985,0.9386839084,-0.2782315599,2000 +dw_scheme: 0.8549558168,0.5145177471,-0.06574221798,2000 +dw_scheme: 0.7315589065,0.5138347744,-0.4481019872,2000 +dw_scheme: 0.4072249602,0.1696576375,-0.8974319572,2000 +dw_scheme: 0.7309258671,0.1700521269,-0.6609308972,2000 +dw_scheme: 0.6524868782,0.7278674133,0.2108788811,2000 +dw_scheme: 0.3242097053,0.9401930644,0.1045230534,2000 +dw_scheme: 0.3238402283,0.5170630515,0.7923214671,2000 +dw_scheme: 0.6502088878,0.516892536,0.5568217924,2000 +dw_scheme: 0.9790345074,0.1722952772,0.1086543635,2000 +dw_scheme: 0.8532894718,0.1731874673,0.4918365364,2000 +dw_scheme: -0.001974410286,0.7298582035,0.6835957171,2000 +dw_scheme: -0.00310387162,0.9412377457,0.3377304724,2000 +dw_scheme: -0.655638689,0.5168712665,0.5504380105,2000 +dw_scheme: -0.331102832,0.5175902144,0.788968494,2000 +dw_scheme: 0.1965814308,0.1742203798,0.9648849674,2000 +dw_scheme: -0.2059179905,0.1740199847,0.9629718719,2000 +dw_scheme: -0.6533703702,0.7283237759,0.2065227271,2000 +dw_scheme: -0.3258404176,0.9402721635,0.09857119676,2000 +dw_scheme: -0.1997946014,0.9376822071,-0.2843135519,2000 +dw_scheme: -0.4019648303,0.7255111928,-0.5586213246,2000 +dw_scheme: -0.7282631119,0.1706087558,-0.6637209446,2000 +dw_scheme: -0.7267950678,0.513986761,-0.4556166579,2000 +dw_scheme: -0.8535307738,0.5158325871,-0.07349802909,2000 +dw_scheme: -0.8578799975,0.1738247724,0.4835564687,2000 +dw_scheme: -0.9799128072,0.1724960796,0.1000799318,2000 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0.06332081897,0.01444310468,0.9978887065,8000 +dw_scheme: -0.07417404809,0.1564827949,-0.98489154,8000.000001 +dw_scheme: -0.07409180858,-0.08248148301,0.9938345983,7999.999999 +dw_scheme: -0.08880178295,0.08731895646,0.9922145147,8000 +dw_scheme: 0.05085716826,0.1788560869,0.9825599466,8000 +dw_scheme: 0.2048379922,0.1092212416,0.972682948,8000 +dw_scheme: 0.2154325352,-0.05118067635,0.9751765795,8000 +dw_scheme: -0.2138596396,0.2139010684,-0.9531581125,7999.999999 +dw_scheme: 0.0482117501,0.2505349565,-0.9669063361,8000.000001 +dw_scheme: 0.2049114349,0.1863776562,-0.9608718297,8000 +dw_scheme: -0.3529281357,-0.1188557216,0.9280706053,8000 +dw_scheme: -0.223297512,-0.01561593684,0.9746252427,8000 +dw_scheme: -0.2384915225,0.1570689408,0.9583585663,8000.000001 +dw_scheme: -0.1054733643,0.2532084332,0.9616448714,7999.999999 +dw_scheme: 0.03320362423,0.3381202338,0.9405169998,7999.999999 +dw_scheme: 0.1935410102,0.2674794086,0.9439261853,8000 +dw_scheme: 0.3350161077,0.2010768489,0.9205065499,8000 +dw_scheme: 0.3523850069,0.03295309449,0.9352747727,8000 +dw_scheme: 0.3568902721,-0.1325617364,0.9246927705,8000.000001 +dw_scheme: -0.3226246533,0.3043923819,-0.8962469587,8000 +dw_scheme: -0.1253864024,0.3382875593,-0.932652013,8000 +dw_scheme: 0.02618126578,0.3950301729,-0.9182949982,7999.999999 +dw_scheme: 0.1879427584,0.343759089,-0.9200582635,8000 +dw_scheme: 0.3389068547,0.2822803585,-0.8974742019,8000 +dw_scheme: 0.4806508488,0.2138671441,-0.8504325994,7999.999999 +dw_scheme: -0.4906817579,-0.05222510449,0.8697723558,8000 +dw_scheme: -0.3638629425,0.04948088767,0.9301373021,7999.999999 +dw_scheme: -0.3758752589,0.2264993174,0.8985632137,8000 +dw_scheme: -0.2501143667,0.3262073881,0.9116093152,8000 +dw_scheme: -0.11469697,0.4144088082,0.902834395,8000 +dw_scheme: 0.02856305646,0.4899053085,0.8713076038,7999.999999 +dw_scheme: 0.1772886584,0.4119213007,0.8938062282,8000.000001 +dw_scheme: 0.3262734121,0.3807595781,0.8651981301,8000.000001 +dw_scheme: 0.454391951,0.272429718,0.8481214557,8000 +dw_scheme: 0.4809612063,0.1052273006,0.8704042355,7999.999999 +dw_scheme: 0.4913592531,-0.06113377373,0.8688088087,8000 +dw_scheme: -0.4703498943,0.2325802215,-0.8512798702,7999.999999 +dw_scheme: -0.4284839936,0.3954535384,-0.8124148978,8000 +dw_scheme: -0.269230545,0.4444057824,-0.8544111506,8000 +dw_scheme: -0.12290081,0.4872007472,-0.8645986484,8000 +dw_scheme: 0.02310278889,0.5349069715,-0.8445950468,8000.000001 +dw_scheme: 0.1738345832,0.4919811729,-0.8530744769,8000 +dw_scheme: 0.3204745421,0.4381379528,-0.8398399861,8000.000001 +dw_scheme: 0.4611122499,0.3725046699,-0.8053668505,8000 +dw_scheme: 0.6111564904,0.1407586621,-0.7788932811,8000 +dw_scheme: -0.6164448666,0.0182915636,0.7871855849,7999.999999 +dw_scheme: -0.491308456,0.1153364724,0.8633154112,8000 +dw_scheme: -0.5021993072,0.2917622033,0.8140458664,8000 +dw_scheme: -0.3822782783,0.3934250602,0.8361100645,8000 +dw_scheme: -0.2521442149,0.4854616575,0.8371082809,8000 +dw_scheme: -0.1129679822,0.5642476573,0.8178403366,8000 +dw_scheme: 0.03941977651,0.6247156598,0.77985667,8000.000001 +dw_scheme: 0.185218657,0.5425577119,0.8193443588,8000 +dw_scheme: 0.3310889531,0.5432284415,0.7715458285,8000 +dw_scheme: 0.4491133268,0.436742144,0.7794571954,8000.000001 +dw_scheme: 0.5684476951,0.319874619,0.7579890804,8000 +dw_scheme: 0.5980293927,0.1620609684,0.7849185232,8000.000001 +dw_scheme: 0.6149706868,0.0009513636549,0.7885493956,8000 +dw_scheme: -0.6024246598,0.1645783385,-0.7810240071,7999.999999 +dw_scheme: -0.5704450247,0.3264348418,-0.7536794862,8000.000001 +dw_scheme: -0.5144035982,0.482909799,-0.7086515816,7999.999999 +dw_scheme: -0.3644130073,0.5444430013,-0.7555031294,8000.000001 +dw_scheme: -0.2130411425,0.5955142482,-0.7745813397,8000 +dw_scheme: -0.06001856711,0.641344364,-0.7649020711,8000 +dw_scheme: 0.1167986839,0.6382102822,-0.7609505261,8000 +dw_scheme: 0.2708287664,0.5908007885,-0.7600040839,8000 +dw_scheme: 0.419013,0.5286408254,-0.7382187911,8000 +dw_scheme: 0.5569609966,0.455047383,-0.6947850945,8000 +dw_scheme: 0.5948040245,0.3000380191,-0.7457783582,8000 +dw_scheme: -0.7280700238,-0.04582590336,0.6839693173,8000 +dw_scheme: -0.7176359257,0.1226390699,0.6855350733,8000 +dw_scheme: -0.6066098645,0.1800032163,0.7743534816,8000 +dw_scheme: -0.6428185047,0.3099967155,0.7004901187,8000 +dw_scheme: -0.5237393276,0.4318488107,0.734304924,8000 +dw_scheme: -0.3942280895,0.5347683254,0.7474001951,8000 +dw_scheme: -0.2555117198,0.6226413207,0.7396158102,7999.999999 +dw_scheme: -0.1057790974,0.6926381847,0.7134865995,8000 +dw_scheme: 0.05300474118,0.7396424228,0.6709095198,8000 +dw_scheme: 0.1994248317,0.6638078249,0.7208251578,8000 +dw_scheme: 0.340485266,0.6823473806,0.6468939911,7999.999999 +dw_scheme: 0.4578772784,0.5831494363,0.6710328851,8000 +dw_scheme: 0.5690836021,0.4758604012,0.6705972952,8000 +dw_scheme: 0.6721958221,0.3592127516,0.6473939881,8000 +dw_scheme: 0.7062910286,0.2092882899,0.6762776018,8000.000001 +dw_scheme: 0.7257541526,0.05640646761,0.6856378201,8000 +dw_scheme: 0.7232268738,-0.1017622955,0.6830719759,8000 +dw_scheme: -0.6977125493,0.2592782172,-0.667811354,7999.999999 +dw_scheme: -0.6522665461,0.4117082555,-0.6364311944,8000 +dw_scheme: -0.5849001722,0.5583872161,-0.5882988233,8000 +dw_scheme: -0.4432526,0.6299118936,-0.6377602519,8000 +dw_scheme: -0.2937871727,0.6865539754,-0.6650809996,8000 +dw_scheme: -0.1386295555,0.7340533923,-0.6647912933,8000 +dw_scheme: 0.03313822298,0.7447047783,-0.666570815,8000 +dw_scheme: 0.2045279417,0.7250875013,-0.6575837867,8000 +dw_scheme: 0.3589659154,0.673169997,-0.6465180792,8000 +dw_scheme: 0.5040616146,0.6048231825,-0.6165312698,8000 +dw_scheme: 0.6385154351,0.5186963987,-0.5685526229,7999.999999 +dw_scheme: 0.6882258778,0.3681749577,-0.625133859,8000 +dw_scheme: 0.7161919627,0.2092634907,-0.6657911565,8000 +dw_scheme: 0.8199740941,0.1128854052,-0.5611589528,8000 +dw_scheme: -0.819885839,0.0476596813,0.5705398897,8000 +dw_scheme: -0.7868730917,0.2093606719,0.5805160175,8000 +dw_scheme: -0.7323024624,0.3510300601,0.5835332043,8000 +dw_scheme: -0.6321236638,0.4683934059,0.617274081,8000.000001 +dw_scheme: -0.5150729771,0.5747325861,0.6359105933,7999.999999 +dw_scheme: -0.3852421309,0.6666535005,0.6380921648,7999.999999 +dw_scheme: -0.2441540138,0.7433702255,0.6227274889,8000 +dw_scheme: -0.09282097362,0.8007161943,0.5918089583,8000.000001 +dw_scheme: 0.06286774212,0.8362776041,0.5446902018,8000 +dw_scheme: 0.2076470152,0.7723939575,0.6002418609,8000.000001 +dw_scheme: 0.3564213436,0.7827111091,0.5102226431,8000 +dw_scheme: 0.4816276925,0.6897290431,0.540655725,8000 +dw_scheme: 0.5978744474,0.582455926,0.5507188388,8000 +dw_scheme: 0.705565045,0.4624713035,0.5369341307,8000 +dw_scheme: 0.7831973251,0.3020716403,0.5434654305,8000.000001 +dw_scheme: 0.8139604231,0.1426528656,0.5631328348,8000.000001 +dw_scheme: 0.8233406414,-0.02018070931,0.5671886169,8000 +dw_scheme: -0.8097333473,0.1790681973,-0.558808095,8000 +dw_scheme: -0.7756290022,0.3336803,-0.535777107,8000 +dw_scheme: -0.7201623938,0.4793810155,-0.5015575425,7999.999999 +dw_scheme: -0.6443097748,0.6170346265,-0.4518110045,8000 +dw_scheme: -0.5105673453,0.6984576953,-0.5014756562,8000 +dw_scheme: -0.3675039569,0.7591211833,-0.5372856509,7999.999999 +dw_scheme: -0.214162085,0.8088383146,-0.5476451243,8000 +dw_scheme: -0.04766454497,0.8314585939,-0.5535383435,8000 +dw_scheme: 0.1214588272,0.8271395101,-0.5487148478,8000.000001 +dw_scheme: 0.2860192726,0.7947013157,-0.5353903198,8000 +dw_scheme: 0.4375195625,0.7372610723,-0.5148035972,8000 +dw_scheme: 0.5778323019,0.6602265138,-0.4798028567,8000 +dw_scheme: 0.7039755117,0.5681861023,-0.4261256061,8000.000001 +dw_scheme: 0.7634896137,0.4272225035,-0.4843186371,8000 +dw_scheme: 0.7993196384,0.2725635687,-0.535534515,8000.000001 +dw_scheme: 0.892023962,0.1644988813,-0.4209909372,7999.999999 +dw_scheme: -0.9008095313,-0.00444673563,0.4341916798,8000 +dw_scheme: -0.8801383526,0.1566742573,0.4481179056,7999.999999 +dw_scheme: -0.833588434,0.3164883212,0.4527311181,8000 +dw_scheme: -0.7476996175,0.4671631635,0.471915099,8000 +dw_scheme: -0.6384525233,0.584977424,0.5001797566,8000 +dw_scheme: -0.5148155306,0.6871896114,0.512577221,8000 +dw_scheme: -0.3786273152,0.7727038682,0.5094802138,8000 +dw_scheme: -0.2317657191,0.8409689541,0.4889334,8000 +dw_scheme: -0.08325846942,0.8881056773,0.4520357654,8000 +dw_scheme: 0.07276379679,0.9110191785,0.405893442,8000 +dw_scheme: 0.2181698334,0.8595404182,0.4621603546,8000.000001 +dw_scheme: 0.3612681501,0.8604875047,0.359230536,8000 +dw_scheme: 0.4899333344,0.7774544789,0.3943727438,8000 +dw_scheme: 0.6076412517,0.677345114,0.4146995368,8000 +dw_scheme: 0.7186929217,0.5589655307,0.4135674307,8000 +dw_scheme: 0.8100333253,0.4080585691,0.4211106935,8000.000001 +dw_scheme: 0.8710687337,0.2402921623,0.4283677602,8000.000001 +dw_scheme: 0.8955631444,0.07453726985,0.4386466115,8000 +dw_scheme: -0.8964299798,0.08746374523,-0.4344690837,8000.000001 +dw_scheme: -0.8747732604,0.2439653071,-0.4186319049,8000 +dw_scheme: -0.8320740318,0.3918674458,-0.3925464438,8000 +dw_scheme: -0.7697598404,0.5305679724,-0.3549188847,8000 +dw_scheme: -0.6883147697,0.6562741874,-0.3090743742,8000 +dw_scheme: -0.5667966036,0.7447687085,-0.3522231976,8000 +dw_scheme: -0.4335187154,0.8122232692,-0.3903266379,7999.999999 +dw_scheme: -0.2888653644,0.8639301371,-0.4125306285,8000 +dw_scheme: -0.1283189259,0.8958558073,-0.4254134762,8000 +dw_scheme: 0.03860043854,0.9039295961,-0.4259357833,8000 +dw_scheme: 0.2045540783,0.8861204638,-0.4158703557,8000.000001 +dw_scheme: 0.3629923696,0.8423047515,-0.398446038,8000 +dw_scheme: 0.5091712898,0.7772611108,-0.36960758,7999.999999 +dw_scheme: 0.6381868495,0.6971635412,-0.3266198737,8000 +dw_scheme: 0.752372513,0.5994685683,-0.2730806426,8000 +dw_scheme: 0.8169817446,0.472667973,-0.3303419686,7999.999999 +dw_scheme: 0.8617377132,0.3209212823,-0.3929601052,8000.000001 +dw_scheme: 0.9375595419,0.2179446082,-0.2710761023,8000.000001 +dw_scheme: 0.9555966918,0.05702525674,-0.2891073895,8000 +dw_scheme: -0.9471304776,0.1049414681,0.3032014953,8000.000001 +dw_scheme: -0.9105876731,0.2658216855,0.3164947411,8000 +dw_scheme: -0.840558662,0.4272505338,0.3330437166,8000 +dw_scheme: -0.7427197603,0.570761042,0.3501416721,8000 +dw_scheme: -0.6268012665,0.6855815813,0.3702675622,7999.999999 +dw_scheme: -0.496135299,0.7826243854,0.3759638766,8000 +dw_scheme: -0.3557236392,0.8602266998,0.3653364442,8000 +dw_scheme: -0.2135046737,0.9174750369,0.3356416407,8000 +dw_scheme: -0.06818893746,0.9523916699,0.2971537916,8000 +dw_scheme: 0.08411369757,0.9628881513,0.2564591469,8000 +dw_scheme: 0.2274177456,0.9236773123,0.3083851355,8000.000001 +dw_scheme: 0.3321697904,0.9249732567,0.1846285586,7999.999999 +dw_scheme: 0.4665459188,0.8537404989,0.2312186545,8000 +dw_scheme: 0.5949481397,0.7602384547,0.2609103353,8000 +dw_scheme: 0.7094965346,0.647689679,0.2776918203,8000 +dw_scheme: 0.814180146,0.5031101104,0.289811847,8000 +dw_scheme: 0.8929068524,0.3382074937,0.2972087551,8000 +dw_scheme: 0.9392646018,0.1633776009,0.3018108137,7999.999999 +dw_scheme: 0.9545904645,-0.003861267585,0.2978961826,7999.999999 +dw_scheme: -0.9440986455,0.1658584334,-0.2849012595,8000 +dw_scheme: -0.9101178014,0.3214264192,-0.2614778091,8000 +dw_scheme: -0.8531759641,0.4692083556,-0.2278909683,8000.000001 +dw_scheme: -0.7721725819,0.607244662,-0.1870920209,8000 +dw_scheme: -0.645807238,0.7412639773,-0.1829227356,7999.999999 +dw_scheme: -0.513860755,0.8291838007,-0.2200030663,8000 +dw_scheme: -0.3742727226,0.8916918008,-0.2545695612,8000 +dw_scheme: -0.2199564893,0.9341170799,-0.2811484019,8000 +dw_scheme: -0.1488791261,0.9779519823,-0.1464408619,7999.999999 +dw_scheme: -0.05190444702,0.9554263089,-0.290631204,8000.000001 +dw_scheme: 0.1182897011,0.9511485388,-0.2851736378,8000 +dw_scheme: 0.2851026621,0.9194528994,-0.2707819008,8000 +dw_scheme: 0.4423647384,0.8630716032,-0.2437639146,8000.000001 +dw_scheme: 0.5813417681,0.7883521096,-0.201352179,8000 +dw_scheme: 0.7055825937,0.6916730098,-0.1540832602,8000.000001 +dw_scheme: 0.8226685514,0.5496269159,-0.1453502938,8000 +dw_scheme: 0.894613166,0.3765378384,-0.2405962167,8000 +dw_scheme: 0.956140104,0.2694377303,-0.1148886898,8000 +dw_scheme: 0.9845220492,0.1117963671,-0.1349737267,8000 +dw_scheme: -0.9872926918,0.05066637614,0.15061892,8000 +dw_scheme: -0.9629710484,0.2107304325,0.1681649333,8000 +dw_scheme: -0.9089156,0.3704065174,0.1914978953,8000 +dw_scheme: -0.8246628192,0.5260661652,0.2078115119,8000 +dw_scheme: -0.7143233921,0.6634391927,0.2226893107,8000 +dw_scheme: -0.5868388963,0.7754107475,0.2331486274,8000 +dw_scheme: -0.447517209,0.8646691738,0.2282007178,8000.000001 +dw_scheme: -0.3052100428,0.9312358401,0.19911464,8000 +dw_scheme: -0.156882597,0.9745527475,0.1601086914,8000 +dw_scheme: 0.0012529542,0.992147907,0.1250638269,8000 +dw_scheme: 0.103493427,0.9945772314,-0.01025871795,8000 +dw_scheme: 0.1833466381,0.9737792427,0.1346773801,7999.999999 +dw_scheme: 0.2771711523,0.9607764896,0.009202679436,8000 +dw_scheme: 0.4256892524,0.9032464531,0.05417107545,8000 +dw_scheme: 0.5595333971,0.8226806043,0.1005932442,8000 +dw_scheme: 0.6865561464,0.7165393857,0.1233368017,8000.000001 +dw_scheme: 0.7933340115,0.5898145858,0.1507975484,8000 +dw_scheme: 0.8870805306,0.431028964,0.165233666,8000 +dw_scheme: 0.9515182668,0.2557980704,0.1708225252,8000 +dw_scheme: 0.9834626085,0.08625805841,0.1592508873,8000.000001 +dw_scheme: -0.9859385825,0.07900435081,-0.1472529258,8000.000001 +dw_scheme: -0.9621451618,0.2409599237,-0.1273381437,8000 +dw_scheme: -0.9131052483,0.3957468441,-0.09809811843,7999.999999 +dw_scheme: -0.8384106194,0.5414064462,-0.06282271332,8000 +dw_scheme: -0.7256598187,0.6861416117,-0.05125930337,8000 +dw_scheme: -0.5902093395,0.8056551284,-0.05072227971,8000 +dw_scheme: -0.4530853873,0.8877269874,-0.08157467544,8000 +dw_scheme: -0.3071214675,0.9442886333,-0.1183020761,8000 +dw_scheme: -0.2348733933,0.9718218262,0.01992052207,8000 +dw_scheme: -0.07369321841,0.9972231773,-0.01073518634,8000 +dw_scheme: 0.02545736524,0.9880834471,-0.1517992892,8000.000001 +dw_scheme: 0.1990285953,0.9696963233,-0.1416921266,7999.999999 +dw_scheme: 0.3651382256,0.9234293502,-0.1181199028,8000 +dw_scheme: 0.5105772936,0.8565718699,-0.07480280104,8000.000001 +dw_scheme: 0.6408011166,0.7670788095,-0.03104881642,8000 +dw_scheme: 0.7651513262,0.6437562058,-0.01101796353,8000 +dw_scheme: 0.8577863249,0.5134139191,0.02467323426,8000 +dw_scheme: 0.9007738793,0.4232833333,-0.09714750668,8000.000001 +dw_scheme: 0.9384675954,0.3433556976,0.03722146364,8000 +dw_scheme: 0.9837385072,0.1782771958,0.02181263184,8000 +dw_scheme: 0.9998989022,0.01354134724,0.004337901547,8000.000001 +dw_scheme: -0.9887006469,0.1494578566,0.01154902032,8000 +dw_scheme: -0.9499255232,0.3104793482,0.03527144325,8000 +dw_scheme: -0.8837898775,0.4634960663,0.06392846706,8000 +dw_scheme: -0.7843304257,0.6155660518,0.07683891774,8000.000001 +dw_scheme: -0.6610135002,0.745246834,0.08756888122,8000 +dw_scheme: -0.5225877151,0.8481793297,0.08656734195,8000 +dw_scheme: -0.3816685677,0.9224450056,0.05851765547,8000.000001 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +dw_scheme: 0,0,0,0 +mrtrix_version: 3.0.3 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +pe_scheme: 0,-1,0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +prior_pe_scheme: 0.0,-1.0,0.0,0.027 +file: . 44140 +END +IBxlAsAA }A?}AAN~AAAbA~ALӀAaAzATAPANAm8A޼AӹAA`AUA~A'6AAA\A AcAAA AA A AIRA9AfAuAb A<AGA?AbAGAAWAAA,A+AA A A$k AnAAAAX8AˮGBӟIB"JB۞IB JB5JB +JBIBIB,&LB=Bz#@p#@N"@2I$@x}!@"@@"@H"@"@w@]!@ @>@!@6 @#@~"@#@3"@+^!@~!@"@c#@Є$@A$@#@J!@z"@"@"@3!@@!@$@^#@"@,/ @ @@!@5!@?!@J!@$@#@#@;x#@V@_ @-"@&>#@!@f!@V"@n"@Xj#@r?%@8#@!@@ N @@@@@ + @ @d!@u%@A$@S#@#@_B#@"@q#@y$@"@92$@C"@N#@E#@%$@S'@e'@Y(@$@!o#@1"@i @X@Y@s@i@. @,@G@@$@q%@&@OI&@%@%@#@X$@}%@H%@'@&b&@%@#@xR!@f @M%@z(@ѱ'@&@V"@C"@p!@o @@V@(d@@S@X@Nm@u@ɟ!@ #@U:&@<(@&@&@##@{#@G%@$@%@(@{)@<'@ro'@$@l$@*%@&@~'@='@S&@1&@!@ "@m$@/@|@@@@ma@E@@*J@@@S@E @$@D)@b?'@'@P'@$@ #@#@$@'@p&@1&@-&@S$@g$@=!@K#@#@%@@(@?)&@'@ +'@zG$@"@33!@!@%@w@!@K@{ @ @1 @@=' @;!@%$@p&@uc)@*@)@`'@g%@Wu$@YL#@!@m$@#@\$@#@n%@|#@Lh"@F"@/"@#@9$@('@a*@*@',)@Ks'@50%@i"@R"@!@+!@%@@@@g@@b @@!@x@!@'@r(@c*@/&@N]#@ @k!@ )@q @D=B +?B{?B2f?B>B>B:=B + ?Br?B diff --git a/tests/data/mean_b0.mif b/tests/data/hifi/mean_b0.mif similarity index 100% rename from tests/data/mean_b0.mif rename to tests/data/hifi/mean_b0.mif diff --git a/tests/data/hifi_splenium_mrgrid.mif b/tests/data/hifi_splenium_mrgrid.mif deleted file mode 100644 index d8c0a9e4..00000000 --- a/tests/data/hifi_splenium_mrgrid.mif +++ /dev/null @@ -1,763 +0,0 @@ -mrtrix image -dim: 1,1,1,337 -vox: 222,222,126,3.9 -layout: +1,+2,+3,+0 -datatype: Float32LE -transform: 0.994345310289832, 2.73896740248844e-08, -0.106195121171422, -2.84486473639056 -transform: -0.0163522207646128, 0.988073569252652, -0.153111814252808, 14.990506163459 -transform: 0.104928588957842, 0.153982537140822, 0.982486319790561, -3.95726479753769 -AcquisitionMatrixPE: 74 -AcquisitionNumber: 1 -AcquisitionTime: variable -BandwidthPerPixelPhaseEncode: 36.5229988 -BaseResolution: 74 -BodyPartExamined: BRAIN -ConsistencyInfo: N4_VE11C_LATEST_20160120 -ConversionSoftware: dcm2niix -ConversionSoftwareVersion: v1.0.20190902 -DerivedVendorReportedEchoSpacing: 0.000739999989 -DeviceSerialNumber: 167021 -DiffusionScheme: Monopolar -DwellTime: 4.39999985e-06 -EchoTime: 0.0989999995 -EchoTrainLength: 37 -EffectiveEchoSpacing: 0.000369999994 -FlipAngle: 90 -ImageOrientationPatientDICOM: 0.994345,-0.0163522,-0.104929,2.73897e-08,0.988074,-0.153983 -ImageType: variable -ImagingFrequency: 123.230003 -InPlanePhaseEncodingDirectionDICOM: COL -InstitutionAddress: Bee_Street_30_Charleston_South_Carolina_US_29425 -InstitutionName: Medical_University_of_South_Carolina -InstitutionalDepartmentName: Department -MRAcquisitionType: 2D -MagneticFieldStrength: 3 -Manufacturer: Siemens -ManufacturersModelName: Prisma_fit -Modality: MR -ParallelReductionFactorInPlane: 2 -PartialFourier: 1 -PatientPosition: HFS -PercentPhaseFOV: 100 -PhaseEncodingSteps: 74 -PhaseResolution: 1 -PixelBandwidth: 1535 -ProcedureStepDescription: Research_HELPERN -ProtocolName: variable -PulseSequenceDetails: %SiemensSeq%_ep2d_diff -ReceiveCoilActiveElements: HEA;HEP -ReceiveCoilName: Head_32 -ReconMatrixPE: 74 -RefLinesPE: 24 -RepetitionTime: 3.9000001 -SAR: variable -ScanOptions: FS -ScanningSequence: EP -SequenceName: _ep_b0 -SequenceVariant: SK_SP -SeriesDescription: variable -SeriesNumber: variable -ShimSetting: 3695,-10046,2626,292,83,-279,-134,102 -SliceThickness: 3 -SoftwareVersions: syngo_MR_E11 -SpacingBetweenSlices: 3 -StationName: MRC35104 -TxRefAmp: 222.089005 -command_history: variable -command_history: mrcat -axis 3 /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi0.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi1.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi2.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif (version=3.0.1-24-g62bb3c69) -command_history: dwidenoise -noise /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/noisemap.nii -extent '5,5,5' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/1_dwi_denoised.mif (version=3.0.1-24-g62bb3c69) -command_history: mrdegibbs /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/2_dwi_degibbs.mif (version=3.0.1-24-g62bb3c69) -command_history: /usr/local/mrtrix3/bin/dwifslpreproc -se_epi /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/B0_EPI.mif -eddy_options '--repol --data_is_shelled' -rpe_header -eddyqc_all /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/metrics_qc/eddy /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/3_dwi_undistorted.mif (version=3.0.1-24-g62bb3c69) -command_history: mrconvert -force -quiet -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.json -strides '1,2,3,4' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/4_dwi_smoothed.mif (version=3.0.1-24-g62bb3c69) -command_history: mrconvert -force -quiet -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.json -strides '1,2,3,4' /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/5_dwi_rician.mif (version=3.0.1-24-g62bb3c69) -command_history: mrconvert -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.json /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif (version=3.0.1-24-g62bb3c69) -command_history: mrgrid /Users/siddhiman/Datasets/IAM_HiFI/out/pydesigner/working.mif regrid -size '1,1,1' /Users/siddhiman/Repos/PyDesigner/tests/data/hifi_splenium_mrgrid.mif (version=3.0.4) -comments: TE=99;Time=104142.333;phase=1;mb=2 -comments: TE=99;Time=104634.188;phase=0;mb=2 -comments: TE=99;Time=102301.625;phase=1;mb=2 -comments: TE=99;Time=104142 -comments: TE=99;Time=104142 -comments: TE=99;Time=104142 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.2041193387,0.5137031909,-0.833333263,1000.0 -dw_scheme: -0.1977141975,0.5146343525,-0.8343024508,1000.0 -dw_scheme: -0.3999621792,0.1718072214,-0.900284696,1000.0 -dw_scheme: 0.4037001972,0.7264234052,-0.5561790963,1000.0 -dw_scheme: 0.2032804557,0.9391539284,-0.2768879831,1000.0 -dw_scheme: 0.8546867084,0.5149137883,-0.06613940621,1000.0 -dw_scheme: 0.7310855427,0.5144020839,-0.4482236331,1000.0 -dw_scheme: 0.4058203992,0.1702779517,-0.8979505681,1000.0 -dw_scheme: 0.7299824555,0.1701815673,-0.6619394601,1000.0 -dw_scheme: 0.6526334818,0.7283765637,0.2086555051,1000.0 -dw_scheme: 0.3244365682,0.9401997848,0.1037558568,1000.0 -dw_scheme: 0.3253184522,0.5170243383,0.791740954,1000.0 -dw_scheme: 0.6514813496,0.5175849347,0.554687197,1000.0 -dw_scheme: 0.9790823445,0.1727878311,0.1074342964,1000.0 -dw_scheme: 0.8540502963,0.1734394521,0.4904251705,1000.0 -dw_scheme: -0.002259620983,0.7302636963,0.6831616412,1000.0 -dw_scheme: -0.002591339745,0.9415239344,0.3369361451,1000.0 -dw_scheme: -0.6554853118,0.5169442435,0.5505521367,1000.0 -dw_scheme: -0.3308567768,0.5183798452,0.7885531874,1000.0 -dw_scheme: 0.1972617938,0.1747377061,0.9646525378,1000.0 -dw_scheme: -0.2056872366,0.1740635009,0.963013322,1000.0 -dw_scheme: -0.6527536174,0.7289013255,0.2064353957,1000.0 -dw_scheme: -0.3254198893,0.9404517877,0.09824627548,1000.0 -dw_scheme: -0.1993994297,0.9378278089,-0.2841106622,1000.0 -dw_scheme: -0.402190306,0.7259439266,-0.5578963821,1000.0 -dw_scheme: -0.7282749406,0.170845989,-0.6636469384,1000.0 -dw_scheme: -0.7269286759,0.5136962899,-0.455731085,1000.0 -dw_scheme: -0.8535207681,0.5157749553,-0.07401684809,1000.0 -dw_scheme: -0.8581097023,0.1742568347,0.4829930584,1000.0 -dw_scheme: -0.9798602664,0.1731730579,0.09942308757,1000.0 -dw_scheme: 0.204978745,0.5120461773,-0.8341417304,2000.0 -dw_scheme: -0.1965293814,0.5127992738,-0.8357111385,2000.0 -dw_scheme: -0.3998713053,0.1699687211,-0.9006739549,2000.0 -dw_scheme: 0.4048534043,0.7250704832,-0.5571054796,2000.0 -dw_scheme: 0.2036165985,0.9386839084,-0.2782315599,2000.0 -dw_scheme: 0.8549558168,0.5145177471,-0.06574221798,2000.0 -dw_scheme: 0.7315589065,0.5138347744,-0.4481019872,2000.0 -dw_scheme: 0.4072249602,0.1696576375,-0.8974319572,2000.0 -dw_scheme: 0.7309258671,0.1700521269,-0.6609308972,2000.0 -dw_scheme: 0.6524868782,0.7278674133,0.2108788811,2000.0 -dw_scheme: 0.3242097053,0.9401930644,0.1045230534,2000.0 -dw_scheme: 0.3238402283,0.5170630515,0.7923214671,2000.0 -dw_scheme: 0.6502088878,0.516892536,0.5568217924,2000.0 -dw_scheme: 0.9790345074,0.1722952772,0.1086543635,2000.0 -dw_scheme: 0.8532894718,0.1731874673,0.4918365364,2000.0 -dw_scheme: -0.001974410286,0.7298582035,0.6835957171,2000.0 -dw_scheme: -0.00310387162,0.9412377457,0.3377304724,2000.0 -dw_scheme: -0.655638689,0.5168712665,0.5504380105,2000.0 -dw_scheme: -0.331102832,0.5175902144,0.788968494,2000.0 -dw_scheme: 0.1965814308,0.1742203798,0.9648849674,2000.0 -dw_scheme: -0.2059179905,0.1740199847,0.9629718719,2000.0 -dw_scheme: -0.6533703702,0.7283237759,0.2065227271,2000.0 -dw_scheme: -0.3258404176,0.9402721635,0.09857119676,2000.0 -dw_scheme: -0.1997946014,0.9376822071,-0.2843135519,2000.0 -dw_scheme: -0.4019648303,0.7255111928,-0.5586213246,2000.0 -dw_scheme: -0.7282631119,0.1706087558,-0.6637209446,2000.0 -dw_scheme: -0.7267950678,0.513986761,-0.4556166579,2000.0 -dw_scheme: -0.8535307738,0.5158325871,-0.07349802909,2000.0 -dw_scheme: -0.8578799975,0.1738247724,0.4835564687,2000.0 -dw_scheme: -0.9799128072,0.1724960796,0.1000799318,2000.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.06332081897,0.01444310468,0.9978887065,8000.0 -dw_scheme: -0.07417404809,0.1564827949,-0.98489154,8000.0 -dw_scheme: -0.07409180858,-0.08248148301,0.9938345983,8000.0 -dw_scheme: -0.08880178295,0.08731895646,0.9922145147,8000.0 -dw_scheme: 0.05085716826,0.1788560869,0.9825599466,8000.0 -dw_scheme: 0.2048379922,0.1092212416,0.972682948,8000.0 -dw_scheme: 0.2154325352,-0.05118067635,0.9751765795,8000.0 -dw_scheme: -0.2138596396,0.2139010684,-0.9531581125,8000.0 -dw_scheme: 0.0482117501,0.2505349565,-0.9669063361,8000.0 -dw_scheme: 0.2049114349,0.1863776562,-0.9608718297,8000.0 -dw_scheme: -0.3529281357,-0.1188557216,0.9280706053,8000.0 -dw_scheme: -0.223297512,-0.01561593684,0.9746252427,8000.0 -dw_scheme: -0.2384915225,0.1570689408,0.9583585663,8000.0 -dw_scheme: -0.1054733643,0.2532084332,0.9616448714,8000.0 -dw_scheme: 0.03320362423,0.3381202338,0.9405169997,8000.0 -dw_scheme: 0.1935410102,0.2674794086,0.9439261853,8000.0 -dw_scheme: 0.3350161077,0.2010768489,0.9205065499,8000.0 -dw_scheme: 0.3523850069,0.03295309449,0.9352747727,8000.0 -dw_scheme: 0.3568902721,-0.1325617364,0.9246927705,8000.0 -dw_scheme: -0.3226246533,0.3043923819,-0.8962469587,8000.0 -dw_scheme: -0.1253864024,0.3382875593,-0.932652013,8000.0 -dw_scheme: 0.02618126578,0.3950301729,-0.9182949982,8000.0 -dw_scheme: 0.1879427584,0.343759089,-0.9200582635,8000.0 -dw_scheme: 0.3389068547,0.2822803585,-0.8974742019,8000.0 -dw_scheme: 0.4806508488,0.2138671441,-0.8504325994,8000.0 -dw_scheme: -0.4906817579,-0.05222510449,0.8697723558,8000.0 -dw_scheme: -0.3638629425,0.04948088767,0.9301373021,8000.0 -dw_scheme: -0.3758752589,0.2264993174,0.8985632137,8000.0 -dw_scheme: -0.2501143667,0.3262073881,0.9116093152,8000.0 -dw_scheme: -0.11469697,0.4144088082,0.902834395,8000.0 -dw_scheme: 0.02856305646,0.4899053085,0.8713076038,8000.0 -dw_scheme: 0.1772886584,0.4119213007,0.8938062283,8000.0 -dw_scheme: 0.3262734121,0.3807595781,0.8651981301,8000.0 -dw_scheme: 0.454391951,0.272429718,0.8481214557,8000.0 -dw_scheme: 0.4809612063,0.1052273006,0.8704042355,8000.0 -dw_scheme: 0.4913592531,-0.06113377373,0.8688088087,8000.0 -dw_scheme: -0.4703498943,0.2325802215,-0.8512798702,8000.0 -dw_scheme: -0.4284839936,0.3954535384,-0.8124148978,8000.0 -dw_scheme: -0.269230545,0.4444057824,-0.8544111506,8000.0 -dw_scheme: -0.12290081,0.4872007472,-0.8645986484,8000.0 -dw_scheme: 0.02310278889,0.5349069715,-0.8445950468,8000.0 -dw_scheme: 0.1738345832,0.4919811729,-0.8530744769,8000.0 -dw_scheme: 0.3204745421,0.4381379528,-0.8398399861,8000.0 -dw_scheme: 0.4611122499,0.3725046699,-0.8053668505,8000.0 -dw_scheme: 0.6111564904,0.1407586621,-0.7788932811,8000.0 -dw_scheme: -0.6164448666,0.0182915636,0.7871855849,8000.0 -dw_scheme: -0.491308456,0.1153364724,0.8633154112,8000.0 -dw_scheme: -0.5021993072,0.2917622033,0.8140458664,8000.0 -dw_scheme: -0.3822782783,0.3934250602,0.8361100645,8000.0 -dw_scheme: -0.2521442149,0.4854616575,0.8371082809,8000.0 -dw_scheme: -0.1129679822,0.5642476573,0.8178403366,8000.0 -dw_scheme: 0.03941977651,0.6247156598,0.77985667,8000.0 -dw_scheme: 0.185218657,0.5425577119,0.8193443588,8000.0 -dw_scheme: 0.3310889531,0.5432284415,0.7715458285,8000.0 -dw_scheme: 0.4491133268,0.436742144,0.7794571954,8000.0 -dw_scheme: 0.5684476951,0.319874619,0.7579890804,8000.0 -dw_scheme: 0.5980293927,0.1620609684,0.7849185232,8000.0 -dw_scheme: 0.6149706868,0.0009513636549,0.7885493956,8000.0 -dw_scheme: -0.6024246598,0.1645783385,-0.7810240071,8000.0 -dw_scheme: -0.5704450247,0.3264348418,-0.7536794862,8000.0 -dw_scheme: -0.5144035982,0.482909799,-0.7086515816,8000.0 -dw_scheme: -0.3644130073,0.5444430013,-0.7555031294,8000.0 -dw_scheme: -0.2130411425,0.5955142482,-0.7745813397,8000.0 -dw_scheme: -0.06001856711,0.641344364,-0.7649020711,8000.0 -dw_scheme: 0.1167986839,0.6382102822,-0.7609505261,8000.0 -dw_scheme: 0.2708287664,0.5908007885,-0.7600040839,8000.0 -dw_scheme: 0.419013,0.5286408254,-0.7382187911,8000.0 -dw_scheme: 0.5569609966,0.455047383,-0.6947850945,8000.0 -dw_scheme: 0.5948040245,0.3000380191,-0.7457783582,8000.0 -dw_scheme: -0.7280700238,-0.04582590336,0.6839693173,8000.0 -dw_scheme: -0.7176359257,0.1226390699,0.6855350733,8000.0 -dw_scheme: -0.6066098645,0.1800032163,0.7743534816,8000.0 -dw_scheme: -0.6428185047,0.3099967155,0.7004901187,8000.0 -dw_scheme: -0.5237393276,0.4318488107,0.734304924,8000.0 -dw_scheme: -0.3942280895,0.5347683254,0.7474001951,8000.0 -dw_scheme: -0.2555117198,0.6226413207,0.7396158102,8000.0 -dw_scheme: -0.1057790974,0.6926381847,0.7134865995,8000.0 -dw_scheme: 0.05300474118,0.7396424228,0.6709095198,8000.0 -dw_scheme: 0.1994248317,0.6638078249,0.7208251578,8000.0 -dw_scheme: 0.340485266,0.6823473806,0.6468939911,8000.0 -dw_scheme: 0.4578772784,0.5831494363,0.6710328851,8000.0 -dw_scheme: 0.5690836021,0.4758604012,0.6705972952,8000.0 -dw_scheme: 0.6721958221,0.3592127516,0.6473939881,8000.0 -dw_scheme: 0.7062910286,0.2092882899,0.6762776018,8000.0 -dw_scheme: 0.7257541526,0.05640646761,0.6856378201,8000.0 -dw_scheme: 0.7232268738,-0.1017622955,0.6830719759,8000.0 -dw_scheme: -0.6977125493,0.2592782172,-0.667811354,8000.0 -dw_scheme: -0.6522665461,0.4117082555,-0.6364311944,8000.0 -dw_scheme: -0.5849001722,0.5583872161,-0.5882988233,8000.0 -dw_scheme: -0.4432526,0.6299118936,-0.6377602519,8000.0 -dw_scheme: -0.2937871727,0.6865539754,-0.6650809996,8000.0 -dw_scheme: -0.1386295555,0.7340533923,-0.6647912933,8000.0 -dw_scheme: 0.03313822298,0.7447047783,-0.666570815,8000.0 -dw_scheme: 0.2045279417,0.7250875013,-0.6575837867,8000.0 -dw_scheme: 0.3589659154,0.673169997,-0.6465180792,8000.0 -dw_scheme: 0.5040616146,0.6048231825,-0.6165312698,8000.0 -dw_scheme: 0.6385154351,0.5186963987,-0.5685526229,8000.0 -dw_scheme: 0.6882258778,0.3681749577,-0.625133859,8000.0 -dw_scheme: 0.7161919627,0.2092634907,-0.6657911565,8000.0 -dw_scheme: 0.8199740941,0.1128854052,-0.5611589528,8000.0 -dw_scheme: -0.819885839,0.0476596813,0.5705398897,8000.0 -dw_scheme: -0.7868730917,0.2093606719,0.5805160175,8000.0 -dw_scheme: -0.7323024624,0.3510300601,0.5835332043,8000.0 -dw_scheme: -0.6321236638,0.4683934059,0.617274081,8000.0 -dw_scheme: -0.5150729771,0.5747325861,0.6359105933,8000.0 -dw_scheme: -0.3852421309,0.6666535005,0.6380921648,8000.0 -dw_scheme: -0.2441540138,0.7433702255,0.6227274889,8000.0 -dw_scheme: -0.09282097362,0.8007161943,0.5918089583,8000.0 -dw_scheme: 0.06286774212,0.8362776041,0.5446902018,8000.0 -dw_scheme: 0.2076470152,0.7723939575,0.6002418609,8000.0 -dw_scheme: 0.3564213436,0.7827111091,0.5102226431,8000.0 -dw_scheme: 0.4816276925,0.6897290431,0.540655725,8000.0 -dw_scheme: 0.5978744474,0.582455926,0.5507188388,8000.0 -dw_scheme: 0.705565045,0.4624713035,0.5369341307,8000.0 -dw_scheme: 0.7831973251,0.3020716403,0.5434654305,8000.0 -dw_scheme: 0.8139604231,0.1426528656,0.5631328348,8000.0 -dw_scheme: 0.8233406414,-0.02018070931,0.5671886169,8000.0 -dw_scheme: -0.8097333473,0.1790681973,-0.558808095,8000.0 -dw_scheme: -0.7756290022,0.3336803,-0.535777107,8000.0 -dw_scheme: -0.7201623938,0.4793810155,-0.5015575425,8000.0 -dw_scheme: -0.6443097748,0.6170346265,-0.4518110045,8000.0 -dw_scheme: -0.5105673453,0.6984576953,-0.5014756562,8000.0 -dw_scheme: -0.3675039569,0.7591211833,-0.5372856509,8000.0 -dw_scheme: -0.214162085,0.8088383146,-0.5476451243,8000.0 -dw_scheme: -0.04766454497,0.8314585939,-0.5535383435,8000.0 -dw_scheme: 0.1214588272,0.8271395101,-0.5487148478,8000.0 -dw_scheme: 0.2860192726,0.7947013157,-0.5353903198,8000.0 -dw_scheme: 0.4375195625,0.7372610723,-0.5148035972,8000.0 -dw_scheme: 0.5778323019,0.6602265138,-0.4798028567,8000.0 -dw_scheme: 0.7039755117,0.5681861023,-0.4261256061,8000.0 -dw_scheme: 0.7634896137,0.4272225035,-0.4843186371,8000.0 -dw_scheme: 0.7993196384,0.2725635687,-0.535534515,8000.0 -dw_scheme: 0.892023962,0.1644988813,-0.4209909372,8000.0 -dw_scheme: -0.9008095313,-0.00444673563,0.4341916798,8000.0 -dw_scheme: -0.8801383526,0.1566742573,0.4481179056,8000.0 -dw_scheme: -0.833588434,0.3164883212,0.4527311181,8000.0 -dw_scheme: -0.7476996175,0.4671631635,0.471915099,8000.0 -dw_scheme: -0.6384525233,0.584977424,0.5001797566,8000.0 -dw_scheme: -0.5148155306,0.6871896114,0.512577221,8000.0 -dw_scheme: -0.3786273152,0.7727038682,0.5094802138,8000.0 -dw_scheme: -0.2317657191,0.8409689541,0.4889334,8000.0 -dw_scheme: -0.08325846942,0.8881056773,0.4520357654,8000.0 -dw_scheme: 0.07276379679,0.9110191785,0.405893442,8000.0 -dw_scheme: 0.2181698334,0.8595404182,0.4621603546,8000.0 -dw_scheme: 0.3612681501,0.8604875047,0.359230536,8000.0 -dw_scheme: 0.4899333344,0.7774544789,0.3943727438,8000.0 -dw_scheme: 0.6076412517,0.677345114,0.4146995368,8000.0 -dw_scheme: 0.7186929217,0.5589655307,0.4135674307,8000.0 -dw_scheme: 0.8100333253,0.4080585691,0.4211106935,8000.0 -dw_scheme: 0.8710687337,0.2402921623,0.4283677602,8000.0 -dw_scheme: 0.8955631444,0.07453726985,0.4386466115,8000.0 -dw_scheme: -0.8964299798,0.08746374523,-0.4344690837,8000.0 -dw_scheme: -0.8747732604,0.2439653071,-0.4186319049,8000.0 -dw_scheme: -0.8320740318,0.3918674458,-0.3925464438,8000.0 -dw_scheme: -0.7697598404,0.5305679724,-0.3549188847,8000.0 -dw_scheme: -0.6883147697,0.6562741874,-0.3090743742,8000.0 -dw_scheme: -0.5667966036,0.7447687085,-0.3522231976,8000.0 -dw_scheme: -0.4335187154,0.8122232692,-0.3903266379,8000.0 -dw_scheme: -0.2888653644,0.8639301371,-0.4125306285,8000.0 -dw_scheme: -0.1283189259,0.8958558073,-0.4254134762,8000.0 -dw_scheme: 0.03860043854,0.9039295961,-0.4259357833,8000.0 -dw_scheme: 0.2045540783,0.8861204638,-0.4158703557,8000.0 -dw_scheme: 0.3629923696,0.8423047515,-0.398446038,8000.0 -dw_scheme: 0.5091712898,0.7772611108,-0.36960758,8000.0 -dw_scheme: 0.6381868495,0.6971635412,-0.3266198737,8000.0 -dw_scheme: 0.752372513,0.5994685683,-0.2730806426,8000.0 -dw_scheme: 0.8169817446,0.472667973,-0.3303419686,8000.0 -dw_scheme: 0.8617377132,0.3209212823,-0.3929601052,8000.0 -dw_scheme: 0.9375595419,0.2179446082,-0.2710761023,8000.0 -dw_scheme: 0.9555966918,0.05702525674,-0.2891073895,8000.0 -dw_scheme: -0.9471304776,0.1049414681,0.3032014953,8000.0 -dw_scheme: -0.9105876731,0.2658216855,0.3164947411,8000.0 -dw_scheme: -0.840558662,0.4272505338,0.3330437166,8000.0 -dw_scheme: -0.7427197603,0.570761042,0.3501416721,8000.0 -dw_scheme: -0.6268012665,0.6855815813,0.3702675622,8000.0 -dw_scheme: -0.496135299,0.7826243854,0.3759638766,8000.0 -dw_scheme: -0.3557236392,0.8602266998,0.3653364442,8000.0 -dw_scheme: -0.2135046737,0.9174750369,0.3356416407,8000.0 -dw_scheme: -0.06818893746,0.9523916699,0.2971537916,8000.0 -dw_scheme: 0.08411369757,0.9628881513,0.2564591469,8000.0 -dw_scheme: 0.2274177456,0.9236773123,0.3083851355,8000.0 -dw_scheme: 0.3321697904,0.9249732567,0.1846285586,8000.0 -dw_scheme: 0.4665459188,0.8537404989,0.2312186545,8000.0 -dw_scheme: 0.5949481397,0.7602384547,0.2609103353,8000.0 -dw_scheme: 0.7094965346,0.647689679,0.2776918203,8000.0 -dw_scheme: 0.814180146,0.5031101104,0.289811847,8000.0 -dw_scheme: 0.8929068524,0.3382074937,0.2972087551,8000.0 -dw_scheme: 0.9392646018,0.1633776009,0.3018108137,8000.0 -dw_scheme: 0.9545904645,-0.003861267585,0.2978961826,8000.0 -dw_scheme: -0.9440986455,0.1658584334,-0.2849012595,8000.0 -dw_scheme: -0.9101178014,0.3214264192,-0.2614778091,8000.0 -dw_scheme: -0.8531759641,0.4692083556,-0.2278909683,8000.0 -dw_scheme: -0.7721725819,0.607244662,-0.1870920209,8000.0 -dw_scheme: -0.645807238,0.7412639773,-0.1829227356,8000.0 -dw_scheme: -0.513860755,0.8291838007,-0.2200030663,8000.0 -dw_scheme: -0.3742727226,0.8916918008,-0.2545695612,8000.0 -dw_scheme: -0.2199564893,0.9341170799,-0.2811484019,8000.0 -dw_scheme: -0.1488791261,0.9779519823,-0.1464408619,8000.0 -dw_scheme: -0.05190444702,0.9554263089,-0.290631204,8000.0 -dw_scheme: 0.1182897011,0.9511485388,-0.2851736378,8000.0 -dw_scheme: 0.2851026621,0.9194528994,-0.2707819008,8000.0 -dw_scheme: 0.4423647384,0.8630716032,-0.2437639146,8000.0 -dw_scheme: 0.5813417681,0.7883521096,-0.201352179,8000.0 -dw_scheme: 0.7055825937,0.6916730098,-0.1540832602,8000.0 -dw_scheme: 0.8226685514,0.5496269159,-0.1453502938,8000.0 -dw_scheme: 0.894613166,0.3765378384,-0.2405962167,8000.0 -dw_scheme: 0.956140104,0.2694377303,-0.1148886898,8000.0 -dw_scheme: 0.9845220492,0.1117963671,-0.1349737267,8000.0 -dw_scheme: -0.9872926918,0.05066637614,0.15061892,8000.0 -dw_scheme: -0.9629710484,0.2107304325,0.1681649333,8000.0 -dw_scheme: -0.9089156,0.3704065174,0.1914978953,8000.0 -dw_scheme: -0.8246628192,0.5260661652,0.2078115119,8000.0 -dw_scheme: -0.7143233921,0.6634391927,0.2226893107,8000.0 -dw_scheme: -0.5868388963,0.7754107475,0.2331486274,8000.0 -dw_scheme: -0.447517209,0.8646691738,0.2282007178,8000.0 -dw_scheme: -0.3052100428,0.9312358401,0.19911464,8000.0 -dw_scheme: -0.156882597,0.9745527475,0.1601086914,8000.0 -dw_scheme: 0.0012529542,0.992147907,0.1250638269,8000.0 -dw_scheme: 0.103493427,0.9945772314,-0.01025871795,8000.0 -dw_scheme: 0.1833466381,0.9737792427,0.1346773801,8000.0 -dw_scheme: 0.2771711523,0.9607764896,0.009202679436,8000.0 -dw_scheme: 0.4256892524,0.9032464531,0.05417107545,8000.0 -dw_scheme: 0.5595333971,0.8226806043,0.1005932442,8000.0 -dw_scheme: 0.6865561464,0.7165393857,0.1233368017,8000.0 -dw_scheme: 0.7933340115,0.5898145858,0.1507975484,8000.0 -dw_scheme: 0.8870805306,0.431028964,0.165233666,8000.0 -dw_scheme: 0.9515182668,0.2557980704,0.1708225252,8000.0 -dw_scheme: 0.9834626085,0.08625805841,0.1592508873,8000.0 -dw_scheme: -0.9859385825,0.07900435081,-0.1472529258,8000.0 -dw_scheme: -0.9621451618,0.2409599237,-0.1273381437,8000.0 -dw_scheme: -0.9131052483,0.3957468441,-0.09809811843,8000.0 -dw_scheme: -0.8384106194,0.5414064462,-0.06282271332,8000.0 -dw_scheme: -0.7256598187,0.6861416117,-0.05125930337,8000.0 -dw_scheme: -0.5902093395,0.8056551284,-0.05072227971,8000.0 -dw_scheme: -0.4530853873,0.8877269874,-0.08157467544,8000.0 -dw_scheme: -0.3071214675,0.9442886333,-0.1183020761,8000.0 -dw_scheme: -0.2348733933,0.9718218262,0.01992052207,8000.0 -dw_scheme: -0.07369321841,0.9972231773,-0.01073518634,8000.0 -dw_scheme: 0.02545736524,0.9880834471,-0.1517992892,8000.0 -dw_scheme: 0.1990285953,0.9696963233,-0.1416921266,8000.0 -dw_scheme: 0.3651382256,0.9234293502,-0.1181199028,8000.0 -dw_scheme: 0.5105772936,0.8565718699,-0.07480280104,8000.0 -dw_scheme: 0.6408011166,0.7670788095,-0.03104881642,8000.0 -dw_scheme: 0.7651513262,0.6437562058,-0.01101796353,8000.0 -dw_scheme: 0.8577863249,0.5134139191,0.02467323426,8000.0 -dw_scheme: 0.9007738794,0.4232833333,-0.09714750669,8000.0 -dw_scheme: 0.9384675954,0.3433556976,0.03722146364,8000.0 -dw_scheme: 0.9837385072,0.1782771958,0.02181263184,8000.0 -dw_scheme: 0.9998989022,0.01354134724,0.004337901547,8000.0 -dw_scheme: -0.9887006469,0.1494578566,0.01154902032,8000.0 -dw_scheme: -0.9499255232,0.3104793482,0.03527144325,8000.0 -dw_scheme: -0.8837898775,0.4634960663,0.06392846706,8000.0 -dw_scheme: -0.7843304257,0.6155660518,0.07683891774,8000.0 -dw_scheme: -0.6610135002,0.745246834,0.08756888122,8000.0 -dw_scheme: -0.5225877151,0.8481793297,0.08656734195,8000.0 -dw_scheme: -0.3816685677,0.9224450057,0.05851765547,8000.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -dw_scheme: 0.0,0.0,0.0,0.0 -mrtrix_version: 3.0.4 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -prior_pe_scheme: 0.0,-1.0,0.0,0.027 -file: . 36060 -END -IBxlAsAA }A?}AAN~AAAbA~ALӀAaAzATAPANAm8A޼AӹAA`AUA~A'6AAA\A AcAAA AA A AIRA9AfAuAb A<AGA?AbAGAAWAAA,A+AA A A$k AnAAAAX8AˮGBӟIB"JB۞IB JB5JB -JBIBIB,&LB=Bz#@p#@N"@2I$@x}!@"@@"@H"@"@w@]!@ @>@!@6 @#@~"@#@3"@+^!@~!@"@c#@Є$@A$@#@J!@z"@"@"@3!@@!@$@^#@"@,/ @ @@!@5!@?!@J!@$@#@#@;x#@V@_ @-"@&>#@!@f!@V"@n"@Xj#@r?%@8#@!@@ N @@@@@ - @ @d!@u%@A$@S#@#@_B#@"@q#@y$@"@92$@C"@N#@E#@%$@S'@e'@Y(@$@!o#@1"@i @X@Y@s@i@. @,@G@@$@q%@&@OI&@%@%@#@X$@}%@H%@'@&b&@%@#@xR!@f @M%@z(@ѱ'@&@V"@C"@p!@o @@V@(d@@S@X@Nm@u@ɟ!@ #@U:&@<(@&@&@##@{#@G%@$@%@(@{)@<'@ro'@$@l$@*%@&@~'@='@S&@1&@!@ "@m$@/@|@@@@ma@E@@*J@@@S@E @$@D)@b?'@'@P'@$@ #@#@$@'@p&@1&@-&@S$@g$@=!@K#@#@%@@(@?)&@'@ -'@zG$@"@33!@!@%@w@!@K@{ @ @1 @@=' @;!@%$@p&@uc)@*@)@`'@g%@Wu$@YL#@!@m$@#@\$@#@n%@|#@Lh"@F"@/"@#@9$@('@a*@*@',)@Ks'@50%@i"@R"@!@+!@%@@@@g@@b @@!@x@!@'@r(@c*@/&@N]#@ @k!@ )@q @D=B -?B{?B2f?B>B>B:=B - ?Br?B diff --git a/tests/entrypoint.sh b/tests/entrypoint.sh new file mode 100644 index 00000000..ff6ae20b --- /dev/null +++ b/tests/entrypoint.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# If no arguments are passed, run pytest with coverage +if [ "$#" -eq 0 ]; then + mkdir -p /test_results + pytest tests -vv -n auto --cov=pydesigner --cov-report=xml:/test_results/coverage.xml --junitxml=/test_results/results.xml +else + # Otherwise, run the command passed as arguments + exec "$@" +fi diff --git a/tests/test_fitting_dwipy.py b/tests/test_fitting_dwipy.py index 95430ac8..c1b1d29d 100644 --- a/tests/test_fitting_dwipy.py +++ b/tests/test_fitting_dwipy.py @@ -1,93 +1,77 @@ -import os -from pathlib import Path - -import numpy as np +import os.path as op import pytest +import numpy as np +from conftest import load_data from pydesigner.fitting.dwipy import DWI +from pydesigner.fitting.dwidirs import dirs30 -TEST_DIR = Path(__file__).parent -PATH_DWI = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.nii") -PATH_DWI_NOSIDECAR = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox_nosidecar.nii") -PATH_BVEC = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.bvec") -PATH_BVAL = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.bval") -PATH_JSON = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.json") -PATH_MIF = os.path.join(TEST_DIR, "data", "hifi_splenium_mrgrid.mif") -PATH_MASK = os.path.join(TEST_DIR, "data", "brain_mask.nii") - - -def test_dwi_image_path_nonexistent(): - """Tests whether function raises OSError when input is not found""" - with pytest.raises(OSError): - DWI("foo") - - -def test_dwi_bvec_path_invalid(): - """Tests whether function raises TypeError when bvec file input is invalid""" - with pytest.raises(TypeError): - DWI(PATH_DWI, bvecPath=10) +DATA = load_data(type="hifi") +PATH_DWI = DATA["nifti"] +PATH_BVEC = DATA["bvec"] +PATH_BVAL = DATA["bval"] +PATH_MASK = DATA["mask"] -def test_dwi_bvec_path_nonexistent(): - """Tests whether function raises OSError when bvec file is not found""" - with pytest.raises(OSError): - DWI(PATH_DWI, bvecPath="foo") +def is_all_none(array): + """Check if all elements in an array are None""" + return not np.all(np.vectorize(lambda x: x is None)(array)) -def test_dwi_bval_path_invalid(): - """Tests whether function raises TypeError when bval file input is invalid""" - with pytest.raises(TypeError): - DWI(PATH_DWI, bvalPath=10) +def test_dwi_init_image_nonexistent(tmp_path): + input_nii = str(tmp_path / "nonexistent.nii") + with pytest.raises(FileNotFoundError) as exc: + dwi = DWI(input_nii, PATH_BVEC, PATH_BVEC, PATH_BVAL, PATH_MASK) + assert f"Input image ({input_nii}) not found" in str(exc.value) -def test_dwi_bval_path_nonexistent(): - """Tests whether function raises OSError when bval file is not found""" - with pytest.raises(OSError): - DWI(PATH_DWI, bvalPath="foo") +def test_dwi_init_bvec_invalid(tmp_path): + with pytest.raises(TypeError) as exc: + dwi = DWI(PATH_DWI, 50, PATH_BVAL, PATH_MASK) + assert "Input file path (input=50) is not a string type." in str(exc.value) -def test_dwi_mask_path_nonexistent(capsys): - """Tests whether function raises OSError when mask file is not found""" - DWI(PATH_DWI, mask="foo") - captured = capsys.readouterr() - assert "No brain mask supplied" in captured.out +def test_dwi_init_bvec_nonexistent(tmp_path): + input_bvec = str(tmp_path / "nonexistent.bvec") + with pytest.raises(FileNotFoundError) as exc: + dwi = DWI(PATH_DWI, input_bvec, PATH_BVAL, PATH_MASK) + assert f"Input file path ({input_bvec}) does not exist." in str(exc.value) -def test_dwi_path_nosidecar(): - """Tests whether function raises OSError when sidecar files are not found""" - with pytest.raises(OSError): - DWI(PATH_DWI_NOSIDECAR) +def test_dwi_init_bval_invalid(tmp_path): + with pytest.raises(TypeError) as exc: + dwi = DWI(PATH_DWI, PATH_BVEC, 50, PATH_MASK) + assert "Input file path (input=50) is not a string type" in str(exc.value) -def test_dwi_nthreads_nonint(): - """Tests whether function raises TypeError when nthreads is not an int""" - with pytest.raises(TypeError): - DWI(PATH_DWI, nthreads="foo") +def test_dwi_init_bval_nonexistent(tmp_path): + input_bval = str(tmp_path / "nonexistent.bval") + with pytest.raises(OSError) as exc: + dwi = DWI(PATH_DWI, PATH_BVEC, input_bval, PATH_MASK) + assert f"Input file path ({input_bval}) does not exist." in str(exc.value) -def test_dwi_nthreads_negative_int(): - """Tests whether function raises ValueError when nthreads is negative""" - with pytest.raises(ValueError): - DWI(PATH_DWI, nthreads=-5) +def test_dwi_init_mask_nonexistent(tmp_path, capsys): + input_mask = str(tmp_path / "nonexistent.nii") + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, input_mask) + captured = capsys.readouterr() + assert "No brain mask supplied" in captured.out -def test_dwi_paths_valid(capsys): - """Tests whether function responds normally when all paths are valid""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) +def test_dwi_init_success(capsys): + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) captured = capsys.readouterr() - print(captured.out) - assert dwi is not None - assert "Image hifi_splenium_4vox.nii loaded successfully" in captured.out - assert "Processing with" in captured.out - assert "workers..." in captured.out + assert dwi.hdr.header.get_data_shape() == (2, 2, 2, 337) + assert np.shape(dwi.grad) == (337, 4) + assert f"Image {op.basename(PATH_DWI)} loaded successfully" in captured.out def test_dwi_get_bvals(): """Tests whether function returns correct bvals""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) bvals = dwi.getBvals() assert bvals.dtype == np.float64 - assert len(bvals) == 337 + assert np.shape(bvals) == (337,) assert 0 in bvals assert 1 in bvals assert 2 in bvals @@ -96,7 +80,7 @@ def test_dwi_get_bvals(): def test_dwi_get_bvecs(): """Tests whether function returns correct bvecs""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) bvecs = dwi.getBvecs() assert bvecs.dtype == np.float64 assert bvecs.shape == (337, 3) @@ -104,35 +88,39 @@ def test_dwi_get_bvecs(): def test_dwi_max_bval(): """Tests whether function returns correct max bval""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) - dwi.maxBval() == float - assert dwi.maxBval() == 8 + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + val = dwi.maxBval() + assert isinstance(val, float) + assert val == 8 def test_dwi_max_dti_bval(): """Tests whether function returns correct max DTI bval""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) - dwi.maxDTIBval() == float - assert dwi.maxDTIBval() == 1 + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + val = dwi.maxDTIBval() + assert isinstance(val, float) + assert val == 1 def test_dwi_max_dki_bval(): """Tests whether function returns correct max DKI bval""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) - dwi.maxDKIBval() == float - assert dwi.maxDKIBval() == 2 + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + val = dwi.maxDKIBval() + assert isinstance(val, float) + assert val == 2 def test_max_fbi_bval(): """Tests whether function returns correct max FBI bval""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) - dwi.maxFBIBval() == float - assert dwi.maxFBIBval() == 8 + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + val = dwi.maxFBIBval() + assert isinstance(val, float) + assert val == 8 def test_dwi_idx_b0(): """Tests whether function returns correct index of b0""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) idx = dwi.idxb0() assert idx.dtype == bool assert len(idx) == 337 @@ -141,7 +129,7 @@ def test_dwi_idx_b0(): def test_dwi_idx_dti(): """Tests whether function returns correct index of DTI b-values""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) idx = dwi.idxdti() assert idx.dtype == bool assert len(idx) == 337 @@ -150,7 +138,7 @@ def test_dwi_idx_dti(): def test_dwi_idx_dki(): """Tests whether function returns correct index of DKI b-values""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) idx = dwi.idxdki() assert idx.dtype == bool assert len(idx) == 337 @@ -159,7 +147,7 @@ def test_dwi_idx_dki(): def test_idx_fbi(): """Tests whether function returns correct index of FBI b-values""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) idx = dwi.idxfbi() assert idx.dtype == bool assert len(idx) == 337 @@ -168,13 +156,13 @@ def test_idx_fbi(): def test_dwi_n_dirs(): """Tests whether function returns correct number of directions""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) assert dwi.getndirs() == 30 def test_dwi_tensor_type(): """Tests whether function returns correct tensor type""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) tensor = dwi.tensorType() assert isinstance(tensor, list) assert "dti" in tensor @@ -185,38 +173,38 @@ def test_dwi_tensor_type(): def test_dwi_is_dti(): """Tests whether function returns correct boolean for DTI dataset""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) assert dwi.isdti() is True def test_dwi_is_dki(): """Tests whether function returns correct boolean for DKI dataset""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) assert dwi.isdki() is True def test_dwi_is_fbi(): """Tests whether function returns correct boolean for FBI dataset""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) assert dwi.isfbi() is True def test_dwi_is_fbwm(): """Tests whether function returns correct boolean for FBWM dataset""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) assert dwi.isfbwm() is True def test_dwi_tensor_order_invalid_order(): """Tests whether function returns correct tensor order""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) with pytest.raises(ValueError): cnt, ind = dwi.createTensorOrder(5) def test_dwi_tensor_order_valid_order(): """Tests whether function returns correct tensor order""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) cnt, ind = dwi.createTensorOrder(2) assert len(cnt) == 6 assert np.shape(ind) == (6, 2) @@ -224,22 +212,223 @@ def test_dwi_tensor_order_valid_order(): def test_dwi_tensor_order_auto_detect(): """Tests whether function returns correct tensor order""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) cnt, ind = dwi.createTensorOrder() assert len(cnt) == 15 assert np.shape(ind) == (15, 4) -def test_fibonacci_sphere_invalid_samnples(): +def test_dwi_fibonacci_sphere_invalid_samples(): """Tests whether function returns correct response from invalid samples type""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) with pytest.raises(TypeError): dwi.fibonacciSphere(samples=5.2) -def test_fibonacci_sphere(): +def test_dwi_fibonacci_sphere_success(): """Tests whether function returns correct response""" - dwi = DWI(PATH_DWI, bvecPath=PATH_BVEC, bvalPath=PATH_BVAL, mask=PATH_MASK) + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) sphere = dwi.fibonacciSphere(samples=5) assert sphere.dtype == np.float64 assert np.shape(sphere) == (5, 3) + + +def test_dwi_radial_sampling(): + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + samples = 128 + dirs = dwi.radialSampling(dirs30, samples) + assert dirs.dtype == np.float64 + assert np.shape(dirs) == (samples - 1, 3) + + +def test_dwi_constraints_invalid(): + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + with pytest.raises(ValueError) as exc: + val = dwi.createConstraints([1, 2, 3]) + assert "Invalid contraints" in str(exc.value) + + +@pytest.mark.parametrize( + "constraints", + ( + [0, 0, 0], + [1, 1, 1], + [0, 1, 0], + [1, 0, 1], + [0, 0, 1], + [1, 1, 0], + [0, 1, 1], + [1, 0, 0], + ), +) +def test_dwi_constraints_success(constraints): + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + val = dwi.createConstraints(constraints) + if sum(constraints) == 0: + shape = (0, 22) + elif sum(constraints) == 1: + shape = (30, 22) + elif sum(constraints) == 2: + shape = (60, 22) + elif sum(constraints) == 3: + shape = (90, 22) + assert val.dtype == np.float64 + assert np.shape(val) == shape + + +def test_dwi_fit_constrained(capsys): + """Tests whether constrained fitting works normally""" + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + dwi.fit([0, 1, 0]) + captured = capsys.readouterr() + assert hasattr(dwi, "dt") + assert np.shape(dwi.dt) == (21, 5) + assert "Constrained Tensor Fit" in captured.err + + +def test_dwi_fit_unconstrained(capsys): + """Tests whether unconstrained fitting works normally""" + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + dwi.fit() + captured = capsys.readouterr() + assert hasattr(dwi, "dt") + assert np.shape(dwi.dt) == (21, 5) + assert "Unconstrained Tensor Fit" in captured.err + + +def test_dwi_dti_dki_params(capsys): + """Tests whether function returns correct DTI values""" + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + dwi.fit([0, 1, 0]) + md, rd, ad, fa, fe, trace = dwi.extractDTI() + mk, rk, ak, kfa, mkt, trace = dwi.extractDKI() + awf, eas_ad, eas_rd, eas_tort, ias_da = dwi.extractWMTI() + + captured = capsys.readouterr() + + assert "Constrained Tensor Fit" in captured.err + assert "DTI Parameters" in captured.err + assert "DKI Parameters" in captured.err + assert "Extracting AWF" in captured.err + assert "Extracting EAS and IAS" in captured.err + + assert md.dtype == np.float64 + assert rd.dtype == np.float64 + assert ad.dtype == np.float64 + assert fa.dtype == np.float64 + assert fe.dtype == np.float64 + assert trace.dtype == np.float64 + + assert np.shape(md) == (2, 2, 2) + assert np.shape(rd) == (2, 2, 2) + assert np.shape(ad) == (2, 2, 2) + assert np.shape(fa) == (2, 2, 2) + assert np.shape(fe) == (2, 2, 2, 3) + assert np.shape(trace) == (2, 2, 2, 61) + + assert np.nanmean(md) > 0.40 and np.nanmean(md) < 0.60 + assert np.nanmean(rd) > 0.15 and np.nanmean(rd) < 0.40 + assert np.nanmean(ad) > 1.00 and np.nanmean(ad) < 1.30 + assert np.nanmean(fa) > 0.70 and np.nanmean(fa) < 0.80 + assert np.nanmean(fe) > 0.15 and np.nanmean(fe) < 0.40 + assert np.nanmean(trace) > 0.15 and np.nanmean(trace) < 0.40 + + assert mk.dtype == np.float64 + assert rk.dtype == np.float64 + assert ak.dtype == np.float64 + assert kfa.dtype == np.float64 + assert mkt.dtype == np.float64 + assert trace.dtype == np.float64 + + assert np.shape(mk) == (2, 2, 2) + assert np.shape(rk) == (2, 2, 2) + assert np.shape(ak) == (2, 2, 2) + assert np.shape(kfa) == (2, 2, 2) + assert np.shape(mkt) == (2, 2, 2) + assert np.shape(trace) == (2, 2, 2, 61) + + assert np.nanmean(mk) > 0.60 and np.nanmean(mk) < 0.80 + assert np.nanmean(rk) > 1.20 and np.nanmean(rk) < 1.70 + assert np.nanmean(ak) > 0.15 and np.nanmean(ak) < 0.50 + assert np.nanmean(kfa) > 0.20 and np.nanmean(kfa) < 0.50 + assert np.nanmean(mkt) > 0.40 and np.nanmean(mkt) < 0.60 + assert np.nanmean(trace) > 0.15 and np.nanmean(trace) < 0.40 + + assert awf.dtype == np.float64 + assert eas_ad.dtype == np.float64 + assert eas_rd.dtype == np.float64 + assert eas_tort.dtype == np.float64 + assert ias_da.dtype == np.float64 + + assert np.shape(awf) == (2, 2, 2) + assert np.shape(eas_ad) == (2, 2, 2) + assert np.shape(eas_rd) == (2, 2, 2) + assert np.shape(eas_tort) == (2, 2, 2) + assert np.shape(ias_da) == (2, 2, 2) + + assert np.nanmean(awf) > 0.20 and np.nanmean(awf) < 0.40 + assert np.nanmean(eas_ad) > 1.50 and np.nanmean(eas_ad) < 1.75 + assert np.nanmean(eas_rd) > 0.35 and np.nanmean(eas_rd) < 0.55 + assert np.nanmean(eas_tort) > 2.40 and np.nanmean(eas_tort) < 2.70 + assert np.nanmean(ias_da) > 0.80 and np.nanmean(ias_da) < 0.90 + + +def test_dwi_fbi_without_fbwm(capsys): + """Tests whether FBI fitting works normally""" + dwi = DWI(PATH_DWI, PATH_BVEC, PATH_BVAL, PATH_MASK) + dwi.fit([0, 1, 0]) + ( + zeta, + faa, + sph, + sph_mrtrix, + min_awf, + Da, + De_mean, + De_ax, + De_rad, + De_fa, + min_cost, + min_cost_fn, + ) = dwi.fbi(fbwm=False) + captured = capsys.readouterr() + + assert "Constrained Tensor Fit" in captured.err + assert "FBI Fit" in captured.err + + assert zeta.dtype == np.float64 + assert faa.dtype == np.float64 + assert sph.dtype == np.complex128 + assert sph_mrtrix.dtype == np.complex128 + assert min_awf.dtype == np.dtype("O") + assert Da.dtype == np.dtype("O") + assert De_mean.dtype == np.dtype("O") + assert De_ax.dtype == np.dtype("O") + assert De_rad.dtype == np.dtype("O") + assert De_fa.dtype == np.dtype("O") + assert min_cost.dtype == np.dtype("O") + assert min_cost_fn.dtype == np.dtype("O") + + assert np.shape(zeta) == (2, 2, 2) + assert np.shape(faa) == (2, 2, 2) + assert np.shape(sph) == (2, 2, 2, 28) + assert np.shape(sph_mrtrix) == (2, 2, 2, 28) + assert np.shape(min_awf) == (2, 2, 2) + assert np.shape(Da) == (2, 2, 2) + assert np.shape(De_mean) == (2, 2, 2) + assert np.shape(De_ax) == (2, 2, 2) + assert np.shape(De_rad) == (2, 2, 2) + assert np.shape(De_fa) == (2, 2, 2) + assert np.shape(min_cost) == (2, 2, 2) + assert np.shape(min_cost_fn) == (2, 2, 2) + + assert np.nanmean(zeta) > 0.20 and np.nanmean(zeta) < 0.30 + assert np.nanmean(faa) > 0.50 and np.nanmean(faa) < 0.55 + assert is_all_none(min_awf) + assert is_all_none(Da) + assert is_all_none(De_mean) + assert is_all_none(De_ax) + assert is_all_none(De_rad) + assert is_all_none(De_fa) + assert is_all_none(min_cost) + assert is_all_none(min_cost_fn) diff --git a/tests/test_models.py b/tests/test_models.py new file mode 100644 index 00000000..780417f2 --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,124 @@ +from pydesigner.system.models import ( + modelmrtrix, + input_path_validator, + output_path_validator, +) +from pydesigner.system.errors import FileExtensionError +from pydantic import ValidationError +import pytest +from conftest import load_data + +DATA = load_data(type="hifi") +PATH_DWI = DATA["nifti"] + + +def test_modelmrtrix_input_invalid(): + with pytest.raises(TypeError) as exc: + model = modelmrtrix(input=50) + assert "Input file path (input=50) is not a string type" in str(exc.value) + + +def test_modelmrtrix_input_nonexistent(tmp_path): + input_nii = str(tmp_path / "input.nii") + with pytest.raises(FileNotFoundError) as exc: + model = modelmrtrix(input=input_nii) + assert f"Input file path ({input_nii}) does not exist" in str(exc.value) + + +def test_modelmrtrix_input_basedir(): + with pytest.raises(OSError) as exc: + model = modelmrtrix(input="nonexistent/input.nii") + assert "Pleasure ensure that the input parent directory exists" in str(exc.value) + + +def test_modelmrtrix_input_success(): + model = modelmrtrix(input=PATH_DWI) + assert model.input == PATH_DWI + + +def test_modelmrtrix_output_invalid(): + with pytest.raises(TypeError) as exc: + model = modelmrtrix(output=50) + assert "Output file path (output=50) is not a string type" in str(exc.value) + + +def test_modelmrtrix_output_basedir(): + with pytest.raises(OSError) as exc: + model = modelmrtrix(output="nonexistent/output.nii") + assert "Pleasure ensure that the output parent directory exists" in str(exc.value) + + +def test_modelmrtrix_output_success(tmp_path): + output_nii = str(tmp_path / "output.nii") + model = modelmrtrix(output=output_nii) + assert model.output == output_nii + + +def test_modelmrtrix_verbose_fail(): + with pytest.raises(ValidationError) as exc: + model = modelmrtrix(verbose="foo") + assert "Input should be a valid boolean" in str(exc.value) + + +def test_modelmrtrix_verbose_success(): + model = modelmrtrix(verbose=True) + print(model) + assert model.verbose == True + + +def test_modelmrtrix_force_fail(): + with pytest.raises(ValidationError) as exc: + model = modelmrtrix(force="foo") + assert "Input should be a valid boolean" in str(exc.value) + + +def test_modelmrtrix_nthreads_invalid(): + with pytest.raises(TypeError) as exc: + model = modelmrtrix(nthreads="foo") + assert "Please provide a positive integer" in str(exc.value) + + +def test_modelmrtrix_nthreads_negative(): + with pytest.raises(ValueError) as exc: + model = modelmrtrix(nthreads=-1) + assert "nthreads needs to be a valid positive integer" in str(exc.value) + + +def test_input_validator_ctype_invalid(): + with pytest.raises(TypeError) as exc: + path = input_path_validator(path=PATH_DWI, ctype=20) + assert "ctype variable (ctype=20) needs to be a valid string" in str(exc.value) + + +def test_input_validator_ctype_check_fail(): + with pytest.raises(FileExtensionError) as exc: + path = input_path_validator(path=PATH_DWI, ctype=".tar") + assert ( + f"Input file ({PATH_DWI}) does not posses the required .tar extension" + in str(exc.value) + ) + + +def test_input_validator_success(): + path = input_path_validator(path=PATH_DWI) + assert path == PATH_DWI + + +def test_output_validator_ctype_invalid(): + with pytest.raises(TypeError) as exc: + path = output_path_validator(path=PATH_DWI, ctype=20) + assert "ctype variable (ctype=20) needs to be a valid string" in str(exc.value) + + +def test_output_validator_ctype_check_fail(): + with pytest.raises(FileExtensionError) as exc: + path = output_path_validator(path=PATH_DWI, ctype=".tar") + assert ( + f"Output file ({PATH_DWI}) does not posses the required .tar extension" + in str(exc.value) + ) + + +def test_output_validator_success(tmp_path): + path = output_path_validator(path=PATH_DWI, ctype=".nii") + assert path == PATH_DWI diff --git a/tests/test_preprocessing_mrinfoutil.py b/tests/test_preprocessing_mrinfoutil.py index b0739bbc..6368ff58 100644 --- a/tests/test_preprocessing_mrinfoutil.py +++ b/tests/test_preprocessing_mrinfoutil.py @@ -1,34 +1,37 @@ -import os from pathlib import Path - +from pydesigner.preprocessing import mrinfoutil import pytest -from pydesigner.preprocessing import mrinfoutil +from conftest import load_data TEST_DIR = Path(__file__).parent -PATH_DWI = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.nii") -PATH_BVEC = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.bvec") -PATH_BVAL = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.bval") -PATH_JSON = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.json") -PATH_MIF = os.path.join(TEST_DIR, "data", "hifi_splenium_mrgrid.mif") +DATA = load_data(type="hifi") +PATH_DWI = DATA["nifti"] +PATH_BVEC = DATA["bvec"] +PATH_BVAL = DATA["bval"] +PATH_JSON = DATA["json"] +PATH_MIF = DATA["mif"] def test_getconsole_error_exists(): """Tests whether function raises OSError when input is not found""" - with pytest.raises(OSError): + with pytest.raises(OSError) as exc: mrinfoutil.getconsole("nonexistentfile", "--size") + assert "Input path does not exist" in str(exc.value) def test_getconsole_error_flag_non_string(): """Tests whether function raises TypeError when flag is not a string""" - with pytest.raises(TypeError): + with pytest.raises(TypeError) as exc: mrinfoutil.getconsole(PATH_DWI, 420) + assert "Input flag is not a string" in str(exc.value) def test_getconsole_invalid_flag(): """Tests whether function raises ValueError when flag is not valid""" - with pytest.raises(OSError): + with pytest.raises(OSError) as exc: mrinfoutil.getconsole(PATH_DWI, "--foo") + assert "MRtrix error" in str(exc.value) def test_getconsole_valid_flag(): @@ -124,9 +127,25 @@ def test_multiplier_dtype(): def test_transform(): """Test whether function returns correct transform""" result = ( - ["0.994345310289832", "2.73896740248844", "08", "-0.106195121171422", "-7.16012287139893"], - ["-0.0163522207646128", "0.988073569252652", "-0.153111814252808", "-15.8305568695068"], - ["0.104928588957842", "0.153982537140822", "0.982486319790561", "-10.7536220550537"], + [ + "0.994345310289832", + "2.73896740248844", + "08", + "-0.106195121171422", + "-7.16012287139893", + ], + [ + "-0.0163522207646128", + "0.988073569252652", + "-0.153111814252808", + "-15.8305568695068", + ], + [ + "0.104928588957842", + "0.153982537140822", + "0.982486319790561", + "-10.7536220550537", + ], ["0", "0", "0", "1"], ) assert mrinfoutil.transform(PATH_DWI) == result @@ -153,8 +172,7 @@ def test_commandhistory_valid(): "/usr/local/mrtrix3/bin/dwifslpreproc -se_epi /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/B0_EPI.mif -eddy_options --repol --data_is_shelled -rpe_header -eddyqc_all /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/metrics_qc/eddy /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/3_dwi_undistorted.mif", "mrconvert -force -quiet -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.json -strides 1,2,3,4 /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwism.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/4_dwi_smoothed.mif", "mrconvert -force -quiet -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.json -strides 1,2,3,4 /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwirc.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/5_dwi_rician.mif", - "mrconvert -fslgrad /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.bvec /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.bval -json_import /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.json /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/dwi_preprocessed.nii /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif", - "mrgrid /Users/siddhiman/Datasets/IAM_HiFI/out/pydesigner/working.mif regrid -size 1,1,1 /Users/siddhiman/Repos/PyDesigner/tests/data/hifi_splenium_mrgrid.mif", + "mrconvert -json_import /Users/siddhiman/Repos/PyDesigner/tests/data/hifi_splenium_4vox.json -fslgrad /Users/siddhiman/Repos/PyDesigner/tests/data/hifi_splenium_4vox.bvec /Users/siddhiman/Repos/PyDesigner/tests/data/hifi_splenium_4vox.bval /Users/siddhiman/Repos/PyDesigner/tests/data/hifi_splenium_4vox.nii /Users/siddhiman/Repos/PyDesigner/tests/data/hifi_splenium_4vox.mif", ] assert mrinfoutil.commandhistory(PATH_MIF) == result @@ -162,3 +180,8 @@ def test_commandhistory_valid(): def test_commandhistory_dtype(): """Test whether function returns list type""" assert isinstance(mrinfoutil.commandhistory(PATH_MIF), list) + + +def test_fullsphere(): + """Test whether function returns correct full sphere""" + assert mrinfoutil.is_fullsphere(PATH_MIF) == True diff --git a/tests/test_preprocessing_mrpreproc.py b/tests/test_preprocessing_mrpreproc.py index 2a1d90ca..895be3da 100644 --- a/tests/test_preprocessing_mrpreproc.py +++ b/tests/test_preprocessing_mrpreproc.py @@ -1,9 +1,311 @@ import os -from pathlib import Path - -TEST_DIR = Path(__file__).parent -PATH_DWI = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.nii") -PATH_BVEC = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.bvec") -PATH_BVAL = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.bval") -PATH_JSON = os.path.join(TEST_DIR, "data", "hifi_splenium_4vox.json") -PATH_MIF = os.path.join(TEST_DIR, "data", "hifi_splenium_mrgrid.mif") +import nibabel as nib +import pytest +from unittest.mock import patch, MagicMock +import subprocess +from conftest import load_data + +from pydesigner.preprocessing import mrpreproc, mrinfoutil +from pydesigner.system.errors import MRTrixError + +DATA = load_data(type="hifi") +PATH_DWI = DATA["nifti"] +PATH_DWI_NO_JSON = DATA["no_json"] +PATH_DWI_NO_BVEC = DATA["no_bvec"] +PATH_DWI_NO_BVAL = DATA["no_bval"] +PATH_BVEC = DATA["bvec"] +PATH_BVAL = DATA["bval"] +PATH_JSON = DATA["json"] +PATH_MIF = DATA["mif"] + + +def test_miftonii_output_failure(tmp_path): + """Test whether function `miftonii` fails when return code is non-zero""" + output_nii = str(tmp_path / "output.nii") + output_bval = str(tmp_path / "output.bval") + output_bvec = str(tmp_path / "output.bvec") + with patch("subprocess.run") as mock_subprocess: + mock_subprocess.return_value = MagicMock(returncode=1, stderr="stderr") + with pytest.raises(MRTrixError) as exc: + mrpreproc.miftonii(PATH_MIF, output_nii) + assert "Conversion from .mif to .nii failed" in str(exc.value) + assert "stderr" in str(exc.value) + + +@pytest.mark.parametrize( + "nthreads, force, verbose", + [ + (None, None, None), + (1, None, None), + (None, True, None), + (None, False, None), + (None, None, True), + (None, None, False), + ], +) +def test_miftonii_output_success(tmp_path, nthreads, force, verbose): + """Test whether function `miftonii` generates a valid NIfTI file""" + output_nii = str(tmp_path / "output.nii") + output_bval = str(tmp_path / "output.bval") + output_bvec = str(tmp_path / "output.bvec") + mrpreproc.miftonii( + PATH_MIF, output_nii, nthreads=nthreads, force=force, verbose=verbose + ) + assert os.path.exists(output_nii) + assert os.path.exists(output_bval) + assert os.path.exists(output_bvec) + assert os.path.splitext(output_nii)[-1] == ".nii" + img = nib.load(output_nii) + assert type(img).__name__ == "Nifti1Image" + assert img.shape == (2, 2, 2, 337) + + +def test_niitomif_failure_bval(tmp_path): + """Test whether function `niitomif` fails when there is no sidecar file""" + output_mif = str(tmp_path / "output.mif") + with pytest.raises(OSError) as exc: + mrpreproc.niitomif(PATH_DWI_NO_BVAL, output_mif) + assert ( + f"Input file path ({os.path.splitext(PATH_DWI_NO_BVAL)[0]}.bval) does not exist" + in str(exc.value) + ) + + +def test_niitomif_failure_bvec(tmp_path): + """Test whether function `niitomif` fails when there is no sidecar file""" + output_mif = str(tmp_path / "output.mif") + with pytest.raises(OSError) as exc: + mrpreproc.niitomif(PATH_DWI_NO_BVEC, output_mif) + assert ( + f"Input file path ({os.path.splitext(PATH_DWI_NO_BVEC)[0]}.bvec) does not exist" + in str(exc.value) + ) + + +def test_niitomif_failure_json(tmp_path): + """Test whether function `niitomif` fails when there is no sidecar file""" + output_mif = str(tmp_path / "output.mif") + with pytest.raises(OSError) as exc: + mrpreproc.niitomif(PATH_DWI_NO_JSON, output_mif) + assert ( + f"Input file path ({os.path.splitext(PATH_DWI_NO_JSON)[0]}.json) does not exist" + in str(exc.value) + ) + + +def test_niitomif_output_failure(tmp_path): + """Test whether function `niitomif` fails when return code is non-zero""" + output_mif = str(tmp_path / "output.mif") + with patch("subprocess.run") as mock_subprocess: + mock_subprocess.return_value = MagicMock(returncode=1, stderr="stderr") + with pytest.raises(MRTrixError) as exc: + mrpreproc.niitomif(PATH_DWI, output_mif) + assert "Conversion from .nii to .mif failed" in str(exc.value) + assert "stderr" in str(exc.value) + + +@pytest.mark.parametrize( + "nthreads, force, verbose", + [ + (None, None, None), + (1, None, None), + (None, True, None), + (None, False, None), + (None, None, True), + (None, None, False), + ], +) +def test_niitomif_success(tmp_path, nthreads, force, verbose): + """Test whether function `niitomif` successfully converts a valid NifTI file to MIF""" + output_mif = str(tmp_path / "output.mif") + mrpreproc.niitomif( + PATH_DWI, output_mif, nthreads=nthreads, force=force, verbose=verbose + ) + assert os.path.exists(output_mif) + assert mrinfoutil.format(output_mif) == "MRtrix" + mrinfoutil.size(output_mif) == (2, 2, 2, 337) + assert "mrconvert" in mrinfoutil.commandhistory(output_mif)[-1] + + +def test_stride_match_output_failure(tmp_path): + """Test whether function `stride_match` fails when return code is non-zero""" + output_nii = str(tmp_path / "output.nii") + with patch("subprocess.run") as mock_subprocess: + mock_subprocess.return_value = MagicMock(returncode=1, stderr="stderr") + with pytest.raises(MRTrixError) as exc: + mrpreproc.stride_match(PATH_DWI, PATH_DWI_NO_BVAL, output_nii) + assert "Stride matching failed" in str(exc.value) + assert "stderr" in str(exc.value) + + +@pytest.mark.parametrize( + "nthreads, force, verbose", + [ + (None, None, None), + (1, None, None), + (None, True, None), + (None, False, None), + (None, None, True), + (None, None, False), + ], +) +def test_stride_match_output_success(tmp_path, nthreads, force, verbose): + """Test whether function `stride_match` fails when return code is non-zero""" + output_mif = str(tmp_path / "output.mif") + mrpreproc.stride_match( + PATH_DWI, + PATH_DWI_NO_BVAL, + output_mif, + nthreads=nthreads, + force=force, + verbose=verbose, + ) + assert os.path.exists(output_mif) + assert mrinfoutil.format(output_mif) == "MRtrix" + mrinfoutil.size(output_mif) == (2, 2, 2, 337) + assert mrinfoutil.strides(output_mif) == (1, 2, 3, 4) + assert "mrconvert" in mrinfoutil.commandhistory(output_mif)[-1] + + +def test_denoise_noisemap_invalid(tmp_path): + """Test whether function `denoise` fails when noisemap is invalid""" + output_mif = str(tmp_path / "output.mif") + with pytest.raises(TypeError) as exc: + mrpreproc.denoise(PATH_MIF, output_mif, noisemap="invalid") + assert "Please specify whether noisemap generation is True or False" in str( + exc.value + ) + + +def test_denoise_output_failure(tmp_path): + """Test whether function `stride_match` fails when return code is non-zero""" + output_mif = str(tmp_path / "output.mif") + with patch("subprocess.run") as mock_subprocess: + mock_subprocess.return_value = MagicMock(returncode=1, stderr="stderr") + with pytest.raises(MRTrixError) as exc: + mrpreproc.denoise(PATH_MIF, output_mif, noisemap=True, extent="1,1,1") + assert "Dwidenoise failed" in str(exc.value) + assert "stderr" in str(exc.value) + + +@pytest.mark.parametrize( + "nthreads, force, verbose", + [ + (None, None, None), + (1, None, None), + (None, True, None), + (None, False, None), + (None, None, True), + (None, None, False), + ], +) +def test_denoise_output_success(tmp_path, nthreads, force, verbose): + """Test whether function `denoise` successfully denoises a DWI dataset""" + output_mif = str(tmp_path / "output.mif") + noisemap_nii = str(tmp_path / "noisemap.nii") + mrpreproc.denoise( + PATH_MIF, + output_mif, + noisemap=True, + extent="1,1,1", + nthreads=nthreads, + force=force, + verbose=verbose, + ) + assert os.path.exists(output_mif) + assert os.path.exists(noisemap_nii) + assert mrinfoutil.format(output_mif) == "MRtrix" + mrinfoutil.size(output_mif) == (2, 2, 2, 337) + assert "dwidenoise" in mrinfoutil.commandhistory(output_mif)[-1] + + +def test_degibbs_output_failure(tmp_path): + """Test whether function `degibbs` fails when return code is non-zero""" + output_mif = str(tmp_path / "output.mif") + with patch("subprocess.run") as mock_subprocess: + mock_subprocess.return_value = MagicMock(returncode=1, stderr="stderr") + with pytest.raises(MRTrixError) as exc: + mrpreproc.degibbs(PATH_MIF, output_mif) + assert "Mrdegibbs failed" in str(exc.value) + assert "stderr" in str(exc.value) + + +@pytest.mark.parametrize( + "nthreads, force, verbose", + [ + (None, None, None), + (1, None, None), + (None, True, None), + (None, False, None), + (None, None, True), + (None, None, False), + ], +) +def test_degibbs_output_success(tmp_path, nthreads, force, verbose): + """Test whether function `degibbs` fails when return code is non-zero""" + output_mif = str(tmp_path / "output.mif") + mrpreproc.degibbs( + PATH_MIF, output_mif, nthreads=nthreads, force=force, verbose=verbose + ) + assert os.path.exists(output_mif) + assert mrinfoutil.format(output_mif) == "MRtrix" + mrinfoutil.size(output_mif) == (2, 2, 2, 337) + assert mrinfoutil.strides(output_mif) == (1, 2, 3, 4) + assert "mrdegibbs" in mrinfoutil.commandhistory(output_mif)[-1] + + +def test_undistort_output_failure_conversion(tmp_path): + """Test whether function `undistort` fails at gradient conversion when return code is non-zero""" + output_mif = str(tmp_path / "output.mif") + with patch("subprocess.run") as mock_subprocess: + mock_subprocess.return_value = MagicMock(returncode=1, stderr="stderr") + with pytest.raises(MRTrixError) as exc: + mrpreproc.undistort(PATH_MIF, output_mif) + assert "Extraction of FSL BVEC and BVAL gradients failed" in str(exc.value) + assert "stderr" in str(exc.value) + + +def test_undistort_output_failure_all(tmp_path): + """Test whether function `undistort` fails when final return code is non-zero""" + output_mif = str(tmp_path / "output.mif") + call_count = 0 + original_run = subprocess.run + + def subprocess_side_effect(*args, **kwargs): + nonlocal call_count + call_count += 1 + if call_count == 6: + return MagicMock(returncode=1, stderr="stderr") + else: + with patch("subprocess.run", original_run): + return original_run(*args, **kwargs) + + with patch("subprocess.run", side_effect=subprocess_side_effect) as mock_subprocess: + with pytest.raises(MRTrixError) as exc: + mrpreproc.undistort(PATH_MIF, output_mif, epib0=0) + assert "Dwifslpreproc failed" in str(exc.value) + assert "stderr" in str(exc.value) + + +# def test_undistort_output_success(tmp_path): +# """Test whether function `undistort` successfully undistorts a DWI dataset""" +# output_mif = str(tmp_path / "output.mif") +# mrpreproc.undistort(PATH_MIF, output_mif, epib0=0) +# assert os.path.exists(output_mif) +# assert mrinfoutil.format(output_mif) == "MRtrix" +# mrinfoutil.size(output_mif) == (2, 2, 2, 337) +# assert mrinfoutil.strides(output_mif) == (1, 2, 3, 4) +# assert "dwifslpreproc" in mrinfoutil.commandhistory(output_mif)[-1] + + +# def test_brainmask_output_failure(tmp_path): +# """Test whether function `undistort` fails when return code is non-zero""" +# output_nii = str(tmp_path / "output.nii") +# with patch("subprocess.run") as mock_subprocess: +# mock_subprocess.return_value = MagicMock( +# returncode=1, stderr="stderr" +# ) +# with pytest.raises(MRTrixError) as exc: +# mrpreproc.brainmask(PATH_MIF, output_nii) +# assert f"Unable to compute brain mask from B0" in str(exc.value) +# assert "stderr" in str(exc.value)