diff --git a/.github/workflows/neurodock.yml b/.github/workflows/neurodock.yml new file mode 100644 index 00000000..a1741bf9 --- /dev/null +++ b/.github/workflows/neurodock.yml @@ -0,0 +1,58 @@ +name: Docker Build and Publish + +on: + push: + branches: + - master + tags: + - "**" + +jobs: + 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..20a747f5 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: 'v4.6.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.29.2' hooks: - id: check-readthedocs @@ -18,20 +18,25 @@ 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/psf/black +# rev: '24.4.2' +# hooks: +# - id: black - repo: https://github.com/astral-sh/ruff-pre-commit - rev: 'v0.1.0' + rev: 'v0.6.4' 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..d619a632 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.11:9b5fdb22 AS base +SHELL ["/bin/bash", "-euxo", "pipefail", "-c"] # 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 +WORKDIR /src +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/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/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..42069511 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,15 @@ -# 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.2 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, + {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, +] [[package]] name = "clarabel" @@ -34,132 +45,150 @@ files = [ [[package]] name = "contourpy" -version = "1.1.0" +version = "1.2.0" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, + {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, + {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, + {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, + {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, + {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, + {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, + {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, + {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, + {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, + {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, ] [package.dependencies] -numpy = ">=1.16" +numpy = ">=1.20,<2.0" [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.6.1)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "wurlitzer"] +test-no-images = ["pytest", "pytest-cov", "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.1" +description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" 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.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, + {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, + {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, + {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, + {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, + {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, + {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, + {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, + {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, + {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, + {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, + {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, + {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, + {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, + {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, + {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, + {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, + {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, ] -[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" @@ -234,6 +263,91 @@ files = [ docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] tests = ["pytest", "pytest-cov", "pytest-xdist"] +[[package]] +name = "cython" +version = "3.0.8" +description = "The Cython compiler for writing C extensions in the Python language." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Cython-3.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a846e0a38e2b24e9a5c5dc74b0e54c6e29420d88d1dafabc99e0fc0f3e338636"}, + {file = "Cython-3.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45523fdc2b78d79b32834cc1cc12dc2ca8967af87e22a3ee1bff20e77c7f5520"}, + {file = "Cython-3.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa0b7f3f841fe087410cab66778e2d3fb20ae2d2078a2be3dffe66c6574be39"}, + {file = "Cython-3.0.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e87294e33e40c289c77a135f491cd721bd089f193f956f7b8ed5aa2d0b8c558f"}, + {file = "Cython-3.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a1df7a129344b1215c20096d33c00193437df1a8fcca25b71f17c23b1a44f782"}, + {file = "Cython-3.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:13c2a5e57a0358da467d97667297bf820b62a1a87ae47c5f87938b9bb593acbd"}, + {file = "Cython-3.0.8-cp310-cp310-win32.whl", hash = "sha256:96b028f044f5880e3cb18ecdcfc6c8d3ce9d0af28418d5ab464509f26d8adf12"}, + {file = "Cython-3.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:8140597a8b5cc4f119a1190f5a2228a84f5ca6d8d9ec386cfce24663f48b2539"}, + {file = "Cython-3.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aae26f9663e50caf9657148403d9874eea41770ecdd6caf381d177c2b1bb82ba"}, + {file = "Cython-3.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:547eb3cdb2f8c6f48e6865d5a741d9dd051c25b3ce076fbca571727977b28ac3"}, + {file = "Cython-3.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a567d4b9ba70b26db89d75b243529de9e649a2f56384287533cf91512705bee"}, + {file = "Cython-3.0.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51d1426263b0e82fb22bda8ea60dc77a428581cc19e97741011b938445d383f1"}, + {file = "Cython-3.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c26daaeccda072459b48d211415fd1e5507c06bcd976fa0d5b8b9f1063467d7b"}, + {file = "Cython-3.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:289ce7838208211cd166e975865fd73b0649bf118170b6cebaedfbdaf4a37795"}, + {file = "Cython-3.0.8-cp311-cp311-win32.whl", hash = "sha256:c8aa05f5e17f8042a3be052c24f2edc013fb8af874b0bf76907d16c51b4e7871"}, + {file = "Cython-3.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:000dc9e135d0eec6ecb2b40a5b02d0868a2f8d2e027a41b0fe16a908a9e6de02"}, + {file = "Cython-3.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:90d3fe31db55685d8cb97d43b0ec39ef614fcf660f83c77ed06aa670cb0e164f"}, + {file = "Cython-3.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e24791ddae2324e88e3c902a765595c738f19ae34ee66bfb1a6dac54b1833419"}, + {file = "Cython-3.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f020fa1c0552052e0660790b8153b79e3fc9a15dbd8f1d0b841fe5d204a6ae6"}, + {file = "Cython-3.0.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18bfa387d7a7f77d7b2526af69a65dbd0b731b8d941aaff5becff8e21f6d7717"}, + {file = "Cython-3.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fe81b339cffd87c0069c6049b4d33e28bdd1874625ee515785bf42c9fdff3658"}, + {file = "Cython-3.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:80fd94c076e1e1b1ee40a309be03080b75f413e8997cddcf401a118879863388"}, + {file = "Cython-3.0.8-cp312-cp312-win32.whl", hash = "sha256:85077915a93e359a9b920280d214dc0cf8a62773e1f3d7d30fab8ea4daed670c"}, + {file = "Cython-3.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:0cb2dcc565c7851f75d496f724a384a790fab12d1b82461b663e66605bec429a"}, + {file = "Cython-3.0.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:870d2a0a7e3cbd5efa65aecdb38d715ea337a904ea7bb22324036e78fb7068e7"}, + {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e8f2454128974905258d86534f4fd4f91d2f1343605657ecab779d80c9d6d5e"}, + {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1949d6aa7bc792554bee2b67a9fe41008acbfe22f4f8df7b6ec7b799613a4b3"}, + {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9f2c6e1b8f3bcd6cb230bac1843f85114780bb8be8614855b1628b36bb510e0"}, + {file = "Cython-3.0.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:05d7eddc668ae7993643f32c7661f25544e791edb745758672ea5b1a82ecffa6"}, + {file = "Cython-3.0.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bfabe115deef4ada5d23c87bddb11289123336dcc14347011832c07db616dd93"}, + {file = "Cython-3.0.8-cp36-cp36m-win32.whl", hash = "sha256:0c38c9f0bcce2df0c3347285863621be904ac6b64c5792d871130569d893efd7"}, + {file = "Cython-3.0.8-cp36-cp36m-win_amd64.whl", hash = "sha256:6c46939c3983217d140999de7c238c3141f56b1ea349e47ca49cae899969aa2c"}, + {file = "Cython-3.0.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:115f0a50f752da6c99941b103b5cb090da63eb206abbc7c2ad33856ffc73f064"}, + {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c0f29246734561c90f36e70ed0506b61aa3d044e4cc4cba559065a2a741fae"}, + {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ab75242869ff71e5665fe5c96f3378e79e792fa3c11762641b6c5afbbbbe026"}, + {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6717c06e9cfc6c1df18543cd31a21f5d8e378a40f70c851fa2d34f0597037abc"}, + {file = "Cython-3.0.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9d3f74388db378a3c6fd06e79a809ed98df3f56484d317b81ee762dbf3c263e0"}, + {file = "Cython-3.0.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae7ac561fd8253a9ae96311e91d12af5f701383564edc11d6338a7b60b285a6f"}, + {file = "Cython-3.0.8-cp37-cp37m-win32.whl", hash = "sha256:97b2a45845b993304f1799664fa88da676ee19442b15fdcaa31f9da7e1acc434"}, + {file = "Cython-3.0.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9e2be2b340fea46fb849d378f9b80d3c08ff2e81e2bfbcdb656e2e3cd8c6b2dc"}, + {file = "Cython-3.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2cde23c555470db3f149ede78b518e8274853745289c956a0e06ad8d982e4db9"}, + {file = "Cython-3.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7990ca127e1f1beedaf8fc8bf66541d066ef4723ad7d8d47a7cbf842e0f47580"}, + {file = "Cython-3.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b983c8e6803f016146c26854d9150ddad5662960c804ea7f0c752c9266752f0"}, + {file = "Cython-3.0.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a973268d7ca1a2bdf78575e459a94a78e1a0a9bb62a7db0c50041949a73b02ff"}, + {file = "Cython-3.0.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:61a237bc9dd23c7faef0fcfce88c11c65d0c9bb73c74ccfa408b3a012073c20e"}, + {file = "Cython-3.0.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3a3d67f079598af49e90ff9655bf85bd358f093d727eb21ca2708f467c489cae"}, + {file = "Cython-3.0.8-cp38-cp38-win32.whl", hash = "sha256:17a642bb01a693e34c914106566f59844b4461665066613913463a719e0dd15d"}, + {file = "Cython-3.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:2cdfc32252f3b6dc7c94032ab744dcedb45286733443c294d8f909a4854e7f83"}, + {file = "Cython-3.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa97893d99385386925d00074654aeae3a98867f298d1e12ceaf38a9054a9bae"}, + {file = "Cython-3.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05c0bf9d085c031df8f583f0d506aa3be1692023de18c45d0aaf78685bbb944"}, + {file = "Cython-3.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de892422582f5758bd8de187e98ac829330ec1007bc42c661f687792999988a7"}, + {file = "Cython-3.0.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:314f2355a1f1d06e3c431eaad4708cf10037b5e91e4b231d89c913989d0bdafd"}, + {file = "Cython-3.0.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:78825a3774211e7d5089730f00cdf7f473042acc9ceb8b9eeebe13ed3a5541de"}, + {file = "Cython-3.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df8093deabc55f37028190cf5e575c26aad23fc673f34b85d5f45076bc37ce39"}, + {file = "Cython-3.0.8-cp39-cp39-win32.whl", hash = "sha256:1aca1b97e0095b3a9a6c33eada3f661a4ed0d499067d121239b193e5ba3bb4f0"}, + {file = "Cython-3.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:16873d78be63bd38ffb759da7ab82814b36f56c769ee02b1d5859560e4c3ac3c"}, + {file = "Cython-3.0.8-py2.py3-none-any.whl", hash = "sha256:171b27051253d3f9108e9759e504ba59ff06e7f7ba944457f94deaf9c21bf0b6"}, + {file = "Cython-3.0.8.tar.gz", hash = "sha256:8333423d8fd5765e7cceea3a9985dd1e0a5dfeb2734629e1a2ed2d6233d39de6"}, +] + +[[package]] +name = "deepdiff" +version = "6.7.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.7" +files = [ + {file = "deepdiff-6.7.1-py3-none-any.whl", hash = "sha256:58396bb7a863cbb4ed5193f548c56f18218060362311aa1dc36397b2f25108bd"}, + {file = "deepdiff-6.7.1.tar.gz", hash = "sha256:b367e6fa6caac1c9f500adc79ada1b5b1242c50d5f716a1a4362030197847d30"}, +] + +[package.dependencies] +ordered-set = ">=4.0.2,<4.2.0" + +[package.extras] +cli = ["click (==8.1.3)", "pyyaml (==6.0.1)"] +optimize = ["orjson"] + [[package]] name = "dill" version = "0.3.7" @@ -250,43 +364,58 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "dipy" -version = "1.7.0" -description = "Diffusion MRI utilities in python" +version = "1.8.0" +description = "Diffusion MRI Imaging in Python" optional = false -python-versions = ">= 3.6" +python-versions = ">=3.8" 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.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:73ed2a3f61f0ce7b6ccd6bac077c74e1d22e83821435b7db08484081ad54c35e"}, + {file = "dipy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0bb763b773745d1fb49118a5c15cf5d672097e0dd1ab92046387cca17675a5a1"}, + {file = "dipy-1.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b03824d44dd4d1c02e593f7464d40591e96f79fb9e22bb07462d369d3391909f"}, + {file = "dipy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:335383d87206cc5a86119352e323e3ccda7e459f2297672dbdfdb34186564f58"}, + {file = "dipy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:a59dbaa1dd20aa17f81b28a624efe4a77d83c998e033c981c99bbe11bf23eefc"}, + {file = "dipy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8095377f4f13d0e33e564d28fd4a1556935ce4c34e754545c2e57d2a636b04aa"}, + {file = "dipy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:875fd4caac15a48b1304e22f9411ebd2df867a5bea2f90dfd81ebe2ef0d8c0d5"}, + {file = "dipy-1.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:355a7b521b84b20d707893cc280666490d79c513fdc97859a1e1072d34cda1e7"}, + {file = "dipy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ba7d8a4645c66f9fa6a65ddb794e7d8ccfe79f447dfbde74b4a6dc3d9fb872"}, + {file = "dipy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:e2984d4058e294584510119605e802e2a5fa4aed5b3c5435c02d3d1245ba9610"}, + {file = "dipy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:37cb73c27f346b868d67c35140a0a9b54268fa564df495e90e266c64c08fb487"}, + {file = "dipy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bfdb7c4247db24362fee942d2ad2cbaecf4ce7dd77b67e468e9f4271fe913d14"}, + {file = "dipy-1.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9c18f87eacaca27a2bf9f0b24691bc28b8e38bc1315ebb191ea209e7c4a4dad"}, + {file = "dipy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55cd4beb24a973079069d64fff1fd73e1b91d6f03d124798a6b256a96f0f2fbb"}, + {file = "dipy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:fafbb3f4593f379e88848b4ca699e22903eb516191b140c3356ba9041059223b"}, + {file = "dipy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ea3075643a81a0af1367886c58c28dfbc7e5a5ef500f4724345885be9990f8ac"}, + {file = "dipy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5430b48941992b0e23b95933fe13423e67acfe234cc924a56d909f81a3a80ea3"}, + {file = "dipy-1.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cf0910fece4b77432b38e8a4e9e5cdaaf1a27c7b043f4504c46c9436962efa4"}, + {file = "dipy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:238d96379539861977998f3289bd5625189727aac61e147d812652a97e4ce28b"}, + {file = "dipy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:7e14db9fed595f236763e9f14bc7f9bc3e02de05188d2f26397cf1e8d0764ccf"}, + {file = "dipy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1f9f3c5458ebb2e4d2f1a637c9e63bda5cf290e55ef4ef6c57fa0c3cf241f877"}, + {file = "dipy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2b6198f7b27337a5b5eea43f78351065613162ffd5e848907a8ca16c85444d8"}, + {file = "dipy-1.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5e48614f6ea0babad00989f8a4da1b3e8659d10f25ba82af79db770b2c63596"}, + {file = "dipy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:442cba11e27ef8edb0b83c08cb75ec244b4929e106da5d171cb661f9ce61b1dc"}, + {file = "dipy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e343d959a69787c0db25a772a46efcf632534c26e5fa8597bef26ddf9c31caa8"}, + {file = "dipy-1.8.0.tar.gz", hash = "sha256:cc3845585b6ccd5d7bf43094d52a00eb73111072eee36c2149fabdb1b071f008"}, ] [package.dependencies] -h5py = ">=2.8.0" +cython = ">=0.29.24,<0.29.29 || >0.29.29" +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.32)", "build", "meson-python (>=0.13)", "ninja", "numpy (>=1.22)", "packaging (>=21)", "setuptools (>=67)", "spin (>=0.5)", "wheel"] +doc = ["Jinja2", "grg-sphinx-theme (>=0.2.0)", "numpydoc", "sphinx (>=5.3,<6.0)", "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", "tensorflow-addons"] +style = ["flake8", "isort"] +test = ["asv", "codecov", "coverage", "coveralls", "pytest"] +viz = ["fury (>=0.9.0)", "matplotlib"] [[package]] name = "ecos" @@ -317,61 +446,75 @@ files = [ numpy = ">=1.6" scipy = ">=0.9" +[[package]] +name = "execnet" +version = "2.1.1" +description = "execnet: rapid multi-Python deployment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, + {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, +] + +[package.extras] +testing = ["hatch", "pre-commit", "pytest", "tox"] + [[package]] name = "fonttools" -version = "4.43.1" +version = "4.47.2" 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.47.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b629108351d25512d4ea1a8393a2dba325b7b7d7308116b605ea3f8e1be88df"}, + {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c19044256c44fe299d9a73456aabee4b4d06c6b930287be93b533b4737d70aa1"}, + {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8be28c036b9f186e8c7eaf8a11b42373e7e4949f9e9f370202b9da4c4c3f56c"}, + {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f83a4daef6d2a202acb9bf572958f91cfde5b10c8ee7fb1d09a4c81e5d851fd8"}, + {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5a5318ba5365d992666ac4fe35365f93004109d18858a3e18ae46f67907670"}, + {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f57ecd742545362a0f7186774b2d1c53423ed9ece67689c93a1055b236f638c"}, + {file = "fonttools-4.47.2-cp310-cp310-win32.whl", hash = "sha256:a1c154bb85dc9a4cf145250c88d112d88eb414bad81d4cb524d06258dea1bdc0"}, + {file = "fonttools-4.47.2-cp310-cp310-win_amd64.whl", hash = "sha256:3e2b95dce2ead58fb12524d0ca7d63a63459dd489e7e5838c3cd53557f8933e1"}, + {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29495d6d109cdbabe73cfb6f419ce67080c3ef9ea1e08d5750240fd4b0c4763b"}, + {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0a1d313a415eaaba2b35d6cd33536560deeebd2ed758b9bfb89ab5d97dc5deac"}, + {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f898cdd67f52f18049250a6474185ef6544c91f27a7bee70d87d77a8daf89c"}, + {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3480eeb52770ff75140fe7d9a2ec33fb67b07efea0ab5129c7e0c6a639c40c70"}, + {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0255dbc128fee75fb9be364806b940ed450dd6838672a150d501ee86523ac61e"}, + {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f791446ff297fd5f1e2247c188de53c1bfb9dd7f0549eba55b73a3c2087a2703"}, + {file = "fonttools-4.47.2-cp311-cp311-win32.whl", hash = "sha256:740947906590a878a4bde7dd748e85fefa4d470a268b964748403b3ab2aeed6c"}, + {file = "fonttools-4.47.2-cp311-cp311-win_amd64.whl", hash = "sha256:63fbed184979f09a65aa9c88b395ca539c94287ba3a364517698462e13e457c9"}, + {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4ec558c543609e71b2275c4894e93493f65d2f41c15fe1d089080c1d0bb4d635"}, + {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e040f905d542362e07e72e03612a6270c33d38281fd573160e1003e43718d68d"}, + {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd58cc03016b281bd2c74c84cdaa6bd3ce54c5a7f47478b7657b930ac3ed8eb"}, + {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32ab2e9702dff0dd4510c7bb958f265a8d3dd5c0e2547e7b5f7a3df4979abb07"}, + {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a808f3c1d1df1f5bf39be869b6e0c263570cdafb5bdb2df66087733f566ea71"}, + {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac71e2e201df041a2891067dc36256755b1229ae167edbdc419b16da78732c2f"}, + {file = "fonttools-4.47.2-cp312-cp312-win32.whl", hash = "sha256:69731e8bea0578b3c28fdb43dbf95b9386e2d49a399e9a4ad736b8e479b08085"}, + {file = "fonttools-4.47.2-cp312-cp312-win_amd64.whl", hash = "sha256:b3e1304e5f19ca861d86a72218ecce68f391646d85c851742d265787f55457a4"}, + {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:254d9a6f7be00212bf0c3159e0a420eb19c63793b2c05e049eb337f3023c5ecc"}, + {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eabae77a07c41ae0b35184894202305c3ad211a93b2eb53837c2a1143c8bc952"}, + {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86a5ab2873ed2575d0fcdf1828143cfc6b977ac448e3dc616bb1e3d20efbafa"}, + {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13819db8445a0cec8c3ff5f243af6418ab19175072a9a92f6cc8ca7d1452754b"}, + {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4e743935139aa485fe3253fc33fe467eab6ea42583fa681223ea3f1a93dd01e6"}, + {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d49ce3ea7b7173faebc5664872243b40cf88814ca3eb135c4a3cdff66af71946"}, + {file = "fonttools-4.47.2-cp38-cp38-win32.whl", hash = "sha256:94208ea750e3f96e267f394d5588579bb64cc628e321dbb1d4243ffbc291b18b"}, + {file = "fonttools-4.47.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f750037e02beb8b3569fbff701a572e62a685d2a0e840d75816592280e5feae"}, + {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d71606c9321f6701642bd4746f99b6089e53d7e9817fc6b964e90d9c5f0ecc6"}, + {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e0427864c6c91cf77f16d1fb9bf1bbf7453e824589e8fb8461b6ee1144f506"}, + {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a00bd0e68e88987dcc047ea31c26d40a3c61185153b03457956a87e39d43c37"}, + {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d77479fb885ef38a16a253a2f4096bc3d14e63a56d6246bfdb56365a12b20c"}, + {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5465df494f20a7d01712b072ae3ee9ad2887004701b95cb2cc6dcb9c2c97a899"}, + {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4c811d3c73b6abac275babb8aa439206288f56fdb2c6f8835e3d7b70de8937a7"}, + {file = "fonttools-4.47.2-cp39-cp39-win32.whl", hash = "sha256:5b60e3afa9635e3dfd3ace2757039593e3bd3cf128be0ddb7a1ff4ac45fa5a50"}, + {file = "fonttools-4.47.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ee48bd9d6b7e8f66866c9090807e3a4a56cf43ffad48962725a190e0dd774c8"}, + {file = "fonttools-4.47.2-py3-none-any.whl", hash = "sha256:7eb7ad665258fba68fd22228a09f347469d95a97fb88198e133595947a20a184"}, + {file = "fonttools-4.47.2.tar.gz", hash = "sha256:7df26dd3650e98ca45f1e29883c96a0b9f5bb6af8d632a6a108bc744fa0bd9b3"}, ] [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,<5)", "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"] +interpolatable = ["munkres", "pycairo", "scipy"] lxml = ["lxml (>=4.0,<5)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] @@ -379,7 +522,7 @@ 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]] @@ -556,52 +699,51 @@ files = [ [[package]] name = "matplotlib" -version = "3.8.0" +version = "3.8.2" description = "Python plotting package" optional = false python-versions = ">=3.9" 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.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, + {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, + {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, + {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, + {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, + {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, + {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, + {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, + {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, + {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, + {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, + {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, + {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, + {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, + {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, + {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, + {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, + {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, + {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, + {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, + {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, + {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, + {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, + {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, + {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, ] [package.dependencies] contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" -kiwisolver = ">=1.0.1" +kiwisolver = ">=1.3.1" numpy = ">=1.21,<2" packaging = ">=20.0" -pillow = ">=6.2.0" +pillow = ">=8" pyparsing = ">=2.3.1" python-dateutil = ">=2.7" -setuptools_scm = ">=7" [[package]] name = "multiprocess" @@ -633,67 +775,92 @@ dill = ">=0.3.7" [[package]] name = "nibabel" -version = "5.1.0" +version = "5.2.0" description = "Access a multitude of neuroimaging data formats" optional = false python-versions = ">=3.8" 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.2.0-py3-none-any.whl", hash = "sha256:77724af6e29fd9c4173702e4d031e7d8c45b5963887905a0f90edab880381b7f"}, + {file = "nibabel-5.2.0.tar.gz", hash = "sha256:3df8f1ab981d1bd92f4331d565528d126ab9717fdbd4cfe68f43fcd1c2bf3f52"}, ] [package.dependencies] -numpy = ">=1.19" +numpy = ">=1.20" packaging = ">=17" [package.extras] -all = ["nibabel[dev,dicomfs,doc,minc2,spm,style,test,zstd]"] -dev = ["gitpython", "nibabel[style]", "twine"] +all = ["nibabel[dicomfs,minc2,spm,zstd]"] +dev = ["tox"] 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]"] +doc = ["matplotlib (>=1.5.3)", "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 = ["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.3" 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.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, + {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, + {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, + {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, + {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, + {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, + {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, + {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, + {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, + {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, + {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, + {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, + {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, + {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, + {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, + {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, + {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, + {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, + {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, + {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, + {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, + {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, + {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, + {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, + {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, + {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, + {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, + {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, + {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, + {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, + {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, + {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, + {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, ] +[[package]] +name = "ordered-set" +version = "4.1.0" +description = "An OrderedSet is a custom MutableSet that remembers its order, so that every" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8"}, + {file = "ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562"}, +] + +[package.extras] +dev = ["black", "mypy", "pytest"] + [[package]] name = "osqp" version = "0.6.3" @@ -746,70 +913,88 @@ files = [ [[package]] name = "pillow" -version = "10.0.1" +version = "10.2.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" 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-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "pluggy" @@ -840,6 +1025,116 @@ files = [ [package.extras] global = ["pybind11-global (==2.11.1)"] +[[package]] +name = "pydantic" +version = "2.7.0" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.7.0-py3-none-any.whl", hash = "sha256:9dee74a271705f14f9a1567671d144a851c675b072736f0a7b2608fd9e495352"}, + {file = "pydantic-2.7.0.tar.gz", hash = "sha256:b5ecdd42262ca2462e2624793551e80911a1e989f462910bb81aef974b4bb383"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.18.1" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.18.1" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ee9cf33e7fe14243f5ca6977658eb7d1042caaa66847daacbd2117adb258b226"}, + {file = "pydantic_core-2.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b7bbb97d82659ac8b37450c60ff2e9f97e4eb0f8a8a3645a5568b9334b08b50"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4249b579e75094f7e9bb4bd28231acf55e308bf686b952f43100a5a0be394c"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0491006a6ad20507aec2be72e7831a42efc93193d2402018007ff827dc62926"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ae80f72bb7a3e397ab37b53a2b49c62cc5496412e71bc4f1277620a7ce3f52b"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58aca931bef83217fca7a390e0486ae327c4af9c3e941adb75f8772f8eeb03a1"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1be91ad664fc9245404a789d60cba1e91c26b1454ba136d2a1bf0c2ac0c0505a"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:667880321e916a8920ef49f5d50e7983792cf59f3b6079f3c9dac2b88a311d17"}, + {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f7054fdc556f5421f01e39cbb767d5ec5c1139ea98c3e5b350e02e62201740c7"}, + {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:030e4f9516f9947f38179249778709a460a3adb516bf39b5eb9066fcfe43d0e6"}, + {file = "pydantic_core-2.18.1-cp310-none-win32.whl", hash = "sha256:2e91711e36e229978d92642bfc3546333a9127ecebb3f2761372e096395fc649"}, + {file = "pydantic_core-2.18.1-cp310-none-win_amd64.whl", hash = "sha256:9a29726f91c6cb390b3c2338f0df5cd3e216ad7a938762d11c994bb37552edb0"}, + {file = "pydantic_core-2.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9ece8a49696669d483d206b4474c367852c44815fca23ac4e48b72b339807f80"}, + {file = "pydantic_core-2.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a5d83efc109ceddb99abd2c1316298ced2adb4570410defe766851a804fcd5b"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7973c381283783cd1043a8c8f61ea5ce7a3a58b0369f0ee0ee975eaf2f2a1b"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54c7375c62190a7845091f521add19b0f026bcf6ae674bdb89f296972272e86d"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd63cec4e26e790b70544ae5cc48d11b515b09e05fdd5eff12e3195f54b8a586"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:561cf62c8a3498406495cfc49eee086ed2bb186d08bcc65812b75fda42c38294"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68717c38a68e37af87c4da20e08f3e27d7e4212e99e96c3d875fbf3f4812abfc"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d5728e93d28a3c63ee513d9ffbac9c5989de8c76e049dbcb5bfe4b923a9739d"}, + {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f0f17814c505f07806e22b28856c59ac80cee7dd0fbb152aed273e116378f519"}, + {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d816f44a51ba5175394bc6c7879ca0bd2be560b2c9e9f3411ef3a4cbe644c2e9"}, + {file = "pydantic_core-2.18.1-cp311-none-win32.whl", hash = "sha256:09f03dfc0ef8c22622eaa8608caa4a1e189cfb83ce847045eca34f690895eccb"}, + {file = "pydantic_core-2.18.1-cp311-none-win_amd64.whl", hash = "sha256:27f1009dc292f3b7ca77feb3571c537276b9aad5dd4efb471ac88a8bd09024e9"}, + {file = "pydantic_core-2.18.1-cp311-none-win_arm64.whl", hash = "sha256:48dd883db92e92519201f2b01cafa881e5f7125666141a49ffba8b9facc072b0"}, + {file = "pydantic_core-2.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b6b0e4912030c6f28bcb72b9ebe4989d6dc2eebcd2a9cdc35fefc38052dd4fe8"}, + {file = "pydantic_core-2.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3202a429fe825b699c57892d4371c74cc3456d8d71b7f35d6028c96dfecad31"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3982b0a32d0a88b3907e4b0dc36809fda477f0757c59a505d4e9b455f384b8b"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25595ac311f20e5324d1941909b0d12933f1fd2171075fcff763e90f43e92a0d"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14fe73881cf8e4cbdaded8ca0aa671635b597e42447fec7060d0868b52d074e6"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca976884ce34070799e4dfc6fbd68cb1d181db1eefe4a3a94798ddfb34b8867f"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684d840d2c9ec5de9cb397fcb3f36d5ebb6fa0d94734f9886032dd796c1ead06"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:54764c083bbe0264f0f746cefcded6cb08fbbaaf1ad1d78fb8a4c30cff999a90"}, + {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:201713f2f462e5c015b343e86e68bd8a530a4f76609b33d8f0ec65d2b921712a"}, + {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd1a9edb9dd9d79fbeac1ea1f9a8dd527a6113b18d2e9bcc0d541d308dae639b"}, + {file = "pydantic_core-2.18.1-cp312-none-win32.whl", hash = "sha256:d5e6b7155b8197b329dc787356cfd2684c9d6a6b1a197f6bbf45f5555a98d411"}, + {file = "pydantic_core-2.18.1-cp312-none-win_amd64.whl", hash = "sha256:9376d83d686ec62e8b19c0ac3bf8d28d8a5981d0df290196fb6ef24d8a26f0d6"}, + {file = "pydantic_core-2.18.1-cp312-none-win_arm64.whl", hash = "sha256:c562b49c96906b4029b5685075fe1ebd3b5cc2601dfa0b9e16c2c09d6cbce048"}, + {file = "pydantic_core-2.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3e352f0191d99fe617371096845070dee295444979efb8f27ad941227de6ad09"}, + {file = "pydantic_core-2.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0295d52b012cbe0d3059b1dba99159c3be55e632aae1999ab74ae2bd86a33d7"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56823a92075780582d1ffd4489a2e61d56fd3ebb4b40b713d63f96dd92d28144"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd3f79e17b56741b5177bcc36307750d50ea0698df6aa82f69c7db32d968c1c2"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38a5024de321d672a132b1834a66eeb7931959c59964b777e8f32dbe9523f6b1"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ce426ee691319d4767748c8e0895cfc56593d725594e415f274059bcf3cb76"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2adaeea59849ec0939af5c5d476935f2bab4b7f0335b0110f0f069a41024278e"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b6431559676a1079eac0f52d6d0721fb8e3c5ba43c37bc537c8c83724031feb"}, + {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:85233abb44bc18d16e72dc05bf13848a36f363f83757541f1a97db2f8d58cfd9"}, + {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:641a018af4fe48be57a2b3d7a1f0f5dbca07c1d00951d3d7463f0ac9dac66622"}, + {file = "pydantic_core-2.18.1-cp38-none-win32.whl", hash = "sha256:63d7523cd95d2fde0d28dc42968ac731b5bb1e516cc56b93a50ab293f4daeaad"}, + {file = "pydantic_core-2.18.1-cp38-none-win_amd64.whl", hash = "sha256:907a4d7720abfcb1c81619863efd47c8a85d26a257a2dbebdb87c3b847df0278"}, + {file = "pydantic_core-2.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aad17e462f42ddbef5984d70c40bfc4146c322a2da79715932cd8976317054de"}, + {file = "pydantic_core-2.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94b9769ba435b598b547c762184bcfc4783d0d4c7771b04a3b45775c3589ca44"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e0e57cc704a52fb1b48f16d5b2c8818da087dbee6f98d9bf19546930dc64b5"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76b86e24039c35280ceee6dce7e62945eb93a5175d43689ba98360ab31eebc4a"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a05db5013ec0ca4a32cc6433f53faa2a014ec364031408540ba858c2172bb0"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:250ae39445cb5475e483a36b1061af1bc233de3e9ad0f4f76a71b66231b07f88"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a32204489259786a923e02990249c65b0f17235073149d0033efcebe80095570"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6395a4435fa26519fd96fdccb77e9d00ddae9dd6c742309bd0b5610609ad7fb2"}, + {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2533ad2883f001efa72f3d0e733fb846710c3af6dcdd544fe5bf14fa5fe2d7db"}, + {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b560b72ed4816aee52783c66854d96157fd8175631f01ef58e894cc57c84f0f6"}, + {file = "pydantic_core-2.18.1-cp39-none-win32.whl", hash = "sha256:582cf2cead97c9e382a7f4d3b744cf0ef1a6e815e44d3aa81af3ad98762f5a9b"}, + {file = "pydantic_core-2.18.1-cp39-none-win_amd64.whl", hash = "sha256:ca71d501629d1fa50ea7fa3b08ba884fe10cefc559f5c6c8dfe9036c16e8ae89"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e178e5b66a06ec5bf51668ec0d4ac8cfb2bdcb553b2c207d58148340efd00143"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:72722ce529a76a4637a60be18bd789d8fb871e84472490ed7ddff62d5fed620d"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe0c1ce5b129455e43f941f7a46f61f3d3861e571f2905d55cdbb8b5c6f5e2c"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4284c621f06a72ce2cb55f74ea3150113d926a6eb78ab38340c08f770eb9b4d"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a0c3e718f4e064efde68092d9d974e39572c14e56726ecfaeebbe6544521f47"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2027493cc44c23b598cfaf200936110433d9caa84e2c6cf487a83999638a96ac"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:76909849d1a6bffa5a07742294f3fa1d357dc917cb1fe7b470afbc3a7579d539"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ee7ccc7fb7e921d767f853b47814c3048c7de536663e82fbc37f5eb0d532224b"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ee2794111c188548a4547eccc73a6a8527fe2af6cf25e1a4ebda2fd01cdd2e60"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a139fe9f298dc097349fb4f28c8b81cc7a202dbfba66af0e14be5cfca4ef7ce5"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d074b07a10c391fc5bbdcb37b2f16f20fcd9e51e10d01652ab298c0d07908ee2"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c69567ddbac186e8c0aadc1f324a60a564cfe25e43ef2ce81bcc4b8c3abffbae"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:baf1c7b78cddb5af00971ad5294a4583188bda1495b13760d9f03c9483bb6203"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2684a94fdfd1b146ff10689c6e4e815f6a01141781c493b97342cdc5b06f4d5d"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:73c1bc8a86a5c9e8721a088df234265317692d0b5cd9e86e975ce3bc3db62a59"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60defc3c15defb70bb38dd605ff7e0fae5f6c9c7cbfe0ad7868582cb7e844a6"}, + {file = "pydantic_core-2.18.1.tar.gz", hash = "sha256:de9d3e8717560eb05e28739d1b35e4eac2e458553a52a301e51352a7ffc86a35"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + [[package]] name = "pyparsing" version = "3.1.1" @@ -856,13 +1151,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,6 +1169,44 @@ 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" @@ -922,84 +1255,92 @@ scipy = ">=0.13.2" [[package]] name = "scipy" -version = "1.9.3" +version = "1.11.4" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc9a714581f561af0848e6b69947fda0614915f072dfd14142ed1bfe1b806710"}, + {file = "scipy-1.11.4-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:cf00bd2b1b0211888d4dc75656c0412213a8b25e80d73898083f402b50f47e41"}, + {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9999c008ccf00e8fbcce1236f85ade5c569d13144f77a1946bef8863e8f6eb4"}, + {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:933baf588daa8dc9a92c20a0be32f56d43faf3d1a60ab11b3f08c356430f6e56"}, + {file = "scipy-1.11.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8fce70f39076a5aa62e92e69a7f62349f9574d8405c0a5de6ed3ef72de07f446"}, + {file = "scipy-1.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:6550466fbeec7453d7465e74d4f4b19f905642c89a7525571ee91dd7adabb5a3"}, + {file = "scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be"}, + {file = "scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8"}, + {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c"}, + {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff"}, + {file = "scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993"}, + {file = "scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd"}, + {file = "scipy-1.11.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:028eccd22e654b3ea01ee63705681ee79933652b2d8f873e7949898dda6d11b6"}, + {file = "scipy-1.11.4-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c6ff6ef9cc27f9b3db93a6f8b38f97387e6e0591600369a297a50a8e96e835d"}, + {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b030c6674b9230d37c5c60ab456e2cf12f6784596d15ce8da9365e70896effc4"}, + {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad669df80528aeca5f557712102538f4f37e503f0c5b9541655016dd0932ca79"}, + {file = "scipy-1.11.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ce7fff2e23ab2cc81ff452a9444c215c28e6305f396b2ba88343a567feec9660"}, + {file = "scipy-1.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:36750b7733d960d7994888f0d148d31ea3017ac15eef664194b4ef68d36a4a97"}, + {file = "scipy-1.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e619aba2df228a9b34718efb023966da781e89dd3d21637b27f2e54db0410d7"}, + {file = "scipy-1.11.4-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f3cd9e7b3c2c1ec26364856f9fbe78695fe631150f94cd1c22228456404cf1ec"}, + {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d10e45a6c50211fe256da61a11c34927c68f277e03138777bdebedd933712fea"}, + {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91af76a68eeae0064887a48e25c4e616fa519fa0d38602eda7e0f97d65d57937"}, + {file = "scipy-1.11.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6df1468153a31cf55ed5ed39647279beb9cfb5d3f84369453b49e4b8502394fd"}, + {file = "scipy-1.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:ee410e6de8f88fd5cf6eadd73c135020bfbbbdfcd0f6162c36a7638a1ea8cc65"}, + {file = "scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa"}, ] [package.dependencies] -numpy = ">=1.18.5,<1.26.0" +numpy = ">=1.21.6,<1.28.0" [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 = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "mpmath", "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.4.post1" +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.4.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51fed30d2a4a1e6fbfc1e52b4cb3adeecbe89d7c47f3539b49afbb852415fe19"}, + {file = "scs-3.2.4.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0524c0b9c3ed0d65dae161475accf3efa8e170938eb93251a60e9709b156ee"}, + {file = "scs-3.2.4.post1-cp310-cp310-win_amd64.whl", hash = "sha256:534519819eea96f18902a9fce15c4ec562b99d23b38dc843a48cb137b5641613"}, + {file = "scs-3.2.4.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d04ee4d19ac6d0f5053663bc48fcd5c5faed534272f13b10a4e173c814eea69"}, + {file = "scs-3.2.4.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c23b4299ab77ff5f654573d5667dc982292a8ef2b979053b38c40663919f13"}, + {file = "scs-3.2.4.post1-cp311-cp311-win_amd64.whl", hash = "sha256:ae4624938d3e3a8b7e508029275c6ad7a978fd48c158d0818f69f4ae764bf945"}, + {file = "scs-3.2.4.post1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:40294e22bfe509bdf7fd65a6b77c38cec22dcb3567ff5a75f3c41a1faf2ef1d5"}, + {file = "scs-3.2.4.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a2337acb0604770b6df1473254065a51c210ff9c82fc7c4490595510287a337"}, + {file = "scs-3.2.4.post1-cp312-cp312-win_amd64.whl", hash = "sha256:8689e75a57e59846e65d1c4b9d57e9964b00fcbb8e67fc77f98cf6e0a0530abd"}, + {file = "scs-3.2.4.post1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ad991b00d0a87c85db57bf2f1863c21bdc4e2f13837f6c35e809f5936bc6f165"}, + {file = "scs-3.2.4.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a28af160a44268e726a59d6cf340629b82940c1a643c4c87fe777e9cbe550d75"}, + {file = "scs-3.2.4.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:f6283f725f3fee63d4631c2532d01a5b2ea65883b04d3da3be06084b1c60171b"}, + {file = "scs-3.2.4.post1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b3a622cf2120ae765f0f3ad5c6f4f86796d317e29132bab2ad4af3c14d9bf4d"}, + {file = "scs-3.2.4.post1-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:4b5259137c263304effa2b28d0125437ac23569e6e7753c115ae1206ec5033fd"}, + {file = "scs-3.2.4.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:424710bc19b0506feee7e05e6d2b7af98acf09af5bd5353126164cbd46ac923f"}, + {file = "scs-3.2.4.post1-cp38-cp38-win_amd64.whl", hash = "sha256:e21bdc8046648846e2c204a6c5cf24eaaedd2b8f5e0a2ab41a647b0247b8d592"}, + {file = "scs-3.2.4.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cea0f7e9473f43f7edf1641d020ead7e39653a81c540fbdba8f3b7b8480038c9"}, + {file = "scs-3.2.4.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6126f1d7ed5ff368cb8c1836715b17a50074314579eefc6d511995a3ab93d70"}, + {file = "scs-3.2.4.post1-cp39-cp39-win_amd64.whl", hash = "sha256:18788befa5284bb1f49149bac7f813703de60ef5b6bf7698a9f1c3a5a49b78e4"}, + {file = "scs-3.2.4.post1.tar.gz", hash = "sha256:7015d7a56d1d5b53264fd277289ea169949309e26101677ff88cd0e5030d032f"}, ] [package.dependencies] -numpy = ">=1.7" -scipy = ">=0.13.2" +numpy = "*" +scipy = "*" [[package]] name = "setuptools" -version = "68.2.2" +version = "69.0.3" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" 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-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, ] [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"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "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"] @@ -1055,18 +1396,40 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "trx-python" +version = "0.2.9" +description = "Experiments with new file format for tractography" +optional = false +python-versions = ">=3.8" +files = [ + {file = "trx-python-0.2.9.tar.gz", hash = "sha256:16b4104d7c991879c601f60e8d587decac50ce60388aae8d0c754a92136d1caf"}, + {file = "trx_python-0.2.9-py3-none-any.whl", hash = "sha256:234438b7f103c49768ab98e5f46e7b2624327065cd23fbfce5e681c32e8b4a3f"}, +] + +[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.9.0" 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.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [metadata] lock-version = "2.0" python-versions = ">=3.11, <4.0" -content-hash = "3bae969f933471e95154b83aa690405a5379de1358aa6c31c20f0e4e4d0bcdd4" +content-hash = "0bb79f207fd85920ddda3bf857e0c17fb5f12a7fbd3ec29020f960d693cf4a35" 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..408fc05a 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: @@ -170,7 +173,7 @@ def getBvecs(self) -> np.ndarray: """ return self.grad[:, 0:3] - def maxBval(self) -> float: + def maxBval(self) -> int: """Returns the maximum b-value in a dataset to determine between DTI and DKI, requires no input parameters. @@ -184,9 +187,9 @@ def maxBval(self) -> float: a = dwi.maxBval(), where dwi is the DWI class object. """ - return max(np.unique(self.grad[:, 3])).astype(int) + return int(max(np.unique(self.grad[:, 3]))) - def maxDTIBval(self) -> float: + def maxDTIBval(self) -> int: """Returns the maximum DTI b-value in a dataset. Returns @@ -200,9 +203,9 @@ def maxDTIBval(self) -> float: """ exclude_idx = self.grad[:, 3] <= th.__maxdtibval__ - return max(np.unique(self.grad[exclude_idx, 3])).astype(int) + return int(max(np.unique(self.grad[exclude_idx, 3]))) - def maxDKIBval(self) -> float: + def maxDKIBval(self) -> int: """Returns the maximum DKI b-value in a dataset. Returns @@ -216,9 +219,9 @@ def maxDKIBval(self) -> float: """ exclude_idx = self.grad[:, 3] <= th.__maxdkibval__ - return max(np.unique(self.grad[exclude_idx, 3])).astype(int) + return int(max(np.unique(self.grad[exclude_idx, 3]))) - def maxFBIBval(self) -> float: + def maxFBIBval(self) -> int: """Returns the maximum FBI b-value in a dataset. Returns @@ -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 int(max(np.unique(self.grad[exclude_idx, 3]))) def idxb0(self) -> np.ndarray[bool]: """Returns the index of all B-zeros according to bvals @@ -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 @@ -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 @@ -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,9 @@ 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) diff --git a/pydesigner/main.py b/pydesigner/main.py index 6b7070b2..e80193f8 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) @@ -512,11 +518,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 +538,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 ' @@ -916,9 +922,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 +963,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"] diff --git a/pydesigner/plotting/motionplot.py b/pydesigner/plotting/motionplot.py index 49de075a..405ed9c8 100644 --- a/pydesigner/plotting/motionplot.py +++ b/pydesigner/plotting/motionplot.py @@ -24,7 +24,7 @@ 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...") @@ -63,7 +63,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") diff --git a/pydesigner/plotting/outlierplot.py b/pydesigner/plotting/outlierplot.py index 94289645..21fa5e6d 100644 --- a/pydesigner/plotting/outlierplot.py +++ b/pydesigner/plotting/outlierplot.py @@ -82,7 +82,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..f22e2c54 100644 --- a/pydesigner/plotting/snrplot.py +++ b/pydesigner/plotting/snrplot.py @@ -246,7 +246,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..7b7ed2f0 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 diff --git a/pydesigner/preprocessing/mrinfoutil.py b/pydesigner/preprocessing/mrinfoutil.py index 20fe04a4..4cd0618c 100644 --- a/pydesigner/preprocessing/mrinfoutil.py +++ b/pydesigner/preprocessing/mrinfoutil.py @@ -36,7 +36,8 @@ def getconsole(path: int, flag: str) -> 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)) + 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("'", "") diff --git a/pydesigner/preprocessing/mrpreproc.py b/pydesigner/preprocessing/mrpreproc.py index c40f1dbb..e8fc17b8 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,11 @@ 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 +41,41 @@ 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.") + 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, output, nthreads=None, force=True, verbose=False): - """Converts input `.nii` images to output `.nif` images provided that +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 +101,39 @@ 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.") + 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, moving, output, nthreads=None, force=True, verbose=False): +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 +158,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 +215,37 @@ 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.") + 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, output, nthreads=None, force=False, verbose=False): +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 +268,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 +310,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 +330,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 +364,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 " @@ -458,10 +415,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")) @@ -497,48 +457,35 @@ 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 = f"Unable to compute brain mask from B0. Return code: {completion.returncode}" + msg += f"\nCommand: {' '.join(arg_mask)}" + msg += f"\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( diff --git a/pydesigner/preprocessing/preparation.py b/pydesigner/preprocessing/preparation.py index 6026ec00..6f24ee90 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 diff --git a/pydesigner/preprocessing/util.py b/pydesigner/preprocessing/util.py index 9954a23a..a782e388 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" 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/tractography/dsistudio.py b/pydesigner/tractography/dsistudio.py index 09940594..dda9167c 100644 --- a/pydesigner/tractography/dsistudio.py +++ b/pydesigner/tractography/dsistudio.py @@ -11,7 +11,6 @@ """ - import os import os.path as op import subprocess @@ -25,7 +24,8 @@ 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 @@ -190,29 +190,30 @@ def makefib(input, output, map=None, mask=None, n_fibers=5, scale=1, other_maps= if completion.returncode != 0: 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): + 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() 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): + 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") + map_img = map_img.flatten(order="F") map_img[map_img < 0] = 0 masked_map = map_img[flat_mask] @@ -248,8 +249,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 +299,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") + 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 +315,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..31dd9910 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 diff --git a/pydesigner/tractography/sphericalsampling.py b/pydesigner/tractography/sphericalsampling.py index d8864f8c..fec74354 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 diff --git a/pyproject.toml b/pyproject.toml index fb89f3c9..aa2921b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,31 +28,29 @@ classifiers = [ [tool.poetry.dependencies] python = ">=3.11, <4.0" -numpy = ">=1.20.0, <1.26.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" +pydantic = "^2.7.0" [tool.poetry.scripts] pydesigner = "pydesigner.main:main" [tool.poetry.group.dev.dependencies] pytest = ">=7.4.0, <8.0.0" +pytest-cov = "^5.0.0" +pytest-xdist = "^3.6.1" [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 @@ -88,10 +86,10 @@ exclude = [ "node_modules", "venv", "docs", + "tests", "setup.py", ] -# Same as Black line-length = 120 # Allow unused variables when underscore-prefixed. diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 00000000..cab9f333 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,9 @@ +colorama==0.4.6 ; python_version >= "3.11" and python_version < "4.0" and sys_platform == "win32" +coverage[toml]==7.6.1 ; python_version >= "3.11" and python_version < "4.0" +execnet==2.1.1 ; python_version >= "3.11" and python_version < "4.0" +iniconfig==2.0.0 ; python_version >= "3.11" and python_version < "4.0" +packaging==23.2 ; python_version >= "3.11" and python_version < "4.0" +pluggy==1.3.0 ; python_version >= "3.11" and python_version < "4.0" +pytest-cov==5.0.0 ; python_version >= "3.11" and python_version < "4.0" +pytest-xdist==3.6.1 ; python_version >= "3.11" and python_version < "4.0" +pytest==7.4.4 ; python_version >= "3.11" and python_version < "4.0" diff --git a/requirements.txt b/requirements.txt index 23f17380..f26dc533 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,548 +1,37 @@ -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.6.0 ; python_version >= "3.11" and python_version < "4.0" +clarabel==0.6.0 ; python_version >= "3.11" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.11" and python_version < "4.0" and platform_system == "Windows" +contourpy==1.2.0 ; python_version >= "3.11" and python_version < "4.0" +cvxpy==1.4.1 ; python_version >= "3.11" and python_version < "4.0" +cycler==0.12.1 ; python_version >= "3.11" and python_version < "4.0" +cython==3.0.8 ; python_version >= "3.11" and python_version < "4.0" +deepdiff==6.7.1 ; python_version >= "3.11" and python_version < "4.0" +dill==0.3.7 ; python_version >= "3.11" and python_version < "4.0" +dipy==1.8.0 ; python_version >= "3.11" and python_version < "4.0" +ecos==2.0.12 ; python_version >= "3.11" and python_version < "4.0" +fonttools==4.47.2 ; python_version >= "3.11" and python_version < "4.0" +h5py==3.10.0 ; python_version >= "3.11" and python_version < "4.0" +joblib==1.3.2 ; python_version >= "3.11" and python_version < "4.0" +kiwisolver==1.4.5 ; python_version >= "3.11" and python_version < "4.0" +matplotlib==3.8.2 ; python_version >= "3.11" and python_version < "4.0" +multiprocess==0.70.15 ; python_version >= "3.11" and python_version < "4.0" +nibabel==5.2.0 ; python_version >= "3.11" and python_version < "4.0" +numpy==1.26.3 ; python_version >= "3.11" and python_version < "4.0" +ordered-set==4.1.0 ; python_version >= "3.11" and python_version < "4.0" +osqp==0.6.3 ; python_version >= "3.11" and python_version < "4.0" +packaging==23.2 ; python_version >= "3.11" and python_version < "4.0" +pillow==10.2.0 ; python_version >= "3.11" and python_version < "4.0" +pybind11==2.11.1 ; python_version >= "3.11" and python_version < "4.0" +pydantic-core==2.18.1 ; python_version >= "3.11" and python_version < "4.0" +pydantic==2.7.0 ; python_version >= "3.11" and python_version < "4.0" +pyparsing==3.1.1 ; python_version >= "3.11" and python_version < "4.0" +python-dateutil==2.8.2 ; python_version >= "3.11" and python_version < "4.0" +qdldl==0.1.7.post0 ; python_version >= "3.11" and python_version < "4.0" +scipy==1.11.4 ; python_version >= "3.11" and python_version < "4.0" +scs==3.2.4.post1 ; python_version >= "3.11" and python_version < "4.0" +setuptools-scm==8.0.4 ; python_version >= "3.11" and python_version < "4.0" +setuptools==69.0.3 ; python_version >= "3.11" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.11" and python_version < "4.0" +tqdm==4.66.1 ; python_version >= "3.11" and python_version < "4.0" +trx-python==0.2.9 ; python_version >= "3.11" and python_version < "4.0" +typing-extensions==4.9.0 ; python_version >= "3.11" and python_version < "4.0" diff --git a/tests/Dockerfile b/tests/Dockerfile new file mode 100644 index 00000000..7fec59a5 --- /dev/null +++ b/tests/Dockerfile @@ -0,0 +1,12 @@ +FROM dmri/ci-cd-py3.11:9b5fdb22 +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..c8f50091 --- /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..18dbba58 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 nibabel as nib 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") +DATA = load_data(type="hifi") +PATH_DWI = DATA["nifti"] +PATH_BVEC = DATA["bvec"] +PATH_BVAL = DATA["bval"] +PATH_MASK = DATA["mask"] +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_image_path_nonexistent(): - """Tests whether function raises OSError when input is not found""" - with pytest.raises(OSError): - DWI("foo") +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_bvec_path_invalid(): - """Tests whether function raises TypeError when bvec file input is invalid""" - with pytest.raises(TypeError): - DWI(PATH_DWI, bvecPath=10) +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_bvec_path_nonexistent(): - """Tests whether function raises OSError when bvec file is not found""" - with pytest.raises(OSError): - DWI(PATH_DWI, bvecPath="foo") +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_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_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_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_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_mask_path_nonexistent(capsys): - """Tests whether function raises OSError when mask file is not found""" - DWI(PATH_DWI, mask="foo") +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_path_nosidecar(): - """Tests whether function raises OSError when sidecar files are not found""" - with pytest.raises(OSError): - DWI(PATH_DWI_NOSIDECAR) - - -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_nthreads_negative_int(): - """Tests whether function raises ValueError when nthreads is negative""" - with pytest.raises(ValueError): - DWI(PATH_DWI, nthreads=-5) - - -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, int) + 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, int) + 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, int) + 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, int) + 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,22 +147,21 @@ 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 assert sum(idx) == 256 - 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 +172,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 +211,208 @@ 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..0f6c2337 --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,113 @@ +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..01762a4e 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(): @@ -146,15 +149,14 @@ def test_commandhistory_invalid(): def test_commandhistory_valid(): """Test normal function of commandhistory""" result = [ - "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", - "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", - "mrdegibbs /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/2_dwi_degibbs.mif", - "/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", + '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', + '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', + 'mrdegibbs /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/working.mif /media/sid/Secondary/Datasets/IAM_HiFI/out/pydesigner/2_dwi_degibbs.mif', + '/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 -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 +164,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..b2ae83e8 100644 --- a/tests/test_preprocessing_mrpreproc.py +++ b/tests/test_preprocessing_mrpreproc.py @@ -1,9 +1,287 @@ 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 FileExtensionError, 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 f"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 f"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 f"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 f"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 f"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 f"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 f"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)