diff --git a/.gitattributes b/.gitattributes index 24a8e8793..c921772ae 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,3 @@ *.png filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..f33328dce --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @kushalkolar @clewis7 diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml new file mode 100644 index 000000000..cebee50a0 --- /dev/null +++ b/.github/workflows/black.yml @@ -0,0 +1,24 @@ +name: black + +on: + push: + branches: + - main + pull_request: + branches: + - main + types: + - opened + - reopened + - synchronize + - ready_for_review + +jobs: + lint: + runs-on: ubuntu-latest + if: ${{ !github.event.pull_request.draft }} + steps: + - uses: actions/checkout@v4 + - uses: psf/black@stable + with: + src: "./fastplotlib" diff --git a/.github/workflows/ci-pygfx-release.yml b/.github/workflows/ci-pygfx-release.yml new file mode 100644 index 000000000..87ed1a113 --- /dev/null +++ b/.github/workflows/ci-pygfx-release.yml @@ -0,0 +1,88 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + branches: + - main + types: + - opened + - reopened + - synchronize + - ready_for_review + +jobs: + test-build-full: + name: Tests - pygfx release + timeout-minutes: 25 + if: ${{ !github.event.pull_request.draft }} + strategy: + fail-fast: false + matrix: + python: ["3.11", "3.12", "3.13"] + imgui_dep: ["imgui", ""] + notebook_dep: ["notebook", ""] + os: ["ubuntu-latest", "macos-latest"] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + with: + lfs: true + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python }} + - name: Install llvmpipe and lavapipe for offscreen canvas + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + sudo apt-get update -y -qq + sudo apt-get install --no-install-recommends -y ffmpeg libegl1-mesa-dev libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers xorg-dev + - name: Set up Homebrew + if: ${{ matrix.os == 'macos-latest' }} + id: set-up-homebrew + uses: Homebrew/actions/setup-homebrew@master + - name: Install gsed + if: ${{ matrix.os == 'macos-latest' }} + run: | + brew install gnu-sed + echo "/opt/homebrew/opt/gnu-sed/libexec/gnubin" >> "$GITHUB_PATH" + - name: Install fastplotlib + run: | + # create string with one of: tests,imgui,notebook; test,imgui; test,notebook ; tests + # sed removes trailing comma + # install fastplotlib with given extras options from above + pip install -e ".[$(echo "tests,${{ matrix.imgui_dep }},${{ matrix.notebook_dep }}" | sed -e "s/,\+/,/g" -e "s/,$//")]" + - name: Show wgpu backend + run: + python -c "from examples.tests.testutils import wgpu_backend; print(wgpu_backend)" + - name: Test components + env: + RENDERCANVAS_FORCE_OFFSCREEN: 1 + run: | + pytest -v tests/ + - name: Test examples + env: + RENDERCANVAS_FORCE_OFFSCREEN: 1 + run: | + pytest -v examples/ + - name: Test examples notebooks, exclude ImageWidget notebook + if: ${{ matrix.notebook_dep == 'notebook' }} + env: + FASTPLOTLIB_NB_TESTS: 1 + # test notebooks, exclude ImageWidget notebooks + run: pytest --nbmake $(find ./examples/notebooks/ -maxdepth 1 -type f -name "*.ipynb" ! -name "image_widget*.ipynb" -print | xargs) + - name: Test ImageWidget notebooks + # test image widget notebooks only if imgui is installed + if: ${{ matrix.notebook_dep == 'notebook' && matrix.imgui_dep == 'imgui' }} + env: + FASTPLOTLIB_NB_TESTS: 1 + run: pytest --nbmake $(find ./examples/notebooks/ -maxdepth 1 -type f -name "image_widget*.ipynb" -print | xargs) + - uses: actions/upload-artifact@v4 + if: ${{ failure() }} + with: + name: screenshot-diffs-${{ matrix.os }}-${{ matrix.pyversion }}-${{ matrix.imgui_dep }}-${{ matrix.notebook_dep }} + path: | + examples/diffs + examples/notebooks/diffs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7c15e3865..528b62772 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,146 +14,81 @@ on: - ready_for_review jobs: - - docs-build: - name: Docs - runs-on: ubuntu-latest - strategy: - fail-fast: false - steps: - - uses: actions/checkout@v3 - - name: Set up Python 3.11 - uses: actions/setup-python@v4 - with: - python-version: 3.11 - - name: Install llvmpipe and lavapipe for offscreen canvas, and git lfs - run: | - sudo apt-get update -y -qq - sudo apt-get install --no-install-recommends -y libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers git-lfs - - name: Install pandoc v3.14, nbsphinx complains about older pandoc versions - run: | - wget https://github.com/jgm/pandoc/releases/download/3.1.4/pandoc-3.1.4-1-amd64.deb - sudo apt-get install ./pandoc-3.1.4-1-amd64.deb - - name: Install dev dependencies - run: | - python -m pip install --upgrade pip setuptools - # remove pygfx from install_requires, we install using pygfx@main - sed -i "/pygfx/d" ./setup.py - pip install git+https://github.com/pygfx/pygfx.git@main - pip install -e ".[notebook,docs,tests]" - - name: Build docs - run: | - cd docs - make html SPHINXOPTS="-W --keep-going" - test-build-full: - name: Test examples, env with notebook and glfw - runs-on: ubuntu-latest + name: Tests + timeout-minutes: 25 if: ${{ !github.event.pull_request.draft }} strategy: fail-fast: false matrix: - include: - - name: Test py39 - pyversion: '3.9' - - name: Test py310 - pyversion: '3.10' - - name: Test py311 - pyversion: '3.11' - - name: Test py312 - pyversion: '3.12' + python: ["3.11", "3.12", "3.13"] + imgui_dep: ["imgui", ""] + notebook_dep: ["notebook", ""] + os: ["ubuntu-latest", "macos-latest"] + runs-on: ${{ matrix.os }} steps: - - name: Install git-lfs - run: | - sudo apt install --no-install-recommends -y git-lfs - - uses: actions/checkout@v3 - - name: Set up Python - uses: actions/setup-python@v3 + - uses: actions/checkout@v4 with: - python-version: ${{ matrix.pyversion }} - - name: Install llvmpipe and lavapipe for offscreen canvas - run: | - sudo apt-get update -y -qq - sudo apt-get install --no-install-recommends -y libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers git-lfs - - name: Install dev dependencies - run: | - python -m pip install --upgrade pip setuptools - # remove pygfx from install_requires, we install using pygfx@main - sed -i "/pygfx/d" ./setup.py - pip install git+https://github.com/pygfx/pygfx.git@main - pip install -e ".["tests"]" - - name: Show wgpu backend - run: - python -c "from examples.tests.testutils import wgpu_backend; print(wgpu_backend)" - - name: fetch git lfs files - run: | - git lfs fetch --all - git lfs pull - - name: Test examples - env: - PYGFX_EXPECT_LAVAPIPE: true - run: | - pytest -v examples - pytest --nbmake examples/notebooks/ - - uses: actions/upload-artifact@v3 - if: ${{ failure() }} - with: - name: screenshot-diffs - path: | - examples/desktop/diffs - examples/notebooks/diffs - - test-build-desktop: - name: Test examples, env with only glfw - runs-on: ubuntu-latest - if: ${{ !github.event.pull_request.draft }} - strategy: - fail-fast: false - matrix: - include: - - name: Test py39 - pyversion: '3.9' - - name: Test py310 - pyversion: '3.10' - - name: Test py311 - pyversion: '3.11' - - name: Test py312 - pyversion: '3.12' - steps: - - name: Install git-lfs - run: | - sudo apt install --no-install-recommends -y git-lfs - - uses: actions/checkout@v3 + lfs: true - name: Set up Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v5 with: - python-version: ${{ matrix.pyversion }} + python-version: ${{ matrix.python }} - name: Install llvmpipe and lavapipe for offscreen canvas + if: ${{ matrix.os == 'ubuntu-latest' }} run: | sudo apt-get update -y -qq - sudo apt-get install --no-install-recommends -y libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers git-lfs - - name: Install dev dependencies + sudo apt-get install --no-install-recommends -y ffmpeg libegl1-mesa-dev libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers xorg-dev + - name: Set up Homebrew + if: ${{ matrix.os == 'macos-latest' }} + id: set-up-homebrew + uses: Homebrew/actions/setup-homebrew@master + - name: Install gsed + if: ${{ matrix.os == 'macos-latest' }} + run: | + brew install gnu-sed + echo "/opt/homebrew/opt/gnu-sed/libexec/gnubin" >> "$GITHUB_PATH" + - name: Install pygx from main run: | python -m pip install --upgrade pip setuptools # remove pygfx from install_requires, we install using pygfx@main - sed -i "/pygfx/d" ./setup.py + sed -i "/pygfx/d" ./pyproject.toml pip install git+https://github.com/pygfx/pygfx.git@main - pip install -e ".["tests-desktop"]" + - name: Install fastplotlib + run: | + # create string with one of: tests,imgui,notebook; test,imgui; test,notebook ; tests + # sed removes trailing comma + # install fastplotlib with given extras options from above + pip install -e ".[$(echo "tests,${{ matrix.imgui_dep }},${{ matrix.notebook_dep }}" | sed -e "s/,\+/,/g" -e "s/,$//")]" - name: Show wgpu backend run: python -c "from examples.tests.testutils import wgpu_backend; print(wgpu_backend)" - - name: fetch git lfs files + - name: Test components + env: + RENDERCANVAS_FORCE_OFFSCREEN: 1 run: | - git lfs fetch --all - git lfs pull + pytest -v tests/ - name: Test examples env: - PYGFX_EXPECT_LAVAPIPE: true + RENDERCANVAS_FORCE_OFFSCREEN: 1 run: | - pytest -v examples - - uses: actions/upload-artifact@v3 + pytest -v examples/ + - name: Test examples notebooks, exclude ImageWidget notebook + if: ${{ matrix.notebook_dep == 'notebook' }} + env: + FASTPLOTLIB_NB_TESTS: 1 + # test notebooks, exclude ImageWidget notebooks + run: pytest --nbmake $(find ./examples/notebooks/ -maxdepth 1 -type f -name "*.ipynb" ! -name "image_widget*.ipynb" -print | xargs) + - name: Test ImageWidget notebooks + # test image widget notebooks only if imgui is installed + if: ${{ matrix.notebook_dep == 'notebook' && matrix.imgui_dep == 'imgui' }} + env: + FASTPLOTLIB_NB_TESTS: 1 + run: pytest --nbmake $(find ./examples/notebooks/ -maxdepth 1 -type f -name "image_widget*.ipynb" -print | xargs) + - uses: actions/upload-artifact@v4 if: ${{ failure() }} with: - name: screenshot-diffs + name: screenshot-diffs-${{ matrix.os }}-${{ matrix.pyversion }}-${{ matrix.imgui_dep }}-${{ matrix.notebook_dep }} path: | - examples/desktop/diffs + examples/diffs + examples/notebooks/diffs diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml new file mode 100644 index 000000000..470e2e5a5 --- /dev/null +++ b/.github/workflows/docs-deploy.yml @@ -0,0 +1,107 @@ +name: Deploy docs + +on: + push: + branches: + - main + pull_request: + branches: + - main + types: + - opened + - reopened + - synchronize + - ready_for_review + release: + types: [published] + +jobs: + build-docs: + name: "Build and deploy docs" + runs-on: ubuntu-latest + if: ${{ !github.event.pull_request.draft }} + permissions: + pull-requests: write + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v4 + with: + lfs: true + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + - name: Install llvmpipe and lavapipe for offscreen canvas + run: | + sudo apt-get update -y -qq + sudo apt-get install --no-install-recommends -y ffmpeg libegl1-mesa-dev libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers + - name: Install dev dependencies + run: | + python -m pip install --upgrade pip setuptools + # remove pygfx from install_requires, we install using pygfx@main + sed -i "/pygfx/d" ./pyproject.toml + pip install git+https://github.com/pygfx/pygfx.git@main + pip install -e ".[docs,notebook,imgui]" + - name: Show wgpu backend + run: + python -c "from examples.tests.testutils import wgpu_backend; print(wgpu_backend)" + - name: build docs + run: | + cd docs + RTD_BUILD=1 make html SPHINXOPTS="-W --keep-going" + + # set environment variable `DOCS_VERSION_DIR` to either the pr-branch name, "dev", or the release version tag + - name: set output pr + if: ${{ github.ref != 'refs/heads/main' }} + # sets dir to the branch name when it's a PR + # ex: fastplotlib.org/ver/feature-branch + run: echo "DOCS_VERSION_DIR=$GITHUB_HEAD_REF" >> "$GITHUB_ENV" + + - name: set output release + if: ${{ github.ref_type == 'tag' }} + # sets dir to the release version tag, ex. v0.3.0 (I think...) + # ex: fastplotlib.org/ver/v0.3.0 + run: echo "DOCS_VERSION_DIR=$GITHUB_REF_NAME" >> "$GITHUB_ENV" + + - name: set output dev + if: ${{ github.ref == 'refs/heads/main' }} + # any push to main goes to fastplotlib.org/ver/dev + run: echo "DOCS_VERSION_DIR=dev" >> "$GITHUB_ENV" + + # upload docs via SCP + - name: Deploy docs + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.DOCS_SERVER }} + username: ${{ secrets.DOCS_USERNAME }} + port: ${{ secrets.DOCS_PORT }} + key: ${{ secrets.DOCS_KEY }} + passphrase: ${{ secrets.DOCS_PASS }} + source: "docs/build/html/*" + # without strip_components it creates dirs docs/build/html within /ver on the server + strip_components: 3 + target: /home/${{ secrets.DOCS_USERNAME }}/public_html/ver/${{ env.DOCS_VERSION_DIR }}/ + + # comment on PR to provide link to built docs + - name: Add PR link in comment + if: ${{ github.event_name == 'pull_request' }} + uses: mshick/add-pr-comment@v2 + with: + message: | + šŸ“š Docs preview built and uploaded! https://www.fastplotlib.org/ver/${{ env.DOCS_VERSION_DIR }} + + # upload docs via SCP + - name: Deploy docs release + if: ${{ github.ref_type == 'tag' }} + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.DOCS_SERVER }} + username: ${{ secrets.DOCS_USERNAME }} + port: ${{ secrets.DOCS_PORT }} + key: ${{ secrets.DOCS_KEY }} + passphrase: ${{ secrets.DOCS_PASS }} + source: "docs/build/html/*" + # without strip_components it creates dirs docs/build/html within /ver on the server + strip_components: 3 + target: /home/${{ secrets.DOCS_USERNAME }}/public_html/ diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml index 207d92351..780bf4d08 100644 --- a/.github/workflows/pypi-publish.yml +++ b/.github/workflows/pypi-publish.yml @@ -21,11 +21,13 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + lfs: true - name: Set up Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: '3.12' - name: Install dependencies run: | python -m pip install --upgrade pip @@ -33,7 +35,7 @@ jobs: - name: Build package run: python -m build - name: Publish package - uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/screenshots.yml b/.github/workflows/screenshots.yml index 40f55d234..cfaf419b8 100644 --- a/.github/workflows/screenshots.yml +++ b/.github/workflows/screenshots.yml @@ -13,42 +13,59 @@ on: jobs: screenshots: name: Regenerate - runs-on: 'ubuntu-latest' + runs-on: ubuntu-latest + timeout-minutes: 10 if: ${{ !github.event.pull_request.draft }} + strategy: + fail-fast: false + matrix: + imgui_dep: ["imgui", ""] steps: - - name: Install git-lfs - run: | - sudo apt install --no-install-recommends -y git-lfs - - uses: actions/checkout@v3 - - name: Set up Python 3.11 - uses: actions/setup-python@v4 + - uses: actions/checkout@v4 + with: + lfs: true + - name: Set up Python 3.12 + uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: '3.12' - name: Install llvmpipe and lavapipe for offscreen canvas run: | sudo apt-get update -y -qq - sudo apt-get install --no-install-recommends -y libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers - - name: Install dev dependencies + sudo apt-get install --no-install-recommends -y ffmpeg libegl1-mesa-dev libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers + - name: Install pygx from main run: | python -m pip install --upgrade pip setuptools # remove pygfx from install_requires, we install using pygfx@main - sed -i "/pygfx/d" ./setup.py + sed -i "/pygfx/d" ./pyproject.toml pip install git+https://github.com/pygfx/pygfx.git@main - pip install -e ".["tests"]" + - name: Install fastplotlib + run: | + # create string with one of: tests,imgui,notebook; test,imgui; test,notebook ; tests + # sed removes trailing comma + # install fastplotlib with with or without imgui depending on build matrix + pip install -e ".[$(echo "tests,notebook,${{ matrix.imgui_dep }}" | sed -e "s/,\+/,/g" -e "s/,$//")]" - name: Show wgpu backend run: python -c "from examples.tests.testutils import wgpu_backend; print(wgpu_backend)" - - name: Test examples + - name: Generate screenshots env: PYGFX_EXPECT_LAVAPIPE: true run: | # regenerate screenshots - REGENERATE_SCREENSHOTS=1 pytest -v examples - REGENERATE_SCREENSHOTS=1 pytest --nbmake examples/notebooks/ - - uses: actions/upload-artifact@v3 + RENDERCANVAS_FORCE_OFFSCREEN=1 REGENERATE_SCREENSHOTS=1 pytest -v examples + - name: Generate screenshots notebook, exclude image widget + env: + PYGFX_EXPECT_LAVAPIPE: true + run: FASTPLOTLIB_NB_TESTS=1 REGENERATE_SCREENSHOTS=1 pytest --nbmake $(find ./examples/notebooks/ -maxdepth 1 -type f -name "*.ipynb" ! -name "image_widget*.ipynb" -print | xargs) + - name: Generate screenshots notebook, include image widget + if: ${{ matrix.imgui_dep == 'imgui' }} + env: + PYGFX_EXPECT_LAVAPIPE: true + run: FASTPLOTLIB_NB_TESTS=1 REGENERATE_SCREENSHOTS=1 pytest --nbmake $(find ./examples/notebooks/ -maxdepth 1 -type f -name "image_widget*.ipynb" -print | xargs) + - uses: actions/upload-artifact@v4 if: always() with: - name: screenshots + name: screenshots-${{ matrix.imgui_dep }} path: | - examples/desktop/screenshots/ + examples/screenshots/ examples/notebooks/screenshots/ diff --git a/.gitignore b/.gitignore index f87eb1c51..c599d5f8c 100644 --- a/.gitignore +++ b/.gitignore @@ -131,3 +131,7 @@ dmypy.json # Pycharm .idea/ +# vs code +.vscode/ + +examples/desktop/diffs/*.png diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index ce6b214e4..000000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,41 +0,0 @@ -version: 2 - -build: - os: ubuntu-22.04 - tools: - python: "3.11" - apt_packages: - - libegl1-mesa - - libgl1-mesa-dri - - libxcb-xfixes0-dev - - mesa-vulkan-drivers - - libglfw3 - - pandoc # installs older version of pandoc which nbsphinx complains about, but works for now - jobs: - post_checkout: - # Download and uncompress the binary - # https://git-lfs.github.com/ - - wget https://github.com/git-lfs/git-lfs/releases/download/v3.1.4/git-lfs-linux-amd64-v3.1.4.tar.gz - - tar xvfz git-lfs-linux-amd64-v3.1.4.tar.gz - # Modify LFS config paths to point where git-lfs binary was downloaded - - git config filter.lfs.process "`pwd`/git-lfs filter-process" - - git config filter.lfs.smudge "`pwd`/git-lfs smudge -- %f" - - git config filter.lfs.clean "`pwd`/git-lfs clean -- %f" - # Make LFS available in current repository - - ./git-lfs install - # Download content from remote - - ./git-lfs fetch - # Make local files to have the real content on them - - ./git-lfs checkout - pre_install: - - pip install git+https://github.com/pygfx/pygfx.git@main - -sphinx: - configuration: docs/source/conf.py - -python: - install: - - method: pip - path: . - extra_requirements: - - docs diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 65efc3352..0ae81f6f0 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -63,6 +63,7 @@ We strive to: - Excessive profanity. Please avoid swearwords; people differ greatly in their sensitivity to swearing. - Repeated harassment of others. In general, if someone asks you to stop, then stop. - Advocating for, or encouraging, any of the above behavior. + - LLM spam or inauthentic interaction that is completely generated by an LLM is discouraged. We welcome the use of LLMs as tools, but unsolicited LLM bot accounts for example are not encouraged. # Diversity statement diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7bf5c69ea..be9e175e6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,52 +1,318 @@ -# Contribution guide +# Contributing Guide -Contributions are welcome! :smile: +`fastplotlib` is a next-generation plotting library built on top of the `pygfx` rendering engine that leverages modern +GPU hardware and new graphics APIs to build large-scale scientific visualizations. We welcome and encourage contributions +from everyone! :smile: -## Instructions +This guide explains how to contribute: if you have questions about the process, please +reach out on [GitHub Discussions](https://github.com/fastplotlib/fastplotlib/discussions). + +> **_NOTE:_** If you are already familiar with contributing to open-source software packages, +> please check out the [quick guide](#contributing-quick-guide)! + +## General Guidelines + +Developers are encouraged to contribute to various areas of development. This could include the addition of new features (e.g. +graphics or selector tools), bug fixes, or the addition of new examples to the [examples gallery](https://www.fastplotlib.org/ver/dev/_gallery/index.html). +Enhancements to documentation and the overall readability of the code are also greatly appreciated. + +Feel free to work on any section of the code that you believe you can improve. More importantly, remember to thoroughly test all +your classes and functions, and to provide clear, detailed comments within your code. This not only aids others in using the library, +but also facilitates future maintenance and further development. + +For more detailed information about `fastplotlib` modules, including design choices and implementation details, visit the +[`For Develeopers`](https://www.fastplotlib.org/ver/dev/developer_notes/index.html) section of the package documentation. + +## Contributing to the code + +### Contribution workflow cycle + +In order to contribute, you will need to do the following: + +1) Create your own branch +2) Make sure that tests pass +3) Open a Pull Request + +The `fastplotlib` package follows the [Git feature branch](https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow) workflow. In essence, `main` is the primary branch to which no one is allowed to +push directly. All development happens in separate feature branches that are then merged into `main` once we have determined they are ready. When enough changes have accumulated, a new release is +generated. This process includes adding a new tag to increment the version number and uploading the new release to PyPI. + +### Creating a development environment + +You will need a local installation of `fastplotlib` which keeps up-to-date with any changes you make. To do so, you will need to fork and clone `fastplotlib` before checking out a new branch. 1. Fork the repo to your own GitHub account, click the "Fork" button at the top: ![image](https://github.com/kushalkolar/fastplotlib/assets/9403332/82612021-37b2-48dd-b7e4-01a919535c17) -2. Clone the repo and install according to the development instructions. Replace the `YOUR_ACCOUNT` in the repo URL to the fork on your account: +2. We use [git-lfs](https://git-lfs.com) for storing large files, such as ground-truths for tests, so you will need +to [install it](https://github.com/git-lfs/git-lfs#installing) before cloning the repo. If you already have `git-lfs` +installed, ignore this step. + +3. Clone the repo. Replace the `YOUR_ACCOUNT` in the repo URL to the fork on your account. ```bash git clone https://github.com/YOUR_ACCOUNT/fastplotlib.git cd fastplotlib +``` +> **_NOTE:_** If you cloned the repo before installing `git-lfs`, you can run `git lfs pull` at any +> time to download the files stored on LFS + +4. Install `fastplotlib` in editable mode with developer dependencies + +```bash # install all extras in place -pip install -e ".[notebook,docs,tests] +pip install -e ".[imgui, notebook, docs, tests]" ``` -3. Checkout the `main` branch, and then checkout your feature or bug fix branch, and run tests: - -> **Warning** -> Do not commit or add any changes from `examples/screenshots` or `examples/diffs`. -> If you are creating new test examples that generate or change screenshots please post an issue on the repo and we will help you. The screenshots will be generated on github actions servers, which you can then copy into the screenshots dir. :) +5. Add the upstream remote branch: ```bash -cd fastplotlib +git remote add upstream https://github.com/fastplotlib/fastplotlib +``` + +At this point you have two remotes: `origin` (your fork) and `upstream` (the official fastplotlib org version). You won't have permission to push to upstream (only `origin`), but +this makes it easy to keep your `fastplotlib` up-to-date with the official fastplotlib org version by pulling from upstream: `git pull upstream`. +### Creating a new branch + +As mentioned previously, each feature in `fastplotlib` is worked on in a separate branch. This allows multiple people to develop multiple features simultaneously, without interfering with each other's work. To create +your own branch, run the following from within your `fastplotlib` directory: + +```bash +# switch to the main branch on your local copy git checkout main -# checkout your new branch from main -git checkout -b my-new-feature-branch +# update your local copy from your fork +git pull origin main + +# sync your local copy with upstream main +git pull upstream main + +# update your fork's main branch with any changes from upstream +git push origin main + +# create and switch to a new branch, where you'll work on your new feature +git checkout -b my_feature_branch +``` + +After you have made changes on this branch, add and commit them when you are ready: + +```bash +# black format only the source code +black fastplotlib/ -# make your changes -# run tests -REGENERATE_SCREENSHOTS=1 pytest -v -k examples +# run tests from the repo root dir +RENDERCANVAS_FORCE_OFFSCREEN=1 pytest tests/ -# make some changes, lint with black, and commit -black . +# desktop examples +pytest -v examples -# add only your changed files, not the entire repo, do not add changes to examples/screenshots +# notebook examples +FASTPLOTLIB_NB_TESTS=1 pytest --nbmake examples/notebooks/ + +# add your changed files, do not add any changes from the screenshot diff directory git add my_changed_files +# commit your changes +git commit -m "A one-line message explaining the changes made" + +# push to the remote origin +git push origin my_feature_branch +``` +> **_NOTE:_** If your contributions modify how visualizations _look_, see the [Testing details](#testing-details) section at the very bottom. + +> **_NOTE:_** If your contributions modify the API, you must regenerate the API docs before making a PR, see +> the [Documenation](#documentation) section below. + +### Contributing your changes back to `fastplotlib` + +You can make any number of changes on your branch. Once you are happy with your changes, add tests to check that they run correctly and add +documentation to properly note your changes. +See below for details on how to [add tests](#adding-tests) and properly [document](#adding-documentation) your code. + +Now you are ready to make a Pull Request. You can open a pull request by clicking on the big `Compare & pull request` button that appears at the top of the `fastplotlib` repo +after pushing to your branch (see [here](https://intersect-training.org/collaborative-git/03-pr/index.html) for a tutorial). + +> **_NOTE:_** Please make sure that you initially make your PR as a **draft** PR against the `main` branch. When you think the PR is ready, mark +> it for review to trigger tests using our CI pipeline. If you need to make changes, please set the PR back to a draft when pushing further +> commits until it is ready for review again. + +Your pull request should include the following: +- A summary including information on what you changed and why +- References to relevant issues or discussions +- Special notice to any portion of your changes where you have lingering questions (e.g., "was this the right way to implement this?") or +want reviewers to pay special attention to + +Next, we will be notified of the pull request and will read it over. We will try to give an initial response quickly, and then do a longer in-depth +review, at which point you will probably need to respond to our comments, making changes as appropriate. We will then respond again, and proceed +in an iterative fashion until everyone is happy with the proposed changes. + +Once your changes are integrated, you will be added as a GitHub contributor. Thank you for being +a part of `fastplotlib`! + +### Style Guide + +As far as code style, please adhere to the following guidelines: + +- Longer, descriptive names are preferred (e.g., `x` is not an appropriate name for a variable), especially for anything user-facing, +such as methods, attributes, or arguments +- Any public method, property, or attribute must have complete type-annotated docstrings (see below for details). Private methods or +attributes do not need to have a complete docstring, but they probably should. + +### Releases + +We create releases on GitHub and distribute via [pypi](https://pypi.org/), and try to follow [semantic versioning](https://semver.org/): + +> Given a version number MAJOR.MINOR.PATCH, increment the: +> 1. MAJOR version when you make incompatible API changes +> 2. MINOR version when you add functionality in a backward compatible manner +> 3. PATCH version when you make backward compatible bug fixes + +To release a new version, we [create a GitHub release](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository) with a new tag incrementing the version as described above. +Creating the GitHub release will trigger the deployment to pypi, via our `deploy` action (found in `.github/workflows/pypi-publish.yml`). +The built version will grab the version tag from the GitHub release, using [setuptools_scm](https://github.com/pypa/setuptools_scm). + +### Testing + +#### Testing Details + +As a plotting library we require two layers of testing. 1) We use a backend test suite that verifies the basic functionality of buffer managers, +graphics, layouts, etc., and 2) another test suite which verifies that the library renders plots that are visually correct. + +In order to do this, each example within the `examples` directory is run and an image of the canvas is taken and compared +with a ground-truth screenshot that we have manually inspected. Ground-truth images are stored using `git-lfs`. + +The ground-truth images are located in: + +``` +examples/desktop/screenshots +examples/notebooks/screenshots +``` + +The tests will produce slightly different imperceptible (to a human) results on different hardware when compared to the +ground-truth. A small RMSE tolerance has been chosen, `0.025` for most examples. If the output image and +ground-truth image are within that tolerance the test will pass. + +If the test image and ground-truth image are above the threshold, the test will fail and a difference image will be located in the follow directory: + +``` +examples/desktop/diffs +examples/notebooks/diffs +``` + +Some feature development may require the ground-truth screenshots to be updated. In the event that your changes require +this, please do the following: + +1. Download the regenerated screenshots from the [`fastplotlib` GitHub Actions page](https://github.com/fastplotlib/fastplotlib/actions/workflows/screenshots.yml) for your specific PR + +2. Replace only the screenshots that your PR changes in your local `fastplotlib` screenshots directories with those downloaded + +``` +examples/desktop/screenshots +examples/notebooks/screenshots +``` + +3. Commit your new screenshots and push them to your branch to get picked up by `git-lfs` + +```bash +# add changes +git add examples/desktop/screenshots/ +git add examples/notebooks/screenshots/ + # commit changes -git commit -m "my new feature" +git commit -m "update screenshots" + +# push changes +git push origin my_feature_branch +``` + +#### Adding tests + +Depending on the type of contribution you are making, new tests might need to be added to the repository. Unit tests for testing underlying functionality such as buffer managers, figure instantiation, and +more can be found in the `/tests` directory. However, we also test all of our desktop examples as well. + +If you are adding a new example to the library, you will need to add the following comments to the top of your `.py` file in order to make sure it is both tested and added to the gallery. + +```python +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' +``` + +### Documentation + +Documentation is a crucial part of open-source software and greatly influences the ability to use a codebase. As such, it is imperative that any new changes are +properly documented as outlined below. -# push changes to your fork -git push origin my-new-feature-branch +We use [`sphinx`](https://www.sphinx-doc.org/en/master/) for generating our documentation. In addition to this, we also use the [`sphinx-gallery`](https://sphinx-gallery.github.io/stable/index.html) +extension to build our examples gallery. + +If you would like to build the documentation locally: + +```bash +cd docs +# regenerate the api guide +python source/generate_api.py + +# build locally +make html ``` -4. Finally make a **draft** PR against the `main` branch. When you think the PR is ready, mark it for review to trigger tests using our CI pipeline. If you need to make changes, please set the PR to a draft when pushing further commits until it's ready for review scion. We will get back to your with any further suggestions! +#### Adding documentation + +All public-facing functions and classes should have complete docstrings, which start with a one-line short summary of the function, +a medium-length description of the function / class and what it does, and a complete description of all arguments and return values. +Docstrings should be comprehensive, providing the information necessary for a user to use the method or property without going through the code. + +Private functions and classes should have sufficient explanation that other developers know what the function / class does and how to use it, +but do not need to be as extensive. + +We follow the [numpydoc](https://numpydoc.readthedocs.io/en/latest/) conventions for docstring structure. + +### Contributing Quick Guide + +This section is a brief introduction to how to contribute to `fastplotlib`. It is intended for individuals who have prior experience with contributing +to open source software packages. + +> **_NOTE:_** +> We use [git-lfs](https://git-lfs.com) for storing large files, such as ground-truths for tests, so you will need +> to [install it](https://github.com/git-lfs/git-lfs#installing) before cloning the repo. + +1) Fork and clone the repo + +2) Install locally with developer dependencies + +```bash +# after cloning +cd fastplotlib +# install dev dependencies +pip install -e ".[imgui, tests, docs, notebook]" +``` + +3) Check out a feature branch from `main` + +4) Lint codebase and make sure tests pass + +```bash +# black format only the source code +black fastplotlib/ + +# run tests +# backend tests +RENDERCANVAS_FORCE_OFFSCREEN=1 pytest tests/ + +# desktop examples +pytest -v examples + +# notebook examples +FASTPLOTLIB_NB_TESTS=1 pytest --nbmake examples/notebooks/ +``` + +5) Update screenshots if necessary ([see testing](#testing-details)) + +6) Push and open a PR (pull request) against the `main` branch + +> **Note:** +> The tests labeled "CI / Tests" must pass, but the tests labeled "CI / Tests - pygfx release" do not necessarily need to pass. The difference between these two workflows is "CI / Tests" uses the `main` branch of [`pygfx`](https://github.com/pygfx/pygfx) whereas "CI / Tests - pygfx release" uses the latest release of `pygfx`. +> Since `fastplotlib`, `pygfx`, and `wgpu` are all under rapid development we aim to keep `fastplotlib` up to date with `pygfx@main` until `pygfx` stabilizes. The workflow "CI / Tests - pygfx release" is to inform us if any test failures using the release version of `pygfx` are a significant release blocker for `fastplotlib`. Once you make a PR we will help guide you through any failures with "CI / Tests - pygfx release"! diff --git a/GOVERNANCE.md b/GOVERNANCE.md new file mode 100644 index 000000000..876757d40 --- /dev/null +++ b/GOVERNANCE.md @@ -0,0 +1,128 @@ +# fastplotlib governance + +The governance of fastplotlib applies to all fastplotlib related activities. This includes the fastplotlib GitHub organization, all repositories under the fastplotlib GitHub organization, as well as any events or workshops organized by members of the fastplotlib Leadership Team. + +The purpose of this document is to formalize the governance process used by the fastplotlib project, to clarify how decisions are made and how the various elements of our community interact. + +## Mission + +The mission of `fastplotlib` is to leverage new graphics APIs and modern GPU hardware to create fast and interactive scientific visualizations using an expressive and elegant API. + +`fastplotlib` aims to provide a library that allows for the following: +- Rapid prototyping and algorithm development +- Realtime analysis and visualization +- Efficient rendering of thousands of objects +- Compatibility with lazy-loading and lazy-compute objects +- Shipping dependent packages as a distributable (ex: PyInstaller) + +Ultimately, `fastplotlib` is, and will always be, a free and open-source project that belongs to the community. Our end goal is to aid in the advancement of science, and as a result, we will guide the project in a direction that best serves our community in achieving this purpose. + +## Leadership Team + +### Maintainers + +The maintainers are the core developers of fastplotlib and together have a complete understanding of the codebase. They are also known as code-owners. At any given time, there must be a minimum of two maintainers. + +The current maintainers are: + +1. [Kushal Kolar](https://github.com/kushalkolar) +1. [Caitlin Lewis](https://github.com/clewis7) + +Responsibilities: + +* Carry out the `fastplotlib` mission. +* Work towards completion of the roadmap. +* Timely responses to issues and pull requests. +* Code review. +* Attend a yearly Roadmap meeting. +* Be available for conflict resolution. + +### Advisory Committee + +The Advisory Committee holds a significant interest in fastplotlib as determined solely by the **Maintainers**. + +1. Amol Pasarkar +1. Eric Thomson +1. Andrea Giovannucci +1. John Pearson +1. Almar Klein + +Responsibilities: + +* Help carry out the `fastplotlib` mission. +* Provide strategic guidance. +* Attend a yearly Roadmap meeting. +* Be available for conflict resolution. + +### Neutral moderator + +No voting power, has no stake in the fastplotlib project. + +* Reagan Bullins + +Responsibilities: + +* Facilitate conflict resolution without voting power. + +## Adding a member to the advisory committee +1. Only individuals, not organizations, may be added to the leadership team. A candidate individual must be nominated by a current member of the leadership team. +2. A candidate must: + * Be committed to the fastplotlib mission. + * Have demonstrated contibutions to `fastplotlib` through one of: + * Significant contributions to the codebase. + * Significant application of fastplotlib in a dependent package. + * Significant technical guidance or feedback on the development of `fastplotlib`. + +## Adding a maintainer + +Candidate maintainers must have demonstrated prolonged and significant contributions to the codebase over a long period of time. A candidate can be nominated by any current maintainer. The candidate may then be added as a maintainer through a unanimous vote within the current maintainers. + +## Decision making + +Decisions about the future of the project are made through discussion with all members of the community. All non-sensitive project management discussion takes place on the issue tracker. Occasionally, sensitive discussions may occur on a private core developer medium. + +Decisions should be made in accordance with the mission and code of conduct of the `fastplotlib` project. + +We use a ā€œconsensus seekingā€ process for making decisions. The Leadership Team tries to find a resolution that has no open objections among Leadership Team members. Leadership Team members are expected to distinguish between fundamental objections to a proposal and minor perceived flaws that they can live with, and not hold up the decision-making process for the latter. If no option can be found without objections, the decision is escalated to the maintainers who have ultimate authority. + +Decisions are made according to the following rules: + +Minor documentation changes, such as typo fixes, or addition / correction of a sentence, require approval by a maintainer and no disagreement or requested changes by other maintainers on the issue or pull request page via lazy consensus. Pull-request authors are expected to give ā€œreasonable timeā€ to others to give their opinion on the pull request if they’re not confident others would agree. + +Code changes and major documentation changes require agreement by one maintainer and no disagreement or requested changes by other maintainers on the issue or pull-request page (lazy consensus). For all changes of this type, maintainers are expected to give ā€œreasonable timeā€ after approval and before merging for others to weigh in on the pull request in its final state. + +Changes to the API principles require a dedicated issue on our issue tracker and follow the decision-making process outlined above. + +Changes to this governance model or our mission, vision, and values require a dedicated issue on our issue tracker and follow the decision-making process outlined above. + +If an objection is raised on a lazy consensus, the proposer can appeal to the Leadership Team and the change can be approved or rejected by escalating to the maintainers. + +## Conflict Resolution + +Anyone (absolutely anyone, not just the leadership team members) who feels that the code of conduct or governance document has been breached may invoke a vote by contacting the neutral moderator. + +### Process + +#### Usual process + +1. Contact the neutral moderator with a description of the conflict, max of 250 words. +2. Neutral moderator must schedule a vote within 15 days. If that is not possible then within the next 45 days. +3. The individual who has invoked the conflict vote can choose to present their case, or they may choose to let the neutral moderator represent them. + * Every individual involved in the conflict is given a maximum of 15 minutes to be represented. This time limit may be expanded at the discretion of the neutral moderator if a justifiable reason is provided. +4. The maintainers vote on one of the actions from ā€œEnforcement Guidelinesā€: https://www.contributor-covenant.org/version/2/1/code_of_conduct/. It is advised that the first offense leads to action (1) ā€œCorrectionā€. Repeated or serious offenses from the same individual/organization may lead to escalating levels of actions. Very bad behavior, as determined by the leadership team, can justify a first offense resulting in (3) ā€œTemporary Banā€ or (4) ā€œPermanent Banā€. +5. The advisory committee members may advise on the actions, but the ultimate decision is voted on by the maintainers. + +#### Bot accounts, LLM accounts, and spam + +Unsolicited bot accounts, inauthentic interaction that is completetely generated by an LLM, and LLM spam are against our Code of Conduct. Bot accounts with fully LLM generated comments, issues, pull requests, discussion posts, or any other unsolicited LLM generated content will be deleted by the maintainers without notice and the account will not be allowed to interact with the fastplotlib organization. + +## Transparency + +Governance decisions, meeting minutes, and voting outcomes are publicly documented and accessible. We aim for transparency to allow the broader community to understand and trust the governance process. + +## Changes to this governance document + +**Effective until February 5, 2026** + +Moving forward, `fastplotlib` will maintain the governance model as outlined above. The core maintainers (Kushal Kolar & Caitlin Lewis) will revisit in +one year to propose any necessary changes to the governance structure. diff --git a/LICENSE b/LICENSE index eb132f363..33e2266c5 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2023 Kushal Kolar + Copyright 2025 Kushal Kolar, Caitlin Lewis Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 121ea2fd0..000000000 --- a/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -recursive-include fastplotlib/utils/colormaps/ * -include fastplotlib/VERSION diff --git a/README.md b/README.md index 0f9ccf547..5109d26aa 100644 --- a/README.md +++ b/README.md @@ -4,26 +4,39 @@ --- -[![CI](https://github.com/kushalkolar/fastplotlib/actions/workflows/ci.yml/badge.svg)](https://github.com/kushalkolar/fastplotlib/actions/workflows/ci.yml) +[![CI](https://github.com/fastplotlib/fastplotlib/actions/workflows/ci.yml/badge.svg)](https://github.com/fastplotlib/fastplotlib/actions/workflows/ci.yml) [![PyPI version](https://badge.fury.io/py/fastplotlib.svg)](https://badge.fury.io/py/fastplotlib) -[![Documentation Status](https://readthedocs.org/projects/fastplotlib/badge/?version=latest)](https://fastplotlib.readthedocs.io/en/latest/?badge=latest) -[![Gitter](https://badges.gitter.im/fastplotlib/community.svg)](https://gitter.im/fastplotlib/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![Deploy docs](https://github.com/fastplotlib/fastplotlib/actions/workflows/docs-deploy.yml/badge.svg)](https://fastplotlib.org/ver/dev/) +[![DOI](https://zenodo.org/badge/485481453.svg)](https://zenodo.org/doi/10.5281/zenodo.13365890) -[**Installation**](https://github.com/kushalkolar/fastplotlib#installation) | +[**Installation**](https://github.com/fastplotlib/fastplotlib#installation) | [**GPU Drivers**](https://github.com/kushalkolar/fastplotlib#graphics-drivers) | +[**Documentation**](https://github.com/fastplotlib/fastplotlib#documentation) | [**Examples**](https://github.com/kushalkolar/fastplotlib#examples) | [**Contributing**](https://github.com/kushalkolar/fastplotlib#heart-contributing) -A fast plotting library built using the [`pygfx`](https://github.com/pygfx/pygfx) rendering engine that can utilize [Vulkan](https://en.wikipedia.org/wiki/Vulkan), [DX12](https://en.wikipedia.org/wiki/DirectX#DirectX_12), or [Metal](https://developer.apple.com/metal/) via WGPU, so it is very fast! We also aim to be an expressive plotting library that enables rapid prototyping for large scale explorative scientific visualization. +Next-gen plotting library built using the [`pygfx`](https://github.com/pygfx/pygfx) rendering engine that utilizes [Vulkan](https://en.wikipedia.org/wiki/Vulkan), [DX12](https://en.wikipedia.org/wiki/DirectX#DirectX_12), or [Metal](https://developer.apple.com/metal/) via WGPU, so it is very fast! `fastplotlib` is an expressive plotting library that enables rapid prototyping for large scale exploratory scientific visualization. -![scipy-fpl](https://github.com/fastplotlib/fastplotlib/assets/9403332/b981a54c-05f9-443f-a8e4-52cd01cd802a) +
+ +
-### SciPy 2023 Talk +> **Note:** +> `fastplotlib` is currently in the **late alpha stage**, but you're welcome to use it or contribute! See our [Roadmap](https://github.com/kushalkolar/fastplotlib/issues/55). Also, see this for a discussion on API stability: https://github.com/fastplotlib/fastplotlib/issues/121 -[![fpl_thumbnail](http://i3.ytimg.com/vi/Q-UJpAqljsU/hqdefault.jpg)](https://www.youtube.com/watch?v=Q-UJpAqljsU) +# What are *some* things I can do with `fastplotlib`? -Notebooks from talk: https://github.com/fastplotlib/fastplotlib-scipy2023 +- GPU-accelerated visualization +- interactive visualization via an intuitive and expressive API + +- rapid prototyping and algorithm design + +- easy exploration and fast rendering of large-scale data + +- design, develop, evaluate, and ship machine learning models + +- create visualizations for real-time acquisition systems for scientific instruments (cameras, etc.) # Supported frameworks @@ -34,137 +47,98 @@ Notebooks from talk: https://github.com/fastplotlib/fastplotlib-scipy2023 :heavy_check_mark: `glfw`\ :heavy_check_mark: `wxPython` -**Notes:**\ -:heavy_check_mark: You can use a non-blocking `glfw` canvas from a notebook, as long as you're working locally or have a way to forward the remote graphical desktop (such as X11 forwarding).\ -:grey_exclamation: We do not officially support `jupyter notebook` through `jupyter_rfb`, this may change with notebook v7\ -:disappointed: [`jupyter_rfb`](https://github.com/vispy/jupyter_rfb) does not work in collab yet, see https://github.com/vispy/jupyter_rfb/pull/77 - -> **Note** -> -> `fastplotlib` is currently in the **alpha stage with breaking changes every ~month**, but you're welcome to try it out or contribute! See our [Roadmap](https://github.com/kushalkolar/fastplotlib/issues/55). See this for a discussion on API stability: https://github.com/fastplotlib/fastplotlib/issues/121 +Write your code once and run it anywhere. Whether you are using `Qt`, `glfw`, `jupyter lab`, or doing offscreen rendering, `fastplotlib` works across all major platforms (Linux, Windows, Mac OS X) :smile: See the [FAQ](https://www.fastplotlib.org/ver/dev/user_guide/faq.html) for more details on where and how you can use `fastplotlib`. # Documentation -http://fastplotlib.readthedocs.io/ +http://www.fastplotlib.org/ver/dev -The Quickstart guide is not interactive. We recommend cloning/downloading the repo and trying out the `desktop` or `notebook` examples: https://github.com/kushalkolar/fastplotlib/tree/main/examples - -If someone wants to integrate `pyodide` with `pygfx` we would be able to have live interactive examples! :smiley: - -Questions, issues, ideas? Post an [issue](https://github.com/fastplotlib/fastplotlib/issues) or post on the [discussion forum](https://github.com/fastplotlib/fastplotlib/discussions)! +Questions, issues, ideas? You are welcome to post an [issue](https://github.com/fastplotlib/fastplotlib/issues) or post on the [discussion forum](https://github.com/fastplotlib/fastplotlib/discussions)! :smiley: # Installation -Install using `pip`. +To install use pip: -### Minimal, use with your own `Qt` or `glfw` applications ```bash -pip install fastplotlib -``` +# with imgui and jupyterlab +pip install -U "fastplotlib[notebook,imgui]" -**This does not give you `Qt` or `glfw`, you will have to install one of them yourself depending on your preference**. +# minimal install, install glfw, pyqt6 or pyside6 separately +pip install -U fastplotlib -### Notebook -```bash -pip install "fastplotlib[notebook]" +# with imgui +pip install -U "fastplotlib[imgui]" + +# to use in jupyterlab without imgui +pip install -U "fastplotlib[notebook]" ``` -**Optional: install `simplejpeg` for much faster notebook visualization, you will need C compilers and [libjpeg-turbo](https://libjpeg-turbo.org/) to install it:** +We strongly recommend installing ``simplejpeg`` for use in notebooks, you must first install [libjpeg-turbo](https://libjpeg-turbo.org/) + +- If you use ``conda``, you can get ``libjpeg-turbo`` through conda. +- If you are on linux, you can get it through your distro's package manager. +- For Windows and Mac compiled binaries are available on their release page: https://github.com/libjpeg-turbo/libjpeg-turbo/releases + +Once you have ``libjpeg-turbo``: ```bash pip install simplejpeg ``` -> **Note** -> -> `fastplotlib` and `pygfx` are fast evolving projects, the version available through pip might be outdated, you will need to follow the "For developers" instructions below if you want the latest features. You can find the release history on pypi here: https://pypi.org/project/fastplotlib/#history +> **Note:** +> `fastplotlib` and `pygfx` are fast evolving projects, the version available through pip might be outdated, you will need to follow the "For developers" instructions below if you want the latest features. You can find the release history here: https://github.com/fastplotlib/fastplotlib/releases ### For developers + +Make sure you have [git-lfs](https://github.com/git-lfs/git-lfs#installing) installed. + ```bash -git clone https://github.com/kushalkolar/fastplotlib.git +git clone https://github.com/fastplotlib/fastplotlib.git cd fastplotlib # install all extras in place -pip install -e ".[notebook,docs,tests]" -``` - -# Examples +pip install -e ".[notebook,docs,tests,imgui]" -> **Note** -> -> `fastplotlib` and `pygfx` are fast evolving, you may require the latest `pygfx` and `fastplotlib` from github to use the examples in the main branch. - -Note that `fastplotlib` code is basically identical between desktop and notebook usage. The differences are: -- Running in `Qt` or `glfw` require a `fastplotlib.run()` call (which is really just a `wgpu` `run()` call) -- Notebooks plots have ipywidget-based toolbars and widgets šŸ˜„ - -### Desktop examples using `glfw` or `Qt` - -GLFW examples are here. GLFW is a "minimal" desktop framework. - -https://github.com/fastplotlib/fastplotlib/tree/main/examples/desktop - -Qt examples are here: - -https://github.com/fastplotlib/fastplotlib/tree/main/examples/qt - -Some of the examples require imageio: +# install latest pygfx +pip install git+https://github.com/pygfx/pygfx.git@main ``` -pip install imageio -``` - -### Notebook examples -Notebook examples are here: +See [Contributing](https://github.com/fastplotlib/fastplotlib?tab=readme-ov-file#heart-contributing) for more details on development -https://github.com/fastplotlib/fastplotlib/tree/main/examples/notebooks - -**Start with `simple.ipynb`.** +# Examples -Some of the examples require imageio: -``` -pip install imageio -``` +Examples gallery: http://fastplotlib.org/ver/dev/_gallery/index.html -### Video +User guide: http://fastplotlib.org/ver/dev/user_guide/guide.html -You can watch our SciPy 2023 talk if you prefer watching demos: https://github.com/fastplotlib/fastplotlib#scipy-talk +`fastplotlib` code is identical across notebook (`jupyterlab`), and desktop use with `Qt`/`PySide` or `glfw`. -## Graphics drivers +**Notebooks** -You will need a relatively modern GPU (newer integrated GPUs in CPUs are usually fine). Generally if your GPU is from 2017 or later it should be fine. +The `quickstart.ipynb` tutorial notebook is a great way to get familiar with the API: https://github.com/fastplotlib/fastplotlib/tree/main/examples/notebooks/quickstart.ipynb -For more information see: https://wgpu-py.readthedocs.io/en/stable/start.html#platform-requirements +# GPU drivers and requirements -### Windows: -Vulkan drivers should be installed by default on Windows 11, but you will need to install your GPU manufacturer's driver package (Nvidia or AMD). If you have an integrated GPU within your CPU, you might still need to install a driver package too, check your CPU manufacturer's info. +Generally if your GPU is from 2017 or later it should be fine. Modern integrated graphics are usually fine for many use cases. The exact requirements will depend on how complex your visualization is and how many objects you need to render. -We also recommend installing C compilers so that you can install `simplejpeg` which improves remote frame buffer performance in notebooks. +More detailed information on GPUs and drivers is here: http://fastplotlib.org/ver/dev/user_guide/gpu.html -### Linux: -Debian based distros: +For more detailed information, such as use on cloud computing infrastructure, see the WGPU docs: https://wgpu-py.readthedocs.io/en/stable/start.html#cloud-compute -```bash -sudo apt install mesa-vulkan-drivers -# for better performance with the remote frame buffer install libjpeg-turbo -sudo apt install libjpeg-turbo -``` +# Contributing :heart: -For other distros install the appropriate vulkan driver package, and optionally the corresponding `libjpeg-turbo` package for better remote-frame-buffer performance in jupyter notebooks. +We welcome contributions! See the contributing guide: https://github.com/fastplotlib/fastplotlib/blob/main/CONTRIBUTING.md -#### CPU/software rendering (Lavapipe) +You can also take a look at our [**Roadmap for 2025**](https://github.com/fastplotlib/fastplotlib/issues/55) and [**Issues**](https://github.com/fastplotlib/fastplotlib/issues) for ideas on how to contribute! -If you do not have a GPU you can perform limited software rendering using lavapipe. This should get you everything you need for that on Debian or Ubuntu based distros: +# Developers :brain: -```bash -sudo apt install llvm-dev libturbojpeg* libgl1-mesa-dev libgl1-mesa-glx libglapi-mesa libglx-mesa0 mesa-common-dev mesa-vulkan-drivers -``` +- [**Kushal Kolar**](https://github.com/kushalkolar) -### Mac OSX: -WGPU uses Metal instead of Vulkan on Mac. You will need at least Mac OSX 10.13. The OS should come with Metal pre-installed so you should be good to go! +- [**Caitlin Lewis**](https://github.com/clewis7) -# :heart: Contributing +- [**Almar Klein**](https://github.com/almarklein) -We welcome contributions! See the contributing guide: https://github.com/kushalkolar/fastplotlib/blob/main/CONTRIBUTING.md +- [**Amol Pasarkar**](https://github.com/apasarkar) -You can also take a look at our [**Roadmap for 2023**](https://github.com/kushalkolar/fastplotlib/issues/55) and [**Issues**](https://github.com/kushalkolar/fastplotlib/issues) for ideas on how to contribute! +A special thanks to all of the `pygfx` developers and the amazing work they have done. diff --git a/apt.txt b/apt.txt deleted file mode 100644 index 42b836e1a..000000000 --- a/apt.txt +++ /dev/null @@ -1,3 +0,0 @@ -libvulkan1 -mesa-vulkan-drivers -neofetch diff --git a/docs/source/_static/guide_animation.webp b/docs/source/_static/guide_animation.webp new file mode 100644 index 000000000..f204fa117 Binary files /dev/null and b/docs/source/_static/guide_animation.webp differ diff --git a/docs/source/_static/guide_click_event.webp b/docs/source/_static/guide_click_event.webp new file mode 100644 index 000000000..1f511396c Binary files /dev/null and b/docs/source/_static/guide_click_event.webp differ diff --git a/docs/source/_static/guide_hello_world.png b/docs/source/_static/guide_hello_world.png new file mode 100644 index 000000000..ccffcbac5 --- /dev/null +++ b/docs/source/_static/guide_hello_world.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97fda350fd73fc33792447114828884563862cae1f89530f242360d72f284ccc +size 106236 diff --git a/docs/source/_static/guide_hello_world_fancy_slicing.png b/docs/source/_static/guide_hello_world_fancy_slicing.png new file mode 100644 index 000000000..c5d0a1441 --- /dev/null +++ b/docs/source/_static/guide_hello_world_fancy_slicing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:523160dd2a81b6788bef6a57392f194239252ad58cd64ec9e5408040bd7130e4 +size 138165 diff --git a/docs/source/_static/guide_hello_world_simple_slicing.png b/docs/source/_static/guide_hello_world_simple_slicing.png new file mode 100644 index 000000000..6d66bc7c7 --- /dev/null +++ b/docs/source/_static/guide_hello_world_simple_slicing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd3ee6a1de4ef244969014f0e8e2cb548f8c4ff8b865e4cc08f728412f9189bf +size 101339 diff --git a/docs/source/_static/guide_hello_world_vmax.png b/docs/source/_static/guide_hello_world_vmax.png new file mode 100644 index 000000000..a835c41ac --- /dev/null +++ b/docs/source/_static/guide_hello_world_vmax.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0085ffeddcf765a6902eea71659de40c9034648dee587d33068b7603ea08ad3a +size 93647 diff --git a/docs/source/_static/guide_image_widget.webp b/docs/source/_static/guide_image_widget.webp new file mode 100644 index 000000000..2fc206041 Binary files /dev/null and b/docs/source/_static/guide_image_widget.webp differ diff --git a/docs/source/_static/guide_imgui.png b/docs/source/_static/guide_imgui.png new file mode 100644 index 000000000..6c17e36b3 --- /dev/null +++ b/docs/source/_static/guide_imgui.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:262dfd4e83abba504a3630c74ba873fbe6471fdb69b32f250cd372fa67c4a44c +size 63997 diff --git a/docs/source/_static/guide_ipywidgets.webp b/docs/source/_static/guide_ipywidgets.webp new file mode 100644 index 000000000..9a7963381 Binary files /dev/null and b/docs/source/_static/guide_ipywidgets.webp differ diff --git a/docs/source/_static/guide_linear_selector.webp b/docs/source/_static/guide_linear_selector.webp new file mode 100644 index 000000000..c60ec6c03 Binary files /dev/null and b/docs/source/_static/guide_linear_selector.webp differ diff --git a/docs/source/_static/switcher.json b/docs/source/_static/switcher.json new file mode 100644 index 000000000..9f792b252 --- /dev/null +++ b/docs/source/_static/switcher.json @@ -0,0 +1,22 @@ +[ + { + "name": "release", + "version": "v0.4.0", + "url": "http://www.fastplotlib.org/" + }, + { + "name": "dev/main", + "version": "dev", + "url": "http://www.fastplotlib.org/ver/dev" + }, + { + "name": "v0.3.0", + "version": "v0.3.0", + "url": "http://www.fastplotlib.org/ver/0.3.0" + }, + { + "name": "v0.4.0", + "version": "v0.4.0", + "url": "http://www.fastplotlib.org/ver/0.4.0" + } +] diff --git a/docs/source/_templates/autosummary/class.rst b/docs/source/_templates/autosummary/class.rst index d4fd5208b..3693c0102 100644 --- a/docs/source/_templates/autosummary/class.rst +++ b/docs/source/_templates/autosummary/class.rst @@ -3,3 +3,6 @@ .. currentmodule:: {{ module }} .. autoclass:: {{ objname }} + +.. minigallery:: fastplotlib.{{ objname }} + :add-heading: Examples diff --git a/docs/source/_templates/autosummary/method.rst b/docs/source/_templates/autosummary/method.rst index 306d2aab5..39daedd4b 100644 --- a/docs/source/_templates/autosummary/method.rst +++ b/docs/source/_templates/autosummary/method.rst @@ -3,3 +3,6 @@ .. currentmodule:: {{ module }} .. automethod:: {{ objname }} + +.. minigallery:: fastplotlib.{{ objname }} + :add-heading: Examples diff --git a/docs/source/_templates/autosummary/property.rst b/docs/source/_templates/autosummary/property.rst index c31bebe07..509e46b8a 100644 --- a/docs/source/_templates/autosummary/property.rst +++ b/docs/source/_templates/autosummary/property.rst @@ -3,3 +3,6 @@ .. currentmodule:: {{ module }} .. autoproperty:: {{ objname }} + +.. minigallery:: fastplotlib.{{ objname }} + :add-heading: Examples diff --git a/docs/source/api/fastplotlib.rst b/docs/source/api/fastplotlib.rst new file mode 100644 index 000000000..34dc89049 --- /dev/null +++ b/docs/source/api/fastplotlib.rst @@ -0,0 +1,16 @@ +fastplotlib +*********** + +.. currentmodule:: fastplotlib + +.. autofunction:: fastplotlib.pause_events + +.. autofunction:: fastplotlib.enumerate_adapters + +.. autofunction:: fastplotlib.select_adapter + +.. autofunction:: fastplotlib.print_wgpu_report + +fastplotlib.loop +------------------ +See the rendercanvas docs: https://rendercanvas.readthedocs.io/stable/api.html#rendercanvas.BaseLoop \ No newline at end of file diff --git a/docs/source/api/graphic_features/CmapFeature.rst b/docs/source/api/graphic_features/CmapFeature.rst deleted file mode 100644 index 7cc2f681f..000000000 --- a/docs/source/api/graphic_features/CmapFeature.rst +++ /dev/null @@ -1,36 +0,0 @@ -.. _api.CmapFeature: - -CmapFeature -*********** - -=========== -CmapFeature -=========== -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: CmapFeature_api - - CmapFeature - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: CmapFeature_api - - CmapFeature.buffer - CmapFeature.name - CmapFeature.values - -Methods -~~~~~~~ -.. autosummary:: - :toctree: CmapFeature_api - - CmapFeature.add_event_handler - CmapFeature.block_events - CmapFeature.clear_event_handlers - CmapFeature.remove_event_handler - diff --git a/docs/source/api/graphic_features/ColorFeature.rst b/docs/source/api/graphic_features/ColorFeature.rst deleted file mode 100644 index 3ed84cd70..000000000 --- a/docs/source/api/graphic_features/ColorFeature.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. _api.ColorFeature: - -ColorFeature -************ - -============ -ColorFeature -============ -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: ColorFeature_api - - ColorFeature - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: ColorFeature_api - - ColorFeature.buffer - -Methods -~~~~~~~ -.. autosummary:: - :toctree: ColorFeature_api - - ColorFeature.add_event_handler - ColorFeature.block_events - ColorFeature.clear_event_handlers - ColorFeature.remove_event_handler - diff --git a/docs/source/api/graphic_features/Deleted.rst b/docs/source/api/graphic_features/Deleted.rst new file mode 100644 index 000000000..ffc704917 --- /dev/null +++ b/docs/source/api/graphic_features/Deleted.rst @@ -0,0 +1,35 @@ +.. _api.Deleted: + +Deleted +******* + +======= +Deleted +======= +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Deleted_api + + Deleted + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Deleted_api + + Deleted.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Deleted_api + + Deleted.add_event_handler + Deleted.block_events + Deleted.clear_event_handlers + Deleted.remove_event_handler + Deleted.set_value + diff --git a/docs/source/api/graphic_features/FeatureEvent.rst b/docs/source/api/graphic_features/FeatureEvent.rst deleted file mode 100644 index f22ee3ef4..000000000 --- a/docs/source/api/graphic_features/FeatureEvent.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _api.FeatureEvent: - -FeatureEvent -************ - -============ -FeatureEvent -============ -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: FeatureEvent_api - - FeatureEvent - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: FeatureEvent_api - - -Methods -~~~~~~~ -.. autosummary:: - :toctree: FeatureEvent_api - - diff --git a/docs/source/api/graphic_features/FontSize.rst b/docs/source/api/graphic_features/FontSize.rst new file mode 100644 index 000000000..5e34c6038 --- /dev/null +++ b/docs/source/api/graphic_features/FontSize.rst @@ -0,0 +1,35 @@ +.. _api.FontSize: + +FontSize +******** + +======== +FontSize +======== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: FontSize_api + + FontSize + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: FontSize_api + + FontSize.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: FontSize_api + + FontSize.add_event_handler + FontSize.block_events + FontSize.clear_event_handlers + FontSize.remove_event_handler + FontSize.set_value + diff --git a/docs/source/api/graphic_features/GraphicFeature.rst b/docs/source/api/graphic_features/GraphicFeature.rst deleted file mode 100644 index 7abc3e6b2..000000000 --- a/docs/source/api/graphic_features/GraphicFeature.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. _api.GraphicFeature: - -GraphicFeature -************** - -============== -GraphicFeature -============== -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: GraphicFeature_api - - GraphicFeature - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: GraphicFeature_api - - -Methods -~~~~~~~ -.. autosummary:: - :toctree: GraphicFeature_api - - GraphicFeature.add_event_handler - GraphicFeature.block_events - GraphicFeature.clear_event_handlers - GraphicFeature.remove_event_handler - diff --git a/docs/source/api/graphic_features/GraphicFeatureEvent.rst b/docs/source/api/graphic_features/GraphicFeatureEvent.rst new file mode 100644 index 000000000..233462052 --- /dev/null +++ b/docs/source/api/graphic_features/GraphicFeatureEvent.rst @@ -0,0 +1,38 @@ +.. _api.GraphicFeatureEvent: + +GraphicFeatureEvent +******************* + +=================== +GraphicFeatureEvent +=================== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: GraphicFeatureEvent_api + + GraphicFeatureEvent + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: GraphicFeatureEvent_api + + GraphicFeatureEvent.bubbles + GraphicFeatureEvent.cancelled + GraphicFeatureEvent.current_target + GraphicFeatureEvent.root + GraphicFeatureEvent.target + GraphicFeatureEvent.time_stamp + GraphicFeatureEvent.type + +Methods +~~~~~~~ +.. autosummary:: + :toctree: GraphicFeatureEvent_api + + GraphicFeatureEvent.cancel + GraphicFeatureEvent.stop_propagation + diff --git a/docs/source/api/graphic_features/GraphicFeatureIndexable.rst b/docs/source/api/graphic_features/GraphicFeatureIndexable.rst deleted file mode 100644 index 7bd1383bc..000000000 --- a/docs/source/api/graphic_features/GraphicFeatureIndexable.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. _api.GraphicFeatureIndexable: - -GraphicFeatureIndexable -*********************** - -======================= -GraphicFeatureIndexable -======================= -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: GraphicFeatureIndexable_api - - GraphicFeatureIndexable - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: GraphicFeatureIndexable_api - - GraphicFeatureIndexable.buffer - -Methods -~~~~~~~ -.. autosummary:: - :toctree: GraphicFeatureIndexable_api - - GraphicFeatureIndexable.add_event_handler - GraphicFeatureIndexable.block_events - GraphicFeatureIndexable.clear_event_handlers - GraphicFeatureIndexable.remove_event_handler - diff --git a/docs/source/api/graphic_features/HeatmapCmapFeature.rst b/docs/source/api/graphic_features/HeatmapCmapFeature.rst deleted file mode 100644 index bac43c9b9..000000000 --- a/docs/source/api/graphic_features/HeatmapCmapFeature.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. _api.HeatmapCmapFeature: - -HeatmapCmapFeature -****************** - -================== -HeatmapCmapFeature -================== -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: HeatmapCmapFeature_api - - HeatmapCmapFeature - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: HeatmapCmapFeature_api - - HeatmapCmapFeature.name - HeatmapCmapFeature.vmax - HeatmapCmapFeature.vmin - -Methods -~~~~~~~ -.. autosummary:: - :toctree: HeatmapCmapFeature_api - - HeatmapCmapFeature.add_event_handler - HeatmapCmapFeature.block_events - HeatmapCmapFeature.clear_event_handlers - HeatmapCmapFeature.remove_event_handler - HeatmapCmapFeature.reset_vmin_vmax - diff --git a/docs/source/api/graphic_features/HeatmapDataFeature.rst b/docs/source/api/graphic_features/HeatmapDataFeature.rst deleted file mode 100644 index 029f0e199..000000000 --- a/docs/source/api/graphic_features/HeatmapDataFeature.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. _api.HeatmapDataFeature: - -HeatmapDataFeature -****************** - -================== -HeatmapDataFeature -================== -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: HeatmapDataFeature_api - - HeatmapDataFeature - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: HeatmapDataFeature_api - - HeatmapDataFeature.buffer - -Methods -~~~~~~~ -.. autosummary:: - :toctree: HeatmapDataFeature_api - - HeatmapDataFeature.add_event_handler - HeatmapDataFeature.block_events - HeatmapDataFeature.clear_event_handlers - HeatmapDataFeature.remove_event_handler - HeatmapDataFeature.update_gpu - diff --git a/docs/source/api/graphic_features/ImageCmap.rst b/docs/source/api/graphic_features/ImageCmap.rst new file mode 100644 index 000000000..2c23a3406 --- /dev/null +++ b/docs/source/api/graphic_features/ImageCmap.rst @@ -0,0 +1,35 @@ +.. _api.ImageCmap: + +ImageCmap +********* + +========= +ImageCmap +========= +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: ImageCmap_api + + ImageCmap + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: ImageCmap_api + + ImageCmap.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: ImageCmap_api + + ImageCmap.add_event_handler + ImageCmap.block_events + ImageCmap.clear_event_handlers + ImageCmap.remove_event_handler + ImageCmap.set_value + diff --git a/docs/source/api/graphic_features/ImageCmapFeature.rst b/docs/source/api/graphic_features/ImageCmapFeature.rst deleted file mode 100644 index ae65744c7..000000000 --- a/docs/source/api/graphic_features/ImageCmapFeature.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. _api.ImageCmapFeature: - -ImageCmapFeature -**************** - -================ -ImageCmapFeature -================ -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: ImageCmapFeature_api - - ImageCmapFeature - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: ImageCmapFeature_api - - ImageCmapFeature.name - ImageCmapFeature.vmax - ImageCmapFeature.vmin - -Methods -~~~~~~~ -.. autosummary:: - :toctree: ImageCmapFeature_api - - ImageCmapFeature.add_event_handler - ImageCmapFeature.block_events - ImageCmapFeature.clear_event_handlers - ImageCmapFeature.remove_event_handler - ImageCmapFeature.reset_vmin_vmax - diff --git a/docs/source/api/graphic_features/ImageCmapInterpolation.rst b/docs/source/api/graphic_features/ImageCmapInterpolation.rst new file mode 100644 index 000000000..0577f2d70 --- /dev/null +++ b/docs/source/api/graphic_features/ImageCmapInterpolation.rst @@ -0,0 +1,35 @@ +.. _api.ImageCmapInterpolation: + +ImageCmapInterpolation +********************** + +====================== +ImageCmapInterpolation +====================== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: ImageCmapInterpolation_api + + ImageCmapInterpolation + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: ImageCmapInterpolation_api + + ImageCmapInterpolation.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: ImageCmapInterpolation_api + + ImageCmapInterpolation.add_event_handler + ImageCmapInterpolation.block_events + ImageCmapInterpolation.clear_event_handlers + ImageCmapInterpolation.remove_event_handler + ImageCmapInterpolation.set_value + diff --git a/docs/source/api/graphic_features/ImageDataFeature.rst b/docs/source/api/graphic_features/ImageDataFeature.rst deleted file mode 100644 index 35fe74cf7..000000000 --- a/docs/source/api/graphic_features/ImageDataFeature.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. _api.ImageDataFeature: - -ImageDataFeature -**************** - -================ -ImageDataFeature -================ -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: ImageDataFeature_api - - ImageDataFeature - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: ImageDataFeature_api - - ImageDataFeature.buffer - -Methods -~~~~~~~ -.. autosummary:: - :toctree: ImageDataFeature_api - - ImageDataFeature.add_event_handler - ImageDataFeature.block_events - ImageDataFeature.clear_event_handlers - ImageDataFeature.remove_event_handler - ImageDataFeature.update_gpu - diff --git a/docs/source/api/graphic_features/ImageInterpolation.rst b/docs/source/api/graphic_features/ImageInterpolation.rst new file mode 100644 index 000000000..ebf69c279 --- /dev/null +++ b/docs/source/api/graphic_features/ImageInterpolation.rst @@ -0,0 +1,35 @@ +.. _api.ImageInterpolation: + +ImageInterpolation +****************** + +================== +ImageInterpolation +================== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: ImageInterpolation_api + + ImageInterpolation + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: ImageInterpolation_api + + ImageInterpolation.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: ImageInterpolation_api + + ImageInterpolation.add_event_handler + ImageInterpolation.block_events + ImageInterpolation.clear_event_handlers + ImageInterpolation.remove_event_handler + ImageInterpolation.set_value + diff --git a/docs/source/api/graphic_features/ImageVmax.rst b/docs/source/api/graphic_features/ImageVmax.rst new file mode 100644 index 000000000..aa8d6526a --- /dev/null +++ b/docs/source/api/graphic_features/ImageVmax.rst @@ -0,0 +1,35 @@ +.. _api.ImageVmax: + +ImageVmax +********* + +========= +ImageVmax +========= +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: ImageVmax_api + + ImageVmax + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: ImageVmax_api + + ImageVmax.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: ImageVmax_api + + ImageVmax.add_event_handler + ImageVmax.block_events + ImageVmax.clear_event_handlers + ImageVmax.remove_event_handler + ImageVmax.set_value + diff --git a/docs/source/api/graphic_features/ImageVmin.rst b/docs/source/api/graphic_features/ImageVmin.rst new file mode 100644 index 000000000..361cc5838 --- /dev/null +++ b/docs/source/api/graphic_features/ImageVmin.rst @@ -0,0 +1,35 @@ +.. _api.ImageVmin: + +ImageVmin +********* + +========= +ImageVmin +========= +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: ImageVmin_api + + ImageVmin + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: ImageVmin_api + + ImageVmin.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: ImageVmin_api + + ImageVmin.add_event_handler + ImageVmin.block_events + ImageVmin.clear_event_handlers + ImageVmin.remove_event_handler + ImageVmin.set_value + diff --git a/docs/source/api/graphic_features/LinearRegionSelectionFeature.rst b/docs/source/api/graphic_features/LinearRegionSelectionFeature.rst index a15825530..9f06f2682 100644 --- a/docs/source/api/graphic_features/LinearRegionSelectionFeature.rst +++ b/docs/source/api/graphic_features/LinearRegionSelectionFeature.rst @@ -6,7 +6,7 @@ LinearRegionSelectionFeature ============================ LinearRegionSelectionFeature ============================ -.. currentmodule:: fastplotlib.graphics._features +.. currentmodule:: fastplotlib.graphics.features Constructor ~~~~~~~~~~~ @@ -21,6 +21,7 @@ Properties :toctree: LinearRegionSelectionFeature_api LinearRegionSelectionFeature.axis + LinearRegionSelectionFeature.value Methods ~~~~~~~ @@ -31,4 +32,5 @@ Methods LinearRegionSelectionFeature.block_events LinearRegionSelectionFeature.clear_event_handlers LinearRegionSelectionFeature.remove_event_handler + LinearRegionSelectionFeature.set_value diff --git a/docs/source/api/graphic_features/LinearSelectionFeature.rst b/docs/source/api/graphic_features/LinearSelectionFeature.rst index aeb1ca66b..b9e71cd7b 100644 --- a/docs/source/api/graphic_features/LinearSelectionFeature.rst +++ b/docs/source/api/graphic_features/LinearSelectionFeature.rst @@ -6,7 +6,7 @@ LinearSelectionFeature ====================== LinearSelectionFeature ====================== -.. currentmodule:: fastplotlib.graphics._features +.. currentmodule:: fastplotlib.graphics.features Constructor ~~~~~~~~~~~ @@ -20,6 +20,7 @@ Properties .. autosummary:: :toctree: LinearSelectionFeature_api + LinearSelectionFeature.value Methods ~~~~~~~ @@ -30,4 +31,5 @@ Methods LinearSelectionFeature.block_events LinearSelectionFeature.clear_event_handlers LinearSelectionFeature.remove_event_handler + LinearSelectionFeature.set_value diff --git a/docs/source/api/graphic_features/Name.rst b/docs/source/api/graphic_features/Name.rst new file mode 100644 index 000000000..f5a5235d8 --- /dev/null +++ b/docs/source/api/graphic_features/Name.rst @@ -0,0 +1,35 @@ +.. _api.Name: + +Name +**** + +==== +Name +==== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Name_api + + Name + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Name_api + + Name.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Name_api + + Name.add_event_handler + Name.block_events + Name.clear_event_handlers + Name.remove_event_handler + Name.set_value + diff --git a/docs/source/api/graphic_features/Offset.rst b/docs/source/api/graphic_features/Offset.rst new file mode 100644 index 000000000..fdb2af66a --- /dev/null +++ b/docs/source/api/graphic_features/Offset.rst @@ -0,0 +1,35 @@ +.. _api.Offset: + +Offset +****** + +====== +Offset +====== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Offset_api + + Offset + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Offset_api + + Offset.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Offset_api + + Offset.add_event_handler + Offset.block_events + Offset.clear_event_handlers + Offset.remove_event_handler + Offset.set_value + diff --git a/docs/source/api/graphic_features/PointsDataFeature.rst b/docs/source/api/graphic_features/PointsDataFeature.rst deleted file mode 100644 index 078b1c535..000000000 --- a/docs/source/api/graphic_features/PointsDataFeature.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. _api.PointsDataFeature: - -PointsDataFeature -***************** - -================= -PointsDataFeature -================= -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: PointsDataFeature_api - - PointsDataFeature - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: PointsDataFeature_api - - PointsDataFeature.buffer - -Methods -~~~~~~~ -.. autosummary:: - :toctree: PointsDataFeature_api - - PointsDataFeature.add_event_handler - PointsDataFeature.block_events - PointsDataFeature.clear_event_handlers - PointsDataFeature.remove_event_handler - diff --git a/docs/source/api/graphic_features/PointsSizesFeature.rst b/docs/source/api/graphic_features/PointsSizesFeature.rst index 7915cb09d..f3f78b74b 100644 --- a/docs/source/api/graphic_features/PointsSizesFeature.rst +++ b/docs/source/api/graphic_features/PointsSizesFeature.rst @@ -6,7 +6,7 @@ PointsSizesFeature ================== PointsSizesFeature ================== -.. currentmodule:: fastplotlib.graphics._features +.. currentmodule:: fastplotlib.graphics.features Constructor ~~~~~~~~~~~ @@ -21,6 +21,8 @@ Properties :toctree: PointsSizesFeature_api PointsSizesFeature.buffer + PointsSizesFeature.shared + PointsSizesFeature.value Methods ~~~~~~~ @@ -31,4 +33,5 @@ Methods PointsSizesFeature.block_events PointsSizesFeature.clear_event_handlers PointsSizesFeature.remove_event_handler + PointsSizesFeature.set_value diff --git a/docs/source/api/graphic_features/PresentFeature.rst b/docs/source/api/graphic_features/PresentFeature.rst deleted file mode 100644 index 1ddbf1ec4..000000000 --- a/docs/source/api/graphic_features/PresentFeature.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. _api.PresentFeature: - -PresentFeature -************** - -============== -PresentFeature -============== -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: PresentFeature_api - - PresentFeature - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: PresentFeature_api - - -Methods -~~~~~~~ -.. autosummary:: - :toctree: PresentFeature_api - - PresentFeature.add_event_handler - PresentFeature.block_events - PresentFeature.clear_event_handlers - PresentFeature.remove_event_handler - diff --git a/docs/source/api/graphic_features/RectangleSelectionFeature.rst b/docs/source/api/graphic_features/RectangleSelectionFeature.rst new file mode 100644 index 000000000..cdfd1ad3f --- /dev/null +++ b/docs/source/api/graphic_features/RectangleSelectionFeature.rst @@ -0,0 +1,35 @@ +.. _api.RectangleSelectionFeature: + +RectangleSelectionFeature +************************* + +========================= +RectangleSelectionFeature +========================= +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: RectangleSelectionFeature_api + + RectangleSelectionFeature + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: RectangleSelectionFeature_api + + RectangleSelectionFeature.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: RectangleSelectionFeature_api + + RectangleSelectionFeature.add_event_handler + RectangleSelectionFeature.block_events + RectangleSelectionFeature.clear_event_handlers + RectangleSelectionFeature.remove_event_handler + RectangleSelectionFeature.set_value + diff --git a/docs/source/api/graphic_features/Rotation.rst b/docs/source/api/graphic_features/Rotation.rst new file mode 100644 index 000000000..b7729c7a4 --- /dev/null +++ b/docs/source/api/graphic_features/Rotation.rst @@ -0,0 +1,35 @@ +.. _api.Rotation: + +Rotation +******** + +======== +Rotation +======== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Rotation_api + + Rotation + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Rotation_api + + Rotation.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Rotation_api + + Rotation.add_event_handler + Rotation.block_events + Rotation.clear_event_handlers + Rotation.remove_event_handler + Rotation.set_value + diff --git a/docs/source/api/graphic_features/SizeSpace.rst b/docs/source/api/graphic_features/SizeSpace.rst new file mode 100644 index 000000000..e7c8e30be --- /dev/null +++ b/docs/source/api/graphic_features/SizeSpace.rst @@ -0,0 +1,35 @@ +.. _api.SizeSpace: + +SizeSpace +********* + +========= +SizeSpace +========= +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: SizeSpace_api + + SizeSpace + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: SizeSpace_api + + SizeSpace.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: SizeSpace_api + + SizeSpace.add_event_handler + SizeSpace.block_events + SizeSpace.clear_event_handlers + SizeSpace.remove_event_handler + SizeSpace.set_value + diff --git a/docs/source/api/graphic_features/TextData.rst b/docs/source/api/graphic_features/TextData.rst new file mode 100644 index 000000000..bf08b08d6 --- /dev/null +++ b/docs/source/api/graphic_features/TextData.rst @@ -0,0 +1,35 @@ +.. _api.TextData: + +TextData +******** + +======== +TextData +======== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: TextData_api + + TextData + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: TextData_api + + TextData.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: TextData_api + + TextData.add_event_handler + TextData.block_events + TextData.clear_event_handlers + TextData.remove_event_handler + TextData.set_value + diff --git a/docs/source/api/graphic_features/TextFaceColor.rst b/docs/source/api/graphic_features/TextFaceColor.rst new file mode 100644 index 000000000..5ab01b04b --- /dev/null +++ b/docs/source/api/graphic_features/TextFaceColor.rst @@ -0,0 +1,35 @@ +.. _api.TextFaceColor: + +TextFaceColor +************* + +============= +TextFaceColor +============= +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: TextFaceColor_api + + TextFaceColor + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: TextFaceColor_api + + TextFaceColor.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: TextFaceColor_api + + TextFaceColor.add_event_handler + TextFaceColor.block_events + TextFaceColor.clear_event_handlers + TextFaceColor.remove_event_handler + TextFaceColor.set_value + diff --git a/docs/source/api/graphic_features/TextOutlineColor.rst b/docs/source/api/graphic_features/TextOutlineColor.rst new file mode 100644 index 000000000..571261625 --- /dev/null +++ b/docs/source/api/graphic_features/TextOutlineColor.rst @@ -0,0 +1,35 @@ +.. _api.TextOutlineColor: + +TextOutlineColor +**************** + +================ +TextOutlineColor +================ +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: TextOutlineColor_api + + TextOutlineColor + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: TextOutlineColor_api + + TextOutlineColor.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: TextOutlineColor_api + + TextOutlineColor.add_event_handler + TextOutlineColor.block_events + TextOutlineColor.clear_event_handlers + TextOutlineColor.remove_event_handler + TextOutlineColor.set_value + diff --git a/docs/source/api/graphic_features/TextOutlineThickness.rst b/docs/source/api/graphic_features/TextOutlineThickness.rst new file mode 100644 index 000000000..450ae54c9 --- /dev/null +++ b/docs/source/api/graphic_features/TextOutlineThickness.rst @@ -0,0 +1,35 @@ +.. _api.TextOutlineThickness: + +TextOutlineThickness +******************** + +==================== +TextOutlineThickness +==================== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: TextOutlineThickness_api + + TextOutlineThickness + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: TextOutlineThickness_api + + TextOutlineThickness.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: TextOutlineThickness_api + + TextOutlineThickness.add_event_handler + TextOutlineThickness.block_events + TextOutlineThickness.clear_event_handlers + TextOutlineThickness.remove_event_handler + TextOutlineThickness.set_value + diff --git a/docs/source/api/graphic_features/TextureArray.rst b/docs/source/api/graphic_features/TextureArray.rst new file mode 100644 index 000000000..73facc5bf --- /dev/null +++ b/docs/source/api/graphic_features/TextureArray.rst @@ -0,0 +1,39 @@ +.. _api.TextureArray: + +TextureArray +************ + +============ +TextureArray +============ +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: TextureArray_api + + TextureArray + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: TextureArray_api + + TextureArray.buffer + TextureArray.col_indices + TextureArray.row_indices + TextureArray.shared + TextureArray.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: TextureArray_api + + TextureArray.add_event_handler + TextureArray.block_events + TextureArray.clear_event_handlers + TextureArray.remove_event_handler + TextureArray.set_value + diff --git a/docs/source/api/graphic_features/Thickness.rst b/docs/source/api/graphic_features/Thickness.rst new file mode 100644 index 000000000..dc4c5888f --- /dev/null +++ b/docs/source/api/graphic_features/Thickness.rst @@ -0,0 +1,35 @@ +.. _api.Thickness: + +Thickness +********* + +========= +Thickness +========= +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Thickness_api + + Thickness + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Thickness_api + + Thickness.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Thickness_api + + Thickness.add_event_handler + Thickness.block_events + Thickness.clear_event_handlers + Thickness.remove_event_handler + Thickness.set_value + diff --git a/docs/source/api/graphic_features/ThicknessFeature.rst b/docs/source/api/graphic_features/ThicknessFeature.rst deleted file mode 100644 index 80219a2cd..000000000 --- a/docs/source/api/graphic_features/ThicknessFeature.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. _api.ThicknessFeature: - -ThicknessFeature -**************** - -================ -ThicknessFeature -================ -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: ThicknessFeature_api - - ThicknessFeature - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: ThicknessFeature_api - - -Methods -~~~~~~~ -.. autosummary:: - :toctree: ThicknessFeature_api - - ThicknessFeature.add_event_handler - ThicknessFeature.block_events - ThicknessFeature.clear_event_handlers - ThicknessFeature.remove_event_handler - diff --git a/docs/source/api/graphic_features/UniformColor.rst b/docs/source/api/graphic_features/UniformColor.rst new file mode 100644 index 000000000..8e9d56eae --- /dev/null +++ b/docs/source/api/graphic_features/UniformColor.rst @@ -0,0 +1,35 @@ +.. _api.UniformColor: + +UniformColor +************ + +============ +UniformColor +============ +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: UniformColor_api + + UniformColor + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: UniformColor_api + + UniformColor.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: UniformColor_api + + UniformColor.add_event_handler + UniformColor.block_events + UniformColor.clear_event_handlers + UniformColor.remove_event_handler + UniformColor.set_value + diff --git a/docs/source/api/graphic_features/UniformSize.rst b/docs/source/api/graphic_features/UniformSize.rst new file mode 100644 index 000000000..e4727dcb9 --- /dev/null +++ b/docs/source/api/graphic_features/UniformSize.rst @@ -0,0 +1,35 @@ +.. _api.UniformSize: + +UniformSize +*********** + +=========== +UniformSize +=========== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: UniformSize_api + + UniformSize + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: UniformSize_api + + UniformSize.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: UniformSize_api + + UniformSize.add_event_handler + UniformSize.block_events + UniformSize.clear_event_handlers + UniformSize.remove_event_handler + UniformSize.set_value + diff --git a/docs/source/api/graphic_features/VertexCmap.rst b/docs/source/api/graphic_features/VertexCmap.rst new file mode 100644 index 000000000..77d96aaf6 --- /dev/null +++ b/docs/source/api/graphic_features/VertexCmap.rst @@ -0,0 +1,40 @@ +.. _api.VertexCmap: + +VertexCmap +********** + +========== +VertexCmap +========== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: VertexCmap_api + + VertexCmap + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: VertexCmap_api + + VertexCmap.alpha + VertexCmap.buffer + VertexCmap.name + VertexCmap.shared + VertexCmap.transform + VertexCmap.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: VertexCmap_api + + VertexCmap.add_event_handler + VertexCmap.block_events + VertexCmap.clear_event_handlers + VertexCmap.remove_event_handler + VertexCmap.set_value + diff --git a/docs/source/api/graphic_features/VertexColors.rst b/docs/source/api/graphic_features/VertexColors.rst new file mode 100644 index 000000000..d09da7a18 --- /dev/null +++ b/docs/source/api/graphic_features/VertexColors.rst @@ -0,0 +1,37 @@ +.. _api.VertexColors: + +VertexColors +************ + +============ +VertexColors +============ +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: VertexColors_api + + VertexColors + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: VertexColors_api + + VertexColors.buffer + VertexColors.shared + VertexColors.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: VertexColors_api + + VertexColors.add_event_handler + VertexColors.block_events + VertexColors.clear_event_handlers + VertexColors.remove_event_handler + VertexColors.set_value + diff --git a/docs/source/api/graphic_features/VertexPositions.rst b/docs/source/api/graphic_features/VertexPositions.rst new file mode 100644 index 000000000..d181f07b9 --- /dev/null +++ b/docs/source/api/graphic_features/VertexPositions.rst @@ -0,0 +1,37 @@ +.. _api.VertexPositions: + +VertexPositions +*************** + +=============== +VertexPositions +=============== +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: VertexPositions_api + + VertexPositions + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: VertexPositions_api + + VertexPositions.buffer + VertexPositions.shared + VertexPositions.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: VertexPositions_api + + VertexPositions.add_event_handler + VertexPositions.block_events + VertexPositions.clear_event_handlers + VertexPositions.remove_event_handler + VertexPositions.set_value + diff --git a/docs/source/api/graphic_features/Visible.rst b/docs/source/api/graphic_features/Visible.rst new file mode 100644 index 000000000..06bfd2278 --- /dev/null +++ b/docs/source/api/graphic_features/Visible.rst @@ -0,0 +1,35 @@ +.. _api.Visible: + +Visible +******* + +======= +Visible +======= +.. currentmodule:: fastplotlib.graphics.features + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Visible_api + + Visible + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Visible_api + + Visible.value + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Visible_api + + Visible.add_event_handler + Visible.block_events + Visible.clear_event_handlers + Visible.remove_event_handler + Visible.set_value + diff --git a/docs/source/api/graphic_features/index.rst b/docs/source/api/graphic_features/index.rst index 1c4b33392..90a58fe8e 100644 --- a/docs/source/api/graphic_features/index.rst +++ b/docs/source/api/graphic_features/index.rst @@ -4,19 +4,31 @@ Graphic Features .. toctree:: :maxdepth: 1 - ColorFeature - CmapFeature - ImageCmapFeature - HeatmapCmapFeature - PointsDataFeature + VertexColors + UniformColor + UniformSize + SizeSpace + Thickness + VertexPositions PointsSizesFeature - ImageDataFeature - HeatmapDataFeature - PresentFeature - ThicknessFeature - GraphicFeature - GraphicFeatureIndexable - FeatureEvent - to_gpu_supported_dtype + VertexCmap + TextureArray + ImageCmap + ImageVmin + ImageVmax + ImageInterpolation + ImageCmapInterpolation + TextData + FontSize + TextFaceColor + TextOutlineColor + TextOutlineThickness LinearSelectionFeature LinearRegionSelectionFeature + RectangleSelectionFeature + Name + Offset + Rotation + Visible + Deleted + GraphicFeatureEvent diff --git a/docs/source/api/graphic_features/to_gpu_supported_dtype.rst b/docs/source/api/graphic_features/to_gpu_supported_dtype.rst deleted file mode 100644 index 984a76157..000000000 --- a/docs/source/api/graphic_features/to_gpu_supported_dtype.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _api.to_gpu_supported_dtype: - -to_gpu_supported_dtype -********************** - -====================== -to_gpu_supported_dtype -====================== -.. currentmodule:: fastplotlib.graphics._features - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: to_gpu_supported_dtype_api - - to_gpu_supported_dtype - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: to_gpu_supported_dtype_api - - -Methods -~~~~~~~ -.. autosummary:: - :toctree: to_gpu_supported_dtype_api - - diff --git a/docs/source/api/graphics/Graphic.rst b/docs/source/api/graphics/Graphic.rst new file mode 100644 index 000000000..cf68888f5 --- /dev/null +++ b/docs/source/api/graphics/Graphic.rst @@ -0,0 +1,45 @@ +.. _api.Graphic: + +Graphic +******* + +======= +Graphic +======= +.. currentmodule:: fastplotlib + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Graphic_api + + Graphic + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Graphic_api + + Graphic.axes + Graphic.block_events + Graphic.deleted + Graphic.event_handlers + Graphic.name + Graphic.offset + Graphic.right_click_menu + Graphic.rotation + Graphic.supported_events + Graphic.visible + Graphic.world_object + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Graphic_api + + Graphic.add_axes + Graphic.add_event_handler + Graphic.clear_event_handlers + Graphic.remove_event_handler + Graphic.rotate + diff --git a/docs/source/api/graphics/HeatmapGraphic.rst b/docs/source/api/graphics/HeatmapGraphic.rst deleted file mode 100644 index 3bd2f2baa..000000000 --- a/docs/source/api/graphics/HeatmapGraphic.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. _api.HeatmapGraphic: - -HeatmapGraphic -************** - -============== -HeatmapGraphic -============== -.. currentmodule:: fastplotlib - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: HeatmapGraphic_api - - HeatmapGraphic - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: HeatmapGraphic_api - - HeatmapGraphic.children - HeatmapGraphic.position - HeatmapGraphic.position_x - HeatmapGraphic.position_y - HeatmapGraphic.position_z - HeatmapGraphic.visible - HeatmapGraphic.world_object - -Methods -~~~~~~~ -.. autosummary:: - :toctree: HeatmapGraphic_api - - HeatmapGraphic.add_linear_region_selector - HeatmapGraphic.add_linear_selector - HeatmapGraphic.link - HeatmapGraphic.reset_feature - HeatmapGraphic.set_feature - diff --git a/docs/source/api/graphics/ImageGraphic.rst b/docs/source/api/graphics/ImageGraphic.rst index 871462701..27bda3d32 100644 --- a/docs/source/api/graphics/ImageGraphic.rst +++ b/docs/source/api/graphics/ImageGraphic.rst @@ -20,12 +20,22 @@ Properties .. autosummary:: :toctree: ImageGraphic_api - ImageGraphic.children - ImageGraphic.position - ImageGraphic.position_x - ImageGraphic.position_y - ImageGraphic.position_z + ImageGraphic.axes + ImageGraphic.block_events + ImageGraphic.cmap + ImageGraphic.cmap_interpolation + ImageGraphic.data + ImageGraphic.deleted + ImageGraphic.event_handlers + ImageGraphic.interpolation + ImageGraphic.name + ImageGraphic.offset + ImageGraphic.right_click_menu + ImageGraphic.rotation + ImageGraphic.supported_events ImageGraphic.visible + ImageGraphic.vmax + ImageGraphic.vmin ImageGraphic.world_object Methods @@ -33,9 +43,13 @@ Methods .. autosummary:: :toctree: ImageGraphic_api + ImageGraphic.add_axes + ImageGraphic.add_event_handler ImageGraphic.add_linear_region_selector ImageGraphic.add_linear_selector - ImageGraphic.link - ImageGraphic.reset_feature - ImageGraphic.set_feature + ImageGraphic.add_rectangle_selector + ImageGraphic.clear_event_handlers + ImageGraphic.remove_event_handler + ImageGraphic.reset_vmin_vmax + ImageGraphic.rotate diff --git a/docs/source/api/graphics/LineCollection.rst b/docs/source/api/graphics/LineCollection.rst index 3f67feed9..12c7b5c95 100644 --- a/docs/source/api/graphics/LineCollection.rst +++ b/docs/source/api/graphics/LineCollection.rst @@ -20,15 +20,26 @@ Properties .. autosummary:: :toctree: LineCollection_api - LineCollection.children + LineCollection.axes + LineCollection.block_events LineCollection.cmap - LineCollection.cmap_values + LineCollection.colors + LineCollection.data + LineCollection.deleted + LineCollection.event_handlers LineCollection.graphics - LineCollection.position - LineCollection.position_x - LineCollection.position_y - LineCollection.position_z + LineCollection.metadatas + LineCollection.name + LineCollection.names + LineCollection.offset + LineCollection.offsets + LineCollection.right_click_menu + LineCollection.rotation + LineCollection.rotations + LineCollection.supported_events + LineCollection.thickness LineCollection.visible + LineCollection.visibles LineCollection.world_object Methods @@ -36,11 +47,14 @@ Methods .. autosummary:: :toctree: LineCollection_api + LineCollection.add_axes + LineCollection.add_event_handler LineCollection.add_graphic LineCollection.add_linear_region_selector LineCollection.add_linear_selector - LineCollection.link + LineCollection.add_rectangle_selector + LineCollection.clear_event_handlers + LineCollection.remove_event_handler LineCollection.remove_graphic - LineCollection.reset_feature - LineCollection.set_feature + LineCollection.rotate diff --git a/docs/source/api/graphics/LineGraphic.rst b/docs/source/api/graphics/LineGraphic.rst index 4aae4bbee..c6e18b41b 100644 --- a/docs/source/api/graphics/LineGraphic.rst +++ b/docs/source/api/graphics/LineGraphic.rst @@ -20,11 +20,20 @@ Properties .. autosummary:: :toctree: LineGraphic_api - LineGraphic.children - LineGraphic.position - LineGraphic.position_x - LineGraphic.position_y - LineGraphic.position_z + LineGraphic.axes + LineGraphic.block_events + LineGraphic.cmap + LineGraphic.colors + LineGraphic.data + LineGraphic.deleted + LineGraphic.event_handlers + LineGraphic.name + LineGraphic.offset + LineGraphic.right_click_menu + LineGraphic.rotation + LineGraphic.size_space + LineGraphic.supported_events + LineGraphic.thickness LineGraphic.visible LineGraphic.world_object @@ -33,9 +42,12 @@ Methods .. autosummary:: :toctree: LineGraphic_api + LineGraphic.add_axes + LineGraphic.add_event_handler LineGraphic.add_linear_region_selector LineGraphic.add_linear_selector - LineGraphic.link - LineGraphic.reset_feature - LineGraphic.set_feature + LineGraphic.add_rectangle_selector + LineGraphic.clear_event_handlers + LineGraphic.remove_event_handler + LineGraphic.rotate diff --git a/docs/source/api/graphics/LineStack.rst b/docs/source/api/graphics/LineStack.rst index 36ae6808e..e1deb75ae 100644 --- a/docs/source/api/graphics/LineStack.rst +++ b/docs/source/api/graphics/LineStack.rst @@ -20,15 +20,26 @@ Properties .. autosummary:: :toctree: LineStack_api - LineStack.children + LineStack.axes + LineStack.block_events LineStack.cmap - LineStack.cmap_values + LineStack.colors + LineStack.data + LineStack.deleted + LineStack.event_handlers LineStack.graphics - LineStack.position - LineStack.position_x - LineStack.position_y - LineStack.position_z + LineStack.metadatas + LineStack.name + LineStack.names + LineStack.offset + LineStack.offsets + LineStack.right_click_menu + LineStack.rotation + LineStack.rotations + LineStack.supported_events + LineStack.thickness LineStack.visible + LineStack.visibles LineStack.world_object Methods @@ -36,11 +47,14 @@ Methods .. autosummary:: :toctree: LineStack_api + LineStack.add_axes + LineStack.add_event_handler LineStack.add_graphic LineStack.add_linear_region_selector LineStack.add_linear_selector - LineStack.link + LineStack.add_rectangle_selector + LineStack.clear_event_handlers + LineStack.remove_event_handler LineStack.remove_graphic - LineStack.reset_feature - LineStack.set_feature + LineStack.rotate diff --git a/docs/source/api/graphics/ScatterGraphic.rst b/docs/source/api/graphics/ScatterGraphic.rst index 3c4bf3909..968f0e091 100644 --- a/docs/source/api/graphics/ScatterGraphic.rst +++ b/docs/source/api/graphics/ScatterGraphic.rst @@ -20,11 +20,20 @@ Properties .. autosummary:: :toctree: ScatterGraphic_api - ScatterGraphic.children - ScatterGraphic.position - ScatterGraphic.position_x - ScatterGraphic.position_y - ScatterGraphic.position_z + ScatterGraphic.axes + ScatterGraphic.block_events + ScatterGraphic.cmap + ScatterGraphic.colors + ScatterGraphic.data + ScatterGraphic.deleted + ScatterGraphic.event_handlers + ScatterGraphic.name + ScatterGraphic.offset + ScatterGraphic.right_click_menu + ScatterGraphic.rotation + ScatterGraphic.size_space + ScatterGraphic.sizes + ScatterGraphic.supported_events ScatterGraphic.visible ScatterGraphic.world_object @@ -33,4 +42,9 @@ Methods .. autosummary:: :toctree: ScatterGraphic_api + ScatterGraphic.add_axes + ScatterGraphic.add_event_handler + ScatterGraphic.clear_event_handlers + ScatterGraphic.remove_event_handler + ScatterGraphic.rotate diff --git a/docs/source/api/graphics/TextGraphic.rst b/docs/source/api/graphics/TextGraphic.rst index 6290dcc2e..60cd97f40 100644 --- a/docs/source/api/graphics/TextGraphic.rst +++ b/docs/source/api/graphics/TextGraphic.rst @@ -20,16 +20,20 @@ Properties .. autosummary:: :toctree: TextGraphic_api - TextGraphic.children + TextGraphic.axes + TextGraphic.block_events + TextGraphic.deleted + TextGraphic.event_handlers TextGraphic.face_color + TextGraphic.font_size + TextGraphic.name + TextGraphic.offset TextGraphic.outline_color - TextGraphic.outline_size - TextGraphic.position - TextGraphic.position_x - TextGraphic.position_y - TextGraphic.position_z + TextGraphic.outline_thickness + TextGraphic.right_click_menu + TextGraphic.rotation + TextGraphic.supported_events TextGraphic.text - TextGraphic.text_size TextGraphic.visible TextGraphic.world_object @@ -38,4 +42,9 @@ Methods .. autosummary:: :toctree: TextGraphic_api + TextGraphic.add_axes + TextGraphic.add_event_handler + TextGraphic.clear_event_handlers + TextGraphic.remove_event_handler + TextGraphic.rotate diff --git a/docs/source/api/graphics/index.rst b/docs/source/api/graphics/index.rst index 611ee5833..491013dff 100644 --- a/docs/source/api/graphics/index.rst +++ b/docs/source/api/graphics/index.rst @@ -4,10 +4,10 @@ Graphics .. toctree:: :maxdepth: 1 - ImageGraphic - ScatterGraphic + Graphic LineGraphic - HeatmapGraphic + ScatterGraphic + ImageGraphic + TextGraphic LineCollection LineStack - TextGraphic diff --git a/docs/source/api/index.rst b/docs/source/api/index.rst new file mode 100644 index 000000000..3a1184e6c --- /dev/null +++ b/docs/source/api/index.rst @@ -0,0 +1,16 @@ +API Reference +************* + +.. toctree:: + :caption: API Reference + :maxdepth: 2 + + layouts/index + graphics/index + graphic_features/index + selectors/index + tools/index + ui/index + widgets/index + fastplotlib + utils diff --git a/docs/source/api/layouts/figure.rst b/docs/source/api/layouts/figure.rst new file mode 100644 index 000000000..d191fe8ce --- /dev/null +++ b/docs/source/api/layouts/figure.rst @@ -0,0 +1,49 @@ +.. _api.Figure: + +Figure +****** + +====== +Figure +====== +.. currentmodule:: fastplotlib.layouts + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Figure_api + + Figure + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Figure_api + + Figure.cameras + Figure.canvas + Figure.controllers + Figure.layout + Figure.names + Figure.renderer + Figure.shape + Figure.show_tooltips + Figure.tooltip_manager + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Figure_api + + Figure.add_animations + Figure.add_subplot + Figure.clear + Figure.close + Figure.export + Figure.export_numpy + Figure.get_pygfx_render_area + Figure.open_popup + Figure.remove_animation + Figure.remove_subplot + Figure.show + diff --git a/docs/source/api/layouts/gridplot.rst b/docs/source/api/layouts/gridplot.rst deleted file mode 100644 index b5b03bfa4..000000000 --- a/docs/source/api/layouts/gridplot.rst +++ /dev/null @@ -1,42 +0,0 @@ -.. _api.GridPlot: - -GridPlot -******** - -======== -GridPlot -======== -.. currentmodule:: fastplotlib - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: GridPlot_api - - GridPlot - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: GridPlot_api - - GridPlot.canvas - GridPlot.renderer - GridPlot.toolbar - GridPlot.widget - -Methods -~~~~~~~ -.. autosummary:: - :toctree: GridPlot_api - - GridPlot.add_animations - GridPlot.clear - GridPlot.close - GridPlot.record_start - GridPlot.record_stop - GridPlot.remove_animation - GridPlot.render - GridPlot.show - GridPlot.start_render - diff --git a/docs/source/api/layouts/imgui_figure.rst b/docs/source/api/layouts/imgui_figure.rst new file mode 100644 index 000000000..0abfcc067 --- /dev/null +++ b/docs/source/api/layouts/imgui_figure.rst @@ -0,0 +1,53 @@ +.. _api.ImguiFigure: + +ImguiFigure +*********** + +=========== +ImguiFigure +=========== +.. currentmodule:: fastplotlib.layouts + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: ImguiFigure_api + + ImguiFigure + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: ImguiFigure_api + + ImguiFigure.cameras + ImguiFigure.canvas + ImguiFigure.controllers + ImguiFigure.guis + ImguiFigure.imgui_renderer + ImguiFigure.layout + ImguiFigure.names + ImguiFigure.renderer + ImguiFigure.shape + ImguiFigure.show_tooltips + ImguiFigure.tooltip_manager + +Methods +~~~~~~~ +.. autosummary:: + :toctree: ImguiFigure_api + + ImguiFigure.add_animations + ImguiFigure.add_gui + ImguiFigure.add_subplot + ImguiFigure.clear + ImguiFigure.close + ImguiFigure.export + ImguiFigure.export_numpy + ImguiFigure.get_pygfx_render_area + ImguiFigure.open_popup + ImguiFigure.register_popup + ImguiFigure.remove_animation + ImguiFigure.remove_subplot + ImguiFigure.show + diff --git a/docs/source/api/layouts/index.rst b/docs/source/api/layouts/index.rst new file mode 100644 index 000000000..51265fbf0 --- /dev/null +++ b/docs/source/api/layouts/index.rst @@ -0,0 +1,9 @@ +Layouts +******** + +.. toctree:: + :maxdepth: 1 + + imgui_figure + figure + subplot diff --git a/docs/source/api/layouts/plot.rst b/docs/source/api/layouts/plot.rst deleted file mode 100644 index bd38720b4..000000000 --- a/docs/source/api/layouts/plot.rst +++ /dev/null @@ -1,73 +0,0 @@ -.. _api.Plot: - -Plot -**** - -==== -Plot -==== -.. currentmodule:: fastplotlib - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: Plot_api - - Plot - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: Plot_api - - Plot.camera - Plot.canvas - Plot.controller - Plot.docks - Plot.graphics - Plot.name - Plot.parent - Plot.position - Plot.renderer - Plot.scene - Plot.selectors - Plot.toolbar - Plot.viewport - Plot.widget - -Methods -~~~~~~~ -.. autosummary:: - :toctree: Plot_api - - Plot.add_animations - Plot.add_graphic - Plot.add_heatmap - Plot.add_image - Plot.add_line - Plot.add_line_collection - Plot.add_line_stack - Plot.add_scatter - Plot.add_text - Plot.auto_scale - Plot.center_graphic - Plot.center_scene - Plot.center_title - Plot.clear - Plot.close - Plot.delete_graphic - Plot.get_rect - Plot.insert_graphic - Plot.map_screen_to_world - Plot.record_start - Plot.record_stop - Plot.remove_animation - Plot.remove_graphic - Plot.render - Plot.set_axes_visibility - Plot.set_grid_visibility - Plot.set_title - Plot.set_viewport_rect - Plot.show - Plot.start_render - diff --git a/docs/source/api/layouts/subplot.rst b/docs/source/api/layouts/subplot.rst index c61c46e05..e1c55514d 100644 --- a/docs/source/api/layouts/subplot.rst +++ b/docs/source/api/layouts/subplot.rst @@ -20,17 +20,23 @@ Properties .. autosummary:: :toctree: Subplot_api + Subplot.axes + Subplot.background_color Subplot.camera Subplot.canvas Subplot.controller Subplot.docks + Subplot.frame Subplot.graphics + Subplot.legends Subplot.name + Subplot.objects Subplot.parent - Subplot.position Subplot.renderer Subplot.scene Subplot.selectors + Subplot.title + Subplot.toolbar Subplot.viewport Methods @@ -40,7 +46,6 @@ Methods Subplot.add_animations Subplot.add_graphic - Subplot.add_heatmap Subplot.add_image Subplot.add_line Subplot.add_line_collection @@ -50,17 +55,11 @@ Methods Subplot.auto_scale Subplot.center_graphic Subplot.center_scene - Subplot.center_title Subplot.clear Subplot.delete_graphic - Subplot.get_rect + Subplot.get_figure Subplot.insert_graphic Subplot.map_screen_to_world Subplot.remove_animation Subplot.remove_graphic - Subplot.render - Subplot.set_axes_visibility - Subplot.set_grid_visibility - Subplot.set_title - Subplot.set_viewport_rect diff --git a/docs/source/api/selectors/LinearRegionSelector.rst b/docs/source/api/selectors/LinearRegionSelector.rst index ce0d8d9b6..2c23bc82a 100644 --- a/docs/source/api/selectors/LinearRegionSelector.rst +++ b/docs/source/api/selectors/LinearRegionSelector.rst @@ -20,12 +20,22 @@ Properties .. autosummary:: :toctree: LinearRegionSelector_api - LinearRegionSelector.children + LinearRegionSelector.axes + LinearRegionSelector.axis + LinearRegionSelector.block_events + LinearRegionSelector.deleted + LinearRegionSelector.edge_color + LinearRegionSelector.event_handlers + LinearRegionSelector.fill_color LinearRegionSelector.limits - LinearRegionSelector.position - LinearRegionSelector.position_x - LinearRegionSelector.position_y - LinearRegionSelector.position_z + LinearRegionSelector.name + LinearRegionSelector.offset + LinearRegionSelector.parent + LinearRegionSelector.right_click_menu + LinearRegionSelector.rotation + LinearRegionSelector.selection + LinearRegionSelector.supported_events + LinearRegionSelector.vertex_color LinearRegionSelector.visible LinearRegionSelector.world_object @@ -34,9 +44,12 @@ Methods .. autosummary:: :toctree: LinearRegionSelector_api - LinearRegionSelector.add_ipywidget_handler + LinearRegionSelector.add_axes + LinearRegionSelector.add_event_handler + LinearRegionSelector.clear_event_handlers LinearRegionSelector.get_selected_data LinearRegionSelector.get_selected_index LinearRegionSelector.get_selected_indices - LinearRegionSelector.make_ipywidget_slider + LinearRegionSelector.remove_event_handler + LinearRegionSelector.rotate diff --git a/docs/source/api/selectors/LinearSelector.rst b/docs/source/api/selectors/LinearSelector.rst index 4056bcc46..c7a8e978a 100644 --- a/docs/source/api/selectors/LinearSelector.rst +++ b/docs/source/api/selectors/LinearSelector.rst @@ -20,12 +20,22 @@ Properties .. autosummary:: :toctree: LinearSelector_api - LinearSelector.children + LinearSelector.axes + LinearSelector.axis + LinearSelector.block_events + LinearSelector.deleted + LinearSelector.edge_color + LinearSelector.event_handlers + LinearSelector.fill_color LinearSelector.limits - LinearSelector.position - LinearSelector.position_x - LinearSelector.position_y - LinearSelector.position_z + LinearSelector.name + LinearSelector.offset + LinearSelector.parent + LinearSelector.right_click_menu + LinearSelector.rotation + LinearSelector.selection + LinearSelector.supported_events + LinearSelector.vertex_color LinearSelector.visible LinearSelector.world_object @@ -34,9 +44,12 @@ Methods .. autosummary:: :toctree: LinearSelector_api - LinearSelector.add_ipywidget_handler + LinearSelector.add_axes + LinearSelector.add_event_handler + LinearSelector.clear_event_handlers LinearSelector.get_selected_data LinearSelector.get_selected_index LinearSelector.get_selected_indices - LinearSelector.make_ipywidget_slider + LinearSelector.remove_event_handler + LinearSelector.rotate diff --git a/docs/source/api/selectors/PolygonSelector.rst b/docs/source/api/selectors/PolygonSelector.rst deleted file mode 100644 index aaa434dbf..000000000 --- a/docs/source/api/selectors/PolygonSelector.rst +++ /dev/null @@ -1,40 +0,0 @@ -.. _api.PolygonSelector: - -PolygonSelector -*************** - -=============== -PolygonSelector -=============== -.. currentmodule:: fastplotlib - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: PolygonSelector_api - - PolygonSelector - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: PolygonSelector_api - - PolygonSelector.children - PolygonSelector.position - PolygonSelector.position_x - PolygonSelector.position_y - PolygonSelector.position_z - PolygonSelector.visible - PolygonSelector.world_object - -Methods -~~~~~~~ -.. autosummary:: - :toctree: PolygonSelector_api - - PolygonSelector.get_selected_data - PolygonSelector.get_selected_index - PolygonSelector.get_selected_indices - PolygonSelector.get_vertices - diff --git a/docs/source/api/selectors/RectangleSelector.rst b/docs/source/api/selectors/RectangleSelector.rst new file mode 100644 index 000000000..24928c817 --- /dev/null +++ b/docs/source/api/selectors/RectangleSelector.rst @@ -0,0 +1,55 @@ +.. _api.RectangleSelector: + +RectangleSelector +***************** + +================= +RectangleSelector +================= +.. currentmodule:: fastplotlib + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: RectangleSelector_api + + RectangleSelector + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: RectangleSelector_api + + RectangleSelector.axes + RectangleSelector.axis + RectangleSelector.block_events + RectangleSelector.deleted + RectangleSelector.edge_color + RectangleSelector.event_handlers + RectangleSelector.fill_color + RectangleSelector.limits + RectangleSelector.name + RectangleSelector.offset + RectangleSelector.parent + RectangleSelector.right_click_menu + RectangleSelector.rotation + RectangleSelector.selection + RectangleSelector.supported_events + RectangleSelector.vertex_color + RectangleSelector.visible + RectangleSelector.world_object + +Methods +~~~~~~~ +.. autosummary:: + :toctree: RectangleSelector_api + + RectangleSelector.add_axes + RectangleSelector.add_event_handler + RectangleSelector.clear_event_handlers + RectangleSelector.get_selected_data + RectangleSelector.get_selected_index + RectangleSelector.get_selected_indices + RectangleSelector.remove_event_handler + RectangleSelector.rotate + diff --git a/docs/source/api/selectors/Synchronizer.rst b/docs/source/api/selectors/Synchronizer.rst deleted file mode 100644 index 2b28fe351..000000000 --- a/docs/source/api/selectors/Synchronizer.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. _api.Synchronizer: - -Synchronizer -************ - -============ -Synchronizer -============ -.. currentmodule:: fastplotlib - -Constructor -~~~~~~~~~~~ -.. autosummary:: - :toctree: Synchronizer_api - - Synchronizer - -Properties -~~~~~~~~~~ -.. autosummary:: - :toctree: Synchronizer_api - - Synchronizer.selectors - -Methods -~~~~~~~ -.. autosummary:: - :toctree: Synchronizer_api - - Synchronizer.add - Synchronizer.clear - Synchronizer.remove - diff --git a/docs/source/api/selectors/index.rst b/docs/source/api/selectors/index.rst index 01c040728..4a0caf8af 100644 --- a/docs/source/api/selectors/index.rst +++ b/docs/source/api/selectors/index.rst @@ -6,5 +6,4 @@ Selectors LinearSelector LinearRegionSelector - PolygonSelector - Synchronizer + RectangleSelector diff --git a/docs/source/api/tools/HistogramLUTTool.rst b/docs/source/api/tools/HistogramLUTTool.rst new file mode 100644 index 000000000..7c3237490 --- /dev/null +++ b/docs/source/api/tools/HistogramLUTTool.rst @@ -0,0 +1,51 @@ +.. _api.HistogramLUTTool: + +HistogramLUTTool +**************** + +================ +HistogramLUTTool +================ +.. currentmodule:: fastplotlib + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: HistogramLUTTool_api + + HistogramLUTTool + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: HistogramLUTTool_api + + HistogramLUTTool.axes + HistogramLUTTool.block_events + HistogramLUTTool.cmap + HistogramLUTTool.deleted + HistogramLUTTool.event_handlers + HistogramLUTTool.image_graphic + HistogramLUTTool.name + HistogramLUTTool.offset + HistogramLUTTool.right_click_menu + HistogramLUTTool.rotation + HistogramLUTTool.supported_events + HistogramLUTTool.visible + HistogramLUTTool.vmax + HistogramLUTTool.vmin + HistogramLUTTool.world_object + +Methods +~~~~~~~ +.. autosummary:: + :toctree: HistogramLUTTool_api + + HistogramLUTTool.add_axes + HistogramLUTTool.add_event_handler + HistogramLUTTool.clear_event_handlers + HistogramLUTTool.disconnect_image_graphic + HistogramLUTTool.remove_event_handler + HistogramLUTTool.rotate + HistogramLUTTool.set_data + diff --git a/docs/source/api/tools/Tooltip.rst b/docs/source/api/tools/Tooltip.rst new file mode 100644 index 000000000..71607bf20 --- /dev/null +++ b/docs/source/api/tools/Tooltip.rst @@ -0,0 +1,38 @@ +.. _api.Tooltip: + +Tooltip +******* + +======= +Tooltip +======= +.. currentmodule:: fastplotlib + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Tooltip_api + + Tooltip + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Tooltip_api + + Tooltip.background_color + Tooltip.font_size + Tooltip.outline_color + Tooltip.padding + Tooltip.text_color + Tooltip.world_object + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Tooltip_api + + Tooltip.register + Tooltip.unregister + Tooltip.unregister_all + diff --git a/docs/source/api/tools/index.rst b/docs/source/api/tools/index.rst new file mode 100644 index 000000000..c2666ed28 --- /dev/null +++ b/docs/source/api/tools/index.rst @@ -0,0 +1,8 @@ +Tools +***** + +.. toctree:: + :maxdepth: 1 + + HistogramLUTTool + Tooltip diff --git a/docs/source/api/ui/BaseGUI.rst b/docs/source/api/ui/BaseGUI.rst new file mode 100644 index 000000000..788e1414a --- /dev/null +++ b/docs/source/api/ui/BaseGUI.rst @@ -0,0 +1,30 @@ +.. _api.BaseGUI: + +BaseGUI +******* + +======= +BaseGUI +======= +.. currentmodule:: fastplotlib.ui + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: BaseGUI_api + + BaseGUI + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: BaseGUI_api + + +Methods +~~~~~~~ +.. autosummary:: + :toctree: BaseGUI_api + + BaseGUI.update + diff --git a/docs/source/api/ui/EdgeWindow.rst b/docs/source/api/ui/EdgeWindow.rst new file mode 100644 index 000000000..5835ab847 --- /dev/null +++ b/docs/source/api/ui/EdgeWindow.rst @@ -0,0 +1,38 @@ +.. _api.EdgeWindow: + +EdgeWindow +********** + +========== +EdgeWindow +========== +.. currentmodule:: fastplotlib.ui + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: EdgeWindow_api + + EdgeWindow + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: EdgeWindow_api + + EdgeWindow.height + EdgeWindow.location + EdgeWindow.size + EdgeWindow.width + EdgeWindow.x + EdgeWindow.y + +Methods +~~~~~~~ +.. autosummary:: + :toctree: EdgeWindow_api + + EdgeWindow.draw_window + EdgeWindow.get_rect + EdgeWindow.update + diff --git a/docs/source/api/ui/Popup.rst b/docs/source/api/ui/Popup.rst new file mode 100644 index 000000000..5e924db94 --- /dev/null +++ b/docs/source/api/ui/Popup.rst @@ -0,0 +1,31 @@ +.. _api.Popup: + +Popup +***** + +===== +Popup +===== +.. currentmodule:: fastplotlib.ui + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Popup_api + + Popup + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Popup_api + + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Popup_api + + Popup.open + Popup.update + diff --git a/docs/source/api/ui/Window.rst b/docs/source/api/ui/Window.rst new file mode 100644 index 000000000..63c384261 --- /dev/null +++ b/docs/source/api/ui/Window.rst @@ -0,0 +1,30 @@ +.. _api.Window: + +Window +****** + +====== +Window +====== +.. currentmodule:: fastplotlib.ui + +Constructor +~~~~~~~~~~~ +.. autosummary:: + :toctree: Window_api + + Window + +Properties +~~~~~~~~~~ +.. autosummary:: + :toctree: Window_api + + +Methods +~~~~~~~ +.. autosummary:: + :toctree: Window_api + + Window.update + diff --git a/docs/source/api/ui/index.rst b/docs/source/api/ui/index.rst new file mode 100644 index 000000000..4f31e651a --- /dev/null +++ b/docs/source/api/ui/index.rst @@ -0,0 +1,10 @@ +UI Bases +******** + +.. toctree:: + :maxdepth: 1 + + BaseGUI + Window + EdgeWindow + Popup diff --git a/docs/source/api/utils.rst b/docs/source/api/utils.rst index 6222e22c6..be7b1a049 100644 --- a/docs/source/api/utils.rst +++ b/docs/source/api/utils.rst @@ -4,3 +4,7 @@ fastplotlib.utils .. currentmodule:: fastplotlib.utils .. automodule:: fastplotlib.utils.functions :members: + +.. currentmodule:: fastplotlib.utils +.. automodule:: fastplotlib.utils._plot_helpers + :members: diff --git a/docs/source/api/widgets/ImageWidget.rst b/docs/source/api/widgets/ImageWidget.rst index 08bce8d7a..fbafd4723 100644 --- a/docs/source/api/widgets/ImageWidget.rst +++ b/docs/source/api/widgets/ImageWidget.rst @@ -23,13 +23,13 @@ Properties ImageWidget.cmap ImageWidget.current_index ImageWidget.data - ImageWidget.dims_order - ImageWidget.gridplot + ImageWidget.figure + ImageWidget.frame_apply ImageWidget.managed_graphics + ImageWidget.n_img_dims + ImageWidget.n_scrollable_dims ImageWidget.ndim ImageWidget.slider_dims - ImageWidget.sliders - ImageWidget.widget ImageWidget.window_funcs Methods @@ -37,7 +37,10 @@ Methods .. autosummary:: :toctree: ImageWidget_api + ImageWidget.add_event_handler + ImageWidget.clear_event_handlers ImageWidget.close + ImageWidget.remove_event_handler ImageWidget.reset_vmin_vmax ImageWidget.reset_vmin_vmax_frame ImageWidget.set_data diff --git a/docs/source/conf.py b/docs/source/conf.py index 7b33a309e..e4ff72237 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -2,14 +2,35 @@ # # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html + +import os + +# need to force offscreen rendering before importing fpl +# otherwise fpl tries to select glfw canvas +os.environ["WGPU_FORCE_OFFSCREEN"] = "1" + import fastplotlib +import pygfx +from pygfx.utils.gallery_scraper import find_examples_for_gallery +from pathlib import Path +import sys +from sphinx_gallery.sorting import ExplicitOrder +import imageio.v3 as iio + +MAX_TEXTURE_SIZE = 2048 +pygfx.renderers.wgpu.set_wgpu_limits(**{"max-texture-dimension-2d": MAX_TEXTURE_SIZE}) + +ROOT_DIR = Path(__file__).parents[1].parents[0] # repo root +EXAMPLES_DIR = Path.joinpath(ROOT_DIR, "examples") + +sys.path.insert(0, str(ROOT_DIR)) # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -project = 'fastplotlib' -copyright = '2023, Kushal Kolar, Caitlin Lewis' -author = 'Kushal Kolar, Caitlin Lewis' +project = "fastplotlib" +copyright = "2025, Kushal Kolar, Caitlin Lewis" +author = "Kushal Kolar, Caitlin Lewis" release = fastplotlib.__version__ # -- General configuration --------------------------------------------------- @@ -23,26 +44,83 @@ "sphinx.ext.viewcode", "sphinx_copybutton", "sphinx_design", - "nbsphinx", + "sphinx_gallery.gen_gallery" ] +sphinx_gallery_conf = { + "gallery_dirs": "_gallery", + "notebook_extensions": {}, # remove the download notebook button + "backreferences_dir": "_gallery/backreferences", + "doc_module": ("fastplotlib",), + "image_scrapers": ("pygfx",), + "remove_config_comments": True, + "subsection_order": ExplicitOrder( + [ + "../../examples/image", + "../../examples/heatmap", + "../../examples/image_widget", + "../../examples/gridplot", + "../../examples/window_layouts", + "../../examples/controllers", + "../../examples/line", + "../../examples/line_collection", + "../../examples/scatter", + "../../examples/text", + "../../examples/events", + "../../examples/selection_tools", + "../../examples/machine_learning", + "../../examples/guis", + "../../examples/ipywidgets", + "../../examples/misc", + "../../examples/qt", + ] + ), + "ignore_pattern": r'__init__\.py', + "nested_sections": False, + "thumbnail_size": (250, 250) +} + +extra_conf = find_examples_for_gallery(EXAMPLES_DIR) +sphinx_gallery_conf.update(extra_conf) + +# download imageio examples for the gallery +iio.imread("imageio:clock.png") +iio.imread("imageio:astronaut.png") +iio.imread("imageio:coffee.png") +iio.imread("imageio:hubble_deep_field.png") + autosummary_generate = True -templates_path = ['_templates'] +templates_path = ["_templates"] exclude_patterns = [] -napoleon_custom_sections = ['Features'] - # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output -html_theme = "furo" +html_theme = "pydata_sphinx_theme" + +html_theme_options = { + "navbar_end": ["theme-switcher", "version-switcher", "navbar-icon-links"], + "show_version_warning_banner": True, + "check_switcher": True, + "switcher": { + "json_url": "http://www.fastplotlib.org/_static/switcher.json", + "version_match": release + }, + "icon_links": [ + { + "name": "Github", + "url": "https://github.com/fastplotlib/fastplotlib", + "icon": "fa-brands fa-github", + } + ] +} -html_static_path = ['_static'] +html_static_path = ["_static"] html_logo = "_static/logo.png" html_title = f"v{release}" -autodoc_member_order = 'groupwise' +autodoc_member_order = "groupwise" autoclass_content = "both" add_module_names = False @@ -50,13 +128,9 @@ autodoc_typehints_description_target = "documented_params" intersphinx_mapping = { - 'python': ('https://docs.python.org/3', None), - 'numpy': ('https://numpy.org/doc/stable/', None), - 'pygfx': ('https://pygfx.readthedocs.io/en/latest', None) -} - -html_theme_options = { - "source_repository": "https://github.com/kushalkolar/fastplotlib", - "source_branch": "main", - "source_directory": "docs/", + "python": ("https://docs.python.org/3", None), + "numpy": ("https://numpy.org/doc/stable", None), + "pygfx": ("https://docs.pygfx.org/stable", None), + "wgpu": ("https://wgpu-py.readthedocs.io/en/latest", None), + # "fastplotlib": ("https://www.fastplotlib.org/", None), } diff --git a/docs/source/developer_notes/graphics.rst b/docs/source/developer_notes/graphics.rst new file mode 100644 index 000000000..71d99854a --- /dev/null +++ b/docs/source/developer_notes/graphics.rst @@ -0,0 +1,76 @@ +Graphics +======== + + +A ``Graphic`` is something that can be added to a ``PlotArea`` (described in detail in the layouts section). All the various +fastplotlib graphics, such as ``ImageGraphic``, ``ScatterGraphic``, etc. inherit from the ``Graphic`` base class in +``fastplotlib/graphics/_base.py``. It has a few properties that mostly wrap ``pygfx`` ``WorldObject`` properties and transforms. + +Inheritance Diagram +------------------- + +.. code-block:: rst + + Graphic + │ + ā”œā”€ ImageGraphic + │ + ā”œā”€ TextGraphic + │ + ā”œā”€ PositionsGraphic + │ │ + │ ā”œā”€ LineGraphic + │ │ + │ └─ ScatterGraphic + │ + └─ GraphicCollection + │ + └─ LineCollection + │ + └─ LineStack + +.. + +All graphics can be given a string name for the user's convenience. This allows graphics to be easily accessed from +plots, ex: ``subplot["some_image"]``. + +All graphics contain a ``world_object`` property which is just the ``pygfx.WorldObject`` that this graphic uses. Fastplotlib +keeps a *private* global dictionary of all ``WorldObject`` instances and users are only given a weakref proxy to this world object. +This is due to garbage collection. This may be quite complicated for beginners, for more details see this PR: https://github.com/fastplotlib/fastplotlib/pull/160 . +Furthermore, garbage collection is even more complicated in ipython and jupyter (see https://github.com/fastplotlib/fastplotlib/pull/546 ). +If you are curious or have more questions on garbage collection in ``fastplotlib`` you're welcome to post an issue :D. + +Graphic collections are collections of graphics. For now, we have a ``LineCollection`` which is a collection of ``LineGraphic`` objects. We also have a ``LineStack`` which +inherits from ``LineCollection`` and gives some fixed offset between ``LineGraphic`` objects in the collection. A graphic collection behaves like an array of graphics. + +Graphic Properties +------------------ + +Graphic properties are all evented, and internally we call these "graphic features". They are the various +aspects of a graphic that the user can change. +The "graphic features" subpackage can be found at ``fastplotlib/graphics/_features``. As we can see this +is a private subpackage and never meant to be accessible to users. + +For example let's look at ``LineGraphic`` in ``fastplotlib/graphics/line.py``. Every graphic has a class variable called +``_features`` which is a set of all graphic properties that are evented. It has the following evented properties: +``"data", "colors", "cmap", "thickness"`` in addition to properties common to all graphics, such as ``"name", "offset", "rotation", and "visible"`` + +Now look at the constructor for the ``LineGraphic`` base class ``PositionsGraphic``, it first creates an instance of ``VertexPositions``. +This is a class that manages vertex positions buffer. For the user, it defines the line data, and provides additional useful functionality. +It defines the line, and provides additional useful functionality. +For example, every time that the ``data`` is changed, the new data will be marked for upload to the GPU before the next draw. +In addition, event handlers will be called if any event handlers are registered. + +``VertexColors`` behaves similarly, but it can perform additional parsing that can create the colors buffer from different +forms of user input. For example if a user runs: ``line_graphic.colors = "blue"``, then ``VertexColors.__setitem__()`` will +create a buffer that corresponds to what ``pygfx.Color`` thinks is "blue". Users can also take advantage of fancy indexing, +ex: ``line_graphics.colors[bool_array] = "red"`` 😊 + +``LineGraphic`` also has a ``VertexCmap``, this manages the line ``VertexColors`` instance to parse colormaps, for example: +``line_graphic.cmap = "jet"`` or even ``line_graphic.cmap[50:] = "viridis"``. + +``LineGraphic`` also has a ``thickness`` property which is pretty simple, and ``DeletedFeature`` which is useful if you need +callbacks to indicate that the graphic has been deleted (for example, removing references to a graphic from a legend). + +Other graphics have properties that are relevant to them, for example ``ImageGraphic`` has ``cmap``, ``vmin``, ``vmax``, +properties unique to images. \ No newline at end of file diff --git a/docs/source/developer_notes/index.rst b/docs/source/developer_notes/index.rst new file mode 100644 index 000000000..b0a448981 --- /dev/null +++ b/docs/source/developer_notes/index.rst @@ -0,0 +1,39 @@ +Developer Notes +*************** + +Welcome to the Developer Notes for `fastplotlib`. These notes aim to provide detailed and technical information +about the various modules, classes, and functions that make up this library, as well as guidelines on how to write +code that integrates nicely with our package. They are intended to help current and future developers understand +the design decisions, and functioning of the library. + +**Intended Audience** + +These notes are primarily intended for the following groups: + +- **Current Developers**: The Developer Notes can serve as a comprehensive guide to understanding the library, making it easier to debug, modify and maintain the code. + +- **Future Developers**: These notes can help onboard new developers to the project, providing them with detailed explanations of the codebase and its underlying architecture. + +- **Contributors**: If you wish to contribute to the `fastplotlib` project, the Developer Notes can provide a solid foundation of understanding, helping to ensure that your contributions align with the existing structure and design principles of the library. + +- **Advanced Users**: While the primary focus of these notes is on development, they might also be of interest to advanced users who want a deeper understanding of the library's functionality. + +Please note that these notes assume a certain level of programming knowledge. Familiarity with Python, object-oriented programming, and the NumPy and pygfx libraries would be beneficial when reading these notes. + +**Sections** + +.. toctree:: + :maxdepth: 2 + + graphics + layouts + +**Interact with us** + +If you're considering contributing to the library, first of all, welcome aboard! As a first step, we recommend that you read the `CONTRIBUTING.md `_ guidelines. +These will help you understand how to interact with other contributors and how to submit your changes. + +If you have any questions or need further clarification on any of the topics covered in these notes, please don't hesitate to reach out to us. You can do so via the `discussion `_ forum on GitHub. + +We're looking forward to your contributions and to answering any questions you might have! + diff --git a/docs/source/developer_notes/layouts.rst b/docs/source/developer_notes/layouts.rst new file mode 100644 index 000000000..daf197c44 --- /dev/null +++ b/docs/source/developer_notes/layouts.rst @@ -0,0 +1,84 @@ +Layouts +======= + +PlotArea +-------- + +This is the main base class within layouts. A ``Subplot`` and ``Dock`` are areas within a ``Figure``. +``Subplot`` and ``Dock`` inherit from ``PlotArea``. + +``PlotArea`` has the following key properties that allow it to be a "plot area" that can be used to view graphical objects: + +* scene - instance of ``pygfx.Scene`` +* canvas - instance of ``WgpuCanvas`` +* renderer - instance of ``pygfx.WgpuRenderer`` +* viewport - instance of ``pygfx.Viewport`` +* camera - instance of ``pygfx.PerspectiveCamera``, we always just use ``PerspectiveCamera`` and just set ``camera.fov = 0`` for orthographic projections +* controller - instance of ``pygfx.Controller`` + +If these concepts are unfamiliar to you we recommend learning about how rendering engines work, the pygfx guide +is a great place to start! https://docs.pygfx.org/stable/guide.html + +Here is also a short video that goes through the basic concepts: https://www.youtube.com/watch?v=cvcAjgMUPUA + +Abstract method that must be implemented in subclasses: + +* get_rect - must return [x, y, width, height] that defines the viewport rect for this ``PlotArea`` + +Properties specifically used by subplots in a Figure: + +* parent - A parent if relevant, used by individual ``Subplots`` in ``Figure``, and by ``Dock`` which are "docked" subplots at the edges of a subplot. +* position - if a subplot within a ``Figure``, it is the position of this subplot within the ``Figure`` + +Other important properties: + +* graphics - a tuple of weakref proxies to all ``Graphics`` within this ``PlotArea``, users are only given weakref proxies to ``Graphic`` objects, all ``Graphic`` objects are stored in a private global dict. +* selectors - a tuple of weakref proxies to all selectors within this ``PlotArea`` +* legend - a tuple of weakref proxies to all legend graphics within this ``PlotArea`` +* name - plot areas are allowed to have names that the user can use for their convenience + +Important methods: + +* add_graphic - add a ``Graphic`` to the ``PlotArea``, append to the end of the ``PlotArea._graphics`` list +* insert_graphic - insert a ``Graphic`` to the ``PlotArea``, insert to a specific position of the ``PlotArea._graphics`` list +* remove_graphic - remove a graphic from the ``Scene``, **does not delete it** +* delete_graphic - delete a graphic from the ``PlotArea``, performs garbage collection +* clear - deletes all graphics from the ``PlotArea`` +* center_graphic - center camera w.r.t. a ``Graphic`` +* center_scene - center camera w.r.t. entire ``Scene`` +* auto_scale - Auto-scale the camera w.r.t to the ``Scene`` + +In addition, ``PlotArea`` supports ``__getitem__``, so you can do: ``plot_area["graphic_name"]`` to retrieve a ``Graphic`` by +name. + +You can also check if a ``PlotArea`` has certain graphics, ex: ``"some_image_name" in plot_area``, or ``graphic_instance in plot_area`` + +Subplot +------- + +This class inherits from ``PlotArea`` and ``GraphicMethodsMixin``. + +``GraphicMethodsMixin`` is a simple class that just has all the ``add_`` methods. It is autogenerated by a utility script like this: + +.. code-block:: bash + + python scripts/generate_add_methods.py + +Each ``add_`` method basically creates an instance of ``Graphic``, adds it to the ``Subplot``, and returns the ``Graphic``. + +``Subplot`` has one property that is not in ``PlotArea``: + +* docks: a ``dict`` of ``PlotAreas`` which are located at the "top", "right", "left", and "bottom" edges of a ``Subplot``. + +By default their size is ``0``. They are useful for putting things like histogram LUT tools. + +The key method in ``Subplot`` is an implementation of ``get_rect`` that returns the viewport rect for this subplot. + +Figure +------ + +Now that we have understood ``PlotArea`` and ``Subplot`` we need a way for the user to create them! + +A ``Figure`` contains a grid of subplot and has methods such as ``show()`` to output the figure. +``Figure.__init__`` basically does a lot of parsing of user arguments to determine how to create +the subplots. All subplots within a ``Figure`` share the same canvas and use different viewports to create the subplots. diff --git a/docs/source/generate_api.py b/docs/source/generate_api.py index 05e8b0f1c..0be967a36 100644 --- a/docs/source/generate_api.py +++ b/docs/source/generate_api.py @@ -1,14 +1,18 @@ -from typing import * +from collections import defaultdict import inspect -from pathlib import Path +from io import StringIO import os +from pathlib import Path +from typing import * import fastplotlib -from fastplotlib.layouts._subplot import Subplot +from fastplotlib.layouts import Subplot from fastplotlib import graphics -from fastplotlib.graphics import _features, selectors +from fastplotlib.graphics import features, selectors +from fastplotlib import tools from fastplotlib import widgets from fastplotlib import utils +from fastplotlib import ui current_dir = Path(__file__).parent.resolve() @@ -18,7 +22,10 @@ GRAPHICS_DIR = API_DIR.joinpath("graphics") GRAPHIC_FEATURES_DIR = API_DIR.joinpath("graphic_features") SELECTORS_DIR = API_DIR.joinpath("selectors") +TOOLS_DIR = API_DIR.joinpath("tools") WIDGETS_DIR = API_DIR.joinpath("widgets") +UI_DIR = API_DIR.joinpath("ui") +GUIDE_DIR = current_dir.joinpath("user_guide") doc_sources = [ API_DIR, @@ -26,13 +33,36 @@ GRAPHICS_DIR, GRAPHIC_FEATURES_DIR, SELECTORS_DIR, - WIDGETS_DIR + TOOLS_DIR, + WIDGETS_DIR, + UI_DIR, ] for source_dir in doc_sources: os.makedirs(source_dir, exist_ok=True) +# this way we can just add the entire api dir to gitignore and generate before pushing +with open(API_DIR.joinpath("fastplotlib.rst"), "w") as f: + f.write( + "fastplotlib\n" + "***********\n\n" + ".. currentmodule:: fastplotlib\n\n" + + ".. autofunction:: fastplotlib.pause_events\n\n" + + ".. autofunction:: fastplotlib.enumerate_adapters\n\n" + + ".. autofunction:: fastplotlib.select_adapter\n\n" + + ".. autofunction:: fastplotlib.print_wgpu_report\n\n" + + "fastplotlib.loop\n" + "------------------\n" + "See the rendercanvas docs: https://rendercanvas.readthedocs.io/stable/api.html#rendercanvas.BaseLoop " + ) + + def get_public_members(cls) -> Tuple[List[str], List[str]]: """ Returns (public_methods, public_properties) @@ -66,13 +96,9 @@ def generate_class( ): name = cls.__name__ methods, properties = get_public_members(cls) - methods = [ - f"{name}.{m}" for m in methods - ] + methods = [f"{name}.{m}" for m in methods] - properties = [ - f"{name}.{p}" for p in properties - ] + properties = [f"{name}.{p}" for p in properties] underline = "=" * len(name) @@ -109,12 +135,18 @@ def generate_class( return out -def generate_functions_module(module, name: str): +def generate_functions_module(module, name: str, generate_header: bool = True): underline = "*" * len(name) + if generate_header: + header = ( + f"{name}\n" + f"{underline}\n" + f"\n" + ) + else: + header = "\n" out = ( - f"{name}\n" - f"{underline}\n" - f"\n" + f"{header}" f".. currentmodule:: {name}\n" f".. automodule:: {module.__name__}\n" f" :members:\n" @@ -143,38 +175,103 @@ def generate_page( to_write = generate_class(cls, module) f.write(to_write) +####################################################### +# Used for GraphicFeature class event table +# copy-pasted from https://pablofernandez.tech/2019/03/21/turning-a-list-of-dicts-into-a-restructured-text-table/ + +def _generate_header(field_names, column_widths): + with StringIO() as output: + for field_name in field_names: + output.write(f"+-{'-' * column_widths[field_name]}-") + output.write("+\n") + for field_name in field_names: + output.write(f"| {field_name} {' ' * (column_widths[field_name] - len(field_name))}") + output.write("|\n") + for field_name in field_names: + output.write(f"+={'=' * column_widths[field_name]}=") + output.write("+\n") + return output.getvalue() + + +def _generate_row(row, field_names, column_widths): + with StringIO() as output: + for field_name in field_names: + output.write(f"| {row[field_name]}{' ' * (column_widths[field_name] - len(str(row[field_name])))} ") + output.write("|\n") + for field_name in field_names: + output.write(f"+-{'-' * column_widths[field_name]}-") + output.write("+\n") + return output.getvalue() + + +def _get_fields(data): + field_names = [] + column_widths = defaultdict(lambda: 0) + for row in data: + for field_name in row: + if field_name not in field_names: + field_names.append(field_name) + column_widths[field_name] = max(column_widths[field_name], len(field_name), len(str(row[field_name]))) + return field_names, column_widths + + +def dict_to_rst_table(data): + """convert a list of dicts to an RST table""" + field_names, column_widths = _get_fields(data) + with StringIO() as output: + output.write(_generate_header(field_names, column_widths)) + for row in data: + output.write(_generate_row(row, field_names, column_widths)) + + output.write("\n") + + return output.getvalue() + +####################################################### + def main(): generate_page( - page_name="Plot", - classes=[fastplotlib.Plot], - modules=["fastplotlib"], - source_path=LAYOUTS_DIR.joinpath("plot.rst") + page_name="Figure", + classes=[fastplotlib.layouts._figure.Figure], + modules=["fastplotlib.layouts"], + source_path=LAYOUTS_DIR.joinpath("figure.rst"), ) generate_page( - page_name="GridPlot", - classes=[fastplotlib.GridPlot], - modules=["fastplotlib"], - source_path=LAYOUTS_DIR.joinpath("gridplot.rst") + page_name="ImguiFigure", + classes=[fastplotlib.layouts.ImguiFigure], + modules=["fastplotlib.layouts"], + source_path=LAYOUTS_DIR.joinpath("imgui_figure.rst"), ) generate_page( page_name="Subplot", classes=[Subplot], modules=["fastplotlib.layouts._subplot"], - source_path=LAYOUTS_DIR.joinpath("subplot.rst") + source_path=LAYOUTS_DIR.joinpath("subplot.rst"), ) - # the rest of this is a mess and can be refactored later + # layouts classes index file + with open(LAYOUTS_DIR.joinpath("index.rst"), "w") as f: + f.write( + f"Layouts\n" + f"********\n" + f"\n" + f".. toctree::\n" + f" :maxdepth: 1\n" + f"\n" + f" imgui_figure\n" + f" figure\n" + f" subplot\n" + ) - graphic_classes = [ - getattr(graphics, g) for g in graphics.__all__ - ] + # the rest of this is a mess and can be refactored later + ############################################################################## + # ** Graphic classes ** # + graphic_classes = [getattr(graphics, g) for g in graphics.__all__] - graphic_class_names = [ - g.__name__ for g in graphic_classes - ] + graphic_class_names = [g.__name__ for g in graphic_classes] graphic_class_names_str = "\n ".join([""] + graphic_class_names) @@ -194,17 +291,13 @@ def main(): page_name=graphic_cls.__name__, classes=[graphic_cls], modules=["fastplotlib"], - source_path=GRAPHICS_DIR.joinpath(f"{graphic_cls.__name__}.rst") + source_path=GRAPHICS_DIR.joinpath(f"{graphic_cls.__name__}.rst"), ) ############################################################################## + # ** GraphicFeature classes ** # + feature_classes = [getattr(features, f) for f in features.__all__] - feature_classes = [ - getattr(_features, f) for f in _features.__all__ - ] - - feature_class_names = [ - f.__name__ for f in feature_classes - ] + feature_class_names = [f.__name__ for f in feature_classes] feature_class_names_str = "\n ".join([""] + feature_class_names) @@ -222,18 +315,14 @@ def main(): generate_page( page_name=feature_cls.__name__, classes=[feature_cls], - modules=["fastplotlib.graphics._features"], - source_path=GRAPHIC_FEATURES_DIR.joinpath(f"{feature_cls.__name__}.rst") + modules=["fastplotlib.graphics.features"], + source_path=GRAPHIC_FEATURES_DIR.joinpath(f"{feature_cls.__name__}.rst"), ) ############################################################################## + # ** Selector classes ** # + selector_classes = [getattr(selectors, s) for s in selectors.__all__] - selector_classes = [ - getattr(selectors, s) for s in selectors.__all__ - ] - - selector_class_names = [ - s.__name__ for s in selector_classes - ] + selector_class_names = [s.__name__ for s in selector_classes] selector_class_names_str = "\n ".join([""] + selector_class_names) @@ -252,17 +341,40 @@ def main(): page_name=selector_cls.__name__, classes=[selector_cls], modules=["fastplotlib"], - source_path=SELECTORS_DIR.joinpath(f"{selector_cls.__name__}.rst") + source_path=SELECTORS_DIR.joinpath(f"{selector_cls.__name__}.rst"), ) + ############################################################################## + # ** Tools classes ** # + tools_classes = [getattr(tools, t) for t in tools.__all__] + + tools_class_names = [t.__name__ for t in tools_classes] + + tools_class_names_str = "\n ".join([""] + tools_class_names) + + with open(TOOLS_DIR.joinpath("index.rst"), "w") as f: + f.write( + f"Tools\n" + f"*****\n" + f"\n" + f".. toctree::\n" + f" :maxdepth: 1\n" + f"{tools_class_names_str}\n" + ) - widget_classes = [ - getattr(widgets, w) for w in widgets.__all__ - ] + for tool_cls in tools_classes: + generate_page( + page_name=tool_cls.__name__, + classes=[tool_cls], + modules=["fastplotlib"], + source_path=TOOLS_DIR.joinpath(f"{tool_cls.__name__}.rst"), + ) - widget_class_names = [ - w.__name__ for w in widget_classes - ] + ############################################################################## + # ** Widget classes ** # + widget_classes = [getattr(widgets, w) for w in widgets.__all__] + + widget_class_names = [w.__name__ for w in widget_classes] widget_class_names_str = "\n ".join([""] + widget_class_names) @@ -281,15 +393,97 @@ def main(): page_name=widget_cls.__name__, classes=[widget_cls], modules=["fastplotlib"], - source_path=WIDGETS_DIR.joinpath(f"{widget_cls.__name__}.rst") + source_path=WIDGETS_DIR.joinpath(f"{widget_cls.__name__}.rst"), ) ############################################################################## + # ** UI classes ** # + ui_classes = [ui.BaseGUI, ui.Window, ui.EdgeWindow, ui.Popup] + + ui_class_names = [cls.__name__ for cls in ui_classes] + + ui_class_names_str = "\n ".join([""] + ui_class_names) + + with open(UI_DIR.joinpath("index.rst"), "w") as f: + f.write( + f"UI Bases\n" + f"********\n" + f"\n" + f".. toctree::\n" + f" :maxdepth: 1\n" + f"{ui_class_names_str}\n" + ) + + for ui_cls in ui_classes: + generate_page( + page_name=ui_cls.__name__, + classes=[ui_cls], + modules=["fastplotlib.ui"], + source_path=UI_DIR.joinpath(f"{ui_cls.__name__}.rst"), + ) + + ############################################################################## utils_str = generate_functions_module(utils.functions, "fastplotlib.utils") + utils_str += generate_functions_module(utils._plot_helpers, "fastplotlib.utils", generate_header=False) with open(API_DIR.joinpath("utils.rst"), "w") as f: f.write(utils_str) + # make API index file + with open(API_DIR.joinpath("index.rst"), "w") as f: + f.write( + "API Reference\n" + "*************\n\n" + ".. toctree::\n" + " :caption: API Reference\n" + " :maxdepth: 2\n\n" + " layouts/index\n" + " graphics/index\n" + " graphic_features/index\n" + " selectors/index\n" + " tools/index\n" + " ui/index\n" + " widgets/index\n" + " fastplotlib\n" + " utils\n" + ) + + ############################################################################## + # graphic feature event tables + + def write_table(name, feature_cls): + s = f"{name}\n" + s += "^" * len(name) + "\n\n" + + if hasattr(feature_cls, "event_extra_attrs"): + s += "**extra attributes**\n\n" + s += dict_to_rst_table(feature_cls.event_extra_attrs) + + s += "**event info dict**\n\n" + s += dict_to_rst_table(feature_cls.event_info_spec) + + return s + + with open(GUIDE_DIR.joinpath("event_tables.rst"), "w") as f: + f.write(".. _event_tables:\n\n") + f.write("Event Tables\n") + f.write("============\n\n") + + for graphic_cls in [*graphic_classes, *selector_classes]: + if graphic_cls is graphics.Graphic: + # skip Graphic base class + continue + f.write(f"{graphic_cls.__name__}\n") + f.write("-" * len(graphic_cls.__name__) + "\n\n") + for name, type_ in graphic_cls._features.items(): + if isinstance(type_, tuple): + for t in type_: + if t is None: + continue + f.write(write_table(name, t)) + else: + f.write(write_table(name, type_)) + if __name__ == "__main__": main() diff --git a/docs/source/index.rst b/docs/source/index.rst index 7e1d3865a..c44f4e3a8 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,50 +1,41 @@ -.. fastplotlib documentation master file, created by - sphinx-quickstart on Wed Dec 28 12:46:56 2022. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - Welcome to fastplotlib's documentation! ======================================= .. toctree:: - :caption: Quick Start - :maxdepth: 2 - - quickstart + :caption: Getting started + :maxdepth: 2 + + user_guide/index + developer_notes/index .. toctree:: - :maxdepth: 1 + :maxdepth: 2 :caption: API - - Plot - Gridplot - Subplot - Graphics - Graphic Features - Selectors - Widgets - Utils - -Summary -======= - -A fast plotting library built using the `pygfx `_ render engine utilizing `Vulkan `_, `DX12 `_, or `Metal `_ via `WGPU `_, so it is very fast! We also aim to be an expressive plotting library that enables rapid prototyping for large scale explorative scientific visualization. `fastplotlib` will run on any framework that ``pygfx`` runs on, this includes ``glfw``, ``Qt`` and ``jupyter lab`` + api/index +.. toctree:: + :caption: Gallery + :maxdepth: 1 -Installation -============ + _gallery/index -For installation please see the instructions on GitHub: +Summary +======= -https://github.com/kushalkolar/fastplotlib#installation +Next-gen plotting library built using the `pygfx `_ render engine utilizing +`Vulkan `_, `DX12 `_, or +`Metal `_ via `WGPU `_, so it is very fast! +``fastplotlib`` is an expressive plotting library that enables rapid prototyping for large scale exploratory scientific +visualization. ``fastplotlib`` will run on any framework that ``pygfx`` runs on, this includes ``glfw``, ``Qt`` +and ``jupyter lab`` Contributing ============ -Contributions are welcome! See the contributing guide on GitHub: https://github.com/kushalkolar/fastplotlib/blob/master/CONTRIBUTING.md. +Contributions are welcome! See the `contributing guide on GitHub `_ -Also take a look at the `Roadmap 2023 `_ for future plans or ways in which you could contribute. +Also take a look at the `Roadmap 2025 `_ for future plans or ways in which you could contribute. Indices and tables ================== diff --git a/docs/source/user_guide/event_tables.rst b/docs/source/user_guide/event_tables.rst new file mode 100644 index 000000000..1b9b2f7ec --- /dev/null +++ b/docs/source/user_guide/event_tables.rst @@ -0,0 +1,1020 @@ +.. _event_tables: + +Event Tables +============ + +LineGraphic +----------- + +data +^^^^ + +**event info dict** + ++----------+----------------------------------------------+--------------------------------------------------------+ +| dict key | type | description | ++==========+==============================================+========================================================+ +| key | slice, index (int) or numpy-like fancy index | key at which vertex positions data were indexed/sliced | ++----------+----------------------------------------------+--------------------------------------------------------+ +| value | int | float | array-like | new data values for points that were changed | ++----------+----------------------------------------------+--------------------------------------------------------+ + +colors +^^^^^^ + +**event info dict** + ++------------+--------------------------------------+------------------------------------------------------+ +| dict key | type | description | ++============+======================================+======================================================+ +| key | slice, index, numpy-like fancy index | index/slice at which colors were indexed/sliced | ++------------+--------------------------------------+------------------------------------------------------+ +| value | np.ndarray [n_points_changed, RGBA] | new color values for points that were changed | ++------------+--------------------------------------+------------------------------------------------------+ +| user_value | str or array-like | user input value that was parsed into the RGBA array | ++------------+--------------------------------------+------------------------------------------------------+ + +colors +^^^^^^ + +**event info dict** + ++----------+-------------------+-----------------+ +| dict key | type | description | ++==========+===================+=================+ +| value | np.ndarray [RGBA] | new color value | ++----------+-------------------+-----------------+ + +cmap +^^^^ + +**event info dict** + ++----------+-------+--------------------------------+ +| dict key | type | description | ++==========+=======+================================+ +| key | slice | key at cmap colors were sliced | ++----------+-------+--------------------------------+ +| value | str | new cmap to set at given slice | ++----------+-------+--------------------------------+ + +thickness +^^^^^^^^^ + +**event info dict** + ++----------+-------+---------------------+ +| dict key | type | description | ++==========+=======+=====================+ +| value | float | new thickness value | ++----------+-------+---------------------+ + +size_space +^^^^^^^^^^ + +**event info dict** + ++----------+------+------------------------------+ +| dict key | type | description | ++==========+======+==============================+ +| value | str | 'screen' | 'world' | 'model' | ++----------+------+------------------------------+ + +name +^^^^ + +**event info dict** + ++----------+------+--------------------+ +| dict key | type | description | ++==========+======+====================+ +| value | str | user provided name | ++----------+------+--------------------+ + +offset +^^^^^^ + +**event info dict** + ++----------+---------------------------------+----------------------+ +| dict key | type | description | ++==========+=================================+======================+ +| value | np.ndarray[float, float, float] | new offset (x, y, z) | ++----------+---------------------------------+----------------------+ + +rotation +^^^^^^^^ + +**event info dict** + ++----------+----------------------------------------+-------------------------+ +| dict key | type | description | ++==========+========================================+=========================+ +| value | np.ndarray[float, float, float, float] | new rotation quaternion | ++----------+----------------------------------------+-------------------------+ + +visible +^^^^^^^ + +**event info dict** + ++----------+------+---------------------+ +| dict key | type | description | ++==========+======+=====================+ +| value | bool | new visibility bool | ++----------+------+---------------------+ + +deleted +^^^^^^^ + +**event info dict** + ++----------+------+-------------------------------+ +| dict key | type | description | ++==========+======+===============================+ +| value | bool | True when graphic was deleted | ++----------+------+-------------------------------+ + +ScatterGraphic +-------------- + +data +^^^^ + +**event info dict** + ++----------+----------------------------------------------+--------------------------------------------------------+ +| dict key | type | description | ++==========+==============================================+========================================================+ +| key | slice, index (int) or numpy-like fancy index | key at which vertex positions data were indexed/sliced | ++----------+----------------------------------------------+--------------------------------------------------------+ +| value | int | float | array-like | new data values for points that were changed | ++----------+----------------------------------------------+--------------------------------------------------------+ + +sizes +^^^^^ + +**event info dict** + ++----------+----------------------------------------------+----------------------------------------------+ +| dict key | type | description | ++==========+==============================================+==============================================+ +| key | slice, index (int) or numpy-like fancy index | key at which point sizes were indexed/sliced | ++----------+----------------------------------------------+----------------------------------------------+ +| value | int | float | array-like | new size values for points that were changed | ++----------+----------------------------------------------+----------------------------------------------+ + +sizes +^^^^^ + +**event info dict** + ++----------+-------+----------------+ +| dict key | type | description | ++==========+=======+================+ +| value | float | new size value | ++----------+-------+----------------+ + +colors +^^^^^^ + +**event info dict** + ++------------+--------------------------------------+------------------------------------------------------+ +| dict key | type | description | ++============+======================================+======================================================+ +| key | slice, index, numpy-like fancy index | index/slice at which colors were indexed/sliced | ++------------+--------------------------------------+------------------------------------------------------+ +| value | np.ndarray [n_points_changed, RGBA] | new color values for points that were changed | ++------------+--------------------------------------+------------------------------------------------------+ +| user_value | str or array-like | user input value that was parsed into the RGBA array | ++------------+--------------------------------------+------------------------------------------------------+ + +colors +^^^^^^ + +**event info dict** + ++----------+-------------------+-----------------+ +| dict key | type | description | ++==========+===================+=================+ +| value | np.ndarray [RGBA] | new color value | ++----------+-------------------+-----------------+ + +cmap +^^^^ + +**event info dict** + ++----------+-------+--------------------------------+ +| dict key | type | description | ++==========+=======+================================+ +| key | slice | key at cmap colors were sliced | ++----------+-------+--------------------------------+ +| value | str | new cmap to set at given slice | ++----------+-------+--------------------------------+ + +size_space +^^^^^^^^^^ + +**event info dict** + ++----------+------+------------------------------+ +| dict key | type | description | ++==========+======+==============================+ +| value | str | 'screen' | 'world' | 'model' | ++----------+------+------------------------------+ + +name +^^^^ + +**event info dict** + ++----------+------+--------------------+ +| dict key | type | description | ++==========+======+====================+ +| value | str | user provided name | ++----------+------+--------------------+ + +offset +^^^^^^ + +**event info dict** + ++----------+---------------------------------+----------------------+ +| dict key | type | description | ++==========+=================================+======================+ +| value | np.ndarray[float, float, float] | new offset (x, y, z) | ++----------+---------------------------------+----------------------+ + +rotation +^^^^^^^^ + +**event info dict** + ++----------+----------------------------------------+-------------------------+ +| dict key | type | description | ++==========+========================================+=========================+ +| value | np.ndarray[float, float, float, float] | new rotation quaternion | ++----------+----------------------------------------+-------------------------+ + +visible +^^^^^^^ + +**event info dict** + ++----------+------+---------------------+ +| dict key | type | description | ++==========+======+=====================+ +| value | bool | new visibility bool | ++----------+------+---------------------+ + +deleted +^^^^^^^ + +**event info dict** + ++----------+------+-------------------------------+ +| dict key | type | description | ++==========+======+===============================+ +| value | bool | True when graphic was deleted | ++----------+------+-------------------------------+ + +ImageGraphic +------------ + +data +^^^^ + +**event info dict** + ++----------+--------------------------------------+--------------------------------------------------+ +| dict key | type | description | ++==========+======================================+==================================================+ +| key | slice, index, numpy-like fancy index | key at which image data was sliced/fancy indexed | ++----------+--------------------------------------+--------------------------------------------------+ +| value | np.ndarray | float | new data values | ++----------+--------------------------------------+--------------------------------------------------+ + +cmap +^^^^ + +**event info dict** + ++----------+------+---------------+ +| dict key | type | description | ++==========+======+===============+ +| value | str | new cmap name | ++----------+------+---------------+ + +vmin +^^^^ + +**event info dict** + ++----------+-------+----------------+ +| dict key | type | description | ++==========+=======+================+ +| value | float | new vmin value | ++----------+-------+----------------+ + +vmax +^^^^ + +**event info dict** + ++----------+-------+----------------+ +| dict key | type | description | ++==========+=======+================+ +| value | float | new vmax value | ++----------+-------+----------------+ + +interpolation +^^^^^^^^^^^^^ + +**event info dict** + ++----------+------+--------------------------------------------+ +| dict key | type | description | ++==========+======+============================================+ +| value | str | new interpolation method, nearest | linear | ++----------+------+--------------------------------------------+ + +cmap_interpolation +^^^^^^^^^^^^^^^^^^ + +**event info dict** + ++----------+------+------------------------------------------------+ +| dict key | type | description | ++==========+======+================================================+ +| value | str | new cmap interpolatio method, nearest | linear | ++----------+------+------------------------------------------------+ + +name +^^^^ + +**event info dict** + ++----------+------+--------------------+ +| dict key | type | description | ++==========+======+====================+ +| value | str | user provided name | ++----------+------+--------------------+ + +offset +^^^^^^ + +**event info dict** + ++----------+---------------------------------+----------------------+ +| dict key | type | description | ++==========+=================================+======================+ +| value | np.ndarray[float, float, float] | new offset (x, y, z) | ++----------+---------------------------------+----------------------+ + +rotation +^^^^^^^^ + +**event info dict** + ++----------+----------------------------------------+-------------------------+ +| dict key | type | description | ++==========+========================================+=========================+ +| value | np.ndarray[float, float, float, float] | new rotation quaternion | ++----------+----------------------------------------+-------------------------+ + +visible +^^^^^^^ + +**event info dict** + ++----------+------+---------------------+ +| dict key | type | description | ++==========+======+=====================+ +| value | bool | new visibility bool | ++----------+------+---------------------+ + +deleted +^^^^^^^ + +**event info dict** + ++----------+------+-------------------------------+ +| dict key | type | description | ++==========+======+===============================+ +| value | bool | True when graphic was deleted | ++----------+------+-------------------------------+ + +TextGraphic +----------- + +text +^^^^ + +**event info dict** + ++----------+------+---------------+ +| dict key | type | description | ++==========+======+===============+ +| value | str | new text data | ++----------+------+---------------+ + +font_size +^^^^^^^^^ + +**event info dict** + ++----------+-------------+---------------+ +| dict key | type | description | ++==========+=============+===============+ +| value | float | int | new font size | ++----------+-------------+---------------+ + +face_color +^^^^^^^^^^ + +**event info dict** + ++----------+------------------+----------------+ +| dict key | type | description | ++==========+==================+================+ +| value | str | np.ndarray | new text color | ++----------+------------------+----------------+ + +outline_color +^^^^^^^^^^^^^ + +**event info dict** + ++----------+------------------+-------------------+ +| dict key | type | description | ++==========+==================+===================+ +| value | str | np.ndarray | new outline color | ++----------+------------------+-------------------+ + +outline_thickness +^^^^^^^^^^^^^^^^^ + +**event info dict** + ++----------+-------+----------------------------+ +| dict key | type | description | ++==========+=======+============================+ +| value | float | new text outline thickness | ++----------+-------+----------------------------+ + +name +^^^^ + +**event info dict** + ++----------+------+--------------------+ +| dict key | type | description | ++==========+======+====================+ +| value | str | user provided name | ++----------+------+--------------------+ + +offset +^^^^^^ + +**event info dict** + ++----------+---------------------------------+----------------------+ +| dict key | type | description | ++==========+=================================+======================+ +| value | np.ndarray[float, float, float] | new offset (x, y, z) | ++----------+---------------------------------+----------------------+ + +rotation +^^^^^^^^ + +**event info dict** + ++----------+----------------------------------------+-------------------------+ +| dict key | type | description | ++==========+========================================+=========================+ +| value | np.ndarray[float, float, float, float] | new rotation quaternion | ++----------+----------------------------------------+-------------------------+ + +visible +^^^^^^^ + +**event info dict** + ++----------+------+---------------------+ +| dict key | type | description | ++==========+======+=====================+ +| value | bool | new visibility bool | ++----------+------+---------------------+ + +deleted +^^^^^^^ + +**event info dict** + ++----------+------+-------------------------------+ +| dict key | type | description | ++==========+======+===============================+ +| value | bool | True when graphic was deleted | ++----------+------+-------------------------------+ + +LineCollection +-------------- + +data +^^^^ + +**event info dict** + ++----------+----------------------------------------------+--------------------------------------------------------+ +| dict key | type | description | ++==========+==============================================+========================================================+ +| key | slice, index (int) or numpy-like fancy index | key at which vertex positions data were indexed/sliced | ++----------+----------------------------------------------+--------------------------------------------------------+ +| value | int | float | array-like | new data values for points that were changed | ++----------+----------------------------------------------+--------------------------------------------------------+ + +colors +^^^^^^ + +**event info dict** + ++------------+--------------------------------------+------------------------------------------------------+ +| dict key | type | description | ++============+======================================+======================================================+ +| key | slice, index, numpy-like fancy index | index/slice at which colors were indexed/sliced | ++------------+--------------------------------------+------------------------------------------------------+ +| value | np.ndarray [n_points_changed, RGBA] | new color values for points that were changed | ++------------+--------------------------------------+------------------------------------------------------+ +| user_value | str or array-like | user input value that was parsed into the RGBA array | ++------------+--------------------------------------+------------------------------------------------------+ + +colors +^^^^^^ + +**event info dict** + ++----------+-------------------+-----------------+ +| dict key | type | description | ++==========+===================+=================+ +| value | np.ndarray [RGBA] | new color value | ++----------+-------------------+-----------------+ + +cmap +^^^^ + +**event info dict** + ++----------+-------+--------------------------------+ +| dict key | type | description | ++==========+=======+================================+ +| key | slice | key at cmap colors were sliced | ++----------+-------+--------------------------------+ +| value | str | new cmap to set at given slice | ++----------+-------+--------------------------------+ + +thickness +^^^^^^^^^ + +**event info dict** + ++----------+-------+---------------------+ +| dict key | type | description | ++==========+=======+=====================+ +| value | float | new thickness value | ++----------+-------+---------------------+ + +size_space +^^^^^^^^^^ + +**event info dict** + ++----------+------+------------------------------+ +| dict key | type | description | ++==========+======+==============================+ +| value | str | 'screen' | 'world' | 'model' | ++----------+------+------------------------------+ + +name +^^^^ + +**event info dict** + ++----------+------+--------------------+ +| dict key | type | description | ++==========+======+====================+ +| value | str | user provided name | ++----------+------+--------------------+ + +offset +^^^^^^ + +**event info dict** + ++----------+---------------------------------+----------------------+ +| dict key | type | description | ++==========+=================================+======================+ +| value | np.ndarray[float, float, float] | new offset (x, y, z) | ++----------+---------------------------------+----------------------+ + +rotation +^^^^^^^^ + +**event info dict** + ++----------+----------------------------------------+-------------------------+ +| dict key | type | description | ++==========+========================================+=========================+ +| value | np.ndarray[float, float, float, float] | new rotation quaternion | ++----------+----------------------------------------+-------------------------+ + +visible +^^^^^^^ + +**event info dict** + ++----------+------+---------------------+ +| dict key | type | description | ++==========+======+=====================+ +| value | bool | new visibility bool | ++----------+------+---------------------+ + +deleted +^^^^^^^ + +**event info dict** + ++----------+------+-------------------------------+ +| dict key | type | description | ++==========+======+===============================+ +| value | bool | True when graphic was deleted | ++----------+------+-------------------------------+ + +LineStack +--------- + +data +^^^^ + +**event info dict** + ++----------+----------------------------------------------+--------------------------------------------------------+ +| dict key | type | description | ++==========+==============================================+========================================================+ +| key | slice, index (int) or numpy-like fancy index | key at which vertex positions data were indexed/sliced | ++----------+----------------------------------------------+--------------------------------------------------------+ +| value | int | float | array-like | new data values for points that were changed | ++----------+----------------------------------------------+--------------------------------------------------------+ + +colors +^^^^^^ + +**event info dict** + ++------------+--------------------------------------+------------------------------------------------------+ +| dict key | type | description | ++============+======================================+======================================================+ +| key | slice, index, numpy-like fancy index | index/slice at which colors were indexed/sliced | ++------------+--------------------------------------+------------------------------------------------------+ +| value | np.ndarray [n_points_changed, RGBA] | new color values for points that were changed | ++------------+--------------------------------------+------------------------------------------------------+ +| user_value | str or array-like | user input value that was parsed into the RGBA array | ++------------+--------------------------------------+------------------------------------------------------+ + +colors +^^^^^^ + +**event info dict** + ++----------+-------------------+-----------------+ +| dict key | type | description | ++==========+===================+=================+ +| value | np.ndarray [RGBA] | new color value | ++----------+-------------------+-----------------+ + +cmap +^^^^ + +**event info dict** + ++----------+-------+--------------------------------+ +| dict key | type | description | ++==========+=======+================================+ +| key | slice | key at cmap colors were sliced | ++----------+-------+--------------------------------+ +| value | str | new cmap to set at given slice | ++----------+-------+--------------------------------+ + +thickness +^^^^^^^^^ + +**event info dict** + ++----------+-------+---------------------+ +| dict key | type | description | ++==========+=======+=====================+ +| value | float | new thickness value | ++----------+-------+---------------------+ + +size_space +^^^^^^^^^^ + +**event info dict** + ++----------+------+------------------------------+ +| dict key | type | description | ++==========+======+==============================+ +| value | str | 'screen' | 'world' | 'model' | ++----------+------+------------------------------+ + +name +^^^^ + +**event info dict** + ++----------+------+--------------------+ +| dict key | type | description | ++==========+======+====================+ +| value | str | user provided name | ++----------+------+--------------------+ + +offset +^^^^^^ + +**event info dict** + ++----------+---------------------------------+----------------------+ +| dict key | type | description | ++==========+=================================+======================+ +| value | np.ndarray[float, float, float] | new offset (x, y, z) | ++----------+---------------------------------+----------------------+ + +rotation +^^^^^^^^ + +**event info dict** + ++----------+----------------------------------------+-------------------------+ +| dict key | type | description | ++==========+========================================+=========================+ +| value | np.ndarray[float, float, float, float] | new rotation quaternion | ++----------+----------------------------------------+-------------------------+ + +visible +^^^^^^^ + +**event info dict** + ++----------+------+---------------------+ +| dict key | type | description | ++==========+======+=====================+ +| value | bool | new visibility bool | ++----------+------+---------------------+ + +deleted +^^^^^^^ + +**event info dict** + ++----------+------+-------------------------------+ +| dict key | type | description | ++==========+======+===============================+ +| value | bool | True when graphic was deleted | ++----------+------+-------------------------------+ + +LinearSelector +-------------- + +selection +^^^^^^^^^ + +**extra attributes** + ++--------------------+----------+----------------------------------+ +| attribute | type | description | ++====================+==========+==================================+ +| get_selected_index | callable | returns index under the selector | ++--------------------+----------+----------------------------------+ + +**event info dict** + ++----------+-------+-------------------------------+ +| dict key | type | description | ++==========+=======+===============================+ +| value | float | new x or y value of selection | ++----------+-------+-------------------------------+ + +name +^^^^ + +**event info dict** + ++----------+------+--------------------+ +| dict key | type | description | ++==========+======+====================+ +| value | str | user provided name | ++----------+------+--------------------+ + +offset +^^^^^^ + +**event info dict** + ++----------+---------------------------------+----------------------+ +| dict key | type | description | ++==========+=================================+======================+ +| value | np.ndarray[float, float, float] | new offset (x, y, z) | ++----------+---------------------------------+----------------------+ + +rotation +^^^^^^^^ + +**event info dict** + ++----------+----------------------------------------+-------------------------+ +| dict key | type | description | ++==========+========================================+=========================+ +| value | np.ndarray[float, float, float, float] | new rotation quaternion | ++----------+----------------------------------------+-------------------------+ + +visible +^^^^^^^ + +**event info dict** + ++----------+------+---------------------+ +| dict key | type | description | ++==========+======+=====================+ +| value | bool | new visibility bool | ++----------+------+---------------------+ + +deleted +^^^^^^^ + +**event info dict** + ++----------+------+-------------------------------+ +| dict key | type | description | ++==========+======+===============================+ +| value | bool | True when graphic was deleted | ++----------+------+-------------------------------+ + +LinearRegionSelector +-------------------- + +selection +^^^^^^^^^ + +**extra attributes** + ++----------------------+----------+------------------------------------+ +| attribute | type | description | ++======================+==========+====================================+ +| get_selected_indices | callable | returns indices under the selector | ++----------------------+----------+------------------------------------+ +| get_selected_data | callable | returns data under the selector | ++----------------------+----------+------------------------------------+ + +**event info dict** + ++----------+------------+-----------------------------+ +| dict key | type | description | ++==========+============+=============================+ +| value | np.ndarray | new [min, max] of selection | ++----------+------------+-----------------------------+ + +name +^^^^ + +**event info dict** + ++----------+------+--------------------+ +| dict key | type | description | ++==========+======+====================+ +| value | str | user provided name | ++----------+------+--------------------+ + +offset +^^^^^^ + +**event info dict** + ++----------+---------------------------------+----------------------+ +| dict key | type | description | ++==========+=================================+======================+ +| value | np.ndarray[float, float, float] | new offset (x, y, z) | ++----------+---------------------------------+----------------------+ + +rotation +^^^^^^^^ + +**event info dict** + ++----------+----------------------------------------+-------------------------+ +| dict key | type | description | ++==========+========================================+=========================+ +| value | np.ndarray[float, float, float, float] | new rotation quaternion | ++----------+----------------------------------------+-------------------------+ + +visible +^^^^^^^ + +**event info dict** + ++----------+------+---------------------+ +| dict key | type | description | ++==========+======+=====================+ +| value | bool | new visibility bool | ++----------+------+---------------------+ + +deleted +^^^^^^^ + +**event info dict** + ++----------+------+-------------------------------+ +| dict key | type | description | ++==========+======+===============================+ +| value | bool | True when graphic was deleted | ++----------+------+-------------------------------+ + +RectangleSelector +----------------- + +selection +^^^^^^^^^ + +**extra attributes** + ++----------------------+----------+------------------------------------+ +| attribute | type | description | ++======================+==========+====================================+ +| get_selected_indices | callable | returns indices under the selector | ++----------------------+----------+------------------------------------+ +| get_selected_data | callable | returns data under the selector | ++----------------------+----------+------------------------------------+ + +**event info dict** + ++----------+------------+-------------------------------------------+ +| dict key | type | description | ++==========+============+===========================================+ +| value | np.ndarray | new [xmin, xmax, ymin, ymax] of selection | ++----------+------------+-------------------------------------------+ + +name +^^^^ + +**event info dict** + ++----------+------+--------------------+ +| dict key | type | description | ++==========+======+====================+ +| value | str | user provided name | ++----------+------+--------------------+ + +offset +^^^^^^ + +**event info dict** + ++----------+---------------------------------+----------------------+ +| dict key | type | description | ++==========+=================================+======================+ +| value | np.ndarray[float, float, float] | new offset (x, y, z) | ++----------+---------------------------------+----------------------+ + +rotation +^^^^^^^^ + +**event info dict** + ++----------+----------------------------------------+-------------------------+ +| dict key | type | description | ++==========+========================================+=========================+ +| value | np.ndarray[float, float, float, float] | new rotation quaternion | ++----------+----------------------------------------+-------------------------+ + +visible +^^^^^^^ + +**event info dict** + ++----------+------+---------------------+ +| dict key | type | description | ++==========+======+=====================+ +| value | bool | new visibility bool | ++----------+------+---------------------+ + +deleted +^^^^^^^ + +**event info dict** + ++----------+------+-------------------------------+ +| dict key | type | description | ++==========+======+===============================+ +| value | bool | True when graphic was deleted | ++----------+------+-------------------------------+ + diff --git a/docs/source/user_guide/faq.rst b/docs/source/user_guide/faq.rst new file mode 100644 index 000000000..5985efae1 --- /dev/null +++ b/docs/source/user_guide/faq.rst @@ -0,0 +1,136 @@ +FAQ +=== + +What is ``fastplotlib``? +------------------------ + + `fastplotlib` is a scientific plotting library built on top of the `pygfx `_ rendering engine + that leverages new graphics APIs and modern GPU hardware to create fast and interactive visualizations. + + +What can I do with ``fastplotlib``? +----------------------------------- + + `fastplotlib` allows for: + - GPU accelerated visualization + - interactive visualization via an intuitive and expressive API + - rapid prototyping and algorithm design + - easy exploration and fast rendering of large-scale data + - design, develop, evaluate and ship machine learning models + - create visualizations for real-time acquisition systems for scientific instruments (cameras, etc.) + +Do I need a GPU? +---------------- + + Integrated GPUs, such as those found in modern laptops, are sufficient for many use cases. + + For the best performance you will require a dedicated GPU. You can think of it like running a game, a more complex visualization or faster rendering will require a better GPU. + + Limited software rendering using just the CPU is supported on linux using lavapipe, but this is mostly only useful for testing purposes. + +How does ``fastplotlib`` relate to ``matplotlib``? +-------------------------------------------------- + + `fastplotlib` is **not** related to `matplotlib` in any way. + + These are two completely different libraries with their own APIs and use-cases. The `fastplotlib` library is primarily for *interactive* + visualization that runs on the GPU using WGPU. The `fastplotlib` architecture is completely different from `matplotlib`. Using `fastplotlib` + is more akin to using `numpy`. + + To expand on this a bit more, the `pygfx` buffer interface is really unlike anything in`matplotlib` and other libraries which is a major reason + why `fastplotlib` can have an array-like API for plotting. We believe that these design choices make it much easier to learn how to use the library + and provide fine-grained control over your visualizations. See the "How can I learn to use `fastplotlib`?" section below. + +How can I learn to use ``fastplotlib``? +--------------------------------------- + + We want `fastplotlib` to be easy to learn and use. To get started with the library we recommend taking a look at our `guide `_ and + `examples gallery `_. + + In general, if you are familiar with numpy and array notation you will already have a intuitive understanding of interacting + with your data in `fastplotlib`. If you have any questions, please do not hesitate to post an issue or discussion forum post. + +Should I use ``fastplotlib`` for making publication figures? +------------------------------------------------------------ + + While `fastplotlib` figures can be exported to PNG using ``figure.export()``, `fastplotlib` is not intended for creating *static* + publication figures. There are many other libraries that are well-suited for this task. + + The rendering engine pygfx has a starting point for an svg renderer, you may try and expand upon it: https://github.com/pygfx/pygfx/tree/main/pygfx/renderers/svg + +How does ``fastplotlib`` handle data loading? +--------------------------------------------- + + `fastplotlib` is a plotting library and not a data handling or data loading library. These tasks are outside of the scope of + the library. + + In general, if your data is an array-like object, `fastplotlib` should be able to use it. However, if you have any problems using your data objects, + please do not hesitate to post an issue! See this `issue `_ for more details. + +What is the scope of ``fastplotlib``? +------------------------------------- + + While the capabilities are very far-reaching, we would like to emphasize that `fastplotlib` is a general-purpose plotting library focused on scientific visualization. + More specifically, we aim to develop the tools necessary for users to build fast and interactive visualizations for a variety of scientific domains including but not limited to + neuroscience, astronomy, biology, computer vision, signal processing, and more. If you have a particular feature in mind that you feel is missing, please post an issue and we will respond + accordingly letting you know if it fits within the scope of the project. + +What types of PRs are we willing to accept? +------------------------------------------- + + Primarily the features of `fastplotlib` have been developed as they relate to the core-developers research use cases (mostly neuroscience, algorithm development, and machine learning). With that being said, there are many domains in which + we do not have the knowledge to best-implement the tools needed for proper visualization. We welcome all PRs that address these types of missing functionality. We + recommend taking a look at our `Roadmap `_ to get a better idea of what those items might be :D + + Closely related to this, we would love to add more examples to our repo for different types of scientific visualizations. We welcome all PRs that showcase using `fastplotlib` for + your given research domain! :D + + Lastly, documentation is a critical part of open-source software and makes learning/using our tool much easier. We welcome all PRs that add missing or needed documentation of the + codebase. If you find a piece of the codebase that is confusing or does not have proper documentation, please also feel free to post an issue on the repo! + +What frameworks does ``fastplotlib`` support? +--------------------------------------------- + + The short answer is that `fastplotlib` can run on anything that `pygfx` runs on. This includes, + - `jupyter lab` using `jupyter_rfb` + - `PyQt` and `PySide` + - `glfw` + - `wxPython` + + Notes: + - `jupyter_rfb `_ does not work in Google Collab, see https://github.com/vispy/jupyter_rfb/pull/77 + - Non-blocking interactive Qt/PySide output is supported in ipython and notebooks, see the `interactive shells section in the user guide `_ + - We do not officially support `jupyter notebook` through `jupyter_rfb` and strongly recommend using `jupyter lab`. Jupyter Notebook v7 might work, but this has not been extensively tested. + - We only support `jupyterlab` for use in notebooks. This means that we do not support VSCode notebooks or any other python notebook platform. Jupyterlab is the most reliable way to use widget-based libraries in notebooks. + + +How can I use ``fastplotlib`` interactively? +-------------------------------------------- + + There are multiple ways to use fastplotlib interactively. + + 1. Jupyter + + On jupyter lab the jupyter backend (i.e. jupyter_rfb) is normally selected. This works via client-server rendering. + Images generated on the server are streamed to the client (Jupyter) via a jpeg byte stream. Events (such as mouse or keyboard events) + are then streamed in the opposite direction prompting new images to be generated by the server if necessary. + This remote-frame-buffer approach makes the rendering process very fast. `fastplotlib` viusalizations can be displayed + in cell output or on the side using sidecar. + + A Qt backend can also optionally be used as well. If %gui qt is selected before importing `fastplotlib` then this + backend will be used instead. + + Lastly, users can also force using glfw by specifying this as an argument when instantiating a + Figure (i.e. Figure(canvas="gflw"). + + **Note:** Do not mix between gui backends. For example, if you start the notebook using Qt, do not attempt to + force using another backend such as jupyter_rfb later. + + 2. IPython + + Users can select between using a Qt backend or glfw using the same methods as above. + +Why the parrot logo? +-------------------- + + The logo is a `swift parrot `_, they are the fastest species of parrot and they are colorful like fastplotlib visualizations :D diff --git a/docs/source/user_guide/gpu.rst b/docs/source/user_guide/gpu.rst new file mode 100644 index 000000000..428c8600b --- /dev/null +++ b/docs/source/user_guide/gpu.rst @@ -0,0 +1,342 @@ +GPU Info and selection +====================== + +FAQ +--- + +1. Do I need a GPU? + +Technically no, you can perform limited software rendering on linux using lavapipe (see drivers link below). However +``fastplotlib`` is intentionally built for realtime rendering using the latest GPU technologies, so we strongly +recommend that you use a GPU. Note that modern integrated graphics is often sufficient for many use-cases. + +2. My kernel keeps crashing. + +This can happen under the following circumstances: + +- You have ran out of GPU VRAM. +- Driver issues (see next section). + +If you aren't able to solve it please post an issue on GitHub. :) + +3. Nothing renders or rendering is weird, or I see graphical artifacts. + +- Probably driver issues (see next section). + +Drivers +------- + +If you notice weird graphic artifacts, things not rendering, or other glitches try updating to the latest stable +drivers. + +More information is also available on the WGPU docs: https://wgpu-py.readthedocs.io/en/stable/start.html#platform-requirements + +Windows +^^^^^^^ + +Vulkan drivers should be installed by default on Windows 11, but you will need to install your GPU manufacturer's driver package (Nvidia or AMD). If you have an integrated GPU within your CPU, you might still need to install a driver package too, check your CPU manufacturer's info. + +Linux +^^^^^ + +You will generally need a linux distro that is from ~2020 or newer (ex. Ubuntu 18.04 won't work), this is due to the `glibc` requirements of the `wgpu-native` binary. + +Install the drivers directly from your GPU manufacturer's website, after that you may still need to install mesa vulkan drivers: + +Debian based distros:: + + sudo apt install mesa-vulkan-drivers + +For other distros install the corresponding vulkan driver package. + +Cloud compute +~~~~~~~~~~~~~ + +See the WGPU docs: https://wgpu-py.readthedocs.io/en/stable/start.html#cloud-compute + +Mac OSX +^^^^^^^ + +WGPU uses Metal instead of Vulkan on Mac. You will need at least Mac OSX 10.13. The OS should come with Metal pre-installed, so you should be good to go! + +GPU Info +-------- + +View available adapters +^^^^^^^^^^^^^^^^^^^^^^^ + +You can get a summary of all adapters that are available to ``WGPU`` like this:: + + import fastplotlib as fpl + + adapters = fpl.enumerate_adapters() + + for a in adapters: + print(a.summary) + +For example, on a Thinkpad AMD laptop with a dedicated nvidia GPU this returns:: + + AMD Radeon Graphics (RADV REMBRANDT) (IntegratedGPU) on Vulkan + NVIDIA T1200 Laptop GPU (DiscreteGPU) on Vulkan + llvmpipe (LLVM 15.0.6, 256 bits) (CPU) on Vulkan + AMD Radeon Graphics (rembrandt, LLVM 15.0.6, DRM 3.52, 6.4.0-0.deb12.2-amd64) (Unknown) on OpenGL + +In jupyter all the available adapters are also listed when ``fastplotlib`` is imported. + +You can get more detailed info on each adapter like this:: + + import pprint + for a in fpl.enumerate_adapters(): + pprint.pprint(a.info) + +General description of the fields: + * vendor: GPU manufacturer + * device: specific GPU model + * description: GPU driver version + * adapter_type: indicates whether this is a discrete GPU, integrated GPU, or software rendering adapter (CPU) + * backend_type: one of "Vulkan", "Metal", or "D3D12" + +For more information on the fields see: https://gpuweb.github.io/gpuweb/#gpuadapterinfo + +Adapter currently in use +^^^^^^^^^^^^^^^^^^^^^^^^ + +If you want to know the adapter that a figure is using you can check the adapter on the renderer:: + + # for example if we make a plot + fig = fpl.Figure() + fig[0, 0].add_image(np.random.rand(100, 100)) + fig.show() + + # GPU that is currently in use by the renderer + print(fig.renderer.device.adapter.summary) + + +Diagnostic info +^^^^^^^^^^^^^^^ + +After creating a figure you can view WGPU diagnostic info like this:: + + fpl.print_wgpu_report() + + +Example output:: + + ā–ˆā–ˆ system: + + platform: Linux-5.10.0-21-amd64-x86_64-with-glibc2.31 + python_implementation: CPython + python: 3.11.3 + + ā–ˆā–ˆ versions: + + wgpu: 0.15.1 + cffi: 1.15.1 + jupyter_rfb: 0.4.2 + numpy: 1.26.4 + pygfx: 0.2.0 + pylinalg: 0.4.1 + fastplotlib: 0.1.0.a16 + + ā–ˆā–ˆ wgpu_native_info: + + expected_version: 0.19.3.1 + lib_version: 0.19.3.1 + lib_path: ./resources/libwgpu_native-release.so + + ā–ˆā–ˆ object_counts: + + count resource_mem + + Adapter: 1 + BindGroup: 3 + BindGroupLayout: 3 + Buffer: 6 696 + CanvasContext: 1 + CommandBuffer: 0 + CommandEncoder: 0 + ComputePassEncoder: 0 + ComputePipeline: 0 + Device: 1 + PipelineLayout: 0 + QuerySet: 0 + Queue: 1 + RenderBundle: 0 + RenderBundleEncoder: 0 + RenderPassEncoder: 0 + RenderPipeline: 3 + Sampler: 2 + ShaderModule: 3 + Texture: 6 9.60M + TextureView: 6 + + total: 36 9.60M + + ā–ˆā–ˆ wgpu_native_counts: + + count mem backend a k r e el_size + + Adapter: 1 1.98K vulkan: 1 1 3 0 1.98K + BindGroup: 3 1.10K vulkan: 3 3 0 0 368 + BindGroupLayout: 3 960 vulkan: 5 3 2 0 320 + Buffer: 6 1.77K vulkan: 7 6 1 0 296 + CanvasContext: 0 0 0 0 0 0 160 + CommandBuffer: 1 1.25K vulkan: 0 0 0 1 1.25K + ComputePipeline: 0 0 vulkan: 0 0 0 0 288 + Device: 1 11.8K vulkan: 1 1 0 0 11.8K + PipelineLayout: 0 0 vulkan: 3 0 3 0 200 + QuerySet: 0 0 vulkan: 0 0 0 0 80 + Queue: 1 184 vulkan: 1 1 0 0 184 + RenderBundle: 0 0 vulkan: 0 0 0 0 848 + RenderPipeline: 3 1.68K vulkan: 3 3 0 0 560 + Sampler: 2 160 vulkan: 2 2 0 0 80 + ShaderModule: 3 2.40K vulkan: 3 3 0 0 800 + Texture: 6 4.94K vulkan: 7 6 1 0 824 + TextureView: 6 1.48K vulkan: 6 6 1 0 248 + + total: 36 29.7K + + * The a, k, r, e are allocated, kept, released, and error, respectively. + * Reported memory does not include buffer/texture data. + + ā–ˆā–ˆ pygfx_adapter_info: + + vendor: radv + architecture: + device: AMD RADV POLARIS10 (ACO) + description: Mesa 20.3.5 (ACO) + vendor_id: 4.09K + device_id: 26.5K + adapter_type: DiscreteGPU + backend_type: Vulkan + + ā–ˆā–ˆ pygfx_features: + + adapter device + + bgra8unorm-storage: - - + depth32float-stencil8: āœ“ - + depth-clip-control: āœ“ - + float32-filterable: āœ“ āœ“ + indirect-first-instance: āœ“ - + rg11b10ufloat-renderable: āœ“ - + shader-f16: - - + texture-compression-astc: - - + texture-compression-bc: āœ“ - + texture-compression-etc2: - - + timestamp-query: āœ“ - + MultiDrawIndirect: āœ“ - + MultiDrawIndirectCount: āœ“ - + PushConstants: āœ“ - + TextureAdapterSpecificFormatFeatures: āœ“ - + VertexWritableStorage: āœ“ - + + ā–ˆā–ˆ pygfx_limits: + + adapter device + + max-bind-groups: 8 8 + max-bind-groups-plus-vertex-buffers: 0 0 + max-bindings-per-bind-group: 1.00K 1.00K + max-buffer-size: 2.14G 2.14G + max-color-attachment-bytes-per-sample: 0 0 + max-color-attachments: 0 0 + max-compute-invocations-per-workgroup: 1.02K 1.02K + max-compute-workgroup-size-x: 1.02K 1.02K + max-compute-workgroup-size-y: 1.02K 1.02K + max-compute-workgroup-size-z: 1.02K 1.02K + max-compute-workgroup-storage-size: 32.7K 32.7K + max-compute-workgroups-per-dimension: 65.5K 65.5K + max-dynamic-storage-buffers-per-pipeline-layout: 8 8 + max-dynamic-uniform-buffers-per-pipeline-layout: 16 16 + max-inter-stage-shader-components: 128 128 + max-inter-stage-shader-variables: 0 0 + max-sampled-textures-per-shader-stage: 8.38M 8.38M + max-samplers-per-shader-stage: 8.38M 8.38M + max-storage-buffer-binding-size: 2.14G 2.14G + max-storage-buffers-per-shader-stage: 8.38M 8.38M + max-storage-textures-per-shader-stage: 8.38M 8.38M + max-texture-array-layers: 2.04K 2.04K + max-texture-dimension-1d: 16.3K 16.3K + max-texture-dimension-2d: 16.3K 16.3K + max-texture-dimension-3d: 2.04K 2.04K + max-uniform-buffer-binding-size: 2.14G 2.14G + max-uniform-buffers-per-shader-stage: 8.38M 8.38M + max-vertex-attributes: 32 32 + max-vertex-buffer-array-stride: 2.04K 2.04K + max-vertex-buffers: 16 16 + min-storage-buffer-offset-alignment: 32 32 + min-uniform-buffer-offset-alignment: 32 32 + + ā–ˆā–ˆ pygfx_caches: + + count hits misses + + full_quad_objects: 1 0 2 + mipmap_pipelines: 0 0 0 + layouts: 1 0 3 + bindings: 1 0 1 + shader_modules: 2 0 2 + pipelines: 2 0 2 + shadow_pipelines: 0 0 0 + + ā–ˆā–ˆ pygfx_resources: + + Texture: 8 + Buffer: 23 + + +Select GPU (adapter) +-------------------- + +You can select an adapter by passing one of the ``wgpu.GPUAdapter`` instances returned by ``fpl.enumerate_adapters()`` +to ``fpl.select_adapter()``:: + + # get info or summary of all adapters to pick an adapter + import pprint + for a in fpl.enumerate_adapters(): + pprint.pprint(a.info) + + # example, pick adapter at index 2 + chosen_gpu = fpl.enumerate_adapters()[2] + fpl.select_adapter(chosen_gpu) + +**You must select an adapter before creating a** ``Figure`` **, otherwise the default adapter will be selected. Once a** +``Figure`` **is created the adapter cannot be changed.** + +Note that using this function reduces the portability of your code, because +it's highly specific for your current machine/environment. + +The order of the adapters returned by ``fpl.enumerate_adapters()`` is +such that Vulkan adapters go first, then Metal, then D3D12, then OpenGL. +Within each category, the order as provided by the particular backend is +maintained. Note that the same device may be present via multiple backends +(e.g. vulkan/opengl). + +We cannot make guarantees about whether the order of the adapters matches +the order as reported by e.g. ``nvidia-smi``. We have found that on a Linux +multi-gpu cluster, the order does match, but we cannot promise that this is +always the case. If you want to make sure, do some testing by allocating big +buffers and checking memory usage using ``nvidia-smi`` + +Example to allocate and check GPU mem usage:: + + import subprocess + + import wgpu + import torch + + def allocate_gpu_mem_with_wgpu(idx): + a = wgpu.gpu.enumerate_adapters()[idx] + d = a.request_device() + b = d.create_buffer(size=10*2**20, usage=wgpu.BufferUsage.COPY_DST) + return b + + def allocate_gpu_mem_with_torch(idx): + d = torch.device(f"cuda:{idx}") + return torch.ones([2000, 10], dtype=torch.float32, device=d) + + def show_mem_usage(): + print(subprocess.run(["nvidia-smi"])) + +See https://github.com/pygfx/wgpu-py/issues/482 for more details. diff --git a/docs/source/user_guide/guide.rst b/docs/source/user_guide/guide.rst new file mode 100644 index 000000000..4f3dc64cb --- /dev/null +++ b/docs/source/user_guide/guide.rst @@ -0,0 +1,727 @@ +User Guide +========== + +Installation +------------ + +To install use pip: + +.. code-block:: + + # with imgui and jupyterlab + pip install -U "fastplotlib[notebook,imgui]" + + # minimal install, install glfw, pyqt6 or pyside6 separately + pip install -U fastplotlib + + # with imgui + pip install -U "fastplotlib[imgui]" + + # to use in jupyterlab, no imgui + pip install -U "fastplotlib[notebook]" + +We strongly recommend installing ``simplejpeg`` for use in notebooks, you must first install `libjpeg-turbo `_. + +- If you use ``conda``, you can get ``libjpeg-turbo`` through conda. +- If you are on linux you can get it through your distro's package manager. +- For Windows and Mac compiled binaries are available on their release page: https://github.com/libjpeg-turbo/libjpeg-turbo/releases + +Once you have ``libjpeg-turbo``: + +.. code-block:: + + pip install simplejpeg + +What is ``fastplotlib``? +------------------------ + +``fastplotlib`` is a cutting-edge plotting library built using the `pygfx `_ rendering engine. +The lower-level details of the rendering process (i.e. defining a scene, camera, renderer, etc.) are abstracted away, allowing users to focus on their data. +The fundamental goal of ``fastplotlib`` is to provide a high-level, expressive API that promotes large-scale explorative scientific visualization. We want to +make it easy and intuitive to produce interactive visualizations that are as performant and vibrant as a modern video game šŸ˜„ + + +``fastplotlib`` basics +---------------------- + +Before giving a detailed overview of the library, here is a minimal example:: + + import fastplotlib as fpl + import imageio.v3 as iio + + # create a `Figure` + fig = fpl.Figure() + + # read data + data = iio.imread("imageio:astronaut.png") + + # add image graphic + image_graphic = fig[0, 0].add_image(data=data) + + # show the plot + fig.show() + + if __name__ == "__main__": + fpl.run() + +.. image:: ../_static/guide_hello_world.png + + +This is just a simple example of how the ``fastplotlib`` API works to create a plot, add some image data to the plot, and then visualize it. +However, we are just scratching the surface of what is possible with ``fastplotlib``. +Next, let's take a look at the building blocks of ``fastplotlib`` and how they can be used to create more complex visualizations. + +Aside from this user guide, the Examples Gallery is the best place to learn specific things in fastplotlib. +If you still need help don't hesitate to post an issue or discussion post! + +Figure +------ + +The starting point for creating any visualization in ``fastplotlib`` is a ``Figure`` object. This can be a single subplot or many subplots. +The ``Figure`` object houses and takes care of the underlying rendering components such as the camera, controller, renderer, and canvas. +Most users won't need to use these directly; however, the ability to directly interact with the rendering engine is still available if +needed. + +By default, if no ``shape`` argument is provided when creating a ``Figure``, there will be a single ``Subplot``. + +If a shape argument is provided, all subplots in a ``Figure`` can be accessed by indexing (i.e. ``fig_object[i ,j]``). A "window layout" +with customizable subplot positions and sizes can also be set by providing a ``rects`` or ``extents`` argument. The Examples Gallery +has a few examples that show how to create a "Window Layout". + +After defining a ``Figure``, we can begin to add ``Graphic`` objects. + +Graphics +-------- + +A ``Graphic`` can be an image, a line, a scatter, a collection of lines, and more. All graphics can also be given a convenient ``name``. This allows graphics +to be easily accessed from figures:: + + # create a `Figure` + fig = fpl.Figure() + + # read data + data = iio.imread("imageio:astronaut.png") + + add image graphic + image_graphic = fig[0, 0].add_image(data=data, name="astronaut") + + # show figure + fig.show() + + # index subplot to get graphic + fig[0, 0]["astronaut"] + + # another way to index graphics in a subplot + fig[0, 0].graphics[0] is fig[0, 0]["astronaut"] # will return `True` + +.. + +See the examples gallery for examples on how to create and interactive with all the various types of graphics. + +Graphics also have mutable properties. Some of these properties, such as the ``data`` or ``colors`` of a line can even be sliced, +allowing for the creation of very powerful visualizations. Event handlers can be added to a graphic to capture changes to +any of these properties. + +(1) Common properties that all graphics have + ++--------------+--------------------------------------------------------------------------------------------------------------+ +| Feature Name | Description | ++==============+==============================================================================================================+ +| name | Graphic name | ++--------------+--------------------------------------------------------------------------------------------------------------+ +| offset | Offset position of the graphic, [x, y, z] | ++--------------+--------------------------------------------------------------------------------------------------------------+ +| rotation | Graphic rotation quaternion | ++--------------+--------------------------------------------------------------------------------------------------------------+ +| visible | Access or change the visibility | ++--------------+--------------------------------------------------------------------------------------------------------------+ +| deleted | Used when a graphic is deleted, triggers events that can be useful to indicate this graphic has been deleted | ++--------------+--------------------------------------------------------------------------------------------------------------+ + +(2) Graphic-Specific properties + + (a) ``ImageGraphic`` + + +------------------------+---------------------------------------------------+ + | Feature Name | Description | + +========================+===================================================+ + | data | Underlying image data | + +------------------------+---------------------------------------------------+ + | vmin | Lower contrast limit of an image | + +------------------------+---------------------------------------------------+ + | vmax | Upper contrast limit of an image | + +------------------------+---------------------------------------------------+ + | cmap | Colormap for a grayscale image, ignored if RGB(A) | + +------------------------+---------------------------------------------------+ + + (b) ``LineGraphic``, ``LineCollection``, ``LineStack`` + + +--------------+--------------------------------+ + | Feature Name | Description | + +==============+================================+ + | data | underlying data of the line(s) | + +--------------+--------------------------------+ + | colors | colors of the line(s) | + +--------------+--------------------------------+ + | cmap | colormap of the line(s) | + +--------------+--------------------------------+ + | thickness | thickness of the line(s) | + +--------------+--------------------------------+ + + (c) ``ScatterGraphic`` + + +--------------+---------------------------------------+ + | Feature Name | Description | + +==============+=======================================+ + | data | underlying data of the scatter points | + +--------------+---------------------------------------+ + | colors | colors of the scatter points | + +--------------+---------------------------------------+ + | cmap | colormap of the scatter points | + +--------------+---------------------------------------+ + | sizes | size of the scatter points | + +--------------+---------------------------------------+ + + (d) ``TextGraphic`` + + +-------------------+---------------------------+ + | Feature Name | Description | + +===================+===========================+ + | text | data of the text | + +-------------------+---------------------------+ + | font_size | size of the text | + +-------------------+---------------------------+ + | face_color | color of the text face | + +-------------------+---------------------------+ + | outline_color | color of the text outline | + +-------------------+---------------------------+ + | outline_thickness | thickness of the text | + +-------------------+---------------------------+ + +Using our example from above: once we add a ``Graphic`` to the figure, we can then begin to change its properties. :: + + image_graphic.vmax = 150 + +.. image:: ../_static/guide_hello_world_vmax.png + +``Graphic`` properties also support numpy-like slicing for getting and setting data. For example :: + + # basic numpy-like slicing, set the top right corner + image_graphic.data[:150, -150:] = 0 + +.. image:: ../_static/guide_hello_world_simple_slicing.png + +Fancy indexing is also supported! :: + + bool_array = np.random.choice([True, False], size=(512, 512), p=[0.1, 0.9]) + image_graphic.data[bool_array] = 254 + +.. image:: ../_static/guide_hello_world_fancy_slicing.png + + +Selectors +--------- + +A primary feature of ``fastplotlib`` is the ability to easily interact with your data. Two extremely helpful tools that can +be used in order to facilitate this process are a ``LinearSelector`` and ``LinearRegionSelector``. + +A ``LinearSelector`` is a horizontal or vertical line slider. This tool allows you to very easily select different points in your +data. Let's look at an example: :: + + import fastplotlib as fpl + import numpy as np + + # generate data + xs = np.linspace(-10, 10, 100) + ys = np.sin(xs) + sine = np.column_stack([xs, ys]) + + fig = fpl.Figure() + + sine_graphic = fig[0, 0].add_line(data=sine, colors="w") + + # add a linear selector the sine wave + selector = sine_graphic.add_linear_selector() + + fig.show(maintain_aspect=False) + +.. image:: ../_static/guide_linear_selector.webp + + +A ``LinearRegionSelector`` is very similar to a ``LinearSelector`` but as opposed to selecting a singular point of +your data, you are able to select an entire region. + +See the examples gallery for more in-depth examples with selector tools. + +Now we have the basics of creating a ``Figure``, adding ``Graphics`` to a ``Figure``, and working with ``Graphic`` properties to dynamically change or alter them. + +Events +------ + +Events can be a multitude of things: canvas events such as mouse or keyboard events, or events related to ``Graphic`` properties. + +There are two ways to add events to a graphic: + +1) Use the method `add_event_handler()` :: + + def event_handler(ev): + pass + + graphic.add_event_handler(event_handler, "event_type") + +.. + + +2) or a decorator :: + + @graphic.add_event_handler("event_type") + def event_handler(ev): + pass + +.. + + +The ``event_handler`` is a user-defined callback function that accepts an event instance as the first and only positional argument. +Information about the structure of event instances are described below. The ``"event_type"`` +is a string that identifies the type of event. + +``graphic.supported_events`` will return a tuple of all ``event_type`` strings that this graphic supports. + +When an event occurs, the user-defined event handler will receive an event object. Depending on the type of event, the +event object will have relevant information that can be used in the callback. See the next section for details. + +Graphic property events +^^^^^^^^^^^^^^^^^^^^^^^ + +All ``Graphic`` events are instances of ``fastplotlib.GraphicFeatureEvent`` and have the following attributes: + + +------------+-------------+-----------------------------------------------+ + | attribute | type | description | + +============+=============+===============================================+ + | type | str | name of the event type | + +------------+-------------+-----------------------------------------------+ + | graphic | Graphic | graphic instance that the event is from | + +------------+-------------+-----------------------------------------------+ + | info | dict | event info dictionary | + +------------+-------------+-----------------------------------------------+ + | target | WorldObject | pygfx rendering engine object for the graphic | + +------------+-------------+-----------------------------------------------+ + | time_stamp | float | time when the event occurred, in ms | + +------------+-------------+-----------------------------------------------+ + +Selectors have one event called ``selection`` which has extra attributes in addition to those listed in the table above. +The selection event section covers these. + +The ``info`` attribute for most graphic property events will have one key, ``"value"``, which is the new value +of the graphic property. Events for graphic properties that represent arrays, such the ``data`` properties for +images, lines, and scatters will contain more entries. Here are a list of all graphic properties that have such +additional entries: + +* ``ImageGraphic`` + * data + +* ``LineGraphic`` + * data, colors, cmap + +* ``ScatterGraphic`` + * data, colors, cmap, sizes + +You can understand an event's attributes by adding a simple event handler:: + + @graphic.add_event_handler("event_type") + def handler(ev): + print(ev.type) + print(ev.graphic) + print(ev.info) + + # trigger the event + graphic.event_type = + + # direct example + @image_graphic.add_event_handler("cmap") + def cmap_changed(ev): + print(ev.type) + print(ev.info) + + image_graphic.cmap = "viridis" + # this will trigger the cmap event and print the following: + # 'cmap' + # {"value": "viridis"} + +.. + +The :ref:`event_tables` provide a description of the event info dicts for all Graphic Feature Events. + +Selection event +~~~~~~~~~~~~~~~ + +The ``selection`` event for selectors has additional attributes, mostly ``callable`` methods, that aid in using the +selector tool, such as getting the indices or data under the selection. The ``info`` dict will contain one entry ``value`` +which is the new selection value. + +The :ref:`event_tables` provide a description of the additional attributes as well as the event info dicts for selector events. + +Canvas Events +^^^^^^^^^^^^^ + +Canvas events can be added to a graphic or to a Figure (see next section). +Here is a description of all canvas events and their attributes. + +The examples gallery provides several examples using pointer and key events. + +Pointer events +~~~~~~~~~~~~~~ + +**List of pointer events:** + +* **pointer_down**: emitted when the user interacts with mouse, + +* **pointer_up**: emitted when the user releases a pointer. + +* **pointer_move**: emitted when the user moves a pointer. + This event is throttled. + +* **click**: emmitted when a mouse button is clicked. + +* **double_click**: emitted on a double-click. + This event looks like a pointer event, but without the touches. + +* **wheel**: emitted when the mouse-wheel is used (scrolling), + or when scrolling/pinching on the touchpad/touchscreen. + + Similar to the JS wheel event, the values of the deltas depend on the + platform and whether the mouse-wheel, trackpad or a touch-gesture is + used. Also, scrolling can be linear or have inertia. As a rule of + thumb, one "wheel action" results in a cumulative ``dy`` of around + 100. Positive values of ``dy`` are associated with scrolling down and + zooming out. Positive values of ``dx`` are associated with scrolling + to the right. (A note for Qt users: the sign of the deltas is (usually) + reversed compared to the QWheelEvent.) + + On MacOS, using the mouse-wheel while holding shift results in horizontal + scrolling. In applications where the scroll dimension does not matter, + it is therefore recommended to use `delta = event['dy'] or event['dx']`. + + * *dx*: the horizontal scroll delta (positive means scroll right). + * *dy*: the vertical scroll delta (positive means scroll down or zoom out). + * *x*: the mouse horizontal position during the scroll. + * *y*: the mouse vertical position during the scroll. + * *buttons*: a tuple of buttons being pressed down. + * *modifiers*: a tuple of modifier keys being pressed down. + * *time_stamp*: a timestamp in seconds. + +All pointer events have the following attributes: + +* *x*: horizontal position of the pointer within the widget. +* *y*: vertical position of the pointer within the widget. +* *button*: the button to which this event applies. See "Mouse buttons" section below for details. +* *buttons*: a tuple of buttons being pressed down (see below) +* *modifiers*: a tuple of modifier keys being pressed down. See section below for details. +* *ntouches*: the number of simultaneous pointers being down. +* *touches*: a dict with int keys (pointer id's), and values that are dicts + that contain "x", "y", and "pressure". +* *time_stamp*: a timestamp in seconds. + +**Mouse buttons:** + +* 0: No button. +* 1: Left button. +* 2: Right button. +* 3: Middle button +* 4-9: etc. + +Key events +~~~~~~~~~~ + +**List of key (keyboard keys) events:** + +* **key_down**: emitted when a key is pressed down. + +* **key_up**: emitted when a key is released. + +Key events have the following attributes: + +* *key*: the key being pressed as a string. See section below for details. +* *modifiers*: a tuple of modifier keys being pressed down. +* *time_stamp*: a timestamp in seconds. + +The key names follow the `browser spec `_. + +* Keys that represent a character are simply denoted as such. For these the case matters: + "a", "A", "z", "Z" "3", "7", "&", " " (space), etc. +* The modifier keys are: + "Shift", "Control", "Alt", "Meta". +* Some example keys that do not represent a character: + "ArrowDown", "ArrowUp", "ArrowLeft", "ArrowRight", "F1", "Backspace", etc. + +Time stamps +~~~~~~~~~~~ + +Since the time origin of ``time_stamp`` values is undefined, +time stamp values only make sense in relation to other time stamps. + +Add canvas event handlers to a Figure +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can add event handlers to a ``Figure`` object's renderer. For example, this is useful for defining click events +where you want to map click positions to the nearest graphic object. See the previous section for a description +of all the canvas events. + +Renderer event handlers can be added using a method or a decorator. + +For example: :: + + import fastplotlib as fpl + import numpy as np + + # generate some circles + def make_circle(center, radius: float, n_points: int = 75) -> np.ndarray: + theta = np.linspace(0, 2 * np.pi, n_points) + xs = radius * np.sin(theta) + ys = radius * np.cos(theta) + + return np.column_stack([xs, ys]) + center + + # this makes 5 circles, so we can create 5 cmap values, so it will use these values to set the + # color of the line based by using the cmap as a LUT with the corresponding cmap_value + circles = list() + for x in range(0, 50, 10): + circles.append(make_circle(center=(x, 0), radius=4, n_points=100)) + + # create figure + fig = fpl.Figure() + + # add circles to plot + circles_graphic = fig[0,0].add_line_collection(data=circles, cmap="tab10", thickness=10) + + # get the nearest graphic that is clicked and change the color + @fig.renderer.add_event_handler("click") + def click_event(ev): + # reset colors + circles_graphic.cmap = "tab10" + + # map the click position to world coordinates + xy = fig[0, 0].map_screen_to_world(ev)[:-1] + + # get the nearest graphic to the position + nearest = fpl.utils.get_nearest_graphics(xy, circles_graphic)[0] + + # change the closest graphic color to white + nearest.colors = "w" + + fig.show() + +.. image:: ../_static/guide_click_event.webp + +Integrating with UI libraries +----------------------------- + +After you are comfortable with creating graphics, changing their properties, and creating events, you can easily integrate +``fastplotlib`` with common UI libraries such as ``ipywidgets``, ``Qt``, and ``imgui``. ``wx`` should also work but this +is not thoroughly tested. + +ipywidgets +^^^^^^^^^^ + +The `ipywidgets `_ library is great for rapidly building UIs for prototyping +in jupyter. It is particularly useful for scientific and engineering applications since we can rapidly create a UI to +interact with our ``fastplotlib`` visualization. The main downside is that it only works in jupyter. + +.. image:: ../_static/guide_ipywidgets.webp + +For examples please see the examples gallery. + +Qt +^^ + +Qt is a very popular UI library written in C++, ``PyQt6`` and ``PySide6`` provide python bindings. There are countless +tutorials on how to build a UI using Qt which you can easily find if you google ``PyQt``. You can embed a ``Figure`` as +a Qt widget within a Qt application. + +For examples please see the examples gallery. + +imgui +^^^^^ + +`Imgui `_ is also a very popular library used for building UIs. The difference +between imgui and ipywidgets, Qt, and wx is the imgui UI can be rendered directly on the same canvas as a fastplotlib +``Figure``. This is hugely advantageous, it means that you can write an imgui UI and it will run on any GUI backend, +i.e. it will work in jupyter, Qt, glfw and wx windows! The programming model is different from Qt and ipywidgets, there +are no callbacks, but it is easy to learn if you see a few examples. + +.. image:: ../_static/guide_imgui.png + +We specifically use `imgui-bundle `_ for the python bindings in fastplotlib. +There is large community and many resources out there on building UIs using imgui. + +To install ``fastplotlib`` with ``imgui`` use the ``imgui`` extras option, i.e. ``pip install fastplotlib[imgui]``, or ``pip install imgui_bundle`` if you've already installed fastplotlib. + +Fastplotlib comes built-in with imgui UIs for subplot toolbars and a standard right-click menu with a number of options. +You can also make custom GUIs and embed them within the canvas, see the examples gallery for detailed examples. + +**Some tips:** + +The ``imgui-bundle`` docs as of March 2025 don't have a nice API list (as far as I know), here is how we go about developing UIs with imgui: + +1. Use the ``pyimgui`` API docs to locate the type of UI element we want, for example if we want a ``slider_int``: https://pyimgui.readthedocs.io/en/latest/reference/imgui.core.html#imgui.core.slider_int + +2. Look at the function signature in the ``imgui-bundle`` sources. You can usually access this easily with your IDE: https://github.com/pthom/imgui_bundle/blob/a5e7d46555832c40e9be277d4747eac5a303dbfc/bindings/imgui_bundle/imgui/__init__.pyi#L1693-L1696 + +3. ``pyimgui`` and ``imgui-bundle`` sometimes don't have the same function signature, so we use a combination of the pyimgui docs and +imgui-bundle function signature to understand and implement the UI element. + +ImageWidget +----------- + +Often times, developing UIs for interacting with multi-dimension image data can be tedious and repetitive. +In order to aid with common image and video visualization requirements the ``ImageWidget`` automatically generates sliders +to easily navigate through different dimensions of your data. The image widget supports 2D, 3D and 4D arrays. + +Let's look at an example: :: + + import fastplotlib as fpl + import imageio.v3 as iio + + movie = iio.imread("imageio:cockatoo.mp4") + + iw_movie = ImageWidget( + data=movie, + rgb=True + ) + + iw_movie.show() + +.. image:: ../_static/guide_image_widget.webp + +Animations +---------- + +An animation function is a user-defined function that gets called on every rendering cycle. Let's look at an example: :: + + import fastplotlib as fpl + import numpy as np + + # generate some data + start, stop = 0, 2 * np.pi + increment = (2 * np.pi) / 50 + + # make a simple sine wave + xs = np.linspace(start, stop, 100) + ys = np.sin(xs) + + figure = fpl.Figure(size=(700, 560)) + + # plot the image data + sine = figure[0, 0].add_line(ys, name="sine", colors="r") + + + # increment along the x-axis on each render loop :D + def update_line(subplot): + global increment, start, stop + xs = np.linspace(start + increment, stop + increment, 100) + ys = np.sin(xs) + + start += increment + stop += increment + + # change only the y-axis values of the line + subplot["sine"].data[:, 1] = ys + + + figure[0, 0].add_animations(update_line) + + figure.show(maintain_aspect=False) + +.. image:: ../_static/guide_animation.webp + +Here we are defining a function that updates the data of the ``LineGraphic`` in the plot with new data. When adding an animation function, the +user-defined function will receive a subplot instance as an argument when it is called. + +Spaces +------ + +There are several spaces to consider when using ``fastplotlib``: + +1) World Space + + World space is the 3D space in which graphical objects live. Objects + and the camera can exist anywhere in this space. + +2) Data Space + + Data space is simply the world space plus any offset or rotation that has been applied to an object. + +.. note:: + World space does not always correspond directly to data space, you may have to adjust for any offset or rotation of the ``Graphic``. + +3) Screen Space + + Screen space is the 2D space in which your screen pixels reside. This space is constrained by the screen width and height in pixels. + In the rendering process, the camera is responsible for projecting the world space into screen space. + +.. note:: + When interacting with ``Graphic`` objects, there is a very helpful function for mapping screen space to world space + (``Figure.map_screen_to_world(pos=(x, y))``). This can be particularly useful when working with click events where click + positions are returned in screen space but ``Graphic`` objects that you may want to interact with exist in world + space. + +For more information on the various spaces used by rendering engines please see this `article `_ + +JupyterLab and IPython +---------------------- + +In ``jupyter lab`` you have the option to embed ``Figures`` in regular output cells, on the side with ``sidecar``, +or show figures in separate Qt windows. Note: Once you have selected a display mode, we do not recommend switching to +a different display mode. Restart the kernel to reliably choose a different display mode. By default, fastplotlib +figures will be embedded in the notebook cell's output. + +The `quickstart example notebook `_ +is also a great place to start. + +Notebooks and remote rendering +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To display the ``Figure`` in the notebook output, the ``fig.show()`` call must be the last line in the code cell. Or +you can use ipython's display call: ``display(fig.show())``. + +To display the figure on the side: ``fig.show(sidecar=True)`` + +You can make use of all `ipywidget layout `_ +options to display multiple figures:: + + from ipywidgets import VBox, HBox + + # stack figures vertically or horizontally + VBox([fig1.show(), fig2.show()]) + +Again the ``VBox([...])`` call must be the last line in the code cell, or you can use ``display(VBox([...]))`` + +You can combine ipywidget layouting just like any other ipywidget:: + + # display a figure on top of two figures laid out horizontally + + VBox([ + fig1.show(), + HBox([fig2.show(), fig3.show()]) + ]) + +Embedded figures will also render if you're using the notebook from a remote computer since rendering is done on the +server side and the client only receives a jpeg stream of rendered frames. This allows you to visualize very large +datasets on remote servers since the rendering is done remotely and you do not transfer any of the raw data to the +client. + +You can create dashboards or webapps with ``fastplotlib`` by running the notebook with +`voila `_. This is great for sharing visualizations of very large datasets +that are too large to share over the internet, and creating fast interactive applications for the analysis of very +large datasets. + +Qt windows in jupyter and IPython +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Qt windows can also be used for displaying fastplotlib figures in an interactive jupyterlab or IPython. You must run +``%gui qt`` **before** importing ``fastplotlib`` (or ``wgpu``). This would typically be done at the very top of your +notebook. + +Note that this only works if you are using jupyterlab or ipython locally, this cannot be used for remote rendering. +You can forward windows (ex: X11 forwarding) but this is much slower than the remote rendering described in the +previous section. diff --git a/docs/source/user_guide/index.rst b/docs/source/user_guide/index.rst new file mode 100644 index 000000000..92f0da98c --- /dev/null +++ b/docs/source/user_guide/index.rst @@ -0,0 +1,11 @@ +User Guide +********** + +.. toctree:: + :caption: User Guide + :maxdepth: 2 + + guide + event_tables + gpu + faq diff --git a/examples/README.rst b/examples/README.rst new file mode 100644 index 000000000..fd8eb8da2 --- /dev/null +++ b/examples/README.rst @@ -0,0 +1,2 @@ +Examples Gallery +**************** diff --git a/examples/controllers/README.rst b/examples/controllers/README.rst new file mode 100644 index 000000000..824087ce3 --- /dev/null +++ b/examples/controllers/README.rst @@ -0,0 +1,2 @@ +Controller examples +=================== diff --git a/examples/controllers/specify_integers.py b/examples/controllers/specify_integers.py new file mode 100644 index 000000000..e74b9dd28 --- /dev/null +++ b/examples/controllers/specify_integers.py @@ -0,0 +1,50 @@ +""" +Specify IDs with integers +========================= + +Specify controllers to sync subplots using integer IDs +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl + + +xs = np.linspace(0, 2 * np.pi, 100) +sine = np.sin(xs) +cosine = np.cos(xs) + +# controller IDs +# one controller is created for each unique ID +# if the IDs are the same, those subplots will be synced +ids = [ + [0, 1], + [2, 0], +] + +figure = fpl.Figure( + shape=(2, 2), + controller_ids=ids, + size=(700, 560), +) + +for subplot, controller_id in zip(figure, np.asarray(ids).ravel()): + subplot.title = f"contr. id: {controller_id}" + +figure[0, 0].add_line(np.column_stack([xs, sine])) + +figure[0, 1].add_line(np.random.rand(100)) +figure[1, 0].add_line(np.random.rand(100)) + +figure[1, 1].add_line(np.column_stack([xs, cosine])) + +figure.show(maintain_aspect=False) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/controllers/specify_names.py b/examples/controllers/specify_names.py new file mode 100644 index 000000000..0023651a7 --- /dev/null +++ b/examples/controllers/specify_names.py @@ -0,0 +1,47 @@ +""" +Specify IDs with subplot names +============================== + +Provide a list of tuples where each tuple has subplot names. The same controller will be used for the subplots +indicated by each of these tuples +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl + + +xs = np.linspace(0, 2 * np.pi, 100) +ys = np.sin(xs) + +# create some subplots names +names = ["subplot_0", "subplot_1", "subplot_2", "subplot_3", "subplot_4", "subplot_5"] + +# list of tuples of subplot names +# subplots within each tuple will use the same controller. +ids = [ + ("subplot_0", "subplot_3"), + ("subplot_1", "subplot_2", "subplot_4"), +] + + +figure = fpl.Figure( + shape=(2, 3), + controller_ids=ids, + names=names, + size=(700, 560), +) + +for subplot in figure: + subplot.add_line(np.column_stack([xs, ys + np.random.normal(scale=0.1, size=100)])) + +figure.show(maintain_aspect=False) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/controllers/sync_all.py b/examples/controllers/sync_all.py new file mode 100644 index 000000000..3a1ee0093 --- /dev/null +++ b/examples/controllers/sync_all.py @@ -0,0 +1,30 @@ +""" +Sync subplots +============= + +Use one controller for all subplots. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl + + +xs = np.linspace(0, 2 * np.pi, 100) +ys = np.sin(xs) + +figure = fpl.Figure(shape=(2, 2), controller_ids="sync", size=(700, 560)) + +for subplot in figure: + subplot.add_line(np.column_stack([xs, ys + np.random.normal(scale=0.5, size=100)])) + +figure.show(maintain_aspect=False) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/data/iris.npy b/examples/data/iris.npy new file mode 100644 index 000000000..052b84bac --- /dev/null +++ b/examples/data/iris.npy @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d225ff4d95359a808b30d2e3e4462dd126f9781a827acb00e832c8a9d4f9cb0 +size 4928 diff --git a/examples/desktop/data/iris.npy b/examples/desktop/data/iris.npy deleted file mode 100644 index a8c7e5ab0..000000000 Binary files a/examples/desktop/data/iris.npy and /dev/null differ diff --git a/examples/desktop/gridplot/gridplot.py b/examples/desktop/gridplot/gridplot.py deleted file mode 100644 index 3acf6a8ba..000000000 --- a/examples/desktop/gridplot/gridplot.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -GridPlot Simple -============ -Example showing simple 2x2 GridPlot with Standard images from imageio. -""" - -# test_example = true - -import fastplotlib as fpl -import imageio.v3 as iio - - -plot = fpl.GridPlot(shape=(2, 2)) -# to force a specific framework such as glfw: -# plot = fpl.GridPlot(canvas="glfw") - -im = iio.imread("imageio:clock.png") -im2 = iio.imread("imageio:astronaut.png") -im3 = iio.imread("imageio:coffee.png") -im4 = iio.imread("imageio:hubble_deep_field.png") - -plot[0, 0].add_image(data=im) -plot[0, 1].add_image(data=im2) -plot[1, 0].add_image(data=im3) -plot[1, 1].add_image(data=im4) - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -for subplot in plot: - subplot.auto_scale() - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/gridplot/gridplot_non_square.py b/examples/desktop/gridplot/gridplot_non_square.py deleted file mode 100644 index a41bcd9f4..000000000 --- a/examples/desktop/gridplot/gridplot_non_square.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -GridPlot Simple -============ -Example showing simple 2x2 GridPlot with Standard images from imageio. -""" - -# test_example = true - -import fastplotlib as fpl -import imageio.v3 as iio - - -plot = fpl.GridPlot(shape=(2, 2), controllers="sync") -# to force a specific framework such as glfw: -# plot = fpl.GridPlot(canvas="glfw") - -im = iio.imread("imageio:clock.png") -im2 = iio.imread("imageio:astronaut.png") -im3 = iio.imread("imageio:coffee.png") - -plot[0, 0].add_image(data=im) -plot[0, 1].add_image(data=im2) -plot[1, 0].add_image(data=im3) - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -for subplot in plot: - subplot.auto_scale() - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/heatmap/__init__.py b/examples/desktop/heatmap/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/desktop/heatmap/heatmap.py b/examples/desktop/heatmap/heatmap.py deleted file mode 100644 index 45c340cbd..000000000 --- a/examples/desktop/heatmap/heatmap.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -Simple Heatmap -============== -Example showing how to plot a heatmap -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -xs = np.linspace(0, 1_000, 10_000) - -sine = np.sin(xs) -cosine = np.cos(xs) - -# alternating sines and cosines -data = np.zeros((10_000, 10_000), dtype=np.float32) -data[::2] = sine -data[1::2] = cosine - -# plot the image data -heatmap_graphic = plot.add_heatmap(data=data, name="heatmap") - -plot.show() - -plot.canvas.set_logical_size(1500, 1500) - -plot.auto_scale() - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/heatmap/heatmap_cmap.py b/examples/desktop/heatmap/heatmap_cmap.py deleted file mode 100644 index afc67f5b8..000000000 --- a/examples/desktop/heatmap/heatmap_cmap.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Heatmap change cmap -=================== -Change the cmap of a heatmap -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -xs = np.linspace(0, 1_000, 10_000) - -sine = np.sin(xs) -cosine = np.cos(xs) - -# alternating sines and cosines -data = np.zeros((10_000, 10_000), dtype=np.float32) -data[::2] = sine -data[1::2] = cosine - -# plot the image data -heatmap_graphic = plot.add_heatmap(data=data, name="heatmap") - -plot.show() - -plot.canvas.set_logical_size(1500, 1500) - -plot.auto_scale() - -heatmap_graphic.cmap = "viridis" - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/heatmap/heatmap_data.py b/examples/desktop/heatmap/heatmap_data.py deleted file mode 100644 index 78e819ab8..000000000 --- a/examples/desktop/heatmap/heatmap_data.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -Heatmap change data -=================== -Change the data of a heatmap -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -xs = np.linspace(0, 1_000, 10_000) - -sine = np.sin(xs) -cosine = np.cos(xs) - -# alternating sines and cosines -data = np.zeros((10_000, 10_000), dtype=np.float32) -data[::2] = sine -data[1::2] = cosine - -# plot the image data -heatmap_graphic = plot.add_heatmap(data=data, name="heatmap") - -plot.show() - -plot.canvas.set_logical_size(1500, 1500) - -plot.auto_scale() - -heatmap_graphic.data[:5_000] = sine -heatmap_graphic.data[5_000:] = cosine - - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/heatmap/heatmap_vmin_vmax.py b/examples/desktop/heatmap/heatmap_vmin_vmax.py deleted file mode 100644 index 7aae1d6d3..000000000 --- a/examples/desktop/heatmap/heatmap_vmin_vmax.py +++ /dev/null @@ -1,40 +0,0 @@ -""" -Heatmap change vmin vmax -======================== -Change the vmin vmax of a heatmap -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -xs = np.linspace(0, 1_000, 10_000) - -sine = np.sin(xs) -cosine = np.cos(xs) - -# alternating sines and cosines -data = np.zeros((10_000, 10_000), dtype=np.float32) -data[::2] = sine -data[1::2] = cosine - -# plot the image data -heatmap_graphic = plot.add_heatmap(data=data, name="heatmap") - -plot.show() - -plot.canvas.set_logical_size(1500, 1500) - -plot.auto_scale() - -heatmap_graphic.cmap.vmin = -0.5 -heatmap_graphic.cmap.vmax = 0.5 - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/image/__init__.py b/examples/desktop/image/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/desktop/image/image_cmap.py b/examples/desktop/image/image_cmap.py deleted file mode 100644 index 9a9f0d497..000000000 --- a/examples/desktop/image/image_cmap.py +++ /dev/null @@ -1,31 +0,0 @@ -""" -Simple Plot -============ -Example showing simple plot creation and subsequent cmap change with Standard image from imageio. -""" -# test_example = true - -import fastplotlib as fpl -import imageio.v3 as iio - - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -im = iio.imread("imageio:camera.png") - -# plot the image data -image_graphic = plot.add_image(data=im, name="random-image") - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - -image_graphic.cmap = "viridis" - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/image/image_rgb.py b/examples/desktop/image/image_rgb.py deleted file mode 100644 index f73077acf..000000000 --- a/examples/desktop/image/image_rgb.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -Simple Plot -============ -Example showing the simple plot creation with 512 x 512 2D RGB image. -""" -# test_example = true - -import fastplotlib as fpl -import imageio.v3 as iio - - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -im = iio.imread("imageio:astronaut.png") - -# plot the image data -image_graphic = plot.add_image(data=im, name="iio astronaut") - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/image/image_rgbvminvmax.py b/examples/desktop/image/image_rgbvminvmax.py deleted file mode 100644 index 4891c5614..000000000 --- a/examples/desktop/image/image_rgbvminvmax.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -Simple Plot -============ -Example showing the simple plot followed by changing the vmin/vmax with 512 x 512 2D RGB image. -""" -# test_example = true - -import fastplotlib as fpl -import imageio.v3 as iio - - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -im = iio.imread("imageio:astronaut.png") - -# plot the image data -image_graphic = plot.add_image(data=im, name="iio astronaut") - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - -image_graphic.cmap.vmin = 0.5 -image_graphic.cmap.vmax = 0.75 - - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/image/image_simple.py b/examples/desktop/image/image_simple.py deleted file mode 100644 index 2d273ad68..000000000 --- a/examples/desktop/image/image_simple.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -Simple Plot -============ -Example showing the simple plot creation with Standard imageio image. -""" - -# test_example = true - -import fastplotlib as fpl -import imageio.v3 as iio - - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -data = iio.imread("imageio:camera.png") - -# plot the image data -image_graphic = plot.add_image(data=data, name="iio camera") - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/image/image_vminvmax.py b/examples/desktop/image/image_vminvmax.py deleted file mode 100644 index ae5d102fa..000000000 --- a/examples/desktop/image/image_vminvmax.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -Simple Plot -============ -Example showing the simple plot creation followed by changing the vmin/vmax with Standard imageio image. -""" -# test_example = true - -import fastplotlib as fpl -import imageio.v3 as iio - - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -data = iio.imread("imageio:astronaut.png") - -# plot the image data -image_graphic = plot.add_image(data=data, name="iio astronaut") - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - -image_graphic.cmap.vmin = 0.5 -image_graphic.cmap.vmax = 0.75 - - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/line/__init__.py b/examples/desktop/line/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/desktop/line/line_cmap.py b/examples/desktop/line/line_cmap.py deleted file mode 100644 index b196132ed..000000000 --- a/examples/desktop/line/line_cmap.py +++ /dev/null @@ -1,49 +0,0 @@ -""" -Line Plot -============ -Example showing cosine, sine, sinc lines. -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np - - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -xs = np.linspace(-10, 10, 100) -# sine wave -ys = np.sin(xs) -sine = np.dstack([xs, ys])[0] - -# cosine wave -ys = np.cos(xs) - 5 -cosine = np.dstack([xs, ys])[0] - -# cmap_values from an array, so the colors on the sine line will be based on the sine y-values -sine_graphic = plot.add_line( - data=sine, - thickness=10, - cmap="plasma", - cmap_values=sine[:, 1] -) - -# qualitative colormaps, useful for cluster labels or other types of categorical labels -cmap_values = [0] * 25 + [5] * 10 + [1] * 35 + [2] * 30 -cosine_graphic = plot.add_line( - data=cosine, - thickness=10, - cmap="tab10", - cmap_values=cmap_values -) - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/line/line_colorslice.py b/examples/desktop/line/line_colorslice.py deleted file mode 100644 index f2aca8125..000000000 --- a/examples/desktop/line/line_colorslice.py +++ /dev/null @@ -1,68 +0,0 @@ -""" -Line Plot -============ -Example showing color slicing with cosine, sine, sinc lines. -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np - - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -xs = np.linspace(-10, 10, 100) -# sine wave -ys = np.sin(xs) -sine = np.dstack([xs, ys])[0] - -# cosine wave -ys = np.cos(xs) + 5 -cosine = np.dstack([xs, ys])[0] - -# sinc function -a = 0.5 -ys = np.sinc(xs) * 3 + 8 -sinc = np.dstack([xs, ys])[0] - -sine_graphic = plot.add_line(data=sine, thickness=5, colors="magenta") - -# you can also use colormaps for lines! -cosine_graphic = plot.add_line(data=cosine, thickness=12, cmap="autumn") - -# or a list of colors for each datapoint -colors = ["r"] * 25 + ["purple"] * 25 + ["y"] * 25 + ["b"] * 25 -sinc_graphic = plot.add_line(data=sinc, thickness=5, colors=colors) - -plot.show() - -# indexing of colors -cosine_graphic.colors[:15] = "magenta" -cosine_graphic.colors[90:] = "red" -cosine_graphic.colors[60] = "w" - -# indexing to assign colormaps to entire lines or segments -sinc_graphic.cmap[10:50] = "gray" -sine_graphic.cmap = "seismic" - -# more complex indexing, set the blue value directly from an array -cosine_graphic.colors[65:90, 0] = np.linspace(0, 1, 90-65) - -# additional fancy indexing using numpy -key = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 67, 19]) -sinc_graphic.colors[key] = "Red" - -key2 = np.array([True, False, True, False, True, True, True, True]) -cosine_graphic.colors[key2] = "Green" - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/line/line_present_scaling.py b/examples/desktop/line/line_present_scaling.py deleted file mode 100644 index 327186c16..000000000 --- a/examples/desktop/line/line_present_scaling.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -Line Plot -============ -Example showing present and scaling feature for lines. -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np - - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -xs = np.linspace(-10, 10, 100) -# sine wave -ys = np.sin(xs) -sine = np.dstack([xs, ys])[0] - -# cosine wave -ys = np.cos(xs) + 5 -cosine = np.dstack([xs, ys])[0] - -# sinc function -a = 0.5 -ys = np.sinc(xs) * 3 + 8 -sinc = np.dstack([xs, ys])[0] - -sine_graphic = plot.add_line(data=sine, thickness=5, colors="magenta") - -# you can also use colormaps for lines! -cosine_graphic = plot.add_line(data=cosine, thickness=12, cmap="autumn") - -# or a list of colors for each datapoint -colors = ["r"] * 25 + ["purple"] * 25 + ["y"] * 25 + ["b"] * 25 -sinc_graphic = plot.add_line(data=sinc, thickness=5, colors=colors) - -plot.show() - -sinc_graphic.present = False - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/line_collection/__init__.py b/examples/desktop/line_collection/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/desktop/line_collection/line_stack.py b/examples/desktop/line_collection/line_stack.py deleted file mode 100644 index 5a94caee7..000000000 --- a/examples/desktop/line_collection/line_stack.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -Line Plot -============ -Example showing how to plot line collections -""" - -# test_example = true - -import numpy as np -import fastplotlib as fpl - - -xs = np.linspace(0, 100, 1000) -# sine wave -ys = np.sin(xs) * 20 - -# make 25 lines -data = np.vstack([ys] * 25) - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -# line stack takes all the same arguments as line collection and behaves similarly -plot.add_line_stack(data, cmap="jet") - -plot.show(maintain_aspect=False) - -plot.canvas.set_logical_size(900, 600) - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/scatter/__init__.py b/examples/desktop/scatter/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/desktop/scatter/scatter.py b/examples/desktop/scatter/scatter.py deleted file mode 100644 index 778f37deb..000000000 --- a/examples/desktop/scatter/scatter.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -Scatter Plot -============ -Example showing scatter plot. -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np -from pathlib import Path - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -data_path = Path(__file__).parent.parent.joinpath("data", "iris.npy") -data = np.load(data_path) - -n_points = 50 -colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points - -scatter_graphic = plot.add_scatter(data=data[:, :-1], sizes=6, alpha=0.7, colors=colors) - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/scatter/scatter_cmap.py b/examples/desktop/scatter/scatter_cmap.py deleted file mode 100644 index edc55a4b1..000000000 --- a/examples/desktop/scatter/scatter_cmap.py +++ /dev/null @@ -1,47 +0,0 @@ -""" -Scatter Plot -============ -Example showing cmap change for scatter plot. -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np -from pathlib import Path -from sklearn.cluster import AgglomerativeClustering - - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -data_path = Path(__file__).parent.parent.joinpath("data", "iris.npy") -data = np.load(data_path) - - -agg = AgglomerativeClustering(n_clusters=3) - -agg.fit_predict(data) - - -scatter_graphic = plot.add_scatter( - data=data[:, :-1], - sizes=15, - alpha=0.7, - cmap="Set1", - cmap_values=agg.labels_ -) - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - -scatter_graphic.cmap = "tab10" - - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/scatter/scatter_colorslice.py b/examples/desktop/scatter/scatter_colorslice.py deleted file mode 100644 index d752cacbd..000000000 --- a/examples/desktop/scatter/scatter_colorslice.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Scatter Plot -============ -Example showing color slice for scatter plot. -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np -from pathlib import Path - - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") - -data_path = Path(__file__).parent.parent.joinpath("data", "iris.npy") -data = np.load(data_path) - -n_points = 50 -colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points - -scatter_graphic = plot.add_scatter(data=data[:, :-1], sizes=6, alpha=0.7, colors=colors) - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - -scatter_graphic.colors[0:75] = "red" -scatter_graphic.colors[75:150] = "white" -scatter_graphic.colors[::2] = "blue" - - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/scatter/scatter_present.py b/examples/desktop/scatter/scatter_present.py deleted file mode 100644 index ad4be837f..000000000 --- a/examples/desktop/scatter/scatter_present.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -Scatter Plot -============ -Example showing present feature for scatter plot. -""" - -# test_example = true - -import fastplotlib as fpl -import numpy as np -from pathlib import Path - - -plot = fpl.Plot() - -data_path = Path(__file__).parent.parent.joinpath("data", "iris.npy") -data = np.load(data_path) - -n_points = 50 -colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points - -scatter_graphic = plot.add_scatter(data=data[:, :-1], sizes=6, alpha=0.7, colors=colors) - -colors = ["red"] * n_points + ["white"] * n_points + ["blue"] * n_points -scatter_graphic2 = plot.add_scatter(data=data[:, 1:], sizes=6, alpha=0.7, colors=colors) - -plot.show() - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() - -scatter_graphic.present = False - - -if __name__ == "__main__": - print(__doc__) - fpl.run() diff --git a/examples/desktop/scatter/scatter_size.py b/examples/desktop/scatter/scatter_size.py deleted file mode 100644 index 5b6987b7c..000000000 --- a/examples/desktop/scatter/scatter_size.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -Scatter Plot -============ -Example showing point size change for scatter plot. -""" - -# test_example = true -import numpy as np -import fastplotlib as fpl - -# grid with 2 rows and 3 columns -grid_shape = (2,1) - -# pan-zoom controllers for each view -# views are synced if they have the -# same controller ID -controllers = [ - [0], - [0] -] - - -# you can give string names for each subplot within the gridplot -names = [ - ["scalar_size"], - ["array_size"] -] - -# Create the grid plot -plot = fpl.GridPlot( - shape=grid_shape, - controllers=controllers, - names=names, - size=(1000, 1000) -) - -# get y_values using sin function -angles = np.arange(0, 20*np.pi+0.001, np.pi / 20) -y_values = 30*np.sin(angles) # 1 thousand points -x_values = np.array([x for x in range(len(y_values))], dtype=np.float32) - -data = np.column_stack([x_values, y_values]) - -plot["scalar_size"].add_scatter(data=data, sizes=5, colors="blue") # add a set of scalar sizes - -non_scalar_sizes = np.abs((y_values / np.pi)) # ensure minimum size of 5 -plot["array_size"].add_scatter(data=data, sizes=non_scalar_sizes, colors="red") - -for graph in plot: - graph.auto_scale(maintain_aspect=True) - -plot.show() - -if __name__ == "__main__": - print(__doc__) - fpl.run() \ No newline at end of file diff --git a/examples/desktop/screenshots/gridplot.png b/examples/desktop/screenshots/gridplot.png deleted file mode 100644 index f2cbb1e7a..000000000 --- a/examples/desktop/screenshots/gridplot.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2705c69adab84f7740322b4a66ce33df00001dc7d51624becb8e88204113b028 -size 350236 diff --git a/examples/desktop/screenshots/gridplot_non_square.png b/examples/desktop/screenshots/gridplot_non_square.png deleted file mode 100644 index 7b534aef9..000000000 --- a/examples/desktop/screenshots/gridplot_non_square.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:abf936904d1b5e2018a72311c510108925f2972dfdf59166580ad27876f9e2be -size 220140 diff --git a/examples/desktop/screenshots/heatmap.png b/examples/desktop/screenshots/heatmap.png deleted file mode 100644 index d0df1510a..000000000 --- a/examples/desktop/screenshots/heatmap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6c19d6454e79d92074bac01175dfbb8506e882ea55b626c0b2357960ed6e294f -size 163655 diff --git a/examples/desktop/screenshots/heatmap_cmap.png b/examples/desktop/screenshots/heatmap_cmap.png deleted file mode 100644 index db3038dee..000000000 --- a/examples/desktop/screenshots/heatmap_cmap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0328eec32f13042e3e2f243793317e180bba1353fe961604ecad3f38463b8809 -size 156419 diff --git a/examples/desktop/screenshots/heatmap_data.png b/examples/desktop/screenshots/heatmap_data.png deleted file mode 100644 index 96169ec77..000000000 --- a/examples/desktop/screenshots/heatmap_data.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4a376c24fa123088be69f807ec5212cb5ed5680b146ce9d62df584790c632845 -size 20838 diff --git a/examples/desktop/screenshots/heatmap_vmin_vmax.png b/examples/desktop/screenshots/heatmap_vmin_vmax.png deleted file mode 100644 index 2a809d545..000000000 --- a/examples/desktop/screenshots/heatmap_vmin_vmax.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3eb12ad590aa8260f2cf722abadf5b51bcb7d5a8d8d1cb05b7711b50331da07a -size 165937 diff --git a/examples/desktop/screenshots/image_cmap.png b/examples/desktop/screenshots/image_cmap.png deleted file mode 100644 index cf3ae8ac0..000000000 --- a/examples/desktop/screenshots/image_cmap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d9dcf05ca2953103b9960d9159ccb89dc257bf5e5c6d3906eeaaac9f71686439 -size 274882 diff --git a/examples/desktop/screenshots/image_rgb.png b/examples/desktop/screenshots/image_rgb.png deleted file mode 100644 index 5681017c8..000000000 --- a/examples/desktop/screenshots/image_rgb.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:408e31db97278c584f4aaa0039099366fc8feb5693d15ab335205927d067c42a -size 319585 diff --git a/examples/desktop/screenshots/image_rgbvminvmax.png b/examples/desktop/screenshots/image_rgbvminvmax.png deleted file mode 100644 index aea5fdf85..000000000 --- a/examples/desktop/screenshots/image_rgbvminvmax.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d5dbe9a837b3503ca45eb83edbec7b1d7b6463093699af6b01b5303978af4b85 -size 44781 diff --git a/examples/desktop/screenshots/image_simple.png b/examples/desktop/screenshots/image_simple.png deleted file mode 100644 index 5ab073433..000000000 --- a/examples/desktop/screenshots/image_simple.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4aa397a120ed1b232c4d56ffd3547ea42c2874aa54bfbdbffebfd34129059ccd -size 272355 diff --git a/examples/desktop/screenshots/image_vminvmax.png b/examples/desktop/screenshots/image_vminvmax.png deleted file mode 100644 index aea5fdf85..000000000 --- a/examples/desktop/screenshots/image_vminvmax.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d5dbe9a837b3503ca45eb83edbec7b1d7b6463093699af6b01b5303978af4b85 -size 44781 diff --git a/examples/desktop/screenshots/line.png b/examples/desktop/screenshots/line.png deleted file mode 100644 index a38008ab9..000000000 --- a/examples/desktop/screenshots/line.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1fe996cd43013ff2e616e8a549933137529c13ad8e320331420e9c64f6ed1690 -size 49738 diff --git a/examples/desktop/screenshots/line_cmap.png b/examples/desktop/screenshots/line_cmap.png deleted file mode 100644 index 0ece6fbde..000000000 --- a/examples/desktop/screenshots/line_cmap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c6f511ffd3a10e2c653afd3b9eca8f6bb10af26759a7efc73fe16c825cc1bf15 -size 43718 diff --git a/examples/desktop/screenshots/line_collection.png b/examples/desktop/screenshots/line_collection.png deleted file mode 100644 index f7be75201..000000000 --- a/examples/desktop/screenshots/line_collection.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4aa71b9b8d2c049dad951493a5f51c32da33a3e536761254cd18368d6b8cd8e8 -size 146755 diff --git a/examples/desktop/screenshots/line_collection_cmap_values.png b/examples/desktop/screenshots/line_collection_cmap_values.png deleted file mode 100644 index a91e4ce69..000000000 --- a/examples/desktop/screenshots/line_collection_cmap_values.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a32210432cd8e88bec20a84b1e6839d0a2d5bb2edb1aea8ebe09569872cb16d8 -size 93580 diff --git a/examples/desktop/screenshots/line_collection_cmap_values_qualitative.png b/examples/desktop/screenshots/line_collection_cmap_values_qualitative.png deleted file mode 100644 index c38e5fb96..000000000 --- a/examples/desktop/screenshots/line_collection_cmap_values_qualitative.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5be6f9343b47848d3e1be4b82315f0b71bdb1b919503f943c618ef8ba7f6272a -size 95656 diff --git a/examples/desktop/screenshots/line_collection_colors.png b/examples/desktop/screenshots/line_collection_colors.png deleted file mode 100644 index 1ae597033..000000000 --- a/examples/desktop/screenshots/line_collection_colors.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b1e5b913ca91293a8edb8f6898249dd62019cb827223dacf377e3fc6cda89a77 -size 82686 diff --git a/examples/desktop/screenshots/line_colorslice.png b/examples/desktop/screenshots/line_colorslice.png deleted file mode 100644 index 003f86e44..000000000 --- a/examples/desktop/screenshots/line_colorslice.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0033fc23cda3f07cdd7db642d4d1af710319d56a1690339354a9df27bf51c381 -size 57146 diff --git a/examples/desktop/screenshots/line_dataslice.png b/examples/desktop/screenshots/line_dataslice.png deleted file mode 100644 index 20c777212..000000000 --- a/examples/desktop/screenshots/line_dataslice.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2a169b359a0e56bb48a625069e73e53b26e061e6bcb83d6eb613fbdd1a43cdac -size 75385 diff --git a/examples/desktop/screenshots/line_present_scaling.png b/examples/desktop/screenshots/line_present_scaling.png deleted file mode 100644 index c4a41ac2e..000000000 --- a/examples/desktop/screenshots/line_present_scaling.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c67d65b0a5120c014b34dcfc326079113cee22b849c14a0284fc7881dac5d43c -size 43446 diff --git a/examples/desktop/screenshots/line_stack.png b/examples/desktop/screenshots/line_stack.png deleted file mode 100644 index 23343df32..000000000 --- a/examples/desktop/screenshots/line_stack.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bc2496c203b2994ef5b8e714e1c7619e726d0b605e0c25498f11e1154d4905ec -size 360981 diff --git a/examples/desktop/screenshots/scatter.png b/examples/desktop/screenshots/scatter.png deleted file mode 100644 index e35fd9e3c..000000000 --- a/examples/desktop/screenshots/scatter.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e2efb81fb8b6b11bb1fc3136394c0f6bf1c38972d03dabd07949928f4e53cf71 -size 25240 diff --git a/examples/desktop/screenshots/scatter_cmap.png b/examples/desktop/screenshots/scatter_cmap.png deleted file mode 100644 index 10477e81b..000000000 --- a/examples/desktop/screenshots/scatter_cmap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8b4b364d1cd3ab328f025030db87f8ff4fb2544c3bfb67176ea8f0acdc24f04b -size 59407 diff --git a/examples/desktop/screenshots/scatter_colorslice.png b/examples/desktop/screenshots/scatter_colorslice.png deleted file mode 100644 index cd5a1f00d..000000000 --- a/examples/desktop/screenshots/scatter_colorslice.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0d3afcf293e425c2369d93745cb933afb15d971866620f160629e394f50cd9b6 -size 23747 diff --git a/examples/desktop/screenshots/scatter_dataslice.png b/examples/desktop/screenshots/scatter_dataslice.png deleted file mode 100644 index 8ed7ad590..000000000 --- a/examples/desktop/screenshots/scatter_dataslice.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:974111967bc5e4197b6b38c7a00950ee013ce4e689162c9d91e902d37240221a -size 26001 diff --git a/examples/desktop/screenshots/scatter_present.png b/examples/desktop/screenshots/scatter_present.png deleted file mode 100644 index 335191d91..000000000 --- a/examples/desktop/screenshots/scatter_present.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fb5b0bf6fb7b7dbfafc1b2553dfff87f329ec5070fb69061313acce46364df52 -size 24627 diff --git a/examples/desktop/screenshots/scatter_size.png b/examples/desktop/screenshots/scatter_size.png deleted file mode 100644 index 1d0f91f9c..000000000 --- a/examples/desktop/screenshots/scatter_size.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3eb05d8a18aada52a6ab02a0d3d030aab97510aace226cf3967e5c5c1cd3274d -size 66044 diff --git a/examples/events/README.rst b/examples/events/README.rst new file mode 100644 index 000000000..8e2deca4b --- /dev/null +++ b/examples/events/README.rst @@ -0,0 +1,4 @@ +Events +====== + +Several examples using events \ No newline at end of file diff --git a/examples/events/cmap_event.py b/examples/events/cmap_event.py new file mode 100644 index 000000000..62913cb29 --- /dev/null +++ b/examples/events/cmap_event.py @@ -0,0 +1,75 @@ +""" +cmap event +========== + +Add a cmap event handler to multiple graphics. When any one graphic changes the cmap, the cmap of all other graphics +is also changed. + +This also shows how bidirectional events are supported. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl +import imageio.v3 as iio + +# load images +img1 = iio.imread("imageio:camera.png") +img2 = iio.imread("imageio:moon.png") + +# Create a figure +figure = fpl.Figure( + shape=(2, 2), + size=(700, 560), + names=["camera", "moon", "sine", "cloud"], +) + +# create graphics +figure["camera"].add_image(img1) +figure["moon"].add_image(img2) + +# sine wave +xs = np.linspace(0, 4 * np.pi, 100) +ys = np.sin(xs) + +figure["sine"].add_line(np.column_stack([xs, ys])) + +# make a 2D gaussian cloud +cloud_data = np.random.normal(0, scale=3, size=1000).reshape(500, 2) +figure["cloud"].add_scatter( + cloud_data, + sizes=3, + cmap="plasma", + cmap_transform=np.linalg.norm(cloud_data, axis=1) # cmap transform using distance from origin +) +figure["cloud"].axes.intersection = (0, 0, 0) + +# show the plot +figure.show() + + +# event handler to change the cmap of all graphics when the cmap of any one graphic changes +def cmap_changed(ev: fpl.GraphicFeatureEvent): + # get the new cmap + new_cmap = ev.info["value"] + + # set cmap of the graphics in the other subplots + for subplot in figure: + subplot.graphics[0].cmap = new_cmap + + +for subplot in figure: + # add event handler to the graphic added to each subplot + subplot.graphics[0].add_event_handler(cmap_changed, "cmap") + + +# change the cmap of graphic image, triggers all other graphics to set the cmap +figure["camera"].graphics[0].cmap = "jet" + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/events/drag_points.py b/examples/events/drag_points.py new file mode 100644 index 000000000..752430c7c --- /dev/null +++ b/examples/events/drag_points.py @@ -0,0 +1,99 @@ +""" +Drag points +=========== + +Example where you can drag scatter points on a line. This example also demonstrates how you can use a shared buffer +between two graphics to represent the same data using different graphics. When you update the data of one graphic the +data of the other graphic is also changed simultaneously since they use the same underlying buffer on the GPU. + +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl +import pygfx + +xs = np.linspace(0, 2 * np.pi, 10) +ys = np.sin(xs) + +data = np.column_stack([xs, ys]) + +figure = fpl.Figure(size=(700, 560)) + +# add a line +line_graphic = figure[0, 0].add_line(data) + +# add a scatter, share the line graphic buffer! +scatter_graphic = figure[0, 0].add_scatter(data=line_graphic.data, sizes=25, colors="r") + +is_moving = False +vertex_index = None + + +@scatter_graphic.add_event_handler("pointer_down") +def start_drag(ev: pygfx.PointerEvent): + global is_moving + global vertex_index + + if ev.button != 1: + return + + is_moving = True + vertex_index = ev.pick_info["vertex_index"] + scatter_graphic.colors[vertex_index] = "cyan" + + +@figure.renderer.add_event_handler("pointer_move") +def move_point(ev): + global is_moving + global vertex_index + + # if not moving, return + if not is_moving: + return + + # disable controller + figure[0, 0].controller.enabled = False + + # map x, y from screen space to world space + pos = figure[0, 0].map_screen_to_world(ev) + + if pos is None: + # end movement + is_moving = False + scatter_graphic.colors[vertex_index] = "r" # reset color + vertex_index = None + return + + # change scatter data + # since we are sharing the buffer, the line data will also change + scatter_graphic.data[vertex_index, :-1] = pos[:-1] + + # re-enable controller + figure[0, 0].controller.enabled = True + + +@figure.renderer.add_event_handler("pointer_up") +def end_drag(ev: pygfx.PointerEvent): + global is_moving + global vertex_index + + # end movement + if is_moving: + # reset color + scatter_graphic.colors[vertex_index] = "r" + + is_moving = False + vertex_index = None + + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/events/image_click.py b/examples/events/image_click.py new file mode 100644 index 000000000..729a67586 --- /dev/null +++ b/examples/events/image_click.py @@ -0,0 +1,44 @@ +""" +Image click event +================= + +Example showing how to use a click event on an image. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import pygfx +import imageio.v3 as iio + +data = iio.imread("imageio:camera.png") + +# Create a figure +figure = fpl.Figure(size=(700, 560)) + +# create image graphic +image_graphic = figure[0, 0].add_image(data=data) + +# show the plot +figure.show() + + +# adding a click event, we can also use decorators to add event handlers +@image_graphic.add_event_handler("click") +def click_event(ev: pygfx.PointerEvent): + # get the click location in screen coordinates + xy = (ev.x, ev.y) + + # map the screen coordinates to world coordinates + xy = figure[0, 0].map_screen_to_world(xy)[:-1] + + # print the click location + print(xy) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/events/image_data_event.py b/examples/events/image_data_event.py new file mode 100644 index 000000000..f97b1115e --- /dev/null +++ b/examples/events/image_data_event.py @@ -0,0 +1,56 @@ +""" +Image data event +================ + +Example showing how to add an event handler to an ImageGraphic to capture when the data changes. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import imageio.v3 as iio +from scipy.ndimage import gaussian_filter + +rgb_weights = [0.299, 0.587, 0.114] + +# load images, convert to grayscale +img1 = iio.imread("imageio:wikkie.png") @ rgb_weights +img2 = iio.imread("imageio:astronaut.png") @ rgb_weights + +# Create a figure +figure = fpl.Figure( + shape=(1, 2), + size=(700, 560), + names=["image", "gaussian filtered image"] +) + +# create image graphics +image_raw = figure[0, 0].add_image(img1) +image_filt = figure[0, 1].add_image(gaussian_filter(img1, sigma=5)) + +# show the plot +figure.show() + + +# add event handler +@image_raw.add_event_handler("data") +def data_changed(ev: fpl.GraphicFeatureEvent): + # get the new image data + new_img = ev.info["value"] + + # set the filtered image graphic + image_filt.data = gaussian_filter(new_img, sigma=5) + + +# set the data on the first image graphic +# this will trigger the `data_changed()` handler to be called +image_raw.data = img2 + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() + diff --git a/examples/events/key_events.py b/examples/events/key_events.py new file mode 100644 index 000000000..f8cf2f3df --- /dev/null +++ b/examples/events/key_events.py @@ -0,0 +1,85 @@ +""" +Key Events +========== + +Move an image around using and change some of its properties using keyboard events. + +- Use the arrows keys to move the image by changing its offset + +- Press "v", "g", "p" to change the colormaps (viridis, grey, plasma). + +- Press "r" to rotate the image +18 degrees (pi / 10 radians) +- Press "Shift + R" to rotate the image -18 degrees +- Axis of rotation is the origin + +- Press "-", "=" to decrease/increase the vmin +- Press "_", "+" to decrease/increase the vmax + +We use the ImageWidget here because the histogram LUT tool makes it easy to see the changes in vmin and vmax. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl +import pygfx +import imageio.v3 as iio + +data = iio.imread("imageio:camera.png") + +iw = fpl.ImageWidget(data, figure_kwargs={"size": (700, 560)}) + +image = iw.managed_graphics[0] + + +@iw.figure.renderer.add_event_handler("key_down") +def handle_event(ev: pygfx.KeyboardEvent): + match ev.key: + # change the cmap + case "v": + image.cmap = "viridis" + case "g": + image.cmap = "grey" + case "p": + image.cmap = "plasma" + + # keys to change vmin/vmax + case "-": + image.vmin -= 1 + case "=": + image.vmin += 1 + case "_": + image.vmax -= 1 + case "+": + image.vmax += 1 + + # rotate + case "r": + image.rotate(np.pi / 10, axis="z") + case "R": + image.rotate(-np.pi / 10, axis="z") + + # arrow key events to move the image + case "ArrowUp": + image.offset = image.offset + [0, -10, 0] # remember y-axis is flipped for images + case "ArrowDown": + image.offset = image.offset + [0, 10, 0] + case "ArrowLeft": + image.offset = image.offset + [-10, 0, 0] + case "ArrowRight": + image.offset = image.offset + [10, 0, 0] + + +iw.show() + + +figure = iw.figure # ignore, this is just so the docs gallery scraper picks up the figure + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() + diff --git a/examples/events/line_data_thickness_event.py b/examples/events/line_data_thickness_event.py new file mode 100644 index 000000000..83f9322cb --- /dev/null +++ b/examples/events/line_data_thickness_event.py @@ -0,0 +1,79 @@ +""" +Events line data thickness +========================== + +Simple example of adding event handlers for line data and thickness. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np + +figure = fpl.Figure(size=(700, 560)) + +xs = np.linspace(0, 4 * np.pi, 100) +# sine wave +ys = np.sin(xs) +sine = np.column_stack([xs, ys]) + +# cosine wave +ys = np.cos(xs) +cosine = np.column_stack([xs, ys]) + +# create line graphics +sine_graphic = figure[0, 0].add_line(data=sine) +cosine_graphic = figure[0, 0].add_line(data=cosine, offset=(0, 4, 0)) + +# make a list of the line graphics for convenience +lines = [sine_graphic, cosine_graphic] + + +def change_thickness(ev: fpl.GraphicFeatureEvent): + # sets thickness of all the lines + new_value = ev.info["value"] + + for g in lines: + g.thickness = new_value + + +def change_data(ev: fpl.GraphicFeatureEvent): + # sets data of all the lines using the given event and value from the event + + # the user's slice/index + # This can be a single int index, a slice, + # or even a numpy array of int or bool for fancy indexing! + indices = ev.info["key"] + + # the new values to set at the given indices + new_values = ev.info["value"] + + # set the data for all the lines + for g in lines: + g.data[indices] = new_values + + +# add the event handlers to the line graphics +for g in lines: + g.add_event_handler(change_thickness, "thickness") + g.add_event_handler(change_data, "data") + + +figure.show() +figure[0, 0].axes.intersection = (0, 0, 0) + +# set the y-value of the middle 40 points of the sine graphic to 1 +# after the sine_graphic sets its data, the event handlers will be called +# and therefore the cosine graphic will also set its data using the event data +sine_graphic.data[30:70, 1] = np.ones(40) + +# set the thickness of the cosine graphic, this will trigger an event +# that causes the sine graphic's thickness to also be set from this value +cosine_graphic.thickness = 10 + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/events/lines_mouse_nearest.py b/examples/events/lines_mouse_nearest.py new file mode 100644 index 000000000..8d38e9f53 --- /dev/null +++ b/examples/events/lines_mouse_nearest.py @@ -0,0 +1,62 @@ +""" +Highlight nearest circle +======================== + +Shows how to use the "pointer_move" event to get the nearest circle and highlight it. + +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +from itertools import product +import numpy as np +import fastplotlib as fpl +import pygfx + + +def make_circle(center, radius: float, n_points: int) -> np.ndarray: + theta = np.linspace(0, 2 * np.pi, n_points) + xs = radius * np.cos(theta) + ys = radius * np.sin(theta) + + return np.column_stack([xs, ys]) + center + +spatial_dims = (100, 100) + +circles = list() +for center in product(range(0, spatial_dims[0], 15), range(0, spatial_dims[1], 15)): + circles.append(make_circle(center, 5, n_points=75)) + +pos_xy = np.vstack(circles) + +figure = fpl.Figure(size=(700, 560)) + +line_collection = figure[0, 0].add_line_collection(circles, colors="w", thickness=5) + + +@figure.renderer.add_event_handler("pointer_move") +def highlight_nearest(ev: pygfx.PointerEvent): + line_collection.colors = "w" + + pos = figure[0, 0].map_screen_to_world(ev) + if pos is None: + return + + # get_nearest_graphics() is a helper function + # sorted the passed array or collection of graphics from nearest to furthest from the passed `pos` + nearest = fpl.utils.get_nearest_graphics(pos, line_collection)[0] + + nearest.colors = "r" + + +# remove clutter +figure[0, 0].axes.visible = False + +figure.show() + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/events/paint_image.py b/examples/events/paint_image.py new file mode 100644 index 000000000..46ef43114 --- /dev/null +++ b/examples/events/paint_image.py @@ -0,0 +1,71 @@ +""" +Paint an Image +============== + +Click and drag the mouse to paint in the image +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl +import pygfx + +figure = fpl.Figure(size=(700, 560)) + +# add a blank image +image = figure[0, 0].add_image(np.zeros((100, 100)), vmin=0, vmax=255) + +painting = False # use to toggle painting state + + +@image.add_event_handler("pointer_down") +def on_pointer_down(ev: pygfx.PointerEvent): + # start painting when mouse button is down + global painting + + # get image element index, (x, y) pos corresponds to array (column, row) + col, row = ev.pick_info["index"] + + # increase value of this image element + image.data[row, col] = np.clip(image.data[row, col] + 50, 0, 255) + + # toggle on painting state + painting = True + + # disable controller until painting stops when mouse button is un-clicked + figure[0, 0].controller.enabled = False + + +@image.add_event_handler("pointer_move") +def on_pointer_move(ev: pygfx.PointerEvent): + # continue painting when mouse pointer is moved + global painting + + if not painting: + return + + # get image element index, (x, y) pos corresponds to array (column, row) + col, row = ev.pick_info["index"] + + image.data[row, col] = np.clip(image.data[row, col] + 50, 0, 255) + + +@figure.renderer.add_event_handler("pointer_up") +def on_pointer_up(ev: pygfx.PointerEvent): + # toggle off painting state + global painting + painting = False + + # re-enable controller + figure[0, 0].controller.enabled = True + + +figure.show() + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/events/scatter_click.py b/examples/events/scatter_click.py new file mode 100644 index 000000000..3bf85558a --- /dev/null +++ b/examples/events/scatter_click.py @@ -0,0 +1,66 @@ +""" +Scatter click +============= + +Add an event handler to click on scatter points and highlight them, i.e. change the color and size of the clicked point. +Fly around the 3D scatter using WASD keys and click on points to highlight them +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl +import pygfx + +# make a gaussian cloud +data = np.random.normal(loc=0, scale=3, size=1500).reshape(500, 3) + +figure = fpl.Figure(cameras="3d", size=(700, 560)) + +scatter = figure[0, 0].add_scatter( + data, # the gaussian cloud + sizes=10, # some big points that are easy to click + cmap="viridis", + cmap_transform=np.linalg.norm(data, axis=1) # color points using distance from origin +) + +# simple dict to restore the original scatter color and size +# of the previously clicked point upon clicking a new point +old_props = {"index": None, "size": None, "color": None} + + +@scatter.add_event_handler("click") +def highlight_point(ev: pygfx.PointerEvent): + global old_props + + # the index of the point that was just clicked + new_index = ev.pick_info["vertex_index"] + + # restore old point's properties + if old_props["index"] is not None: + old_index = old_props["index"] + if new_index == old_index: + # same point was clicked, ignore + return + scatter.colors[old_index] = old_props["color"] + scatter.sizes[old_index] = old_props["size"] + + # store the current property values of this new point + old_props["index"] = new_index + old_props["color"] = scatter.colors[new_index].copy() # if you do not copy you will just get a view of the array! + old_props["size"] = scatter.sizes[new_index] + + # highlight this new point + scatter.colors[new_index] = "magenta" + scatter.sizes[new_index] = 20 + + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/events/scatter_hover.py b/examples/events/scatter_hover.py new file mode 100644 index 000000000..c297223d2 --- /dev/null +++ b/examples/events/scatter_hover.py @@ -0,0 +1,69 @@ +""" +Scatter hover +============= + +Add an event handler to hover on scatter points and highlight them, i.e. change the color and size of the clicked point. +Fly around the 3D scatter using WASD keys and click on points to highlight them. + +There is no "hover" event, you can create a hover effect by using "pointer_move" events. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl +import pygfx + +# make a gaussian cloud +data = np.random.normal(loc=0, scale=3, size=1500).reshape(500, 3) + +figure = fpl.Figure(cameras="3d", size=(700, 560)) + +scatter = figure[0, 0].add_scatter( + data, # the gaussian cloud + sizes=10, # some big points that are easy to click + cmap="viridis", + cmap_transform=np.linalg.norm(data, axis=1) # color points using distance from origin +) + +# simple dict to restore the original scatter color and size +# of the previously clicked point upon clicking a new point +old_props = {"index": None, "size": None, "color": None} + + +@scatter.add_event_handler("pointer_move") +def highlight_point(ev: pygfx.PointerEvent): + global old_props + + # the index of the point that was just entered + new_index = ev.pick_info["vertex_index"] + + # if a new point has been entered, but we have not yet had + # a leave event for the previous point, then reset this old point + if old_props["index"] is not None: + old_index = old_props["index"] + if new_index == old_index: + # same point, ignore + return + scatter.colors[old_index] = old_props["color"] + scatter.sizes[old_index] = old_props["size"] + + # store the current property values of this new point + old_props["index"] = new_index + old_props["color"] = scatter.colors[new_index].copy() # if you do not copy you will just get a view of the array! + old_props["size"] = scatter.sizes[new_index] + + # highlight this new point + scatter.colors[new_index] = "magenta" + scatter.sizes[new_index] = 20 + + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/events/scatter_hover_transforms.py b/examples/events/scatter_hover_transforms.py new file mode 100644 index 000000000..18e6f3de5 --- /dev/null +++ b/examples/events/scatter_hover_transforms.py @@ -0,0 +1,126 @@ +""" +Scatter data explore scalers +============================ + +Based on the sklearn preprocessing scalers example. Hover points to highlight the corresponding point of the dataset +transformed by the various scalers. + +See: https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html + +This is another example that uses bi-directional events. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +from sklearn.datasets import fetch_california_housing +from sklearn.preprocessing import ( + Normalizer, + QuantileTransformer, + PowerTransformer, +) + +import fastplotlib as fpl +import pygfx + +# get the dataset +dataset = fetch_california_housing(n_retries=5, delay=20) +X_full, y = dataset.data, dataset.target +feature_names = dataset.feature_names + +feature_mapping = { + "MedInc": "Median income in block", + "HouseAge": "Median house age in block", + "AveRooms": "Average number of rooms", + "AveBedrms": "Average number of bedrooms", + "Population": "Block population", + "AveOccup": "Average house occupancy", + "Latitude": "House block latitude", + "Longitude": "House block longitude", +} + +# Take only 2 features to make visualization easier +# Feature MedInc has a long tail distribution. +# Feature AveOccup has a few but very large outliers. +features = ["MedInc", "AveOccup"] +features_idx = [feature_names.index(feature) for feature in features] +X = X_full[:, features_idx] + +# list of our scalers and their names as strings +scalers = [PowerTransformer, QuantileTransformer, Normalizer] +names = ["Original Data", *[s.__name__ for s in scalers]] + +# fastplotlib code starts here, make a figure +figure = fpl.Figure( + shape=(2, 2), + names=names, + size=(700, 780), +) + +scatters = list() # list to store our 4 scatter graphics for convenience + +# add a scatter of the original data +s = figure["Original Data"].add_scatter( + data=X, + cmap="viridis", + cmap_transform=y, + sizes=3, +) + +# append to list of scatters +scatters.append(s) + +# add the scaled data as scatter graphics +for scaler in scalers: + name = scaler.__name__ + s = figure[name].add_scatter(scaler().fit_transform(X), cmap="viridis", cmap_transform=y, sizes=3) + scatters.append(s) + + +# simple dict to restore the original scatter color and size +# of the previously clicked point upon clicking a new point +old_props = {"index": None, "size": None, "color": None} + + +def highlight_point(ev: pygfx.PointerEvent): + # event handler to highlight the point when the mouse moves over it + global old_props + + # the index of the point that was just clicked + new_index = ev.pick_info["vertex_index"] + + # restore old point's properties + if old_props["index"] is not None: + old_index = old_props["index"] + if new_index == old_index: + # same point was clicked, ignore + return + for s in scatters: + s.colors[old_index] = old_props["color"] + s.sizes[old_index] = old_props["size"] + + # store the current property values of this new point + old_props["index"] = new_index + # all the scatters have the same colors and size for the corresponding index + # so we can just use the first scatter's original color and size + old_props["color"] = scatters[0].colors[new_index].copy() # if you do not copy you will just get a view of the array! + old_props["size"] = scatters[0].sizes[new_index] + + # highlight this new point + for s in scatters: + s.colors[new_index] = "magenta" + s.sizes[new_index] = 15 + + +# add the event handler to all the scatter graphics +for s in scatters: + s.add_event_handler(highlight_point, "pointer_move") + + +figure.show(maintain_aspect=False) + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/gridplot/README.rst b/examples/gridplot/README.rst new file mode 100644 index 000000000..0a2cc1828 --- /dev/null +++ b/examples/gridplot/README.rst @@ -0,0 +1,2 @@ +Grid layout Examples +==================== diff --git a/examples/gridplot/gridplot.py b/examples/gridplot/gridplot.py new file mode 100644 index 000000000..5edd6a845 --- /dev/null +++ b/examples/gridplot/gridplot.py @@ -0,0 +1,33 @@ +""" +Grid layout Simple +================== + +Example showing simple 2x2 grid layout with standard images from imageio. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import imageio.v3 as iio + +figure = fpl.Figure(shape=(2, 2), size=(700, 560)) + +im = iio.imread("imageio:clock.png") +im2 = iio.imread("imageio:astronaut.png") +im3 = iio.imread("imageio:coffee.png") +im4 = iio.imread("imageio:hubble_deep_field.png") + +figure[0, 0].add_image(data=im) +figure[0, 1].add_image(data=im2) +figure[1, 0].add_image(data=im3) +figure[1, 1].add_image(data=im4) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/gridplot/gridplot_non_square.py b/examples/gridplot/gridplot_non_square.py new file mode 100644 index 000000000..da0bf14c3 --- /dev/null +++ b/examples/gridplot/gridplot_non_square.py @@ -0,0 +1,31 @@ +""" +Grid Layout 2 +============= + +Simple 2x2 grid layout Figure with standard images from imageio, one subplot is left empty +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import imageio.v3 as iio + +figure = fpl.Figure(shape=(2, 2), size=(700, 560)) + +im = iio.imread("imageio:clock.png") +im2 = iio.imread("imageio:astronaut.png") +im3 = iio.imread("imageio:coffee.png") + +figure[0, 0].add_image(data=im) +figure[0, 1].add_image(data=im2) +figure[1, 0].add_image(data=im3) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/gridplot/gridplot_viewports_check.py b/examples/gridplot/gridplot_viewports_check.py new file mode 100644 index 000000000..45f9d7004 --- /dev/null +++ b/examples/gridplot/gridplot_viewports_check.py @@ -0,0 +1,37 @@ +""" +Grid layout test viewport rects +=============================== + +Test figure to test that viewport rects are positioned correctly +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'hidden' + +import fastplotlib as fpl +import numpy as np + + +figure = fpl.Figure( + shape=(2, 3), + size=(700, 560), + names=list(map(str, range(6))) +) + +np.random.seed(0) +a = np.random.rand(6, 10, 10) + +for data, subplot in zip(a, figure): + subplot.add_image(data) + subplot.docks["left"].size = 20 + subplot.docks["right"].size = 30 + subplot.docks["bottom"].size = 40 + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/gridplot/multigraphic_gridplot.py b/examples/gridplot/multigraphic_gridplot.py new file mode 100644 index 000000000..d89168ec9 --- /dev/null +++ b/examples/gridplot/multigraphic_gridplot.py @@ -0,0 +1,118 @@ +""" +Multi-Graphic Grid layout +========================= + +A Figure with multiple subplots and multiple graphic types. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np +import imageio.v3 as iio +from itertools import product + +# define figure +figure = fpl.Figure( + shape=(2, 2), + names=[["image-overlay", "circles"], ["line-stack", "scatter"]], + size=(700, 560) +) + +img = iio.imread("imageio:coffee.png") + +# add image to subplot +figure["image-overlay"].add_image(data=img) + +# generate overlay + +# empty array for overlay, shape is [nrows, ncols, RGBA] +overlay = np.zeros(shape=(*img.shape[:2], 4), dtype=np.float32) + +# set the blue values of some pixels with an alpha > 1 +overlay[img[:, :, -1] > 200] = np.array([0.0, 0.0, 1.0, 0.6]).astype(np.float32) + +# add overlay to image +figure["image-overlay"].add_image(data=overlay) + +# generate some circles +def make_circle(center, radius: float, n_points: int = 75) -> np.ndarray: + theta = np.linspace(0, 2 * np.pi, n_points) + xs = radius * np.sin(theta) + ys = radius * np.cos(theta) + + return np.column_stack([xs, ys]) + center + + +spatial_dims = (50, 50) + +# this makes 16 circles, so we can create 16 cmap values, so it will use these values to set the +# color of the line based by using the cmap as a LUT with the corresponding cmap_transform +circles = list() +for center in product(range(0, spatial_dims[0], 15), range(0, spatial_dims[1], 15)): + circles.append(make_circle(center, 5, n_points=75)) + +# things like class labels, cluster labels, etc. +cmap_transform = [ + 0, 1, 1, 2, + 0, 0, 1, 1, + 2, 2, 8, 3, + 1, 9, 1, 5 +] + +# add an image to overlay the circles on +img2 = iio.imread("imageio:coins.png")[10::5, 5::5] + +figure["circles"].add_image(data=img2, cmap="gray") + +# add the circles to the figure +figure["circles"].add_line_collection( + circles, + cmap="tab10", + cmap_transform=cmap_transform, + thickness=3, + alpha=0.5, + name="circles-graphic" +) + +# move the circles graphic so that it is centered over the image +figure["circles"]["circles-graphic"].offset = np.array([7, 7, 2]) + +# generate some sine data +# linspace, create 100 evenly spaced x values from -10 to 10 +xs = np.linspace(-10, 10, 100) +# sine wave +ys = np.sin(xs) +sine = np.dstack([xs, ys])[0] + +# make 10 identical waves +sine_waves = 10 * [sine] + +# add the line stack to the figure +figure["line-stack"].add_line_stack(data=sine_waves, cmap="Wistia", separation=1) + +figure["line-stack"].auto_scale(maintain_aspect=True) + +# generate some scatter data +# create a gaussian cloud of 500 points +n_points = 500 + +mean = [0, 0] # mean of the Gaussian distribution +covariance = [[1, 0], [0, 1]] # covariance matrix + +gaussian_cloud = np.random.multivariate_normal(mean, covariance, n_points) +gaussian_cloud2 = np.random.multivariate_normal(mean, covariance, n_points) + +# add the scatter graphics to the figure +figure["scatter"].add_scatter(data=gaussian_cloud, sizes=2, cmap="jet") +figure["scatter"].add_scatter(data=gaussian_cloud2, colors="r", sizes=2) + +figure.show() + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() + diff --git a/examples/guis/README.rst b/examples/guis/README.rst new file mode 100644 index 000000000..0271f959d --- /dev/null +++ b/examples/guis/README.rst @@ -0,0 +1,2 @@ +ImGUI for within canvas GUIs +============================ diff --git a/examples/guis/image_widget_imgui.py b/examples/guis/image_widget_imgui.py new file mode 100644 index 000000000..759d87a07 --- /dev/null +++ b/examples/guis/image_widget_imgui.py @@ -0,0 +1,82 @@ +""" +ImGUI with ImageWidget +====================== + +Example showing how to write a custom GUI with imgui and use it with ImageWidget +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +# some simple image processing functions +from scipy.ndimage import gaussian_filter +import imageio.v3 as iio + +import fastplotlib as fpl + +# subclass from EdgeWindow to make a custom ImGUI Window to place inside the figure! +from fastplotlib.ui import EdgeWindow +from imgui_bundle import imgui + +a = iio.imread("imageio:camera.png") +iw = fpl.ImageWidget(data=a, cmap="viridis", figure_kwargs={"size": (700, 560)}) +iw.show() + + +# GUI for some basic image processing +class ImageProcessingWindow(EdgeWindow): + def __init__(self, figure, size, location, title): + super().__init__(figure=figure, size=size, location=location, title=title) + + self.sigma = 0.0 + self.order_x, self.order_y = 0, 0 + + def update(self): + # implement the GUI within the update function + # you do not need to call imgui.new_frame(), this is handled by Figure + + # window creation is handled by the base EdgeWindow.draw_window() + # if you want to customize the imgui window, you can override EdgeWindow.draw_window() + + something_changed = False + + # slider for gaussian filter sigma value + changed, value = imgui.slider_float(label="sigma", v=self.sigma, v_min=0.0, v_max=20.0) + if changed: + self.sigma = value + something_changed = True + + # int entries for gaussian filter order + for axis in ["x", "y"]: + changed, value = imgui.input_int(f"order {axis}", v=getattr(self, f"order_{axis}")) + if changed: + if value < 0: + value = 0 + setattr(self, f"order_{axis}", value) + something_changed = True + + if something_changed: + self.process_image() + + # imgui.end() is handled by EdgeWindow.draw_window() + + # do not call imgui.end_frame(), this is handled by Figure + + def process_image(self): + processed = gaussian_filter(a, sigma=self.sigma, order=(self.order_y, self.order_x)) + iw.set_data(processed) + + +gui = ImageProcessingWindow(iw.figure, size=200, location="right", title="Gaussian Filter") + + +iw.figure.add_gui(gui) + +figure = iw.figure + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/guis/imgui_basic.py b/examples/guis/imgui_basic.py new file mode 100644 index 000000000..26b5603c0 --- /dev/null +++ b/examples/guis/imgui_basic.py @@ -0,0 +1,123 @@ +""" +ImGUI Basics +============ + +Basic examples demonstrating how to use imgui in fastplotlib. + +See the imgui docs for extensive examples on how to create all UI elements: https://pyimgui.readthedocs.io/en/latest/reference/imgui.core.html#imgui.core.begin_combo +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl + +# subclass from EdgeWindow to make a custom ImGUI Window to place inside the figure! +from fastplotlib.ui import EdgeWindow +from imgui_bundle import imgui + +# make some initial data +np.random.seed(0) + +xs = np.linspace(0, np.pi * 10, 100) +ys = np.sin(xs) + np.random.normal(scale=0.0, size=100) +data = np.column_stack([xs, ys]) + + +# make a figure +figure = fpl.Figure(size=(700, 560)) + +# make some scatter points at every 10th point +figure[0, 0].add_scatter(data[::10], colors="cyan", sizes=15, name="sine-scatter", uniform_color=True) + +# place a line above the scatter +figure[0, 0].add_line(data, thickness=3, colors="r", name="sine-wave", uniform_color=True) + + +class ImguiExample(EdgeWindow): + def __init__(self, figure, size, location, title): + super().__init__(figure=figure, size=size, location=location, title=title) + # this UI will modify the line + self._line = self._figure[0, 0]["sine-wave"] + + # set the default values + # wave amplitude + self._amplitude = 1 + + # sigma for gaussian noise + self._sigma = 0.0 + + def update(self): + # the UI will be used to modify the line + self._line = figure[0, 0]["sine-wave"] + + # get the current line RGB values + rgb_color = self._line.colors[:-1] + # make color picker + changed_color, rgb = imgui.color_picker3("color", col=rgb_color) + + # get current line color alpha value + alpha = self._line.colors[-1] + # make float slider + changed_alpha, new_alpha = imgui.slider_float("alpha", v=alpha, v_min=0.0, v_max=1.0) + + # if RGB or alpha changed + if changed_color | changed_alpha: + # set new color along with alpha + self._line.colors = [*rgb, new_alpha] + + # example of a slider, you can also use input_float + changed, amplitude = imgui.slider_float("amplitude", v=self._amplitude, v_max=10, v_min=0.1) + if changed: + # set y values + self._amplitude = amplitude + self._set_data() + + # slider for thickness + changed, thickness = imgui.slider_float("thickness", v=self._line.thickness, v_max=50.0, v_min=2.0) + if changed: + self._line.thickness = thickness + + # slider for gaussian noise + changed, sigma = imgui.slider_float("noise-sigma", v=self._sigma, v_max=1.0, v_min=0.0) + if changed: + self._sigma = sigma + self._set_data() + + # reset button + if imgui.button("reset"): + # reset line properties + self._line.colors = (1, 0, 0, 1) + self._line.thickness = 3 + + # reset the data params + self._amplitude = 1.0 + self._sigma = 0.0 + + # reset the data values for the line + self._set_data() + + def _set_data(self): + self._line.data[:, 1] = (np.sin(xs) * self._amplitude) + np.random.normal(scale=self._sigma, size=100) + + +# make GUI instance +gui = ImguiExample( + figure, # the figure this GUI instance should live inside + size=275, # width or height of the GUI window within the figure + location="right", # the edge to place this window at + title="Imgui Window", # window title +) + +# add it to the figure +figure.add_gui(gui) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/guis/sine_cosine_funcs.py b/examples/guis/sine_cosine_funcs.py new file mode 100644 index 000000000..09a5ec990 --- /dev/null +++ b/examples/guis/sine_cosine_funcs.py @@ -0,0 +1,186 @@ +""" +Sine and Cosine functions +========================= + +Identical to the Unit Circle example but you can change the angular frequencies using a UI + +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import glfw +import numpy as np +import fastplotlib as fpl +from fastplotlib.ui import EdgeWindow +from imgui_bundle import imgui + + +# initial frequency coefficients for sine and cosine functions +P = 1 +Q = 1 + + +# helper function to make a circle +def make_circle(center, radius: float, p, q, n_points: int) -> np.ndarray: + theta = np.linspace(0, 2 * np.pi, n_points) + xs = radius * np.cos(theta * p) + ys = radius * np.sin(theta * q) + + return np.column_stack([xs, ys]) + center + + +# we can define this layout using "extents", i.e. min and max ranges on the canvas +# (x_min, x_max, y_min, y_max) +# extents can be defined as fractions as shown here +extents = [ + (0, 0.5, 0, 1), # circle subplot + (0.5, 1, 0, 0.5), # sine subplot + (0.5, 1, 0.5, 1), # cosine subplot +] + +# create a figure with 3 subplots +figure = fpl.Figure( + extents=extents, + names=["circle", "sin", "cos"], + size=(700, 560) +) + +# set more descriptive figure titles +figure["circle"].title = "sin(x*p) over cos(x*q)" +figure["sin"].title = "sin(x * p)" +figure["cos"].title = "cos(x * q)" + +# set the axes to intersect at (0, 0, 0) to better illustrate the unit circle +for subplot in figure: + subplot.axes.intersection = (0, 0, 0) + subplot.toolbar = False # reduce clutter + +figure["sin"].camera.maintain_aspect = False +figure["cos"].camera.maintain_aspect = False + +# create sine and cosine data +xs = np.linspace(0, 2 * np.pi, 360) +sine = np.sin(xs * P) +cosine = np.cos(xs * Q) + +# circle data +circle_data = make_circle(center=(0, 0), p=P, q=Q, radius=1, n_points=360) + +# make the circle line graphic, set the cmap transform using the sine function +circle_graphic = figure["circle"].add_line( + circle_data, thickness=4, cmap="bwr", cmap_transform=sine +) + +# line to show the circle radius +# use it to indicate the current position of the sine and cosine selctors (below) +radius_data = np.array([[0, 0, 0], [*circle_data[0], 0]]) +circle_radius_graphic = figure["circle"].add_line( + radius_data, thickness=6, colors="magenta" +) + +# sine line graphic, cmap transform set from the sine function +sine_graphic = figure["sin"].add_line( + sine, thickness=10, cmap="bwr", cmap_transform=sine +) + +# cosine line graphic, cmap transform set from the sine function +# illustrates the sine function values on the cosine graphic +cosine_graphic = figure["cos"].add_line( + cosine, thickness=10, cmap="bwr", cmap_transform=sine +) + +# add linear selectors to the sine and cosine line graphics +sine_selector = sine_graphic.add_linear_selector() +cosine_selector = cosine_graphic.add_linear_selector() + + +def set_circle_cmap(ev): + # sets the cmap transforms + + cmap_transform = ev.graphic.data[:, 1] # y-val data of the sine or cosine graphic + for g in [sine_graphic, cosine_graphic]: + g.cmap.transform = cmap_transform + + # set circle cmap transform + circle_graphic.cmap.transform = cmap_transform + +# when the sine or cosine graphic is clicked, the cmap_transform +# of the sine, cosine and circle line graphics are all set from +# the y-values of the clicked line +sine_graphic.add_event_handler(set_circle_cmap, "click") +cosine_graphic.add_event_handler(set_circle_cmap, "click") + + +def set_x_val(ev): + # used to sync the two selectors + value = ev.info["value"] + index = ev.get_selected_index() + + sine_selector.selection = value + cosine_selector.selection = value + + circle_radius_graphic.data[1, :-1] = circle_data[index] + +# add same event handler to both graphics +sine_selector.add_event_handler(set_x_val, "selection") +cosine_selector.add_event_handler(set_x_val, "selection") + +# initial selection value +sine_selector.selection = 50 + + +class GUIWindow(EdgeWindow): + def __init__(self, figure, size, location, title): + super().__init__(figure=figure, size=size, location=location, title=title) + + self._p = 1 + self._q = 1 + + def _set_data(self): + global sine_graphic, cosine_graphic, circle_graphic, circle_radius_graphic, circle_data + + # make new data + sine = np.sin(xs * self._p) + cosine = np.cos(xs * self._q) + circle_data = make_circle(center=(0, 0), p=self._p, q=self._q, radius=1, n_points=360) + + + # set the graphics + sine_graphic.data[:, 1] = sine + cosine_graphic.data[:, 1] = cosine + circle_graphic.data[:, :2] = circle_data + circle_radius_graphic.data[1, :-1] = circle_data[sine_selector.get_selected_index()] + + def update(self): + flag_set_data = False + + changed, self._p = imgui.input_int("P", v=self._p, step_fast=2) + if changed: + flag_set_data = True + + changed, self._q = imgui.input_int("Q", v=self._q, step_fast=2) + if changed: + flag_set_data = True + + if flag_set_data: + self._set_data() + + +gui = GUIWindow( + figure=figure, + size=100, + location="right", + title="Freq. coeffs" +) + +figure.add_gui(gui) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/heatmap/README.rst b/examples/heatmap/README.rst new file mode 100644 index 000000000..64294f46f --- /dev/null +++ b/examples/heatmap/README.rst @@ -0,0 +1,2 @@ +Heatmap Examples +================ diff --git a/examples/heatmap/heatmap.py b/examples/heatmap/heatmap.py new file mode 100644 index 000000000..38c9b51a7 --- /dev/null +++ b/examples/heatmap/heatmap.py @@ -0,0 +1,33 @@ +""" +Heatmap or large arrays +======================= +Example showing how ImageGraphics can be useful for viewing large arrays, these can be in the order of 10^4 x 10^4. +The performance and limitations will depend on your hardware. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np + + +figure = fpl.Figure(size=(700, 560)) + +xs = np.linspace(0, 2300, 2300, dtype=np.float16) + +sine = np.sin(np.sqrt(xs)) + +data = np.vstack([sine * i for i in range(2_300)]) + +# plot the image data +img = figure[0, 0].add_image(data=data, name="heatmap") +del data + +figure.show() + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image/README.rst b/examples/image/README.rst new file mode 100644 index 000000000..028e85ec5 --- /dev/null +++ b/examples/image/README.rst @@ -0,0 +1,2 @@ +Image Examples +============== diff --git a/examples/image/image_cmap.py b/examples/image/image_cmap.py new file mode 100644 index 000000000..f651f438c --- /dev/null +++ b/examples/image/image_cmap.py @@ -0,0 +1,29 @@ +""" +Image Colormap +============== + +Example showing simple plot creation and subsequent cmap change with Standard image from imageio. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import imageio.v3 as iio + +im = iio.imread("imageio:camera.png") + +figure = fpl.Figure(size=(700, 560)) + +# plot the image data +image_graphic = figure[0, 0].add_image(data=im, name="random-image") + +figure.show() + +image_graphic.cmap = "viridis" + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image/image_rgb.py b/examples/image/image_rgb.py new file mode 100644 index 000000000..187dac553 --- /dev/null +++ b/examples/image/image_rgb.py @@ -0,0 +1,28 @@ +""" +RGB Image +========= + +Example showing the simple plot creation with 512 x 512 2D RGB image. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import imageio.v3 as iio + +im = iio.imread("imageio:astronaut.png") + +figure = fpl.Figure(size=(700, 560)) + +# plot the image data +image_graphic = figure[0, 0].add_image(data=im, name="iio astronaut") + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image/image_rgbvminvmax.py b/examples/image/image_rgbvminvmax.py new file mode 100644 index 000000000..02635f134 --- /dev/null +++ b/examples/image/image_rgbvminvmax.py @@ -0,0 +1,30 @@ +""" +RGB Image Vmin/Vmax +=================== + +Example showing the simple plot followed by changing the vmin/vmax with 512 x 512 2D RGB image. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import imageio.v3 as iio + +im = iio.imread("imageio:astronaut.png") + +figure = fpl.Figure(size=(700, 560)) + +# plot the image data +image_graphic = figure[0, 0].add_image(data=im, name="iio astronaut") + +figure.show() + +image_graphic.vmin = 0.5 +image_graphic.vmax = 0.75 + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image/image_simple.py b/examples/image/image_simple.py new file mode 100644 index 000000000..d0910fb82 --- /dev/null +++ b/examples/image/image_simple.py @@ -0,0 +1,27 @@ +""" +Simple Image +============ + +Example showing the simple plot creation with Standard imageio image. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import imageio.v3 as iio + +figure = fpl.Figure(size=(700, 560)) + +data = iio.imread("imageio:camera.png") + +# plot the image data +image_graphic = figure[0, 0].add_image(data=data, name="iio camera") + +figure.show() + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image/image_small.py b/examples/image/image_small.py new file mode 100644 index 000000000..732d61d74 --- /dev/null +++ b/examples/image/image_small.py @@ -0,0 +1,29 @@ +""" +Small Image +=========== + +Test image to verify dims +""" + +import numpy as np + +# test_example = true +# sphinx_gallery_pygfx_docs = 'hidden' + +import fastplotlib as fpl + +figure = fpl.Figure(size=(700, 560)) + +data = np.array( + [[0, 1, 2], + [3, 4, 5]] +) +image_graphic = figure[0, 0].add_image(data) + +figure.show() + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image/image_vminvmax.py b/examples/image/image_vminvmax.py new file mode 100644 index 000000000..e2d1c7743 --- /dev/null +++ b/examples/image/image_vminvmax.py @@ -0,0 +1,30 @@ +""" +Image Vmin/Vmax +=============== + +Example showing the simple plot creation followed by changing the vmin/vmax with Standard imageio image. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import imageio.v3 as iio + +figure = fpl.Figure(size=(700, 560)) + +data = iio.imread("imageio:astronaut.png") + +# plot the image data +image_graphic = figure[0, 0].add_image(data=data, name="iio astronaut") + +figure.show() + +image_graphic.vmin = 0.5 +image_graphic.vmax = 0.75 + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image_widget/README.rst b/examples/image_widget/README.rst new file mode 100644 index 000000000..f445f7390 --- /dev/null +++ b/examples/image_widget/README.rst @@ -0,0 +1,2 @@ +ImageWidget Examples +==================== diff --git a/examples/image_widget/image_widget.py b/examples/image_widget/image_widget.py new file mode 100644 index 000000000..a3c332182 --- /dev/null +++ b/examples/image_widget/image_widget.py @@ -0,0 +1,34 @@ +""" +Image widget +============ + +Example showing the image widget in action. + +Every image in an `ImageWidget` is associated with an interactive Histogram LUT tool and colorbar. Right-click the +colorbar to pick colormaps. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import imageio.v3 as iio # not a fastplotlib dependency, only used for examples + +a = iio.imread("imageio:camera.png") +iw = fpl.ImageWidget(data=a, cmap="viridis", figure_kwargs={"size": (700, 560)}) +iw.show() + +# Access ImageGraphics managed by the image widget +iw.figure[0, 0]["image_widget_managed"].data[:50, :50] = 0 +iw.figure[0, 0]["image_widget_managed"].cmap = "gnuplot2" + +# another way to access the image widget managed ImageGraphics +iw.managed_graphics[0].data[450:, 450:] = 255 + +figure = iw.figure + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image_widget/image_widget_grid.py b/examples/image_widget/image_widget_grid.py new file mode 100644 index 000000000..41e964e95 --- /dev/null +++ b/examples/image_widget/image_widget_grid.py @@ -0,0 +1,41 @@ +""" +Image widget grid +================= + +Example showing how to view multiple images in an ImageWidget +""" + +import fastplotlib as fpl +import imageio.v3 as iio + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +img1 = iio.imread("imageio:camera.png") +img2 = iio.imread("imageio:astronaut.png") +img3 = iio.imread("imageio:chelsea.png") +img4 = iio.imread("imageio:wikkie.png") + +iw = fpl.ImageWidget( + data=[img1, img2, img3, img4], + rgb=[False, True, True, True], # mix of grayscale and RGB images + names=["cameraman", "astronaut", "chelsea", "Almar's cat"], + # ImageWidget will sync controllers by default + # by setting `controller_ids=None` we can have independent controllers for each subplot + # this is useful when the images have different dimensions + figure_kwargs={"size": (700, 560), "controller_ids": None}, +) +iw.show() + +figure = iw.figure + +for subplot in figure: + # sometimes the toolbar adds clutter + subplot.toolbar = False + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image_widget/image_widget_single_video.py b/examples/image_widget/image_widget_single_video.py new file mode 100644 index 000000000..86ca642fa --- /dev/null +++ b/examples/image_widget/image_widget_single_video.py @@ -0,0 +1,47 @@ +""" +Image widget Video +================== + +Example showing how to scroll through one or more videos using the ImageWidget +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'animate 6s 20fps' + +import fastplotlib as fpl +import imageio.v3 as iio +import numpy as np + + +movie = iio.imread("imageio:cockatoo.mp4") + +# Ignore and do not use the next 2 lines +# for the purposes of docs gallery generation we subsample and only use 15 frames +movie_sub = movie[:15, ::12, ::12].copy() +del movie + +iw = fpl.ImageWidget(movie_sub, rgb=True, figure_kwargs={"size": (700, 560)}) + +# ImageWidget supports setting window functions the `time` "t" or `volume` "z" dimension +# These can also be given as kwargs to `ImageWidget` during instantiation +# to set a window function, give a dict in the form of {dim: (func, window_size)} +iw.window_funcs = {"t": (np.mean, 13)} + +# change the window size +iw.window_funcs["t"].window_size = 33 + +# change the function +iw.window_funcs["t"].func = np.max + +# or reset it +iw.window_funcs = None + +iw.show() + +figure = iw.figure + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image_widget/image_widget_videos.py b/examples/image_widget/image_widget_videos.py new file mode 100644 index 000000000..399abbcff --- /dev/null +++ b/examples/image_widget/image_widget_videos.py @@ -0,0 +1,43 @@ +""" +Image widget videos side by side +================================ + +Example showing how to scroll through one or more videos using the ImageWidget +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'animate 6s 20fps' + +import fastplotlib as fpl +import imageio.v3 as iio +import numpy as np + + +# load the standard cockatoo video +cockatoo = iio.imread("imageio:cockatoo.mp4") + +# Ignore and do not use the next 2 lines +# for the purposes of docs gallery generation we subsample and only use 15 frames +cockatoo_sub = cockatoo[:15, ::12, ::12].copy() +del cockatoo + +# make a random grayscale video, shape is [t, rows, cols] +np.random.seed(0) +random_data = np.random.rand(*cockatoo_sub.shape[:-1]) + +iw = fpl.ImageWidget( + [random_data, cockatoo_sub], + rgb=[False, True], + figure_shape=(2, 1), # 2 rows, 1 column + figure_kwargs={"size": (700, 940)} +) + +iw.show() + +figure = iw.figure + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/image_widget/image_widget_viewports_check.py b/examples/image_widget/image_widget_viewports_check.py new file mode 100644 index 000000000..a4c0aea03 --- /dev/null +++ b/examples/image_widget/image_widget_viewports_check.py @@ -0,0 +1,35 @@ +""" +ImageWidget test viewport rects +=============================== + +Test Figure to test that viewport rects are positioned correctly in an image widget +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'hidden' + +import fastplotlib as fpl +import numpy as np + +np.random.seed(0) +a = np.random.rand(6, 15, 10, 10) + +iw = fpl.ImageWidget( + data=[img for img in a], + names=list(map(str, range(6))), + figure_kwargs={"size": (700, 560)}, +) + +for subplot in iw.figure: + subplot.docks["left"].size = 10 + subplot.docks["bottom"].size = 40 + +iw.show() + +figure = iw.figure + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/ipywidgets/README.rst b/examples/ipywidgets/README.rst new file mode 100644 index 000000000..3f6ae9d5f --- /dev/null +++ b/examples/ipywidgets/README.rst @@ -0,0 +1,2 @@ +Using with ipywidgets +===================== diff --git a/examples/ipywidgets/ipywidgets_modify_image.py b/examples/ipywidgets/ipywidgets_modify_image.py new file mode 100644 index 000000000..c0206e945 --- /dev/null +++ b/examples/ipywidgets/ipywidgets_modify_image.py @@ -0,0 +1,69 @@ +""" +ipwidgets modify an ImageGraphic +================================ + +Use ipywidgets to modify some features of an ImageGraphic. Run in jupyterlab. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'code' + +import fastplotlib as fpl +from scipy.ndimage import gaussian_filter +import imageio.v3 as iio +from ipywidgets import FloatRangeSlider, FloatSlider, Select, VBox + +data = iio.imread("imageio:moon.png") + +iw = fpl.ImageWidget(data, figure_kwargs={"size": (700, 560)}) + +# get the ImageGraphic from the image widget +image = iw.managed_graphics[0] + +min_v, max_v = fpl.utils.quick_min_max(data) + +# slider to adjust vmin, vmax of the image +vmin_vmax_slider = FloatRangeSlider(value=(image.vmin, image.vmax), min=min_v, max=max_v, description="vmin, vmax:") + +# slider to adjust sigma of a gaussian kernel used to filter the image (i.e. gaussian blur) +slider_sigma = FloatSlider(min=0.0, max=10.0, value=0.0, description="σ: ") + +# select box to choose the sample image shown in the ImageWidget +select_image = Select(options=["moon.png", "camera.png", "checkerboard.png"], description="image: ") + + +def update_vmin_vmax(change): + vmin, vmax = change["new"] + + image = iw.managed_graphics[0] + image.vmin, image.vmax = vmin, vmax + + +def update_sigma(change): + sigma = change["new"] + + # set a "frame apply" dict onto the ImageWidget + # this maps {image_index: function} + # the function is applied to the image data at the image index given by the key + iw.frame_apply = {0: lambda image_data: gaussian_filter(image_data, sigma=sigma)} + + +def update_image(change): + filename = change["new"] + data = iio.imread(f"imageio:{filename}") + + iw.set_data(data) + + # set vmin, vmax sliders w.r.t. this new image + image = iw.managed_graphics[0] + vmin_vmax_slider.value = image.vmin, image.vmax + vmin_vmax_slider.min, vmin_vmax_slider.max = fpl.utils.quick_min_max(data) + + +# connect the ipywidgets to the handler functions +vmin_vmax_slider.observe(update_vmin_vmax, "value") +slider_sigma.observe(update_sigma, "value") +select_image.observe(update_image, "value") + +# display in a vbox +VBox([iw.show(), vmin_vmax_slider, slider_sigma, select_image]) diff --git a/examples/ipywidgets/ipywidgets_sliders_line.py b/examples/ipywidgets/ipywidgets_sliders_line.py new file mode 100644 index 000000000..8288e5719 --- /dev/null +++ b/examples/ipywidgets/ipywidgets_sliders_line.py @@ -0,0 +1,91 @@ +""" +ipywidget sliders to modify a sine wave +======================================= + +Example with ipywidgets sliders to change a sine wave and view the frequency spectra. You can run this in jupyterlab +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'code' + +import numpy as np +import fastplotlib as fpl +from ipywidgets import FloatSlider, Checkbox, VBox + + +def generate_data(freq, duration, sampling_rate, ampl, noise_sigma): + # generate a sine wave using given params + xs = np.linspace(0, duration, sampling_rate * duration) + ys = np.sin((2 * np.pi) * freq * xs) * ampl + + noise = np.random.normal(scale=noise_sigma, size=sampling_rate * duration) + + signal = np.column_stack([xs, ys + noise]) + fft_mag = np.abs(np.fft.rfft(signal[:, 1])) + fft_freqs = np.linspace(0, sampling_rate / 2, num=fft_mag.shape[0]) + + return np.column_stack([xs, ys + noise]), np.column_stack([fft_freqs, fft_mag]) + + +signal, fft = generate_data( + freq=1, + duration=10, + sampling_rate=50, + ampl=1, + noise_sigma=0.05 +) + +# create a figure +figure = fpl.Figure(shape=(2, 1), names=["signal", "fft"], size=(700, 560)) + +# line graphic for the signal +signal_line = figure[0, 0].add_line(signal, thickness=1) + +# easier to understand the frequency of the sine wave if the +# axes go through the middle of the sine wave +figure[0, 0].axes.intersection = (0, 0, 0) + +# line graphic for fft +fft_line = figure[1, 0].add_line(fft) + +# do not maintain the aspect ratio of the fft subplot +figure[1, 0].camera.maintain_aspect = False + +# create ipywidget sliders +slider_freq = FloatSlider(min=0.1, max=10, value=1.0, step=0.1, description="freq: ") +slider_ampl = FloatSlider(min=0.0, max=10, value=1.0, step=0.5, description="ampl: ") +slider_noise = FloatSlider(min=0, max=1, value=0.05, step=0.05, description="noise: ") + +# checkbox +checkbox_autoscale = Checkbox(value=False, description="autoscale: ") + + +def update(*args): + # update whenever a slider changes + freq = slider_freq.value + ampl = slider_ampl.value + noise = slider_noise.value + + signal, fft = generate_data( + freq=freq, + duration=10, + sampling_rate=50, + ampl=ampl, + noise_sigma=noise, + ) + + signal_line.data[:, :-1] = signal + fft_line.data[:, :-1] = fft + + if checkbox_autoscale.value: + for subplot in figure: + subplot.auto_scale(maintain_aspect=False) + + +# when any one slider changes, it calls update +for slider in [slider_freq, slider_ampl, slider_noise]: + slider.observe(update, "value") + +# display the fastplotlib figure and ipywidgets in a VBox (vertically stacked) +# figure.show() just returns an ipywidget object +VBox([figure.show(), slider_freq, slider_ampl, slider_noise, checkbox_autoscale]) diff --git a/examples/line/README.rst b/examples/line/README.rst new file mode 100644 index 000000000..b9970c543 --- /dev/null +++ b/examples/line/README.rst @@ -0,0 +1,2 @@ +Line Examples +============= diff --git a/examples/desktop/line/line.py b/examples/line/line.py similarity index 50% rename from examples/desktop/line/line.py rename to examples/line/line.py index 8cab1954f..fb8834759 100644 --- a/examples/desktop/line/line.py +++ b/examples/line/line.py @@ -1,18 +1,17 @@ """ -Line Plot -============ +Simple Line Plot +================ + Example showing cosine, sine, sinc lines. """ # test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' import fastplotlib as fpl import numpy as np - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") +figure = fpl.Figure(size=(700, 560)) xs = np.linspace(-10, 10, 100) # sine wave @@ -28,22 +27,21 @@ ys = np.sinc(xs) * 3 + 8 sinc = np.dstack([xs, ys])[0] -sine_graphic = plot.add_line(data=sine, thickness=5, colors="magenta") +sine_graphic = figure[0, 0].add_line(data=sine, thickness=5, colors="magenta") # you can also use colormaps for lines! -cosine_graphic = plot.add_line(data=cosine, thickness=12, cmap="autumn") +cosine_graphic = figure[0, 0].add_line(data=cosine, thickness=12, cmap="autumn") # or a list of colors for each datapoint colors = ["r"] * 25 + ["purple"] * 25 + ["y"] * 25 + ["b"] * 25 -sinc_graphic = plot.add_line(data=sinc, thickness=5, colors=colors) - -plot.show() - -plot.canvas.set_logical_size(800, 800) +sinc_graphic = figure[0, 0].add_line(data=sinc, thickness=5, colors=colors) -plot.auto_scale() +figure[0, 0].axes.grids.xy.visible = True +figure.show() +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide if __name__ == "__main__": print(__doc__) - fpl.run() + fpl.loop.run() diff --git a/examples/line/line_cmap.py b/examples/line/line_cmap.py new file mode 100644 index 000000000..af24f1c63 --- /dev/null +++ b/examples/line/line_cmap.py @@ -0,0 +1,49 @@ +""" +Line Plot Colormap +================== + +Example showing basic colormapping with lines +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np + +figure = fpl.Figure(size=(700, 560)) + +xs = np.linspace(-10, 10, 100) +# sine wave +ys = np.sin(xs) +sine = np.dstack([xs, ys])[0] + +# cosine wave +ys = np.cos(xs) - 5 +cosine = np.dstack([xs, ys])[0] + +# cmap_transform from an array, so the colors on the sine line will be based on the sine y-values +sine_graphic = figure[0, 0].add_line( + data=sine, + thickness=10, + cmap="plasma", + cmap_transform=sine[:, 1] +) + +# qualitative colormaps, useful for cluster labels or other types of categorical labels +labels = [0] * 25 + [5] * 10 + [1] * 35 + [2] * 30 +cosine_graphic = figure[0, 0].add_line( + data=cosine, + thickness=10, + cmap="tab10", + cmap_transform=labels +) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/line/line_cmap_more.py b/examples/line/line_cmap_more.py new file mode 100644 index 000000000..c7c0d80f4 --- /dev/null +++ b/examples/line/line_cmap_more.py @@ -0,0 +1,56 @@ +""" +Lines more colormapping +======================= + +Example showing more on colormapping with lines +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl + +xs = np.linspace(0, 10 * np.pi, 100) +# sine wave +ys = np.sin(xs) +sine = np.column_stack([xs, ys]) + +# cosine wave +ys = np.cos(xs) +cosine = np.column_stack([xs, ys]) + +figure = fpl.Figure(size=(700, 560)) + +# basic white line +line0 = figure[0, 0].add_line(sine, thickness=10) + +# set colormap along line datapoints, use an offset to place it above the previous line +line1 = figure[0, 0].add_line(sine, thickness=10, cmap="jet", offset=(0, 2, 0)) + +# set colormap by mapping data using a transform +# here we map the color using the y-values of the sine data +# i.e., the color is a function of sine(x) +line2 = figure[0, 0].add_line(sine, thickness=10, cmap="jet", cmap_transform=sine[:, 1], offset=(0, 4, 0)) + +# make a line and change the cmap afterward, here we are using the cosine instead fot the transform +line3 = figure[0, 0].add_line(sine, thickness=10, cmap="jet", cmap_transform=cosine[:, 1], offset=(0, 6, 0)) +# change the cmap +line3.cmap = "bwr" + +# use quantitative colormaps with categorical cmap_transforms +labels = [0] * 25 + [1] * 5 + [2] * 50 + [3] * 20 +line4 = figure[0, 0].add_line(sine, thickness=10, cmap="tab10", cmap_transform=labels, offset=(0, 8, 0)) + +# some text labels +for i in range(5): + figure[0, 0].add_text(f"line{i}", font_size=20, offset=(1, (i * 2) + 1.5, 0)) + +figure.show(maintain_aspect=False) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/line/line_colorslice.py b/examples/line/line_colorslice.py new file mode 100644 index 000000000..2d4c0dcaa --- /dev/null +++ b/examples/line/line_colorslice.py @@ -0,0 +1,90 @@ +""" +Line Plot Color Slicing +======================= + +Example showing color slicing with cosine, sine, sinc lines. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np + +figure = fpl.Figure(size=(700, 560)) + +xs = np.linspace(-10, 10, 100) +# sine wave +ys = np.sin(xs) +sine = np.column_stack([xs, ys]) + +# cosine wave +ys = np.cos(xs) +cosine = np.column_stack([xs, ys]) + +# sinc function +a = 0.5 +ys = np.sinc(xs) * 3 +sinc = np.column_stack([xs, ys]) + +sine_graphic = figure[0, 0].add_line( + data=sine, + thickness=5, + colors="magenta" +) + +# you can also use colormaps for lines! +cosine_graphic = figure[0, 0].add_line( + data=cosine, + thickness=12, + cmap="autumn", + offset=(0, 3, 0) # places the graphic at a y-axis offset of 3, offsets don't affect data +) + +# or a list of colors for each datapoint +colors = ["r"] * 25 + ["purple"] * 25 + ["y"] * 25 + ["b"] * 25 +sinc_graphic = figure[0, 0].add_line( + data=sinc, + thickness=5, + colors=colors, + offset=(0, 6, 0) +) + +zeros = np.zeros(xs.size) +zeros_data = np.column_stack([xs, zeros]) +zeros_graphic = figure[0, 0].add_line( + data=zeros_data, + thickness=8, + colors="w", + offset=(0, 10, 0) +) + +figure.show() + +# indexing of colors +cosine_graphic.colors[:15] = "magenta" +cosine_graphic.colors[90:] = "red" +cosine_graphic.colors[60] = "w" + +# more complex indexing, set the blue value directly from an array +cosine_graphic.colors[65:90, 0] = np.linspace(0, 1, 90-65) + +# additional fancy indexing using numpy +key = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 67, 19]) +sinc_graphic.colors[key] = "Red" + +# boolean fancy indexing +zeros_graphic.colors[xs < -5] = "green" + +# assign colormap to an entire line +sine_graphic.cmap = "seismic" +# or to segments of a line +zeros_graphic.cmap[50:75] = "jet" +zeros_graphic.cmap[75:] = "viridis" + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/desktop/line/line_dataslice.py b/examples/line/line_dataslice.py similarity index 51% rename from examples/desktop/line/line_dataslice.py rename to examples/line/line_dataslice.py index ea87ba552..ca0f48518 100644 --- a/examples/desktop/line/line_dataslice.py +++ b/examples/line/line_dataslice.py @@ -1,18 +1,17 @@ """ -Line Plot -============ +Line Plot Data Slicing +====================== + Example showing data slicing with cosine, sine, sinc lines. """ # test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' import fastplotlib as fpl import numpy as np - -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") +figure = fpl.Figure(size=(700, 560)) xs = np.linspace(-10, 10, 100) # sine wave @@ -28,30 +27,28 @@ ys = np.sinc(xs) * 3 + 8 sinc = np.dstack([xs, ys])[0] -sine_graphic = plot.add_line(data=sine, thickness=5, colors="magenta") +sine_graphic = figure[0, 0].add_line(data=sine, thickness=5, colors="magenta") # you can also use colormaps for lines! -cosine_graphic = plot.add_line(data=cosine, thickness=12, cmap="autumn") +cosine_graphic = figure[0, 0].add_line(data=cosine, thickness=12, cmap="autumn") # or a list of colors for each datapoint colors = ["r"] * 25 + ["purple"] * 25 + ["y"] * 25 + ["b"] * 25 -sinc_graphic = plot.add_line(data=sinc, thickness=5, colors=colors) +sinc_graphic = figure[0, 0].add_line(data=sinc, thickness=5, colors=colors) -plot.show() +figure.show() cosine_graphic.data[10:50:5, :2] = sine[10:50:5] cosine_graphic.data[90:, 1] = 7 cosine_graphic.data[0] = np.array([[-10, 0, 0]]) -# additional fancy indexing using numpy -key2 = np.array([True, False, True, False, True, True, True, True]) -sinc_graphic.data[key2] = np.array([[5, 1, 2]]) - -plot.canvas.set_logical_size(800, 800) - -plot.auto_scale() +# additional fancy indexing with boolean array +bool_key = [True, True, True, False, False] * 20 +sinc_graphic.data[bool_key, 1] = 7 # y vals to 1 +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide if __name__ == "__main__": print(__doc__) - fpl.run() + fpl.loop.run() diff --git a/examples/line_collection/README.rst b/examples/line_collection/README.rst new file mode 100644 index 000000000..3dbe05f7f --- /dev/null +++ b/examples/line_collection/README.rst @@ -0,0 +1,2 @@ +LineCollection Examples +======================= diff --git a/examples/desktop/line_collection/line_collection.py b/examples/line_collection/line_collection.py similarity index 60% rename from examples/desktop/line_collection/line_collection.py rename to examples/line_collection/line_collection.py index 071da2e2e..2ddfbe2ed 100644 --- a/examples/desktop/line_collection/line_collection.py +++ b/examples/line_collection/line_collection.py @@ -1,10 +1,12 @@ """ -Line Plot -============ +Line Collection Simple +====================== + Example showing how to plot line collections """ # test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' from itertools import product import numpy as np @@ -27,16 +29,18 @@ def make_circle(center, radius: float, n_points: int = 75) -> np.ndarray: pos_xy = np.vstack(circles) -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") +figure = fpl.Figure(size=(700, 560), show_tooltips=True) + +figure[0, 0].add_line_collection(circles, cmap="jet", thickness=5) -plot.add_line_collection(circles, cmap="jet", thickness=5) +# remove clutter +figure[0, 0].axes.visible = False -plot.show() +figure.show() -plot.canvas.set_logical_size(800, 800) +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide if __name__ == "__main__": print(__doc__) - fpl.run() + fpl.loop.run() diff --git a/examples/desktop/line_collection/line_collection_cmap_values.py b/examples/line_collection/line_collection_cmap_values.py similarity index 63% rename from examples/desktop/line_collection/line_collection_cmap_values.py rename to examples/line_collection/line_collection_cmap_values.py index 3623c20c3..59f456893 100644 --- a/examples/desktop/line_collection/line_collection_cmap_values.py +++ b/examples/line_collection/line_collection_cmap_values.py @@ -1,16 +1,17 @@ """ -Line Plot -============ -Example showing how to plot line collections +Line collections quantitative cmap +================================== + +Example showing a line collection with a quantitative cmap """ # test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' from itertools import product import numpy as np import fastplotlib as fpl - def make_circle(center, radius: float, n_points: int = 75) -> np.ndarray: theta = np.linspace(0, 2 * np.pi, n_points) xs = radius * np.sin(theta) @@ -33,21 +34,20 @@ def make_circle(center, radius: float, n_points: int = 75) -> np.ndarray: # highest values, lowest values, mid-high values, mid values cmap_values = [10] * 4 + [0] * 4 + [7] * 4 + [5] * 4 -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") +figure = fpl.Figure(size=(700, 560)) -plot.add_line_collection( - circles, - cmap="bwr", - cmap_values=cmap_values, - thickness=10 +figure[0, 0].add_line_collection( + circles, cmap="bwr", cmap_transform=cmap_values, thickness=10 ) -plot.show() +# remove clutter +figure[0, 0].axes.visible = False + +figure.show() -plot.canvas.set_logical_size(800, 800) +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide if __name__ == "__main__": print(__doc__) - fpl.run() + fpl.loop.run() diff --git a/examples/desktop/line_collection/line_collection_cmap_values_qualitative.py b/examples/line_collection/line_collection_cmap_values_qualitative.py similarity index 67% rename from examples/desktop/line_collection/line_collection_cmap_values_qualitative.py rename to examples/line_collection/line_collection_cmap_values_qualitative.py index f56d2ca02..399f4a93d 100644 --- a/examples/desktop/line_collection/line_collection_cmap_values_qualitative.py +++ b/examples/line_collection/line_collection_cmap_values_qualitative.py @@ -1,10 +1,12 @@ """ -Line Plot -============ -Example showing how to plot line collections +Line Collection Qualitative Colormap +==================================== + +Example showing a line collection with a qualitative cmap """ # test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' from itertools import product import numpy as np @@ -39,21 +41,23 @@ def make_circle(center, radius: float, n_points: int = 75) -> np.ndarray: 1, 1, 1, 5 ] -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") +figure = fpl.Figure(size=(700, 560)) -plot.add_line_collection( +figure[0, 0].add_line_collection( circles, cmap="tab10", - cmap_values=cmap_values, + cmap_transform=cmap_values, thickness=10 ) -plot.show() +# remove clutter +figure[0, 0].axes.visible = False + +figure.show() -plot.canvas.set_logical_size(800, 800) +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide if __name__ == "__main__": print(__doc__) - fpl.run() + fpl.loop.run() diff --git a/examples/desktop/line_collection/line_collection_colors.py b/examples/line_collection/line_collection_colors.py similarity index 61% rename from examples/desktop/line_collection/line_collection_colors.py rename to examples/line_collection/line_collection_colors.py index d74f65d82..b7b25e853 100644 --- a/examples/desktop/line_collection/line_collection_colors.py +++ b/examples/line_collection/line_collection_colors.py @@ -1,10 +1,12 @@ """ -Line Plot -============ -Example showing how to plot line collections +Line Collection Colors +====================== + +Example showing one way ot setting colors for individual lines in a collection """ # test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' from itertools import product import numpy as np @@ -31,16 +33,18 @@ def make_circle(center, radius: float, n_points: int = 75) -> np.ndarray: # this will produce 16 circles so we will define 16 colors colors = ["blue"] * 4 + ["red"] * 4 + ["yellow"] * 4 + ["w"] * 4 -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") +figure = fpl.Figure(size=(700, 560)) + +figure[0, 0].add_line_collection(circles, colors=colors, thickness=10) -plot.add_line_collection(circles, colors=colors, thickness=10) +# remove clutter +figure[0, 0].axes.visible = False -plot.show() +figure.show() -plot.canvas.set_logical_size(800, 800) +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide if __name__ == "__main__": print(__doc__) - fpl.run() + fpl.loop.run() diff --git a/examples/line_collection/line_collection_slicing.py b/examples/line_collection/line_collection_slicing.py new file mode 100644 index 000000000..f829a53c6 --- /dev/null +++ b/examples/line_collection/line_collection_slicing.py @@ -0,0 +1,78 @@ +""" +Line collection slicing +======================= + +Example showing how to slice a line collection +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl + + +xs = np.linspace(0, np.pi * 10, 100) +# sine wave +ys = np.sin(xs) + +data = np.column_stack([xs, ys]) +multi_data = np.stack([data] * 15) + + +figure = fpl.Figure(size=(700, 560)) + +lines = figure[0, 0].add_line_stack( + multi_data, + thickness=[2, 10, 2, 5, 5, 5, 8, 8, 8, 9, 3, 3, 3, 4, 4], + separation=4, + metadatas=list(range(15)), # some metadata + names=list("abcdefghijklmno"), # unique name for each line +) + +print("slice a collection to return a collection indexer") +print(lines[1:5]) # lines 1, 2, 3, 4 + +print("collections supports fancy indexing!") +print(lines[::3]) + +print("fancy index using properties of individual lines!") +print(lines[lines.thickness < 3]) +print(lines[lines.metadatas > 10]) + +# set line properties, such as data +# set y-values of lines 3, 4, 5 +lines[3:6].data[:, 1] = np.cos(xs) +# set these same lines to a different color +lines[3:6].colors = "cyan" + +# setting properties using fancy indexing +# set cmap along the line collection +lines[-3:].cmap = "plasma" + +# set cmap of along a single line +lines[7].cmap = "jet" + +# fancy indexing using line properties! +lines[lines.thickness > 8].colors = "r" +lines[lines.names == "a"].colors = "b" + +# fancy index at the level of lines and individual line properties! +lines[::2].colors[::5] = "magenta" # set every 5th point of every other line to magenta +lines[3:6].colors[50:, -1] = 0.6 # set half the points alpha to 0.6 + +figure.show(maintain_aspect=False) + +# individual y axis for each line +for line in lines: + line.add_axes() + line.axes.x.visible = False + line.axes.update_using_bbox(line.world_object.get_world_bounding_box()) + +# no y axis in subplot +figure[0, 0].axes.y.visible = False + + +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/line_collection/line_stack.py b/examples/line_collection/line_stack.py new file mode 100644 index 000000000..829708cb7 --- /dev/null +++ b/examples/line_collection/line_stack.py @@ -0,0 +1,61 @@ +""" +Line Stack +========== + +Example showing how to plot a stack of lines +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl + + +xs = np.linspace(0, np.pi * 10, 100) +# sine wave +ys = np.sin(xs) + +data = np.column_stack([xs, ys]) +multi_data = np.stack([data] * 10) + +figure = fpl.Figure( + size=(700, 560), + show_tooltips=True +) + +line_stack = figure[0, 0].add_line_stack( + multi_data, # shape: (10, 100, 2), i.e. [n_lines, n_points, xy] + cmap="jet", # applied along n_lines + thickness=5, + separation=1, # spacing between lines along the separation axis, default separation along "y" axis +) + + +def tooltip_info(ev): + """A custom function to display the index of the graphic within the collection.""" + index = ev.pick_info["vertex_index"] # index of the line datapoint being hovered + + # get index of the hovered line within the line stack + line_index = np.where(line_stack.graphics == ev.graphic)[0].item() + info = f"line index: {line_index}\n" + + # append data value info + info += "\n".join(f"{dim}: {val}" for dim, val in zip("xyz", ev.graphic.data[index])) + + # return str to display in tooltip + return info + +# register the line stack with the custom tooltip function +figure.tooltip_manager.register( + line_stack, custom_info=tooltip_info +) + +figure.show(maintain_aspect=False) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/line_collection/line_stack_3d.py b/examples/line_collection/line_stack_3d.py new file mode 100644 index 000000000..b4548c1c6 --- /dev/null +++ b/examples/line_collection/line_stack_3d.py @@ -0,0 +1,108 @@ +""" +Line stack 3D +============= + +Example showing a 3D stack of lines with animations +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate' + +import numpy as np +import fastplotlib as fpl + + +xs = np.linspace(0, np.pi * 10, 100) +# spiral +ys = np.sin(xs) +zs = np.cos(xs) + +data = np.column_stack([xs, ys, zs]) +multi_data = np.stack([data] * 10) + +# create figure to plot lines and use an orbit controller in 3D +figure = fpl.Figure(cameras="3d", controller_types="orbit", size=(700, 560)) + +# make grid invisible to remove clutter +figure[0, 0].axes.grids.visible = False + +line_stack = figure[0, 0].add_line_stack( + multi_data, # shape: (10, 100, 2), i.e. [n_lines, n_points, xy] + cmap="jet", # applied along n_lines + thickness=3, + separation=1, # spacing between lines along the separation axis, default separation along "y" axis + name="lines", +) + + +x_increment = 0.1 + + +def animate_data(subplot): + """animate with different rates of spinning the spirals""" + global xs # x vals + global x_increment # increment + + # calculate the new data + # new a different spinning rate for each spiral + # top ones will spin faster than the bottom ones + new_xs = [xs + (factor * x_increment) for factor in np.linspace(0.5, 1.5, 10)] + y = [np.sin(x) for x in new_xs] + z = [np.cos(x) for x in new_xs] + + # iterate through collection and set data of each line + for i, line in enumerate(subplot["lines"]): + # set y and z values + line.data[:, 1:] = np.column_stack([y[i], z[i]]) + + x_increment += 0.1 + + +colors_iteration = 0 + + +def animate_colors(subplot): + """animate the colors""" + global colors_iteration + + # change the colors only on every 50th render cycle + # otherwise it just looks like flickering because it's too fast :) + if colors_iteration % 50 != 0: + colors_iteration += 1 + return + + # use cmap_transform to shift the cmap + cmap_transform = np.roll(np.arange(10), shift=int(colors_iteration / 50)) + + # set cmap with the transform + subplot["lines"].cmap = "jet", cmap_transform + + colors_iteration += 1 + + +figure[0, 0].add_animations(animate_data, animate_colors) + +# just a pre-saved camera state +camera_state = { + "position": np.array([-18.0, 9.0, 8.0]), + "rotation": np.array([0.00401791, -0.5951809, 0.00297593, 0.80357619]), + "scale": np.array([1.0, 1.0, 1.0]), + "reference_up": np.array([0.0, 1.0, 0.0]), + "fov": 50.0, + "width": 32, + "height": 20, + "zoom": 0.7, + "maintain_aspect": True, + "depth_range": None, +} + +figure.show(maintain_aspect=False) + +figure[0, 0].camera.set_state(camera_state) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/machine_learning/README.rst b/examples/machine_learning/README.rst new file mode 100644 index 000000000..f6830887e --- /dev/null +++ b/examples/machine_learning/README.rst @@ -0,0 +1,2 @@ +Machine Learning Examples +========================= diff --git a/examples/machine_learning/covariance.py b/examples/machine_learning/covariance.py new file mode 100644 index 000000000..d918cb6b4 --- /dev/null +++ b/examples/machine_learning/covariance.py @@ -0,0 +1,94 @@ +""" +Explore Covariance Matrix +========================= + +Example showing how you can explore a covariance matrix with a selector tool. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate 10s' + + +import fastplotlib as fpl +from sklearn import datasets +from sklearn.preprocessing import StandardScaler + +# load faces dataset +faces = datasets.fetch_olivetti_faces(n_retries=5, delay=20) +data = faces["data"] + +# sort the data so it's easier to understand the covariance matrix +targets = faces["target"] +sort_indices = targets.argsort() +targets_sorted = targets[sort_indices] + +X = data[sort_indices] + +# scale the data w.r.t. mean and standard deviation +X = StandardScaler().fit_transform(X) + +# compute covariance matrix +X = X.T +cov = X @ X.T / X.shape[1] + +# reshaped image for each sample wil be 64 x 64 pixels +img = cov[0].reshape(64, 64) + +# figure kwargs for image widget +# controller_ids = [[0, 1]] so we get independent controllers for each supblot +# the covariance matrix is 4096 x 4096 and the reshaped image ix 64 x 64 +figure_kwargs = {"size": (700, 400), "controller_ids": [[0, 1]]} + +# create image widget +iw = fpl.ImageWidget( + data=[cov, img], # display the covariance matrix and reshaped image of a row + cmap="bwr", # diverging colormap + names=["covariance", "row image"], + figure_kwargs=figure_kwargs, +) + +# graphic that corresponds to image widget data array 0 +# 0 is the covariance matrix, 1 is the reshaped image of a row from the covariance matrix + +# add a linear selector to select y axis values so we can select rows of the cov matrix +selector_cov = iw.managed_graphics[0].add_linear_selector(axis="y") + +# if you are exploring other types of matrices which are not-symmetric +# you can also add a column selector by setting axis="x" + +# set vmin vmax +for g in iw.managed_graphics: + g.vmin, g.vmax = -1, 1 + + +# event handler when the covariance matrix row changes +@selector_cov.add_event_handler("selection") +def update_img(ev): + # get the row index + ix = ev.get_selected_index() + + # get the image the corresponds to this row + img = cov[ix].reshape(64, 64) + + # change the reshaped image graphic data + iw.managed_graphics[1].data = img + + +figure = iw.figure # not required, just for the docs gallery to pick it up + + +# move the selector programmatically, this is mainly for the docs gallery +# for real use you can interact with the selector with your mouse +def animate(): + selector_cov.selection += 1 + + +iw.figure.add_animations(animate) + +iw.show() + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/machine_learning/kmeans.py b/examples/machine_learning/kmeans.py new file mode 100644 index 000000000..f571882ce --- /dev/null +++ b/examples/machine_learning/kmeans.py @@ -0,0 +1,125 @@ +""" +K-Means Clustering of MNIST Dataset +=================================== + +Example showing how you can perform K-Means clustering on the MNIST dataset. + +Use WASD keys on your keyboard to fly through the data in PCA space. +Use the mouse pointer to select points. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np +from sklearn.datasets import load_digits +from sklearn.cluster import KMeans +from sklearn.decomposition import PCA + +# load the data +mnist = load_digits() + +# get the data and labels +data = mnist['data'] # (1797, 64) +labels = mnist['target'] # (1797,) + +# visualize the first 5 digits +# NOTE: this is just to give a sense of the dataset if you are unfamiliar, +# the more interesting visualization is below :D +fig_data = fpl.Figure(shape=(1, 5), size=(900, 300)) + +# iterate through each subplot +for i, subplot in enumerate(fig_data): + # reshape each image to (8, 8) + subplot.add_image(data[i].reshape(8, 8), cmap="gray", interpolation="linear") + # add the label as a title + subplot.title = f"Label: {labels[i]}" + # turn off the axes and toolbar + subplot.axes.visible = False + subplot.toolbar = False + +fig_data.show() + +# project the data from 64 dimensions down to the number of unique digits +n_digits = len(np.unique(labels)) # 10 + +reduced_data = PCA(n_components=n_digits).fit_transform(data) # (1797, 10) + +# performs K-Means clustering, take the best of 4 runs +kmeans = KMeans(n_clusters=n_digits, n_init=4) +# fit the lower-dimension data +kmeans.fit(reduced_data) + +# get the centroids (center of the clusters) +centroids = kmeans.cluster_centers_ + +# plot the kmeans result and corresponding original image +figure = fpl.Figure( + shape=(1, 2), + size=(700, 560), + cameras=["3d", "2d"], + controller_types=["fly", "panzoom"] +) + +# set the axes to False in the image subplot +figure[0, 1].axes.visible = False + +figure[0, 0].title = "k-means clustering of PCA-reduced data" +figure[0, 1].title = "handwritten digit" + +# plot the centroids +figure[0, 0].add_scatter( + data=np.vstack([centroids[:, 0], centroids[:, 1], centroids[:, 2]]).T, + colors="white", + sizes=15 +) +# plot the down-projected data +digit_scatter = figure[0,0].add_scatter( + data=np.vstack([reduced_data[:, 0], reduced_data[:, 1], reduced_data[:, 2]]).T, + sizes=5, + cmap="tab10", # use a qualitative cmap + cmap_transform=kmeans.labels_, # color by the predicted cluster +) + +# initial index +ix = 0 + +# plot the initial image +digit_img = figure[0, 1].add_image( + data=data[ix].reshape(8,8), + cmap="gray", + name="digit", + interpolation="linear" +) + +# change the color and size of the initial selected data point +digit_scatter.colors[ix] = "magenta" +digit_scatter.sizes[ix] = 10 + + +# define event handler to update the selected data point +@digit_scatter.add_event_handler("pointer_enter") +def update(ev): + # reset colors and sizes + digit_scatter.cmap = "tab10" + digit_scatter.sizes = 5 + + # update with new seleciton + ix = ev.pick_info["vertex_index"] + + digit_scatter.colors[ix] = "magenta" + digit_scatter.sizes[ix] = 10 + + # update digit fig + figure[0, 1]["digit"].data = data[ix].reshape(8, 8) + + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() \ No newline at end of file diff --git a/examples/misc/garbage_collection.py b/examples/misc-dev/garbage_collection.py similarity index 100% rename from examples/misc/garbage_collection.py rename to examples/misc-dev/garbage_collection.py diff --git a/examples/misc/selector_performance.ipynb b/examples/misc-dev/selector_performance.ipynb similarity index 100% rename from examples/misc/selector_performance.ipynb rename to examples/misc-dev/selector_performance.ipynb diff --git a/examples/misc/README.rst b/examples/misc/README.rst new file mode 100644 index 000000000..cc51fd686 --- /dev/null +++ b/examples/misc/README.rst @@ -0,0 +1,2 @@ +Other Examples +============== diff --git a/examples/misc/cycle_animation.py b/examples/misc/cycle_animation.py new file mode 100644 index 000000000..833321453 --- /dev/null +++ b/examples/misc/cycle_animation.py @@ -0,0 +1,61 @@ +""" +Scatter Animation Colors +======================== + +Example showing animation with a scatter plot. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate' + +import fastplotlib as fpl +import numpy as np + +# create a random distribution of 10,000 xyz coordinates +n_points = 10_000 + +# dimensions always have to be [n_points, xyz] +dims = (n_points, 3) + +clouds_offset = 15 + +# create some random clouds +normal = np.random.normal(size=dims, scale=5) +# stack the data into a single array +cloud = np.vstack( + [ + normal - clouds_offset, + normal, + normal + clouds_offset, + ] +) + +# color each of them separately +colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points + +# create plot +figure = fpl.Figure(size=(700, 560)) +subplot_scatter = figure[0, 0] +# use an alpha value since this will be a lot of points +scatter_graphic = subplot_scatter.add_scatter(data=cloud, sizes=3, colors=colors, alpha=0.6) + + +i = 0.05 +def cycle_colors(subplot): + global i + # cycle the red values + scatter_graphic.colors[n_points * 2:, 0] = np.abs(np.sin(i)) + scatter_graphic.colors[n_points * 2:, 1] = np.abs(np.sin(i + (np.pi / 4))) + scatter_graphic.colors[n_points * 2:, 2] = np.abs(np.cos(i)) + i += 0.05 + +subplot_scatter.add_animations(cycle_colors) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/misc/em_wave_animation.py b/examples/misc/em_wave_animation.py new file mode 100644 index 000000000..f2b9f8de5 --- /dev/null +++ b/examples/misc/em_wave_animation.py @@ -0,0 +1,115 @@ +""" +Electromagnetic Wave Animation +============================== + +Example showing animation of an electromagnetic wave. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate 8s' + +import fastplotlib as fpl +import numpy as np + +figure = fpl.Figure( + cameras="3d", + controller_types="orbit", + size=(700, 560) +) + +start, stop = 0, 4 * np.pi + +# let's define the x, y and z axes for each with direction of wave propogation along the z-axis +# electric field in the xz plane travelling along +zs = np.linspace(start, stop, 200) +e_ys = np.zeros(200) +e_xs = np.sin(zs) +electric = np.column_stack([e_xs, e_ys, zs]) + +# magnetic field in the yz plane +zs = np.linspace(start, stop, 200) +m_ys = np.sin(zs) +m_xs = np.zeros(200) +magnetic = np.column_stack([m_xs, m_ys, zs]) + +# add the lines +figure[0, 0].add_line(electric, colors="blue", thickness=2, name="e") +figure[0, 0].add_line(magnetic, colors="red", thickness=2, name="m") + +# draw vector line at every 10th position +electric_vectors = [np.array([[0, 0, z], [x, 0, z]]) for (x, z) in zip(e_xs[::10], zs[::10])] +magnetic_vectors = [np.array([[0, 0, z], [0, y, z]]) for (y, z) in zip(m_ys[::10], zs[::10])] + +# add as a line collection +figure[0, 0].add_line_collection(electric_vectors, colors="blue", thickness=1.5, name="e-vec") +figure[0, 0].add_line_collection(magnetic_vectors, colors="red", thickness=1.5, name="m-vec") +# note that the z_offset in `add_line_collection` is not data-related +# it is the z-offset for where to place the *graphic*, by default with Orthographic cameras (i.e. 2D views) +# it will increment by 1 for each line in the collection, we want to disable this so set z_position=0 + +# just a pre-saved camera state +state = { + 'position': np.array([-8.0 , 6.0, -2.0]), + 'rotation': np.array([0.09, 0.9 , 0.2, -0.5]), + 'scale': np.array([1., 1., 1.]), + 'reference_up': np.array([0., 1., 0.]), + 'fov': 50.0, + 'width': 12, + 'height': 12, + 'zoom': 1.35, + 'maintain_aspect': True, + 'depth_range': None +} + + +figure[0, 0].camera.set_state(state) + +# make all grids except xz plane invisible to remove clutter +figure[0, 0].axes.grids.xz.visible = True + +figure.show() + +figure[0, 0].camera.zoom = 1.5 + +increment = np.pi * 4 / 100 + + +# moves the wave one step along the z-axis +def tick(subplot): + global increment, start, stop, zs + new_zs = np.linspace(start, stop, 200) + new_data = np.sin(new_zs) + + # just change the x-axis vals for the electric field + subplot["e"].data[:, 0] = new_data + subplot["e"].data[:, 2] = new_zs + # and y-axis vals for magnetic field + subplot["m"].data[:, 1] = new_data + subplot["m"].data[:, 2] = new_zs + + # update the vector lines + for i, (value, z) in enumerate(zip(new_data[::10], new_zs[::10])): + subplot["e-vec"].graphics[i].data = np.array([[0, 0, z], [value, 0, z]]) + subplot["m-vec"].graphics[i].data = np.array([[0, 0, z], [0, value, z]]) + + # update axes and center scene + subplot.axes.z.start_value = start + subplot.axes.z.update(subplot.camera, subplot.viewport.logical_size) + subplot.center_scene() + + start += increment + stop += increment + + +figure[0, 0].axes.x.visible = False +figure[0, 0].axes.y.visible = False +figure[0, 0].axes.auto_grid = False + +figure[0, 0].add_animations(tick) +print(figure[0, 0]._fpl_graphics_scene.children) + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/misc/image_animation.py b/examples/misc/image_animation.py new file mode 100644 index 000000000..1f7ff6109 --- /dev/null +++ b/examples/misc/image_animation.py @@ -0,0 +1,37 @@ +""" +Simple Image Update +=================== + +Example showing updating a single plot with new random 512x512 data. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate' + +import fastplotlib as fpl +import numpy as np + +data = np.random.rand(512, 512) + +figure = fpl.Figure(size=(700, 560)) + +# plot the image data +image_graphic = figure[0, 0].add_image(data=data, name="random-image") + + +# a function to update the image_graphic +# a figure-level animation function will optionally take the figure as an argument +def update_data(figure_instance): + new_data = np.random.rand(512, 512) + figure_instance[0, 0]["random-image"].data = new_data + +figure.add_animations(update_data) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/misc/large_img.py b/examples/misc/large_img.py deleted file mode 100644 index 021bbd6f6..000000000 --- a/examples/misc/large_img.py +++ /dev/null @@ -1,35 +0,0 @@ -from fastplotlib import Plot, run -import numpy as np - -temporal = np.load("./array_10-000x108-000.npy") - -from PIL import Image - -Image.MAX_IMAGE_PIXELS = None - -img = Image.open("/home/kushal/Downloads/gigahour_stitched_0042_bbs.png") - -a = np.array(img) - -r = np.random.randint(0, 50, a.size, dtype=np.uint8).reshape(a.shape) - -plot = Plot(renderer_kwargs={"show_fps": True}) -plot.add_heatmap(r) -# plot.camera.scale.y = 0.2 -plot.show() - -r = np.random.randint(0, 50, a.size, dtype=np.uint8).reshape(a.shape) -r2 = np.random.randint(0, 50, a.size, dtype=np.uint8).reshape(a.shape) -r3 = np.random.randint(0, 50, a.size, dtype=np.uint8).reshape(a.shape) - -rs = [r, r2, r3] -i = 0 - -def update_frame(p): - global i - p.graphics[0].data[:] = rs[i % 3] - i +=1 - -plot.add_animations(update_frame) - -run() diff --git a/examples/misc/line3d_animation.py b/examples/misc/line3d_animation.py new file mode 100644 index 000000000..c1d903e02 --- /dev/null +++ b/examples/misc/line3d_animation.py @@ -0,0 +1,61 @@ +""" +Simple 3D Line Animation +======================== + +Example showing animation with 3D lines. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate 8s' + +import numpy as np +import fastplotlib as fpl + +# create data in the shape of a spiral +phi = np.linspace(0, 30, 200) + +xs = phi * np.cos(phi) +ys = phi * np.sin(phi) +zs = phi + +# make data 3d, with shape [, 3] +spiral = np.dstack([xs, ys, zs])[0] + +figure = fpl.Figure(cameras="3d", size=(700, 560)) + +line_graphic = figure[0,0].add_line(data=spiral, thickness=3, cmap='jet') + +marker = figure[0,0].add_scatter(data=spiral[0], sizes=10, name="marker") + +marker_index = 0 + + +# a function to move the ball along the spiral +def move_marker(): + global marker_index + + marker_index += 1 + + if marker_index == spiral.shape[0]: + marker_index = 0 + + for subplot in figure: + subplot["marker"].data = spiral[marker_index] + + +# add `move_marker` to the animations +figure.add_animations(move_marker) + +# remove clutter +figure[0, 0].axes.grids.xy.visible = True +figure[0, 0].axes.grids.xz.visible = True + + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/misc/line_animation.py b/examples/misc/line_animation.py new file mode 100644 index 000000000..86448a78b --- /dev/null +++ b/examples/misc/line_animation.py @@ -0,0 +1,50 @@ +""" +Simple Line Animation +===================== + +Example showing animation with lines. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate' + +import fastplotlib as fpl +import numpy as np + +# generate some data +start, stop = 0, 2 * np.pi +increment = (2 * np.pi) / 50 + +# make a simple sine wave +xs = np.linspace(start, stop, 100) +ys = np.sin(xs) + +figure = fpl.Figure(size=(700, 560)) + +# plot the image data +sine = figure[0, 0].add_line(ys, name="sine", colors="r") + + +# increment along the x-axis on each render loop :D +def update_line(subplot): + global increment, start, stop + xs = np.linspace(start + increment, stop + increment, 100) + ys = np.sin(xs) + + start += increment + stop += increment + + # change only the y-axis values of the line + subplot["sine"].data[:, 1] = ys + + +figure[0, 0].add_animations(update_line) + +figure.show(maintain_aspect=False) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/misc/lorenz_animation.py b/examples/misc/lorenz_animation.py new file mode 100644 index 000000000..20aee5d83 --- /dev/null +++ b/examples/misc/lorenz_animation.py @@ -0,0 +1,93 @@ +""" +Lorenz System Animation +======================= + +Example of the Lorenz attractor. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate 10s' + +import fastplotlib as fpl +import numpy as np + + +# generate data +def lorenz(xyz, *, s=10, r=28, b=2.667): + """ + Parameters + ---------- + xyz : array-like, shape (3,) + Point of interest in three-dimensional space. + s, r, b : float + Parameters defining the Lorenz attractor. + + Returns + ------- + xyz_dot : array, shape (3,) + Values of the Lorenz attractor's partial derivatives at *xyz*. + """ + x, y, z = xyz + x_dot = s * (y - x) + y_dot = r * x - y - x * z + z_dot = x * y - b * z + return np.array([x_dot, y_dot, z_dot]) + + +dt = 0.01 +num_steps = 3_000 + +lorenz_data = np.empty((5, num_steps + 1, 3)) + +for i in range(5): + xyzs = np.empty((num_steps + 1, 3)) # Need one more for the initial values + xyzs[0] = (0., (i * 0.3) + 1, 1.05) # Set initial values + # Step through "time", calculating the partial derivatives at the current point + # and using them to estimate the next point + for j in range(num_steps): + xyzs[j + 1] = xyzs[j] + lorenz(xyzs[j]) * dt + + lorenz_data[i] = xyzs + +figure = fpl.Figure( + cameras="3d", + controller_types="fly", + size=(700, 560) +) + +lorenz_line = figure[0, 0].add_line_collection(data=lorenz_data, thickness=.1, cmap="tab10") + +scatter_markers = list() + +for graphic in lorenz_line: + marker = figure[0, 0].add_scatter(graphic.data.value[0], sizes=16, colors=graphic.colors[0]) + scatter_markers.append(marker) + +# initialize time +time = 0 + + +def animate(subplot): + global time + + time += 2 + + if time >= xyzs.shape[0]: + time = 0 + + for scatter, g in zip(scatter_markers, lorenz_line): + scatter.data = g.data.value[time] + + +figure[0, 0].add_animations(animate) + +figure.show() + +# set initial camera position to make animation in gallery render better +figure[0, 0].camera.world.z = 80 + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/misc/multiplot_animation.py b/examples/misc/multiplot_animation.py new file mode 100644 index 000000000..789ce744e --- /dev/null +++ b/examples/misc/multiplot_animation.py @@ -0,0 +1,48 @@ +""" +Multi-Subplot Image Update +========================== + +Multiple subplots with an image that updates with new data on every render. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate' + +import fastplotlib as fpl +import numpy as np + +# Figure of shape 2 x 3 with all controllers synced +figure = fpl.Figure(shape=(2, 3), controller_ids="sync", size=(700, 560)) + +# Make a random image graphic for each subplot +for subplot in figure: + # create image data + data = np.random.rand(512, 512) + # add an image to the subplot + subplot.add_image(data, name="rand-img") + +figure[0,1]["rand-img"].cmap = "viridis" +figure[1,0]["rand-img"].cmap = "Wistia" +figure[0,2]["rand-img"].cmap = "gray" +figure[1,1]["rand-img"].cmap = "spring" + +# Define a function to update the image graphics with new data +# add_animations will pass the figure to the animation function +def update_data(f): + for subplot in f: + new_data = np.random.rand(512, 512) + # index the image graphic by name and set the data + subplot["rand-img"].data = new_data + +# add the animation function +figure.add_animations(update_data) + +# show the figure +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/misc/scatter_animation.py b/examples/misc/scatter_animation.py new file mode 100644 index 000000000..ee8d2a10a --- /dev/null +++ b/examples/misc/scatter_animation.py @@ -0,0 +1,58 @@ +""" +Scatter Animation Data +====================== + +Example showing animation with a scatter plot. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate' + +import fastplotlib as fpl +import numpy as np + +# create a random distribution of 10,000 xyz coordinates +n_points = 10_000 + +# dimensions always have to be [n_points, xyz] +dims = (n_points, 3) + +clouds_offset = 15 + +# create some random clouds +normal = np.random.normal(size=dims, scale=5) +# stack the data into a single array +cloud = np.vstack( + [ + normal - clouds_offset, + normal, + normal + clouds_offset, + ] +) + +# color each of them separately +colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points + +# create plot +figure = fpl.Figure(size=(700, 560)) +subplot_scatter = figure[0, 0] +# use an alpha value since this will be a lot of points +scatter_graphic = subplot_scatter.add_scatter(data=cloud, sizes=3, colors=colors, alpha=0.6) + + +def update_points(subplot): + # move every point by a small amount + deltas = np.random.normal(size=scatter_graphic.data.value.shape, loc=0, scale=0.15) + scatter_graphic.data = scatter_graphic.data.value + deltas + + +subplot_scatter.add_animations(update_points) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/misc/scatter_sizes_animation.py b/examples/misc/scatter_sizes_animation.py new file mode 100644 index 000000000..53a616a68 --- /dev/null +++ b/examples/misc/scatter_sizes_animation.py @@ -0,0 +1,47 @@ +""" +Scatter sizes animation +======================= + +Animate scatter sizes +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate 6s' + +import numpy as np +import fastplotlib as fpl + +xs = np.linspace(0, 10 * np.pi, 1_000) +# sine wave +ys = np.sin(xs) +data = np.column_stack([xs, ys]) + +sizes = np.abs(ys) * 5 + +figure = fpl.Figure(size=(700, 560)) + +figure[0, 0].add_scatter(data, sizes=sizes, name="sine") + + +i = 0 +def update_sizes(subplot): + global i + + xs = np.linspace(0.1 * i, (10 * np.pi) + (0.1 * i), 1_000) + sizes = np.abs(np.sin(xs)) * 5 + + subplot["sine"].sizes = sizes + + i += 1 + + +figure[0, 0].add_animations(update_sizes) + +figure.show(maintain_aspect=False) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/misc/tooltips.py b/examples/misc/tooltips.py new file mode 100644 index 000000000..cad3d807c --- /dev/null +++ b/examples/misc/tooltips.py @@ -0,0 +1,54 @@ +""" +Tooltips +======== + +Show tooltips on all graphics +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import imageio.v3 as iio +import fastplotlib as fpl + + +# get some data +scatter_data = np.random.rand(1_000, 3) + +xs = np.linspace(0, 2 * np.pi, 100) +ys = np.sin(xs) + +gray = iio.imread("imageio:camera.png") +rgb = iio.imread("imageio:astronaut.png") + +# create a figure +figure = fpl.Figure( + cameras=["3d", "2d", "2d", "2d"], + controller_types=["orbit", "panzoom", "panzoom", "panzoom"], + size=(700, 560), + shape=(2, 2), + show_tooltips=True, # tooltip will display data value info for all graphics +) + +# create graphics +scatter = figure[0, 0].add_scatter(scatter_data, sizes=3, colors="r") +line = figure[0, 1].add_line(np.column_stack([xs, ys])) +image = figure[1, 0].add_image(gray) +image_rgb = figure[1, 1].add_image(rgb) + + +figure.show() + +# to hide tooltips for all graphics in an existing Figure +# figure.show_tooltips = False + +# to show tooltips for all graphics in an existing Figure +# figure.show_tooltips = True + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/misc/tooltips_custom.py b/examples/misc/tooltips_custom.py new file mode 100644 index 000000000..a62190906 --- /dev/null +++ b/examples/misc/tooltips_custom.py @@ -0,0 +1,54 @@ +""" +Tooltips Customization +====================== + +Customize the information displayed in a tooltip. This example uses the Iris dataset and sets the tooltip to display +the species and cluster label of the point that is being hovered by the mouse pointer. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + + +import fastplotlib as fpl +from sklearn.cluster import AgglomerativeClustering +from sklearn import datasets + + +figure = fpl.Figure(size=(700, 560)) + +dataset = datasets.load_iris() +data = dataset["data"] + +agg = AgglomerativeClustering(n_clusters=3) +agg.fit_predict(data) + +scatter_graphic = figure[0, 0].add_scatter( + data=data[:, :-1], # use only xy data + sizes=15, + cmap="Set1", + cmap_transform=agg.labels_ # use the labels as a transform to map colors from the colormap +) + + +def tooltip_info(ev) -> str: + # get index of the scatter point that is being hovered + index = ev.pick_info["vertex_index"] + + # get the species name + target = dataset["target"][index] + cluster = agg.labels_[index] + info = f"species: {dataset['target_names'][target]}\ncluster: {cluster}" + + # return this string to display it in the tooltip + return info + + +figure.tooltip_manager.register(scatter_graphic, custom_info=tooltip_info) + +figure.show() + + +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/notebooks/gridplot.ipynb b/examples/notebooks/gridplot.ipynb deleted file mode 100644 index cfcae3705..000000000 --- a/examples/notebooks/gridplot.ipynb +++ /dev/null @@ -1,286 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "3cfc2d9f-6a09-42f4-a47c-3ba51f1a1801", - "metadata": {}, - "source": [ - "### More in-depth on `GridPlot`" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "a635b3b3-33fa-48f0-b1cc-bf83b1e883ab", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from fastplotlib import GridPlot" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "8de931e2-bdb3-44a3-9538-e0b3965779af", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "62f67ebf3b00494c826d92fc5b8bbf76", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "RFBOutputContext()" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
initial snapshot
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "b6262056cff84619aea08fc48d00eb79", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "JupyterWgpuCanvas()" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# grid with 2 rows and 3 columns\n", - "grid_shape = (2, 3)\n", - "\n", - "# pan-zoom controllers for each view\n", - "# views are synced if they have the \n", - "# same controller ID\n", - "controllers = [\n", - " [0, 3, 1], # id each controller with an integer\n", - " [2, 2, 3]\n", - "]\n", - "\n", - "\n", - "# you can give string names for each subplot within the gridplot\n", - "names = [\n", - " [\"subplot0\", \"subplot1\", \"subplot2\"],\n", - " [\"subplot3\", \"subplot4\", \"subplot5\"]\n", - "]\n", - "\n", - "# Create the grid plot\n", - "grid_plot = GridPlot(\n", - " shape=grid_shape,\n", - " controllers=controllers,\n", - " names=names,\n", - ")\n", - "\n", - "\n", - "# Make a random image graphic for each subplot\n", - "for subplot in grid_plot:\n", - " data = np.random.rand(512, 512)\n", - " # create and add an ImageGraphic\n", - " subplot.add_image(data=data, name=\"rand-image\")\n", - " \n", - "\n", - "# Define a function to update the image graphics \n", - "# with new randomly generated data\n", - "def set_random_frame(gp):\n", - " for subplot in gp:\n", - " new_data = np.random.rand(512, 512)\n", - " subplot[\"rand-image\"].data = new_data\n", - "\n", - "# add the animation\n", - "grid_plot.add_animations(set_random_frame)\n", - "grid_plot.show()" - ] - }, - { - "cell_type": "markdown", - "id": "2867bcd6-7691-4073-91d9-9c33e8fdb896", - "metadata": {}, - "source": [ - "### Indexing the gridplot to access subplots" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "2a6f7eb5-776e-42a6-b6c2-c26009a26795", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "subplot0: Subplot @ 0x7fd496b32830\n", - " parent: None\n", - " Graphics:\n", - "\t'rand-image': ImageGraphic @ 0x7fd496b327d0" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# can access subplot by name\n", - "grid_plot[\"subplot0\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "45e83bca-5a44-48ce-874f-9ae9ca444233", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "subplot0: Subplot @ 0x7fd496b32830\n", - " parent: None\n", - " Graphics:\n", - "\t'rand-image': ImageGraphic @ 0x7fd496b327d0" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# can access subplot by index\n", - "grid_plot[0, 0]" - ] - }, - { - "cell_type": "markdown", - "id": "3272b8b3-3063-47a4-94c8-15ceeeaecc69", - "metadata": {}, - "source": [ - "## subplots also support indexing!\n", - "this can be used to get graphics if they are named" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "c8cf9bfd-e0cc-4173-b64e-a9f2c87bb2c6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'rand-image': ImageGraphic @ 0x7fd496b327d0" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# can access graphic directly via name\n", - "grid_plot[\"subplot0\"][\"rand-image\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "1cfd1d45-8a60-4fc1-b873-46caa966fe6f", - "metadata": {}, - "outputs": [], - "source": [ - "grid_plot[\"subplot0\"][\"rand-image\"].vmin = 0.6\n", - "grid_plot[\"subplot0\"][\"rand-image\"].vmax = 0.8" - ] - }, - { - "cell_type": "markdown", - "id": "516a46e1-cc53-4137-b49b-d5fb94e212d7", - "metadata": {}, - "source": [ - "### positional indexing also works event if subplots have string names" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "2fafe992-4783-40f2-b044-26a2835dd50a", - "metadata": {}, - "outputs": [], - "source": [ - "grid_plot[1, 0][\"rand-image\"].vim = 0.1\n", - "grid_plot[1, 0][\"rand-image\"].vmax = 0.3" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "a025b76c-77f8-4aeb-ac33-5bb6d0bb5a9a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'image'" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grid_plot[1, 0][\"rand-image\"].type" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "62584f91-a8ed-4317-98ee-28ad6d1800d6", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.5" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/notebooks/gridplot_simple.ipynb b/examples/notebooks/gridplot_simple.ipynb deleted file mode 100644 index 8b50b2701..000000000 --- a/examples/notebooks/gridplot_simple.ipynb +++ /dev/null @@ -1,327 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0e42f03b-9cdf-484f-b158-78b07fdf524d", - "metadata": {}, - "source": [ - "## This notebook shows how you can use more of the `fastplotlib` API to create `Graphic` objects and add them to a `GridPlot`" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "5171a06e-1bdc-4908-9726-3c1fd45dbb9d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from fastplotlib import GridPlot" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "86a2488f-ae1c-4b98-a7c0-18eae8013af1", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f9067cd724094b8c8dfecf60208acbfa", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "RFBOutputContext()" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/clewis7/repos/fastplotlib/fastplotlib/graphics/_features/_base.py:34: UserWarning: converting float64 array to float32\n", - " warn(f\"converting {array.dtype} array to float32\")\n" - ] - } - ], - "source": [ - "# GridPlot of shape 2 x 3 with all controllers synced\n", - "grid_plot = GridPlot(shape=(2, 3), controllers=\"sync\")\n", - "\n", - "# Make a random image graphic for each subplot\n", - "for subplot in grid_plot:\n", - " # create image data\n", - " data = np.random.rand(512, 512)\n", - " # add an image to the subplot\n", - " subplot.add_image(data, name=\"rand-img\")\n", - "\n", - "# Define a function to update the image graphics with new data\n", - "# add_animations will pass the gridplot to the animation function\n", - "def update_data(gp):\n", - " for sp in gp:\n", - " new_data = np.random.rand(512, 512)\n", - " # index the image graphic by name and set the data\n", - " sp[\"rand-img\"].data = new_data\n", - " \n", - "# add the animation function\n", - "grid_plot.add_animations(update_data)\n", - "\n", - "# show the gridplot \n", - "grid_plot.show()" - ] - }, - { - "cell_type": "markdown", - "id": "e7801781-c3e9-490f-ab12-1cd2f480d3e9", - "metadata": {}, - "source": [ - "## Accessing subplots within `GridPlot`" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "17c6bc4a-5340-49f1-8597-f54528cfe915", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "unnamed: Subplot @ 0x7f15df4f5c50\n", - " parent: fastplotlib.GridPlot @ 0x7f15d3f27890\n", - "\n", - " Graphics:\n", - "\t'rand-img': ImageGraphic @ 0x7f15d3fb5390" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# positional indexing\n", - "# row 0 and col 0\n", - "grid_plot[0, 0]" - ] - }, - { - "cell_type": "markdown", - "id": "276dfede-e9bc-4488-b9e6-3ca5cf91e4dc", - "metadata": {}, - "source": [ - "### You can get the graphics within a subplot, just like with simple `Plot`" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "34130f12-9ef6-43b0-b929-931de8b7da25", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(,)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grid_plot[0, 1].graphics" - ] - }, - { - "cell_type": "markdown", - "id": "bf33f3e7-ab16-46b1-9126-f0a1ecc07541", - "metadata": {}, - "source": [ - "### and change their properties" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "ef8a29a6-b19c-4e6b-a2ba-fb4823c01451", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "grid_plot[0, 1].graphics[0].cmap.vmax = 0.5" - ] - }, - { - "cell_type": "markdown", - "id": "00506fa1-2dc0-4435-96a0-e50667d3174f", - "metadata": {}, - "source": [ - "### more indexing with `GridPlot`" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "d6c2fa4b-c634-4dcf-8b61-f1986f7c4918", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# you can give subplots human-readable string names\n", - "grid_plot[0, 2].name = \"top-right-plot\"" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "2f6b549c-3165-496d-98aa-45b96c3de674", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "top-right-plot: Subplot @ 0x7f15d3f769d0\n", - " parent: fastplotlib.GridPlot @ 0x7f15d3f27890\n", - "\n", - " Graphics:\n", - "\t'rand-img': ImageGraphic @ 0x7f15b83f7250" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grid_plot[\"top-right-plot\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "be436e04-33a6-4597-8e6a-17e1e5225419", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 2)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# view its position\n", - "grid_plot[\"top-right-plot\"].position" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "6699cda6-af86-4258-87f5-1832f989a564", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# these are really the same\n", - "grid_plot[\"top-right-plot\"] is grid_plot[0, 2]" - ] - }, - { - "cell_type": "markdown", - "id": "aac2f6bf-a641-4c86-a3d2-2cb7906ba914", - "metadata": {}, - "source": [ - "Indexing with subplot name and graphic name" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "545b627b-d794-459a-a75a-3fde44f0ea95", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "grid_plot[\"top-right-plot\"][\"rand-img\"].vmin = 0.5" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "36432d5b-b76c-4a2a-a32c-097faf5ab269", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "grid_plot.close()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b507b723-1371-44e7-aa6d-6aeb3196b27d", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/notebooks/heatmap.ipynb b/examples/notebooks/heatmap.ipynb deleted file mode 100644 index 82583b1df..000000000 --- a/examples/notebooks/heatmap.ipynb +++ /dev/null @@ -1,110 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "d8c90f4b-b635-4027-b7d5-080d77bd40a3", - "metadata": {}, - "source": [ - "# The `HeatmapGraphic` is useful for looking at very large arrays\n", - "\n", - "`ImageGraphic` is limited to a max size of `8192 x 8192`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "49b2498d-56ae-4559-9282-c8484f3e6b6d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import fastplotlib as fpl" - ] - }, - { - "cell_type": "markdown", - "id": "908f93f8-68c3-4a36-8f40-e0aab560955d", - "metadata": {}, - "source": [ - "## Generate some sine and cosine data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "40718465-abf6-4727-8bd7-4acdd59843d5", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "xs = np.linspace(0, 50, 10_000)\n", - "\n", - "sine_data = np.sin(xs)\n", - "\n", - "cosine_data = np.cos(xs)\n", - "\n", - "data = np.vstack([(sine_data, cosine_data) for i in range(5)])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "02b072eb-2909-40c8-8739-950f07efbbc2", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "data.shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "84deb31b-5464-4cce-a938-694371011021", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot = fpl.Plot()\n", - "\n", - "plot.add_heatmap(data, cmap=\"viridis\")\n", - "\n", - "plot.show(maintain_aspect=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "df3f8994-0f5b-4578-a36d-4cd9bf0733c0", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/notebooks/image_widget.ipynb b/examples/notebooks/image_widget.ipynb index d8f91c1be..5136ba028 100644 --- a/examples/notebooks/image_widget.ipynb +++ b/examples/notebooks/image_widget.ipynb @@ -10,7 +10,9 @@ "outputs": [], "source": [ "from fastplotlib.widgets import ImageWidget\n", - "import numpy as np" + "import numpy as np\n", + "\n", + "import imageio.v3 as iio # not a fastplotlib dependency, only used for examples" ] }, { @@ -30,7 +32,8 @@ }, "outputs": [], "source": [ - "a = np.random.rand(512, 512)" + "# image widget only supports grayscale images for now\n", + "a = iio.imread(\"imageio:camera.png\")" ] }, { @@ -63,7 +66,7 @@ "id": "b718162f-9aa6-4091-a7a4-c620676b48bd", "metadata": {}, "source": [ - "### can dynamically change features" + "### Access graphics managed by the image widget" ] }, { @@ -75,7 +78,7 @@ }, "outputs": [], "source": [ - "iw.gridplot[0, 0].graphics[0].cmap = \"gnuplot2\"" + "iw.figure[0, 0][\"image_widget_managed\"].cmap = \"gnuplot2\"" ] }, { @@ -95,7 +98,10 @@ }, "outputs": [], "source": [ - "a = np.random.rand(500, 512, 512)" + "movie = iio.imread(\"imageio:cockatoo.mp4\")\n", + "\n", + "# convert RGB movie to grayscale, this could take a minute\n", + "gray_movie = np.dot(movie[..., :3], [0.299, 0.587, 0.114])" ] }, { @@ -107,10 +113,9 @@ }, "outputs": [], "source": [ - "iw2 = ImageWidget(\n", - " data=a, \n", - " slider_dims=[\"t\"],\n", - " cmap=\"gnuplot2\"\n", + "iw_movie = ImageWidget(\n", + " data=gray_movie, \n", + " cmap=\"gray\"\n", ")" ] }, @@ -123,7 +128,7 @@ }, "outputs": [], "source": [ - "iw2.show()" + "iw_movie.show(sidecar=True)" ] }, { @@ -146,7 +151,7 @@ "outputs": [], "source": [ "# must be in the form of {dim: (func, window_size)}\n", - "iw2.window_funcs = {\"t\": (np.mean, 13)}" + "iw_movie.window_funcs = {\"t\": (np.mean, 13)}" ] }, { @@ -159,7 +164,7 @@ "outputs": [], "source": [ "# change the winow size\n", - "iw2.window_funcs[\"t\"].window_size = 23" + "iw_movie.window_funcs[\"t\"].window_size = 33" ] }, { @@ -172,7 +177,7 @@ "outputs": [], "source": [ "# change the function\n", - "iw2.window_funcs[\"t\"].func = np.max" + "iw_movie.window_funcs[\"t\"].func = np.max" ] }, { @@ -184,8 +189,8 @@ }, "outputs": [], "source": [ - "# or set it again\n", - "iw2.window_funcs = {\"t\": (np.min, 11)}" + "# or reset it\n", + "iw_movie.window_funcs = None" ] }, { @@ -196,6 +201,26 @@ "### Can also set new data" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "f9ee0e42-3d41-4613-a508-042c6c2c27e3", + "metadata": {}, + "outputs": [], + "source": [ + "new_data = iio.imread(\"imageio:stent.npz\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b85d2e08-1479-46fc-a429-2d7a265493d4", + "metadata": {}, + "outputs": [], + "source": [ + "new_data.shape" + ] + }, { "cell_type": "code", "execution_count": null, @@ -205,8 +230,18 @@ }, "outputs": [], "source": [ - "new_data = np.random.rand(500, 512, 512)\n", - "iw2.set_data(new_data=new_data)" + "iw_movie.set_data(new_data=new_data)\n", + "iw_movie.figure[0, 0].auto_scale()# sidecar is optional" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3d323f67-4717-4241-ad84-5091e6caf2cd", + "metadata": {}, + "outputs": [], + "source": [ + "iw_movie.close()" ] }, { @@ -214,7 +249,7 @@ "id": "aca22179-1b1f-4c51-97bf-ce2d7044e451", "metadata": {}, "source": [ - "# Gridplot of txy data" + "# Gridplot of tzxy data" ] }, { @@ -226,8 +261,29 @@ }, "outputs": [], "source": [ - "dims = (100, 512, 512)\n", - "data = [np.random.rand(*dims) for i in range(4)]" + "zfish_data = np.load(\"./zfish_test.npy\")\n", + "# snippet of a dataset from Martin Haesemeyer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b015720c-3de1-4575-80c5-d6eabe4b305f", + "metadata": {}, + "outputs": [], + "source": [ + "# data is tzxy\n", + "zfish_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fdff388e-d44c-41ff-a177-801f2695fb88", + "metadata": {}, + "outputs": [], + "source": [ + "n_planes = zfish_data.shape[1]" ] }, { @@ -239,22 +295,20 @@ }, "outputs": [], "source": [ - "iw3 = ImageWidget(\n", - " data=data, \n", - " slider_dims=[\"t\"], \n", - " # dims_order=\"txy\", # you can set this manually if dim order is not the usual\n", - " names=[\"zero\", \"one\", \"two\", \"three\"],\n", + "iw_zfish = ImageWidget(\n", + " data=[zfish_data[:, i] for i in range(n_planes)],\n", " window_funcs={\"t\": (np.mean, 5)},\n", + " names=[f\"plane-{i}\" for i in range(n_planes)],\n", " cmap=\"gnuplot2\", \n", ")" ] }, { "cell_type": "markdown", - "id": "0721dc40-677e-431d-94c6-da59606199cb", + "id": "037d899e-9e7c-4d58-a021-5f5b71e1db90", "metadata": {}, "source": [ - "### pan-zoom controllers are all synced in a `ImageWidget`" + "pan-zoom controllers are all synced across subplots in a `ImageWidget`" ] }, { @@ -266,7 +320,7 @@ }, "outputs": [], "source": [ - "iw3.show()" + "iw_zfish.show(sidecar=True)" ] }, { @@ -274,7 +328,7 @@ "id": "82545214-13c4-475e-87da-962117085834", "metadata": {}, "source": [ - "### Index the subplots using the names given to `ImageWidget`" + "Access the subplots using the names given to `ImageWidget`" ] }, { @@ -286,7 +340,7 @@ }, "outputs": [], "source": [ - "iw3.gridplot[\"two\"]" + "iw_zfish.figure[\"plane-2\"]" ] }, { @@ -294,7 +348,7 @@ "id": "dc727d1a-681e-4cbf-bfb2-898ceb31cbe0", "metadata": {}, "source": [ - "### change window functions just like before" + "change window functions" ] }, { @@ -306,70 +360,110 @@ }, "outputs": [], "source": [ - "iw3.window_funcs[\"t\"].func = np.max" + "iw_zfish.window_funcs[\"t\"].func = np.max" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ceeab465-bafa-4834-8775-d0e35bc5c880", + "metadata": {}, + "outputs": [], + "source": [ + "iw_zfish.window_funcs = None" ] }, { "cell_type": "markdown", - "id": "3e89c10f-6e34-4d63-9805-88403d487432", + "id": "8e16a503-0213-4e83-abd3-d1fd202cc193", "metadata": {}, "source": [ - "## Gridplot of volumetric data" + "**Frame-apply functions**\n", + "\n", + "These are applied on a frame before being displayed in the `ImageGraphic`" ] }, { "cell_type": "code", "execution_count": null, - "id": "b1587410-a08e-484c-8795-195a413d6374", - "metadata": { - "tags": [] - }, + "id": "9557f0a1-b8fd-4dfe-ac3f-47c90ce78625", + "metadata": {}, "outputs": [], "source": [ - "dims = (256, 256, 5, 100)\n", - "data = [np.random.rand(*dims) for i in range(4)]\n", - "\n", - "iw4 = ImageWidget(\n", - " data=data, \n", - " slider_dims=[\"t\", \"z\"], \n", - " dims_order=\"xyzt\", # example of how you can set this for non-standard orders\n", - " names=[\"zero\", \"one\", \"two\", \"three\"],\n", - " # window_funcs={\"t\": (np.mean, 5)}, # window functions can be slow when indexing multiple dims\n", - " cmap=\"gnuplot2\", \n", - ")" + "# scipy isn't a fastplotlib dependency, it's just used for this example\n", + "from scipy.ndimage import gaussian_filter" ] }, { "cell_type": "code", "execution_count": null, - "id": "3ccea6c6-9580-4720-bce8-a5507cf867a3", - "metadata": { - "tags": [] - }, + "id": "f87d7e33-93bc-46e3-9cd1-6c648b132841", + "metadata": {}, + "outputs": [], + "source": [ + "iw_zfish.frame_apply = lambda frame: gaussian_filter(frame.astype(np.float32), sigma=3)\n", + "iw_zfish.reset_vmin_vmax()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b0aa161-89f1-48e4-9976-4a6996f1e7e9", + "metadata": {}, "outputs": [], "source": [ - "iw4.show()" + "# remove the frame-apply function\n", + "iw_zfish.frame_apply = None\n", + "iw_zfish.reset_vmin_vmax()" ] }, { "cell_type": "markdown", - "id": "2382809c-4c7d-4da4-9955-71d316dee46a", + "id": "3e89c10f-6e34-4d63-9805-88403d487432", "metadata": {}, "source": [ - "### window functions, can be slow when you have \"t\" and \"z\"" + "## z-sliders\n", + "\n", + "ImageWidget will also give you a slider for \"z\" in addition to \"t\" if necessary. \n", + "\n", + "This example uses the same example data shown above, but displays them in a single subplot and `ImageWidget` provides a z-slider. You can use `window_funcs`, `frame_apply` funcs, etc. There is no difference in `ImageWidget` behavior with the z-slider." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1587410-a08e-484c-8795-195a413d6374", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "iw_z = ImageWidget(\n", + " data=zfish_data, # you can also provide a list of tzxy arrays\n", + " window_funcs={\"t\": (np.mean, 5)},\n", + " cmap=\"gnuplot2\", \n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "fd4433a9-2add-417c-a618-5891371efae0", + "id": "3ccea6c6-9580-4720-bce8-a5507cf867a3", "metadata": { "tags": [] }, "outputs": [], "source": [ - "iw4.window_funcs = {\"t\": (np.mean, 11)}" + "iw_z.show()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aba0fa3a-f844-4937-8615-adbded02345d", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/examples/notebooks/image_widget_test.ipynb b/examples/notebooks/image_widget_test.ipynb new file mode 100644 index 000000000..2c05db6b0 --- /dev/null +++ b/examples/notebooks/image_widget_test.ipynb @@ -0,0 +1,545 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "07019035-83f2-4753-9e7c-628ae439b441", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from fastplotlib.widgets import ImageWidget\n", + "import numpy as np\n", + "from scipy.ndimage import gaussian_filter\n", + "\n", + "import imageio.v3 as iio" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10b8ab40-944d-472c-9b7e-cae8a129e7ce", + "metadata": {}, + "outputs": [], + "source": [ + "from nb_test_utils import plot_test, notebook_finished" + ] + }, + { + "cell_type": "markdown", + "id": "0a9fe48a-cc24-4ecf-b442-b7425ce338d3", + "metadata": {}, + "source": [ + "# Single image" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "01dd4b84-2960-4c26-8162-f0499698e593", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "a = iio.imread(\"imageio:camera.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f9d98a12-9574-4b47-9271-013e659cb93f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "iw = ImageWidget(\n", + " data=a,\n", + " cmap=\"viridis\",\n", + " figure_kwargs={\"size\": (900, 600)},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e9d86a12-b5f2-4ad7-bd70-4715c80b5ece", + "metadata": {}, + "outputs": [], + "source": [ + "iw.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "920ef882-e5e6-45b6-b002-5ed26aa3134e", + "metadata": {}, + "outputs": [], + "source": [ + "plot_test(\"image-widget-single\", iw.figure)\n", + "iw.figure[0, 0][\"image_widget_managed\"].cmap = \"gnuplot2\"\n", + "plot_test(\"image-widget-single-gnuplot2\", iw.figure)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26120b76-c7b0-4e23-bdb1-411be1944687", + "metadata": {}, + "outputs": [], + "source": [ + "iw.close()" + ] + }, + { + "cell_type": "markdown", + "id": "ffde9820-b388-4f22-b7fd-d55a2ad421ad", + "metadata": {}, + "source": [ + "# Single image sequence" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2067c88f-2b71-4036-a413-59355fa64292", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "movie = iio.imread(\"imageio:cockatoo.mp4\")\n", + "\n", + "# convert RGB movie to grayscale, this could take a minute\n", + "gray_movie = np.dot(movie[..., :3], [0.299, 0.587, 0.114])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "05d3a905-849b-42ae-82ac-34bdc28c1414", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "iw_movie = ImageWidget(\n", + " data=gray_movie, \n", + " cmap=\"gray\",\n", + " figure_kwargs={\"size\": (900, 600)},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "92df8b8c-8d9f-4111-9b3b-fdab7cc7b3f4", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "iw_movie.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ac0a7fc0-0323-4b9e-8c70-3ddc735b7893", + "metadata": {}, + "outputs": [], + "source": [ + "# testing cell ignore\n", + "assert iw_movie._dims_max_bounds[\"t\"] == gray_movie.shape[0]\n", + "\n", + "plot_test(\"image-widget-movie-single-0\", iw_movie.figure)\n", + "\n", + "iw_movie.current_index = {\"t\": 50}\n", + "plot_test(\"image-widget-movie-single-50\", iw_movie.figure)\n", + "\n", + "iw_movie.current_index = {\"t\": 279}\n", + "plot_test(\"image-widget-movie-single-279\", iw_movie.figure)\n", + "\n", + "iw_movie.current_index = {\"t\": 0}\n", + "plot_test(\"image-widget-movie-single-0-reset\", iw_movie.figure)\n", + "\n", + "iw_movie.current_index = {\"t\": 50}\n", + "iw_movie.window_funcs = {\"t\": (np.mean, 13)}\n", + "\n", + "plot_test(\"image-widget-movie-single-50-window-mean-13\", iw_movie.figure)\n", + "iw_movie.window_funcs[\"t\"].window_size = 33\n", + "\n", + "plot_test(\"image-widget-movie-single-50-window-mean-33\", iw_movie.figure)\n", + "iw_movie.window_funcs[\"t\"].func = np.max\n", + "\n", + "plot_test(\"image-widget-movie-single-50-window-max-33\", iw_movie.figure)\n", + "iw_movie.window_funcs = None\n", + "\n", + "plot_test(\"image-widget-movie-single-50-window-reset\", iw_movie.figure)\n", + "iw_movie.current_index = {\"t\": 0}" + ] + }, + { + "cell_type": "markdown", + "id": "c5fb9aaa-b1a8-46b9-81a5-a656183ab16d", + "metadata": {}, + "source": [ + "# Set new data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e1730287-41de-4166-8d00-36ae2daabb47", + "metadata": {}, + "outputs": [], + "source": [ + "new_data = iio.imread(\"imageio:stent.npz\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9010dd43-83c8-4807-8874-71af8ef5c955", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "iw_movie.set_data(new_data=new_data)\n", + "iw_movie.figure[0, 0].auto_scale()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "06e6f4fb-fe58-40f0-adf0-191e02cdbd75", + "metadata": {}, + "outputs": [], + "source": [ + "plot_test(\"image-widget-movie-set_data\", iw_movie.figure)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e5d55d4e-57f2-4460-b252-7a9d21f7c217", + "metadata": {}, + "outputs": [], + "source": [ + "iw_movie.close()" + ] + }, + { + "cell_type": "markdown", + "id": "d2e6819b-209a-49af-97b7-0b8956023d1a", + "metadata": {}, + "source": [ + "# zfish" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cf9845b6-1cda-403b-96cd-e2b51803c96a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "zfish_data = np.load(\"./zfish_test.npy\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f7f0315a-29c0-4852-9d49-edaeb3ee45c6", + "metadata": {}, + "outputs": [], + "source": [ + "# data is tzxy\n", + "zfish_data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "67e840fa-9eb9-4705-ab85-ec981ba29abb", + "metadata": {}, + "outputs": [], + "source": [ + "n_planes = zfish_data.shape[1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76535d56-e514-4c16-aa48-a6359f8019d5", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "iw_zfish = ImageWidget(\n", + " data=[zfish_data[:, i] for i in range(n_planes)],\n", + " window_funcs={\"t\": (np.mean, 5)},\n", + " names=[f\"plane-{i}\" for i in range(n_planes)],\n", + " cmap=\"gnuplot2\", \n", + " figure_kwargs={\"size\": (900, 600)},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13904849-cbc5-41e7-ad90-d6e8a4fc0077", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "iw_zfish.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75e8cf08-f1d2-414c-84a2-1ba4c2a01072", + "metadata": {}, + "outputs": [], + "source": [ + "# testing cell ignore\n", + "assert iw_zfish._dims_max_bounds[\"t\"] == zfish_data.shape[0]\n", + "\n", + "plot_test(\"image-widget-zfish-grid-init-mean-window-5\", iw_zfish.figure)\n", + "\n", + "iw_zfish.current_index = {\"t\": 50}\n", + "plot_test(\"image-widget-zfish-grid-frame-50-mean-window-5\", iw_zfish.figure)\n", + "\n", + "iw_zfish.window_funcs[\"t\"].window_size = 13\n", + "plot_test(\"image-widget-zfish-grid-frame-50-mean-window-13\", iw_zfish.figure)\n", + "\n", + "iw_zfish.window_funcs = None\n", + "plot_test(\"image-widget-zfish-grid-frame-50\", iw_zfish.figure)\n", + "\n", + "iw_zfish.current_index = {\"t\": 99}\n", + "plot_test(\"image-widget-zfish-grid-frame-99\", iw_zfish.figure)\n", + "\n", + "iw_zfish.current_index = {\"t\": 50}\n", + "iw_zfish.window_funcs = {\"t\": (np.max, 13)}\n", + "plot_test(\"image-widget-zfish-grid-frame-50-max-window-13\", iw_zfish.figure)\n", + "\n", + "iw_zfish.window_funcs = None\n", + "iw_zfish.frame_apply = lambda frame: gaussian_filter(frame.astype(np.float32), sigma=3)\n", + "iw_zfish.reset_vmin_vmax()\n", + "plot_test(\"image-widget-zfish-grid-frame-50-frame-apply-gaussian\", iw_zfish.figure)\n", + "\n", + "iw_zfish.frame_apply = None\n", + "iw_zfish.reset_vmin_vmax()\n", + "plot_test(\"image-widget-zfish-grid-frame-50-frame-apply-reset\", iw_zfish.figure)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "34499f45-cab3-4abd-832a-a679746b1684", + "metadata": {}, + "outputs": [], + "source": [ + "# reverse planes and test set_data\n", + "iw_zfish.set_data(\n", + " [zfish_data[:, i] for i in range(n_planes - 1, -1, -1)],\n", + " reset_indices=False\n", + ")\n", + "\n", + "plot_test(\"image-widget-zfish-grid-set_data-reset-indices-false\", iw_zfish.figure)\n", + "\n", + "iw_zfish.set_data(\n", + " [zfish_data[:, i] for i in range(n_planes - 1, -1, -1)],\n", + " reset_indices=True\n", + ")\n", + "plot_test(\"image-widget-zfish-grid-set_data-reset-indices-true\", iw_zfish.figure)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "08501aad-8b56-4ae5-98ff-26942cbb5d67", + "metadata": {}, + "outputs": [], + "source": [ + "iw_zfish.close()" + ] + }, + { + "cell_type": "markdown", + "id": "bf5ff2c3-780c-41dd-91a7-74ef8b87d838", + "metadata": {}, + "source": [ + "## z-sliders" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "87280ff7-5009-46a7-9306-0c1fe03ba4bd", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "iw_z = ImageWidget(\n", + " data=zfish_data, # you can also provide a list of tzxy arrays\n", + " window_funcs={\"t\": (np.mean, 5)},\n", + " cmap=\"gnuplot2\", \n", + " figure_kwargs={\"size\": (900, 600)},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "94142bdf-78d0-4512-b27a-f5a61b9aba5f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "iw_z.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "06b66964-b3bf-4545-a0e6-79ddc996a1d0", + "metadata": {}, + "outputs": [], + "source": [ + "# same tests as with the figure\n", + "assert iw_z._dims_max_bounds[\"t\"] == zfish_data.shape[0]\n", + "\n", + "plot_test(\"image-widget-zfish-init-mean-window-5\", iw_z.figure)\n", + "\n", + "iw_z.current_index = {\"t\": 50}\n", + "plot_test(\"image-widget-zfish-frame-50-mean-window-5\", iw_z.figure)\n", + "\n", + "iw_z.window_funcs[\"t\"].window_size = 13\n", + "plot_test(\"image-widget-zfish-frame-50-mean-window-13\", iw_z.figure)\n", + "\n", + "iw_z.window_funcs = None\n", + "plot_test(\"image-widget-zfish-frame-50\", iw_z.figure)\n", + "\n", + "iw_z.current_index = {\"t\": 99}\n", + "plot_test(\"image-widget-zfish-frame-99\", iw_z.figure)\n", + "\n", + "iw_z.current_index = {\"t\": 50}\n", + "iw_z.window_funcs = {\"t\": (np.max, 13)}\n", + "plot_test(\"image-widget-zfish-frame-50-max-window-13\", iw_z.figure)\n", + "\n", + "iw_z.window_funcs = None\n", + "iw_z.frame_apply = lambda frame: gaussian_filter(frame.astype(np.float32), sigma=3)\n", + "iw_z.reset_vmin_vmax()\n", + "plot_test(\"image-widget-zfish-frame-50-frame-apply-gaussian\", iw_z.figure)\n", + "\n", + "iw_z.frame_apply = None\n", + "iw_z.reset_vmin_vmax()\n", + "plot_test(\"image-widget-zfish-frame-50-frame-apply-reset\", iw_z.figure)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b94ae517-4a48-4efe-b85b-7679ae02d233", + "metadata": {}, + "outputs": [], + "source": [ + "iw_z.close()" + ] + }, + { + "cell_type": "markdown", + "id": "6716f255-44c2-400d-a2bf-254683e4cd9d", + "metadata": {}, + "source": [ + "# Test Mixed Shapes, RGB (and set data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ed783360-992d-40f8-bb6f-152a59edff43", + "metadata": {}, + "outputs": [], + "source": [ + "zfish_data = np.load(\"./zfish_test.npy\")\n", + "zfish_frame_1 = zfish_data[0, 0, :, :]\n", + "zfish_frame_2 = zfish_data[20, 3, :, :]\n", + "movie = iio.imread(\"imageio:cockatoo.mp4\")\n", + "\n", + "iw_mixed_shapes = ImageWidget(\n", + " data=[zfish_frame_1, movie], # you can also provide a list of tzxy arrays\n", + " rgb=[False, True],\n", + " histogram_widget=True,\n", + " cmap=\"gnuplot2\", \n", + " figure_kwargs={\"controller_ids\": None, \"size\": (900, 400)},\n", + ")\n", + "\n", + "iw_mixed_shapes.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "274c67b4-aa07-4fcf-a094-1b1e70d0378a", + "metadata": {}, + "outputs": [], + "source": [ + "iw_mixed_shapes.current_index = {\"t\": 50}\n", + "plot_test(\"image-widget-zfish-mixed-rgb-cockatoo-frame-50\", iw_mixed_shapes.figure)\n", + "\n", + "# Set the data, changing the first array and also the size of the \"T\" slider\n", + "iw_mixed_shapes.set_data([zfish_frame_2, movie[:200, :, :, :]], reset_indices=True)\n", + "plot_test(\"image-widget-zfish-mixed-rgb-cockatoo-set-data\", iw_mixed_shapes.figure)\n", + "\n", + "# Check how a window function might work on the RGB data\n", + "iw_mixed_shapes.window_funcs = {\"t\": (np.mean, 4)}\n", + "iw_mixed_shapes.current_index = {\"t\": 20}\n", + "plot_test(\"image-widget-zfish-mixed-rgb-cockatoo-windowrgb\", iw_mixed_shapes.figure)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "870627ef-09d8-44e4-8952-aedb702d1526", + "metadata": {}, + "outputs": [], + "source": [ + "notebook_finished()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/notebooks/linear_region_selector.ipynb b/examples/notebooks/linear_region_selector.ipynb deleted file mode 100644 index 43cea4f81..000000000 --- a/examples/notebooks/linear_region_selector.ipynb +++ /dev/null @@ -1,275 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "1db50ec4-8754-4421-9f5e-6ba8ca6b81e3", - "metadata": {}, - "source": [ - "# `LinearRegionSelector` with single lines" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b7bbfeb4-1ad0-47db-9a82-3d3f642a1f63", - "metadata": {}, - "outputs": [], - "source": [ - "import fastplotlib as fpl\n", - "import numpy as np\n", - "from ipywidgets import IntRangeSlider, FloatRangeSlider, VBox\n", - "\n", - "gp = fpl.GridPlot((2, 2))\n", - "\n", - "# preallocated size for zoomed data\n", - "zoomed_prealloc = 1_000\n", - "\n", - "# data to plot\n", - "xs = np.linspace(0, 100, 1_000)\n", - "sine = np.sin(xs) * 20\n", - "\n", - "# make sine along x axis\n", - "sine_graphic_x = gp[0, 0].add_line(sine)\n", - "\n", - "# just something that looks different for line along y-axis\n", - "sine_y = sine\n", - "sine_y[sine_y > 0] = 0\n", - "\n", - "# sine along y axis\n", - "sine_graphic_y = gp[0, 1].add_line(np.column_stack([sine_y, xs]))\n", - "\n", - "# offset the position of the graphic to demonstrate `get_selected_data()` later\n", - "sine_graphic_y.position_x = 50\n", - "sine_graphic_y.position_y = 50\n", - "\n", - "# add linear selectors\n", - "ls_x = sine_graphic_x.add_linear_region_selector() # default axis is \"x\"\n", - "ls_y = sine_graphic_y.add_linear_region_selector(axis=\"y\")\n", - "\n", - "# preallocate array for storing zoomed in data\n", - "zoomed_init = np.column_stack([np.arange(zoomed_prealloc), np.random.rand(zoomed_prealloc)])\n", - "\n", - "# make line graphics for displaying zoomed data\n", - "zoomed_x = gp[1, 0].add_line(zoomed_init)\n", - "zoomed_y = gp[1, 1].add_line(zoomed_init)\n", - "\n", - "\n", - "def interpolate(subdata: np.ndarray, axis: int):\n", - " \"\"\"1D interpolation to display within the preallocated data array\"\"\"\n", - " x = np.arange(0, zoomed_prealloc)\n", - " xp = np.linspace(0, zoomed_prealloc, subdata.shape[0])\n", - " \n", - " # interpolate to preallocated size\n", - " return np.interp(x, xp, fp=subdata[:, axis]) # use the y-values\n", - "\n", - "\n", - "def set_zoom_x(ev):\n", - " \"\"\"sets zoomed x selector data\"\"\"\n", - " selected_data = ev.pick_info[\"selected_data\"]\n", - " zoomed_x.data = interpolate(selected_data, axis=1) # use the y-values\n", - " gp[1, 0].auto_scale()\n", - "\n", - "\n", - "def set_zoom_y(ev):\n", - " \"\"\"sets zoomed y selector data\"\"\"\n", - " selected_data = ev.pick_info[\"selected_data\"]\n", - " zoomed_y.data = -interpolate(selected_data, axis=0) # use the x-values\n", - " gp[1, 1].auto_scale()\n", - "\n", - "\n", - "# update zoomed plots when bounds change\n", - "ls_x.selection.add_event_handler(set_zoom_x)\n", - "ls_y.selection.add_event_handler(set_zoom_y)\n", - "\n", - "gp.show()" - ] - }, - { - "cell_type": "markdown", - "id": "0bad4a35-f860-4f85-9061-920154ab682b", - "metadata": {}, - "source": [ - "### On the x-axis we have a 1-1 mapping from the data that we have passed and the line geometry positions. So the `bounds` min max corresponds directly to the data indices." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2c96a3ff-c2e7-4683-8097-8491e97dd6d3", - "metadata": {}, - "outputs": [], - "source": [ - "ls_x.selection()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3ec71e3f-291c-43c6-a954-0a082ba5981c", - "metadata": {}, - "outputs": [], - "source": [ - "ls_x.get_selected_indices()" - ] - }, - { - "cell_type": "markdown", - "id": "1588a89e-1da4-4ada-92e2-7437ba942065", - "metadata": {}, - "source": [ - "### However, for the y-axis line we have passed a 2D array where we've used a linspace, so there is not a 1-1 mapping from the data to the line geometry positions. Use `get_selected_indices()` to get the indices of the data bounded by the current selection. In addition the position of the Graphic is not `(0, 0)`. You must use `get_selected_indices()` whenever you want the indices of the selected data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18e10277-6d5d-42fe-8715-1733efabefa0", - "metadata": {}, - "outputs": [], - "source": [ - "ls_y.selection()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8e9c42b9-60d2-4544-96c5-c8c6832b79e3", - "metadata": {}, - "outputs": [], - "source": [ - "ls_y.get_selected_indices()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a9583d2e-ec52-405c-a875-f3fec5e3aa16", - "metadata": {}, - "outputs": [], - "source": [ - "import fastplotlib as fpl\n", - "import numpy as np\n", - "\n", - "# data to plot\n", - "xs = np.linspace(0, 100, 1_000)\n", - "sine = np.sin(xs) * 20\n", - "cosine = np.cos(xs) * 20\n", - "\n", - "plot = fpl.GridPlot((5, 1))\n", - "\n", - "# sines and cosines\n", - "sines = [sine] * 2\n", - "cosines = [cosine] * 2\n", - "\n", - "# make line stack\n", - "line_stack = plot[0, 0].add_line_stack(sines + cosines, separation=50)\n", - "\n", - "# make selector\n", - "selector = line_stack.add_linear_region_selector()\n", - "\n", - "# populate subplots with preallocated graphics\n", - "for i, subplot in enumerate(plot):\n", - " if i == 0:\n", - " # skip the first one\n", - " continue\n", - " # make line graphics for displaying zoomed data\n", - " subplot.add_line(zoomed_init, name=\"zoomed\")\n", - "\n", - "\n", - "def update_zoomed_subplots(ev):\n", - " \"\"\"update the zoomed subplots\"\"\"\n", - " zoomed_data = selector.get_selected_data()\n", - " \n", - " for i in range(len(zoomed_data)):\n", - " data = interpolate(zoomed_data[i], axis=1)\n", - " plot[i + 1, 0][\"zoomed\"].data = data\n", - " plot[i + 1, 0].auto_scale()\n", - "\n", - "\n", - "selector.selection.add_event_handler(update_zoomed_subplots)\n", - "plot.show()" - ] - }, - { - "cell_type": "markdown", - "id": "0fa051b5-d6bc-4e4e-8f12-44f638a00c88", - "metadata": {}, - "source": [ - "# Large line stack with selector" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d5ffb678-c989-49ee-85a9-4fd7822f033c", - "metadata": {}, - "outputs": [], - "source": [ - "import fastplotlib as fpl\n", - "import numpy as np\n", - "\n", - "# data to plot\n", - "xs = np.linspace(0, 250, 10_000)\n", - "sine = np.sin(xs) * 20\n", - "cosine = np.cos(xs) * 20\n", - "\n", - "plot = fpl.GridPlot((1, 2))\n", - "\n", - "# sines and cosines\n", - "sines = [sine] * 1_00\n", - "cosines = [cosine] * 1_00\n", - "\n", - "# make line stack\n", - "line_stack = plot[0, 0].add_line_stack(sines + cosines, separation=50)\n", - "\n", - "# make selector\n", - "stack_selector = line_stack.add_linear_region_selector(padding=200)\n", - "\n", - "zoomed_line_stack = plot[0, 1].add_line_stack([zoomed_init] * 2_000, separation=50, name=\"zoomed\")\n", - " \n", - "def update_zoomed_stack(ev):\n", - " \"\"\"update the zoomed subplots\"\"\"\n", - " zoomed_data = stack_selector.get_selected_data()\n", - " \n", - " for i in range(len(zoomed_data)):\n", - " data = interpolate(zoomed_data[i], axis=1)\n", - " zoomed_line_stack.graphics[i].data = data\n", - " \n", - " plot[0, 1].auto_scale()\n", - "\n", - "\n", - "stack_selector.selection.add_event_handler(update_zoomed_stack)\n", - "plot.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cbcd6309-fb47-4941-9fd1-2b091feb3ae7", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/notebooks/linear_selector.ipynb b/examples/notebooks/linear_selector.ipynb deleted file mode 100644 index 0f81bc36b..000000000 --- a/examples/notebooks/linear_selector.ipynb +++ /dev/null @@ -1,144 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "a06e1fd9-47df-42a3-a76c-19e23d7b89fd", - "metadata": {}, - "source": [ - "## `LinearSelector`, draggable selector that can optionally associated with an ipywidget." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eb95ba19-14b5-4bf4-93d9-05182fa500cb", - "metadata": {}, - "outputs": [], - "source": [ - "import fastplotlib as fpl\n", - "from fastplotlib.graphics.selectors import Synchronizer\n", - "\n", - "import numpy as np\n", - "from ipywidgets import VBox, IntSlider, FloatSlider\n", - "\n", - "plot = fpl.Plot()\n", - "\n", - "# data to plot\n", - "xs = np.linspace(0, 100, 1000)\n", - "sine = np.sin(xs) * 20\n", - "\n", - "# make sine along x axis\n", - "sine_graphic = plot.add_line(np.column_stack([xs, sine]).astype(np.float32))\n", - "\n", - "# make some selectors\n", - "selector = sine_graphic.add_linear_selector()\n", - "selector2 = sine_graphic.add_linear_selector(20)\n", - "selector3 = sine_graphic.add_linear_selector(40)\n", - "\n", - "ss = Synchronizer(selector, selector2, selector3)\n", - "\n", - "def set_color_at_index(ev):\n", - " # changes the color at the index where the slider is\n", - " ix = ev.pick_info[\"selected_index\"]\n", - " g = ev.pick_info[\"graphic\"].parent\n", - " g.colors[ix] = \"green\"\n", - "\n", - "selector.selection.add_event_handler(set_color_at_index)\n", - "\n", - "# fastplotlib LineSelector can make an ipywidget slider and return it :D \n", - "ipywidget_slider = selector.make_ipywidget_slider()\n", - "ipywidget_slider.description = \"slider1\"\n", - "\n", - "# or you can make your own ipywidget sliders and connect them to the linear selector\n", - "ipywidget_slider2 = IntSlider(min=0, max=100, description=\"slider2\")\n", - "ipywidget_slider3 = FloatSlider(min=0, max=100, description=\"slider3\")\n", - "\n", - "selector2.add_ipywidget_handler(ipywidget_slider2, step=5)\n", - "selector3.add_ipywidget_handler(ipywidget_slider3, step=0.1)\n", - "\n", - "plot.auto_scale()\n", - "plot.show(add_widgets=[ipywidget_slider])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7ab9f141-f92f-4c4c-808b-97dafd64ca25", - "metadata": {}, - "outputs": [], - "source": [ - "selector.step = 0.1" - ] - }, - { - "cell_type": "markdown", - "id": "3b0f448f-bbe4-4b87-98e3-093f561c216c", - "metadata": {}, - "source": [ - "### Drag linear selectors with the mouse, hold \"Shift\" to synchronize movement of all the selectors" - ] - }, - { - "cell_type": "markdown", - "id": "c6f041b7-8779-46f1-8454-13cec66f53fd", - "metadata": {}, - "source": [ - "## Also works for line collections" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e36da217-f82a-4dfa-9556-1f4a2c7c4f1c", - "metadata": {}, - "outputs": [], - "source": [ - "sines = [sine] * 10\n", - "\n", - "plot = fpl.Plot()\n", - "\n", - "sine_stack = plot.add_line_stack(sines)\n", - "\n", - "colors = \"y\", \"blue\", \"red\", \"green\"\n", - "\n", - "selectors = list()\n", - "for i, c in enumerate(colors):\n", - " sel = sine_stack.add_linear_selector(i * 100, color=c, name=str(i))\n", - " selectors.append(sel)\n", - " \n", - "ss = Synchronizer(*selectors)\n", - "\n", - "plot.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "71ae4fca-f644-4d4f-8f32-f9d069bbc2f1", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/notebooks/lineplot.ipynb b/examples/notebooks/lineplot.ipynb deleted file mode 100644 index e156a7150..000000000 --- a/examples/notebooks/lineplot.ipynb +++ /dev/null @@ -1,179 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "386184a4-bd03-4467-a539-2696c3c5a573", - "metadata": { - "tags": [] - }, - "source": [ - "# A more complex example combing different graphics, gridplot and multiple perspectives" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "9c974494-712e-4981-bae2-a3ee176a6b20", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from fastplotlib import GridPlot" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "c3d8f967-f60f-4f0b-b6ba-21b1251b4856", - "metadata": {}, - "outputs": [], - "source": [ - "# create data in the shape of a spiral\n", - "phi = np.linspace(0, 30, 200)\n", - "\n", - "xs = phi * np.cos(phi)\n", - "ys = phi * np.sin(phi)\n", - "zs = phi\n", - "\n", - "# make data 3d, with shape [, 3]\n", - "spiral = np.dstack([xs, ys, zs])[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "78cffe56-1147-4255-82c1-53cec6bc986a", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7993e0a4358f4678a7343b78b3b0b24c", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "RFBOutputContext()" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/kushalk/repos/fastplotlib/fastplotlib/layouts/_base.py:214: UserWarning: `center_scene()` not yet implemented for `PerspectiveCamera`\n", - " warn(\"`center_scene()` not yet implemented for `PerspectiveCamera`\")\n" - ] - }, - { - "data": { - "text/html": [ - "
initial snapshot
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "898a109f489741a5b4624be77bd27db0", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "JupyterWgpuCanvas()" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# grid with 2 rows and 2 columns\n", - "shape = (2, 2)\n", - "\n", - "# pan-zoom controllers for each view\n", - "# views are synced if they have the \n", - "# same controller ID\n", - "# in this example the first view has its own controller\n", - "# and the last 3 views are synced\n", - "controllers = [\n", - " [0, 1], # id each controller with an integer\n", - " [1, 1]\n", - "]\n", - "\n", - "# create the grid plot\n", - "grid_plot = GridPlot(\n", - " shape=shape,\n", - " cameras='3d', # 3D view for all subplots within the grid\n", - " controllers=controllers\n", - ")\n", - "\n", - "for i, subplot in enumerate(grid_plot):\n", - " # create and add the LineGraphic\n", - " line_graphic = subplot.add_line(data=spiral, thickness=3, cmap='jet')\n", - " \n", - " # make axes visible\n", - " subplot.set_axes_visibility(True)\n", - " subplot.set_grid_visibility(True)\n", - " \n", - " marker = subplot.add_scatter(data=spiral[0], sizes=10, name=\"marker\")\n", - " \n", - "marker_index = 0\n", - "\n", - "# a function to move the ball along the spiral\n", - "def move_marker():\n", - " global marker_index\n", - " \n", - " marker_index += 1\n", - " \n", - " if marker_index == spiral.shape[0]:\n", - " marker_index = 0\n", - " \n", - " for subplot in grid_plot:\n", - " subplot[\"marker\"].data = spiral[marker_index]\n", - " \n", - "# add `move_marker` to the animations\n", - "grid_plot.add_animations(move_marker)\n", - "\n", - "grid_plot.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e388eb93-7a9b-4ae4-91fc-cf32947f63a9", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/notebooks/lines_cmap.ipynb b/examples/notebooks/lines_cmap.ipynb deleted file mode 100644 index c6dc604b4..000000000 --- a/examples/notebooks/lines_cmap.ipynb +++ /dev/null @@ -1,288 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "b169210c-b148-4701-91d2-87f8be2c90da", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import fastplotlib as fpl" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5d2ef4aa-0e4c-4694-ae2e-05da1153a413", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# this is only for testing, you do not need this to use fastplotlib\n", - "from nb_test_utils import plot_test, notebook_finished" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a6615d45-6a6e-4a1e-a998-18f7cc52f6b9", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# linspace, create 100 evenly spaced x values from -10 to 10\n", - "xs = np.linspace(-10, 10, 100)\n", - "# sine wave\n", - "ys = np.sin(xs)\n", - "sine = np.dstack([xs, ys])[0]\n", - "\n", - "# cosine wave\n", - "ys = np.cos(xs)\n", - "cosine = np.dstack([xs, ys])[0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "52a91e8a-25b7-4121-a06f-623d7412b558", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot = fpl.Plot()\n", - "\n", - "plot.add_line(sine, thickness=10)\n", - "\n", - "plot.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "727282c3-aadf-420f-a88e-9dd4d4e91263", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot_test(\"lines-cmap-white\", plot)" - ] - }, - { - "cell_type": "markdown", - "id": "889b1858-ed64-4d6b-96ad-3883fbe4d38e", - "metadata": {}, - "source": [ - "# Fancy indexing of line colormaps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "13185547-07bc-4771-ac6d-83314622bf30", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.graphics[0].cmap = \"jet\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3c9b0bc8-b176-425c-8036-63dc55ab7466", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# for testing, ignore\n", - "plot_test(\"lines-cmap-jet\", plot)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ee9ec4d7-d9a2-417c-92bd-b01a9a019801", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.graphics[0].cmap.values = sine[:, 1]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6b19d2d4-90e7-40ed-afb9-13abe5474ace", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# for testing, ignore\n", - "plot_test(\"lines-cmap-jet-values\", plot)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ebf9f494-782d-4529-9ef6-a2a4032f097d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.graphics[0].cmap.values = cosine[:, 1]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0a6c4739-fa61-4532-865e-21107eab76f9", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# for testing, ignore\n", - "plot_test(\"lines-cmap-jet-values-cosine\", plot)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5ddc95cf-b3be-4212-b525-1c628dc1e091", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.graphics[0].cmap = \"viridis\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "45acfd2f-09f5-418c-bca5-3e574348b7d5", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# for testing, ignore\n", - "plot_test(\"lines-cmap-viridis\", plot)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7712d313-16cd-49e5-89ca-91364412f194", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "cmap_values = [0] * 25 + [1] * 5 + [2] * 50 + [3] * 20" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c8c13c03-56f0-48c3-b44e-65545a3bc3bc", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.graphics[0].cmap.values = cmap_values" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7548407f-05ed-4c47-93cc-131c61f8e242", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# for testing, ignore\n", - "plot_test(\"lines-cmap-viridis-values\", plot)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f64d036d-8a9e-4799-b77f-e78afa441fec", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.graphics[0].cmap = \"tab10\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c290c642-ba5f-4a46-9a17-c434cb39de26", - "metadata": {}, - "outputs": [], - "source": [ - "# for testing, ignore\n", - "plot_test(\"lines-cmap-tab-10\", plot)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c4b9e735-72e9-4f0e-aa3e-43db57e65c99", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# for testing, ignore\n", - "notebook_finished()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f6735cc0-910c-4854-ac50-8ee553a6475e", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/notebooks/multiprocessing_zmq/README.md b/examples/notebooks/multiprocessing_zmq/README.md new file mode 100644 index 000000000..184453d0c --- /dev/null +++ b/examples/notebooks/multiprocessing_zmq/README.md @@ -0,0 +1,3 @@ +This example shows how to use a zmq publisher-subscriber pattern to perform a computation in one process and visualize results in another process. First, run all cells in `multiprocessing_zmq_plot.ipynb`, and then run cells in `multiprocessing_zmq_compute.ipynb`. The raw bytes for the numpy array are sent using zmq in the compute notebook and received in the plot notebook and displayed. + +For more information on zmq see: https://zeromq.org/languages/python/ diff --git a/examples/notebooks/multiprocessing_zmq/multiprocessing_zmq_compute.ipynb b/examples/notebooks/multiprocessing_zmq/multiprocessing_zmq_compute.ipynb new file mode 100644 index 000000000..7f24f6411 --- /dev/null +++ b/examples/notebooks/multiprocessing_zmq/multiprocessing_zmq_compute.ipynb @@ -0,0 +1,73 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "ca2817a3-869c-4cc6-901b-c34509518175", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import zmq" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dd0b9780-b507-4ea2-af09-134abd76f45b", + "metadata": {}, + "outputs": [], + "source": [ + "context = zmq.Context()\n", + "\n", + "# create publisher\n", + "socket = context.socket(zmq.PUB)\n", + "socket.bind(\"tcp://127.0.0.1:5555\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4729bfe8-3474-4bc9-a489-a57d02e5a287", + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(2_000):\n", + " # make some data, make note of the dtype\n", + " data = np.random.rand(512, 512).astype(np.float32)\n", + "\n", + " # sent bytes over the socket\n", + " socket.send(data.tobytes())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d47dab72-1061-439f-bf6e-a88b9ee8e5aa", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/notebooks/multiprocessing_zmq/multiprocessing_zmq_plot.ipynb b/examples/notebooks/multiprocessing_zmq/multiprocessing_zmq_plot.ipynb new file mode 100644 index 000000000..564512451 --- /dev/null +++ b/examples/notebooks/multiprocessing_zmq/multiprocessing_zmq_plot.ipynb @@ -0,0 +1,114 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "491e6050-64ae-4bfc-a480-5805cd684710", + "metadata": {}, + "outputs": [], + "source": [ + "import fastplotlib as fpl\n", + "import numpy as np\n", + "import zmq" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "97135f98-6810-49b6-a8de-d0e114720d6c", + "metadata": {}, + "outputs": [], + "source": [ + "context = zmq.Context()\n", + "\n", + "# create subscriber\n", + "sub = context.socket(zmq.SUB)\n", + "sub.setsockopt(zmq.SUBSCRIBE, b\"\")\n", + "\n", + "# keep only the most recent message\n", + "sub.setsockopt(zmq.CONFLATE, 1)\n", + "\n", + "# publisher address and port\n", + "sub.connect(\"tcp://127.0.0.1:5555\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2d4420f2-364a-445a-9658-63e9ffa586c3", + "metadata": {}, + "outputs": [], + "source": [ + "def get_bytes():\n", + " \"\"\"\n", + " Gets the bytes from the publisher\n", + " \"\"\"\n", + " try:\n", + " b = sub.recv(zmq.NOBLOCK)\n", + " except zmq.Again:\n", + " pass\n", + " else:\n", + " return b\n", + " \n", + " return None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "42d20d77-b884-4379-80e4-e08738506eeb", + "metadata": {}, + "outputs": [], + "source": [ + "fig = fpl.Figure()\n", + "\n", + "# initialize some data, must be of same dtype and shape as data sent by publisher\n", + "data = np.random.rand(512, 512).astype(np.float32)\n", + "fig[0, 0].add_image(data, name=\"image\")\n", + "\n", + "def update_frame(subplot):\n", + " # recieve bytes\n", + " b = get_bytes()\n", + " \n", + " if b is not None:\n", + " # numpy array from bytes, MUST specify dtype and make sure it matches what you sent\n", + " a = np.frombuffer(b, dtype=np.float32).reshape(512, 512)\n", + " \n", + " # set graphic data\n", + " subplot[\"image\"].data = a\n", + "\n", + "fig[0, 0].add_animations(update_frame)\n", + "fig.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f8ac188-9359-4d3c-b8f1-384be84d1585", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/notebooks/nb_test_utils.py b/examples/notebooks/nb_test_utils.py index e16ed2eaf..9d99e3be3 100644 --- a/examples/notebooks/nb_test_utils.py +++ b/examples/notebooks/nb_test_utils.py @@ -5,7 +5,7 @@ import imageio.v3 as iio import numpy as np -from fastplotlib import Plot, GridPlot +import fastplotlib as fpl # make dirs for screenshots and diffs current_dir = Path(__file__).parent @@ -16,38 +16,142 @@ os.makedirs(SCREENSHOTS_DIR, exist_ok=True) os.makedirs(DIFFS_DIR, exist_ok=True) +TOLERANCE = 0.1 # store all the failures to allow the nb to proceed to test other examples FAILURES = list() +if "FASTPLOTLIB_NB_TESTS" not in os.environ.keys(): + TESTING = False -def plot_test(name, plot: Union[Plot, GridPlot]): - snapshot = plot.canvas.snapshot() +else: + if os.environ["FASTPLOTLIB_NB_TESTS"] == "1": + TESTING = True + + +# TODO: consolidate testing functions into one module so we don't have this separate one for notebooks + +def rgba_to_rgb(img: np.ndarray) -> np.ndarray: + black = np.zeros(img.shape).astype(np.uint8) + black[:, :, -1] = 255 + + img_alpha = img[..., -1] / 255 + + rgb = img[..., :-1] * img_alpha[..., None] + black[..., :-1] * np.ones( + img_alpha.shape + )[..., None] * (1 - img_alpha[..., None]) + + return rgb.round().astype(np.uint8) + + +# image comparison functions from: https://github.com/pygfx/image-comparison +def image_similarity(src, target, threshold=0.2): + """Compute normalized RMSE 0..1 and decide if similar based on threshold. + + For every pixel, the euclidian distance between RGB values is computed, + and normalized by the maximum possible distance (between black and white). + The RMSE is then computed from those errors. + + The normalized RMSE is used to compute the + similarity metric, so larger errors (euclidian distance + between two RGB colors) will have a disproportionately + larger effect on the score than smaller errors. + + In other words, lots of small errors will lead to a good score + (closer to 0) whereas a few large errors will lead to a bad score + (closer to 1). + """ + float_type = np.float64 + src = np.asarray(src, dtype=float_type) + target = np.asarray(target, dtype=float_type) + denom = np.sqrt(np.mean(src * src)) + mse = np.mean((src - target) ** 2) + rmse = np.sqrt(mse) / denom + + similar = bool(rmse < threshold) + return similar, rmse + + +def normalize_image(img): + """Discard the alpha channel and convert from 0..255 uint8 to 0..1 float.""" + assert len(img.shape) == 3 + + # normalize to 0..1 range + if img.dtype == "u1" or np.max(img) > 1: + img = img / 255 + assert np.min(img) >= 0 and np.max(img) <= 1 + + # discard alpha channel + # unsupported if it's not fully opaque + if img.shape[-1] == 4: + assert np.max(img[..., 3]) == 1 + img = img[..., :-1] + + return img + + +def plot_test(name, fig: fpl.Figure): + if not TESTING: + return + + # otherwise the first render is wrong + if fpl.IMGUI: + # there doesn't seem to be a resize event for the manual offscreen canvas + fig.imgui_renderer._backend.io.display_size = fig.canvas.get_logical_size() + # run this once so any edge widgets set their sizes and therefore the subplots get the correct rect + # hacky but it works for now + fig.imgui_renderer.render() + + fig._fpl_reset_layout() + # render each subplot + for subplot in fig: + subplot.viewport.render(subplot.scene, subplot.camera) + + # flush pygfx renderer + fig.renderer.flush() + + if fpl.IMGUI: + # render imgui + fig.imgui_renderer.render() + + snapshot = fig.canvas.snapshot() + rgb_img = rgba_to_rgb(snapshot.data) if "REGENERATE_SCREENSHOTS" in os.environ.keys(): if os.environ["REGENERATE_SCREENSHOTS"] == "1": - regenerate_screenshot(name, snapshot.data) + regenerate_screenshot(name, rgb_img) - try: - assert_screenshot_equal(name, snapshot.data) - except AssertionError: - FAILURES.append(name) + assert_screenshot_equal(name, rgb_img) def regenerate_screenshot(name, data): - iio.imwrite(SCREENSHOTS_DIR.joinpath(f"nb-{name}.png"), data) + if fpl.IMGUI: + prefix = "" + else: + prefix = "no-imgui-" + + iio.imwrite(SCREENSHOTS_DIR.joinpath(f"{prefix}nb-{name}.png"), data) def assert_screenshot_equal(name, data): - ground_truth = iio.imread(SCREENSHOTS_DIR.joinpath(f"nb-{name}.png")) + if fpl.IMGUI: + prefix = "" + else: + prefix = "no-imgui-" - is_similar = np.allclose(data, ground_truth) + ground_truth = iio.imread(SCREENSHOTS_DIR.joinpath(f"{prefix}nb-{name}.png")) - update_diffs(name, is_similar, data, ground_truth) + img = normalize_image(data) + ref_img = normalize_image(ground_truth) - assert is_similar, ( - f"notebook snapshot for {name} has changed" - ) + similar, rmse = image_similarity(img, ref_img, threshold=TOLERANCE) + + update_diffs(name, similar, data, ground_truth) + + if not similar: + FAILURES.append( + (name, rmse) + ) def update_diffs(name, is_similar, img, ground_truth): @@ -66,10 +170,14 @@ def get_diffs_rgba(slicer): diffs_rgba = diffs_rgba.astype("u1") return diffs_rgba[..., slicer] + if fpl.IMGUI: + prefix = "" + else: + prefix = "no-imgui-" + # split into an rgb and an alpha diff diffs = { - DIFFS_DIR.joinpath(f"nb-diff-{name}-rgb.png"): slice(0, 3), - DIFFS_DIR.joinpath(f"nb-diff-{name}-alpha.png"): 3, + DIFFS_DIR.joinpath(f"{prefix}nb-diff-{name}-rgb.png"): slice(0, 3), } for path, slicer in diffs.items(): @@ -81,6 +189,9 @@ def get_diffs_rgba(slicer): def notebook_finished(): + if not TESTING: + return + if len(FAILURES) > 0: raise AssertionError( f"Failures for plots:\n{FAILURES}" diff --git a/docs/source/quickstart.ipynb b/examples/notebooks/quickstart.ipynb similarity index 52% rename from docs/source/quickstart.ipynb rename to examples/notebooks/quickstart.ipynb index 6a3afec33..0d8fc3c31 100644 --- a/docs/source/quickstart.ipynb +++ b/examples/notebooks/quickstart.ipynb @@ -7,18 +7,14 @@ "tags": [] }, "source": [ - "# Quick Start Guide šŸš€\n", + "# Introduction to `fastplotlib` šŸš€\n", "\n", - "This notebook goes through the basic components of the `fastplotlib` API, images, image updates, line plots, scatter plots, and grid plots.\n", - "\n", - "**NOTE: This quick start guide in the docs is NOT interactive. Download the examples from the repo and try them on your own computer. You can run the desktop examples directly if you have `glfw` installed, or try the notebook demos:** https://github.com/kushalkolar/fastplotlib/tree/master/examples\n", - "\n", - "It will not be possible to have live demos on the docs until someone can figure out how to get [pygfx](https://github.com/pygfx/pygfx) to work with `wgpu` in the browser, perhaps through [pyodide](https://github.com/pyodide/pyodide) or something :D." + "This notebook goes through the basic components of the `fastplotlib` API, image, line, scatter plots, subplots and simple animations" ] }, { "cell_type": "markdown", - "id": "5d21c330-89cd-49ab-9069-4e3652d4286b", + "id": "ae07272b-e94b-4262-b486-6b3ddac63038", "metadata": {}, "source": [ "**The example images are from `imageio` so you will need to install it for this example notebook. But `imageio` is not required to use `fasptlotlib`**" @@ -27,7 +23,7 @@ { "cell_type": "code", "execution_count": null, - "id": "07f064bb-025a-4794-9b05-243810edaf60", + "id": "6674c90b-bfe3-4a71-ab7d-21e9cc03c050", "metadata": { "tags": [] }, @@ -39,8 +35,9 @@ { "cell_type": "code", "execution_count": null, - "id": "5f842366-bd39-47de-ad00-723b2be707e4", + "id": "5c50e177-5800-4e19-a4f6-d0e0a082e4cd", "metadata": { + "is_executing": true, "tags": [] }, "outputs": [], @@ -62,81 +59,65 @@ "import numpy as np" ] }, - { - "cell_type": "markdown", - "id": "a9b386ac-9218-4f8f-97b3-f29b4201ef55", - "metadata": {}, - "source": [ - "## Images" - ] - }, { "cell_type": "code", "execution_count": null, - "id": "237823b7-e2c0-4e2f-9ee8-e3fc2b4453c4", + "id": "1d374d5e-70e0-4946-937f-82d16a56009f", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# create a `Plot` instance\n", - "plot = fpl.Plot()\n", - "\n", - "# get a grayscale image\n", - "data = iio.imread(\"imageio:camera.png\")\n", - "\n", - "# plot the image data\n", - "image_graphic = plot.add_image(data=data, name=\"sample-image\")\n", - "\n", - "# show the plot\n", - "plot.show()" + "# this is only for testing, you do not need this to use fastplotlib\n", + "from nb_test_utils import plot_test, notebook_finished, TESTING" ] }, { "cell_type": "markdown", - "id": "be5b408f-dd91-4e36-807a-8c22c8d7d216", + "id": "a9b386ac-9218-4f8f-97b3-f29b4201ef55", "metadata": {}, "source": [ - "**In live notebooks or desktop applications, you can use the handle on the bottom right corner of the _canvas_ to resize it. You can also pan and zoom using your mouse!**\n", + "## Simple image\n", "\n", - "By default the origin is on the bottom left, you can click the flip button to flip the y-axis, or use `plot.camera.world.scale_y *= -1`" + "We are going to be using `jupyterlab-sidecar` to render some of the plots on the side. This makes it very easy to interact with your plots without having to constantly scroll up and down :D" ] }, { "cell_type": "code", "execution_count": null, - "id": "9b4e977e-2a7d-4e2b-aee4-cfc36767b3c6", + "id": "237823b7-e2c0-4e2f-9ee8-e3fc2b4453c4", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot.camera.world.scale_y *= -1" + "# create a `Figure` instance\n", + "# by default the figure will have 1 subplot\n", + "fig = fpl.Figure()\n", + "\n", + "# get a grayscale image\n", + "data = iio.imread(\"imageio:camera.png\")\n", + "\n", + "# plot the image data\n", + "image_graphic = fig[0, 0].add_image(data=data, name=\"sample-image\")\n", + "\n", + "# show the plot\n", + "fig.show(sidecar=True)" ] }, { "cell_type": "markdown", - "id": "9ba07ec1-a0cb-4461-87c6-c7b64d4a882b", + "id": "be5b408f-dd91-4e36-807a-8c22c8d7d216", "metadata": {}, "source": [ - "This is how you can take a snapshot of the canvas. Snapshots are shown throughout this doc page for the purposes of documentation, they are NOT necessary for real interactive usage. Download the notebooks to run live demos." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b64ba135-e753-43a9-ad1f-adcc7310792d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.canvas.snapshot()" + "**Use the handle on the bottom right corner of the _canvas_ to resize it. You can also pan and zoom using your mouse!**\n", + "\n", + "If an image is in the plot the origin is in the top left. You can click the flip button to flip the y-axis direction, or use `plot.camera.local.scale_y *= -1`" ] }, { "cell_type": "markdown", - "id": "ac5f5e75-9aa4-441f-9a41-66c22cd53de8", + "id": "7c3b637c-a26b-416e-936c-705275852a8a", "metadata": {}, "source": [ "Changing graphic **\"features\"**" @@ -145,7 +126,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d3541d1d-0819-450e-814c-588ffc8e7ed5", + "id": "de816c88-1c4a-4071-8a5e-c46c93671ef5", "metadata": { "tags": [] }, @@ -154,21 +135,9 @@ "image_graphic.cmap = \"viridis\"" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "ab544719-9187-45bd-8127-aac79eea30e4", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.canvas.snapshot()" - ] - }, { "cell_type": "markdown", - "id": "9693cf94-11e9-46a6-a5b7-b0fbed42ad81", + "id": "da1efe85-c5b8-42e8-ae81-6cbddccc30f7", "metadata": {}, "source": [ "### Slicing data\n", @@ -181,19 +150,21 @@ { "cell_type": "code", "execution_count": null, - "id": "330a47b5-50b1-4e6a-b8ab-d55d92af2042", + "id": "a04afe48-5534-4ef6-a159-f6e6a4337d8d", "metadata": { "tags": [] }, "outputs": [], "source": [ - "image_graphic.data().shape" + "# some graphic properties behave like arrays\n", + "# access the underlying array using .values\n", + "image_graphic.data.value.shape" ] }, { "cell_type": "code", "execution_count": null, - "id": "601f46d9-7f32-4a43-9090-4674218800ea", + "id": "83b2db1b-2783-4e89-bcf3-66bb6e09e18a", "metadata": { "tags": [] }, @@ -203,21 +174,9 @@ "image_graphic.data[:, ::15] = 1" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "3443948f-9ac9-484a-a4bf-3a06c1ce5658", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.canvas.snapshot()" - ] - }, { "cell_type": "markdown", - "id": "53125b3b-3ce2-43c5-b2e3-7cd37cec7d7d", + "id": "135db5d2-53fb-4d50-8164-2c1f00560c25", "metadata": {}, "source": [ "**Fancy indexing**" @@ -226,7 +185,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7344cbbe-40c3-4d9e-ae75-7abe3ddaeeeb", + "id": "a89120eb-108b-4df3-8d3f-8192c9315aa6", "metadata": { "tags": [] }, @@ -235,21 +194,9 @@ "image_graphic.data[data > 175] = 255" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "ef113d79-5d86-4be0-868e-30f82f8ab528", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.canvas.snapshot()" - ] - }, { "cell_type": "markdown", - "id": "4df5296e-2a18-403f-82f1-acb8eaf280e3", + "id": "096ccb73-bf6d-4dba-8168-788a63450406", "metadata": {}, "source": [ "Adjust vmin vmax" @@ -258,31 +205,32 @@ { "cell_type": "code", "execution_count": null, - "id": "28af88d1-0518-47a4-ab73-431d6aaf9cb8", + "id": "f8e69df8-7aaf-4d7c-92e3-861d9ebc8c5f", "metadata": { "tags": [] }, "outputs": [], "source": [ - "image_graphic.cmap.vmin = 50\n", - "image_graphic.cmap.vmax = 150" + "image_graphic.vmin = 50\n", + "image_graphic.vmax = 150" ] }, { "cell_type": "code", "execution_count": null, - "id": "e3dfb827-c812-447d-b413-dc15653160b1", + "id": "aa67b34a-2694-4ec0-9ba2-e88c469f1a06", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot.canvas.snapshot()" + "# testing cell, ignore\n", + "plot_test(\"camera\", fig)" ] }, { "cell_type": "markdown", - "id": "19a1b56b-fdca-40c5-91c9-3c9486fd8a21", + "id": "da9c9b25-7c8b-49b2-9531-7c741debd71d", "metadata": {}, "source": [ "**Set the entire data array again**\n", @@ -293,7 +241,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4dc3d0e4-b128-42cd-a53e-76846fc9b8a8", + "id": "089170fd-016e-4b2f-a090-c30beb85cc1b", "metadata": { "tags": [] }, @@ -305,7 +253,7 @@ }, { "cell_type": "markdown", - "id": "3bd06068-fe3f-404d-ba4a-a72a2105904f", + "id": "d14cf14a-282f-40c6-b086-9bcf332ed0c8", "metadata": {}, "source": [ "This is an RGB image, convert to grayscale to maintain the shape of (512, 512)" @@ -314,7 +262,7 @@ { "cell_type": "code", "execution_count": null, - "id": "150047a6-a6ac-442d-a468-3e0c224a2b7e", + "id": "ec9b2874-ce1a-49c6-9b84-ee8f14d55966", "metadata": { "tags": [] }, @@ -327,7 +275,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bf24576b-d336-4754-9992-9649ccaa4d1e", + "id": "8a8fc1d3-19ba-42c0-b9ec-39f6ddd23314", "metadata": { "tags": [] }, @@ -336,125 +284,140 @@ "image_graphic.data = gray" ] }, + { + "cell_type": "markdown", + "id": "bb568f89-ac92-4dde-9359-789049dc758a", + "metadata": {}, + "source": [ + "\n", + "\n", + "reset vmin vmax" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "67d810c2-4020-4769-a5ba-0d4a972ee243", + "id": "de09d977-88ea-472c-8d89-9e24abc845a9", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot.canvas.snapshot()" - ] - }, - { - "cell_type": "markdown", - "id": "2fe82654-e554-4be6-92a0-ecdee0ef8519", - "metadata": {}, - "source": [ - "reset vmin vmax" + "image_graphic.reset_vmin_vmax()" ] }, { "cell_type": "code", "execution_count": null, - "id": "0be6e4bb-cf9a-4155-9f6a-8106e66e6132", + "id": "9cf84998-03e1-41b3-8e63-92d5b59426e6", "metadata": { "tags": [] }, "outputs": [], "source": [ - "image_graphic.cmap.reset_vmin_vmax()" + "# testing cell, ignore\n", + "plot_test(\"astronaut\", fig)" ] }, { "cell_type": "code", "execution_count": null, - "id": "bd51936c-ad80-4b33-b855-23565265a430", + "id": "0bb1cfc7-1a06-4abb-a10a-a877a0d51c6b", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot.canvas.snapshot()" + "fig.canvas.get_logical_size()" ] }, { "cell_type": "markdown", - "id": "a6c1f3fb-a3a7-4175-bd8d-bb3203740771", + "id": "b53bc11a-ddf1-4786-8dca-8f3d2eaf993d", "metadata": {}, "source": [ - "### Indexing plots" + "### Indexing subplots" ] }, { "cell_type": "markdown", - "id": "3fc38694-aca6-4f56-97ac-3435059a6be7", + "id": "67b92ffd-40cc-43fe-9df9-0e0d94763d8e", "metadata": {}, "source": [ - "**Plots are indexable and give you their graphics by name**" + "**Subplots are indexable and give you their graphics by name**" ] }, { "cell_type": "code", "execution_count": null, - "id": "8a547138-0f7d-470b-9925-8df479c3979e", + "id": "e6ba689c-ff4a-44ef-9663-f2c8755072c4", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot" + "fig[0, 0]" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "5551861f-9860-4515-8222-2f1c6d6a3220", + "cell_type": "markdown", + "id": "e6eccef1", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, - "outputs": [], "source": [ - "plot[\"sample-image\"]" + "Access graphics in a subplot" ] }, { - "cell_type": "markdown", - "id": "0c29b36e-0eb4-4bb3-a8db-add58c303ee8", - "metadata": {}, + "cell_type": "code", + "execution_count": null, + "id": "7d8eaaf3", + "metadata": { + "collapsed": false, + "is_executing": true, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], "source": [ - "**You can also use numerical indexing on `plot.graphics`**" + "# by name\n", + "fig[0, 0][\"sample-image\"]" ] }, { "cell_type": "code", "execution_count": null, - "id": "ce6adbb0-078a-4e74-b189-58f860ee5df5", + "id": "c09a1924-70f8-4d9e-9e92-510d700ac715", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot.graphics" + "# or through the .graphics property of a subplot\n", + "fig[0, 0].graphics" ] }, { "cell_type": "code", "execution_count": null, - "id": "119bd6af-c486-4378-bc23-79b1759aa3a4", + "id": "ec9e6ba6-553f-4718-ba13-471c8c7c3c4e", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot.graphics[0]" + "# these are the same!\n", + "fig[0, 0].graphics[0] is fig[0, 0][\"sample-image\"]" ] }, { "cell_type": "markdown", - "id": "6b8e3f0d-56f8-447f-bf26-b52629d06e95", + "id": "4316a8b5-5f33-427a-8f52-b101d1daab67", "metadata": {}, "source": [ "The `Graphic` instance is also returned when you call `plot.add_`." @@ -463,7 +426,7 @@ { "cell_type": "code", "execution_count": null, - "id": "967c0cbd-287c-4d99-9891-9baf18f7b56a", + "id": "2b5c1321-1fd4-44bc-9433-7439ad3e22cf", "metadata": { "tags": [] }, @@ -475,21 +438,32 @@ { "cell_type": "code", "execution_count": null, - "id": "5da72e26-3536-47b8-839c-53452dd94f7a", + "id": "b12bf75e-4e93-4930-9146-e96324fdf3f6", "metadata": { "tags": [] }, "outputs": [], "source": [ - "image_graphic == plot[\"sample-image\"]" + "image_graphic == fig[0, 0][\"sample-image\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "058d9785-a692-46f6-a062-cdec9c040afe", + "metadata": {}, + "outputs": [], + "source": [ + "# close the figure\n", + "fig.close()" ] }, { "cell_type": "markdown", - "id": "2b5ee18b-e61b-415d-902a-688b1c9c03b8", + "id": "5694dca1-1041-4e09-a1da-85b293c5af47", "metadata": {}, "source": [ - "### RGB images\n", + "### RGB(A) images are supported\n", "\n", "`cmap` arguments are ignored for rgb images, but vmin vmax still works" ] @@ -497,73 +471,62 @@ { "cell_type": "code", "execution_count": null, - "id": "1f7143ec-8ee1-47d2-b017-d0a8efc69fc6", + "id": "d6b8ca51-073d-47aa-a464-44511fcaccbc", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot_rgb = fpl.Plot()\n", + "fig_rgb = fpl.Figure()\n", "\n", - "plot_rgb.add_image(new_data, name=\"rgb-image\")\n", + "fig_rgb[0, 0].add_image(new_data, name=\"rgb-image\")\n", "\n", - "plot_rgb.show()" + "# show the figure\n", + "fig_rgb.show()" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "7e4b5a30-4293-4ae3-87dc-06a1355bb2c7", - "metadata": { - "tags": [] - }, - "outputs": [], + "cell_type": "markdown", + "id": "7fc66377-00e8-4f32-9671-9cf63f74529f", + "metadata": {}, "source": [ - "plot_rgb.camera.world.scale_y *= -1" + "vmin and vmax are still applicable to rgb images" ] }, { "cell_type": "code", "execution_count": null, - "id": "a47b1eaf-3638-470a-88a5-0026c81d7e2b", + "id": "cafaa403-50a2-403c-b8e7-b0938d48cadd", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot_rgb.canvas.snapshot()" - ] - }, - { - "cell_type": "markdown", - "id": "4848a929-4f3b-46d7-921b-ebfe8de0ebb5", - "metadata": {}, - "source": [ - "vmin and vmax are still applicable to rgb images" + "fig_rgb[0, 0][\"rgb-image\"].vmin = 100" ] }, { "cell_type": "code", "execution_count": null, - "id": "ffe50132-8dd0-433c-b9c6-9ead8c3d48de", + "id": "b8d600c7-aa80-4c3f-8ec0-6641e9359c3a", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot_rgb[\"rgb-image\"].cmap.vmin = 100" + "# testing cell, ignore\n", + "plot_test(\"astronaut_RGB\", fig_rgb)" ] }, { "cell_type": "code", "execution_count": null, - "id": "161468ba-b836-4021-8d11-8dfc140b94eb", - "metadata": { - "tags": [] - }, + "id": "8316b4f2-3d6e-46b5-8776-c7c963a7aa99", + "metadata": {}, "outputs": [], "source": [ - "plot_rgb.canvas.snapshot()" + "# close figure\n", + "fig_rgb.close()" ] }, { @@ -573,9 +536,9 @@ "tags": [] }, "source": [ - "## Image updates\n", + "### Image updates\n", "\n", - "This examples show how you can define animation functions that run on every render cycle." + "This example shows how you can define animation functions that run on every render cycle." ] }, { @@ -587,28 +550,35 @@ }, "outputs": [], "source": [ - "# create another `Plot` instance\n", - "plot_v = fpl.Plot()\n", + "# create a figure\n", + "fig_v = fpl.Figure()\n", "\n", - "plot.canvas.max_buffered_frames = 1\n", + "fig.canvas.max_buffered_frames = 1\n", "\n", "# make some random data again\n", "data = np.random.rand(512, 512)\n", "\n", "# plot the data\n", - "plot_v.add_image(data=data, name=\"random-image\")\n", + "fig_v[0, 0].add_image(data=data, name=\"random-image\")\n", "\n", "# a function to update the image_graphic\n", - "# a plot will pass its plot instance to the animation function as an argument\n", - "def update_data(plot_instance):\n", + "# a figure-level animation function will optionally take the figure as an argument\n", + "def update_data(figure_instance):\n", " new_data = np.random.rand(512, 512)\n", - " plot_instance[\"random-image\"].data = new_data\n", + " figure_instance[0, 0][\"random-image\"].data = new_data\n", + "\n", + "# you can also add animation functions to individual subplots\n", + "def update_data_subplot(subplot_instance):\n", + " pass\n", "\n", - "#add this as an animation function\n", - "plot_v.add_animations(update_data)\n", + "# add this as an animation function\n", + "fig_v.add_animations(update_data)\n", + "\n", + "# similarly you can add animation function to a subplot\n", + "# fig_v[0, 0].add_animations(update_data_subplot)\n", "\n", "# show the plot\n", - "plot_v.show()" + "fig_v.show()" ] }, { @@ -616,9 +586,9 @@ "id": "b313eda1-6e6c-466f-9fd5-8b70c1d3c110", "metadata": {}, "source": [ - "**Share controllers across plots**\n", + "### We can share controllers across plots\n", "\n", - "This example creates a new plot, but it synchronizes the pan-zoom controller" + "This example creates a new figure, but it share the pan-zoom controllers from the previous figure!" ] }, { @@ -628,21 +598,21 @@ "metadata": {}, "outputs": [], "source": [ - "plot_sync = fpl.Plot(controller=plot_v.controller)\n", + "fig_sync = fpl.Figure(controllers=fig_v.controllers)\n", "\n", "data = np.random.rand(512, 512)\n", "\n", - "image_graphic_instance = plot_sync.add_image(data=data, cmap=\"viridis\")\n", + "image_graphic_instance = fig_sync[0, 0].add_image(data=data, cmap=\"viridis\")\n", "\n", "# you will need to define a new animation function for this graphic\n", "def update_data_2():\n", " new_data = np.random.rand(512, 512)\n", - " # alternatively, you can use the stored reference to the graphic as well instead of indexing the Plot\n", + " # alternatively, you can use the stored reference to the graphic as well instead of indexing the subplot\n", " image_graphic_instance.data = new_data\n", "\n", - "plot_sync.add_animations(update_data_2)\n", + "fig_sync.add_animations(update_data_2)\n", "\n", - "plot_sync.show()" + "fig_sync.show()" ] }, { @@ -650,7 +620,7 @@ "id": "f226c9c2-8d0e-41ab-9ab9-1ae31fd91de5", "metadata": {}, "source": [ - "Keeping a reference to the Graphic instance, as shown above `image_graphic_instance`, is useful if you're creating something where you need flexibility in the naming of the graphics" + "#### Keeping a reference to the Graphic instance, as shown above `image_graphic_instance`, is useful if you're creating something where it is convenient to keep your own reference to a `Graphic`" ] }, { @@ -658,29 +628,29 @@ "id": "d11fabb7-7c76-4e94-893d-80ed9ee3be3d", "metadata": {}, "source": [ - "You can also use `ipywidgets.VBox` and `HBox` to stack plots. See the `gridplot` notebooks for a proper gridplot interface for more automated subplotting\n", - "\n", - "Not shown in the docs, try the live demo for this feature" + "### You can also use `ipywidgets.VBox` and `HBox` to stack plots." ] }, { "cell_type": "code", "execution_count": null, - "id": "ef9743b3-5f81-4b79-9502-fa5fca08e56d", + "id": "11839d95-8ff7-444c-ae13-6b072c3112c5", "metadata": {}, "outputs": [], "source": [ - "#VBox([plot_v.canvas, plot_sync.show()])" + "HBox([fig_v.show(), fig_sync.show()])" ] }, { "cell_type": "code", "execution_count": null, - "id": "11839d95-8ff7-444c-ae13-6b072c3112c5", + "id": "f33f4cd9-02fc-41b7-961b-9dfeb455b63a", "metadata": {}, "outputs": [], "source": [ - "#HBox([plot_v.show(), plot_sync.show()])" + "# close figures\n", + "fig_v.close()\n", + "fig_sync.close()" ] }, { @@ -690,11 +660,11 @@ "tags": [] }, "source": [ - "## Line plots\n", + "# Line plots\n", "\n", - "2D line plots\n", + "## 2D line plots\n", "\n", - "This example plots a sine wave, cosine wave, and ricker wavelet and demonstrates how **Graphic Features** can be modified by slicing!" + "This example plots a sine wave, cosine wave, and ricker wavelet and demonstrates how **Graphic Properties** can be modified by slicing!" ] }, { @@ -702,7 +672,7 @@ "id": "a6fee1c2-4a24-4325-bca2-26e5a4bf6338", "metadata": {}, "source": [ - "Generate some data." + "### First generate some data." ] }, { @@ -716,16 +686,16 @@ "xs = np.linspace(-10, 10, 100)\n", "# sine wave\n", "ys = np.sin(xs)\n", - "sine = np.dstack([xs, ys])[0]\n", + "sine = np.column_stack([xs, ys])\n", "\n", "# cosine wave\n", "ys = np.cos(xs) + 5\n", - "cosine = np.dstack([xs, ys])[0]\n", + "cosine = np.column_stack([xs, ys])\n", "\n", "# sinc function\n", "a = 0.5\n", "ys = np.sinc(xs) * 3 + 8\n", - "sinc = np.dstack([xs, ys])[0]" + "sinc = np.column_stack([xs, ys])" ] }, { @@ -733,7 +703,7 @@ "id": "fbb806e5-1565-4189-936c-b7cf147a59ee", "metadata": {}, "source": [ - "Plot all of it on the same plot. Each line plot will be an individual Graphic, you can have any combination of graphics on a plot." + "### We will plot all of it on the same plot. Each line plot will be an individual Graphic, you can have any combination of graphics on a plot." ] }, { @@ -743,44 +713,49 @@ "metadata": {}, "outputs": [], "source": [ - "# Create a plot instance\n", - "plot_l = fpl.Plot()\n", + "# Create a figure\n", + "fig_lines = fpl.Figure()\n", + "\n", + "# we will add all the lines to the same subplot\n", + "subplot = fig_lines[0, 0]\n", "\n", "# plot sine wave, use a single color\n", - "sine_graphic = plot_l.add_line(data=sine, thickness=5, colors=\"magenta\")\n", + "sine_graphic = subplot.add_line(data=sine, thickness=5, colors=\"magenta\")\n", "\n", "# you can also use colormaps for lines!\n", - "cosine_graphic = plot_l.add_line(data=cosine, thickness=12, cmap=\"autumn\")\n", + "cosine_graphic = subplot.add_line(data=cosine, thickness=12, cmap=\"autumn\")\n", "\n", "# or a list of colors for each datapoint\n", "colors = [\"r\"] * 25 + [\"purple\"] * 25 + [\"y\"] * 25 + [\"b\"] * 25\n", - "sinc_graphic = plot_l.add_line(data=sinc, thickness=5, colors = colors)\n", + "sinc_graphic = subplot.add_line(data=sinc, thickness=5, colors = colors)\n", "\n", - "plot_l.show()" - ] - }, - { - "cell_type": "markdown", - "id": "22dde600-0f56-4370-b017-c8f23a6c01aa", - "metadata": {}, - "source": [ - "\"stretching\" the camera, useful for large timeseries data\n", - "\n", - "Set `maintain_aspect = False` on a camera, and then use the right mouse button and move the mouse to stretch and squeeze the view!\n", - "\n", - "You can also click the **`1:1`** button to toggle this." + "# show the plot\n", + "fig_lines.show(sidecar=True, sidecar_kwargs={\"title\": \"lines\"})" ] }, { "cell_type": "code", "execution_count": null, - "id": "2695f023-f6ce-4e26-8f96-4fbed5510d1d", + "id": "a4060576-2f29-4e4b-a86a-0410c766bd98", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot_l.camera.maintain_aspect = False" + "# testing cell, ignore\n", + "plot_test(\"lines\", fig_lines)" + ] + }, + { + "cell_type": "markdown", + "id": "22dde600-0f56-4370-b017-c8f23a6c01aa", + "metadata": {}, + "source": [ + "### \"stretching\" the camera, useful for large timeseries data\n", + "\n", + "Set `maintain_aspect = False` on a camera, and then use the right mouse button and move the mouse to stretch and squeeze the view!\n", + "\n", + "You can also click the **`ā›¶`** button to toggle this, or use `subplot.camera.maintain_aspect`" ] }, { @@ -788,7 +763,7 @@ "id": "1651e965-f750-47ac-bf53-c23dae84cc98", "metadata": {}, "source": [ - "reset the plot area" + "### reset the plot area camera" ] }, { @@ -800,7 +775,7 @@ }, "outputs": [], "source": [ - "plot_l.auto_scale(maintain_aspect=True)" + "subplot.auto_scale(maintain_aspect=True)" ] }, { @@ -808,7 +783,9 @@ "id": "dcd68796-c190-4c3f-8519-d73b98ff6367", "metadata": {}, "source": [ - "Graphic features support slicing! :D " + "## Graphic properties support slicing! :D\n", + "\n", + "Data, colors, and cmaps can often be sliced just like arrays to set or get values!" ] }, { @@ -831,32 +808,12 @@ "cosine_graphic.colors[65:90, 0] = np.linspace(0, 1, 90-65)" ] }, - { - "cell_type": "markdown", - "id": "bfe14ed3-e81f-4058-96a7-e2720b6d2f45", - "metadata": {}, - "source": [ - "Make a snapshot of the canvas after slicing" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a061a888-d732-406e-a9c2-8cc632fbc368", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot_l.canvas.snapshot()" - ] - }, { "cell_type": "markdown", "id": "c9689887-cdf3-4a4d-948f-7efdb09bde4e", "metadata": {}, "source": [ - "**You can capture changes to a graphic feature as events**" + "## Graphic properties are _evented_, so you can capture when they change" ] }, { @@ -870,7 +827,7 @@ " print(event_data)\n", "\n", "# Will print event data when the color changes\n", - "cosine_graphic.colors.add_event_handler(callback_func)" + "cosine_graphic.add_event_handler(callback_func, \"colors\")" ] }, { @@ -888,13 +845,14 @@ { "cell_type": "code", "execution_count": null, - "id": "3da9a43b-35bd-4b56-9cc7-967536aac967", + "id": "ef8cab1b-8327-43e2-b021-176125b91ca9", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot_l.canvas.snapshot()" + "# testing cell, ignore\n", + "plot_test(\"lines-colors\", fig_lines)" ] }, { @@ -902,7 +860,7 @@ "id": "c29f81f9-601b-49f4-b20c-575c56e58026", "metadata": {}, "source": [ - "Graphic `data` is also indexable" + "## Graphic _data_ is also slicable and settable" ] }, { @@ -929,211 +887,424 @@ { "cell_type": "code", "execution_count": null, - "id": "f779cba0-7ee2-4795-8da8-9a9593d3893e", + "id": "96086bd4-cdaa-467d-a68b-1f57002ad6c5", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot_l.canvas.snapshot()" + "# testing cell, ignore\n", + "plot_test(\"lines-data\", fig_lines)" ] }, { "cell_type": "markdown", - "id": "3f6d264b-1b03-407e-9d83-cd6cfb02e706", + "id": "05f93e93-283b-45d8-ab31-8d15a7671dd2", "metadata": {}, "source": [ - "Toggle the presence of a graphic within the scene" + "### You can set the z-positions of graphics to have them appear under other graphics" ] }, { "cell_type": "code", "execution_count": null, - "id": "fcba75b7-9a1e-4aae-9dec-715f7f7456c3", - "metadata": {}, + "id": "6bb33406-5bef-455b-86ea-358a7d3ffa94", + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "sinc_graphic.present = False" + "img = iio.imread(\"imageio:camera.png\")\n", + "\n", + "subplot.add_image(\n", + " img[::20, ::20],\n", + " name=\"image\",\n", + " cmap=\"gray\",\n", + ")\n", + "\n", + "subplot[\"image\"].offset = (-12, -10, -1)" ] }, { "cell_type": "code", "execution_count": null, - "id": "a5e22d0f-a244-47e2-9a2d-1eaf79eda1d9", + "id": "ae3e3dc9-e49b-430a-8471-5d0a0d659d20", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot_l.canvas.snapshot()" + "# testing cell, ignore\n", + "plot_test(\"lines-underlay\", fig_lines)" ] }, { "cell_type": "code", "execution_count": null, - "id": "763b9943-53a4-4e2a-b47a-4e9e5c9d7be3", + "id": "bef729ea-f524-4efd-a189-bfca23b39af5", "metadata": {}, "outputs": [], "source": [ - "sinc_graphic.present = True" + "# close plot\n", + "fig_lines.close()" + ] + }, + { + "cell_type": "markdown", + "id": "3ada943c-f02c-419b-b384-3865ecbe25fb", + "metadata": {}, + "source": [ + "# Animation example with lines" ] }, { "cell_type": "code", "execution_count": null, - "id": "b22a8660-26b3-4c73-b87a-df9d7cb4353a", - "metadata": { - "tags": [] - }, + "id": "8fb64bed-3b47-43e3-9ef5-f8223005b7d2", + "metadata": {}, + "outputs": [], + "source": [ + "# just another example of animations\n", + "start, stop = 0, 2 * np.pi\n", + "increment = (2 * np.pi) / 50\n", + "\n", + "# make a simple sine wave\n", + "xs = np.linspace(start, stop, 100)\n", + "ys = np.sin(xs)\n", + "\n", + "fig = fpl.Figure()\n", + "fig[0, 0].add_line(ys, name=\"sine\")\n", + "\n", + "fig.show(maintain_aspect=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3002bc55-2612-40c8-a088-c07e138b739a", + "metadata": {}, + "outputs": [], + "source": [ + "# increment along the x-axis on each render loop :D \n", + "def update_line(subplot):\n", + " global increment, start, stop\n", + " xs = np.linspace(start + increment, stop + increment, 100)\n", + " ys = np.sin(xs)\n", + " \n", + " start += increment\n", + " stop += increment\n", + "\n", + " # change only the y-axis values of the line\n", + " subplot[\"sine\"].data[:, 1] = ys\n", + "\n", + "\n", + "fig[0, 0].add_animations(update_line)" + ] + }, + { + "cell_type": "markdown", + "id": "fc8c68af-810a-4564-b97d-020054b57f37", + "metadata": {}, + "source": [ + "You can remove an animation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6321c989-60b2-4c9b-a638-a7ac1a2e4a84", + "metadata": {}, "outputs": [], "source": [ - "plot_l.canvas.snapshot()" + "fig[0, 0].remove_animation(update_line)" ] }, { "cell_type": "markdown", - "id": "86f4e535-ce88-415a-b8d2-53612a2de7b9", + "id": "21bb17a8-cfca-4f4b-adc9-614fcffad447", "metadata": {}, "source": [ - "You can create callbacks to `present` too, for example to re-scale the plot w.r.t. graphics that are present in the scene" + "And add it back" ] }, { "cell_type": "code", "execution_count": null, - "id": "64a20a16-75a5-4772-a849-630ade9be4ff", + "id": "7749a085-d853-4859-bf99-f2bbecb50306", "metadata": {}, "outputs": [], "source": [ - "sinc_graphic.present.add_event_handler(plot_l.auto_scale)" + "fig[0, 0].add_animations(update_line)" ] }, { "cell_type": "code", "execution_count": null, - "id": "fb093046-c94c-4085-86b4-8cd85cb638ff", + "id": "2cf02a6c-cb1a-4972-ae96-09e6ba37e9dd", "metadata": {}, "outputs": [], "source": [ - "sinc_graphic.present = False" + "fig.close()" + ] + }, + { + "cell_type": "markdown", + "id": "2c90862e-2f2a-451f-a468-0cf6b857e87a", + "metadata": {}, + "source": [ + "### 3D line plot" ] }, { "cell_type": "code", "execution_count": null, - "id": "f9dd6a54-3460-4fb7-bffb-82fd9288902f", + "id": "9c51229f-13a2-4653-bff3-15d43ddbca7b", + "metadata": {}, + "outputs": [], + "source": [ + "# just set the camera as \"3d\", the rest is basically the same :D\n", + "fig_l3d = fpl.Figure(cameras=\"3d\")\n", + "\n", + "# create a spiral\n", + "phi = np.linspace(0, 30, 200)\n", + "\n", + "xs = phi * np.cos(phi)\n", + "ys = phi * np.sin(phi)\n", + "zs = phi\n", + "\n", + "# use 3D data\n", + "# note: you usually mix 3D and 2D graphics on the same plot\n", + "spiral = np.column_stack([xs, ys, zs])\n", + "\n", + "fig_l3d[0, 0].add_line(data=spiral, thickness=2, cmap='winter')\n", + "\n", + "fig_l3d.show()" + ] + }, + { + "cell_type": "markdown", + "id": "29f07af0-cdcb-47cc-bbb3-2fa4449fa084", + "metadata": {}, + "source": [ + "**Use WASD keys and the mouse to move around, just like in a game :D. Use the mouse weel to control the speed of movement.**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "28eb7014-4773-4a34-8bfc-bd3a46429012", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "fig_l3d[0, 0].auto_scale(maintain_aspect=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5135f3f1-a004-4451-86cd-ead6acea6e13", "metadata": { "tags": [] }, "outputs": [], "source": [ - "plot_l.canvas.snapshot()" + "# testing cell, ignore\n", + "plot_test(\"lines-3d\", fig_l3d)" ] }, { "cell_type": "code", "execution_count": null, - "id": "f05981c3-c768-4631-ae62-6a8407b20c4c", + "id": "7a6da884-8b40-4ebf-837f-929b3e9cf4c4", "metadata": {}, "outputs": [], "source": [ - "sinc_graphic.present = True" + "# change the FOV of the persepctive camera\n", + "fig_l3d[0, 0].camera.fov = 70" ] }, { "cell_type": "code", "execution_count": null, - "id": "cb5bf73e-b015-4b4f-82a0-c3ae8cc39ef7", + "id": "9e126e6c", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "plot_l.canvas.snapshot()" + "# change the controller, ex. from the current \"fly\" controller to a \"panzoom\" controller\n", + "fig_l3d[0, 0].controller = \"panzoom\"" ] }, { - "cell_type": "markdown", - "id": "05f93e93-283b-45d8-ab31-8d15a7671dd2", + "cell_type": "code", + "execution_count": null, + "id": "11577230-8268-4b1d-a384-62d4c7f2483f", "metadata": {}, + "outputs": [], "source": [ - "You can set the z-positions of graphics to have them appear under or over other graphics" + "# or an orbit controller\n", + "fig_l3d[0, 0].controller = \"orbit\"" ] }, { "cell_type": "code", "execution_count": null, - "id": "6bb33406-5bef-455b-86ea-358a7d3ffa94", + "id": "c2c70541-98fe-4e02-a718-ac2857cc25be", "metadata": { "tags": [] }, "outputs": [], "source": [ - "img = np.random.rand(20, 100)\n", + "# close plot\n", + "fig_l3d.close()" + ] + }, + { + "cell_type": "markdown", + "id": "4221ecae-74dc-464c-addf-f4fe91614a26", + "metadata": {}, + "source": [ + "# A travelling electromagnetic wave :D " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "34139d49-af6e-4dc9-90cc-fbf193a64e7f", + "metadata": {}, + "outputs": [], + "source": [ + "import fastplotlib as fpl\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0716a5c9-cf7b-417c-b809-032f5a217c4d", + "metadata": {}, + "outputs": [], + "source": [ + "fig_em = fpl.Figure(\n", + " cameras=\"3d\", \n", + " controller_types=\"orbit\", \n", + " size=(700, 400)\n", + ")\n", + "\n", + "start, stop = 0, 4 * np.pi\n", + "\n", + "# let's define the x, y and z axes for each with direction of wave propogation along the z-axis\n", + "# electric field in the xz plane travelling along\n", + "zs = np.linspace(start, stop, 200)\n", + "e_ys = np.zeros(200)\n", + "e_xs = np.sin(zs)\n", + "electric = np.column_stack([e_xs, e_ys, zs])\n", + "\n", + "# magnetic field in the yz plane\n", + "zs = np.linspace(start, stop, 200)\n", + "m_ys = np.sin(zs)\n", + "m_xs = np.zeros(200)\n", + "magnetic = np.column_stack([m_xs, m_ys, zs])\n", + "\n", + "# add the lines\n", + "fig_em[0, 0].add_line(electric, colors=\"blue\", thickness=2, name=\"e\")\n", + "fig_em[0, 0].add_line(magnetic, colors=\"red\", thickness=2, name=\"m\")\n", + "\n", + "# draw vector line at every 10th position\n", + "electric_vectors = [np.array([[0, 0, z], [x, 0, z]]) for (x, z) in zip(e_xs[::10], zs[::10])]\n", + "magnetic_vectors = [np.array([[0, 0, z], [0, y, z]]) for (y, z) in zip(m_ys[::10], zs[::10])]\n", + "\n", + "# add as a line collection\n", + "fig_em[0, 0].add_line_collection(electric_vectors, colors=\"blue\", thickness=1.5, name=\"e-vec\")\n", + "fig_em[0, 0].add_line_collection(magnetic_vectors, colors=\"red\", thickness=1.5, name=\"m-vec\")\n", + "\n", + "# axes are a WIP, just draw a white line along z for now\n", + "z_axis = np.array([[0, 0, 0], [0, 0, stop]])\n", + "fig_em[0, 0].add_line(z_axis, colors=\"w\", thickness=1)\n", + "\n", + "# just a pre-saved camera state\n", + "state = {\n", + " 'position': np.array([-8.0 , 6.0, -2.0]),\n", + " 'rotation': np.array([0.09, 0.9 , 0.2, -0.5]),\n", + " 'scale': np.array([1., 1., 1.]),\n", + " 'reference_up': np.array([0., 1., 0.]),\n", + " 'fov': 50.0,\n", + " 'width': 12,\n", + " 'height': 12,\n", + " 'zoom': 1.35,\n", + " 'maintain_aspect': True,\n", + " 'depth_range': None\n", + "}\n", + "\n", "\n", - "plot_l.add_image(img, name=\"image\", cmap=\"gray\")\n", + "fig_em[0, 0].camera.set_state(state)\n", "\n", - "# z axis position -1 so it is below all the lines\n", - "plot_l[\"image\"].position_z = -1\n", - "plot_l[\"image\"].position_x = -50" + "fig_em.show()" ] }, { "cell_type": "code", "execution_count": null, - "id": "5b586a89-ca3e-4e88-a801-bdd665384f59", - "metadata": { - "tags": [] - }, + "id": "faa52d55-2631-422d-8836-ec371be728c0", + "metadata": {}, "outputs": [], "source": [ - "plot_l.canvas.snapshot()" + "fig_em[0, 0].camera.zoom = 1.5" ] }, { "cell_type": "markdown", - "id": "2c90862e-2f2a-451f-a468-0cf6b857e87a", + "id": "d886c63b-7bcb-40d4-b315-dffff71f82f0", "metadata": {}, "source": [ - "### 3D line plot" + "## Animation for the EM wave" ] }, { "cell_type": "code", "execution_count": null, - "id": "9c51229f-13a2-4653-bff3-15d43ddbca7b", + "id": "7ae54258-0c5a-40cc-9ca0-40b47d25de9a", "metadata": {}, "outputs": [], "source": [ - "# just set the camera as \"3d\", the rest is basically the same :D \n", - "plot_l3d = fpl.Plot(camera='3d')\n", + "increment = np.pi * 4 / 100\n", "\n", - "# create a spiral\n", - "phi = np.linspace(0, 30, 200)\n", + "# moves the wave one step along the z-axis\n", + "def tick(subplot):\n", + " global increment, start, stop, zs\n", + " new_zs = np.linspace(start, stop, 200)\n", + " new_data = np.sin(new_zs)\n", "\n", - "xs = phi * np.cos(phi)\n", - "ys = phi * np.sin(phi)\n", - "zs = phi\n", - "\n", - "# use 3D data\n", - "# note: you usually mix 3D and 2D graphics on the same plot\n", - "spiral = np.dstack([xs, ys, zs])[0]\n", + " # just change the x-axis vals for the electric field\n", + " subplot[\"e\"].data[:, 0] = new_data\n", + " # and y-axis vals for magnetic field\n", + " subplot[\"m\"].data[:, 1] = new_data\n", "\n", - "plot_l3d.add_line(data=spiral, thickness=2, cmap='winter')\n", + " # update the vector lines\n", + " for i, (value, z) in enumerate(zip(new_data[::10], zs[::10])):\n", + " subplot[\"e-vec\"].graphics[i].data = np.array([[0, 0, z], [value, 0, z]])\n", + " subplot[\"m-vec\"].graphics[i].data = np.array([[0, 0, z], [0, value, z]])\n", + " \n", + " start += increment\n", + " stop += increment\n", "\n", - "plot_l3d.show()" + "fig_em[0, 0].add_animations(tick)" ] }, { "cell_type": "code", "execution_count": null, - "id": "28eb7014-4773-4a34-8bfc-bd3a46429012", - "metadata": { - "tags": [] - }, + "id": "774dba2e-f4c1-4c97-a427-c6f447139342", + "metadata": {}, "outputs": [], "source": [ - "plot_l3d.auto_scale(maintain_aspect=True)" + "fig_em.close()" ] }, { @@ -1141,11 +1312,11 @@ "id": "a202b3d0-2a0b-450a-93d4-76d0a1129d1d", "metadata": {}, "source": [ - "## Scatter plots\n", + "# Scatter plots\n", "\n", - "Plot tens of thousands or millions of points\n", + "### Plot tens of thousands or millions of points\n", "\n", - "There might be a small delay for a few seconds before the plot shows, this is due to shaders being compiled and a few other things. The plot should be very fast and responsive once it is displayed and future modifications should also be fast!" + "#### There might be a small delay for a few seconds before the plot shows, this is due to shaders being compiled and a few other things. The plot should be very fast and responsive once it is displayed and future modifications should also be fast!" ] }, { @@ -1155,9 +1326,8 @@ "metadata": {}, "outputs": [], "source": [ - "# create a random distribution\n", - "# only 1,000 points shown here in the docs, but it can be millions\n", - "n_points = 1_000\n", + "# create a random distribution of 10,000 xyz coordinates\n", + "n_points = 10_000\n", "\n", "# if you have a good GPU go for 1.5 million points :D \n", "# this is multiplied by 3\n", @@ -1183,12 +1353,12 @@ "colors = [\"yellow\"] * n_points + [\"cyan\"] * n_points + [\"magenta\"] * n_points\n", "\n", "# create plot\n", - "plot_s = fpl.Plot()\n", - "\n", + "fig_scatter = fpl.Figure()\n", + "subplot_scatter = fig_scatter[0, 0]\n", "# use an alpha value since this will be a lot of points\n", - "scatter_graphic = plot_s.add_scatter(data=cloud, sizes=3, colors=colors, alpha=0.7)\n", + "scatter_graphic = subplot_scatter.add_scatter(data=cloud, sizes=3, colors=colors, alpha=0.6)\n", "\n", - "plot_s.show()" + "fig_scatter.show(sidecar=True)" ] }, { @@ -1196,7 +1366,7 @@ "id": "b6e4a704-ee6b-4316-956e-acb4dcc1c6f2", "metadata": {}, "source": [ - "**Scatter graphic features work similarly to line graphic**" + "### scatter graphic features work similarly to line graphic" ] }, { @@ -1213,13 +1383,12 @@ { "cell_type": "code", "execution_count": null, - "id": "293a4793-44b9-4d18-ae6a-68e7c6f91acc", - "metadata": { - "tags": [] - }, + "id": "a5962263-8032-40ad-9981-fa0a649e2643", + "metadata": {}, "outputs": [], "source": [ - "plot_s.canvas.snapshot()" + "# other half of the first cloud's points to purple\n", + "scatter_graphic.colors[1:n_points:2] = \"purple\"" ] }, { @@ -1236,201 +1405,235 @@ { "cell_type": "code", "execution_count": null, - "id": "5ea7852d-fdae-401b-83b6-b6cfd975f64f", - "metadata": { - "tags": [] - }, + "id": "5b637a29-cd5e-4011-ab81-3f91490d9ecd", + "metadata": {}, "outputs": [], "source": [ - "plot_s.canvas.snapshot()" + "# set color values directly using an array\n", + "scatter_graphic.colors[n_points * 2:] = np.repeat([[1, 1, 0, 0.5]], n_points, axis=0)" ] }, { "cell_type": "code", "execution_count": null, - "id": "5b637a29-cd5e-4011-ab81-3f91490d9ecd", + "id": "a4084fce-78a2-48b3-9a0d-7b57c165c3c1", "metadata": {}, "outputs": [], "source": [ - "# set color values directly using an array\n", - "scatter_graphic.colors[n_points * 2:] = np.repeat([[1, 1, 0, 0.5]], n_points, axis=0)" + "# change the data, change y-values\n", + "scatter_graphic.data[n_points:n_points * 2, 1] += 15" ] }, { "cell_type": "code", "execution_count": null, - "id": "02c19f51-6436-4601-976e-04326df0de81", - "metadata": { - "tags": [] - }, + "id": "f486083e-7c58-4255-ae1a-3fe5d9bfaeed", + "metadata": {}, "outputs": [], "source": [ - "plot_s.canvas.snapshot()" + "# set x values directly but using an array\n", + "scatter_graphic.data[n_points:n_points * 2, 0] = np.linspace(-40, 0, n_points)" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "a4084fce-78a2-48b3-9a0d-7b57c165c3c1", + "cell_type": "markdown", + "id": "5f3e206d-97af-4e07-9969-94f2fdb41004", "metadata": {}, - "outputs": [], "source": [ - "# change the data, change y-values\n", - "scatter_graphic.data[n_points:n_points * 2, 1] += 15" + "**Switch to a fly controller to move around the plot in 3D!**" ] }, { "cell_type": "code", "execution_count": null, - "id": "2ec43f58-4710-4603-9358-682c4af3f701", - "metadata": { - "tags": [] - }, + "id": "c67944ca-52e7-4213-b820-6572cc3f76f0", + "metadata": {}, "outputs": [], "source": [ - "plot_s.canvas.snapshot()" + "subplot_scatter.camera = \"3d\"\n", + "subplot_scatter.controller = \"fly\"" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "f486083e-7c58-4255-ae1a-3fe5d9bfaeed", + "cell_type": "markdown", + "id": "43ae13f1-d59b-4673-b0b3-669542b4c127", "metadata": {}, - "outputs": [], "source": [ - "# set x values directly but using an array\n", - "scatter_graphic.data[n_points:n_points * 2, 0] = np.linspace(-40, 0, n_points)" + "## Animation\n", + "\n", + "Move the cloud by a small delta on every render cycle" ] }, { "cell_type": "code", "execution_count": null, - "id": "6bcb3bc3-4b75-4bbc-b8ca-f8a3219ec3d7", - "metadata": { - "tags": [] - }, + "id": "50d2e96f-718c-4925-9e81-a92e81134741", + "metadata": {}, "outputs": [], "source": [ - "plot_s.canvas.snapshot()" + "def update_points(subplot):\n", + " # move every point by a small amount\n", + " deltas = np.random.normal(size=scatter_graphic.data.value.shape, loc=0, scale=0.15)\n", + " scatter_graphic.data = scatter_graphic.data[:] + deltas\n", + "\n", + "subplot_scatter.add_animations(update_points)" ] }, { "cell_type": "markdown", - "id": "d9e554de-c436-4684-a46a-ce8a33d409ac", + "id": "1592c6cd-d10a-4bda-ac4b-e06d428ffa1d", "metadata": {}, "source": [ - "## ipywidget layouts\n", - "\n", - "This just plots everything from these examples in a single output cell" + "Another animation function to cycle the colors of one of the clouds" ] }, { "cell_type": "code", "execution_count": null, - "id": "01a6f70b-c81b-4ee5-8a6b-d979b87227eb", - "metadata": { - "tags": [] - }, + "id": "fb0394a3-47d9-4620-a754-d04d5f313cc7", + "metadata": {}, "outputs": [], "source": [ - "# row1 = HBox([plot.show(), plot_v.show(), plot_sync.show()])\n", - "# row2 = HBox([plot_l.show(), plot_l3d.show(), plot_s.show()])\n", + "i = 0.05\n", + "def cycle_colors(subplot):\n", + " global i\n", + " # cycle the red values\n", + " scatter_graphic.colors[n_points * 2:, 0] = np.abs(np.sin(i))\n", + " scatter_graphic.colors[n_points * 2:, 1] = np.abs(np.sin(i + (np.pi / 4)))\n", + " scatter_graphic.colors[n_points * 2:, 2] = np.abs(np.cos(i))\n", + " i += 0.05\n", "\n", - "# VBox([row1, row2])" + "subplot_scatter.add_animations(cycle_colors)" ] }, { - "cell_type": "markdown", - "id": "a26c0063-b7e0-4f36-bb14-db06bafa31aa", + "cell_type": "code", + "execution_count": null, + "id": "a9ffdde4-4b8e-4ff7-98b3-464cf5462d20", "metadata": {}, + "outputs": [], "source": [ - "## Gridplot\n", - "\n", - "Subplots within a `GridPlot` behave the same as simple `Plot` instances! \n", - "\n", - "šŸ’” `Plot` is actually a subclass of `Subplot`!" + "# close plot\n", + "fig_scatter.close()" + ] + }, + { + "cell_type": "markdown", + "id": "b354b04d", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "source": [ + "## More subplots" ] }, { "cell_type": "code", "execution_count": null, - "id": "6b7e1129-ae8e-4a0f-82dc-bd8fb65871fc", + "id": "e0797523", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "# GridPlot of shape 2 x 3 with all controllers synced\n", - "grid_plot = fpl.GridPlot(shape=(2, 3), controllers=\"sync\")\n", + "# Figure of shape 2 x 3 with all controllers synced\n", + "figure_grid = fpl.Figure(shape=(2, 3), controller_ids=\"sync\")\n", "\n", "# Make a random image graphic for each subplot\n", - "for subplot in grid_plot:\n", + "for subplot in figure_grid:\n", " # create image data\n", " data = np.random.rand(512, 512)\n", " # add an image to the subplot\n", " subplot.add_image(data, name=\"rand-img\")\n", "\n", "# Define a function to update the image graphics with new data\n", - "# add_animations will pass the gridplot to the animation function\n", - "def update_data(gp):\n", - " for sp in gp:\n", + "# add_animations will pass the figure to the animation function\n", + "def update_data(f):\n", + " for subplot in f:\n", " new_data = np.random.rand(512, 512)\n", " # index the image graphic by name and set the data\n", - " sp[\"rand-img\"].data = new_data\n", - " \n", + " subplot[\"rand-img\"].data = new_data\n", + "\n", "# add the animation function\n", - "grid_plot.add_animations(update_data)\n", + "figure_grid.add_animations(update_data)\n", "\n", - "# show the gridplot \n", - "grid_plot.show()" + "# show the figure\n", + "figure_grid.show()" ] }, { "cell_type": "markdown", - "id": "f4f71c34-3925-442f-bd76-60dd57d09f48", - "metadata": {}, + "id": "0c5b20e5", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "source": [ - "### Slicing GridPlot" + "### Slicing a grid layout to get subplots" ] }, { "cell_type": "code", "execution_count": null, - "id": "d8194c9e-9a99-4d4a-8984-a4cfcab0c42c", + "id": "a14b7e90", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ "# positional indexing\n", "# row 0 and col 0\n", - "grid_plot[0, 0]" + "figure_grid[0, 0]" ] }, { "cell_type": "markdown", - "id": "d626640f-bc93-4883-9bf4-47b825bbc663", - "metadata": {}, + "id": "45f29bed", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "source": [ - "You can get the graphics within a subplot, just like with simple `Plot`" + "You can get the graphics within a subplot" ] }, { "cell_type": "code", "execution_count": null, - "id": "bffec80c-e81b-4945-85a2-c2c5e8395677", + "id": "fbe632aa", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "grid_plot[0, 1].graphics" + "figure_grid[0, 1].graphics" ] }, { "cell_type": "markdown", - "id": "a4e3184f-c86a-4a7e-b803-31632cc163b0", - "metadata": {}, + "id": "44ccf745", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "source": [ "and change their properties" ] @@ -1438,78 +1641,87 @@ { "cell_type": "code", "execution_count": null, - "id": "04b616fb-6644-42ba-8683-0589ce7d165e", + "id": "85e6bf84", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "grid_plot[0, 1].graphics[0].vmax = 0.5" + "figure_grid[0, 1].graphics[0].vmax = 0.5" ] }, { "cell_type": "markdown", - "id": "28f7362c-d1b9-43ef-85c5-4d68f70f459c", - "metadata": {}, - "source": [ - "more slicing with `GridPlot`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "920e6365-bb50-4882-9b0d-8367dc485360", + "id": "fb4155b9", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, - "outputs": [], "source": [ - "# you can give subplots human-readable string names\n", - "grid_plot[0, 2].name = \"top-right-plot\"" + "more slicing with a `Figure` that has a grid layout" ] }, { "cell_type": "code", "execution_count": null, - "id": "73300d2c-3e70-43ad-b5a2-40341b701ac8", + "id": "e6c3af07", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "grid_plot[\"top-right-plot\"]" + "# you can give subplots human-readable string names\n", + "figure_grid[0, 2].name = \"top-right-plot\"" ] }, { "cell_type": "code", "execution_count": null, - "id": "834d9905-35e9-4711-9375-5b1828c80ee2", + "id": "8848486b", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "# view its position\n", - "grid_plot[\"top-right-plot\"].position" + "figure_grid[\"top-right-plot\"]" ] }, { "cell_type": "code", "execution_count": null, - "id": "9aa61efa-c6a5-4611-a03b-1b8da66b19f0", + "id": "a002a426", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "# these are really the same\n", - "grid_plot[\"top-right-plot\"] is grid_plot[0, 2]" + "# these are the same\n", + "figure_grid[\"top-right-plot\"] is figure_grid[0, 2]" ] }, { "cell_type": "markdown", - "id": "28c8b145-86cb-4445-92be-b7537a87f7ca", - "metadata": {}, + "id": "df361421", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "source": [ "Indexing with subplot name and graphic name" ] @@ -1517,66 +1729,77 @@ { "cell_type": "code", "execution_count": null, - "id": "2b7b73a3-5335-4bd5-bbef-c7d3cfbb3ca7", + "id": "c9915469", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "grid_plot[\"top-right-plot\"][\"rand-img\"].vmin = 0.5" + "figure_grid[\"top-right-plot\"][\"rand-img\"].vmin = 0.5" ] }, { "cell_type": "markdown", - "id": "6a5b4368-ae4d-442c-a11f-45c70267339b", - "metadata": {}, + "id": "219648d3", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "source": [ - "## GridPlot customization" + "## Figure subplot customization in a grid layout" ] }, { "cell_type": "code", "execution_count": null, - "id": "175d45a6-3351-4b75-8ff3-08797fe0a389", + "id": "1dcfe24c", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "# grid with 2 rows and 3 columns\n", - "grid_shape = (2, 3)\n", + "# 2 rows and 3 columns\n", + "shape = (2, 3)\n", "\n", "# pan-zoom controllers for each view\n", - "# views are synced if they have the \n", + "# views are synced if they have the\n", "# same controller ID\n", - "controllers = [\n", + "controller_ids = [\n", " [0, 3, 1], # id each controller with an integer\n", " [2, 2, 3]\n", "]\n", "\n", "\n", - "# you can give string names for each subplot within the gridplot\n", + "# you can give string names for each subplot within the figure\n", "names = [\n", " [\"subplot0\", \"subplot1\", \"subplot2\"],\n", " [\"subplot3\", \"subplot4\", \"subplot5\"]\n", "]\n", "\n", - "# Create the grid plot\n", - "grid_plot = fpl.GridPlot(\n", - " shape=grid_shape,\n", - " controllers=controllers,\n", + "# Create the figure\n", + "figure_grid = fpl.Figure(\n", + " shape=shape,\n", + " controller_ids=controller_ids,\n", " names=names,\n", ")\n", "\n", "\n", "# Make a random image graphic for each subplot\n", - "for subplot in grid_plot:\n", + "for subplot in figure_grid:\n", " data = np.random.rand(512, 512)\n", " # create and add an ImageGraphic\n", " subplot.add_image(data=data, name=\"rand-image\")\n", - " \n", "\n", - "# Define a function to update the image graphics \n", + "\n", + "# Define a function to update the image graphics\n", "# with new randomly generated data\n", "def set_random_frame(gp):\n", " for subplot in gp:\n", @@ -1584,50 +1807,66 @@ " subplot[\"rand-image\"].data = new_data\n", "\n", "# add the animation\n", - "grid_plot.add_animations(set_random_frame)\n", - "grid_plot.show()" + "figure_grid.add_animations(set_random_frame)\n", + "figure_grid.show()" ] }, { "cell_type": "markdown", - "id": "4224f1c2-5e61-4894-8d72-0519598a3cef", - "metadata": {}, + "id": "be699284", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "source": [ - "Indexing the gridplot to access subplots" + "Slicing/indexing the figure to get subplots" ] }, { "cell_type": "code", "execution_count": null, - "id": "d88dd9b2-9359-42e8-9dfb-96dcbbb34b95", + "id": "212a6e4f", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "# can access subplot by name\n", - "grid_plot[\"subplot0\"]" + "# get subplot by name\n", + "figure_grid[\"subplot0\"]" ] }, { "cell_type": "code", "execution_count": null, - "id": "a14df7ea-14c3-4a8a-84f2-2e2194236d9e", + "id": "b758b240", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "# can access subplot by index\n", - "grid_plot[0, 0]" + "# or get subplot by index\n", + "figure_grid[0, 0]" ] }, { "cell_type": "markdown", - "id": "5f8a3427-7949-40a4-aec2-38d5d95ef156", - "metadata": {}, + "id": "868f0de4", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "source": [ - "**subplots also support indexing!**\n", + "**from before, remember subplots themselves also support slicing to get graphics within them!**\n", "\n", "this can be used to get graphics if they are named" ] @@ -1635,61 +1874,93 @@ { "cell_type": "code", "execution_count": null, - "id": "8c99fee0-ce46-4f18-8300-af025c9a967c", + "id": "bc14549d", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ "# can access graphic directly via name\n", - "grid_plot[\"subplot0\"][\"rand-image\"]" + "figure_grid[\"subplot0\"][\"rand-image\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "87905450bdc0ec0a", + "metadata": {}, + "outputs": [], + "source": [ + "# or by their numerical index\n", + "figure_grid[\"subplot0\"].graphics[0]" ] }, { "cell_type": "code", "execution_count": null, - "id": "ed4eebb7-826d-4856-bbb8-db2de966a0c3", + "id": "99e3726e", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "grid_plot[\"subplot0\"][\"rand-image\"].vmin = 0.6\n", - "grid_plot[\"subplot0\"][\"rand-image\"].vmax = 0.8" + "figure_grid[\"subplot0\"][\"rand-image\"].vmin = 0.6\n", + "figure_grid[\"subplot0\"][\"rand-image\"].vmax = 0.8" ] }, { "cell_type": "markdown", - "id": "ad322f6f-e7de-4eb3-a1d9-cf28701a2eae", - "metadata": {}, + "id": "e3350b37", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "source": [ - "positional indexing also works event if subplots have string names" + "positional indexing also works even if subplots have string names" ] }, { "cell_type": "code", "execution_count": null, - "id": "759d3966-d92b-460f-ba48-e57adabbf163", + "id": "3b1986f5", "metadata": { - "tags": [] + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } }, "outputs": [], "source": [ - "grid_plot[1, 0][\"rand-image\"].vim = 0.1\n", - "grid_plot[1, 0][\"rand-image\"].vmax = 0.3" + "figure_grid[1, 0][\"rand-image\"].vim = 0.1\n", + "figure_grid[1, 0][\"rand-image\"].vmax = 0.3" ] }, { "cell_type": "code", "execution_count": null, - "id": "8a5753b9-ee71-4ed1-bb0d-52bdb4ea365f", - "metadata": { - "tags": [] - }, + "id": "370d5837-aecf-4e52-9323-b899ac458bbf", + "metadata": {}, "outputs": [], "source": [ - "grid_plot[1, 0][\"rand-image\"].type" + "# for testing, ignore\n", + "notebook_finished()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52b6c281-ab27-4984-9a6e-f1e27f609e44", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/examples/notebooks/scatter.ipynb b/examples/notebooks/scatter.ipynb deleted file mode 100644 index 948403f11..000000000 --- a/examples/notebooks/scatter.ipynb +++ /dev/null @@ -1,201 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "eb204b20-160a-48ef-8ac6-54d263e497e4", - "metadata": { - "tags": [] - }, - "source": [ - "# Scatter plots in a `GridPlot` layout with a mix of 2d an 3d cameras" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9b3041ad-d94e-4b2a-af4d-63bcd19bf6c2", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from fastplotlib import GridPlot" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "51f1d76a-f815-460f-a884-097fe3ea81ac", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# create a random distribution of 10,000 xyz coordinates\n", - "n_points = 10_000\n", - "\n", - "# if you have a good GPU go for 1.2 million points :D \n", - "# this is multiplied by 3\n", - "#n_points = 400_000\n", - "dims = (n_points, 3)\n", - "\n", - "offset = 15\n", - "\n", - "normal = np.random.normal(size=dims, scale=5)\n", - "cloud = np.vstack(\n", - " [\n", - " normal - offset,\n", - " normal,\n", - " normal + offset,\n", - " ]\n", - ")\n", - "\n", - "colors = [\"yellow\"] * n_points + [\"cyan\"] * n_points + [\"magenta\"] * n_points" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "922990b6-24e9-4fa0-977b-6577f9752d84", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# grid with 2 rows and 2 columns\n", - "shape = (2, 2)\n", - "\n", - "# define the camera\n", - "# a mix of 2d and 3d\n", - "cameras = [\n", - " ['2d', '3d'], \n", - " ['3d', '2d']\n", - "]\n", - "\n", - "# pan-zoom controllers for each view\n", - "# views are synced if they have the \n", - "# same controller ID\n", - "# you can only sync controllers that use the same camera type\n", - "# i.e. you cannot sync between 2d and 3d subplots\n", - "controllers = [\n", - " [0, 1],\n", - " [1, 0]\n", - "]\n", - "\n", - "# create the grid plot\n", - "grid_plot = GridPlot(\n", - " shape=shape,\n", - " cameras=cameras,\n", - " controllers=controllers\n", - ")\n", - "\n", - "for subplot in grid_plot:\n", - " subplot.add_scatter(data=cloud, colors=colors, alpha=0.7, sizes=5)\n", - " \n", - " subplot.set_axes_visibility(True)\n", - " subplot.set_grid_visibility(True)\n", - "\n", - "\n", - "grid_plot.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7b912961-f72e-46ef-889f-c03234831059", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "grid_plot[0, 1].graphics[0].colors[n_points:int(n_points * 1.5)] = \"r\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c6085806-c001-4632-ab79-420b4692693a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "grid_plot[0, 1].graphics[0].colors[:n_points:10] = \"blue\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6f416825-df31-4e5d-b66b-07f23b48e7db", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "grid_plot[0, 1].graphics[0].colors[n_points:] = \"green\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c0fd611e-73e5-49e6-a25c-9d5b64afa5f4", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "grid_plot[0, 1].graphics[0].colors[n_points:, -1] = 0" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cd390542-3a44-4973-8172-89e5583433bc", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "grid_plot[0, 1].graphics[0].data[:n_points] = grid_plot[0, 1].graphics[0].data[n_points * 2:]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fb49930f-b795-4b41-bbc6-014a27c2f463", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7d8aac54-4f36-41d4-8e5b-8d8da2f0d17d", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/notebooks/scatter_sizes_animation.ipynb b/examples/notebooks/scatter_sizes_animation.ipynb deleted file mode 100644 index 061f444d6..000000000 --- a/examples/notebooks/scatter_sizes_animation.ipynb +++ /dev/null @@ -1,71 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from time import time\n", - "\n", - "import numpy as np\n", - "import fastplotlib as fpl\n", - "\n", - "plot = fpl.Plot()\n", - "\n", - "points = np.array([[-1,0,1],[-1,0,1]], dtype=np.float32).swapaxes(0,1)\n", - "size_delta_scales = np.array([10, 40, 100], dtype=np.float32)\n", - "min_sizes = 6\n", - "\n", - "def update_positions():\n", - " current_time = time()\n", - " newPositions = points + np.sin(((current_time / 4) % 1)*np.pi)\n", - " plot.graphics[0].data = newPositions\n", - " plot.camera.width = 4*np.max(newPositions[0,:])\n", - " plot.camera.height = 4*np.max(newPositions[1,:])\n", - "\n", - "def update_sizes():\n", - " current_time = time()\n", - " sin_sample = np.sin(((current_time / 4) % 1)*np.pi)\n", - " size_delta = sin_sample*size_delta_scales\n", - " plot.graphics[0].sizes = min_sizes + size_delta\n", - "\n", - "points = np.array([[0,0], \n", - " [1,1], \n", - " [2,2]])\n", - "scatter = plot.add_scatter(points, colors=[\"red\", \"green\", \"blue\"], sizes=12)\n", - "plot.add_animations(update_positions, update_sizes)\n", - "plot.show(autoscale=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "fastplotlib-dev", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.4" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/notebooks/scatter_sizes_grid.ipynb b/examples/notebooks/scatter_sizes_grid.ipynb deleted file mode 100644 index ff64184f7..000000000 --- a/examples/notebooks/scatter_sizes_grid.ipynb +++ /dev/null @@ -1,86 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\"\"\"\n", - "Scatter Plot\n", - "============\n", - "Example showing point size change for scatter plot.\n", - "\"\"\"\n", - "\n", - "# test_example = true\n", - "import numpy as np\n", - "import fastplotlib as fpl\n", - "\n", - "# grid with 2 rows and 3 columns\n", - "grid_shape = (2,1)\n", - "\n", - "# pan-zoom controllers for each view\n", - "# views are synced if they have the \n", - "# same controller ID\n", - "controllers = [\n", - " [0],\n", - " [0]\n", - "]\n", - "\n", - "\n", - "# you can give string names for each subplot within the gridplot\n", - "names = [\n", - " [\"scalar_size\"],\n", - " [\"array_size\"]\n", - "]\n", - "\n", - "# Create the grid plot\n", - "plot = fpl.GridPlot(\n", - " shape=grid_shape,\n", - " controllers=controllers,\n", - " names=names,\n", - " size=(1000, 1000)\n", - ")\n", - "\n", - "# get y_values using sin function\n", - "angles = np.arange(0, 20*np.pi+0.001, np.pi / 20)\n", - "y_values = 30*np.sin(angles) # 1 thousand points\n", - "x_values = np.array([x for x in range(len(y_values))], dtype=np.float32)\n", - "\n", - "data = np.column_stack([x_values, y_values])\n", - "\n", - "plot[\"scalar_size\"].add_scatter(data=data, sizes=5, colors=\"blue\") # add a set of scalar sizes\n", - "\n", - "non_scalar_sizes = np.abs((y_values / np.pi)) # ensure minimum size of 5\n", - "plot[\"array_size\"].add_scatter(data=data, sizes=non_scalar_sizes, colors=\"red\")\n", - "\n", - "for graph in plot:\n", - " graph.auto_scale(maintain_aspect=True)\n", - "\n", - "plot.show()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "fastplotlib-dev", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.4" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/examples/notebooks/screenshots/nb-astronaut.png b/examples/notebooks/screenshots/nb-astronaut.png index e8345f7b2..2370c5988 100644 --- a/examples/notebooks/screenshots/nb-astronaut.png +++ b/examples/notebooks/screenshots/nb-astronaut.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:36a11f5c0a80e1cfbdeb318b314886f4d8e02ba8a763bed0db9994ef451bfd42 -size 128068 +oid sha256:0a6e8bb3c72f1be6915e8e78c9a4f269419cfb4faded16e39b5cb11d70bec247 +size 64185 diff --git a/examples/notebooks/screenshots/nb-astronaut_RGB.png b/examples/notebooks/screenshots/nb-astronaut_RGB.png index 0ff257ccf..2a7eac585 100644 --- a/examples/notebooks/screenshots/nb-astronaut_RGB.png +++ b/examples/notebooks/screenshots/nb-astronaut_RGB.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc27fc081b464bb53afd98d3748b8bc75764537d76a8012b9f1b2c1d4c10613d -size 125492 +oid sha256:9f9f32e86018f87057435f7121b02bbe98823444babb330645bab618e1d586b7 +size 63838 diff --git a/examples/notebooks/screenshots/nb-camera.png b/examples/notebooks/screenshots/nb-camera.png index cbf936192..bfe226ca4 100644 --- a/examples/notebooks/screenshots/nb-camera.png +++ b/examples/notebooks/screenshots/nb-camera.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cbf213d944a16cf9f72542e7a2172330fefa97c8577905f07df12559eb4485c3 -size 89303 +oid sha256:2964d0150b38f990a7b804e9057f99505e8c99bb04538a13137989d540704593 +size 47456 diff --git a/examples/notebooks/screenshots/nb-image-widget-movie-set_data.png b/examples/notebooks/screenshots/nb-image-widget-movie-set_data.png new file mode 100644 index 000000000..2578ad028 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-movie-set_data.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78e7e99fafc15cc6edf53cfb2e5b679623ad14e0d594e0ad615088e623be22e1 +size 60988 diff --git a/examples/notebooks/screenshots/nb-image-widget-movie-single-0-reset.png b/examples/notebooks/screenshots/nb-image-widget-movie-single-0-reset.png new file mode 100644 index 000000000..0129cb423 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-movie-single-0-reset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f5a721456b5a54e819fc987b8fa1f61d638f578339a7332ad46a22e7aa8fc0 +size 112674 diff --git a/examples/notebooks/screenshots/nb-image-widget-movie-single-0.png b/examples/notebooks/screenshots/nb-image-widget-movie-single-0.png new file mode 100644 index 000000000..0129cb423 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-movie-single-0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f5a721456b5a54e819fc987b8fa1f61d638f578339a7332ad46a22e7aa8fc0 +size 112674 diff --git a/examples/notebooks/screenshots/nb-image-widget-movie-single-279.png b/examples/notebooks/screenshots/nb-image-widget-movie-single-279.png new file mode 100644 index 000000000..4908c8b59 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-movie-single-279.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4511a28e728af412f5006bb456f133aea1fdc9c1922c3174f127c79d9878401d +size 133635 diff --git a/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-max-33.png b/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-max-33.png new file mode 100644 index 000000000..cfdc3c8a9 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-max-33.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6910106cd799a4327a6650edbc956ddb9b6a489760b86b279c593575ae805b8 +size 120114 diff --git a/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-mean-13.png b/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-mean-13.png new file mode 100644 index 000000000..92513cf5b --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-mean-13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8233dfc429a7fefe96f0fdb89eb2c57188b7963c16db5d1d08f7faefb45d8cb7 +size 105755 diff --git a/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-mean-33.png b/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-mean-33.png new file mode 100644 index 000000000..8bce59baf --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-mean-33.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4af684cdaec8f98081862eb8a377cd419efec64cdf08b662a456276b78f1fb5 +size 98091 diff --git a/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-reset.png b/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-reset.png new file mode 100644 index 000000000..61c3c4f6c --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-movie-single-50-window-reset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:133dfe6b0028dda6248df1afde1288c57625be99b25c8224673597de4d4f70fc +size 118588 diff --git a/examples/notebooks/screenshots/nb-image-widget-movie-single-50.png b/examples/notebooks/screenshots/nb-image-widget-movie-single-50.png new file mode 100644 index 000000000..61c3c4f6c --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-movie-single-50.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:133dfe6b0028dda6248df1afde1288c57625be99b25c8224673597de4d4f70fc +size 118588 diff --git a/examples/notebooks/screenshots/nb-image-widget-single-gnuplot2.png b/examples/notebooks/screenshots/nb-image-widget-single-gnuplot2.png new file mode 100644 index 000000000..e8c02adfe --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-single-gnuplot2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c8562f8e1178cf21af98af635006c64010f3c5fc615533d1df8c49479232843 +size 217693 diff --git a/examples/notebooks/screenshots/nb-image-widget-single.png b/examples/notebooks/screenshots/nb-image-widget-single.png new file mode 100644 index 000000000..8de4099fb --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-single.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c9bae3c9c5521a4054288be7ae548204fc7b0eafbc3e99cb6b649e0be797169 +size 207176 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-frame-apply-gaussian.png b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-frame-apply-gaussian.png new file mode 100644 index 000000000..29fe20f44 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-frame-apply-gaussian.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87a3947d6c59c7f67acca25911e0ab93ddc9231a8c3060d2fffe3c53f39055f2 +size 62263 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-frame-apply-reset.png b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-frame-apply-reset.png new file mode 100644 index 000000000..c7944f591 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-frame-apply-reset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b57c65974362d258ec7be8de391c41d7909ed260b92411f4b0ed8ed03b886a29 +size 73040 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-max-window-13.png b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-max-window-13.png new file mode 100644 index 000000000..eb9c9059d --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-max-window-13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:008381b267ae26e8693ae51e7a4fabc464288ec8aa911ff3a1deb37543cc4fbe +size 115543 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-mean-window-13.png b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-mean-window-13.png new file mode 100644 index 000000000..8b887f5fd --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-mean-window-13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fedfec781724d4731f8cc34ffc39388d14dc60dad4a9fae9ff56625edf11f87a +size 94178 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-mean-window-5.png b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-mean-window-5.png new file mode 100644 index 000000000..ef3aa7a92 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50-mean-window-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08e8379187754fa14f360ed54f2ed8cf61b3df71a8b6f2e95ff1ed27aa435d60 +size 90105 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50.png b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50.png new file mode 100644 index 000000000..c7944f591 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-50.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b57c65974362d258ec7be8de391c41d7909ed260b92411f4b0ed8ed03b886a29 +size 73040 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-frame-99.png b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-99.png new file mode 100644 index 000000000..0d19a35ce --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-frame-99.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:848e89e38b9b5ef97d6bb4b301c0ae10cc29f438518721663ae52fa42f492408 +size 65267 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-frame-apply-gaussian.png b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-frame-apply-gaussian.png new file mode 100644 index 000000000..96a3b12c8 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-frame-apply-gaussian.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17cd05ae14cacdef6aa1eca3544246b814ef21762a33f6e785f6d621ea30ff96 +size 80570 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-frame-apply-reset.png b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-frame-apply-reset.png new file mode 100644 index 000000000..1df19c904 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-frame-apply-reset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a673fa1ffa6f746ab9f462b4d592492ec02bfdd3fb53bdf1f71fb9427f8d6d23 +size 105798 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-max-window-13.png b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-max-window-13.png new file mode 100644 index 000000000..43230f8be --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-max-window-13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:446d54cea3d54b0fd92b70abcc090cfee30b19454dce118d9875fbeb8b40b4a8 +size 141294 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-mean-window-13.png b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-mean-window-13.png new file mode 100644 index 000000000..0841a8e08 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-mean-window-13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99d3706d5574a1236264f556eb3ce6d71e81b65bd8dcce1c1415e5f139316c23 +size 107894 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-mean-window-5.png b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-mean-window-5.png new file mode 100644 index 000000000..28bab9f02 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50-mean-window-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffa17fc1b71c5146cae88493ed40c606dd0a99f3e10f3827ac349d5a5d6f6108 +size 112702 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50.png b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50.png new file mode 100644 index 000000000..1df19c904 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-50.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a673fa1ffa6f746ab9f462b4d592492ec02bfdd3fb53bdf1f71fb9427f8d6d23 +size 105798 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-99.png b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-99.png new file mode 100644 index 000000000..06ed02628 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-frame-99.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d3e88eee05bc68dd17918197602fb5c0a959ad74a4f592aea4514e570d29232 +size 103431 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-grid-init-mean-window-5.png b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-init-mean-window-5.png new file mode 100644 index 000000000..61702a6d9 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-init-mean-window-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:272156c4261bba40eba92f953a0f5078ad8ff2aa80f06a53f73a3572eb537dd5 +size 111155 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-grid-set_data-reset-indices-false.png b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-set_data-reset-indices-false.png new file mode 100644 index 000000000..412822a40 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-set_data-reset-indices-false.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8203f859fe54e2b59a143a9a569c2854640b1501b9ab4f8512520bbf73dae3c6 +size 105658 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-grid-set_data-reset-indices-true.png b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-set_data-reset-indices-true.png new file mode 100644 index 000000000..234924487 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-grid-set_data-reset-indices-true.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ca187ba67e7928c8f96b1f9a0a18bec65f81352701e60c33d47aaadb2756d5c +size 106446 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-init-mean-window-5.png b/examples/notebooks/screenshots/nb-image-widget-zfish-init-mean-window-5.png new file mode 100644 index 000000000..870945ce7 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-init-mean-window-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f42367c833a23d3fe10c6fb0d754338c12a30288d9769ad3f8b1159505abf8ff +size 78796 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-mixed-rgb-cockatoo-frame-50.png b/examples/notebooks/screenshots/nb-image-widget-zfish-mixed-rgb-cockatoo-frame-50.png new file mode 100644 index 000000000..7880fc1d8 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-mixed-rgb-cockatoo-frame-50.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb99cd81a18fa2f8986c5f00071c45dc778c8aa177f4b02dca6bc5fab122b054 +size 114825 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-mixed-rgb-cockatoo-set-data.png b/examples/notebooks/screenshots/nb-image-widget-zfish-mixed-rgb-cockatoo-set-data.png new file mode 100644 index 000000000..82f3d0a9b --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-mixed-rgb-cockatoo-set-data.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31b2b92b9d983950b58b90a09f16199740e35a0737fc1b18904f507ea322d8f2 +size 111118 diff --git a/examples/notebooks/screenshots/nb-image-widget-zfish-mixed-rgb-cockatoo-windowrgb.png b/examples/notebooks/screenshots/nb-image-widget-zfish-mixed-rgb-cockatoo-windowrgb.png new file mode 100644 index 000000000..1446c8941 --- /dev/null +++ b/examples/notebooks/screenshots/nb-image-widget-zfish-mixed-rgb-cockatoo-windowrgb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fb724e005c6e081ae3bf235e155f3f526c3480facac7479d9b9452aae81baf0 +size 111437 diff --git a/examples/notebooks/screenshots/nb-lines-3d.png b/examples/notebooks/screenshots/nb-lines-3d.png index 6bb05537a..fb84ef21a 100644 --- a/examples/notebooks/screenshots/nb-lines-3d.png +++ b/examples/notebooks/screenshots/nb-lines-3d.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7e61fb22db10e515a7d249649c5e220731c6ea5a83bb626f06dcf41167f117e -size 23052 +oid sha256:c70c01b3ade199864df227a44fb28a53626df3beecee722a7b782c9a9f4658d8 +size 19907 diff --git a/examples/notebooks/screenshots/nb-lines-cmap-jet-values-cosine.png b/examples/notebooks/screenshots/nb-lines-cmap-jet-values-cosine.png deleted file mode 100644 index b1045cde6..000000000 --- a/examples/notebooks/screenshots/nb-lines-cmap-jet-values-cosine.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1f55806e64a8ffde2f11eed1dc75a874371800046c062da21e71554abedda251 -size 17136 diff --git a/examples/notebooks/screenshots/nb-lines-cmap-jet-values.png b/examples/notebooks/screenshots/nb-lines-cmap-jet-values.png deleted file mode 100644 index 53b3d4cbd..000000000 --- a/examples/notebooks/screenshots/nb-lines-cmap-jet-values.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e5e9bcb785fe5efee324bdde451d62158668dafa0c026179bd11d38298fb0002 -size 18526 diff --git a/examples/notebooks/screenshots/nb-lines-cmap-jet.png b/examples/notebooks/screenshots/nb-lines-cmap-jet.png deleted file mode 100644 index 8bfd0d577..000000000 --- a/examples/notebooks/screenshots/nb-lines-cmap-jet.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2d6fd17a9a704b2d9c5341e85763f1ba9c5e3026da88858f004e66a781e02eaa -size 16310 diff --git a/examples/notebooks/screenshots/nb-lines-cmap-tab-10.png b/examples/notebooks/screenshots/nb-lines-cmap-tab-10.png deleted file mode 100644 index 3e76883bf..000000000 --- a/examples/notebooks/screenshots/nb-lines-cmap-tab-10.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:672da2cc5e500ce3bbdabb01eaf5a7d2b9fb6ea4e6e95cb3392b2a0573a970d9 -size 14882 diff --git a/examples/notebooks/screenshots/nb-lines-cmap-viridis-values.png b/examples/notebooks/screenshots/nb-lines-cmap-viridis-values.png deleted file mode 100644 index 4b6212a6a..000000000 --- a/examples/notebooks/screenshots/nb-lines-cmap-viridis-values.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1e1224f75ce0286c4721b5f65af339fc922dcb2308f8d2fa3def10ead48cdce8 -size 15096 diff --git a/examples/notebooks/screenshots/nb-lines-cmap-viridis.png b/examples/notebooks/screenshots/nb-lines-cmap-viridis.png deleted file mode 100644 index 35c38c881..000000000 --- a/examples/notebooks/screenshots/nb-lines-cmap-viridis.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f6201cd8dc9273adca73329b0eae81faf6aed42c3bf8f7ee503b9251af499dcd -size 19203 diff --git a/examples/notebooks/screenshots/nb-lines-cmap-white.png b/examples/notebooks/screenshots/nb-lines-cmap-white.png deleted file mode 100644 index 67c2fc116..000000000 --- a/examples/notebooks/screenshots/nb-lines-cmap-white.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ecb2d4d591b852bda8758efcf91d389442f916bbb4a06c5216d52dcf72172370 -size 12955 diff --git a/examples/notebooks/screenshots/nb-lines-colors.png b/examples/notebooks/screenshots/nb-lines-colors.png index b9972c8f4..ab221d83f 100644 --- a/examples/notebooks/screenshots/nb-lines-colors.png +++ b/examples/notebooks/screenshots/nb-lines-colors.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8eefa5106414bfb540b282d74372831ef3c4a9d941aaf50026ea64a3d3009f7 -size 40544 +oid sha256:3b238b085eddb664ff56bd265423d85b35fc70769ebec050b27fefa8fe6380de +size 35055 diff --git a/examples/notebooks/screenshots/nb-lines-data.png b/examples/notebooks/screenshots/nb-lines-data.png index 14d6f89f0..44b142f55 100644 --- a/examples/notebooks/screenshots/nb-lines-data.png +++ b/examples/notebooks/screenshots/nb-lines-data.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e89906d0d749f443e751eeb43b017622a46dfaa91545e9135d0a519e0aad0eb -size 54446 +oid sha256:4df736ec3ea90478930a77437949977f8e30f7d9272f65ef9f4908f2103dd11e +size 40679 diff --git a/examples/notebooks/screenshots/nb-lines-underlay.png b/examples/notebooks/screenshots/nb-lines-underlay.png index d8809f301..f4a5b4e76 100644 --- a/examples/notebooks/screenshots/nb-lines-underlay.png +++ b/examples/notebooks/screenshots/nb-lines-underlay.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61ed6bde5639d57694cb8752052dda08a5f2f7dcc32966ab62385bc866c299e3 -size 55936 +oid sha256:3a8b59386015b4c1eaa85c33c7b041d566ac1ac76fbba829075e9a3af021bedf +size 46228 diff --git a/examples/notebooks/screenshots/nb-lines.png b/examples/notebooks/screenshots/nb-lines.png index 3dcc1767e..8c86b48d0 100644 --- a/examples/notebooks/screenshots/nb-lines.png +++ b/examples/notebooks/screenshots/nb-lines.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39478dbf9af2f74ae0e0240616d94480569d53dcbd5f046315eeff3855d4cb2e -size 37711 +oid sha256:823558e877830b816cc87df0776a92d5316d98a4f40e475cbf997b597c5eb8de +size 30338 diff --git a/examples/notebooks/screenshots/no-imgui-nb-astronaut.png b/examples/notebooks/screenshots/no-imgui-nb-astronaut.png new file mode 100644 index 000000000..9f9e2013a --- /dev/null +++ b/examples/notebooks/screenshots/no-imgui-nb-astronaut.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4758a94e6c066d95569515c0bff8e4c9ec383c65c5928a827550c142214df085 +size 72372 diff --git a/examples/notebooks/screenshots/no-imgui-nb-astronaut_RGB.png b/examples/notebooks/screenshots/no-imgui-nb-astronaut_RGB.png new file mode 100644 index 000000000..23d1bd906 --- /dev/null +++ b/examples/notebooks/screenshots/no-imgui-nb-astronaut_RGB.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb3c72edc6f41d6f77e44bc68e7f5277525d2548d369925827c14d855dc33bbd +size 71588 diff --git a/examples/notebooks/screenshots/no-imgui-nb-camera.png b/examples/notebooks/screenshots/no-imgui-nb-camera.png new file mode 100644 index 000000000..22c70a760 --- /dev/null +++ b/examples/notebooks/screenshots/no-imgui-nb-camera.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6de3880cc22a8f6cdb77305e4d5be520fe92fd54a9a107bdbddf1e6f72c19262 +size 52157 diff --git a/examples/notebooks/screenshots/no-imgui-nb-lines-3d.png b/examples/notebooks/screenshots/no-imgui-nb-lines-3d.png new file mode 100644 index 000000000..1a5a7b548 --- /dev/null +++ b/examples/notebooks/screenshots/no-imgui-nb-lines-3d.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0e63c918aac713af2015cb85289c9451be181400834b0f60bcbb50564551f08 +size 20546 diff --git a/examples/notebooks/screenshots/no-imgui-nb-lines-colors.png b/examples/notebooks/screenshots/no-imgui-nb-lines-colors.png new file mode 100644 index 000000000..cdce4bf46 --- /dev/null +++ b/examples/notebooks/screenshots/no-imgui-nb-lines-colors.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bd481f558907ac1af97bd7ee08d58951bada758cc32467c73483fa66e4602f8 +size 36206 diff --git a/examples/notebooks/screenshots/no-imgui-nb-lines-data.png b/examples/notebooks/screenshots/no-imgui-nb-lines-data.png new file mode 100644 index 000000000..8923be766 --- /dev/null +++ b/examples/notebooks/screenshots/no-imgui-nb-lines-data.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea39e2651408431ad5e49af378828a41b7b377f7f0098adc8ce2c7b5e10d0234 +size 43681 diff --git a/examples/notebooks/screenshots/no-imgui-nb-lines-underlay.png b/examples/notebooks/screenshots/no-imgui-nb-lines-underlay.png new file mode 100644 index 000000000..b6b4cf340 --- /dev/null +++ b/examples/notebooks/screenshots/no-imgui-nb-lines-underlay.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a8d4aba2411598ecae1b7f202fbb1a1fa7416a814b7b4c5fdd1e0e584cdb06a +size 49343 diff --git a/examples/notebooks/screenshots/no-imgui-nb-lines.png b/examples/notebooks/screenshots/no-imgui-nb-lines.png new file mode 100644 index 000000000..5d03421a4 --- /dev/null +++ b/examples/notebooks/screenshots/no-imgui-nb-lines.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2fdaf79703c475521184ab9dc948d3e817160b0162e9d88fcb20207225d0233 +size 31153 diff --git a/examples/notebooks/simple.ipynb b/examples/notebooks/simple.ipynb deleted file mode 100644 index 681980d39..000000000 --- a/examples/notebooks/simple.ipynb +++ /dev/null @@ -1,1242 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "93740a09-9111-4777-ad57-173e9b80a2f0", - "metadata": { - "tags": [] - }, - "source": [ - "# Introduction to `fastplotlib`\n", - "\n", - "This notebook goes through the basic components of the `fastplotlib` API, image, image updates, line plots, and scatter plots. " - ] - }, - { - "cell_type": "markdown", - "id": "ae07272b-e94b-4262-b486-6b3ddac63038", - "metadata": {}, - "source": [ - "**The example images are from `imageio` so you will need to install it for this example notebook. But `imageio` is not required to use `fasptlotlib`**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6674c90b-bfe3-4a71-ab7d-21e9cc03c050", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "!pip install imageio" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5c50e177-5800-4e19-a4f6-d0e0a082e4cd", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import imageio.v3 as iio" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fb57c3d3-f20d-4d88-9e7a-04b9309bc637", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from fastplotlib import Plot\n", - "from ipywidgets import VBox, HBox, IntSlider\n", - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1d374d5e-70e0-4946-937f-82d16a56009f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# this is only for testing, you do not need this to use fastplotlib\n", - "from nb_test_utils import plot_test, notebook_finished" - ] - }, - { - "cell_type": "markdown", - "id": "a9b386ac-9218-4f8f-97b3-f29b4201ef55", - "metadata": {}, - "source": [ - "## Simple image\n", - "\n", - "We are going to be using `jupyterlab-sidecar` to render some of the plots on the side. This makes it very easy to interact with your plots without having to constantly scroll up and down :D" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "237823b7-e2c0-4e2f-9ee8-e3fc2b4453c4", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# create a `Plot` instance\n", - "plot = Plot()\n", - "\n", - "# get a grayscale image\n", - "data = iio.imread(\"imageio:camera.png\")\n", - "\n", - "# plot the image data\n", - "image_graphic = plot.add_image(data=data, name=\"sample-image\")\n", - "\n", - "# show the plot\n", - "plot.show()" - ] - }, - { - "cell_type": "markdown", - "id": "be5b408f-dd91-4e36-807a-8c22c8d7d216", - "metadata": {}, - "source": [ - "**Use the handle on the bottom right corner of the _canvas_ to resize it. You can also pan and zoom using your mouse!**\n", - "\n", - "If an image is in the plot the origin is in the top left. You can click the flip button to flip the y-axis direction, or use `plot.camera.local.scale_y *= -1`" - ] - }, - { - "cell_type": "markdown", - "id": "7c3b637c-a26b-416e-936c-705275852a8a", - "metadata": {}, - "source": [ - "Changing graphic **\"features\"**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "de816c88-1c4a-4071-8a5e-c46c93671ef5", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "image_graphic.cmap = \"viridis\"" - ] - }, - { - "cell_type": "markdown", - "id": "da1efe85-c5b8-42e8-ae81-6cbddccc30f7", - "metadata": {}, - "source": [ - "### Slicing data\n", - "\n", - "**Most features, such as `data` support slicing!**\n", - "\n", - "Out image data is of shape [n_rows, n_cols]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a04afe48-5534-4ef6-a159-f6e6a4337d8d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "image_graphic.data().shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "83b2db1b-2783-4e89-bcf3-66bb6e09e18a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "image_graphic.data[::15, :] = 1\n", - "image_graphic.data[:, ::15] = 1" - ] - }, - { - "cell_type": "markdown", - "id": "135db5d2-53fb-4d50-8164-2c1f00560c25", - "metadata": {}, - "source": [ - "**Fancy indexing**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a89120eb-108b-4df3-8d3f-8192c9315aa6", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "image_graphic.data[data > 175] = 255" - ] - }, - { - "cell_type": "markdown", - "id": "096ccb73-bf6d-4dba-8168-788a63450406", - "metadata": {}, - "source": [ - "Adjust vmin vmax" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f8e69df8-7aaf-4d7c-92e3-861d9ebc8c5f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "image_graphic.cmap.vmin = 50\n", - "image_graphic.cmap.vmax = 150" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aa67b34a-2694-4ec0-9ba2-e88c469f1a06", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# testing cell, ignore\n", - "plot_test(\"camera\", plot)" - ] - }, - { - "cell_type": "markdown", - "id": "da9c9b25-7c8b-49b2-9531-7c741debd71d", - "metadata": {}, - "source": [ - "**Set the entire data array again**\n", - "\n", - "Note: The shape of the new data array must match the current data shown in the Graphic." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "089170fd-016e-4b2f-a090-c30beb85cc1b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "new_data = iio.imread(\"imageio:astronaut.png\")\n", - "new_data.shape" - ] - }, - { - "cell_type": "markdown", - "id": "d14cf14a-282f-40c6-b086-9bcf332ed0c8", - "metadata": {}, - "source": [ - "This is an RGB image, convert to grayscale to maintain the shape of (512, 512)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ec9b2874-ce1a-49c6-9b84-ee8f14d55966", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "gray = new_data.dot([0.3, 0.6, 0.1])\n", - "gray.shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8a8fc1d3-19ba-42c0-b9ec-39f6ddd23314", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "image_graphic.data = gray" - ] - }, - { - "cell_type": "markdown", - "id": "bb568f89-ac92-4dde-9359-789049dc758a", - "metadata": {}, - "source": [ - "\n", - "\n", - "reset vmin vmax" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "de09d977-88ea-472c-8d89-9e24abc845a9", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "image_graphic.cmap.reset_vmin_vmax()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9cf84998-03e1-41b3-8e63-92d5b59426e6", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# testing cell, ignore\n", - "plot_test(\"astronaut\", plot)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0bb1cfc7-1a06-4abb-a10a-a877a0d51c6b", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.canvas.get_logical_size()" - ] - }, - { - "cell_type": "markdown", - "id": "b53bc11a-ddf1-4786-8dca-8f3d2eaf993d", - "metadata": {}, - "source": [ - "### Indexing plots" - ] - }, - { - "cell_type": "markdown", - "id": "67b92ffd-40cc-43fe-9df9-0e0d94763d8e", - "metadata": {}, - "source": [ - "**Plots are indexable and give you their graphics by name**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e6ba689c-ff4a-44ef-9663-f2c8755072c4", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5b18f4e3-e13b-46d5-af1f-285c5a7fdc12", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot[\"sample-image\"]" - ] - }, - { - "cell_type": "markdown", - "id": "a64314bf-a737-4858-803b-ea2adbd3578c", - "metadata": {}, - "source": [ - "**You can also use numerical indexing on `plot.graphics`**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c09a1924-70f8-4d9e-9e92-510d700ac715", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.graphics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ec9e6ba6-553f-4718-ba13-471c8c7c3c4e", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot.graphics[0]" - ] - }, - { - "cell_type": "markdown", - "id": "4316a8b5-5f33-427a-8f52-b101d1daab67", - "metadata": {}, - "source": [ - "The `Graphic` instance is also returned when you call `plot.add_`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2b5c1321-1fd4-44bc-9433-7439ad3e22cf", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "image_graphic" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b12bf75e-4e93-4930-9146-e96324fdf3f6", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "image_graphic == plot[\"sample-image\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "058d9785-a692-46f6-a062-cdec9c040afe", - "metadata": {}, - "outputs": [], - "source": [ - "# close the plot\n", - "plot.close()" - ] - }, - { - "cell_type": "markdown", - "id": "5694dca1-1041-4e09-a1da-85b293c5af47", - "metadata": {}, - "source": [ - "### RGB images are also supported\n", - "\n", - "`cmap` arguments are ignored for rgb images, but vmin vmax still works" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d6b8ca51-073d-47aa-a464-44511fcaccbc", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot_rgb = Plot()\n", - "\n", - "plot_rgb.add_image(new_data, name=\"rgb-image\")\n", - "\n", - "# show the plot\n", - "plot_rgb.show()" - ] - }, - { - "cell_type": "markdown", - "id": "7fc66377-00e8-4f32-9671-9cf63f74529f", - "metadata": {}, - "source": [ - "vmin and vmax are still applicable to rgb images" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cafaa403-50a2-403c-b8e7-b0938d48cadd", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot_rgb[\"rgb-image\"].cmap.vmin = 100" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b8d600c7-aa80-4c3f-8ec0-6641e9359c3a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# testing cell, ignore\n", - "plot_test(\"astronaut_RGB\", plot_rgb)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8316b4f2-3d6e-46b5-8776-c7c963a7aa99", - "metadata": {}, - "outputs": [], - "source": [ - "# close plot\n", - "plot_rgb.close()" - ] - }, - { - "cell_type": "markdown", - "id": "1cb03f42-1029-4b16-a16b-35447d9e2955", - "metadata": { - "tags": [] - }, - "source": [ - "### Image updates\n", - "\n", - "This examples show how you can define animation functions that run on every render cycle." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aadd757f-6379-4f52-a709-46aa57c56216", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# create another `Plot` instance\n", - "plot_v = Plot()\n", - "\n", - "plot.canvas.max_buffered_frames = 1\n", - "\n", - "# make some random data again\n", - "data = np.random.rand(512, 512)\n", - "\n", - "# plot the data\n", - "plot_v.add_image(data=data, name=\"random-image\")\n", - "\n", - "# a function to update the image_graphic\n", - "# a plot will pass its plot instance to the animation function as an argument\n", - "def update_data(plot_instance):\n", - " new_data = np.random.rand(512, 512)\n", - " plot_instance[\"random-image\"].data = new_data\n", - "\n", - "#add this as an animation function\n", - "plot_v.add_animations(update_data)\n", - "\n", - "# show the plot\n", - "plot_v.show()" - ] - }, - { - "cell_type": "markdown", - "id": "b313eda1-6e6c-466f-9fd5-8b70c1d3c110", - "metadata": {}, - "source": [ - "### We can share controllers across plots\n", - "\n", - "This example creates a new plot, but it synchronizes the pan-zoom controller" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "86e70b1e-4328-4035-b992-70dff16d2a69", - "metadata": {}, - "outputs": [], - "source": [ - "plot_sync = Plot(controller=plot_v.controller)\n", - "\n", - "data = np.random.rand(512, 512)\n", - "\n", - "image_graphic_instance = plot_sync.add_image(data=data, cmap=\"viridis\")\n", - "\n", - "# you will need to define a new animation function for this graphic\n", - "def update_data_2():\n", - " new_data = np.random.rand(512, 512)\n", - " # alternatively, you can use the stored reference to the graphic as well instead of indexing the Plot\n", - " image_graphic_instance.data = new_data\n", - "\n", - "plot_sync.add_animations(update_data_2)\n", - "\n", - "plot_sync.show(sidecar=False)" - ] - }, - { - "cell_type": "markdown", - "id": "f226c9c2-8d0e-41ab-9ab9-1ae31fd91de5", - "metadata": {}, - "source": [ - "#### Keeping a reference to the Graphic instance, as shown above `image_graphic_instance`, is useful if you're creating something where you need flexibility in the naming of the graphics" - ] - }, - { - "cell_type": "markdown", - "id": "d11fabb7-7c76-4e94-893d-80ed9ee3be3d", - "metadata": {}, - "source": [ - "### You can also use `ipywidgets.VBox` and `HBox` to stack plots. See the `gridplot` notebooks for a proper gridplot interface for more automated subplotting" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "11839d95-8ff7-444c-ae13-6b072c3112c5", - "metadata": {}, - "outputs": [], - "source": [ - "HBox([plot_v.show(), plot_sync.show()])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f33f4cd9-02fc-41b7-961b-9dfeb455b63a", - "metadata": {}, - "outputs": [], - "source": [ - "# close plot\n", - "plot_v.close()\n", - "plot_sync.close()" - ] - }, - { - "cell_type": "markdown", - "id": "e7859338-8162-408b-ac72-37e606057045", - "metadata": { - "tags": [] - }, - "source": [ - "# Line plots\n", - "\n", - "## 2D line plots\n", - "\n", - "This example plots a sine wave, cosine wave, and ricker wavelet and demonstrates how **Graphic Features** can be modified by slicing!" - ] - }, - { - "cell_type": "markdown", - "id": "a6fee1c2-4a24-4325-bca2-26e5a4bf6338", - "metadata": {}, - "source": [ - "### First generate some data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8e8280da-b421-43a5-a1a6-2a196a408e9a", - "metadata": {}, - "outputs": [], - "source": [ - "# linspace, create 100 evenly spaced x values from -10 to 10\n", - "xs = np.linspace(-10, 10, 100)\n", - "# sine wave\n", - "ys = np.sin(xs)\n", - "sine = np.dstack([xs, ys])[0]\n", - "\n", - "# cosine wave\n", - "ys = np.cos(xs) + 5\n", - "cosine = np.dstack([xs, ys])[0]\n", - "\n", - "# sinc function\n", - "a = 0.5\n", - "ys = np.sinc(xs) * 3 + 8\n", - "sinc = np.dstack([xs, ys])[0]" - ] - }, - { - "cell_type": "markdown", - "id": "fbb806e5-1565-4189-936c-b7cf147a59ee", - "metadata": {}, - "source": [ - "### We will plot all of it on the same plot. Each line plot will be an individual Graphic, you can have any combination of graphics on a plot." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "93a5d1e6-d019-4dd0-a0d1-25d1704ab7a7", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a plot instance\n", - "plot_l = Plot()\n", - "\n", - "# plot sine wave, use a single color\n", - "sine_graphic = plot_l.add_line(data=sine, thickness=5, colors=\"magenta\")\n", - "\n", - "# you can also use colormaps for lines!\n", - "cosine_graphic = plot_l.add_line(data=cosine, thickness=12, cmap=\"autumn\")\n", - "\n", - "# or a list of colors for each datapoint\n", - "colors = [\"r\"] * 25 + [\"purple\"] * 25 + [\"y\"] * 25 + [\"b\"] * 25\n", - "sinc_graphic = plot_l.add_line(data=sinc, thickness=5, colors = colors)\n", - "\n", - "# show the plot\n", - "plot_l.show(sidecar_kwargs={\"title\": \"lines\", \"layout\": {'width': '800px'}})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a4060576-2f29-4e4b-a86a-0410c766bd98", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# testing cell, ignore\n", - "plot_test(\"lines\", plot_l)" - ] - }, - { - "cell_type": "markdown", - "id": "22dde600-0f56-4370-b017-c8f23a6c01aa", - "metadata": {}, - "source": [ - "### \"stretching\" the camera, useful for large timeseries data\n", - "\n", - "Set `maintain_aspect = False` on a camera, and then use the right mouse button and move the mouse to stretch and squeeze the view!\n", - "\n", - "You can also click the **`1:1`** button to toggle this, or use `plot.camera.maintain_aspect`" - ] - }, - { - "cell_type": "markdown", - "id": "1651e965-f750-47ac-bf53-c23dae84cc98", - "metadata": {}, - "source": [ - "### reset the plot area" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ba50a6ed-0f1b-4795-91dd-a7c3e40b8e3c", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot_l.auto_scale(maintain_aspect=True)" - ] - }, - { - "cell_type": "markdown", - "id": "dcd68796-c190-4c3f-8519-d73b98ff6367", - "metadata": {}, - "source": [ - "## Graphic features support slicing! :D " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cb0d13ed-ef07-46ff-b19e-eeca4c831037", - "metadata": {}, - "outputs": [], - "source": [ - "# indexing of colors\n", - "cosine_graphic.colors[:15] = \"magenta\"\n", - "cosine_graphic.colors[90:] = \"red\"\n", - "cosine_graphic.colors[60] = \"w\"\n", - "\n", - "# indexing to assign colormaps to entire lines or segments\n", - "sinc_graphic.cmap[10:50] = \"gray\"\n", - "sine_graphic.cmap = \"seismic\"\n", - "\n", - "# more complex indexing, set the blue value directly from an array\n", - "cosine_graphic.colors[65:90, 0] = np.linspace(0, 1, 90-65)" - ] - }, - { - "cell_type": "markdown", - "id": "c9689887-cdf3-4a4d-948f-7efdb09bde4e", - "metadata": {}, - "source": [ - "## You can capture changes to a graphic feature as events" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cfa001f6-c640-4f91-beb0-c19b030e503f", - "metadata": {}, - "outputs": [], - "source": [ - "def callback_func(event_data):\n", - " print(event_data)\n", - "\n", - "# Will print event data when the color changes\n", - "cosine_graphic.colors.add_event_handler(callback_func)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bb8a0f95-0063-4cd4-a117-e3d62c6e120d", - "metadata": {}, - "outputs": [], - "source": [ - "# more complex indexing of colors\n", - "# from point 15 - 30, set every 3rd point as \"cyan\"\n", - "cosine_graphic.colors[15:50:3] = \"cyan\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ef8cab1b-8327-43e2-b021-176125b91ca9", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# testing cell, ignore\n", - "plot_test(\"lines-colors\", plot_l)" - ] - }, - { - "cell_type": "markdown", - "id": "c29f81f9-601b-49f4-b20c-575c56e58026", - "metadata": {}, - "source": [ - "## Graphic _data_ is also indexable" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d1a4314b-5723-43c7-94a0-b4cbb0e44d60", - "metadata": {}, - "outputs": [], - "source": [ - "cosine_graphic.data[10:50:5, :2] = sine[10:50:5]\n", - "cosine_graphic.data[90:, 1] = 7" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "682db47b-8c7a-4934-9be4-2067e9fb12d5", - "metadata": {}, - "outputs": [], - "source": [ - "cosine_graphic.data[0] = np.array([[-10, 0, 0]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "96086bd4-cdaa-467d-a68b-1f57002ad6c5", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# testing cell, ignore\n", - "plot_test(\"lines-data\", plot_l)" - ] - }, - { - "cell_type": "markdown", - "id": "3f6d264b-1b03-407e-9d83-cd6cfb02e706", - "metadata": {}, - "source": [ - "### Toggle the presence of a graphic within the scene" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fcba75b7-9a1e-4aae-9dec-715f7f7456c3", - "metadata": {}, - "outputs": [], - "source": [ - "sinc_graphic.present = False" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "763b9943-53a4-4e2a-b47a-4e9e5c9d7be3", - "metadata": {}, - "outputs": [], - "source": [ - "sinc_graphic.present = True" - ] - }, - { - "cell_type": "markdown", - "id": "86f4e535-ce88-415a-b8d2-53612a2de7b9", - "metadata": {}, - "source": [ - "### You can create callbacks to this too, for example to re-scale the plot w.r.t. graphics that are present in the scene" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "64a20a16-75a5-4772-a849-630ade9be4ff", - "metadata": {}, - "outputs": [], - "source": [ - "sinc_graphic.present.add_event_handler(plot_l.auto_scale)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fb093046-c94c-4085-86b4-8cd85cb638ff", - "metadata": {}, - "outputs": [], - "source": [ - "sinc_graphic.present = False" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f05981c3-c768-4631-ae62-6a8407b20c4c", - "metadata": {}, - "outputs": [], - "source": [ - "sinc_graphic.present = True" - ] - }, - { - "cell_type": "markdown", - "id": "05f93e93-283b-45d8-ab31-8d15a7671dd2", - "metadata": {}, - "source": [ - "### You can set the z-positions of graphics to have them appear under other graphics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6bb33406-5bef-455b-86ea-358a7d3ffa94", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "img = iio.imread(\"imageio:camera.png\")\n", - "\n", - "plot_l.add_image(img[::20, ::20], name=\"image\", cmap=\"gray\")\n", - "\n", - "# z axis position -1 so it is below all the lines\n", - "plot_l[\"image\"].position_z = -1\n", - "plot_l[\"image\"].position_x = -8\n", - "plot_l[\"image\"].position_y = -8" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ae3e3dc9-e49b-430a-8471-5d0a0d659d20", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# testing cell, ignore\n", - "plot_test(\"lines-underlay\", plot_l)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bef729ea-f524-4efd-a189-bfca23b39af5", - "metadata": {}, - "outputs": [], - "source": [ - "# close plot\n", - "plot_l.close()" - ] - }, - { - "cell_type": "markdown", - "id": "2c90862e-2f2a-451f-a468-0cf6b857e87a", - "metadata": {}, - "source": [ - "### 3D line plot" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9c51229f-13a2-4653-bff3-15d43ddbca7b", - "metadata": {}, - "outputs": [], - "source": [ - "# just set the camera as \"3d\", the rest is basically the same :D \n", - "plot_l3d = Plot(camera='3d')\n", - "\n", - "# create a spiral\n", - "phi = np.linspace(0, 30, 200)\n", - "\n", - "xs = phi * np.cos(phi)\n", - "ys = phi * np.sin(phi)\n", - "zs = phi\n", - "\n", - "# use 3D data\n", - "# note: you usually mix 3D and 2D graphics on the same plot\n", - "spiral = np.dstack([xs, ys, zs])[0]\n", - "\n", - "plot_l3d.add_line(data=spiral, thickness=2, cmap='winter')\n", - "\n", - "plot_l3d.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "28eb7014-4773-4a34-8bfc-bd3a46429012", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "plot_l3d.auto_scale(maintain_aspect=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5135f3f1-a004-4451-86cd-ead6acea6e13", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# testing cell, ignore\n", - "plot_test(\"lines-3d\", plot_l3d)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c2c70541-98fe-4e02-a718-ac2857cc25be", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# close plot\n", - "plot_l3d.close()" - ] - }, - { - "cell_type": "markdown", - "id": "a202b3d0-2a0b-450a-93d4-76d0a1129d1d", - "metadata": {}, - "source": [ - "# Scatter plots\n", - "\n", - "### Plot tens of thousands or millions of points\n", - "\n", - "#### There might be a small delay for a few seconds before the plot shows, this is due to shaders being compiled and a few other things. The plot should be very fast and responsive once it is displayed and future modifications should also be fast!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2ecb2385-8fa4-4239-881c-b754c24aed9f", - "metadata": {}, - "outputs": [], - "source": [ - "from fastplotlib import Plot\n", - "from ipywidgets import VBox, HBox, IntSlider\n", - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "39252df5-9ae5-4132-b97b-2785c5fa92ea", - "metadata": {}, - "outputs": [], - "source": [ - "# create a random distribution of 10,000 xyz coordinates\n", - "n_points = 10_000\n", - "\n", - "# if you have a good GPU go for 1.5 million points :D \n", - "# this is multiplied by 3\n", - "#n_points = 500_000\n", - "\n", - "# dimensions always have to be [n_points, xyz]\n", - "dims = (n_points, 3)\n", - "\n", - "clouds_offset = 15\n", - "\n", - "# create some random clouds\n", - "normal = np.random.normal(size=dims, scale=5)\n", - "# stack the data into a single array\n", - "cloud = np.vstack(\n", - " [\n", - " normal - clouds_offset,\n", - " normal,\n", - " normal + clouds_offset,\n", - " ]\n", - ")\n", - "\n", - "# color each of them separately\n", - "colors = [\"yellow\"] * n_points + [\"cyan\"] * n_points + [\"magenta\"] * n_points\n", - "\n", - "# create plot\n", - "plot_s = Plot()\n", - "\n", - "# use an alpha value since this will be a lot of points\n", - "scatter_graphic = plot_s.add_scatter(data=cloud, sizes=3, colors=colors, alpha=0.7)\n", - "\n", - "plot_s.show()" - ] - }, - { - "cell_type": "markdown", - "id": "b6e4a704-ee6b-4316-956e-acb4dcc1c6f2", - "metadata": {}, - "source": [ - "### scatter graphic features work similarly to line graphic" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8fa46ec0-8680-44f5-894c-559de3145932", - "metadata": {}, - "outputs": [], - "source": [ - "# half of the first cloud's points to red\n", - "scatter_graphic.colors[:n_points:2] = \"r\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e4dc71e4-5144-436f-a464-f2a29eee8f0b", - "metadata": {}, - "outputs": [], - "source": [ - "# set the green value directly\n", - "scatter_graphic.colors[n_points:n_points * 2, 1] = 0.3" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5b637a29-cd5e-4011-ab81-3f91490d9ecd", - "metadata": {}, - "outputs": [], - "source": [ - "# set color values directly using an array\n", - "scatter_graphic.colors[n_points * 2:] = np.repeat([[1, 1, 0, 0.5]], n_points, axis=0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a4084fce-78a2-48b3-9a0d-7b57c165c3c1", - "metadata": {}, - "outputs": [], - "source": [ - "# change the data, change y-values\n", - "scatter_graphic.data[n_points:n_points * 2, 1] += 15" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f486083e-7c58-4255-ae1a-3fe5d9bfaeed", - "metadata": {}, - "outputs": [], - "source": [ - "# set x values directly but using an array\n", - "scatter_graphic.data[n_points:n_points * 2, 0] = np.linspace(-40, 0, n_points)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a9ffdde4-4b8e-4ff7-98b3-464cf5462d20", - "metadata": {}, - "outputs": [], - "source": [ - "# close plot\n", - "plot_s.close()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "370d5837-aecf-4e52-9323-b899ac458bbf", - "metadata": {}, - "outputs": [], - "source": [ - "# for testing, ignore\n", - "notebook_finished()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "52b6c281-ab27-4984-9a6e-f1e27f609e44", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/notebooks/test_gc.ipynb b/examples/notebooks/test_gc.ipynb new file mode 100644 index 000000000..df08e7a2d --- /dev/null +++ b/examples/notebooks/test_gc.ipynb @@ -0,0 +1,249 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "9dfba6cf-38af-4003-90b9-463c0cb1063f", + "metadata": {}, + "outputs": [], + "source": [ + "import weakref\n", + "import fastplotlib as fpl\n", + "import numpy as np\n", + "import pytest" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7552eedc-3b9b-4682-8e3b-7d44e0e5510d", + "metadata": {}, + "outputs": [], + "source": [ + "def test_references(plot_objects):\n", + " for i in range(len(plot_objects)):\n", + " with pytest.raises(ReferenceError) as failure:\n", + " plot_objects[i]\n", + " pytest.fail(f\"GC failed for object: {plot_objects[i]} of type: {plot_objects[i].__class__.__name__}\")" + ] + }, + { + "cell_type": "markdown", + "id": "948108e8-a4fa-4dc7-9953-a956428128cf", + "metadata": {}, + "source": [ + "# Add graphics and selectors, add feature event handlers, test gc occurs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3d96bf14-b484-455e-bcd7-5b2fe7b45fb4", + "metadata": {}, + "outputs": [], + "source": [ + "xs = np.linspace(0, 20 * np.pi, 1_000)\n", + "ys = np.sin(xs)\n", + "zs = np.zeros(xs.size)\n", + "\n", + "points_data = np.column_stack([xs, ys, zs])\n", + "\n", + "line_collection_data = [points_data[:, 1].copy() for i in range(10)]\n", + "\n", + "img_data = np.random.rand(1_000, 1_000)" + ] + }, + { + "cell_type": "markdown", + "id": "2a8a92e1-70bc-41b5-9ad8-b86dab6e74eb", + "metadata": {}, + "source": [ + "# Make references to each graphic" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "284b83e1-8cfc-4105-b7c2-6214137dab31", + "metadata": {}, + "outputs": [], + "source": [ + "fig = fpl.Figure((2, 2))\n", + "\n", + "line = fig[0, 0].add_line(points_data, name=\"line\")\n", + "scatter = fig[0, 1].add_scatter(points_data.copy(), name=\"scatter\")\n", + "line_stack = fig[1, 0].add_line_stack(line_collection_data, name=\"line-stack\")\n", + "image = fig[1, 1].add_image(img_data, name=\"image\")\n", + "\n", + "linear_sel = line.add_linear_selector(name=\"line_linear_sel\")\n", + "linear_region_sel = line.add_linear_region_selector(name=\"line_region_sel\")\n", + "\n", + "linear_sel2 = line_stack.add_linear_selector(name=\"line-stack_linear_sel\")\n", + "linear_region_sel2 = line_stack.add_linear_region_selector(name=\"line-stack_region_sel\")\n", + "\n", + "linear_sel_img = image.add_linear_selector(name=\"image_linear_sel\")\n", + "linear_region_sel_img = image.add_linear_region_selector(name=\"image_linear_region_sel\")" + ] + }, + { + "cell_type": "markdown", + "id": "d691c3c6-0d82-4aa8-90e9-165efffda369", + "metadata": {}, + "source": [ + "# Add event handlers" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "64198fd0-edd4-4ba1-8082-a65d57b83881", + "metadata": {}, + "outputs": [], + "source": [ + "def feature_changed_handler(ev):\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4a86c37b-41ce-4b50-af43-ef61d36b7d81", + "metadata": {}, + "outputs": [], + "source": [ + "objects = list()\n", + "weakrefs = list() # used to make sure the real objs are garbage collected\n", + "for subplot in fig:\n", + " for obj in subplot.objects:\n", + " objects.append(obj)\n", + " weakrefs.append(weakref.proxy(obj))\n", + "\n", + "for g in objects:\n", + " for feature in g._features:\n", + " g.add_event_handler(feature_changed_handler, feature)" + ] + }, + { + "cell_type": "markdown", + "id": "ecd09bc8-f051-4ffd-93d3-63c262064bb4", + "metadata": {}, + "source": [ + "# Show figure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11cf43c0-94fa-4e75-a85d-04a3f5c97729", + "metadata": {}, + "outputs": [], + "source": [ + "fig.show()" + ] + }, + { + "cell_type": "markdown", + "id": "ad58698e-1a21-466d-b640-78500cfcb229", + "metadata": {}, + "source": [ + "# Clear fig and user-created objects list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5849b8b3-8765-4e37-868f-6be0d127bdee", + "metadata": {}, + "outputs": [], + "source": [ + "fig.clear()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8ea2206b-2522-40c2-beba-c3a377990219", + "metadata": {}, + "outputs": [], + "source": [ + "objects.clear()" + ] + }, + { + "cell_type": "markdown", + "id": "a7686046-65b6-4eb4-832a-7ca72c7f9bad", + "metadata": {}, + "source": [ + "# test gc" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e33bf32d-b13a-474b-92ca-1d1e1c7b820b", + "metadata": {}, + "outputs": [], + "source": [ + "test_references(weakrefs)" + ] + }, + { + "cell_type": "markdown", + "id": "4f927111-61c5-468e-8c90-b7b5338606ba", + "metadata": {}, + "source": [ + "# test for ImageWidget" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8078a7d2-9bc6-48a1-896c-7e169c5bbdcf", + "metadata": {}, + "outputs": [], + "source": [ + "if fpl.IMGUI:\n", + " # do image widget tests only if imgui is installed\n", + " movies = [np.random.rand(100, 100, 100) for i in range(6)]\n", + " \n", + " iw = fpl.ImageWidget(movies)\n", + " \n", + " # add some events onto all the image graphics\n", + " for g in iw.managed_graphics:\n", + " for f in g._features:\n", + " g.add_event_handler(feature_changed_handler, f)\n", + " \n", + " iw.show()\n", + " \n", + " old_graphics = [weakref.proxy(g) for g in iw.managed_graphics]\n", + " \n", + " # Test that setting new data with different dims clears old ImageGraphics\n", + " new_movies = [np.random.rand(100, 200, 200) for i in range(6)]\n", + " \n", + " iw.set_data(new_movies)\n", + " test_references(old_graphics)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/notebooks/zfish_test.npy b/examples/notebooks/zfish_test.npy new file mode 100644 index 000000000..61f0474e6 --- /dev/null +++ b/examples/notebooks/zfish_test.npy @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff73fdbde34cafaf01254b9e72bdc484d865e6c3288ef88fc1953f349fc02152 +size 26214528 diff --git a/examples/qt/README.rst b/examples/qt/README.rst new file mode 100644 index 000000000..5ff5471d5 --- /dev/null +++ b/examples/qt/README.rst @@ -0,0 +1,2 @@ +Qt Examples +=========== diff --git a/examples/qt/embed.py b/examples/qt/embed.py new file mode 100644 index 000000000..ba20c5084 --- /dev/null +++ b/examples/qt/embed.py @@ -0,0 +1,66 @@ +""" +Embed within a Qt Window +======================== + +When using the Qt canvas, `Figure.show()` just returns a QWidget that behaves like any other Qt widget. So you can +embed it and do other things that you can do with ordinary QWidgets. This example use a simple Plot to display a video +frame that can be updated using a QSlider. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'code' + +from PyQt6 import QtWidgets, QtCore +import fastplotlib as fpl +import imageio.v3 as iio + + +video = iio.imread("imageio:cockatoo.mp4") + +# fastplotlib and wgpu will auto-detect if Qt is imported and then use the Qt canvas and output context +fig = fpl.Figure() + +fig[0, 0].add_image(video[0], name="video") + + +def update_frame(ix): + fig[0, 0]["video"].data = video[ix] + # you can also do fig[0, 0].graphics[0].data = video[ix] + + +# create a QMainWindow +main_window = QtWidgets.QMainWindow() + +# Create a QSlider for updating frames +slider = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal) +slider.setMaximum(video.shape[0] - 1) +slider.setMinimum(0) +slider.valueChanged.connect(update_frame) + +# put slider in a dock +dock = QtWidgets.QDockWidget() +dock.setWidget(slider) + +# put the dock in the main window +main_window.addDockWidget( + QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, + dock +) + +# calling fig.show() is required to start the rendering loop +qwidget = fig.show() + +# set the qwidget as the central widget +main_window.setCentralWidget(qwidget) + +# set window size from width and height of video +main_window.resize(video.shape[2], video.shape[1]) + +# show the main window +main_window.show() + +# execute Qt app +fpl.loop.run() + +# You can also use Qt interactively/in a non-blocking manner in notebooks and ipython +# by using %gui qt and NOT calling `fpl.loop.run()`, see the user guide for more details diff --git a/examples/qt/imagewidget.py b/examples/qt/imagewidget.py index ab1a055f1..8a5b8937c 100644 --- a/examples/qt/imagewidget.py +++ b/examples/qt/imagewidget.py @@ -1,29 +1,42 @@ """ -Use ImageWidget to display one or multiple image sequences +ImageWidget as QtWidget +======================= + +This example opens multiple windows to show multiple ImageWidgets. """ + +# test_example = false +# sphinx_gallery_pygfx_docs = 'code' + import numpy as np from PyQt6 import QtWidgets import fastplotlib as fpl +import imageio.v3 as iio -# Qt app MUST be instantiated before creating any fpl objects, or any other Qt objects -app = QtWidgets.QApplication([]) images = np.random.rand(100, 512, 512) -# create image widget, force Qt canvas so it doesn't pick glfw -iw = fpl.ImageWidget(images, grid_plot_kwargs={"canvas": "qt"}) -iw.show() -iw.widget.resize(800, 800) +# fastplotlib and wgpu will auto-detect if Qt is imported and then use the Qt canvas +iw = fpl.ImageWidget(images) +widget = iw.show() +widget.resize(800, 800) # another image widget with multiple images -images_list = [np.random.rand(100, 512, 512) for i in range(9)] +images_list = [np.random.rand(100, 512, 512) for i in range(4)] iw_mult = fpl.ImageWidget( images_list, - grid_plot_kwargs={"canvas": "qt"}, cmap="viridis" ) -iw_mult.show() -iw_mult.widget.resize(800, 800) +widget_multi = iw_mult.show() +widget_multi.resize(800, 800) + +# image widget with rgb data +rgb_video = iio.imread("imageio:cockatoo.mp4") +iw_rgb = fpl.ImageWidget(rgb_video, rgb=[True], figure_kwargs={"size": (800, 500)}) +iw_rgb.show() + +fpl.loop.run() -app.exec() +# You can also use Qt interactively/in a non-blocking manner in notebooks and ipython +# by using %gui qt and NOT calling `fpl.loop.run()`, see the user guide for more details diff --git a/examples/qt/minimal.py b/examples/qt/minimal.py index e4e5f6c2f..0424df403 100644 --- a/examples/qt/minimal.py +++ b/examples/qt/minimal.py @@ -1,35 +1,36 @@ """ -Minimal PyQt example that displays an image. Press "r" key to autoscale +Minimal Qt +========== + +Minimal PyQt example that displays an image. + +`Figure.show()` returns a QWidget that you can use in a Qt app just like any other QWidget! """ + +# test_example = false +# sphinx_gallery_pygfx_docs = 'code' + +# import Qt or PySide from PyQt6 import QtWidgets import fastplotlib as fpl import imageio.v3 as iio -# Qt app MUST be instantiated before creating any fpl objects, or any other Qt objects -app = QtWidgets.QApplication([]) - img = iio.imread("imageio:astronaut.png") -# force qt canvas, wgpu will sometimes pick glfw by default even if Qt is present -plot = fpl.Plot(canvas="qt") +# fastplotlib and wgpu will auto-detect if Qt is imported and then use the Qt canvas and Qt output context +figure = fpl.Figure() -plot.add_image(img) -plot.camera.local.scale *= -1 +figure[0, 0].add_image(img) -# must call plot.show() to start rendering loop -plot.show() +# must call fig.show() to start rendering loop and show the QWidget containing the fastplotlib figure +qwidget = figure.show() # set QWidget initial size from image width and height -plot.canvas.resize(*img.shape[:2]) - - -def autoscale(ev): - if ev.key == "r": - plot.auto_scale() - - -# useful if you pan/zoom away from the image -plot.renderer.add_event_handler(autoscale, "key_down") +qwidget.resize(*img.shape[:2]) # execute Qt app -app.exec() +# if this is part of a larger Qt QApplication, you can also call app.exec() where app is the QApplication instance +fpl.loop.run() + +# You can also use Qt interactively/in a non-blocking manner in notebooks and ipython +# by using %gui qt and NOT calling `fpl.run()`, see the user guide for more details diff --git a/examples/qt/video.py b/examples/qt/video.py deleted file mode 100644 index 9fd77a999..000000000 --- a/examples/qt/video.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Use a simple Plot to display a video frame that can be updated using a QSlider -""" -from PyQt6 import QtWidgets, QtCore -import fastplotlib as fpl -import imageio.v3 as iio - -# Qt app MUST be instantiated before creating any fpl objects, or any other Qt objects -app = QtWidgets.QApplication([]) - -video = iio.imread("imageio:cockatoo.mp4") - -# force qt canvas, wgpu will sometimes pick glfw by default even if Qt is present -plot = fpl.Plot(canvas="qt") - -plot.add_image(video[0], name="video") -plot.camera.local.scale *= -1 - - -def update_frame(ix): - plot["video"].data = video[ix] - # you can also do plot.graphics[0].data = video[ix] - - -# create a QMainWindow, set the plot canvas as the main widget -# The canvas does not have to be in a QMainWindow and it does -# not have to be the central widget, it will work like any QWidget -main_window = QtWidgets.QMainWindow() -main_window.setCentralWidget(plot.canvas) - -# Create a QSlider for updating frames -slider = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal) -slider.setMaximum(video.shape[0] - 1) -slider.setMinimum(0) -slider.valueChanged.connect(update_frame) - -# put slider in a dock -dock = QtWidgets.QDockWidget() -dock.setWidget(slider) - -# put the dock in the main window -main_window.addDockWidget( - QtCore.Qt.DockWidgetArea.BottomDockWidgetArea, - dock -) - -# calling plot.show() is required to start the rendering loop -plot.show() - -# set window size from width and height of video -main_window.resize(video.shape[2], video.shape[1]) - -# show the main window -main_window.show() - -# execute Qt app -app.exec() diff --git a/examples/scatter/README.rst b/examples/scatter/README.rst new file mode 100644 index 000000000..278170fb4 --- /dev/null +++ b/examples/scatter/README.rst @@ -0,0 +1,2 @@ +Scatter Examples +================ diff --git a/examples/scatter/scatter.py b/examples/scatter/scatter.py new file mode 100644 index 000000000..838199ecb --- /dev/null +++ b/examples/scatter/scatter.py @@ -0,0 +1,48 @@ +""" +Scatter Plot +============ + +Example showing scatter plot. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np + +figure = fpl.Figure(size=(700, 560)) + +# create a random distribution of 10,000 xyz coordinates +n_points = 5_000 + +# dimensions always have to be [n_points, xyz] +dims = (n_points, 3) + +clouds_offset = 15 + +# create some random clouds +normal = np.random.normal(size=dims, scale=5) +# stack the data into a single array +cloud = np.vstack( + [ + normal - clouds_offset, + normal, + normal + clouds_offset, + ] +) + +# color each of them separately +colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points + +# use an alpha value since this will be a lot of points +figure[0, 0].add_scatter(data=cloud, sizes=3, colors=colors, alpha=0.6) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/scatter/scatter_cmap.py b/examples/scatter/scatter_cmap.py new file mode 100644 index 000000000..3c7bd0e21 --- /dev/null +++ b/examples/scatter/scatter_cmap.py @@ -0,0 +1,50 @@ +""" +Scatter Colormap +================ + +Example showing cmap change for scatter plot. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np + +figure = fpl.Figure(size=(700, 560)) + +# create a random distribution of 10,000 xyz coordinates +n_points = 5_000 + +# dimensions always have to be [n_points, xyz] +dims = (n_points, 3) + +clouds_offset = 15 + +# create some random clouds +normal = np.random.normal(size=dims, scale=5) +# stack the data into a single array +cloud = np.vstack( + [ + normal - clouds_offset, + normal, + normal + clouds_offset, + ] +) + +# color each of them separately +colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points + +# use an alpha value since this will be a lot of points +figure[0, 0].add_scatter(data=cloud, sizes=3, colors=colors, alpha=0.6) + +figure.show() + +figure[0, 0].graphics[0].cmap = "viridis" + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/scatter/scatter_cmap_iris.py b/examples/scatter/scatter_cmap_iris.py new file mode 100644 index 000000000..139554dae --- /dev/null +++ b/examples/scatter/scatter_cmap_iris.py @@ -0,0 +1,38 @@ +""" +Iris Scatter Colormap +===================== + +Example showing cmap change for scatter plot. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +from sklearn.cluster import AgglomerativeClustering +from sklearn import datasets + + +figure = fpl.Figure(size=(700, 560)) + +data = datasets.load_iris()["data"] + +agg = AgglomerativeClustering(n_clusters=3) +agg.fit_predict(data) + +scatter_graphic = figure[0, 0].add_scatter( + data=data[:, :-1], # use only xy data + sizes=15, + alpha=0.7, + cmap="Set1", + cmap_transform=agg.labels_ # use the labels as a transform to map colors from the colormap +) + +figure.show() + +scatter_graphic.cmap = "tab10" + + +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/scatter/scatter_colorslice.py b/examples/scatter/scatter_colorslice.py new file mode 100644 index 000000000..a3cacee55 --- /dev/null +++ b/examples/scatter/scatter_colorslice.py @@ -0,0 +1,53 @@ +""" +Scatter Plot Color Slicing +========================== + +Example showing color slice for scatter plot. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np + +figure = fpl.Figure(size=(700, 560)) + +# create a random distribution of 10,000 xyz coordinates +n_points = 5_000 + +# dimensions always have to be [n_points, xyz] +dims = (n_points, 3) + +clouds_offset = 30 + +# create some random clouds +normal = np.random.normal(size=dims, scale=5) +# stack the data into a single array +cloud = np.vstack( + [ + normal - clouds_offset, + normal, + normal + clouds_offset, + ] +) + +# color each of them separately +colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points + +# use an alpha value since this will be a lot of points +figure[0, 0].add_scatter(data=cloud, sizes=3, colors=colors, alpha=0.6) + +figure.show() + +scatter_graphic = figure[0, 0].graphics[0] + +scatter_graphic.colors[0:75] = "red" +scatter_graphic.colors[75:150] = "white" +scatter_graphic.colors[::2] = "blue" + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/scatter/scatter_colorslice_iris.py b/examples/scatter/scatter_colorslice_iris.py new file mode 100644 index 000000000..725374ef7 --- /dev/null +++ b/examples/scatter/scatter_colorslice_iris.py @@ -0,0 +1,38 @@ +""" +Iris Scatter Plot Color Slicing +=============================== + +Example showing color slice for scatter plot. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +from sklearn import datasets + + +figure = fpl.Figure(size=(700, 560)) + +data = datasets.load_iris()["data"] + +n_points = 50 +colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points + +scatter_graphic = figure[0, 0].add_scatter( + data=data[:, :-1], + sizes=6, + alpha=0.7, + colors=colors # use colors from the list of strings +) + +figure.show() + +scatter_graphic.colors[0:75] = "red" +scatter_graphic.colors[75:150] = "white" +scatter_graphic.colors[::2] = "blue" + + +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/scatter/scatter_dataslice.py b/examples/scatter/scatter_dataslice.py new file mode 100644 index 000000000..7a30d6f70 --- /dev/null +++ b/examples/scatter/scatter_dataslice.py @@ -0,0 +1,39 @@ +""" +Scatter Plot Data Slicing +========================= + +Example showing data slice for scatter plot. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np + + +figure = fpl.Figure(size=(700, 560)) + +# create a gaussian cloud of 5_000 points +n_points = 1_000 + +mean = [0, 0] # mean of the Gaussian distribution +covariance = [[1, 0], [0, 1]] # covariance matrix + +gaussian_cloud = np.random.multivariate_normal(mean, covariance, n_points) +gaussian_cloud2 = np.random.multivariate_normal(mean, covariance, n_points) + +# use an alpha value since this will be a lot of points +scatter1 = figure[0,0].add_scatter(data=gaussian_cloud, sizes=3) +scatter2 = figure[0,0].add_scatter(data=gaussian_cloud2, colors="r", sizes=3) + +figure.show() + +scatter1.data[:500] = np.array([0 , 0, 0]) +scatter2.data[500:] = np.array([0 , 0, 0]) + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/desktop/scatter/scatter_dataslice.py b/examples/scatter/scatter_dataslice_iris.py similarity index 56% rename from examples/desktop/scatter/scatter_dataslice.py rename to examples/scatter/scatter_dataslice_iris.py index 22c495bff..cc688eeb4 100644 --- a/examples/desktop/scatter/scatter_dataslice.py +++ b/examples/scatter/scatter_dataslice_iris.py @@ -1,42 +1,37 @@ """ -Scatter Plot -============ +Iris Scatter Plot Data Slicing +============================== + Example showing data slice for scatter plot. """ # test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' import fastplotlib as fpl import numpy as np -from pathlib import Path +from sklearn import datasets -plot = fpl.Plot() -# to force a specific framework such as glfw: -# plot = fpl.Plot(canvas="glfw") +figure = fpl.Figure(size=(700, 560)) -data_path = Path(__file__).parent.parent.joinpath("data", "iris.npy") -data = np.load(data_path) +data = datasets.load_iris()["data"] n_points = 50 colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points -scatter_graphic = plot.add_scatter(data=data[:, :-1], sizes=6, alpha=0.7, colors=colors) - -plot.show() - -plot.canvas.set_logical_size(800, 800) +scatter_graphic = figure[0, 0].add_scatter(data=data[:, :-1], sizes=6, alpha=0.7, colors=colors) -plot.auto_scale() +figure.show() scatter_graphic.data[0] = np.array([[5, 3, 1.5]]) scatter_graphic.data[1] = np.array([[4.3, 3.2, 1.3]]) scatter_graphic.data[2] = np.array([[5.2, 2.7, 1.7]]) scatter_graphic.data[10:15] = scatter_graphic.data[0:5] + np.array([1, 1, 1]) -scatter_graphic.data[50:100:2] = scatter_graphic.data[100:150:2] + np.array([1,1,0]) +scatter_graphic.data[50:100:2] = scatter_graphic.data[100:150:2] + np.array([1, 1, 0]) if __name__ == "__main__": print(__doc__) - fpl.run() + fpl.loop.run() diff --git a/examples/scatter/scatter_iris.py b/examples/scatter/scatter_iris.py new file mode 100644 index 000000000..94c8acca1 --- /dev/null +++ b/examples/scatter/scatter_iris.py @@ -0,0 +1,35 @@ +""" +Iris Scatter Plot +================= + +Example showing scatter plot using sklearn iris dataset. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'hidden' + +import fastplotlib as fpl +import numpy as np +from pathlib import Path +import sys + +figure = fpl.Figure(size=(700, 560)) + +current_file = Path(sys.argv[0]).resolve() + +data_path = Path(__file__).parent.parent.joinpath("data", "iris.npy") +data = np.load(data_path) + +n_points = 50 +colors = ["yellow"] * n_points + ["cyan"] * n_points + ["magenta"] * n_points + +scatter_graphic = figure[0, 0].add_scatter(data=data[:, :-1], sizes=6, alpha=0.7, colors=colors) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/scatter/scatter_size.py b/examples/scatter/scatter_size.py new file mode 100644 index 000000000..30d3e6ea3 --- /dev/null +++ b/examples/scatter/scatter_size.py @@ -0,0 +1,50 @@ +""" +Scatter Plot Size +================= + +Example that shows how to set scatter sizes in two different ways. + +One subplot uses a single scaler value for every point, and another subplot uses an array that defines the size for +each individual scatter point. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl + +# figure with 2 rows and 3 columns +shape = (2, 1) + +# you can give string names for each subplot within the figure +names = [["scalar_size"], ["array_size"]] + +# Create the figure +figure = fpl.Figure(shape=shape, names=names, size=(700, 560)) + +# get y_values using sin function +angles = np.arange(0, 20 * np.pi + 0.001, np.pi / 20) +y_values = 30 * np.sin(angles) # 1 thousand points +x_values = np.array([x for x in range(len(y_values))], dtype=np.float32) + +data = np.column_stack([x_values, y_values]) + +figure["scalar_size"].add_scatter( + data=data, sizes=5, colors="blue" +) # add a set of scalar sizes + +non_scalar_sizes = np.abs((y_values / np.pi)) # ensure minimum size of 5 +figure["array_size"].add_scatter(data=data, sizes=non_scalar_sizes, colors="red") + +for graph in figure: + graph.auto_scale(maintain_aspect=True) + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/scatter/spinning_spiral.py b/examples/scatter/spinning_spiral.py new file mode 100644 index 000000000..80e893301 --- /dev/null +++ b/examples/scatter/spinning_spiral.py @@ -0,0 +1,86 @@ +""" +Spinning spiral scatter +======================= + +Example of a spinning spiral scatter. + +This example with 1 million points runs at 125 fps on an AMD RX 570. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate 15s' + +import numpy as np +import fastplotlib as fpl + +# number of points +n = 100_000 + +# create data in the shape of a spiral +phi = np.linspace(0, 30, n) + +xs = phi * np.cos(phi) + np.random.normal(scale=1.5, size=n) +ys = np.random.normal(scale=1, size=n) +zs = phi * np.sin(phi) + np.random.normal(scale=1.5, size=n) + +data = np.column_stack([xs, ys, zs]) + +# generate some random sizes for the points +sizes = np.abs(np.random.normal(loc=0, scale=1, size=n)) + +figure = fpl.Figure( + cameras="3d", + size=(700, 560), + canvas_kwargs={"max_fps": 500, "vsync": False} +) + +spiral = figure[0, 0].add_scatter(data, cmap="viridis_r", alpha=0.5, sizes=sizes) + +# pre-generate normally distributed data to jitter the points before each render +jitter = np.random.normal(scale=0.001, size=n * 3).reshape((n, 3)) + + +def update(): + # rotate around y axis + spiral.rotate(0.005, axis="y") + + # add small jitter + spiral.data[:] += jitter + # shift array to provide a random-sampling effect + # without re-running a random generator on each iteration + # generating 1 million normally distributed points takes ~50ms even with SFC64 + jitter[1000:] = jitter[:-1000] + jitter[:1000] = jitter[-1000:] + + +figure.add_animations(update) +figure.show() + +# pre-saved camera state +camera_state = { + 'position': np.array([-0.13046005, 20.09142224, 29.03347696]), + 'rotation': np.array([-0.44485092, 0.05335406, 0.11586037, 0.88647469]), + 'scale': np.array([1., 1., 1.]), + 'reference_up': np.array([0., 1., 0.]), + 'fov': 50.0, + 'width': 62.725074768066406, + 'height': 8.856056690216064, + 'zoom': 0.75, + 'maintain_aspect': True, + 'depth_range': None +} + +figure[0, 0].camera.set_state(camera_state) +figure[0, 0].axes.visible = False + + +if fpl.IMGUI: + # show fps with imgui overlay + figure.imgui_show_fps = True + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/screenshots/extent_frac_layout.png b/examples/screenshots/extent_frac_layout.png new file mode 100644 index 000000000..7fe6d3d37 --- /dev/null +++ b/examples/screenshots/extent_frac_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5991b755432318310cfc2b4826bd9639cc234883aa06f1895817f710714cb58f +size 156297 diff --git a/examples/screenshots/extent_layout.png b/examples/screenshots/extent_layout.png new file mode 100644 index 000000000..dec391ac2 --- /dev/null +++ b/examples/screenshots/extent_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cf23f845932023789e0823a105910e9f701d0f03c04e3c18488f0da62420921 +size 123409 diff --git a/examples/screenshots/gridplot.png b/examples/screenshots/gridplot.png new file mode 100644 index 000000000..08e6d6b78 --- /dev/null +++ b/examples/screenshots/gridplot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f424ec68dbc0761566cd147f3bf5b8f15e4126c3b30b2ff47b6fb48f04d512a +size 252269 diff --git a/examples/screenshots/gridplot_non_square.png b/examples/screenshots/gridplot_non_square.png new file mode 100644 index 000000000..781de8749 --- /dev/null +++ b/examples/screenshots/gridplot_non_square.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ac9ee6fd1118a06a1f0de4eee73e7b6bee188c533da872c5cbaf7119114414f +size 194385 diff --git a/examples/screenshots/gridplot_viewports_check.png b/examples/screenshots/gridplot_viewports_check.png new file mode 100644 index 000000000..b1faf9b69 --- /dev/null +++ b/examples/screenshots/gridplot_viewports_check.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67dd50d61a0caaf563d95110f99fa24c567ddd778a697715247d697a1b5bb1ac +size 46667 diff --git a/examples/screenshots/heatmap.png b/examples/screenshots/heatmap.png new file mode 100644 index 000000000..defcca301 --- /dev/null +++ b/examples/screenshots/heatmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0789d249cb4cfad21c9f1629721ade26ed734e05b1b13c3a5871793f6271362b +size 91831 diff --git a/examples/screenshots/image_cmap.png b/examples/screenshots/image_cmap.png new file mode 100644 index 000000000..0301d2ed4 --- /dev/null +++ b/examples/screenshots/image_cmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2bbb79716fecce08479fbe7977565daccadf4688c8a99e155db297ecce4c484 +size 199979 diff --git a/examples/screenshots/image_rgb.png b/examples/screenshots/image_rgb.png new file mode 100644 index 000000000..11129ceaa --- /dev/null +++ b/examples/screenshots/image_rgb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23024936931651cdf4761f2cafcd8002bb12ab86e9efb13ddc99a9bf659c3935 +size 226879 diff --git a/examples/screenshots/image_rgbvminvmax.png b/examples/screenshots/image_rgbvminvmax.png new file mode 100644 index 000000000..afe4de6f7 --- /dev/null +++ b/examples/screenshots/image_rgbvminvmax.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fb9cd6d32813df6a9e3bf183f73cb69fdb61d290d7f2a4cc223ab34301351a1 +size 50231 diff --git a/examples/screenshots/image_simple.png b/examples/screenshots/image_simple.png new file mode 100644 index 000000000..702a1ac5c --- /dev/null +++ b/examples/screenshots/image_simple.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3eb6f03364226e9f1aae72f6414ad05b0239a15c2a0fbcd71d3718fee477e2c +size 199468 diff --git a/examples/screenshots/image_small.png b/examples/screenshots/image_small.png new file mode 100644 index 000000000..d17cb7ab2 --- /dev/null +++ b/examples/screenshots/image_small.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dcfc7b8a964db9a950bf4d3217fb171d081251b107977f9acd612fcd5fb0be1 +size 14453 diff --git a/examples/screenshots/image_vminvmax.png b/examples/screenshots/image_vminvmax.png new file mode 100644 index 000000000..afe4de6f7 --- /dev/null +++ b/examples/screenshots/image_vminvmax.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fb9cd6d32813df6a9e3bf183f73cb69fdb61d290d7f2a4cc223ab34301351a1 +size 50231 diff --git a/examples/screenshots/image_widget.png b/examples/screenshots/image_widget.png new file mode 100644 index 000000000..23d34ae50 --- /dev/null +++ b/examples/screenshots/image_widget.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:220ebb5286b48426f9457b62d6e7f9fe61b5a62b8874c7e010e07e146ae205a5 +size 184633 diff --git a/examples/screenshots/image_widget_grid.png b/examples/screenshots/image_widget_grid.png new file mode 100644 index 000000000..a6ccd144a --- /dev/null +++ b/examples/screenshots/image_widget_grid.png @@ -0,0 +1,4 @@ +version https://git-lfs.github.com/spec/v1 + +oid sha256:430cd0ee5c05221c42073345480acbeee672c299311f239dc0790a9495d0d758 +size 248046 diff --git a/examples/screenshots/image_widget_imgui.png b/examples/screenshots/image_widget_imgui.png new file mode 100644 index 000000000..cb165cc86 --- /dev/null +++ b/examples/screenshots/image_widget_imgui.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7522a35768d013a257e3cf3b00cce626b023b169484e035f46c635efc553b0bf +size 165747 diff --git a/examples/screenshots/image_widget_single_video.png b/examples/screenshots/image_widget_single_video.png new file mode 100644 index 000000000..aa757a950 --- /dev/null +++ b/examples/screenshots/image_widget_single_video.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f0843f4693460ae985c1f33d84936fbcc943d0405e0893186cbee7a5765dbc0 +size 90283 diff --git a/examples/screenshots/image_widget_videos.png b/examples/screenshots/image_widget_videos.png new file mode 100644 index 000000000..2e289ae3c --- /dev/null +++ b/examples/screenshots/image_widget_videos.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eec22392f85db1fd375d7ffa995a2719cf86821fe3fe85913f4ab66084eccbf9 +size 290587 diff --git a/examples/screenshots/image_widget_viewports_check.png b/examples/screenshots/image_widget_viewports_check.png new file mode 100644 index 000000000..662432e59 --- /dev/null +++ b/examples/screenshots/image_widget_viewports_check.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c4449f7e97375aa9d7fe1d00364945fc86b568303022157621de21a20d1d13e +size 93914 diff --git a/examples/screenshots/imgui_basic.png b/examples/screenshots/imgui_basic.png new file mode 100644 index 000000000..1ff9952a9 --- /dev/null +++ b/examples/screenshots/imgui_basic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09cc7b0680e53ae1a2689b63f9b0ed641535fcffc99443cd455cc8d9b6923229 +size 36218 diff --git a/examples/screenshots/line.png b/examples/screenshots/line.png new file mode 100644 index 000000000..02603b692 --- /dev/null +++ b/examples/screenshots/line.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bfaa54bde0967463413ecd2defa8ca18169d534163cc8b297879900e812fee8 +size 167012 diff --git a/examples/screenshots/line_cmap.png b/examples/screenshots/line_cmap.png new file mode 100644 index 000000000..1ecc930e4 --- /dev/null +++ b/examples/screenshots/line_cmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0503c008f8869dcf83793c21b15169a93558988c1a5c4edfd2aa93c549d25e1 +size 49343 diff --git a/examples/screenshots/line_cmap_more.png b/examples/screenshots/line_cmap_more.png new file mode 100644 index 000000000..4bf597e8b --- /dev/null +++ b/examples/screenshots/line_cmap_more.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab4d759dd679a2959c0fda724e7b7a1b7593d6f67ce797f08a5292dd0eb74fb1 +size 125023 diff --git a/examples/screenshots/line_collection.png b/examples/screenshots/line_collection.png new file mode 100644 index 000000000..382132770 --- /dev/null +++ b/examples/screenshots/line_collection.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3b6b973a52f7088536a4f437be2a7f6ebb2787756f9170145a945c53e90093c +size 98950 diff --git a/examples/screenshots/line_collection_cmap_values.png b/examples/screenshots/line_collection_cmap_values.png new file mode 100644 index 000000000..c00bffdb6 --- /dev/null +++ b/examples/screenshots/line_collection_cmap_values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45bb6652f477ab0165bf59e504c1935e5781bceea9a891fcfa9975dec92eef4b +size 64720 diff --git a/examples/screenshots/line_collection_cmap_values_qualitative.png b/examples/screenshots/line_collection_cmap_values_qualitative.png new file mode 100644 index 000000000..662d3254d --- /dev/null +++ b/examples/screenshots/line_collection_cmap_values_qualitative.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e5b5cb45e78ae24d72f3cb84e482fac7bf0a98cd9b9b934444d2e67c9910d57 +size 66565 diff --git a/examples/screenshots/line_collection_colors.png b/examples/screenshots/line_collection_colors.png new file mode 100644 index 000000000..3b90e5b4c --- /dev/null +++ b/examples/screenshots/line_collection_colors.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4edf84af27535e4a30b48906ab3cacaeb38d073290828df3c5707620e222b4d3 +size 58635 diff --git a/examples/screenshots/line_collection_slicing.png b/examples/screenshots/line_collection_slicing.png new file mode 100644 index 000000000..e0537a261 --- /dev/null +++ b/examples/screenshots/line_collection_slicing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66933c1fa349ebb4dd69b9bf396acb8f0aeeabbf17a3b7054d1f1e038a6e04be +size 129484 diff --git a/examples/screenshots/line_colorslice.png b/examples/screenshots/line_colorslice.png new file mode 100644 index 000000000..f3374e221 --- /dev/null +++ b/examples/screenshots/line_colorslice.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d654aa666ac1f4cfbf228fc4c5fbd2f68eed841c7cc6265637d5b836b918314c +size 57989 diff --git a/examples/screenshots/line_dataslice.png b/examples/screenshots/line_dataslice.png new file mode 100644 index 000000000..6ecf63b26 --- /dev/null +++ b/examples/screenshots/line_dataslice.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9b93af2028eb0186dd75d74c079d5effdb284a8677e6eec1a7fd2c8de4c8498 +size 70489 diff --git a/examples/screenshots/line_stack.png b/examples/screenshots/line_stack.png new file mode 100644 index 000000000..9a9ad4fd6 --- /dev/null +++ b/examples/screenshots/line_stack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b6c2d1ee4c49ff5b193b5105b2794c6b5bd7a089a8a2c6fa03e09e02352aa65 +size 121462 diff --git a/examples/screenshots/linear_region_selectors_match_offsets.png b/examples/screenshots/linear_region_selectors_match_offsets.png new file mode 100644 index 000000000..e6fab4c4d --- /dev/null +++ b/examples/screenshots/linear_region_selectors_match_offsets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2eac8ffeb8cd35a0c65d51b0952defea61928abb53c865e681fa72af4ac4347 +size 95750 diff --git a/examples/screenshots/linear_selector.png b/examples/screenshots/linear_selector.png new file mode 100644 index 000000000..8571d664b --- /dev/null +++ b/examples/screenshots/linear_selector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62ded18658bc5cb41129d27eb21f47f029cf7c75bb6388b5d72af6fe9c5cada9 +size 130919 diff --git a/examples/screenshots/no-imgui-extent_frac_layout.png b/examples/screenshots/no-imgui-extent_frac_layout.png new file mode 100644 index 000000000..4dc3b2aa6 --- /dev/null +++ b/examples/screenshots/no-imgui-extent_frac_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5923e8b9f687f97d488b282b35f16234898ed1038b0737b7b57fb9cbd72ebf34 +size 157321 diff --git a/examples/screenshots/no-imgui-extent_layout.png b/examples/screenshots/no-imgui-extent_layout.png new file mode 100644 index 000000000..16d1ff446 --- /dev/null +++ b/examples/screenshots/no-imgui-extent_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2ffe0a8d625322cc22d2abdde80a3f179f01552dde974bbbd49f9e371ab39aa +size 138936 diff --git a/examples/screenshots/no-imgui-gridplot.png b/examples/screenshots/no-imgui-gridplot.png new file mode 100644 index 000000000..7f870cf76 --- /dev/null +++ b/examples/screenshots/no-imgui-gridplot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b31f2002053b5934ae78393214e67717d10bd567e590212eaff4062440657acd +size 292558 diff --git a/examples/screenshots/no-imgui-gridplot_non_square.png b/examples/screenshots/no-imgui-gridplot_non_square.png new file mode 100644 index 000000000..e08d64805 --- /dev/null +++ b/examples/screenshots/no-imgui-gridplot_non_square.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9ef00db82a3559b4d7c77b68838f5876f98a2b9e80ef9ecb257f32c62161b5e +size 216512 diff --git a/examples/screenshots/no-imgui-gridplot_viewports_check.png b/examples/screenshots/no-imgui-gridplot_viewports_check.png new file mode 100644 index 000000000..2a8c0dc6f --- /dev/null +++ b/examples/screenshots/no-imgui-gridplot_viewports_check.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6818a7c8bdb29567bb09cfe00acaa6872a046d4d35a87ef2be7afa06c2a8a089 +size 44869 diff --git a/examples/screenshots/no-imgui-heatmap.png b/examples/screenshots/no-imgui-heatmap.png new file mode 100644 index 000000000..e91d06c4f --- /dev/null +++ b/examples/screenshots/no-imgui-heatmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:875c15e74e7ea2eaa6b00ddbdd80b4775ecb1fe0002a5122371d49f975369cce +size 95553 diff --git a/examples/screenshots/no-imgui-image_cmap.png b/examples/screenshots/no-imgui-image_cmap.png new file mode 100644 index 000000000..2d42899fc --- /dev/null +++ b/examples/screenshots/no-imgui-image_cmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b43bd64ceec8c5c1287a2df57abf7bd148955d6ba97a425b32ae53bad03a051 +size 216050 diff --git a/examples/screenshots/no-imgui-image_rgb.png b/examples/screenshots/no-imgui-image_rgb.png new file mode 100644 index 000000000..6be5205ac --- /dev/null +++ b/examples/screenshots/no-imgui-image_rgb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42516cd0719d5b33ec32523dd2efe7874398bac6d0aecb5163ff1cb5c105135f +size 244717 diff --git a/examples/screenshots/no-imgui-image_rgbvminvmax.png b/examples/screenshots/no-imgui-image_rgbvminvmax.png new file mode 100644 index 000000000..48d8fff95 --- /dev/null +++ b/examples/screenshots/no-imgui-image_rgbvminvmax.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f8a99a9172ae5edf98f0d189455fad2074a99f2280c9352675bab8d4c0e3491 +size 50751 diff --git a/examples/screenshots/no-imgui-image_simple.png b/examples/screenshots/no-imgui-image_simple.png new file mode 100644 index 000000000..1e4487757 --- /dev/null +++ b/examples/screenshots/no-imgui-image_simple.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cfa6469803f44a682c9ce7337ae265a8d60749070991e6f3a723eb37c5a9a23 +size 215410 diff --git a/examples/screenshots/no-imgui-image_small.png b/examples/screenshots/no-imgui-image_small.png new file mode 100644 index 000000000..3613a8139 --- /dev/null +++ b/examples/screenshots/no-imgui-image_small.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17ccf0014c7ba7054440e3daf8d4e2a397e9013d1aea804c40dc7302dad4171e +size 13327 diff --git a/examples/screenshots/no-imgui-image_vminvmax.png b/examples/screenshots/no-imgui-image_vminvmax.png new file mode 100644 index 000000000..48d8fff95 --- /dev/null +++ b/examples/screenshots/no-imgui-image_vminvmax.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f8a99a9172ae5edf98f0d189455fad2074a99f2280c9352675bab8d4c0e3491 +size 50751 diff --git a/examples/screenshots/no-imgui-line.png b/examples/screenshots/no-imgui-line.png new file mode 100644 index 000000000..cdc24e382 --- /dev/null +++ b/examples/screenshots/no-imgui-line.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3952cf9b0c9d008a885dc4abb3aeaaed6fd94a5db05ba83c6f4c4c76fe6e925 +size 171519 diff --git a/examples/screenshots/no-imgui-line_cmap.png b/examples/screenshots/no-imgui-line_cmap.png new file mode 100644 index 000000000..4f2bbba43 --- /dev/null +++ b/examples/screenshots/no-imgui-line_cmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3c9ac8d2b8157ffd575e5ad2b2bb23b684b52403c2f4f021c52d100cfb28a83 +size 49048 diff --git a/examples/screenshots/no-imgui-line_cmap_more.png b/examples/screenshots/no-imgui-line_cmap_more.png new file mode 100644 index 000000000..8125be49f --- /dev/null +++ b/examples/screenshots/no-imgui-line_cmap_more.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ddd88200aa824d4e05ba3f94fdb4216a1e7c7137b202cd8fb47997453dfd5a6 +size 126830 diff --git a/examples/screenshots/no-imgui-line_collection.png b/examples/screenshots/no-imgui-line_collection.png new file mode 100644 index 000000000..a31cf55fe --- /dev/null +++ b/examples/screenshots/no-imgui-line_collection.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d807f770c118e668c6bda1919856d7804f716a2bf95a5ae060345df1cd2b3c7 +size 102703 diff --git a/examples/screenshots/no-imgui-line_collection_cmap_values.png b/examples/screenshots/no-imgui-line_collection_cmap_values.png new file mode 100644 index 000000000..c909c766f --- /dev/null +++ b/examples/screenshots/no-imgui-line_collection_cmap_values.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e8612de5c3ee252ce9c8cc8afd5bd6075d5e242e8a93cd025e28ec82526120f +size 64698 diff --git a/examples/screenshots/no-imgui-line_collection_cmap_values_qualitative.png b/examples/screenshots/no-imgui-line_collection_cmap_values_qualitative.png new file mode 100644 index 000000000..61d5a21d0 --- /dev/null +++ b/examples/screenshots/no-imgui-line_collection_cmap_values_qualitative.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7847cd4399ce5b43bda9985eb72467ad292744aaeb9e8d210dd6c86c4eb1a090 +size 67959 diff --git a/examples/screenshots/no-imgui-line_collection_colors.png b/examples/screenshots/no-imgui-line_collection_colors.png new file mode 100644 index 000000000..567bb4d06 --- /dev/null +++ b/examples/screenshots/no-imgui-line_collection_colors.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15216a0900bcaef492e5d9e3380db9f28d7b7e4bd11b26eb87ce956666dcd2b1 +size 58414 diff --git a/examples/screenshots/no-imgui-line_collection_slicing.png b/examples/screenshots/no-imgui-line_collection_slicing.png new file mode 100644 index 000000000..c9bc6d931 --- /dev/null +++ b/examples/screenshots/no-imgui-line_collection_slicing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d3d7813580be188766c2d0200bcbff28122758d36d0faa846b0bb4dceac654 +size 130453 diff --git a/examples/screenshots/no-imgui-line_colorslice.png b/examples/screenshots/no-imgui-line_colorslice.png new file mode 100644 index 000000000..fe54de5d6 --- /dev/null +++ b/examples/screenshots/no-imgui-line_colorslice.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be429bf910979cf4c9483b8ae1f7aa877fde64fb6ec8a4cf32be143f282c9103 +size 57353 diff --git a/examples/screenshots/no-imgui-line_dataslice.png b/examples/screenshots/no-imgui-line_dataslice.png new file mode 100644 index 000000000..649a9df59 --- /dev/null +++ b/examples/screenshots/no-imgui-line_dataslice.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf873f1479cec065f0062ce58ce78ddfbd5673654aacf0ecdbd559747ae741cb +size 69381 diff --git a/examples/screenshots/no-imgui-line_stack.png b/examples/screenshots/no-imgui-line_stack.png new file mode 100644 index 000000000..3ef24e73a --- /dev/null +++ b/examples/screenshots/no-imgui-line_stack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b9d02719e7051c2a0e848cc828f21be52ac108c6f9be16795d1150a1e215371 +size 123674 diff --git a/examples/screenshots/no-imgui-linear_region_selectors_match_offsets.png b/examples/screenshots/no-imgui-linear_region_selectors_match_offsets.png new file mode 100644 index 000000000..d82efa849 --- /dev/null +++ b/examples/screenshots/no-imgui-linear_region_selectors_match_offsets.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b22ee4506bc532344cfcbd5daa0c4e90d9a831d59f1d916bd28534786947771 +size 97036 diff --git a/examples/screenshots/no-imgui-linear_selector.png b/examples/screenshots/no-imgui-linear_selector.png new file mode 100644 index 000000000..4416cb4d5 --- /dev/null +++ b/examples/screenshots/no-imgui-linear_selector.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f1a323dec6d50d1c701632aadbd17d87ee3b3b42171046ca9b1284f93576a3b +size 131922 diff --git a/examples/screenshots/no-imgui-rect_frac_layout.png b/examples/screenshots/no-imgui-rect_frac_layout.png new file mode 100644 index 000000000..4dc3b2aa6 --- /dev/null +++ b/examples/screenshots/no-imgui-rect_frac_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5923e8b9f687f97d488b282b35f16234898ed1038b0737b7b57fb9cbd72ebf34 +size 157321 diff --git a/examples/screenshots/no-imgui-rect_layout.png b/examples/screenshots/no-imgui-rect_layout.png new file mode 100644 index 000000000..16d1ff446 --- /dev/null +++ b/examples/screenshots/no-imgui-rect_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2ffe0a8d625322cc22d2abdde80a3f179f01552dde974bbbd49f9e371ab39aa +size 138936 diff --git a/examples/screenshots/no-imgui-scatter_cmap_iris.png b/examples/screenshots/no-imgui-scatter_cmap_iris.png new file mode 100644 index 000000000..0d1f8dbb0 --- /dev/null +++ b/examples/screenshots/no-imgui-scatter_cmap_iris.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e197c84911cf7711d09653d6c54d7a756fbe4fe80daa84f0cf1a1d516217423 +size 60341 diff --git a/examples/screenshots/no-imgui-scatter_colorslice_iris.png b/examples/screenshots/no-imgui-scatter_colorslice_iris.png new file mode 100644 index 000000000..84447c70f --- /dev/null +++ b/examples/screenshots/no-imgui-scatter_colorslice_iris.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:780b680de7d3a22d2cb73a6829cad1e1066163e084b8daa9e8362f2543ba62eb +size 36881 diff --git a/examples/screenshots/no-imgui-scatter_dataslice_iris.png b/examples/screenshots/no-imgui-scatter_dataslice_iris.png new file mode 100644 index 000000000..a19d66270 --- /dev/null +++ b/examples/screenshots/no-imgui-scatter_dataslice_iris.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b4f6635f48e047944c923ac46a9bd5b77e736f26421978ff74cd37a9677c622 +size 39457 diff --git a/examples/screenshots/no-imgui-scatter_iris.png b/examples/screenshots/no-imgui-scatter_iris.png new file mode 100644 index 000000000..631672504 --- /dev/null +++ b/examples/screenshots/no-imgui-scatter_iris.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80cc8c1ed5276b0b8cbd5aeb3151182a73984829f889195b57442a58c3124a43 +size 38488 diff --git a/examples/screenshots/no-imgui-scatter_size.png b/examples/screenshots/no-imgui-scatter_size.png new file mode 100644 index 000000000..241e38ad5 --- /dev/null +++ b/examples/screenshots/no-imgui-scatter_size.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71f3db93ea28e773c708093319985fb0fe04fae9a8a78d4f4f764f0417979b72 +size 68596 diff --git a/examples/screenshots/rect_frac_layout.png b/examples/screenshots/rect_frac_layout.png new file mode 100644 index 000000000..7fe6d3d37 --- /dev/null +++ b/examples/screenshots/rect_frac_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5991b755432318310cfc2b4826bd9639cc234883aa06f1895817f710714cb58f +size 156297 diff --git a/examples/screenshots/rect_layout.png b/examples/screenshots/rect_layout.png new file mode 100644 index 000000000..dec391ac2 --- /dev/null +++ b/examples/screenshots/rect_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cf23f845932023789e0823a105910e9f701d0f03c04e3c18488f0da62420921 +size 123409 diff --git a/examples/screenshots/scatter_cmap_iris.png b/examples/screenshots/scatter_cmap_iris.png new file mode 100644 index 000000000..c069d6b11 --- /dev/null +++ b/examples/screenshots/scatter_cmap_iris.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fad40cf8004e31f7d30f4bb552ee1c7f79a499d3bad310c0eac83396f0aabd62 +size 61193 diff --git a/examples/screenshots/scatter_colorslice_iris.png b/examples/screenshots/scatter_colorslice_iris.png new file mode 100644 index 000000000..58c2b61fe --- /dev/null +++ b/examples/screenshots/scatter_colorslice_iris.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:427587ef9a73bf9c3ea6e739b61d5af7380a5488c454a9d3653019b40d569292 +size 37589 diff --git a/examples/screenshots/scatter_dataslice_iris.png b/examples/screenshots/scatter_dataslice_iris.png new file mode 100644 index 000000000..ab61f0405 --- /dev/null +++ b/examples/screenshots/scatter_dataslice_iris.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3dd9ad854f41386d353ca0dae689a263eff942817727e328690427e2e62e2f3 +size 40112 diff --git a/examples/screenshots/scatter_iris.png b/examples/screenshots/scatter_iris.png new file mode 100644 index 000000000..01bd5cacd --- /dev/null +++ b/examples/screenshots/scatter_iris.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7978b93f7eac8176c54ed0e39178424d9cb6474c73e9013d5164d3e88d54c95 +size 39147 diff --git a/examples/screenshots/scatter_size.png b/examples/screenshots/scatter_size.png new file mode 100644 index 000000000..2f6c045f3 --- /dev/null +++ b/examples/screenshots/scatter_size.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb05b8378d94e16094738850dca6328caf7477c641bf474b9deae426344bc7a4 +size 70898 diff --git a/examples/selection_tools/README.rst b/examples/selection_tools/README.rst new file mode 100644 index 000000000..e0376d728 --- /dev/null +++ b/examples/selection_tools/README.rst @@ -0,0 +1,2 @@ +Selection Tools +=============== diff --git a/examples/selection_tools/fft.py b/examples/selection_tools/fft.py new file mode 100644 index 000000000..46ab8f89f --- /dev/null +++ b/examples/selection_tools/fft.py @@ -0,0 +1,101 @@ +""" +Explore fourier transform of images +=================================== +Example showing how to use a `RectangleSelector` to interactively reconstruct +an image using portions of it fourier transform +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl +import imageio.v3 as iio + +image = iio.imread("imageio:camera.png") + +# compute discrete fourier transform of image +img_fft = np.fft.fftshift(np.fft.fft2(image)) + +# image to just visualize absolute magnitudes +log_abs_img_fft = np.log(np.abs(img_fft + 1)) + +# placeholders for displaying fft and inverse fft of selections +zeros = np.zeros(image.shape) + +# create an ImageWidget to display all the images +iw = fpl.ImageWidget( + data=[image, log_abs_img_fft, zeros, zeros, zeros, zeros], + names=["image", "DFT", "selected", "FFT of selected", "not-selected", "IFFT of not-selected"], + figure_shape=(3, 2), # so we can see image and fft side by side + figure_kwargs={"size": (700, 1024)}, + histogram_widget=False, +) + +# we don't need the toolbars here, unclutter the figure +for subplot in iw.figure: + subplot.toolbar = False + +# viridis cmap for the fft images +iw.cmap = "viridis" + +# gray for the non-fft images +iw.managed_graphics[0].cmap = "gray" +iw.managed_graphics[3].cmap = "gray" +iw.managed_graphics[-1].cmap = "gray" + +# set contrast limits based on the full DFT for the DFT-selection images +iw.figure["selected"].graphics[0].vmin, iw.figure["selected"].graphics[0].vmax = log_abs_img_fft.min(), log_abs_img_fft.max() +iw.figure["not-selected"].graphics[0].vmin, iw.figure["not-selected"].graphics[0].vmax = log_abs_img_fft.min(), log_abs_img_fft.max() + +iw.show() + +# create a rectangle selector +rs = iw.managed_graphics[1].add_rectangle_selector(edge_color="w", edge_thickness=2.0) + + +@rs.add_event_handler("selection") +def update_images(ev): + """ + Updates the images when the selection changes + """ + + # get the bbox of the selection + row_ixs, col_ixs = ev.get_selected_indices() + row_slice = slice(row_ixs[0], row_ixs[-1] + 1) + col_slice = slice(col_ixs[0], col_ixs[-1] + 1) + + # fft of the selection + selected_fft = np.zeros(image.shape, dtype=np.complex64) + selected_fft[row_slice, col_slice] = img_fft[row_slice, col_slice] + + # update image graphic with the current fft selection + iw.managed_graphics[2].data = np.log(np.abs(selected_fft + 1)) + + # inverse fft to reconstruct image using only the selection + iw.managed_graphics[3].data = np.fft.ifft2(np.fft.fftshift(selected_fft)) + iw.managed_graphics[3].reset_vmin_vmax() + + # fft of the region outside the selection + unselected_fft = img_fft.copy() + unselected_fft[row_slice, col_slice] = 0 + + # update image graphic with unselected fft area + iw.managed_graphics[4].data = np.log(np.abs(unselected_fft + 1)) + + # inverse fft to reconstruct image using only the unselected part of the fft + iw.managed_graphics[5].data = np.fft.ifft2(np.fft.fftshift(unselected_fft)) + iw.managed_graphics[5].reset_vmin_vmax() + + +# set initial selection to the center +rs.selection = (225, 285, 225, 285) + + +figure = iw.figure + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/selection_tools/linear_region_line_collection.py b/examples/selection_tools/linear_region_line_collection.py new file mode 100644 index 000000000..05084df0f --- /dev/null +++ b/examples/selection_tools/linear_region_line_collection.py @@ -0,0 +1,84 @@ +""" +LinearRegionSelectors with LineCollection +========================================= + +Example showing how to use a `LinearRegionSelector` with a `LineCollection` +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + + +import fastplotlib as fpl +import numpy as np + +# data to plot +xs = np.linspace(0, 10 * np.pi, 1_000) +sine = np.column_stack([xs, np.sin(xs)]) +cosine = np.column_stack([xs, np.cos(xs)]) + +figure = fpl.Figure((5, 1), size=(700, 1000)) + +# preallocated size for zoomed data +zoomed_prealloc = 1_000 + +# sines and cosines +data = [sine, cosine, sine, cosine] + +# make line stack +line_stack = figure[0, 0].add_line_stack(data, separation=2) + +# make selector +selector = line_stack.add_linear_region_selector() + +# preallocate array for storing zoomed in data +zoomed_init = np.column_stack([np.arange(zoomed_prealloc), np.zeros(zoomed_prealloc)]) + +# populate zoomed view subplots with graphics using preallocated buffer sizes +for i, subplot in enumerate(figure): + if i == 0: + # skip the first one + continue + # make line graphics for displaying zoomed data + subplot.add_line(zoomed_init, name="zoomed") + + +def interpolate(subdata: np.ndarray, axis: int): + """1D interpolation to display within the preallocated data array""" + x = np.arange(0, zoomed_prealloc) + xp = np.linspace(0, zoomed_prealloc, subdata.shape[0]) + + # interpolate to preallocated size + return np.interp(x, xp, fp=subdata[:, axis]) # use the y-values + + +@selector.add_event_handler("selection") +def update_zoomed_subplots(ev): + """update the zoomed subplots""" + zoomed_data = ev.get_selected_data() + + for i in range(len(zoomed_data)): + # interpolate y-vals + if zoomed_data[i].size == 0: + figure[i + 1, 0]["zoomed"].data[:, 1] = 0 + else: + data = interpolate(zoomed_data[i], axis=1) + figure[i + 1, 0]["zoomed"].data[:, 1] = data + figure[i + 1, 0].auto_scale() + + +# set initial selection so zoomed plots update +selector.selection = (0, 4 * np.pi) + +# hide toolbars to reduce clutter +for subplot in figure: + subplot.toolbar = False + +figure.show(maintain_aspect=False) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/selection_tools/linear_region_selector.py b/examples/selection_tools/linear_region_selector.py new file mode 100644 index 000000000..5c6d6e01b --- /dev/null +++ b/examples/selection_tools/linear_region_selector.py @@ -0,0 +1,114 @@ +""" +LinearRegionSelectors +===================== + +Example showing how to use a `LinearRegionSelector` with lines. We demonstrate two use cases, a horizontal +LinearRegionSelector which selects along the x-axis and a vertical selector which moves along the y-axis. + +In general, a horizontal selector on the x-axis is useful if you are displaying data where y = f(x). +Conversely, a vertical selector that selectors along the y-axis is useful for +displaying data where x = f(y). (ex: vertical histograms) +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np + +# names for out subplots +names = [ + ["y = sine(x)", "x = sine(y), sine(y) > 0 = 0"], + ["zoomed sine(x)", "zoomed sine(y)"] +] + +# 2 rows, 2 columns +figure = fpl.Figure( + (2, 2), + size=(700, 560), + names=names, +) + +# preallocated number of datapoints for zoomed data +zoomed_prealloc = 5_000 + +# data to plot +xs = np.linspace(0, 200 * np.pi, 10_000) +ys = np.sin(xs) + np.random.normal(scale=0.2, size=10000) + +# make sine along x axis +sine_graphic_x = figure[0, 0].add_line(np.column_stack([xs, ys]), thickness=1) + +# x = sine(y), sine(y) > 0 = 0 +sine_y = ys +sine_y[sine_y > 0] = 0 + +# sine along y axis +sine_graphic_y = figure[0, 1].add_line(np.column_stack([ys, xs])) + +# offset the position of the graphic to demonstrate `get_selected_data()` later +sine_graphic_y.position_x = 50 +sine_graphic_y.position_y = 50 + +# add linear selectors +selector_x = sine_graphic_x.add_linear_region_selector((0, 100)) # default axis is "x" +selector_y = sine_graphic_y.add_linear_region_selector(axis="y") + +# preallocate array for storing zoomed in data +zoomed_init = np.column_stack([np.arange(zoomed_prealloc), np.zeros(zoomed_prealloc)]) + +# make line graphics for displaying zoomed data +zoomed_x = figure[1, 0].add_line(zoomed_init) +zoomed_y = figure[1, 1].add_line(zoomed_init) + + +def interpolate(subdata: np.ndarray, axis: int): + """1D interpolation to display within the preallocated data array""" + x = np.arange(0, zoomed_prealloc) + xp = np.linspace(0, zoomed_prealloc, subdata.shape[0]) + + # interpolate to preallocated size + return np.interp(x, xp, fp=subdata[:, axis]) # use the y-values + + +@selector_x.add_event_handler("selection") +def set_zoom_x(ev): + """sets zoomed x selector data""" + # get the selected data + selected_data = ev.get_selected_data() + if selected_data.size == 0: + # no data selected + zoomed_x.data[:, 1] = 0 + else: + # interpolate the y-values since y = f(x) + zoomed_x.data[:, 1] = interpolate(selected_data, axis=1) + figure[1, 0].auto_scale() + + +def set_zoom_y(ev): + """sets zoomed x selector data""" + # get the selected data + selected_data = ev.get_selected_data() + if selected_data.size == 0: + # no data selected + zoomed_y.data[:, 1] = 0 + else: + # interpolate the x values since this x = f(y) + zoomed_y.data[:, 1] = -interpolate(selected_data, axis=0) + figure[1, 1].auto_scale() + + +# you can also add event handlers without a decorator +selector_y.add_event_handler(set_zoom_y, "selection") + +# set initial selection +selector_x.selection = (0, 150) +selector_y.selection = (0, 150) + +figure.show(maintain_aspect=False) + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/selection_tools/linear_region_selectors_match_offsets.py b/examples/selection_tools/linear_region_selectors_match_offsets.py new file mode 100644 index 000000000..7ac9cc486 --- /dev/null +++ b/examples/selection_tools/linear_region_selectors_match_offsets.py @@ -0,0 +1,109 @@ +""" +LinearRegionSelectors match offsets +=================================== + +Identical to linear region selector but with offsets for testing purposes +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'hidden' + +import fastplotlib as fpl +import numpy as np + +# names for out subplots +names = [ + ["y = sine(x)", "x = sine(y), sine(y) > 0 = 0"], + ["zoomed sine(x)", "zoomed sine(y)"] +] + +# 2 rows, 2 columns +figure = fpl.Figure( + (2, 2), + size=(700, 560), + names=names, +) + +# preallocated size for zoomed data +zoomed_prealloc = 1_000 + +# data to plot +xs = np.linspace(0, 10 * np.pi, 1_000) +ys = np.sin(xs) # y = sine(x) + +# make sine along x axis +sine_graphic_x = figure[0, 0].add_line(np.column_stack([xs, ys]), offset=(10, 10, 0)) + +# x = sine(y), sine(y) > 0 = 0 +sine_y = ys +sine_y[sine_y > 0] = 0 + +# sine along y axis +sine_graphic_y = figure[0, 1].add_line(np.column_stack([ys, xs]), offset=(10, 10, 0)) + +# offset the position of the graphic to demonstrate `get_selected_data()` later +sine_graphic_y.position_x = 50 +sine_graphic_y.position_y = 50 + +# add linear selectors +selector_x = sine_graphic_x.add_linear_region_selector() # default axis is "x" +selector_y = sine_graphic_y.add_linear_region_selector(axis="y") + +# preallocate array for storing zoomed in data +zoomed_init = np.column_stack([np.arange(zoomed_prealloc), np.zeros(zoomed_prealloc)]) + +# make line graphics for displaying zoomed data +zoomed_x = figure[1, 0].add_line(zoomed_init) +zoomed_y = figure[1, 1].add_line(zoomed_init) + + +def interpolate(subdata: np.ndarray, axis: int): + """1D interpolation to display within the preallocated data array""" + x = np.arange(0, zoomed_prealloc) + xp = np.linspace(0, zoomed_prealloc, subdata.shape[0]) + + # interpolate to preallocated size + return np.interp(x, xp, fp=subdata[:, axis]) # use the y-values + + +@selector_x.add_event_handler("selection") +def set_zoom_x(ev): + """sets zoomed x selector data""" + # get the selected data + selected_data = ev.get_selected_data() + if selected_data.size == 0: + # no data selected + zoomed_x.data[:, 1] = 0 + else: + # interpolate the y-values since y = f(x) + zoomed_x.data[:, 1] = interpolate(selected_data, axis=1) + figure[1, 0].auto_scale() + + +def set_zoom_y(ev): + """sets zoomed x selector data""" + # get the selected data + selected_data = ev.get_selected_data() + if selected_data.size == 0: + # no data selected + zoomed_y.data[:, 1] = 0 + else: + # interpolate the x values since this x = f(y) + zoomed_y.data[:, 1] = -interpolate(selected_data, axis=0) + figure[1, 1].auto_scale() + + +# you can also add event handlers without a decorator +selector_y.add_event_handler(set_zoom_y, "selection") + +# set initial selection +selector_x.selection = selector_y.selection = (0, 4 * np.pi) + + +figure.show(maintain_aspect=False) + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/selection_tools/linear_selector.py b/examples/selection_tools/linear_selector.py new file mode 100644 index 000000000..65fd8f1b1 --- /dev/null +++ b/examples/selection_tools/linear_selector.py @@ -0,0 +1,122 @@ +""" +Linear Selectors +================ + +Example showing how to use a `LinearSelector` with lines and line collections. +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +import numpy as np + + +# create some data +xs = np.linspace(0, 10 * np.pi, 100) +sine = np.column_stack([xs, np.sin(xs)]) +cosine = np.column_stack([xs, np.cos(xs)]) + +# a varying sine-cosine quilted pattern +image_xs, image_ys = np.meshgrid(xs, xs) +multiplier = np.linspace(0, 10, 100) +image_data = multiplier * np.sin(image_xs) + multiplier * np.cos(image_ys) + +# create a figure +figure = fpl.Figure( + shape=(1, 2), + size=(700, 560) +) + +# line of a single sine wave from 0 - 10Ļ€ +line = figure[0, 0].add_line(sine, cmap="jet") + +# add a linear selector to the line +line_selector = line.add_linear_selector() + +line_selector_text = (f"x value: {line_selector.selection / np.pi:.2f}Ļ€\n" + f"y value: {line.data[0, 1]:.2f}\n" + f"index: {line_selector.get_selected_index()}") + +# a label that will change to display line data based on the linear selector +line_selection_label = figure[0, 0].add_text( + line_selector_text, + offset=(0., 1.75, 0.), + anchor="middle-left", + font_size=32, + face_color=line.colors[0], + outline_color="w", + outline_thickness=0.1, +) + + +# add an event handler using a decorator, selectors are just like other graphics +# you can also use the .add_event_handler() method directly instead of a decorator +# see the line collection example below for a non-decorator example +@line_selector.add_event_handler("selection") +def line_selector_changed(ev): + selection = ev.info["value"] + index = ev.get_selected_index() + + # set text to display selection data + line_selection_label.text = \ + (f"x value: {selection / np.pi:.2f}Ļ€\n" + f"y value: {line.data[index, 1]:.2f}\n" + f"index: {index}") + + # set text color based on line color at selection index + line_selection_label.face_color = line.colors[index] + + +# line stack, sine and cosine wave +line_stack = figure[0, 1].add_line_stack([sine, cosine], colors=["magenta", "cyan"], separation=1) +line_stack_selector = line_stack.add_linear_selector() + +line_stack_selector_text = (f"x value: {line_stack_selector.selection / np.pi:.2f}Ļ€\n" + f"index: {line_selector.get_selected_index()}\n" + f"sine y value: {line_stack[0].data[0, 1]:.2f}\n" + f"cosine y value: {line_stack[1].data[0, 1]:.2f}\n") + +# a label that will change to display line_stack data based on the linear selector +line_stack_selector_label = figure[0, 1].add_text( + line_stack_selector_text, + offset=(0., 7.0, 0.), + anchor="middle-left", + font_size=24, + face_color="w", +) + + +def line_stack_selector_changed(ev): + selection = ev.info["value"] + + # a linear selectors one a line collection returns a + # list of selected indices for each graphic in the collection + index = ev.get_selected_index()[0] + + # set text to display selection data + line_stack_selector_label.text = \ + (f"x value: {selection / np.pi:.2f}Ļ€\n" + f"index: {index}\n" + f"sine y value: {line_stack[0].data[index, 1]:.2f}\n" + f"cosine y value: {line_stack[1].data[index, 1]:.2f}\n") + + +# add an event handler, you can also use a decorator +line_stack_selector.add_event_handler(line_stack_selector_changed, "selection") + +# some axes and camera zoom settings +for subplot in [figure[0, 0], figure[0, 1]]: + subplot.axes.grids.xy.visible = True + subplot.axes.auto_grid = False + subplot.axes.grids.xy.major_step = (np.pi, 1) + subplot.axes.grids.xy.minor_step = (0, 0) + + +figure.show(maintain_aspect=False) + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/selection_tools/linear_selector_image.py b/examples/selection_tools/linear_selector_image.py new file mode 100644 index 000000000..04844b568 --- /dev/null +++ b/examples/selection_tools/linear_selector_image.py @@ -0,0 +1,73 @@ +""" +Linear Selectors Image +====================== + +Example showing how to use a `LinearSelector` to selector rows or columns of an image. The subplot on the right +displays the data for the selector row and column. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import fastplotlib as fpl +from imageio import v3 as iio + +image_data = iio.imread("imageio:coins.png") + +figure = fpl.Figure( + (1, 3), + size=(700, 300), + names=[["image", "selected row data", "selected column data"]] +) + +# create an image +image = figure[0, 0].add_image(image_data) + +# add a row selector +image_row_selector = image.add_linear_selector(axis="y") + +# add column selector +image_col_selector = image.add_linear_selector() + +# make a line to indicate row data +line_image_row = figure[0, 1].add_line(image.data[0]) + +# make a line to indicate column data +line_image_col = figure[0, 2].add_line(image.data[:, 0]) + + +# callbacks to change the line data in subplot [0, 1] +# to display selected row and selected column data +def image_row_selector_changed(ev): + ix = ev.get_selected_index() + new_data = image.data[ix] + # set y values of line with the row data + line_image_row.data[:, 1] = new_data + + +def image_col_selector_changed(ev): + ix = ev.get_selected_index() + new_data = image.data[:, ix] + # set y values of line with the column data + line_image_col.data[:, 1] = new_data + + +# add event handlers, you can also use a decorator +image_row_selector.add_event_handler(image_row_selector_changed, "selection") +image_col_selector.add_event_handler(image_col_selector_changed, "selection") + +# programmatically set the selection or drag it with your mouse pointer +image_row_selector.selection = 200 +image_col_selector.selection = 180 + +figure.show() + +for subplot in figure: + subplot.camera.zoom = 0.5 + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/selection_tools/rectangle_selector.py b/examples/selection_tools/rectangle_selector.py new file mode 100644 index 000000000..d0fd33aa9 --- /dev/null +++ b/examples/selection_tools/rectangle_selector.py @@ -0,0 +1,66 @@ +""" +Rectangle Selectors +=================== + +Example showing how to use a `RectangleSelector` with line collections +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import fastplotlib as fpl +from itertools import product + +# create a figure +figure = fpl.Figure( + size=(700, 560) +) + + +# generate some data +def make_circle(center, radius: float, n_points: int = 75) -> np.ndarray: + theta = np.linspace(0, 2 * np.pi, n_points) + xs = radius * np.sin(theta) + ys = radius * np.cos(theta) + + return np.column_stack([xs, ys]) + center + + +spatial_dims = (50, 50) + +circles = list() +for center in product(range(0, spatial_dims[0], 9), range(0, spatial_dims[1], 9)): + circles.append(make_circle(center, 3, n_points=75)) + +pos_xy = np.vstack(circles) + +# add image +line_collection = figure[0, 0].add_line_collection(circles, cmap="jet", thickness=5) + +# add rectangle selector to image graphic +rectangle_selector = line_collection.add_rectangle_selector() + + +# add event handler to highlight selected indices +@rectangle_selector.add_event_handler("selection") +def color_indices(ev): + line_collection.cmap = "jet" + ixs = ev.get_selected_indices() + + # iterate through each of the selected indices, if the array size > 0 that mean it's under the selection + selected_line_ixs = [i for i in range(len(ixs)) if ixs[i].size > 0] + line_collection[selected_line_ixs].colors = "w" + + +# manually move selector to make a nice gallery image :D +rectangle_selector.selection = (15, 30, 15, 30) + + +figure.show() + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/selection_tools/rectangle_selector_zoom.py b/examples/selection_tools/rectangle_selector_zoom.py new file mode 100644 index 000000000..61e38ffc9 --- /dev/null +++ b/examples/selection_tools/rectangle_selector_zoom.py @@ -0,0 +1,53 @@ +""" +Rectangle Selectors Images +========================== + +Example showing how to use a `RectangleSelector` with images +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + +import imageio.v3 as iio +import fastplotlib as fpl + +# create a figure +figure = fpl.Figure( + shape=(2, 1), + size=(700, 560) +) + +# add image +image_graphic = figure[0, 0].add_image(data=iio.imread("imageio:camera.png")) + +# add rectangle selector to image graphic +rectangle_selector = image_graphic.add_rectangle_selector() + +# add a zoomed plot of the selected data +zoom_ig = figure[1, 0].add_image(rectangle_selector.get_selected_data()) + + +# add event handler to update the data of the zoomed image as the selection changes +@rectangle_selector.add_event_handler("selection") +def update_data(ev): + # get the new data + new_data = ev.get_selected_data() + + # remove the old zoomed image graphic + global zoom_ig + + figure[1, 0].remove_graphic(zoom_ig) + + # add new zoomed image of new data + zoom_ig = figure[1, 0].add_image(data=new_data) + + # autoscale the plot + figure[1, 0].auto_scale() + +figure.show() + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/selection_tools/unit_circle.py b/examples/selection_tools/unit_circle.py new file mode 100644 index 000000000..b068d1bc7 --- /dev/null +++ b/examples/selection_tools/unit_circle.py @@ -0,0 +1,142 @@ +""" +Unit circle +=========== + +Example with linear selectors on a sine and cosine function that demonstrates the unit circle. + +This shows how fastplotlib supports bidirectional events, drag the linear selector on the sine +or cosine function and they will both move together. + +Click on the sine or cosine function to set the colormap transform to illustrate the sine or +cosine function output values on the unit circle. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'screenshot' + + +import numpy as np +import fastplotlib as fpl + + +# helper function to make a cirlce +def make_circle(center, radius: float, n_points: int) -> np.ndarray: + theta = np.linspace(0, 2 * np.pi, n_points) + xs = radius * np.cos(theta) + ys = radius * np.sin(theta) + + return np.column_stack([xs, ys]) + center + + +# We will have 3 subplots in a layout like this: +""" +|========|========| +| | | +| | sine | +| | | +| circle |========| +| | | +| | cosine | +| | | +|========|========| +""" + +# we can define this layout using "extents", i.e. min and max ranges on the canvas +# (x_min, x_max, y_min, y_max) +# extents can be defined as fractions as shown here +extents = [ + (0, 0.5, 0, 1), # circle subplot + (0.5, 1, 0, 0.5), # sine subplot + (0.5, 1, 0.5, 1), # cosine subplot +] + +# create a figure with 3 subplots +figure = fpl.Figure( + extents=extents, + names=["unit circle", "sin(x)", "cos(x)"], + size=(700, 560) +) + +# set the axes to intersect at (0, 0, 0) to better illustrate the unit circle +for subplot in figure: + subplot.axes.intersection = (0, 0, 0) + subplot.toolbar = False # reduce clutter + +figure["sin(x)"].camera.maintain_aspect = False +figure["cos(x)"].camera.maintain_aspect = False + +# create sine and cosine data +xs = np.linspace(0, 2 * np.pi, 360) +sine = np.sin(xs) +cosine = np.cos(xs) + +# circle data +circle_data = make_circle(center=(0, 0), radius=1, n_points=360) + +# make the circle line graphic, set the cmap transform using the sine function +circle_graphic = figure["unit circle"].add_line( + circle_data, thickness=4, cmap="bwr", cmap_transform=sine +) + +# line to show the circle radius +# use it to indicate the current position of the sine and cosine selctors (below) +radius_data = np.array([[0, 0, 0], [*circle_data[0], 0]]) +circle_radius = figure["unit circle"].add_line( + radius_data, thickness=6, colors="magenta" +) + +# sine line graphic, cmap transform set from the sine function +sine_graphic = figure["sin(x)"].add_line( + sine, thickness=10, cmap="bwr", cmap_transform=sine +) + +# cosine line graphic, cmap transform set from the sine function +# illustrates the sine function values on the cosine graphic +cosine_graphic = figure["cos(x)"].add_line( + cosine, thickness=10, cmap="bwr", cmap_transform=sine +) + +# add linear selectors to the sine and cosine line graphics +sine_selector = sine_graphic.add_linear_selector() +cosine_selector = cosine_graphic.add_linear_selector() + + +def set_circle_cmap(ev): + # sets the cmap transforms + + cmap_transform = ev.graphic.data[:, 1] # y-val data of the sine or cosine graphic + for g in [sine_graphic, cosine_graphic]: + g.cmap.transform = cmap_transform + + # set circle cmap transform + circle_graphic.cmap.transform = cmap_transform + +# when the sine or cosine graphic is clicked, the cmap_transform +# of the sine, cosine and circle line graphics are all set from +# the y-values of the clicked line +sine_graphic.add_event_handler(set_circle_cmap, "click") +cosine_graphic.add_event_handler(set_circle_cmap, "click") + + +def set_x_val(ev): + # used to sync the two selectors + value = ev.info["value"] + index = ev.get_selected_index() + + sine_selector.selection = value + cosine_selector.selection = value + + circle_radius.data[1, :-1] = circle_data[index] + +# add same event handler to both graphics +sine_selector.add_event_handler(set_x_val, "selection") +cosine_selector.add_event_handler(set_x_val, "selection") + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/tests/test_examples.py b/examples/tests/test_examples.py index 876533fa6..7fbd32e2f 100644 --- a/examples/tests/test_examples.py +++ b/examples/tests/test_examples.py @@ -1,12 +1,19 @@ """ Test that examples run without error. """ + +import sys import importlib import runpy import pytest import os import numpy as np import imageio.v3 as iio +import pygfx +import fastplotlib as fpl + +MAX_TEXTURE_SIZE = 2048 +pygfx.renderers.wgpu.set_wgpu_limits(**{"max-texture-dimension-2d": MAX_TEXTURE_SIZE}) from .testutils import ( ROOT, @@ -15,7 +22,11 @@ find_examples, wgpu_backend, is_lavapipe, - diffs_dir + diffs_dir, + generate_diff, + image_similarity, + normalize_image, + prep_for_write, ) # run all tests unless they opt-out @@ -25,9 +36,21 @@ examples_to_test = find_examples(query="# test_example = true") +def check_skip_imgui(module): + # skip any imgui or ImageWidget tests + with open(module, "r") as f: + contents = f.read() + if "ImageWidget" in contents: + pytest.skip("skipping ImageWidget tests since they require imgui") + elif "imgui" in contents or "imgui_bundle" in contents: + pytest.skip("skipping tests that require imgui") + + @pytest.mark.parametrize("module", examples_to_run, ids=lambda x: x.stem) def test_examples_run(module, force_offscreen): """Run every example marked to see if they run without error.""" + if not fpl.IMGUI: + check_skip_imgui(module) runpy.run_path(module, run_name="__main__") @@ -35,11 +58,11 @@ def test_examples_run(module, force_offscreen): @pytest.fixture def force_offscreen(): """Force the offscreen canvas to be selected by the auto gui module.""" - os.environ["WGPU_FORCE_OFFSCREEN"] = "true" + os.environ["RENDERCANVAS_FORCE_OFFSCREEN"] = "true" try: yield finally: - del os.environ["WGPU_FORCE_OFFSCREEN"] + del os.environ["RENDERCANVAS_FORCE_OFFSCREEN"] def test_that_we_are_on_lavapipe(): @@ -48,17 +71,52 @@ def test_that_we_are_on_lavapipe(): assert is_lavapipe +def import_from_path(module_name, filename): + spec = importlib.util.spec_from_file_location(module_name, filename) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + + # With this approach the module is not added to sys.modules, which + # is great, because that way the gc can simply clean up when we lose + # the reference to the module + assert module.__name__ == module_name + assert module_name not in sys.modules + + return module + + @pytest.mark.parametrize("module", examples_to_test, ids=lambda x: x.stem) def test_example_screenshots(module, force_offscreen): """Make sure that every example marked outputs the expected.""" - # (relative) module name from project root - module_name = module.relative_to(ROOT/"examples").with_suffix("").as_posix().replace("/", ".") + + if not fpl.IMGUI: + # skip any imgui or ImageWidget tests + check_skip_imgui(module) # import the example module - example = importlib.import_module(module_name) + example = import_from_path(module.stem, module) + + if fpl.IMGUI: + # there doesn't seem to be a resize event for the manual offscreen canvas + example.figure.imgui_renderer._backend.io.display_size = example.figure.canvas.get_logical_size() + # run this once so any edge widgets set their sizes and therefore the subplots get the correct rect + # hacky but it works for now + example.figure.imgui_renderer.render() + + example.figure._fpl_reset_layout() + # render each subplot + for subplot in example.figure: + subplot.viewport.render(subplot.scene, subplot.camera) + + # flush pygfx renderer + example.figure.renderer.flush() + + if fpl.IMGUI: + # render imgui + example.figure.imgui_renderer.render() # render a frame - img = np.asarray(example.plot.renderer.target.draw()) + img = np.asarray(example.figure.renderer.target.draw()) # check if _something_ was rendered assert img is not None and img.size > 0 @@ -67,22 +125,43 @@ def test_example_screenshots(module, force_offscreen): if not os.path.exists(screenshots_dir): os.mkdir(screenshots_dir) - screenshot_path = screenshots_dir / f"{module.stem}.png" + # test screenshots for both imgui and non-gui installs + if not fpl.IMGUI: + prefix = "no-imgui-" + else: + prefix = "" + + screenshot_path = screenshots_dir / f"{prefix}{module.stem}.png" + + black = np.zeros(img.shape).astype(np.uint8) + black[:, :, -1] = 255 + + img_alpha = img[..., -1] / 255 + + rgb = img[..., :-1] * img_alpha[..., None] + black[..., :-1] * np.ones( + img_alpha.shape + )[..., None] * (1 - img_alpha[..., None]) + + rgb = rgb.round().astype(np.uint8) if "REGENERATE_SCREENSHOTS" in os.environ.keys(): if os.environ["REGENERATE_SCREENSHOTS"] == "1": - iio.imwrite(screenshot_path, img) - #np.save(screenshot_path, img) + iio.imwrite(screenshot_path, rgb) assert ( screenshot_path.exists() ), "found # test_example = true but no reference screenshot available" - #stored_img = np.load(screenshot_path) - stored_img = iio.imread(screenshot_path) - is_similar = np.allclose(img, stored_img, atol=1) - update_diffs(module.stem, is_similar, img, stored_img) - assert is_similar, ( - f"rendered image for example {module.stem} changed, see " + + ref_img = iio.imread(screenshot_path) + + rgb = normalize_image(rgb) + ref_img = normalize_image(ref_img) + + similar, rmse = image_similarity(rgb, ref_img, threshold=0.05) + + update_diffs(module.stem, similar, rgb, ref_img) + assert similar, ( + f"diff {rmse} above threshold for {module.stem}, see " f"the {diffs_dir.relative_to(ROOT).as_posix()} folder" " for visual diffs (you can download this folder from" " CI build artifacts as well)" @@ -110,7 +189,6 @@ def get_diffs_rgba(slicer): # split into an rgb and an alpha diff diffs = { diffs_dir / f"diff-{module}-rgb.png": slice(0, 3), - diffs_dir / f"diff-{module}-alpha.png": 3, } for path, slicer in diffs.items(): diff --git a/examples/tests/testutils.py b/examples/tests/testutils.py index 5f6772fb7..4c23b3481 100644 --- a/examples/tests/testutils.py +++ b/examples/tests/testutils.py @@ -7,20 +7,28 @@ import sys from itertools import chain +import numpy as np + ROOT = Path(__file__).parents[2] # repo root -examples_dir = ROOT / "examples" / "desktop" +examples_dir = ROOT / "examples" screenshots_dir = examples_dir / "screenshots" diffs_dir = examples_dir / "diffs" # examples live in themed sub-folders example_globs = [ "image/*.py", + "image_widget/*.py", "heatmap/*.py", "scatter/*.py", "line/*.py", "line_collection/*.py", - "gridplot/*.py" + "gridplot/*.py", + "window_layouts/*.py", + "events/*.py", + "selection_tools/*.py", + "misc/*.py", + "guis/*.py", ] @@ -28,7 +36,7 @@ def get_wgpu_backend(): """ Query the configured wgpu backend driver. """ - code = "import wgpu.utils; info = wgpu.utils.get_default_device().adapter.request_adapter_info(); print(info['adapter_type'], info['backend_type'])" + code = "import wgpu.utils; info = wgpu.utils.get_default_device().adapter.info; print(info['adapter_type'], info['backend_type'])" result = subprocess.run( [ sys.executable, @@ -65,3 +73,189 @@ def find_examples(query=None, negative_query=None, return_stems=False): result = [r.stem for r in result] return result + +# image comparison functions from: https://github.com/pygfx/image-comparison +def image_similarity(src, target, threshold=0.2): + """Compute normalized RMSE 0..1 and decide if similar based on threshold. + + For every pixel, the euclidian distance between RGB values is computed, + and normalized by the maximum possible distance (between black and white). + The RMSE is then computed from those errors. + + The normalized RMSE is used to compute the + similarity metric, so larger errors (euclidian distance + between two RGB colors) will have a disproportionately + larger effect on the score than smaller errors. + + In other words, lots of small errors will lead to a good score + (closer to 0) whereas a few large errors will lead to a bad score + (closer to 1). + """ + float_type = np.float64 + src = np.asarray(src, dtype=float_type) + target = np.asarray(target, dtype=float_type) + denom = np.sqrt(np.mean(src * src)) + mse = np.mean((src - target) ** 2) + rmse = np.sqrt(mse) / denom + + similar = bool(rmse < threshold) + return similar, rmse + + +def normalize_image(img): + """Discard the alpha channel and convert from 0..255 uint8 to 0..1 float.""" + assert len(img.shape) == 3 + + # normalize to 0..1 range + if img.dtype == "u1" or np.max(img) > 1: + img = img / 255 + assert np.min(img) >= 0 and np.max(img) <= 1 + + # discard alpha channel + # unsupported if it's not fully opaque + if img.shape[-1] == 4: + assert np.max(img[..., 3]) == 1 + img = img[..., :-1] + + return img + + +def prep_for_write(img): + """Convert 0..1 float back to 0..255 uint8.""" + assert len(img.shape) == 3 + assert np.min(img) >= 0 and np.max(img) <= 1 + if img.dtype != "u1": + img = np.round(img * 255).astype("u1") + return img + + +def rescale_arr(arr, min, max): + """ + histogram rescale utility function + e.g. if the values are 0.3..0.7 + they are rescaled to min..max + """ + return np.interp(arr, (arr.min(), arr.max()), (min, max)) + + +def rgb_to_hls(rgb): + """ + convert rgb to hls + assumes input ranges are 0..1 + returns values in range 0..1 + + vectorized version of colorsys.rgb_to_hls + """ + maxc = np.max(rgb, axis=-1) + minc = np.min(rgb, axis=-1) + hls = np.empty_like(rgb) + l = (minc + maxc) / 2.0 # noqa: E741 + + with np.errstate(invalid="ignore"): + mask = l <= 0.5 + idx = np.where(mask) + hls[(*idx, 2)] = (maxc[idx] - minc[idx]) / (maxc[idx] + minc[idx]) + + idx = np.where(~mask) + hls[(*idx, 2)] = (maxc[idx] - minc[idx]) / (2.0 - maxc[idx] - minc[idx]) + + maxc_minc = maxc - minc + rc = (maxc - rgb[..., 0]) / maxc_minc + gc = (maxc - rgb[..., 1]) / maxc_minc + bc = (maxc - rgb[..., 2]) / maxc_minc + + mask1 = rgb[..., 0] == maxc + idx = np.where(mask1) + hls[(*idx, 0)] = bc[idx] - gc[idx] + + mask2 = rgb[..., 1] == maxc + idx = np.where(~mask1 & mask2) + hls[(*idx, 0)] = 2.0 + rc[idx] - bc[idx] + + idx = np.where(~mask1 & ~mask2) + hls[(*idx, 0)] = 4.0 + gc[idx] - rc[idx] + + hls[..., 0] = (hls[..., 0] / 6.0) % 1.0 + + idx = np.where(minc == maxc) + hls[idx] = 0.0 + hls[..., 1] = l + + return hls + + +def hls_to_rgb(hls): + """ + convert hls to rgb + assumes input ranges are 0..1 + returns values in range 0..1 + + vectorized version of colorsys.hls_to_rgb + """ + rgb = np.empty_like(hls) + + m2 = np.empty_like(hls[..., 1]) + mask = hls[..., 1] <= 0.5 + idx = np.where(mask) + m2[idx] = hls[(*idx, 1)] * (1.0 + hls[(*idx, 2)]) + idx = np.where(~mask) + m2[idx] = hls[(*idx, 1)] + hls[(*idx, 2)] - (hls[(*idx, 1)] * hls[(*idx, 2)]) + m1 = 2.0 * hls[..., 1] - m2 + + h1 = (hls[..., 0] + 1 / 3) % 1.0 + h2 = hls[..., 0] % 1.0 + h3 = (hls[..., 0] - 1 / 3) % 1.0 + + for i, h in enumerate([h1, h2, h3]): + mask1 = h < 1 / 6 + idx = np.where(mask1) + rgb[(*idx, i)] = m1[idx] + (m2[idx] - m1[idx]) * h[idx] * 6.0 + + mask2 = h < 0.5 + idx = np.where(~mask1 & mask2) + rgb[(*idx, i)] = m2[idx] + + mask3 = h < 2 / 3 + idx = np.where(~mask1 & ~mask2 & mask3) + rgb[(*idx, i)] = m1[idx] + (m2[idx] - m1[idx]) * ((2 / 3) - h[idx]) * 6.0 + + idx = np.where(~mask1 & ~mask2 & ~mask3) + rgb[(*idx, i)] = m1[idx] + + return rgb + + +def generate_diff(src, target, fuzz=0.05): + """ + Generate an image that + highlights the differences between src and target image + any pixels with a euclidian color distance < fuzz will be ignored + fuzz is expressed as a percentage of the maximum possible distance + which is the distance between (0,0,0) and (1,1,1) = sqrt(3). + """ + # compute euclidian distance between pixels + # and normalize to 0..1 + max_dist = np.linalg.norm([1, 1, 1], axis=-1) + error = np.linalg.norm(np.abs(target - src), axis=-1) / max_dist + # apply fuzz + error_idx = np.where(error > fuzz) + + diff_img_hls = rgb_to_hls(target) + # lighten the whole image + diff_img_hls[..., 1] = rescale_arr(diff_img_hls[..., 1], 0.25, 1.0) + diff_img_hls[..., 1] **= 0.2 + # reduce the color saturation + diff_img_hls[..., 2] = rescale_arr(diff_img_hls[..., 2], 0.0, 0.75) + diff_img_hls[..., 2] **= 2 + + # make the diff pixels red + diff_img_hls[(*error_idx, 0)] = 0 + # give them the same lighting level + diff_img_hls[(*error_idx, 1)] = 0.5 + # saturate based on the error + diff_img_hls[(*error_idx, 2)] = 0.5 + error[error_idx] * 0.5 + + # convert back to rgb + diff_img = hls_to_rgb(diff_img_hls) + + return diff_img diff --git a/examples/text/README.rst b/examples/text/README.rst new file mode 100644 index 000000000..01466a39f --- /dev/null +++ b/examples/text/README.rst @@ -0,0 +1,2 @@ +Text Examples +============= diff --git a/examples/text/moving_label.py b/examples/text/moving_label.py new file mode 100644 index 000000000..7ba7d85df --- /dev/null +++ b/examples/text/moving_label.py @@ -0,0 +1,84 @@ +""" +Moving TextGraphic label +======================== + +A TextGraphic that labels a point on a line and another TextGraphic that moves along the line on every draw. +""" + +# test_example = false +# sphinx_gallery_pygfx_docs = 'animate 10s' + +import numpy as np +import fastplotlib as fpl + +# create a sinc wave +xs = np.linspace(-2 * np.pi, 2 * np.pi, 200) +ys = np.sinc(xs) + +data = np.column_stack([xs, ys]) + +# create a figure +figure = fpl.Figure(size=(700, 450)) + +# sinc wave +line = figure[0, 0].add_line(data, thickness=2) + +# position for the text label on the peak +pos = (0, max(ys), 0) + +# create label for the peak +text_peak = figure[0, 0].add_text( + f"peak ", + font_size=20, + anchor="bottom-right", + offset=pos +) + +# add a point on the peak +point_peak = figure[0, 0].add_scatter(np.asarray([pos]), sizes=10, colors="r") + +# create a text that will move along the line +text_moving = figure[0, 0].add_text( + f"({xs[0]:.2f}, {ys[0]:.2f}) ", + font_size=16, + outline_color="k", + outline_thickness=1, + anchor="top-center", + offset=(*data[0], 0) +) +# a point that will move on the line +point_moving = figure[0, 0].add_scatter(np.asarray([data[0]]), sizes=10, colors="magenta") + + +index = 0 +def update(): + # moves the text and point before every draw + global index + # get the new position + new_pos = (*data[index], 0) + + # move the text and point to the new position + text_moving.offset = new_pos + point_moving.data[0] = new_pos + + # set the text to the new position + text_moving.text = f"({new_pos[0]:.2f}, {new_pos[1]:.2f})" + + # increment index + index += 1 + if index == data.shape[0]: + index = 0 + + +# add update as an animation functions +figure.add_animations(update) + +figure[0, 0].axes.visible = False +figure.show(maintain_aspect=False) + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/window_layouts/README.rst b/examples/window_layouts/README.rst new file mode 100644 index 000000000..23684627b --- /dev/null +++ b/examples/window_layouts/README.rst @@ -0,0 +1,2 @@ +Window Layout Examples +====================== diff --git a/examples/window_layouts/extent_frac_layout.py b/examples/window_layouts/extent_frac_layout.py new file mode 100644 index 000000000..d90270c22 --- /dev/null +++ b/examples/window_layouts/extent_frac_layout.py @@ -0,0 +1,74 @@ +""" +Fractional Extent Layout +======================== + +Create subplots using extents given as fractions of the canvas. +This example plots two images and their histograms in separate subplots + +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import imageio.v3 as iio +import fastplotlib as fpl + +# load images +img1 = iio.imread("imageio:astronaut.png") +img2 = iio.imread("imageio:wikkie.png") + +# calculate histograms +hist_1, edges_1 = np.histogram(img1) +centers_1 = edges_1[:-1] + np.diff(edges_1) / 2 + +hist_2, edges_2 = np.histogram(img2) +centers_2 = edges_2[:-1] + np.diff(edges_2) / 2 + +# figure size in pixels +size = (700, 560) + +# extent is (xmin, xmax, ymin, ymax) +# here it is defined as fractions of the canvas +extents = [ + (0, 0.3, 0, 0.5), # for image1 + (0, 0.3, 0.5, 1), # for image2 + (0.3, 1, 0, 0.5), # for image1 histogram + (0.3, 1, 0.5, 1), # for image2 histogram +] + +# create a figure using the rects and size +# also give each subplot a name +figure = fpl.Figure( + extents=extents, + names=["astronaut image", "wikkie image", "astronaut histogram", "wikkie histogram"], + size=size +) + +# add image to the corresponding subplots +figure["astronaut image"].add_image(img1) +figure["wikkie image"].add_image(img2) + +# add histogram to the corresponding subplots +figure["astronaut histogram"].add_line(np.column_stack([centers_1, hist_1])) +figure["wikkie histogram"].add_line(np.column_stack([centers_2, hist_2])) + + +for subplot in figure: + if "image" in subplot.name: + # remove axes from image subplots to reduce clutter + subplot.axes.visible = False + continue + + # don't maintain aspect ratio for the histogram subplots + subplot.camera.maintain_aspect = False + + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/window_layouts/extent_layout.py b/examples/window_layouts/extent_layout.py new file mode 100644 index 000000000..341a2f970 --- /dev/null +++ b/examples/window_layouts/extent_layout.py @@ -0,0 +1,74 @@ +""" +Extent Layout +============= + +Create subplots using given extents in absolute pixels. +This example plots two images and their histograms in separate subplots + +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import imageio.v3 as iio +import fastplotlib as fpl + +# load images +img1 = iio.imread("imageio:astronaut.png") +img2 = iio.imread("imageio:wikkie.png") + +# calculate histograms +hist_1, edges_1 = np.histogram(img1) +centers_1 = edges_1[:-1] + np.diff(edges_1) / 2 + +hist_2, edges_2 = np.histogram(img2) +centers_2 = edges_2[:-1] + np.diff(edges_2) / 2 + +# figure size in pixels +size = (640, 480) + +# extent is (xmin, xmax, ymin, ymax) +# here it is defined in absolute pixels +extents = [ + (0, 200, 0, 240), # for image1 + (0, 200, 240, 480), # for image2 + (200, 640, 0, 240), # for image1 histogram + (200, 640, 240, 480), # for image2 histogram +] + +# create a figure using the rects and size +# also give each subplot a name +figure = fpl.Figure( + extents=extents, + names=["astronaut image", "wikkie image", "astronaut histogram", "wikkie histogram"], + size=size +) + +# add image to the corresponding subplots +figure["astronaut image"].add_image(img1) +figure["wikkie image"].add_image(img2) + +# add histogram to the corresponding subplots +figure["astronaut histogram"].add_line(np.column_stack([centers_1, hist_1])) +figure["wikkie histogram"].add_line(np.column_stack([centers_2, hist_2])) + + +for subplot in figure: + if "image" in subplot.name: + # remove axes from image subplots to reduce clutter + subplot.axes.visible = False + continue + + # don't maintain aspect ratio for the histogram subplots + subplot.camera.maintain_aspect = False + + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/window_layouts/rect_frac_layout.py b/examples/window_layouts/rect_frac_layout.py new file mode 100644 index 000000000..070488487 --- /dev/null +++ b/examples/window_layouts/rect_frac_layout.py @@ -0,0 +1,74 @@ +""" +Rect Fractional Layout +====================== + +Create subplots using rects given as fractions of the canvas. +This example plots two images and their histograms in separate subplots + +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import imageio.v3 as iio +import fastplotlib as fpl + +# load images +img1 = iio.imread("imageio:astronaut.png") +img2 = iio.imread("imageio:wikkie.png") + +# calculate histograms +hist_1, edges_1 = np.histogram(img1) +centers_1 = edges_1[:-1] + np.diff(edges_1) / 2 + +hist_2, edges_2 = np.histogram(img2) +centers_2 = edges_2[:-1] + np.diff(edges_2) / 2 + +# figure size in pixels +size = (700, 560) + +# rect is (x, y, width, height) +# here it is defined as fractions of the canvas +rects = [ + (0, 0, 0.3, 0.5), # for image1 + (0, 0.5, 0.3, 0.5), # for image2 + (0.3, 0, 0.7, 0.5), # for image1 histogram + (0.3, 0.5, 0.7, 0.5), # for image2 histogram +] + +# create a figure using the rects and size +# also give each subplot a name +figure = fpl.Figure( + rects=rects, + names=["astronaut image", "wikkie image", "astronaut histogram", "wikkie histogram"], + size=size +) + +# add image to the corresponding subplots +figure["astronaut image"].add_image(img1) +figure["wikkie image"].add_image(img2) + +# add histogram to the corresponding subplots +figure["astronaut histogram"].add_line(np.column_stack([centers_1, hist_1])) +figure["wikkie histogram"].add_line(np.column_stack([centers_2, hist_2])) + + +for subplot in figure: + if "image" in subplot.name: + # remove axes from image subplots to reduce clutter + subplot.axes.visible = False + continue + + # don't maintain aspect ratio for the histogram subplots + subplot.camera.maintain_aspect = False + + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/examples/window_layouts/rect_layout.py b/examples/window_layouts/rect_layout.py new file mode 100644 index 000000000..c9fa23a0e --- /dev/null +++ b/examples/window_layouts/rect_layout.py @@ -0,0 +1,74 @@ +""" +Rect Layout +=========== + +Create subplots using given rects in absolute pixels. +This example plots two images and their histograms in separate subplots + +""" + +# test_example = true +# sphinx_gallery_pygfx_docs = 'screenshot' + +import numpy as np +import imageio.v3 as iio +import fastplotlib as fpl + +# load images +img1 = iio.imread("imageio:astronaut.png") +img2 = iio.imread("imageio:wikkie.png") + +# calculate histograms +hist_1, edges_1 = np.histogram(img1) +centers_1 = edges_1[:-1] + np.diff(edges_1) / 2 + +hist_2, edges_2 = np.histogram(img2) +centers_2 = edges_2[:-1] + np.diff(edges_2) / 2 + +# figure size in pixels +size = (640, 480) + +# a rect is (x, y, width, height) +# here it is defined in absolute pixels +rects = [ + (0, 0, 200, 240), # for image1 + (0, 240, 200, 240), # for image2 + (200, 0, 440, 240), # for image1 histogram + (200, 240, 440, 240), # for image2 histogram +] + +# create a figure using the rects and size +# also give each subplot a name +figure = fpl.Figure( + rects=rects, + names=["astronaut image", "wikkie image", "astronaut histogram", "wikkie histogram"], + size=size +) + +# add image to the corresponding subplots +figure["astronaut image"].add_image(img1) +figure["wikkie image"].add_image(img2) + +# add histogram to the corresponding subplots +figure["astronaut histogram"].add_line(np.column_stack([centers_1, hist_1])) +figure["wikkie histogram"].add_line(np.column_stack([centers_2, hist_2])) + + +for subplot in figure: + if "image" in subplot.name: + # remove axes from image subplots to reduce clutter + subplot.axes.visible = False + continue + + # don't maintain aspect ratio for the histogram subplots + subplot.camera.maintain_aspect = False + + +figure.show() + + +# NOTE: fpl.loop.run() should not be used for interactive sessions +# See the "JupyterLab and IPython" section in the user guide +if __name__ == "__main__": + print(__doc__) + fpl.loop.run() diff --git a/fastplotlib/VERSION b/fastplotlib/VERSION deleted file mode 100644 index a0ad4fd5d..000000000 --- a/fastplotlib/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.1.0.a15 diff --git a/fastplotlib/__init__.py b/fastplotlib/__init__.py index 301412aff..6dab91605 100644 --- a/fastplotlib/__init__.py +++ b/fastplotlib/__init__.py @@ -1,25 +1,42 @@ from pathlib import Path -from .layouts import Plot, GridPlot +from ._version import __version__, version_info + +# this must be the first import for auto-canvas detection +from .utils import loop # noqa from .graphics import * +from .graphics.features import GraphicFeatureEvent from .graphics.selectors import * +from .graphics.utils import pause_events +from .legends import * +from .tools import * -from wgpu.gui.auto import run +from .layouts import IMGUI -try: - import ipywidgets -except (ModuleNotFoundError, ImportError): - pass +if IMGUI: + # default to imgui figure if imgui_bundle is installed + from .layouts import ImguiFigure as Figure else: - from .widgets import ImageWidget + from .layouts import Figure + +from .widgets import ImageWidget +from .utils import config, enumerate_adapters, select_adapter, print_wgpu_report -with open(Path(__file__).parent.joinpath("VERSION"), "r") as f: - __version__ = f.read().split("\n")[0] +if len(enumerate_adapters()) < 1: + from warnings import warn -__all__ = [ - "Plot", - "GridPlot", - "run", - "ImageWidget" -] + warn( + f"WGPU could not enumerate any adapters, fastplotlib will not work.\n" + f"This is caused by one of the following:\n" + f"1. You do not have a hardware GPU installed and you do not have " + f"software rendering (ex. lavapipe) installed either\n" + f"2. Your GPU drivers are not installed or something is wrong with your GPU driver installation, " + f"re-installing the latest drivers from your hardware vendor (probably Nvidia or AMD) may help.\n" + f"3. You are missing system libraries that are required for WGPU to access GPU(s), this is " + f"common in cloud computing environments.\n" + f"These two links can help you troubleshoot:\n" + f"https://wgpu-py.readthedocs.io/en/stable/start.html#platform-requirements\n" + f"https://fastplotlib.readthedocs.io/en/latest/user_guide/gpu.html\n", + RuntimeWarning, + ) diff --git a/fastplotlib/_version.py b/fastplotlib/_version.py new file mode 100644 index 000000000..ddeeb3d84 --- /dev/null +++ b/fastplotlib/_version.py @@ -0,0 +1,113 @@ +""" +Versioning: we use a hard-coded version number, because it's simple and always +works. For dev installs we add extra version info from Git. +""" + +import logging +import subprocess +from pathlib import Path + + +# This is the reference version number, to be bumped before each release. +# The build system detects this definition when building a distribution. +__version__ = "0.5.0" + +# Allow using nearly the same code in different projects +project_name = "fastplotlib" + + +logger = logging.getLogger(project_name.lower()) + +# Get whether this is a repo. If so, repo_dir is the path, otherwise repo_dir is None. +repo_dir = Path(__file__).parents[1] +repo_dir = repo_dir if repo_dir.joinpath(".git").is_dir() else None + + +def get_version(): + """Get the version string.""" + if repo_dir: + return get_extended_version() + else: + return __version__ + + +def get_extended_version(): + """Get an extended version string with information from git.""" + + release, post, labels = get_version_info_from_git() + + # Sample first 3 parts of __version__ + base_release = ".".join(__version__.split(".")[:3]) + + # Check release + if not release: + release = base_release + elif release != base_release: + logger.warning( + f"{project_name} version from git ({release}) and __version__ ({base_release}) don't match." + ) + + # Build the total version + version = release + if post and post != "0": + version += f".post{post}" + if labels: + version += "+" + ".".join(labels) + + return version + + +def get_version_info_from_git(): + """Get (release, post, labels) from Git. + + With `release` the version number from the latest tag, `post` the + number of commits since that tag, and `labels` a tuple with the + git-hash and optionally a dirty flag. + """ + + # Call out to Git + command = [ + "git", + "describe", + "--long", + "--always", + "--tags", + "--dirty", + "--first-parent", + ] + try: + p = subprocess.run(command, cwd=repo_dir, capture_output=True) + except Exception as e: + logger.warning(f"Could not get {project_name} version: {e}") + p = None + + # Parse the result into parts + if p is None: + parts = (None, None, "unknown") + else: + output = p.stdout.decode(errors="ignore") + if p.returncode: + stderr = p.stderr.decode(errors="ignore") + logger.warning( + f"Could not get {project_name} version.\n\nstdout: " + + output + + "\n\nstderr: " + + stderr + ) + parts = (None, None, "unknown") + else: + parts = output.strip().lstrip("v").split("-") + if len(parts) <= 2: + # No tags (and thus also no post). Only git hash and maybe 'dirty' + parts = (None, None, *parts) + + # Return unpacked parts + release, post, *labels = parts + return release, post, labels + + +__version__ = get_version() + +version_info = tuple( + int(i) if i.isnumeric() else i for i in __version__.split("+")[0].split(".") +) diff --git a/fastplotlib/assets/egg.gif b/fastplotlib/assets/egg.gif new file mode 100644 index 000000000..0ff189075 --- /dev/null +++ b/fastplotlib/assets/egg.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7251090fd17fa81eae8a5ad176608755b4a68d620b125ebd571acc6d68daa017 +size 4589 diff --git a/fastplotlib/assets/fastplotlib_face_logo.png b/fastplotlib/assets/fastplotlib_face_logo.png new file mode 100644 index 000000000..a5a8bd90e --- /dev/null +++ b/fastplotlib/assets/fastplotlib_face_logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84976200545d143f559b6840a332f3121d58f8d7de8dad7cb8a6d027d854c153 +size 10239 diff --git a/fastplotlib/graphics/__init__.py b/fastplotlib/graphics/__init__.py index 2a008015e..b458a8c48 100644 --- a/fastplotlib/graphics/__init__.py +++ b/fastplotlib/graphics/__init__.py @@ -1,15 +1,17 @@ +from ._base import Graphic from .line import LineGraphic from .scatter import ScatterGraphic -from .image import ImageGraphic, HeatmapGraphic +from .image import ImageGraphic from .text import TextGraphic from .line_collection import LineCollection, LineStack + __all__ = [ - "ImageGraphic", - "ScatterGraphic", + "Graphic", "LineGraphic", - "HeatmapGraphic", + "ScatterGraphic", + "ImageGraphic", + "TextGraphic", "LineCollection", "LineStack", - "TextGraphic", ] diff --git a/fastplotlib/graphics/_axes.py b/fastplotlib/graphics/_axes.py new file mode 100644 index 000000000..10774fc2a --- /dev/null +++ b/fastplotlib/graphics/_axes.py @@ -0,0 +1,554 @@ +import numpy as np + +import pygfx +from pylinalg import quat_from_vecs, vec_transform_quat + + +GRID_PLANES = ["xy", "xz", "yz"] + +CANONICAL_BAIS = np.array([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]) + + +# very thin subclass that just adds GridMaterial properties to this world object for easier user control +class Grid(pygfx.Grid): + @property + def major_step(self) -> tuple[float, float]: + """The step distance between the major grid lines.""" + return self.material.major_step + + @major_step.setter + def major_step(self, step: tuple[float, float]): + self.material.major_step = step + + @property + def minor_step(self) -> tuple[float, float]: + """The step distance between the minor grid lines.""" + return self.material.minor_step + + @minor_step.setter + def minor_step(self, step: tuple[float, float]): + self.material.minor_step = step + + @property + def axis_thickness(self) -> float: + """The thickness of the axis lines.""" + return self.material.axis_thickness + + @axis_thickness.setter + def axis_thickness(self, thickness: float): + self.material.axis_thickness = thickness + + @property + def major_thickness(self) -> float: + """The thickness of the major grid lines.""" + return self.material.major_thickness + + @major_thickness.setter + def major_thickness(self, thickness: float): + self.material.major_thickness = thickness + + @property + def minor_thickness(self) -> float: + """The thickness of the minor grid lines.""" + return self.material.minor_thickness + + @minor_thickness.setter + def minor_thickness(self, thickness: float): + self.material.minor_thickness = thickness + + @property + def thickness_space(self) -> str: + """The coordinate space in which the thicknesses are expressed. + + See :obj:`pygfx.utils.enums.CoordSpace`: + """ + return self.material.thickness_space + + @thickness_space.setter + def thickness_space(self, value: str): + self.material.thickness_space = value + + @property + def axis_color(self) -> str: + """The color of the axis lines.""" + return self.material.axis_color + + @axis_color.setter + def axis_color(self, color: str): + self.material.axis_color = color + + @property + def major_color(self) -> str: + """The color of the major grid lines.""" + return self.material.major_color + + @major_color.setter + def major_color(self, color: str): + self.material.major_color = color + + @property + def minor_color(self) -> str: + """The color of the minor grid lines.""" + return self.material.minor_color + + @minor_color.setter + def minor_color(self, color: str): + self.material.minor_color = color + + @property + def infinite(self) -> bool: + """Whether the grid is infinite. + + If not infinite, the grid is 1x1 in world space, scaled, rotated, and + positioned with the object's transform. + + (Infinite grids are not actually infinite. Rather they move along with + the camera, and are sized based on the distance between the camera and + the grid.) + """ + return self.material.infinite + + @infinite.setter + def infinite(self, value: str): + self.material.infinite = value + + +class Grids(pygfx.Group): + """Just a class to make accessing the grids easier""" + + def __init__(self, *, xy, xz, yz): + super().__init__() + + self._xy = xy + self._xz = xz + self._yz = yz + + self.add(xy, xz, yz) + + @property + def xy(self) -> Grid: + """xy grid""" + return self._xy + + @property + def xz(self) -> Grid: + """xz grid""" + return self._xz + + @property + def yz(self) -> Grid: + """yz grid""" + return self._yz + + +class Axes: + def __init__( + self, + plot_area, + intersection: tuple[int, int, int] | None = None, + x_kwargs: dict = None, + y_kwargs: dict = None, + z_kwargs: dict = None, + grids: bool = True, + grid_kwargs: dict = None, + auto_grid: bool = True, + offset: np.ndarray = np.array([0.0, 0.0, 0.0]), + basis: np.ndarray = np.array( + [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] + ), + ): + self._plot_area = plot_area + + if x_kwargs is None: + x_kwargs = dict() + + if y_kwargs is None: + y_kwargs = dict() + + if z_kwargs is None: + z_kwargs = dict() + + x_kwargs = { + "tick_side": "right", + **x_kwargs, + } + + y_kwargs = {"tick_side": "left", **y_kwargs} + + z_kwargs = { + "tick_side": "left", + **z_kwargs, + } + + # create ruler for each dim + self._x = pygfx.Ruler(**x_kwargs) + self._y = pygfx.Ruler(**y_kwargs) + self._z = pygfx.Ruler(**z_kwargs) + + self._offset = offset + + # *MUST* instantiate some start and end positions for the rulers else kernel crashes immediately + # probably a WGPU rust panic + self.x.start_pos = 0, 0, 0 + self.x.end_pos = 100, 0, 0 + self.x.start_value = self.x.start_pos[0] - offset[0] + statsx = self.x.update( + self._plot_area.camera, self._plot_area.viewport.logical_size + ) + + self.y.start_pos = 0, 0, 0 + self.y.end_pos = 0, 100, 0 + self.y.start_value = self.y.start_pos[1] - offset[1] + statsy = self.y.update( + self._plot_area.camera, self._plot_area.viewport.logical_size + ) + + self.z.start_pos = 0, 0, 0 + self.z.end_pos = 0, 0, 100 + self.z.start_value = self.z.start_pos[1] - offset[2] + self.z.update(self._plot_area.camera, self._plot_area.viewport.logical_size) + + # world object for the rulers + grids + self._world_object = pygfx.Group() + + # add rulers + self.world_object.add( + self.x, + self.y, + self.z, + ) + + # set z ruler invisible for orthographic projections for now + if self._plot_area.camera.fov == 0: + # TODO: allow any orientation in the future even for orthographic projections + self.z.visible = False + + if grid_kwargs is None: + grid_kwargs = dict() + + grid_kwargs = { + "major_step": 10, + "minor_step": 1, + "thickness_space": "screen", + "major_thickness": 2, + "minor_thickness": 0.5, + "infinite": True, + **grid_kwargs, + } + + if grids: + _grids = dict() + for plane in GRID_PLANES: + grid = Grid( + geometry=None, + material=pygfx.GridMaterial(**grid_kwargs), + orientation=plane, + visible=False, + ) + + _grids[plane] = grid + + self._grids = Grids(**_grids) + self.world_object.add(self._grids) + + if self._plot_area.camera.fov == 0: + # orthographic projection, place grids far away + self._grids.local.z = -1000 + + major_step_x, major_step_y = statsx["tick_step"], statsy["tick_step"] + + self.grids.xy.material.major_step = major_step_x, major_step_y + self.grids.xy.material.minor_step = 0.2 * major_step_x, 0.2 * major_step_y + + else: + self._grids = False + + self._intersection = intersection + self._auto_grid = auto_grid + + self._basis = None + self.basis = basis + + @property + def world_object(self) -> pygfx.WorldObject: + return self._world_object + + @property + def basis(self) -> np.ndarray: + """get or set the basis, shape is [3, 3]""" + return self._basis + + @basis.setter + def basis(self, basis: np.ndarray): + if basis.shape != (3, 3): + raise ValueError + + # apply quaternion to each of x, y, z rulers + for dim, cbasis, new_basis in zip(["x", "y", "z"], CANONICAL_BAIS, basis): + ruler: pygfx.Ruler = getattr(self, dim) + ruler.local.rotation = quat_from_vecs(cbasis, new_basis) + + @property + def offset(self) -> np.ndarray: + """offset of the axes""" + return self._offset + + @offset.setter + def offset(self, value: np.ndarray): + self._offset = value + + @property + def x(self) -> pygfx.Ruler: + """x axis ruler""" + return self._x + + @property + def y(self) -> pygfx.Ruler: + """y axis ruler""" + return self._y + + @property + def z(self) -> pygfx.Ruler: + """z axis ruler""" + return self._z + + @property + def grids(self) -> Grids | bool: + """grids for each plane: xy, xz, yz""" + return self._grids + + @property + def colors(self) -> tuple[pygfx.Color]: + return tuple(getattr(self, dim).line.material.color for dim in ["x", "y", "z"]) + + @colors.setter + def colors(self, colors: tuple[pygfx.Color | str]): + """get or set the colors for the x, y, and z rulers""" + if len(colors) != 3: + raise ValueError + + for dim, color in zip(["x", "y", "z"], colors): + getattr(self, dim).line.material.color = color + + @property + def auto_grid(self) -> bool: + """auto adjust the grid on each render cycle""" + return self._auto_grid + + @auto_grid.setter + def auto_grid(self, value: bool): + self._auto_grid = value + + @property + def visible(self) -> bool: + """set visibility of all axes elements, rulers and grids""" + return self._world_object.visible + + @visible.setter + def visible(self, value: bool): + self._world_object.visible = value + + @property + def intersection(self) -> tuple[float, float, float] | None: + return self._intersection + + @intersection.setter + def intersection(self, intersection: tuple[float, float, float] | None): + """ + intersection point of [x, y, z] rulers. + Set (0, 0, 0) for origin + Set to `None` to follow when panning through the scene with orthographic projection + """ + if intersection is None: + self._intersection = None + return + + if len(intersection) != 3: + raise ValueError( + "intersection must be a float of 3 elements for [x, y, z] or `None`" + ) + + self._intersection = tuple(float(v) for v in intersection) + + def update_using_bbox(self, bbox): + """ + Update the w.r.t. the given bbox + + Parameters + ---------- + bbox: np.ndarray + array of shape [2, 3], [[xmin, ymin, zmin], [xmax, ymax, zmax]] + + """ + + # flip axes if camera scale is flipped + if self._plot_area.camera.local.scale_x < 0: + bbox[0, 0], bbox[1, 0] = bbox[1, 0], bbox[0, 0] + + if self._plot_area.camera.local.scale_y < 0: + bbox[0, 1], bbox[1, 1] = bbox[1, 1], bbox[0, 1] + + if self._plot_area.camera.local.scale_z < 0: + bbox[0, 2], bbox[1, 2] = bbox[1, 2], bbox[0, 2] + + if self.intersection is None: + intersection = (0, 0, 0) + else: + intersection = self.intersection + + self.update(bbox, intersection) + + def update_using_camera(self): + """ + Update the axes w.r.t the current camera state + + For orthographic projections of the xy plane, it will calculate the inverse projection + of the screen space onto world space to determine the current range of the world space + to set the rulers and ticks + + For perspective projections it will just use the bbox of the scene to set the rulers + + """ + + if not self.visible: + return + + if self._plot_area.camera.fov == 0: + xpos, ypos, width, height = self._plot_area.viewport.rect + # orthographic projection, get ranges using inverse + + # get range of screen space by getting the corners + xmin, xmax = xpos, xpos + width + ymin, ymax = ypos + height, ypos + + # apply quaternion to account for rotation of axes + # xmin, _, _ = vec_transform_quat( + # [xmin, ypos + height / 2, 0], + # self.x.local.rotation + # ) + # + # xmax, _, _ = vec_transform_quat( + # [xmax, ypos + height / 2, 0], + # self.x.local.rotation, + # ) + # + # _, ymin, _ = vec_transform_quat( + # [xpos + width / 2, ymin, 0], + # self.y.local.rotation + # ) + # + # _, ymax, _ = vec_transform_quat( + # [xpos + width / 2, ymax, 0], + # self.y.local.rotation + # ) + + min_vals = self._plot_area.map_screen_to_world((xmin, ymin)) + max_vals = self._plot_area.map_screen_to_world((xmax, ymax)) + + if min_vals is None or max_vals is None: + return + + world_xmin, world_ymin, _ = min_vals + world_xmax, world_ymax, _ = max_vals + + world_zmin, world_zmax = 0, 0 + + bbox = np.array( + [ + [world_xmin, world_ymin, world_zmin], + [world_xmax, world_ymax, world_zmax], + ] + ) + + else: + # set ruler start and end positions based on scene bbox + bbox = self._plot_area._fpl_graphics_scene.get_world_bounding_box() + + if self.intersection is None: + if self._plot_area.camera.fov == 0: + # place the ruler close to the left and bottom edges of the viewport + # TODO: determine this for perspective projections + xscreen_10, yscreen_10 = xpos + (width * 0.1), ypos + (height * 0.9) + intersection = self._plot_area.map_screen_to_world( + (xscreen_10, yscreen_10) + ) + else: + # force origin since None is not supported for Persepctive projections + self._intersection = (0, 0, 0) + intersection = self._intersection + + else: + # axes intersect at the origin + intersection = self.intersection + + self.update(bbox, intersection) + + def update(self, bbox, intersection): + """ + Update the axes using the given bbox and ruler intersection point + + Parameters + ---------- + bbox: np.ndarray + array of shape [2, 3], [[xmin, ymin, zmin], [xmax, ymax, zmax]] + + intersection: float, float, float + intersection point of the x, y, z ruler + + """ + + world_xmin, world_ymin, world_zmin = bbox[0] + world_xmax, world_ymax, world_zmax = bbox[1] + world_x_10, world_y_10, world_z_10 = intersection + + # swap min and max for each dimension if necessary + if self._plot_area.camera.local.scale_y < 0: + world_ymin, world_ymax = world_ymax, world_ymin + self.y.tick_side = "right" # swap tick side + self.x.tick_side = "right" + else: + self.y.tick_side = "left" + self.x.tick_side = "right" + + if self._plot_area.camera.local.scale_x < 0: + world_xmin, world_xmax = world_xmax, world_xmin + self.x.tick_side = "left" + + self.x.start_pos = world_xmin, world_y_10, world_z_10 + self.x.end_pos = world_xmax, world_y_10, world_z_10 + + self.x.start_value = self.x.start_pos[0] - self.offset[0] + statsx = self.x.update( + self._plot_area.camera, self._plot_area.viewport.logical_size + ) + + self.y.start_pos = world_x_10, world_ymin, world_z_10 + self.y.end_pos = world_x_10, world_ymax, world_z_10 + + self.y.start_value = self.y.start_pos[1] - self.offset[1] + statsy = self.y.update( + self._plot_area.camera, self._plot_area.viewport.logical_size + ) + + if self._plot_area.camera.fov != 0: + self.z.start_pos = world_x_10, world_y_10, world_zmin + self.z.end_pos = world_x_10, world_y_10, world_zmax + + self.z.start_value = self.z.start_pos[2] - self.offset[2] + statsz = self.z.update( + self._plot_area.camera, self._plot_area.viewport.logical_size + ) + major_step_z = statsz["tick_step"] + + if self.grids: + if self.auto_grid: + major_step_x, major_step_y = statsx["tick_step"], statsy["tick_step"] + self.grids.xy.major_step = major_step_x, major_step_y + self.grids.xy.minor_step = 0.2 * major_step_x, 0.2 * major_step_y + + if self._plot_area.camera.fov != 0: + self.grids.xz.major_step = major_step_x, major_step_z + self.grids.xz.minor_step = 0.2 * major_step_x, 0.2 * major_step_z + + self.grids.yz.material.major_step = major_step_y, major_step_z + self.grids.yz.minor_step = 0.2 * major_step_y, 0.2 * major_step_z diff --git a/fastplotlib/graphics/_base.py b/fastplotlib/graphics/_base.py index a0b4881fb..bc3486696 100644 --- a/fastplotlib/graphics/_base.py +++ b/fastplotlib/graphics/_base.py @@ -1,18 +1,36 @@ -from typing import * +from collections import defaultdict +from functools import partial +from typing import Any, Literal, TypeAlias import weakref -from warnings import warn -from abc import ABC, abstractmethod -from dataclasses import dataclass import numpy as np - -from pygfx import WorldObject - -from ._features import GraphicFeature, PresentFeature, GraphicFeatureIndexable +import pylinalg as la +from wgpu.gui.base import log_exception + +try: + from imgui_bundle import imgui +except ImportError: + IMGUI = False +else: + IMGUI = True + +import pygfx + +from .features import ( + BufferManager, + Deleted, + Name, + Offset, + Rotation, + Visible, +) +from ._axes import Axes + +HexStr: TypeAlias = str # dict that holds all world objects for a given python kernel/session # Graphic objects only use proxies to WorldObjects -WORLD_OBJECTS: Dict[str, WorldObject] = dict() #: {hex id str: WorldObject} +WORLD_OBJECTS: dict[HexStr, pygfx.WorldObject] = dict() #: {hex id str: WorldObject} PYGFX_EVENTS = [ @@ -31,9 +49,11 @@ ] -class BaseGraphic: +class Graphic: + _features: dict[str, type] = dict() + def __init_subclass__(cls, **kwargs): - """set the type of the graphic in lower case like "image", "line_collection", etc.""" + # set the type of the graphic in lower case like "image", "line_collection", etc. cls.type = ( cls.__name__.lower() .replace("graphic", "") @@ -41,570 +61,414 @@ def __init_subclass__(cls, **kwargs): .replace("stack", "_stack") ) + # set of all features + cls._features = { + **cls._features, + "name": Name, + "offset": Offset, + "rotation": Rotation, + "visible": Visible, + "deleted": Deleted, + } super().__init_subclass__(**kwargs) - -class Graphic(BaseGraphic): def __init__( self, name: str = None, + offset: np.ndarray | list | tuple = (0.0, 0.0, 0.0), + rotation: np.ndarray | list | tuple = (0.0, 0.0, 0.0, 1.0), + visible: bool = True, metadata: Any = None, - collection_index: int = None, ): """ Parameters ---------- name: str, optional - name this graphic, makes it indexable within plots + name this graphic to use it as a key to access from the plot + + offset: (float, float, float), default (0., 0., 0.) + (x, y, z) vector to offset this graphic from the origin + + rotation: (float, float, float, float), default (0, 0, 0, 1) + rotation quaternion metadata: Any, optional metadata attached to this Graphic, this is for the user to manage """ + if (name is not None) and (not isinstance(name, str)): + raise TypeError("Graphic `name` must be of type ") - self.name = name self.metadata = metadata - self.collection_index = collection_index self.registered_callbacks = dict() - self.present = PresentFeature(parent=self) # store hex id str of Graphic instance mem location - self.loc: str = hex(id(self)) + self._fpl_address: HexStr = hex(id(self)) - @property - def world_object(self) -> WorldObject: - """Associated pygfx WorldObject. Always returns a proxy, real object cannot be accessed directly.""" - # We use weakref to simplify garbage collection - return weakref.proxy(WORLD_OBJECTS[hex(id(self))]) + self._plot_area = None - def _set_world_object(self, wo: WorldObject): - WORLD_OBJECTS[hex(id(self))] = wo + # event handlers + self._event_handlers = defaultdict(set) - @property - def position(self) -> np.ndarray: - """position of the graphic, [x, y, z]""" - return self.world_object.world.position + # maps callbacks to their partials + self._event_handler_wrappers = defaultdict(set) - @property - def position_x(self) -> float: - """x-axis position of the graphic""" - return self.world_object.world.x + # all the common features + self._name = Name(name) + self._deleted = Deleted(False) + self._rotation = Rotation(rotation) + self._offset = Offset(offset) + self._visible = Visible(visible) + self._block_events = False + + self._axes: Axes = None + + self._right_click_menu = None @property - def position_y(self) -> float: - """y-axis position of the graphic""" - return self.world_object.world.y + def supported_events(self) -> tuple[str]: + """events supported by this graphic""" + return (*tuple(self._features.keys()), *PYGFX_EVENTS) @property - def position_z(self) -> float: - """z-axis position of the graphic""" - return self.world_object.world.z + def name(self) -> str | None: + """Graphic name""" + return self._name.value + + @name.setter + def name(self, value: str): + self._name.set_value(self, value) - @position.setter - def position(self, val): - self.world_object.world.position = val + @property + def offset(self) -> np.ndarray: + """Offset position of the graphic, array: [x, y, z]""" + return self._offset.value - @position_x.setter - def position_x(self, val): - self.world_object.world.x = val + @offset.setter + def offset(self, value: np.ndarray | list | tuple): + self._offset.set_value(self, value) - @position_y.setter - def position_y(self, val): - self.world_object.world.y = val + @property + def rotation(self) -> np.ndarray: + """Orientation of the graphic as a quaternion""" + return self._rotation.value - @position_z.setter - def position_z(self, val): - self.world_object.world.z = val + @rotation.setter + def rotation(self, value: np.ndarray | list | tuple): + self._rotation.set_value(self, value) @property def visible(self) -> bool: - """Access or change the visibility.""" - return self.world_object.visible + """Whether the graphic is visible""" + return self._visible.value @visible.setter - def visible(self, v: bool): - """Access or change the visibility.""" - self.world_object.visible = v + def visible(self, value: bool): + self._visible.set_value(self, value) @property - def children(self) -> List[WorldObject]: - """Return the children of the WorldObject.""" - return self.world_object.children + def deleted(self) -> bool: + """used to emit an event after the graphic is deleted""" + return self._deleted.value - def __setattr__(self, key, value): - if hasattr(self, key): - attr = getattr(self, key) - if isinstance(attr, GraphicFeature): - attr._set(value) - return + @deleted.setter + def deleted(self, value: bool): + self._deleted.set_value(self, value) - super().__setattr__(key, value) - - def __repr__(self): - rval = f"{self.__class__.__name__} @ {hex(id(self))}" - if self.name is not None: - return f"'{self.name}': {rval}" - else: - return rval - - def __eq__(self, other): - # This is necessary because we use Graphics as weakref proxies - if not isinstance(other, Graphic): - raise TypeError("`==` operator is only valid between two Graphics") - - if self.loc == other.loc: - return True - - return False + @property + def block_events(self) -> bool: + """Used to block events for a graphic and prevent recursion.""" + return self._block_events - def _cleanup(self): - """ - Cleans up the graphic in preparation for __del__(), such as removing event handlers from - plot renderer, feature event handlers, etc. + @block_events.setter + def block_events(self, value: bool): + self._block_events = value - Optionally implemented in subclasses - """ - pass + @property + def world_object(self) -> pygfx.WorldObject: + """Associated pygfx WorldObject. Always returns a proxy, real object cannot be accessed directly.""" + # We use weakref to simplify garbage collection + return weakref.proxy(WORLD_OBJECTS[hex(id(self))]) - def __del__(self): - del WORLD_OBJECTS[self.loc] + def _set_world_object(self, wo: pygfx.WorldObject): + WORLD_OBJECTS[self._fpl_address] = wo + self.world_object.visible = self.visible -class Interaction(ABC): - """Mixin class that makes graphics interactive""" + # set offset if it's not (0., 0., 0.) + if not all(self.world_object.world.position == self.offset): + self.offset = self.offset - @abstractmethod - def set_feature(self, feature: str, new_data: Any, indices: Any): - pass + # set rotation if it's not (0., 0., 0., 1.) + if not all(self.world_object.world.rotation == self.rotation): + self.rotation = self.rotation - @abstractmethod - def reset_feature(self, feature: str): - pass + @property + def event_handlers(self) -> list[tuple[str, callable, ...]]: + """ + Registered event handlers. Read-only use ``add_event_handler()`` + and ``remove_event_handler()`` to manage callbacks + """ + return list(self._event_handlers.items()) - def link( - self, - event_type: str, - target: Any, - feature: str, - new_data: Any, - callback: callable = None, - bidirectional: bool = False, - ): + def add_event_handler(self, *args): """ - Link this graphic to another graphic upon an ``event_type`` to change the ``feature`` - of a ``target`` graphic. + Register an event handler. Can also be used as a decorator. Parameters ---------- - event_type: str - can be a pygfx event ("key_down", "key_up","pointer_down", "pointer_move", "pointer_up", - "pointer_enter", "pointer_leave", "click", "double_click", "wheel", "close", "resize") - or appropriate feature event (ex. colors, data, etc.) associated with the graphic (can use - ``graphic_instance.feature_events`` to get a tuple of the valid feature events for the - graphic) - - target: Any - graphic to be linked to - - feature: str - feature (ex. colors, data, etc.) of the target graphic that will change following - the event - - new_data: Any - appropriate data that will be changed in the feature of the target graphic after - the event occurs - - callback: callable, optional - user-specified callable that will handle event, - the callable must take the following four arguments - | ''source'' - this graphic instance - | ''target'' - the graphic to be changed following the event - | ''event'' - the ''pygfx event'' or ''feature event'' that occurs - | ''new_data'' - the appropriate data of the ''target'' that will be changed - - bidirectional: bool, default False - if True, the target graphic is also linked back to this graphic instance using the - same arguments - - For example: - .. code-block::python - - Returns - ------- - None - - """ - if event_type in PYGFX_EVENTS: - self.world_object.add_event_handler(self._event_handler, event_type) + callback: callable, the first argument + Event handler, must accept a single event argument - # make sure event is valid - elif event_type in self.feature_events: - if isinstance(self, GraphicCollection): - feature_instance = getattr(self[:], event_type) - else: - feature_instance = getattr(self, event_type) + *types: strings + event types, ex: "click", "data", "colors", "pointer_down" - feature_instance.add_event_handler(self._event_handler) + ``supported_events`` will return a tuple of all event type strings that this graphic supports. + See the user guide in the documentation for more information on events. - else: - raise ValueError( - f"Invalid event, valid events are: {PYGFX_EVENTS + self.feature_events}" - ) - - # make sure target feature is valid - if feature is not None: - if feature not in target.feature_events: - raise ValueError( - f"Invalid feature for target, valid features are: {target.feature_events}" - ) - - if event_type not in self.registered_callbacks.keys(): - self.registered_callbacks[event_type] = list() - - callback_data = CallbackData( - target=target, - feature=feature, - new_data=new_data, - callback_function=callback, - ) - - for existing_callback_data in self.registered_callbacks[event_type]: - if existing_callback_data == callback_data: - warn( - "linkage already exists for given event, target, and data, skipping" - ) - return - - self.registered_callbacks[event_type].append(callback_data) - - if bidirectional: - if event_type in PYGFX_EVENTS: - warn("cannot use bidirectional link for pygfx events") - return - - target.link( - event_type=event_type, - target=self, - feature=feature, - new_data=new_data, - callback=callback, - bidirectional=False # else infinite recursion, otherwise target will call - # this instance .link(), and then it will happen again etc. - ) + Example + ------- - def _event_handler(self, event): - """Handles the event after it occurs when two graphic have been linked together.""" - if event.type in self.registered_callbacks.keys(): - for target_info in self.registered_callbacks[event.type]: - if target_info.callback_function is not None: - # if callback_function is not None, then callback function should handle the entire event - target_info.callback_function( - source=self, - target=target_info.target, - event=event, - new_data=target_info.new_data, - ) - - elif isinstance(self, GraphicCollection): - # if target is a GraphicCollection, then indices will be stored in collection_index - if event.type in self.feature_events: - indices = event.pick_info["collection-index"] - - # for now we only have line collections so this works - else: - # get index of world object that made this event - for i, item in enumerate(self.graphics): - wo = WORLD_OBJECTS[item.loc] - # we only store hex id of worldobject, but worldobject `pick_info` is always the real object - # so if pygfx worldobject triggers an event by itself, such as `click`, etc., this will be - # the real world object in the pick_info and not the proxy - if wo is event.pick_info["world_object"]: - indices = i - target_info.target.set_feature( - feature=target_info.feature, - new_data=target_info.new_data, - indices=indices, - ) - else: - # if target is a single graphic, then indices do not matter - target_info.target.set_feature( - feature=target_info.feature, - new_data=target_info.new_data, - indices=None, - ) + .. code-block:: py + def my_handler(event): + print(event) -@dataclass -class CallbackData: - """Class for keeping track of the info necessary for interactivity after event occurs.""" + graphic.add_event_handler(my_handler, "pointer_up", "pointer_down") - target: Any - feature: str - new_data: Any - callback_function: callable = None + Decorator usage example: - def __eq__(self, other): - if not isinstance(other, CallbackData): - raise TypeError("Can only compare against other types") + .. code-block:: py - if other.target is not self.target: - return False + @graphic.add_event_handler("click") + def my_handler(event): + print(event) + """ - if not other.feature == self.feature: - return False + decorating = not callable(args[0]) + callback = None if decorating else args[0] + types = args if decorating else args[1:] - if not other.new_data == self.new_data: - return False + unsupported_events = [t for t in types if t not in self.supported_events] - if (self.callback_function is None) and (other.callback_function is None): - return True + if len(unsupported_events) > 0: + raise TypeError( + f"unsupported events passed: {unsupported_events} for {self.__class__.__name__}\n" + f"`graphic.events` will return a tuple of supported events" + ) - if other.callback_function is self.callback_function: - return True + def decorator(_callback): + _callback_wrapper = partial( + self._handle_event, _callback + ) # adds graphic instance as attribute and other things - else: - return False + for t in types: + # add to our record + self._event_handlers[t].add(_callback) + if t in self._features.keys(): + # fpl feature event + feature = getattr(self, f"_{t}") + feature.add_event_handler(_callback_wrapper) + else: + # wrap pygfx event + self.world_object._event_handlers[t].add(_callback_wrapper) -@dataclass -class PreviouslyModifiedData: - """Class for keeping track of previously modified data at indices""" + # keep track of the partial too + self._event_handler_wrappers[t].add((_callback, _callback_wrapper)) + return _callback - data: Any - indices: Any + if decorating: + return decorator + return decorator(callback) -COLLECTION_GRAPHICS: Dict[str, Graphic] = dict() + def clear_event_handlers(self): + """clear all event handlers added to this graphic""" + for ev, handlers in self.event_handlers: + handlers = list(handlers) + for h in handlers: + self.remove_event_handler(h, ev) + def _handle_event(self, callback, event: pygfx.Event): + """Wrap pygfx event to add graphic to pick_info""" + event.graphic = self -class GraphicCollection(Graphic): - """Graphic Collection base class""" + if self.block_events: + return - def __init__(self, name: str = None): - super(GraphicCollection, self).__init__(name) - self._graphics: List[str] = list() + if event.type in self._features: + # for feature events + event._target = self.world_object - self._graphics_changed: bool = True - self._graphics_array: np.ndarray[Graphic] = None + with log_exception(f"Error during handling {event.type} event"): + callback(event) - @property - def graphics(self) -> np.ndarray[Graphic]: - """The Graphics within this collection. Always returns a proxy to the Graphics.""" - if self._graphics_changed: - proxies = [ - weakref.proxy(COLLECTION_GRAPHICS[loc]) for loc in self._graphics - ] - self._graphics_array = np.array(proxies) - self._graphics_array.flags["WRITEABLE"] = False - self._graphics_changed = False - - return self._graphics_array - - def add_graphic(self, graphic: Graphic, reset_index: False): + def remove_event_handler(self, callback, *types): """ - Add a graphic to the collection. + remove a registered event handler Parameters ---------- - graphic: Graphic - graphic to add, must be a real ``Graphic`` not a proxy - - reset_index: bool, default ``False`` - reset the collection index - - """ - - if not type(graphic).__name__ == self.child_type: - raise TypeError( - f"Can only add graphics of the same type to a collection, " - f"You can only add {self.child_type} to a {self.__class__.__name__}, " - f"you are trying to add a {graphic.__class__.__name__}." - ) - - loc = hex(id(graphic)) - COLLECTION_GRAPHICS[loc] = graphic - - self._graphics.append(loc) + callback: callable + event handler that has been added - if reset_index: - self._reset_index() - elif graphic.collection_index is None: - graphic.collection_index = len(self) + *types: strings + event types that were registered with the given callback - self.world_object.add(graphic.world_object) + Example + ------- - self._graphics_changed = True + .. code-block:: py - def remove_graphic(self, graphic: Graphic, reset_index: True): - """ - Remove a graphic from the collection. + # define event handler + def my_handler(event): + print(event) - Parameters - ---------- - graphic: Graphic - graphic to remove + # add event handler + graphic.add_event_handler(my_handler, "pointer_up", "pointer_down") - reset_index: bool, default ``False`` - reset the collection index + # remove event handler + graphic.remove_event_handler(my_handler, "pointer_up", "pointer_down") """ - self._graphics.remove(graphic.loc) - - if reset_index: - self._reset_index() - - self.world_object.remove(graphic.world_object) - - self._graphics_changed = True - - def __getitem__(self, key): - return CollectionIndexer( - parent=self, - selection=self.graphics[key], - ) - - def __del__(self): - self.world_object.clear() - - for loc in self._graphics: - del COLLECTION_GRAPHICS[loc] - - super().__del__() + # remove from our record first + for t in types: + for wrapper_map in self._event_handler_wrappers[t]: + # TODO: not sure if we can handle this mapping in a better way + if wrapper_map[0] == callback: + wrapper = wrapper_map[1] + self._event_handler_wrappers[t].remove(wrapper_map) + break + else: + raise KeyError( + f"event type: {t} with callback: {callback} is not registered" + ) - def _reset_index(self): - for new_index, graphic in enumerate(self._graphics): - graphic.collection_index = new_index + self._event_handlers[t].remove(callback) + # remove callback wrapper from world object if pygfx event + if t in PYGFX_EVENTS: + self.world_object.remove_event_handler(wrapper, t) + else: + feature = getattr(self, f"_{t}") + feature.remove_event_handler(wrapper) - def __len__(self): - return len(self._graphics) + def _fpl_add_plot_area_hook(self, plot_area): + self._plot_area = plot_area def __repr__(self): - rval = super().__repr__() - return f"{rval}\nCollection of <{len(self._graphics)}> Graphics" - - -class CollectionIndexer: - """Collection Indexer""" + rval = f"{self.__class__.__name__}" + if self.name is not None: + return f"'{self.name}': {rval}" + else: + return rval - def __init__( - self, - parent: GraphicCollection, - selection: List[Graphic], - ): + def _fpl_prepare_del(self): """ + Cleans up the graphic in preparation for __del__(), such as removing event handlers from + plot renderer, feature event handlers, etc. - Parameters - ---------- - parent: GraphicCollection - the GraphicCollection object that is being indexed - - selection: list of Graphics - a list of the selected Graphics from the parent GraphicCollection based on the ``selection_indices`` - + Optionally implemented in subclasses """ + # remove axes if added to this graphic + if self._axes is not None: + self._plot_area.scene.remove(self._axes) + self._plot_area.remove_animation(self._update_axes) + self._axes.world_object.clear() - self._parent = weakref.proxy(parent) - self._selection = selection + # signal that a deletion has been requested + self.deleted = True - # we use parent.graphics[0] instead of selection[0] - # because the selection can be empty - for attr_name in self._parent.graphics[0].__dict__.keys(): - attr = getattr(self._parent.graphics[0], attr_name) - if isinstance(attr, GraphicFeature): - collection_feature = CollectionFeature( - self._selection, feature=attr_name - ) - collection_feature.__doc__ = ( - f"indexable <{attr_name}> feature for collection" - ) - setattr(self, attr_name, collection_feature) - - @property - def graphics(self) -> np.ndarray[Graphic]: - """Returns an array of the selected graphics. Always returns a proxy to the Graphic""" - return tuple(self._selection) + # clear event handlers + self.clear_event_handlers() - def __setattr__(self, key, value): - if hasattr(self, key): - attr = getattr(self, key) - if isinstance(attr, CollectionFeature): - attr._set(value) - return + # clear any attached event handlers and animation functions + for attr in dir(self): + try: + method = getattr(self, attr) + except: + continue - super().__setattr__(key, value) + if not callable(method): + continue - def __len__(self): - return len(self._selection) + for ev_type in PYGFX_EVENTS: + try: + self._plot_area.renderer.remove_event_handler(method, ev_type) + except (KeyError, TypeError): + pass - def __repr__(self): - return ( - f"{self.__class__.__name__} @ {hex(id(self))}\n" - f"Selection of <{len(self._selection)}> {self._selection[0].__class__.__name__}" - ) + try: + self._plot_area.remove_animation(method) + except KeyError: + pass + for child in self.world_object.children: + child._event_handlers.clear() -class CollectionFeature: - """Collection Feature""" + self.world_object._event_handlers.clear() - def __init__(self, selection: List[Graphic], feature: str): - """ - selection: list of Graphics - a list of the selected Graphics from the parent GraphicCollection based on the ``selection_indices`` + def __del__(self): + # remove world object if created + # world object does not exist if an exception was raised during __init__ which is why this check exists + WORLD_OBJECTS.pop(hex(id(self)), None) - feature: str - feature of Graphics in the GraphicCollection being indexed + def rotate(self, alpha: float, axis: Literal["x", "y", "z"] = "y"): + """Rotate the Graphic with respect to the world. + Parameters + ---------- + alpha : + Rotation angle in radians. + axis : + Rotation axis label. """ + if axis == "x": + rot = la.quat_from_euler((alpha, 0), order="XY") + elif axis == "y": + rot = la.quat_from_euler((0, alpha), order="XY") + elif axis == "z": + rot = la.quat_from_euler((0, alpha), order="XZ") + else: + raise ValueError( + f"`axis` must be either `x`, `y`, or `z`. `{axis}` provided instead!" + ) + self.rotation = la.quat_mul(rot, self.rotation) - self._selection = selection - self._feature = feature - - self._feature_instances: List[GraphicFeature] = list() - - if len(self._selection) > 0: - for graphic in self._selection: - fi = getattr(graphic, self._feature) - self._feature_instances.append(fi) - - if isinstance(fi, GraphicFeatureIndexable): - self._indexable = True - else: - self._indexable = False - else: # it's an empty selection so it doesn't really matter - self._indexable = False - - def _set(self, value): - self[:] = value + @property + def axes(self) -> Axes: + return self._axes - def __getitem__(self, item): - # only for indexable graphic features - return [fi[item] for fi in self._feature_instances] + def add_axes(self): + """Add axes onto this Graphic""" + if self._axes is not None: + raise AttributeError("Axes already added onto this graphic") - def __setitem__(self, key, value): - if self._indexable: - for fi in self._feature_instances: - fi[key] = value + self._axes = Axes(self._plot_area, offset=self.offset, grids=False) + self._axes.world_object.local.rotation = self.world_object.local.rotation - else: - for fi in self._feature_instances: - fi._set(value) + self._plot_area.scene.add(self.axes.world_object) + self._axes.update_using_bbox(self.world_object.get_world_bounding_box()) - def add_event_handler(self, handler: callable): - """Adds an event handler to each of the selected Graphics from the parent GraphicCollection""" - for fi in self._feature_instances: - fi.add_event_handler(handler) + @property + def right_click_menu(self): + return self._right_click_menu + + @right_click_menu.setter + def right_click_menu(self, menu): + if not IMGUI: + raise ImportError( + "imgui is required to set right-click menus:\n" + "pip install imgui_bundle" + ) - def remove_event_handler(self, handler: callable): - """Removes an event handler from each of the selected Graphics of the parent GraphicCollection""" - for fi in self._feature_instances: - fi.remove_event_handler(handler) + self._right_click_menu = menu + menu.owner = self - def block_events(self, b: bool): - """Blocks event handling from occurring.""" - for fi in self._feature_instances: - fi.block_events(b) + def _fpl_request_right_click_menu(self): + pass - def __repr__(self): - return f"Collection feature for: <{self._feature}>" + def _fpl_close_right_click_menu(self): + pass diff --git a/fastplotlib/graphics/_collection_base.py b/fastplotlib/graphics/_collection_base.py new file mode 100644 index 000000000..36f83ec7a --- /dev/null +++ b/fastplotlib/graphics/_collection_base.py @@ -0,0 +1,374 @@ +from contextlib import suppress +from typing import Any + +import numpy as np + +from ._base import Graphic + + +class CollectionProperties: + """ + Properties common to all Graphic Collections + + Allows getting and setting the common properties of the individual graphics in the collection + """ + + def _set_feature(self, feature, values): + if not len(values) == len(self): + raise IndexError + + for g, v in zip(self, values): + setattr(g, feature, v) + + @property + def names(self) -> np.ndarray[str | None]: + """get or set the name of the individual graphics in the collection""" + return np.asarray([g.name for g in self]) + + @names.setter + def names(self, values: np.ndarray[str] | list[str]): + self._set_feature("name", values) + + @property + def metadatas(self) -> np.ndarray[str | None]: + """get or set the metadata of the individual graphics in the collection""" + return np.asarray([g.metadata for g in self]) + + @metadatas.setter + def metadatas(self, values: np.ndarray[str] | list[str]): + self._set_feature("metadata", values) + + @property + def offsets(self) -> np.ndarray: + """get or set the offset of the individual graphics in the collection""" + return np.stack([g.offset for g in self]) + + @offsets.setter + def offsets(self, values: np.ndarray | list[np.ndarray]): + self._set_feature("offset", values) + + @property + def rotations(self) -> np.ndarray: + """get or set the rotation of the individual graphics in the collection""" + return np.stack([g.rotation for g in self]) + + @rotations.setter + def rotations(self, values: np.ndarray | list[np.ndarray]): + self._set_feature("rotation", values) + + # TODO: how to work with deleted feature in a collection + + @property + def visibles(self) -> np.ndarray[bool]: + """get or set the offsets of the individual graphics in the collection""" + return np.asarray([g.visible for g in self]) + + @visibles.setter + def visibles(self, values: np.ndarray[bool] | list[bool]): + self._set_feature("visible", values) + + +class CollectionIndexer(CollectionProperties): + """Collection Indexer""" + + def __init__(self, selection: np.ndarray[Graphic], features: set[str]): + """ + + Parameters + ---------- + + selection: np.ndarray of Graphics + array of the selected Graphics from the parent GraphicCollection based on the ``selection_indices`` + + """ + + if isinstance(selection, Graphic): + selection = np.asarray([selection]) + + self._selection = selection + self.features = features + + @property + def graphics(self) -> np.ndarray[Graphic]: + """Returns an array of the selected graphics""" + return tuple(self._selection) + + def add_event_handler(self, *args): + """ + Register an event handler. + + Parameters + ---------- + callback: callable, the first argument + Event handler, must accept a single event argument + *types: list of strings + A list of event types, ex: "click", "data", "colors", "pointer_down" + + For the available renderer event types, see + https://jupyter-rfb.readthedocs.io/en/stable/events.html + + All feature support events, i.e. ``graphic.features`` will give a set of + all features that are evented + + Can also be used as a decorator. + + Example + ------- + + .. code-block:: py + + def my_handler(event): + print(event) + + graphic.add_event_handler(my_handler, "pointer_up", "pointer_down") + + Decorator usage example: + + .. code-block:: py + + @graphic.add_event_handler("click") + def my_handler(event): + print(event) + """ + + decorating = not callable(args[0]) + types = args if decorating else args[1:] + + if decorating: + + def decorator(_callback): + for g in self: + g.add_event_handler(_callback, *types) + return _callback + + return decorator + + for g in self: + g.add_event_handler(*args) + + def remove_event_handler(self, callback, *types): + for g in self: + g.remove_event_handler(callback, *types) + + def clear_event_handlers(self): + for g in self: + g.clear_event_handlers() + + def __getitem__(self, item): + return self.graphics[item] + + def __len__(self): + return len(self._selection) + + def __iter__(self): + self._iter = iter(range(len(self))) + return self + + def __next__(self) -> Graphic: + index = next(self._iter) + + return self.graphics[index] + + def __repr__(self): + return ( + f"{self.__class__.__name__} @ {hex(id(self))}\n" + f"Selection of <{len(self._selection)}> {self._selection[0].__class__.__name__}" + ) + + +class GraphicCollection(Graphic, CollectionProperties): + """Graphic Collection base class""" + + _child_type: type + _indexer: type + + def __init_subclass__(cls, **kwargs): + super().__init_subclass__(**kwargs) + cls._features = cls._child_type._features + + def __init__(self, name: str = None, metadata: Any = None, **kwargs): + super().__init__(name=name, metadata=metadata, **kwargs) + + # list of mem locations of the graphics + self._graphics: list[Graphic] = list() + + self._graphics_changed: bool = True + + self._iter = None + + @property + def graphics(self) -> np.ndarray[Graphic]: + """The Graphics within this collection.""" + + return np.asarray(self._graphics) + + def add_graphic(self, graphic: Graphic): + """ + Add a graphic to the collection. + + Parameters + ---------- + graphic: Graphic + graphic to add, must be a real ``Graphic`` not a proxy + + """ + + if not type(graphic) == self._child_type: + raise TypeError( + f"Can only add graphics of the same type to a collection.\n" + f"You can only add {self._child_type.__name__} to a {self.__class__.__name__}, " + f"you are trying to add a {graphic.__class__.__name__}." + ) + + self._graphics.append(graphic) + + self.world_object.add(graphic.world_object) + + self._graphics_changed = True + + def remove_graphic(self, graphic: Graphic): + """ + Remove a graphic from the collection. + + Note: Only removes the graphic from the collection. Does not remove + the graphic from the scene, and does not delete the graphic. + + Parameters + ---------- + graphic: Graphic + graphic to remove + + """ + + self._graphics.remove(graphic) + + self.world_object.remove(graphic.world_object) + + self._graphics_changed = True + + def add_event_handler(self, *args): + """ + Register an event handler. + + Parameters + ---------- + callback: callable, the first argument + Event handler, must accept a single event argument + *types: list of strings + A list of event types, ex: "click", "data", "colors", "pointer_down" + + For the available renderer event types, see + https://jupyter-rfb.readthedocs.io/en/stable/events.html + + All feature support events, i.e. ``graphic.features`` will give a set of + all features that are evented + + Can also be used as a decorator. + + Example + ------- + + .. code-block:: py + + def my_handler(event): + print(event) + + graphic.add_event_handler(my_handler, "pointer_up", "pointer_down") + + Decorator usage example: + + .. code-block:: py + + @graphic.add_event_handler("click") + def my_handler(event): + print(event) + """ + + return self[:].add_event_handler(*args) + + def remove_event_handler(self, callback, *types): + """remove an event handler""" + self[:].remove_event_handler(callback, *types) + + def clear_event_handlers(self): + self[:].clear_event_handlers() + + def _fpl_add_plot_area_hook(self, plot_area): + super()._fpl_add_plot_area_hook(plot_area) + + for g in self: + g._fpl_add_plot_area_hook(plot_area) + + def _fpl_prepare_del(self): + """ + Cleans up the graphic in preparation for __del__(), such as removing event handlers from + plot renderer, feature event handlers, etc. + + Optionally implemented in subclasses + """ + # clear any attached event handlers and animation functions + self.world_object._event_handlers.clear() + + for g in self: + g._fpl_prepare_del() + + def __getitem__(self, key) -> CollectionIndexer: + if np.issubdtype(type(key), np.integer): + return self.graphics[key] + + return self._indexer(selection=self.graphics[key], features=self._features) + + def __del__(self): + # detach children + self.world_object.clear() + + for g in self.graphics: + g._fpl_prepare_del() + del g + + super().__del__() + + def __len__(self): + return len(self._graphics) + + def __iter__(self): + self._iter = iter(range(len(self))) + return self + + def __next__(self) -> Graphic: + index = next(self._iter) + + return self._graphics[index] + + def __repr__(self): + rval = super().__repr__() + return f"{rval}\nCollection of <{len(self._graphics)}> Graphics" + + +class CollectionFeature: + """Collection Feature""" + + def __init__(self, selection: np.ndarray[Graphic], feature: str): + """ + selection: list of Graphics + a list of the selected Graphics from the parent GraphicCollection based on the ``selection_indices`` + + feature: str + feature of Graphics in the GraphicCollection being indexed + + """ + + self._selection = selection + self._feature = feature + + self._feature_instances = [getattr(g, feature) for g in self._selection] + + def __getitem__(self, item): + return np.stack([fi[item] for fi in self._feature_instances]) + + def __setitem__(self, key, value): + for fi in self._feature_instances: + fi[key] = value + + def __repr__(self): + return f"Collection feature for: <{self._feature}>" diff --git a/fastplotlib/graphics/_features/__init__.py b/fastplotlib/graphics/_features/__init__.py deleted file mode 100644 index a6ce9c3a3..000000000 --- a/fastplotlib/graphics/_features/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -from ._colors import ColorFeature, CmapFeature, ImageCmapFeature, HeatmapCmapFeature -from ._data import PointsDataFeature, ImageDataFeature, HeatmapDataFeature -from ._sizes import PointsSizesFeature -from ._present import PresentFeature -from ._thickness import ThicknessFeature -from ._base import GraphicFeature, GraphicFeatureIndexable, FeatureEvent, to_gpu_supported_dtype -from ._selection_features import LinearSelectionFeature, LinearRegionSelectionFeature - -__all__ = [ - "ColorFeature", - "CmapFeature", - "ImageCmapFeature", - "HeatmapCmapFeature", - "PointsDataFeature", - "PointsSizesFeature", - "ImageDataFeature", - "HeatmapDataFeature", - "PresentFeature", - "ThicknessFeature", - "GraphicFeature", - "GraphicFeatureIndexable", - "FeatureEvent", - "to_gpu_supported_dtype", - "LinearSelectionFeature", - "LinearRegionSelectionFeature", -] diff --git a/fastplotlib/graphics/_features/_base.py b/fastplotlib/graphics/_features/_base.py deleted file mode 100644 index 99ebbf436..000000000 --- a/fastplotlib/graphics/_features/_base.py +++ /dev/null @@ -1,359 +0,0 @@ -from abc import ABC, abstractmethod -from inspect import getfullargspec -from warnings import warn -from typing import * -import weakref - -import numpy as np - -import pygfx - - -supported_dtypes = [ - np.uint8, - np.uint16, - np.uint32, - np.int8, - np.int16, - np.int32, - np.float16, - np.float32, -] - - -def to_gpu_supported_dtype(array): - """ - If ``array`` is a numpy array, converts it to a supported type. GPUs don't support 64 bit dtypes. - """ - if isinstance(array, np.ndarray): - if array.dtype not in supported_dtypes: - if np.issubdtype(array.dtype, np.integer): - warn(f"converting {array.dtype} array to int32") - return array.astype(np.int32) - elif np.issubdtype(array.dtype, np.floating): - warn(f"converting {array.dtype} array to float32") - return array.astype(np.float32, copy=False) - else: - raise TypeError( - "Unsupported type, supported array types must be int or float dtypes" - ) - - return array - - -class FeatureEvent: - """ - Dataclass that holds feature event information. Has ``type`` and ``pick_info`` attributes. - - Attributes - ---------- - type: str, example "colors" - - pick_info: dict: - - ============== ============================================================================= - key value - ============== ============================================================================= - "index" indices where feature data was changed, ``range`` object or ``List[int]`` - "world_object" world object the feature belongs to - "new_data: the new data for this feature - ============== ============================================================================= - - .. note:: - pick info varies between features, this is just the general structure - - """ - - def __init__(self, type: str, pick_info: dict): - self.type = type - self.pick_info = pick_info - - def __repr__(self): - return ( - f"{self.__class__.__name__} @ {hex(id(self))}\n" - f"type: {self.type}\n" - f"pick_info: {self.pick_info}\n" - ) - - -class GraphicFeature(ABC): - def __init__(self, parent, data: Any, collection_index: int = None): - # not shown as a docstring so it doesn't show up in the docs - # - # Parameters - # ---------- - # parent - # - # data: Any - # - # collection_index: int - # if part of a collection, index of this graphic within the collection - - self._parent = weakref.proxy(parent) - - self._data = to_gpu_supported_dtype(data) - - self._collection_index = collection_index - self._event_handlers = list() - self._block_events = False - - def __call__(self, *args, **kwargs): - return self._data - - def block_events(self, val: bool): - """ - Block all events from this feature - - Parameters - ---------- - val: bool - ``True`` or ``False`` - - """ - self._block_events = val - - @abstractmethod - def _set(self, value): - pass - - def _parse_set_value(self, value): - if isinstance(value, GraphicFeature): - return value() - - return value - - def add_event_handler(self, handler: callable): - """ - Add an event handler. All added event handlers are called when this feature changes. - The ``handler`` can optionally accept a :class:`.FeatureEvent` as the first and only argument. - The ``FeatureEvent`` only has two attributes, ``type`` which denotes the type of event - as a ``str`` in the form of "", such as "color". And ``pick_info`` which contains - information about the event and Graphic that triggered it. - - Parameters - ---------- - handler: callable - a function to call when this feature changes - - """ - if not callable(handler): - raise TypeError("event handler must be callable") - - if handler in self._event_handlers: - warn(f"Event handler {handler} is already registered.") - return - - self._event_handlers.append(handler) - - def remove_event_handler(self, handler: callable): - """ - Remove a registered event ``handler``. - - Parameters - ---------- - handler: callable - event handler to remove - - """ - if handler not in self._event_handlers: - raise KeyError(f"event handler {handler} not registered.") - - self._event_handlers.remove(handler) - - def clear_event_handlers(self): - """Clear all event handlers""" - self._event_handlers.clear() - - # TODO: maybe this can be implemented right here in the base class - @abstractmethod - def _feature_changed(self, key: Union[int, slice, Tuple[slice]], new_data: Any): - """Called whenever a feature changes, and it calls all funcs in self._event_handlers""" - pass - - def _call_event_handlers(self, event_data: FeatureEvent): - if self._block_events: - return - - for func in self._event_handlers: - try: - args = getfullargspec(func).args - - if len(args) > 0: - if args[0] == "self" and not len(args) > 1: - func() - else: - func(event_data) - else: - func() - except TypeError: - warn( - f"Event handler {func} has an unresolvable argspec, calling it without arguments" - ) - func() - - @abstractmethod - def __repr__(self) -> str: - pass - - -def cleanup_slice(key: Union[int, slice], upper_bound) -> Union[slice, int]: - """ - - If the key in an `int`, it just returns it. Otherwise, - it parses it and removes the `None` vals and replaces - them with corresponding values that can be used to - create a `range`, get `len` etc. - - Parameters - ---------- - key - upper_bound - - Returns - ------- - - """ - if isinstance(key, int): - return key - - if isinstance(key, np.ndarray): - return cleanup_array_slice(key, upper_bound) - - if isinstance(key, tuple): - # if tuple of slice we only need the first obj - # since the first obj is the datapoint indices - if isinstance(key[0], slice): - key = key[0] - else: - raise TypeError("Tuple slicing must have slice object in first position") - - if not isinstance(key, slice): - raise TypeError("Must pass slice or int object") - - start = key.start - stop = key.stop - step = key.step - for attr in [start, stop, step]: - if attr is None: - continue - if attr < 0: - raise IndexError("Negative indexing not supported.") - - if start is None: - start = 0 - - if stop is None: - stop = upper_bound - - elif stop > upper_bound: - raise IndexError( - f"Index: `{stop}` out of bounds for feature array of size: `{upper_bound}`" - ) - - step = key.step - if step is None: - step = 1 - - return slice(start, stop, step) - - -def cleanup_array_slice(key: np.ndarray, upper_bound) -> Union[np.ndarray, None]: - """ - Cleanup numpy array used for fancy indexing, make sure key[-1] <= upper_bound. - - Returns None if nothing to change. - - Parameters - ---------- - key: np.ndarray - integer or boolean array - - upper_bound - - Returns - ------- - np.ndarray - integer indexing array - - """ - - if key.ndim > 1: - raise TypeError(f"Can only use 1D boolean or integer arrays for fancy indexing") - - # if boolean array convert to integer array of indices - if key.dtype == bool: - key = np.nonzero(key)[0] - - if key.size < 1: - return None - - # make sure indices within bounds of feature buffer range - if key[-1] > upper_bound: - raise IndexError( - f"Index: `{key[-1]}` out of bounds for feature array of size: `{upper_bound}`" - ) - - # make sure indices are integers - if np.issubdtype(key.dtype, np.integer): - return key - - raise TypeError(f"Can only use 1D boolean or integer arrays for fancy indexing") - - -class GraphicFeatureIndexable(GraphicFeature): - """An indexable Graphic Feature, colors, data, sizes etc.""" - - def _set(self, value): - value = self._parse_set_value(value) - self[:] = value - - @abstractmethod - def __getitem__(self, item): - pass - - @abstractmethod - def __setitem__(self, key, value): - pass - - @abstractmethod - def _update_range(self, key): - pass - - @property - @abstractmethod - def buffer(self) -> Union[pygfx.Buffer, pygfx.Texture]: - """Underlying buffer for this feature""" - pass - - @property - def _upper_bound(self) -> int: - return self._data.shape[0] - - def _update_range_indices(self, key): - """Currently used by colors and positions data""" - if not isinstance(key, np.ndarray): - key = cleanup_slice(key, self._upper_bound) - - if isinstance(key, int): - self.buffer.update_range(key, size=1) - return - - # else if it's a slice obj - if isinstance(key, slice): - if key.step == 1: # we cleaned up the slice obj so step of None becomes 1 - # update range according to size using the offset - self.buffer.update_range(offset=key.start, size=key.stop - key.start) - - else: - step = key.step - # convert slice to indices - ixs = range(key.start, key.stop, step) - for ix in ixs: - self.buffer.update_range(ix, size=1) - - # TODO: See how efficient this is with large indexing - elif isinstance(key, np.ndarray): - self.buffer.update_range() - - else: - raise TypeError("must pass int or slice to update range") diff --git a/fastplotlib/graphics/_features/_colors.py b/fastplotlib/graphics/_features/_colors.py deleted file mode 100644 index b6723b34b..000000000 --- a/fastplotlib/graphics/_features/_colors.py +++ /dev/null @@ -1,429 +0,0 @@ -import numpy as np -import pygfx - -from ...utils import make_colors, get_cmap_texture, make_pygfx_colors, parse_cmap_values, quick_min_max -from ._base import ( - GraphicFeature, - GraphicFeatureIndexable, - cleanup_slice, - FeatureEvent, - cleanup_array_slice, -) - - -class ColorFeature(GraphicFeatureIndexable): - """ - Manages the color buffer for :class:`LineGraphic` or :class:`ScatterGraphic` - - **event pick info:** - - ==================== =============================== ========================================================================= - key type description - ==================== =============================== ========================================================================= - "index" ``numpy.ndarray`` or ``None`` changed indices in the buffer - "new_data" ``numpy.ndarray`` or ``None`` new buffer data at the changed indices - "collection-index" int the index of the graphic within the collection that triggered the event - "world_object" pygfx.WorldObject world object - ==================== =============================== ========================================================================= - - """ - - @property - def buffer(self) -> pygfx.Buffer: - return self._parent.world_object.geometry.colors - - def __getitem__(self, item): - return self.buffer.data[item] - - def __init__( - self, - parent, - colors, - n_colors: int, - alpha: float = 1.0, - collection_index: int = None, - ): - """ - ColorFeature - - Parameters - ---------- - parent: Graphic or GraphicCollection - - colors: str, array, or iterable - specify colors as a single human readable string, RGBA array, - or an iterable of strings or RGBA arrays - - n_colors: int - number of colors to hold, if passing in a single str or single RGBA array - - alpha: float - alpha value for the colors - - """ - # if provided as a numpy array of str - if isinstance(colors, np.ndarray): - if colors.dtype.kind in ["U", "S"]: - colors = colors.tolist() - # if the color is provided as a numpy array - if isinstance(colors, np.ndarray): - if colors.shape == (4,): # single RGBA array - data = np.repeat(np.array([colors]), n_colors, axis=0) - # else assume it's already a stack of RGBA arrays, keep this directly as the data - elif colors.ndim == 2: - if colors.shape[1] != 4 and colors.shape[0] != n_colors: - raise ValueError( - "Valid array color arguments must be a single RGBA array or a stack of " - "RGBA arrays for each datapoint in the shape [n_datapoints, 4]" - ) - data = colors - else: - raise ValueError( - "Valid array color arguments must be a single RGBA array or a stack of " - "RGBA arrays for each datapoint in the shape [n_datapoints, 4]" - ) - - # if the color is provided as an iterable - elif isinstance(colors, (list, tuple, np.ndarray)): - # if iterable of str - if all([isinstance(val, str) for val in colors]): - if not len(colors) == n_colors: - raise ValueError( - f"Valid iterable color arguments must be a `tuple` or `list` of `str` " - f"where the length of the iterable is the same as the number of datapoints." - ) - - data = np.vstack([np.array(pygfx.Color(c)) for c in colors]) - - # if it's a single RGBA array as a tuple/list - elif len(colors) == 4: - c = pygfx.Color(colors) - data = np.repeat(np.array([c]), n_colors, axis=0) - - else: - raise ValueError( - f"Valid iterable color arguments must be a `tuple` or `list` representing RGBA values or " - f"an iterable of `str` with the same length as the number of datapoints." - ) - elif isinstance(colors, str): - if colors == "random": - data = np.random.rand(n_colors, 4) - data[:, -1] = alpha - else: - data = make_pygfx_colors(colors, n_colors) - else: - # assume it's a single color, use pygfx.Color to parse it - data = make_pygfx_colors(colors, n_colors) - - if alpha != 1.0: - data[:, -1] = alpha - - super(ColorFeature, self).__init__( - parent, data, collection_index=collection_index - ) - - def __setitem__(self, key, value): - # parse numerical slice indices - if isinstance(key, slice): - _key = cleanup_slice(key, self._upper_bound) - indices = range(_key.start, _key.stop, _key.step) - - # or single numerical index - elif isinstance(key, (int, np.integer)): - key = cleanup_slice(key, self._upper_bound) - indices = [key] - - elif isinstance(key, tuple): - if not isinstance(value, (float, int, np.ndarray)): - raise ValueError( - "If using multiple-fancy indexing for color, you can only set numerical" - "values since this sets the RGBA array data directly." - ) - - if len(key) != 2: - raise ValueError( - "fancy indexing for colors must be 2-dimension, i.e. [n_datapoints, RGBA]" - ) - - # set the user passed data directly - self.buffer.data[key] = value - - # update range - # first slice obj is going to be the indexing so use key[0] - # key[1] is going to be RGBA so get rid of it to pass to _update_range - # _key = cleanup_slice(key[0], self._upper_bound) - self._update_range(key) - self._feature_changed(key, value) - return - - elif isinstance(key, np.ndarray): - key = cleanup_array_slice(key, self._upper_bound) - if key is None: - return - - indices = key - - else: - raise TypeError( - "Graphic features only support integer and numerical fancy indexing" - ) - - new_data_size = len(indices) - - if not isinstance(value, np.ndarray): - color = np.array(pygfx.Color(value)) # pygfx color parser - # make it of shape [n_colors_modify, 4] - new_colors = np.repeat( - np.array([color]).astype(np.float32), new_data_size, axis=0 - ) - - # if already a numpy array - elif isinstance(value, np.ndarray): - # if a single color provided as numpy array - if value.shape == (4,): - new_colors = value.astype(np.float32) - # if there are more than 1 datapoint color to modify - if new_data_size > 1: - new_colors = np.repeat( - np.array([new_colors]).astype(np.float32), new_data_size, axis=0 - ) - - elif value.ndim == 2: - if value.shape[1] != 4 and value.shape[0] != new_data_size: - raise ValueError( - "numpy array passed to color must be of shape (4,) or (n_colors_modify, 4)" - ) - # if there is a single datapoint to change color of but user has provided shape [1, 4] - if new_data_size == 1: - new_colors = value.ravel().astype(np.float32) - else: - new_colors = value.astype(np.float32) - - else: - raise ValueError( - "numpy array passed to color must be of shape (4,) or (n_colors_modify, 4)" - ) - - self.buffer.data[key] = new_colors - - self._update_range(key) - self._feature_changed(key, new_colors) - - def _update_range(self, key): - self._update_range_indices(key) - - def _feature_changed(self, key, new_data): - key = cleanup_slice(key, self._upper_bound) - if isinstance(key, int): - indices = [key] - elif isinstance(key, slice): - indices = range(key.start, key.stop, key.step) - elif isinstance(key, np.ndarray): - indices = key - else: - raise TypeError("feature changed key must be slice or int") - - pick_info = { - "index": indices, - "collection-index": self._collection_index, - "world_object": self._parent.world_object, - "new_data": new_data, - } - - event_data = FeatureEvent(type="colors", pick_info=pick_info) - - self._call_event_handlers(event_data) - - def __repr__(self) -> str: - s = f"ColorsFeature for {self._parent}. Call `.colors()` to get values." - return s - - -class CmapFeature(ColorFeature): - """ - Indexable colormap feature, mostly wraps colors and just provides a way to set colormaps. - - Same event pick info as :class:`ColorFeature` - """ - - def __init__(self, parent, colors, cmap_name: str, cmap_values: np.ndarray): - super(ColorFeature, self).__init__(parent, colors) - - self._cmap_name = cmap_name - self._cmap_values = cmap_values - - def __setitem__(self, key, cmap_name): - key = cleanup_slice(key, self._upper_bound) - if not isinstance(key, (slice, np.ndarray)): - raise TypeError( - "Cannot set cmap on single indices, must pass a slice object, " - "numpy.ndarray or set it on the entire data." - ) - - if isinstance(key, slice): - n_colors = len(range(key.start, key.stop, key.step)) - - else: - # numpy array - n_colors = key.size - - colors = parse_cmap_values( - n_colors=n_colors, cmap_name=cmap_name, cmap_values=self._cmap_values - ) - - self._cmap_name = cmap_name - super(CmapFeature, self).__setitem__(key, colors) - - @property - def name(self) -> str: - return self._cmap_name - - @property - def values(self) -> np.ndarray: - return self._cmap_values - - @values.setter - def values(self, values: np.ndarray): - if not isinstance(values, np.ndarray): - values = np.array(values) - - colors = parse_cmap_values( - n_colors=self().shape[0], cmap_name=self._cmap_name, cmap_values=values - ) - - self._cmap_values = values - - super(CmapFeature, self).__setitem__(slice(None), colors) - - def __repr__(self) -> str: - s = f"CmapFeature for {self._parent}, to get name or values: `.cmap.name`, `.cmap.values`" - return s - - -class ImageCmapFeature(GraphicFeature): - """ - Colormap for :class:`ImageGraphic`. - - .cmap() returns the Texture buffer for the cmap. - - .cmap.name returns the cmap name as a str. - - **event pick info:** - - ================ =================== =============== - key type description - ================ =================== =============== - "index" ``None`` not used - "name" ``str`` colormap name - "world_object" pygfx.WorldObject world object - "vmin" ``float`` minimum value - "vmax" ``float`` maximum value - ================ =================== =============== - - """ - - def __init__(self, parent, cmap: str): - cmap_texture_view = get_cmap_texture(cmap) - super(ImageCmapFeature, self).__init__(parent, cmap_texture_view) - self._name = cmap - - def _set(self, cmap_name: str): - if self._parent.data().ndim > 2: - return - - self._parent.world_object.material.map.data[:] = make_colors(256, cmap_name) - self._parent.world_object.material.map.update_range((0, 0, 0), size=(256, 1, 1)) - self._name = cmap_name - - self._feature_changed(key=None, new_data=self._name) - - @property - def name(self) -> str: - return self._name - - @property - def vmin(self) -> float: - """Minimum contrast limit.""" - return self._parent.world_object.material.clim[0] - - @vmin.setter - def vmin(self, value: float): - """Minimum contrast limit.""" - self._parent.world_object.material.clim = ( - value, - self._parent.world_object.material.clim[1], - ) - self._feature_changed(key=None, new_data=None) - - @property - def vmax(self) -> float: - """Maximum contrast limit.""" - return self._parent.world_object.material.clim[1] - - @vmax.setter - def vmax(self, value: float): - """Maximum contrast limit.""" - self._parent.world_object.material.clim = ( - self._parent.world_object.material.clim[0], - value, - ) - self._feature_changed(key=None, new_data=None) - - def reset_vmin_vmax(self): - """Reset vmin vmax values based on current data""" - self.vmin, self.vmax = quick_min_max(self._parent.data()) - - def _feature_changed(self, key, new_data): - # this is a non-indexable feature so key=None - - pick_info = { - "index": None, - "world_object": self._parent.world_object, - "name": self._name, - "vmin": self.vmin, - "vmax": self.vmax, - } - - event_data = FeatureEvent(type="cmap", pick_info=pick_info) - - self._call_event_handlers(event_data) - - def __repr__(self) -> str: - s = f"ImageCmapFeature for {self._parent}. Use `.cmap.name` to get str name of cmap." - return s - - -class HeatmapCmapFeature(ImageCmapFeature): - """ - Colormap for :class:`HeatmapGraphic` - - Same event pick info as :class:`ImageCmapFeature` - """ - - def _set(self, cmap_name: str): - # in heatmap we use one material for all ImageTiles - self._parent._material.map.data[:] = make_colors(256, cmap_name) - self._parent._material.map.update_range((0, 0, 0), size=(256, 1, 1)) - self._name = cmap_name - - self._feature_changed(key=None, new_data=self.name) - - @property - def vmin(self) -> float: - """Minimum contrast limit.""" - return self._parent._material.clim[0] - - @vmin.setter - def vmin(self, value: float): - """Minimum contrast limit.""" - self._parent._material.clim = (value, self._parent._material.clim[1]) - - @property - def vmax(self) -> float: - """Maximum contrast limit.""" - return self._parent._material.clim[1] - - @vmax.setter - def vmax(self, value: float): - """Maximum contrast limit.""" - self._parent._material.clim = (self._parent._material.clim[0], value) \ No newline at end of file diff --git a/fastplotlib/graphics/_features/_data.py b/fastplotlib/graphics/_features/_data.py deleted file mode 100644 index 23e80b470..000000000 --- a/fastplotlib/graphics/_features/_data.py +++ /dev/null @@ -1,221 +0,0 @@ -from typing import * - -import numpy as np - -import pygfx - -from ._base import ( - GraphicFeatureIndexable, - cleanup_slice, - FeatureEvent, - to_gpu_supported_dtype, - cleanup_array_slice, -) - - -class PointsDataFeature(GraphicFeatureIndexable): - """ - Access to the vertex buffer data shown in the graphic. - Supports fancy indexing if the data array also supports it. - """ - - def __init__(self, parent, data: Any, collection_index: int = None): - data = self._fix_data(data, parent) - super(PointsDataFeature, self).__init__( - parent, data, collection_index=collection_index - ) - - @property - def buffer(self) -> pygfx.Buffer: - return self._parent.world_object.geometry.positions - - def __getitem__(self, item): - return self.buffer.data[item] - - def _fix_data(self, data, parent): - graphic_type = parent.__class__.__name__ - - data = to_gpu_supported_dtype(data) - - if data.ndim == 1: - # for scatter if we receive just 3 points in a 1d array, treat it as just a single datapoint - # this is different from fix_data for LineGraphic since there we assume that a 1d array - # is just y-values - if graphic_type == "ScatterGraphic": - data = np.array([data]) - elif graphic_type == "LineGraphic": - data = np.dstack([np.arange(data.size, dtype=data.dtype), data])[0] - - if data.shape[1] != 3: - if data.shape[1] != 2: - raise ValueError(f"Must pass 1D, 2D or 3D data to {graphic_type}") - - # zeros for z - zs = np.zeros(data.shape[0], dtype=data.dtype) - - data = np.dstack([data[:, 0], data[:, 1], zs])[0] - - return data - - def __setitem__(self, key, value): - if isinstance(key, np.ndarray): - # make sure 1D array of int or boolean - key = cleanup_array_slice(key, self._upper_bound) - - # put data into right shape if they're only indexing datapoints - if isinstance(key, (slice, int, np.ndarray, np.integer)): - value = self._fix_data(value, self._parent) - # otherwise assume that they have the right shape - # numpy will throw errors if it can't broadcast - - self.buffer.data[key] = value - self._update_range(key) - # avoid creating dicts constantly if there are no events to handle - if len(self._event_handlers) > 0: - self._feature_changed(key, value) - - def _update_range(self, key): - self._update_range_indices(key) - - def _feature_changed(self, key, new_data): - if key is not None: - key = cleanup_slice(key, self._upper_bound) - if isinstance(key, (int, np.integer)): - indices = [key] - elif isinstance(key, slice): - indices = range(key.start, key.stop, key.step) - elif isinstance(key, np.ndarray): - indices = key - elif key is None: - indices = None - - pick_info = { - "index": indices, - "collection-index": self._collection_index, - "world_object": self._parent.world_object, - "new_data": new_data, - } - - event_data = FeatureEvent(type="data", pick_info=pick_info) - - self._call_event_handlers(event_data) - - def __repr__(self) -> str: - s = f"PointsDataFeature for {self._parent}, call `.data()` to get values" - return s - - -class ImageDataFeature(GraphicFeatureIndexable): - """ - Access to the Texture buffer shown in an ImageGraphic. - """ - - def __init__(self, parent, data: Any): - if data.ndim not in (2, 3): - raise ValueError( - "`data.ndim` must be 2 or 3, ImageGraphic data shape must be " - "``[x_dim, y_dim]`` or ``[x_dim, y_dim, rgb]``" - ) - - super(ImageDataFeature, self).__init__(parent, data) - - @property - def buffer(self) -> pygfx.Texture: - """Texture buffer for the image data""" - return self._parent.world_object.geometry.grid - - def update_gpu(self): - """Update the GPU with the buffer""" - self._update_range(None) - - def __call__(self, *args, **kwargs): - return self.buffer.data - - def __getitem__(self, item): - return self.buffer.data[item] - - def __setitem__(self, key, value): - # make sure float32 - value = to_gpu_supported_dtype(value) - - self.buffer.data[key] = value - self._update_range(key) - - # avoid creating dicts constantly if there are no events to handle - if len(self._event_handlers) > 0: - self._feature_changed(key, value) - - def _update_range(self, key): - self.buffer.update_range((0, 0, 0), size=self.buffer.size) - - def _feature_changed(self, key, new_data): - if key is not None: - key = cleanup_slice(key, self._upper_bound) - if isinstance(key, int): - indices = [key] - elif isinstance(key, slice): - indices = range(key.start, key.stop, key.step) - elif key is None: - indices = None - - pick_info = { - "index": indices, - "world_object": self._parent.world_object, - "new_data": new_data, - } - - event_data = FeatureEvent(type="data", pick_info=pick_info) - - self._call_event_handlers(event_data) - - def __repr__(self) -> str: - s = f"ImageDataFeature for {self._parent}, call `.data()` to get values" - return s - - -class HeatmapDataFeature(ImageDataFeature): - @property - def buffer(self) -> List[pygfx.Texture]: - """list of Texture buffer for the image data""" - return [img.geometry.grid for img in self._parent.world_object.children] - - def __getitem__(self, item): - return self._data[item] - - def __call__(self, *args, **kwargs): - return self._data - - def __setitem__(self, key, value): - # make sure supported type, not float64 etc. - value = to_gpu_supported_dtype(value) - - self._data[key] = value - self._update_range(key) - - # avoid creating dicts constantly if there are no events to handle - if len(self._event_handlers) > 0: - self._feature_changed(key, value) - - def _update_range(self, key): - for buffer in self.buffer: - buffer.update_range((0, 0, 0), size=buffer.size) - - def _feature_changed(self, key, new_data): - if key is not None: - key = cleanup_slice(key, self._upper_bound) - if isinstance(key, int): - indices = [key] - elif isinstance(key, slice): - indices = range(key.start, key.stop, key.step) - elif key is None: - indices = None - - pick_info = { - "index": indices, - "world_object": self._parent.world_object, - "new_data": new_data, - } - - event_data = FeatureEvent(type="data", pick_info=pick_info) - - self._call_event_handlers(event_data) diff --git a/fastplotlib/graphics/_features/_present.py b/fastplotlib/graphics/_features/_present.py deleted file mode 100644 index 6fbf93b48..000000000 --- a/fastplotlib/graphics/_features/_present.py +++ /dev/null @@ -1,72 +0,0 @@ -from pygfx import Scene, Group - -from ._base import GraphicFeature, FeatureEvent - - -class PresentFeature(GraphicFeature): - """ - Toggles if the object is present in the scene, different from visible. - Useful for computing bounding boxes from the Scene to only include graphics - that are present. - - **event pick info:** - - ==================== ======================== ========================================================================= - key type description - ==================== ======================== ========================================================================= - "index" ``None`` not used - "new_data" ``bool`` new data, ``True`` or ``False`` - "collection-index" int the index of the graphic within the collection that triggered the event - "world_object" pygfx.WorldObject world object - ==================== ======================== ========================================================================= - """ - - def __init__(self, parent, present: bool = True, collection_index: int = False): - self._scene = None - super(PresentFeature, self).__init__(parent, present, collection_index) - - def _set(self, present: bool): - present = self._parse_set_value(present) - - i = 0 - wo = self._parent.world_object - while not isinstance(self._scene, (Group, Scene)): - wo_parent = wo.parent - self._scene = wo_parent - wo = wo_parent - i += 1 - - if i > 100: - raise RecursionError( - "Exceeded scene graph depth threshold, cannot find Scene associated with" - "this graphic." - ) - - if present: - if self._parent.world_object not in self._scene.children: - self._scene.add(self._parent.world_object) - - else: - if self._parent.world_object in self._scene.children: - self._scene.remove(self._parent.world_object) - - self._data = present - self._feature_changed(key=None, new_data=present) - - def _feature_changed(self, key, new_data): - # this is a non-indexable feature so key=None - - pick_info = { - "index": None, - "collection-index": self._collection_index, - "world_object": self._parent.world_object, - "new_data": new_data, - } - - event_data = FeatureEvent(type="present", pick_info=pick_info) - - self._call_event_handlers(event_data) - - def __repr__(self) -> str: - s = f"PresentFeature for {self._parent}, call `.present()` to get values" - return s diff --git a/fastplotlib/graphics/_features/_selection_features.py b/fastplotlib/graphics/_features/_selection_features.py deleted file mode 100644 index 9a2696f7c..000000000 --- a/fastplotlib/graphics/_features/_selection_features.py +++ /dev/null @@ -1,323 +0,0 @@ -from typing import Tuple, Union, Any - -import numpy as np - -from ._base import GraphicFeature, FeatureEvent - - -""" -positions for indexing the BoxGeometry to set the "width" and "size" of the box -hacky, but I don't think we can morph meshes in pygfx yet: https://github.com/pygfx/pygfx/issues/346 -""" - -x_right = np.array( - [ - True, - True, - True, - True, - False, - False, - False, - False, - False, - True, - False, - True, - True, - False, - True, - False, - False, - True, - False, - True, - True, - False, - True, - False, - ] -) - -x_left = np.array( - [ - False, - False, - False, - False, - True, - True, - True, - True, - True, - False, - True, - False, - False, - True, - False, - True, - True, - False, - True, - False, - False, - True, - False, - True, - ] -) - -y_top = np.array( - [ - False, - True, - False, - True, - False, - True, - False, - True, - True, - True, - True, - True, - False, - False, - False, - False, - False, - False, - True, - True, - False, - False, - True, - True, - ] -) - -y_bottom = np.array( - [ - True, - False, - True, - False, - True, - False, - True, - False, - False, - False, - False, - False, - True, - True, - True, - True, - True, - True, - False, - False, - True, - True, - False, - False, - ] -) - - -class LinearSelectionFeature(GraphicFeature): - # A bit much to have a class for this but this allows it to integrate with the fastplotlib callback system - """ - Manages the linear selection and callbacks - - **event pick info** - - =================== =============================== ================================================================================================= - key type selection - =================== =============================== ================================================================================================= - "selected_index" ``int`` the graphic data index that corresponds to the selector position - "world_object" ``pygfx.WorldObject`` pygfx WorldObject - "new_data" ``numpy.ndarray`` or ``None`` the new selector position in world coordinates, not necessarily the same as "selected_index" - "graphic" ``Graphic`` the selector graphic - "delta" ``numpy.ndarray`` the delta vector of the graphic in NDC - "pygfx_event" ``pygfx.Event`` pygfx Event - =================== =============================== ================================================================================================= - - """ - - def __init__(self, parent, axis: str, value: float, limits: Tuple[int, int]): - super(LinearSelectionFeature, self).__init__(parent, data=value) - - self._axis = axis - self._limits = limits - - def _set(self, value: float): - if not (self._limits[0] <= value <= self._limits[1]): - return - - if self._axis == "x": - self._parent.position_x = value - else: - self._parent.position_y = value - - self._data = value - self._feature_changed(key=None, new_data=value) - - def _feature_changed(self, key: Union[int, slice, Tuple[slice]], new_data: Any): - if len(self._event_handlers) < 1: - return - - if self._parent.parent is not None: - g_ix = self._parent.get_selected_index() - else: - g_ix = None - - # get pygfx event and reset it - pygfx_ev = self._parent._pygfx_event - self._parent._pygfx_event = None - - pick_info = { - "world_object": self._parent.world_object, - "new_data": new_data, - "selected_index": g_ix, - "graphic": self._parent, - "pygfx_event": pygfx_ev, - "delta": self._parent.delta, - } - - event_data = FeatureEvent(type="selection", pick_info=pick_info) - - self._call_event_handlers(event_data) - - def __repr__(self) -> str: - s = f"LinearSelectionFeature for {self._parent}" - return s - - -class LinearRegionSelectionFeature(GraphicFeature): - """ - Feature for a linearly bounding region - - **event pick info** - - ===================== =============================== ======================================================================================= - key type description - ===================== =============================== ======================================================================================= - "selected_indices" ``numpy.ndarray`` or ``None`` selected graphic data indices - "world_object" ``pygfx.WorldObject`` pygfx World Object - "new_data" ``(float, float)`` current bounds in world coordinates, NOT necessarily the same as "selected_indices". - "graphic" ``Graphic`` the selection graphic - "delta" ``numpy.ndarray`` the delta vector of the graphic in NDC - "pygfx_event" ``pygfx.Event`` pygfx Event - "selected_data" ``numpy.ndarray`` or ``None`` selected graphic data - "move_info" ``MoveInfo`` last position and event source (pygfx.Mesh or pygfx.Line) - ===================== =============================== ======================================================================================= - - """ - - def __init__( - self, parent, selection: Tuple[int, int], axis: str, limits: Tuple[int, int] - ): - super(LinearRegionSelectionFeature, self).__init__(parent, data=selection) - - self._axis = axis - self._limits = limits - - self._set(selection) - - @property - def axis(self) -> str: - """one of "x" | "y" """ - return self._axis - - def _set(self, value: Tuple[float, float]): - # sets new bounds - if not isinstance(value, tuple): - raise TypeError( - "Bounds must be a tuple in the form of `(min_bound, max_bound)`, " - "where `min_bound` and `max_bound` are numeric values." - ) - - # make sure bounds not exceeded - for v in value: - if not (self._limits[0] <= v <= self._limits[1]): - return - - # make sure `selector width >= 2`, left edge must not move past right edge! - # or bottom edge must not move past top edge! - # has to be at least 2 otherwise can't join datapoints for lines - if not (value[1] - value[0]) >= 2: - return - - if self.axis == "x": - # change left x position of the fill mesh - self._parent.fill.geometry.positions.data[x_left, 0] = value[0] - - # change right x position of the fill mesh - self._parent.fill.geometry.positions.data[x_right, 0] = value[1] - - # change x position of the left edge line - self._parent.edges[0].geometry.positions.data[:, 0] = value[0] - - # change x position of the right edge line - self._parent.edges[1].geometry.positions.data[:, 0] = value[1] - - elif self.axis == "y": - # change bottom y position of the fill mesh - self._parent.fill.geometry.positions.data[y_bottom, 1] = value[0] - - # change top position of the fill mesh - self._parent.fill.geometry.positions.data[y_top, 1] = value[1] - - # change y position of the bottom edge line - self._parent.edges[0].geometry.positions.data[:, 1] = value[0] - - # change y position of the top edge line - self._parent.edges[1].geometry.positions.data[:, 1] = value[1] - - self._data = value # (value[0], value[1]) - - # send changes to GPU - self._parent.fill.geometry.positions.update_range() - - self._parent.edges[0].geometry.positions.update_range() - self._parent.edges[1].geometry.positions.update_range() - - # calls any events - self._feature_changed(key=None, new_data=value) - - def _feature_changed(self, key: Union[int, slice, Tuple[slice]], new_data: Any): - if len(self._event_handlers) < 1: - return - - if self._parent.parent is not None: - selected_ixs = self._parent.get_selected_indices() - selected_data = self._parent.get_selected_data() - else: - selected_ixs = None - selected_data = None - - # get pygfx event and reset it - pygfx_ev = self._parent._pygfx_event - self._parent._pygfx_event = None - - pick_info = { - "world_object": self._parent.world_object, - "new_data": new_data, - "selected_indices": selected_ixs, - "selected_data": selected_data, - "graphic": self._parent, - "delta": self._parent.delta, - "pygfx_event": pygfx_ev, - "move_info": self._parent._move_info, - } - - event_data = FeatureEvent(type="selection", pick_info=pick_info) - - self._call_event_handlers(event_data) - - def __repr__(self) -> str: - s = f"LinearRegionSelectionFeature for {self._parent}" - return s diff --git a/fastplotlib/graphics/_features/_sizes.py b/fastplotlib/graphics/_features/_sizes.py deleted file mode 100644 index e951064e4..000000000 --- a/fastplotlib/graphics/_features/_sizes.py +++ /dev/null @@ -1,112 +0,0 @@ -from typing import Any - -import numpy as np - -import pygfx - -from ._base import ( - GraphicFeatureIndexable, - cleanup_slice, - FeatureEvent, - to_gpu_supported_dtype, - cleanup_array_slice, -) - - -class PointsSizesFeature(GraphicFeatureIndexable): - """ - Access to the vertex buffer data shown in the graphic. - Supports fancy indexing if the data array also supports it. - """ - - def __init__(self, parent, sizes: Any, collection_index: int = None): - sizes = self._fix_sizes(sizes, parent) - super(PointsSizesFeature, self).__init__( - parent, sizes, collection_index=collection_index - ) - - @property - def buffer(self) -> pygfx.Buffer: - return self._parent.world_object.geometry.sizes - - def __getitem__(self, item): - return self.buffer.data[item] - - def _fix_sizes(self, sizes, parent): - graphic_type = parent.__class__.__name__ - - n_datapoints = parent.data().shape[0] - if not isinstance(sizes, (list, tuple, np.ndarray)): - sizes = np.full(n_datapoints, sizes, dtype=np.float32) # force it into a float to avoid weird gpu errors - elif not isinstance(sizes, np.ndarray): # if it's not a ndarray already, make it one - sizes = np.array(sizes, dtype=np.float32) # read it in as a numpy.float32 - if (sizes.ndim != 1) or (sizes.size != parent.data().shape[0]): - raise ValueError( - f"sequence of `sizes` must be 1 dimensional with " - f"the same length as the number of datapoints" - ) - - sizes = to_gpu_supported_dtype(sizes) - - if any(s < 0 for s in sizes): - raise ValueError("All sizes must be positive numbers greater than or equal to 0.0.") - - if sizes.ndim == 1: - if graphic_type == "ScatterGraphic": - sizes = np.array(sizes) - else: - raise ValueError(f"Sizes must be an array of shape (n,) where n == the number of data points provided.\ - Received shape={sizes.shape}.") - - return np.array(sizes) - - def __setitem__(self, key, value): - if isinstance(key, np.ndarray): - # make sure 1D array of int or boolean - key = cleanup_array_slice(key, self._upper_bound) - - # put sizes into right shape if they're only indexing datapoints - if isinstance(key, (slice, int, np.ndarray, np.integer)): - value = self._fix_sizes(value, self._parent) - # otherwise assume that they have the right shape - # numpy will throw errors if it can't broadcast - - if value.size != self.buffer.data[key].size: - raise ValueError(f"{value.size} is not equal to buffer size {self.buffer.data[key].size}.\ - If you want to set size to a non-scalar value, make sure it's the right length!") - - self.buffer.data[key] = value - self._update_range(key) - # avoid creating dicts constantly if there are no events to handle - if len(self._event_handlers) > 0: - self._feature_changed(key, value) - - def _update_range(self, key): - self._update_range_indices(key) - - def _feature_changed(self, key, new_data): - if key is not None: - key = cleanup_slice(key, self._upper_bound) - if isinstance(key, (int, np.integer)): - indices = [key] - elif isinstance(key, slice): - indices = range(key.start, key.stop, key.step) - elif isinstance(key, np.ndarray): - indices = key - elif key is None: - indices = None - - pick_info = { - "index": indices, - "collection-index": self._collection_index, - "world_object": self._parent.world_object, - "new_data": new_data, - } - - event_data = FeatureEvent(type="sizes", pick_info=pick_info) - - self._call_event_handlers(event_data) - - def __repr__(self) -> str: - s = f"PointsSizesFeature for {self._parent}, call `.sizes()` to get values" - return s diff --git a/fastplotlib/graphics/_features/_thickness.py b/fastplotlib/graphics/_features/_thickness.py deleted file mode 100644 index f9190f0b1..000000000 --- a/fastplotlib/graphics/_features/_thickness.py +++ /dev/null @@ -1,46 +0,0 @@ -from ._base import GraphicFeature, FeatureEvent - - -class ThicknessFeature(GraphicFeature): - """ - Used by Line graphics for line material thickness. - - **event pick info:** - - ==================== ======================== ========================================================================= - key type description - ==================== ======================== ========================================================================= - "index" ``None`` not used - "new_data" ``float`` new thickness value - "collection-index" int the index of the graphic within the collection that triggered the event - "world_object" pygfx.WorldObject world object - ==================== ======================== ========================================================================= - """ - - def __init__(self, parent, thickness: float): - self._scene = None - super(ThicknessFeature, self).__init__(parent, thickness) - - def _set(self, value: float): - value = self._parse_set_value(value) - - self._parent.world_object.material.thickness = value - self._feature_changed(key=None, new_data=value) - - def _feature_changed(self, key, new_data): - # this is a non-indexable feature so key=None - - pick_info = { - "index": None, - "collection-index": self._collection_index, - "world_object": self._parent.world_object, - "new_data": new_data, - } - - event_data = FeatureEvent(type="thickness", pick_info=pick_info) - - self._call_event_handlers(event_data) - - def __repr__(self) -> str: - s = f"ThicknessFeature for {self._parent}, call `.thickness()` to get value" - return s diff --git a/fastplotlib/graphics/_positions_base.py b/fastplotlib/graphics/_positions_base.py new file mode 100644 index 000000000..4a4f5a797 --- /dev/null +++ b/fastplotlib/graphics/_positions_base.py @@ -0,0 +1,155 @@ +from typing import Any + +import numpy as np + +import pygfx +from ._base import Graphic +from .features import ( + VertexPositions, + VertexColors, + UniformColor, + VertexCmap, + PointsSizesFeature, + SizeSpace, +) + + +class PositionsGraphic(Graphic): + """Base class for LineGraphic and ScatterGraphic""" + + @property + def data(self) -> VertexPositions: + """Get or set the graphic's data""" + return self._data + + @data.setter + def data(self, value): + self._data[:] = value + + @property + def colors(self) -> VertexColors | pygfx.Color: + """Get or set the colors""" + if isinstance(self._colors, VertexColors): + return self._colors + + elif isinstance(self._colors, UniformColor): + return self._colors.value + + @colors.setter + def colors(self, value: str | np.ndarray | tuple[float] | list[float] | list[str]): + if isinstance(self._colors, VertexColors): + self._colors[:] = value + + elif isinstance(self._colors, UniformColor): + self._colors.set_value(self, value) + + @property + def cmap(self) -> VertexCmap: + """ + Control the cmap, cmap transform, or cmap alpha + + For supported colormaps see the ``cmap`` library catalogue: https://cmap-docs.readthedocs.io/en/stable/catalog/ + """ + return self._cmap + + @cmap.setter + def cmap(self, name: str): + if self._cmap is None: + raise BufferError("Cannot use cmap with uniform_colors=True") + + self._cmap[:] = name + + @property + def size_space(self): + """ + The coordinate space in which the size is expressed ('screen', 'world', 'model') + + See https://docs.pygfx.org/stable/_autosummary/utils/utils/enums/pygfx.utils.enums.CoordSpace.html#pygfx.utils.enums.CoordSpace for available options. + """ + return self._size_space.value + + @size_space.setter + def size_space(self, value: str): + self._size_space.set_value(self, value) + + def __init__( + self, + data: Any, + colors: str | np.ndarray | tuple[float] | list[float] | list[str] = "w", + uniform_color: bool = False, + alpha: float = 1.0, + cmap: str | VertexCmap = None, + cmap_transform: np.ndarray = None, + isolated_buffer: bool = True, + size_space: str = "screen", + *args, + **kwargs, + ): + if isinstance(data, VertexPositions): + self._data = data + else: + self._data = VertexPositions(data, isolated_buffer=isolated_buffer) + + if cmap_transform is not None and cmap is None: + raise ValueError("must pass `cmap` if passing `cmap_transform`") + + if cmap is not None: + # if a cmap is specified it overrides colors argument + if uniform_color: + raise TypeError("Cannot use cmap if uniform_color=True") + + if isinstance(cmap, str): + # make colors from cmap + if isinstance(colors, VertexColors): + # share buffer with existing colors instance for the cmap + self._colors = colors + self._colors._shared += 1 + else: + # create vertex colors buffer + self._colors = VertexColors("w", n_colors=self._data.value.shape[0]) + # make cmap using vertex colors buffer + self._cmap = VertexCmap( + self._colors, + cmap_name=cmap, + transform=cmap_transform, + alpha=alpha, + ) + elif isinstance(cmap, VertexCmap): + # use existing cmap instance + self._cmap = cmap + self._colors = cmap._vertex_colors + else: + raise TypeError( + "`cmap` argument must be a cmap name or an existing `VertexCmap` instance" + ) + else: + # no cmap given + if isinstance(colors, VertexColors): + # share buffer with existing colors instance + self._colors = colors + self._colors._shared += 1 + # blank colormap instance + self._cmap = VertexCmap( + self._colors, cmap_name=None, transform=None, alpha=alpha + ) + else: + if uniform_color: + if not isinstance(colors, str): # not a single color + if not len(colors) in [3, 4]: # not an RGB(A) array + raise TypeError( + "must pass a single color if using `uniform_colors=True`" + ) + self._colors = UniformColor(colors, alpha=alpha) + self._cmap = None + else: + self._colors = VertexColors( + colors, + n_colors=self._data.value.shape[0], + alpha=alpha, + ) + self._cmap = VertexCmap( + self._colors, cmap_name=None, transform=None, alpha=alpha + ) + + self._size_space = SizeSpace(size_space) + super().__init__(*args, **kwargs) diff --git a/fastplotlib/graphics/features/__init__.py b/fastplotlib/graphics/features/__init__.py new file mode 100644 index 000000000..18bcf5187 --- /dev/null +++ b/fastplotlib/graphics/features/__init__.py @@ -0,0 +1,71 @@ +from ._positions_graphics import ( + VertexColors, + UniformColor, + UniformSize, + SizeSpace, + Thickness, + VertexPositions, + PointsSizesFeature, + VertexCmap, +) +from ._image import ( + TextureArray, + ImageCmap, + ImageVmin, + ImageVmax, + ImageInterpolation, + ImageCmapInterpolation, +) +from ._base import ( + GraphicFeature, + BufferManager, + GraphicFeatureEvent, + to_gpu_supported_dtype, +) + +from ._text import ( + TextData, + FontSize, + TextFaceColor, + TextOutlineColor, + TextOutlineThickness, +) + +from ._selection_features import ( + LinearSelectionFeature, + LinearRegionSelectionFeature, + RectangleSelectionFeature, +) +from ._common import Name, Offset, Rotation, Visible, Deleted + + +__all__ = [ + "VertexColors", + "UniformColor", + "UniformSize", + "SizeSpace", + "Thickness", + "VertexPositions", + "PointsSizesFeature", + "VertexCmap", + "TextureArray", + "ImageCmap", + "ImageVmin", + "ImageVmax", + "ImageInterpolation", + "ImageCmapInterpolation", + "TextData", + "FontSize", + "TextFaceColor", + "TextOutlineColor", + "TextOutlineThickness", + "LinearSelectionFeature", + "LinearRegionSelectionFeature", + "RectangleSelectionFeature", + "Name", + "Offset", + "Rotation", + "Visible", + "Deleted", + "GraphicFeatureEvent", +] diff --git a/fastplotlib/graphics/features/_base.py b/fastplotlib/graphics/features/_base.py new file mode 100644 index 000000000..d32904ae5 --- /dev/null +++ b/fastplotlib/graphics/features/_base.py @@ -0,0 +1,351 @@ +from warnings import warn +from typing import Literal + +import numpy as np +from numpy.typing import NDArray + +from wgpu.gui.base import log_exception + +import pygfx + + +def to_gpu_supported_dtype(array): + """ + convert input array to float32 numpy array + """ + if isinstance(array, np.ndarray): + if not array.dtype == np.float32: + warn(f"casting {array.dtype} array to float32") + return array.astype(np.float32) + return array + + # try to make a numpy array from it, should not copy, tested with jax arrays + return np.asarray(array).astype(np.float32) + + +class GraphicFeatureEvent(pygfx.Event): + """ + **All event instances have the following attributes** + + +------------+-------------+-----------------------------------------------+ + | attribute | type | description | + +============+=============+===============================================+ + | type | str | "colors" - name of the event | + +------------+-------------+-----------------------------------------------+ + | graphic | Graphic | graphic instance that the event is from | + +------------+-------------+-----------------------------------------------+ + | info | dict | event info dictionary | + +------------+-------------+-----------------------------------------------+ + | target | WorldObject | pygfx rendering engine object for the graphic | + +------------+-------------+-----------------------------------------------+ + | time_stamp | float | time when the event occurred, in ms | + +------------+-------------+-----------------------------------------------+ + + """ + + def __init__(self, type: str, info: dict): + super().__init__(type=type) + self.info = info + + +class GraphicFeature: + def __init__(self, **kwargs): + self._event_handlers = list() + self._block_events = False + + # used by @block_reentrance decorator to block re-entrance into set_value functions + self._reentrant_block: bool = False + + @property + def value(self): + """Graphic Feature value, must be implemented in subclass""" + raise NotImplemented + + def set_value(self, graphic, value: float): + """Graphic Feature value setter, must be implemented in subclass""" + raise NotImplementedError + + def block_events(self, val: bool): + """ + Block all events from this feature + + Parameters + ---------- + val: bool + ``True`` or ``False`` + + """ + self._block_events = val + + def add_event_handler(self, handler: callable): + """ + Add an event handler. All added event handlers are called when this feature changes. + + Used by `Graphic` classes to add to their event handlers, not meant for users. Users + add handlers to Graphic instances only. + + The ``handler`` must accept a :class:`.FeatureEvent` as the first and only argument. + + Parameters + ---------- + handler: callable + a function to call when this feature changes + + """ + if not callable(handler): + raise TypeError("event handler must be callable") + + if handler in self._event_handlers: + warn(f"Event handler {handler} is already registered.") + return + + self._event_handlers.append(handler) + + def remove_event_handler(self, handler: callable): + """ + Remove a registered event ``handler``. + + Parameters + ---------- + handler: callable + event handler to remove + + """ + if handler not in self._event_handlers: + raise KeyError(f"event handler {handler} not registered.") + + self._event_handlers.remove(handler) + + def clear_event_handlers(self): + """Clear all event handlers""" + self._event_handlers.clear() + + def _call_event_handlers(self, event_data: GraphicFeatureEvent): + if self._block_events: + return + + for func in self._event_handlers: + with log_exception( + f"Error during handling {self.__class__.__name__} event" + ): + func(event_data) + + +class BufferManager(GraphicFeature): + """Smaller wrapper for pygfx.Buffer""" + + def __init__( + self, + data: NDArray | pygfx.Buffer, + buffer_type: Literal["buffer", "texture", "texture-array"] = "buffer", + isolated_buffer: bool = True, + texture_dim: int = 2, + **kwargs, + ): + super().__init__() + if isolated_buffer and not isinstance(data, pygfx.Resource): + # useful if data is read-only, example: memmaps + bdata = np.zeros(data.shape, dtype=data.dtype) + bdata[:] = data[:] + else: + # user's input array is used as the buffer + bdata = data + + if isinstance(data, pygfx.Resource): + # already a buffer, probably used for + # managing another BufferManager, example: VertexCmap manages VertexColors + self._buffer = data + elif buffer_type == "buffer": + self._buffer = pygfx.Buffer(bdata) + elif buffer_type == "texture": + # TODO: placeholder, not currently used since TextureArray is used specifically for Image graphics + self._buffer = pygfx.Texture(bdata, dim=texture_dim) + else: + raise ValueError( + "`data` must be a pygfx.Buffer instance or `buffer_type` must be one of: 'buffer' or 'texture'" + ) + + self._event_handlers: list[callable] = list() + + self._shared: int = 0 + + @property + def value(self) -> np.ndarray: + """numpy array object representing the data managed by this buffer""" + return self.buffer.data + + def set_value(self, graphic, value): + """Sets values on entire array""" + self[:] = value + + @property + def buffer(self) -> pygfx.Buffer | pygfx.Texture: + """managed buffer""" + return self._buffer + + @property + def shared(self) -> int: + """Number of graphics that share this buffer""" + return self._shared + + @property + def __array_interface__(self): + raise BufferError( + f"Cannot use graphic feature buffer as an array, use .value instead.\n" + f"Examples: line.data.value, line.colors.value, scatter.data.value, scatter.sizes.value" + ) + + def __getitem__(self, item): + return self.buffer.data[item] + + def __setitem__(self, key, value): + raise NotImplementedError + + def _parse_offset_size( + self, + key: int | slice | np.ndarray[int | bool] | list[bool | int], + upper_bound: int, + ): + """ + parse offset and size for first, i.e. n_datapoints, dimension + """ + if np.issubdtype(type(key), np.integer): + # simplest case, just an int + offset = key + size = 1 + + elif isinstance(key, slice): + # TODO: off-by-one sometimes when step is used + # the offset can be one to the left or the size + # is one extra so it's not really an issue for now + # parse slice + start, stop, step = key.indices(upper_bound) + + # account for backwards indexing + if (start > stop) and step < 0: + offset = stop + else: + offset = start + + # slice.indices will give -1 if None is passed + # which just means 0 here since buffers do not + # use negative indexing + offset = max(0, offset) + + # number of elements to upload + # this is indexing so do not add 1 + size = abs(stop - start) + + elif isinstance(key, (np.ndarray, list)): + if isinstance(key, list): + # convert to array + key = np.array(key) + + if not key.ndim == 1: + raise TypeError( + f"can only use 1D arrays for fancy indexing, you have passed a data with: {key.ndim} dimensions" + ) + + if key.dtype == bool: + # convert bool mask to integer indices + key = np.nonzero(key)[0] + + if not np.issubdtype(key.dtype, np.integer): + # fancy indexing doesn't make sense with non-integer types + raise TypeError( + f"can only using integer or booleans arrays for fancy indexing, your array is of type: {key.dtype}" + ) + + if key.size < 1: + # nothing to update + return + + # convert any negative integer indices to positive indices + key %= upper_bound + + # index of first element to upload + offset = key.min() + + # size range to upload + # add 1 because this is direct + # passing of indices, not a start:stop + size = np.ptp(key) + 1 + + else: + raise TypeError( + f"invalid key for indexing buffer: {key}\n" + f"valid ways to index buffers are using integers, slices, or fancy indexing with integers or bool" + ) + + return offset, size + + def _update_range( + self, + key: ( + int | slice | np.ndarray[int | bool] | list[bool | int] | tuple[slice, ...] + ), + ): + """ + Uses key from slicing to determine the offset and + size of the buffer to mark for upload to the GPU + """ + upper_bound = self.value.shape[0] + + if isinstance(key, tuple): + if any([k is Ellipsis for k in key]): + # let's worry about ellipsis later + raise TypeError("ellipses not supported for indexing buffers") + # if multiple dims are sliced, we only need the key for + # the first dimension corresponding to n_datapoints + key: int | np.ndarray[int | bool] | slice = key[0] + + offset, size = self._parse_offset_size(key, upper_bound) + self.buffer.update_range(offset=offset, size=size) + + def _emit_event(self, type: str, key, value): + if len(self._event_handlers) < 1: + return + + event_info = { + "key": key, + "value": value, + } + event = GraphicFeatureEvent(type, info=event_info) + + self._call_event_handlers(event) + + def __len__(self): + raise NotImplementedError + + def __repr__(self): + return f"{self.__class__.__name__} buffer data:\n" f"{self.value.__repr__()}" + + +def block_reentrance(set_value): + # decorator to block re-entrant set_value methods + # useful when creating complex, circular, bidirectional event graphs + def set_value_wrapper(self: GraphicFeature, graphic_or_key, value): + """ + wraps GraphicFeature.set_value + + self: GraphicFeature instance + + graphic_or_key: graphic, or key if a BufferManager + + value: the value passed to set_value() + """ + # set_value is already in the middle of an execution, block re-entrance + if self._reentrant_block: + return + try: + # block re-execution of set_value until it has *fully* finished executing + self._reentrant_block = True + set_value(self, graphic_or_key, value) + except Exception as exc: + # raise original exception + raise exc # set_value has raised. The line above and the lines 2+ steps below are probably more relevant! + finally: + # set_value has finished executing, now allow future executions + self._reentrant_block = False + + return set_value_wrapper diff --git a/fastplotlib/graphics/features/_common.py b/fastplotlib/graphics/features/_common.py new file mode 100644 index 000000000..71e979f77 --- /dev/null +++ b/fastplotlib/graphics/features/_common.py @@ -0,0 +1,181 @@ +import numpy as np + +from ._base import GraphicFeature, GraphicFeatureEvent, block_reentrance + + +class Name(GraphicFeature): + property_name = "name" + event_info_spec = [ + {"dict key": "value", "type": "str", "description": "user provided name"}, + ] + + def __init__(self, value: str): + """Graphic name""" + + self._value = value + super().__init__() + + @property + def value(self) -> str: + return self._value + + @block_reentrance + def set_value(self, graphic, value: str): + if not isinstance(value, str): + raise TypeError("`Graphic` name must be of type ") + + if graphic._plot_area is not None: + graphic._plot_area._check_graphic_name_exists(value) + + self._value = value + + event = GraphicFeatureEvent(type="name", info={"value": value}) + self._call_event_handlers(event) + + +class Offset(GraphicFeature): + property_name = "offset" + event_info_spec = [ + { + "dict key": "value", + "type": "np.ndarray[float, float, float]", + "description": "new offset (x, y, z)", + }, + ] + + def __init__(self, value: np.ndarray | list | tuple): + """Offset position of the graphic, [x, y, z]""" + + self._validate(value) + # initialize zeros array + self._value = np.zeros(3) + + # set values + self._value[:] = value + super().__init__() + + def _validate(self, value): + if not len(value) == 3: + raise ValueError("offset must be a list, tuple, or array of 3 float values") + + @property + def value(self) -> np.ndarray: + return self._value + + @block_reentrance + def set_value(self, graphic, value: np.ndarray | list | tuple): + self._validate(value) + value = np.asarray(value) + + graphic.world_object.world.position = value + + # sometimes there are transforms so get the final position value like this + value = graphic.world_object.world.position.copy() + + # set value of existing feature value array + self._value[:] = value + + event = GraphicFeatureEvent(type="offset", info={"value": value}) + self._call_event_handlers(event) + + +class Rotation(GraphicFeature): + property_name = "offset" + event_info_spec = [ + { + "dict key": "value", + "type": "np.ndarray[float, float, float, float]", + "description": "new rotation quaternion", + }, + ] + + def __init__(self, value: np.ndarray | list | tuple): + """Graphic rotation quaternion""" + + self._validate(value) + # create zeros array + self._value = np.zeros(4) + + self._value[:] = value + super().__init__() + + def _validate(self, value): + if not len(value) == 4: + raise ValueError( + "rotation quaternion must be a list, tuple, or array of 4 float values" + ) + + @property + def value(self) -> np.ndarray: + return self._value + + @block_reentrance + def set_value(self, graphic, value: np.ndarray | list | tuple): + self._validate(value) + value = np.asarray(value) + + graphic.world_object.world.rotation = value + + # get the actual final quaternion value, pygfx adjusts to make sure || q ||_2 == 1 + # i.e. pygfx checks to make sure norm 1 and other transforms + value = graphic.world_object.world.rotation.copy() + + # set value of existing feature value array + self._value[:] = value + + event = GraphicFeatureEvent(type="rotation", info={"value": value}) + self._call_event_handlers(event) + + +class Visible(GraphicFeature): + """Access or change the visibility.""" + + property_name = "offset" + event_info_spec = [ + {"dict key": "value", "type": "bool", "description": "new visibility bool"}, + ] + + def __init__(self, value: bool): + self._value = value + super().__init__() + + @property + def value(self) -> bool: + return self._value + + @block_reentrance + def set_value(self, graphic, value: bool): + graphic.world_object.visible = value + self._value = value + + event = GraphicFeatureEvent(type="visible", info={"value": value}) + self._call_event_handlers(event) + + +class Deleted(GraphicFeature): + """ + Used when a graphic is deleted, triggers events that can be useful to indicate this graphic has been deleted + """ + + property_name = "deleted" + event_info_spec = [ + { + "dict key": "value", + "type": "bool", + "description": "True when graphic was deleted", + }, + ] + + def __init__(self, value: bool): + self._value = value + super().__init__() + + @property + def value(self) -> bool: + return self._value + + @block_reentrance + def set_value(self, graphic, value: bool): + self._value = value + event = GraphicFeatureEvent(type="deleted", info={"value": value}) + self._call_event_handlers(event) diff --git a/fastplotlib/graphics/features/_image.py b/fastplotlib/graphics/features/_image.py new file mode 100644 index 000000000..c47a26e6a --- /dev/null +++ b/fastplotlib/graphics/features/_image.py @@ -0,0 +1,325 @@ +from itertools import product + +from math import ceil + +import numpy as np + +import pygfx +from ._base import GraphicFeature, GraphicFeatureEvent, block_reentrance + +from ...utils import ( + make_colors, + get_cmap_texture, +) + + +# manages an array of 8192x8192 Textures representing chunks of an image +class TextureArray(GraphicFeature): + event_info_spec = [ + { + "dict key": "key", + "type": "slice, index, numpy-like fancy index", + "description": "key at which image data was sliced/fancy indexed", + }, + { + "dict key": "value", + "type": "np.ndarray | float", + "description": "new data values", + }, + ] + + def __init__(self, data, isolated_buffer: bool = True): + super().__init__() + + data = self._fix_data(data) + + shared = pygfx.renderers.wgpu.get_shared() + self._texture_limit_2d = shared.device.limits["max-texture-dimension-2d"] + + if isolated_buffer: + # useful if data is read-only, example: memmaps + self._value = np.zeros(data.shape, dtype=data.dtype) + self.value[:] = data[:] + else: + # user's input array is used as the buffer + self._value = data + + # data start indices for each Texture + self._row_indices = np.arange( + 0, + ceil(self.value.shape[0] / self._texture_limit_2d) * self._texture_limit_2d, + self._texture_limit_2d, + ) + self._col_indices = np.arange( + 0, + ceil(self.value.shape[1] / self._texture_limit_2d) * self._texture_limit_2d, + self._texture_limit_2d, + ) + + # buffer will be an array of textures + self._buffer: np.ndarray[pygfx.Texture] = np.empty( + shape=(self.row_indices.size, self.col_indices.size), dtype=object + ) + + self._iter = None + + # iterate through each chunk of passed `data` + # create a pygfx.Texture from this chunk + for _, buffer_index, data_slice in self: + texture = pygfx.Texture(self.value[data_slice], dim=2) + + self.buffer[buffer_index] = texture + + self._shared: int = 0 + + @property + def value(self) -> np.ndarray: + return self._value + + def set_value(self, graphic, value): + self[:] = value + + @property + def buffer(self) -> np.ndarray[pygfx.Texture]: + return self._buffer + + @property + def row_indices(self) -> np.ndarray: + """ + row indices that are used to chunk the big data array + into individual Textures on the GPU + """ + return self._row_indices + + @property + def col_indices(self) -> np.ndarray: + """ + column indices that are used to chunk the big data array + into individual Textures on the GPU + """ + return self._col_indices + + @property + def shared(self) -> int: + return self._shared + + def _fix_data(self, data): + if data.ndim not in (2, 3): + raise ValueError( + "image data must be 2D with or without an RGB(A) dimension, i.e. " + "it must be of shape [rows, cols], [rows, cols, 3] or [rows, cols, 4]" + ) + + # let's just cast to float32 always + return data.astype(np.float32) + + def __iter__(self): + self._iter = product(enumerate(self.row_indices), enumerate(self.col_indices)) + return self + + def __next__(self) -> tuple[pygfx.Texture, tuple[int, int], tuple[slice, slice]]: + """ + Iterate through each Texture within the texture array + + Returns + ------- + Texture, tuple[int, int], tuple[slice, slice] + | Texture: pygfx.Texture + | tuple[int, int]: chunk index, i.e corresponding index of ``self.buffer`` array + | tuple[slice, slice]: data slice of big array in this chunk and Texture + """ + (chunk_row, data_row_start), (chunk_col, data_col_start) = next(self._iter) + + # indices for to self.buffer for this chunk + chunk_index = (chunk_row, chunk_col) + + # stop indices of big data array for this chunk + row_stop = min(self.value.shape[0], data_row_start + self._texture_limit_2d) + col_stop = min(self.value.shape[1], data_col_start + self._texture_limit_2d) + + # row and column slices that slice the data for this chunk from the big data array + data_slice = (slice(data_row_start, row_stop), slice(data_col_start, col_stop)) + + # texture for this chunk + texture = self.buffer[chunk_index] + + return texture, chunk_index, data_slice + + def __getitem__(self, item): + return self.value[item] + + @block_reentrance + def __setitem__(self, key, value): + self.value[key] = value + + for texture in self.buffer.ravel(): + texture.update_range((0, 0, 0), texture.size) + + event = GraphicFeatureEvent("data", info={"key": key, "value": value}) + self._call_event_handlers(event) + + def __len__(self): + return self.buffer.size + + +class ImageVmin(GraphicFeature): + """lower contrast limit""" + + event_info_spec = [ + { + "dict key": "value", + "type": "float", + "description": "new vmin value", + }, + ] + + def __init__(self, value: float): + self._value = value + super().__init__() + + @property + def value(self) -> float: + return self._value + + @block_reentrance + def set_value(self, graphic, value: float): + vmax = graphic._material.clim[1] + graphic._material.clim = (value, vmax) + self._value = value + + event = GraphicFeatureEvent(type="vmin", info={"value": value}) + self._call_event_handlers(event) + + +class ImageVmax(GraphicFeature): + """upper contrast limit""" + + event_info_spec = [ + { + "dict key": "value", + "type": "float", + "description": "new vmax value", + }, + ] + + def __init__(self, value: float): + self._value = value + super().__init__() + + @property + def value(self) -> float: + return self._value + + @block_reentrance + def set_value(self, graphic, value: float): + vmin = graphic._material.clim[0] + graphic._material.clim = (vmin, value) + self._value = value + + event = GraphicFeatureEvent(type="vmax", info={"value": value}) + self._call_event_handlers(event) + + +class ImageCmap(GraphicFeature): + """colormap for texture""" + + event_info_spec = [ + { + "dict key": "value", + "type": "str", + "description": "new cmap name", + }, + ] + + def __init__(self, value: str): + self._value = value + self.texture = get_cmap_texture(value) + super().__init__() + + @property + def value(self) -> str: + return self._value + + @block_reentrance + def set_value(self, graphic, value: str): + new_colors = make_colors(256, value) + graphic._material.map.texture.data[:] = new_colors + graphic._material.map.texture.update_range((0, 0, 0), size=(256, 1, 1)) + + self._value = value + event = GraphicFeatureEvent(type="cmap", info={"value": value}) + self._call_event_handlers(event) + + +class ImageInterpolation(GraphicFeature): + """Image interpolation method""" + + event_info_spec = [ + { + "dict key": "value", + "type": "str", + "description": "new interpolation method, nearest | linear", + }, + ] + + def __init__(self, value: str): + self._validate(value) + self._value = value + super().__init__() + + def _validate(self, value): + if value not in ["nearest", "linear"]: + raise ValueError("`interpolation` must be one of 'nearest' or 'linear'") + + @property + def value(self) -> str: + return self._value + + @block_reentrance + def set_value(self, graphic, value: str): + self._validate(value) + + graphic._material.interpolation = value + + self._value = value + event = GraphicFeatureEvent(type="interpolation", info={"value": value}) + self._call_event_handlers(event) + + +class ImageCmapInterpolation(GraphicFeature): + """Image cmap interpolation method""" + + event_info_spec = [ + { + "dict key": "value", + "type": "str", + "description": "new cmap interpolatio method, nearest | linear", + }, + ] + + def __init__(self, value: str): + self._validate(value) + self._value = value + super().__init__() + + def _validate(self, value): + if value not in ["nearest", "linear"]: + raise ValueError( + "`cmap_interpolation` must be one of 'nearest' or 'linear'" + ) + + @property + def value(self) -> str: + return self._value + + @block_reentrance + def set_value(self, graphic, value: str): + self._validate(value) + + # common material for all image tiles + graphic._material.map.min_filter = value + graphic._material.map.mag_filter = value + + self._value = value + event = GraphicFeatureEvent(type="cmap_interpolation", info={"value": value}) + self._call_event_handlers(event) diff --git a/fastplotlib/graphics/features/_positions_graphics.py b/fastplotlib/graphics/features/_positions_graphics.py new file mode 100644 index 000000000..868701079 --- /dev/null +++ b/fastplotlib/graphics/features/_positions_graphics.py @@ -0,0 +1,549 @@ +from typing import Any + +import numpy as np +import pygfx + +from ...utils import ( + parse_cmap_values, +) +from ._base import ( + GraphicFeature, + BufferManager, + GraphicFeatureEvent, + to_gpu_supported_dtype, + block_reentrance, +) +from .utils import parse_colors + + +class VertexColors(BufferManager): + property_name = "colors" + event_info_spec = [ + { + "dict key": "key", + "type": "slice, index, numpy-like fancy index", + "description": "index/slice at which colors were indexed/sliced", + }, + { + "dict key": "value", + "type": "np.ndarray [n_points_changed, RGBA]", + "description": "new color values for points that were changed", + }, + { + "dict key": "user_value", + "type": "str or array-like", + "description": "user input value that was parsed into the RGBA array", + }, + ] + + def __init__( + self, + colors: str | np.ndarray | tuple[float] | list[float] | list[str], + n_colors: int, + alpha: float = None, + isolated_buffer: bool = True, + ): + """ + Manages the vertex color buffer for :class:`LineGraphic` or :class:`ScatterGraphic` + + Parameters + ---------- + colors: str | np.ndarray | tuple[float, float, float, float] | list[str] | list[float] | int | float + specify colors as a single human-readable string, RGBA array, + or an iterable of strings or RGBA arrays + + n_colors: int + number of colors, if passing in a single str or single RGBA array + + alpha: float, optional + alpha value for the colors + + """ + data = parse_colors(colors, n_colors, alpha) + + super().__init__(data=data, isolated_buffer=isolated_buffer) + + @block_reentrance + def __setitem__( + self, + key: int | slice | np.ndarray[int | bool] | tuple[slice, ...], + user_value: str | np.ndarray | tuple[float] | list[float] | list[str], + ): + user_key = key + + if isinstance(key, tuple): + # directly setting RGBA values for points, we do no parsing + if not isinstance(user_value, (int, float, np.ndarray)): + raise TypeError( + "Can only set from int, float, or array to set colors directly by slicing the entire array" + ) + value = user_value + + elif isinstance(key, int): + # set color of one point + n_colors = 1 + value = parse_colors(user_value, n_colors) + + elif isinstance(key, slice): + # find n_colors by converting slice to range and then parse colors + start, stop, step = key.indices(self.value.shape[0]) + + n_colors = len(range(start, stop, step)) + + value = parse_colors(user_value, n_colors) + + elif isinstance(key, (np.ndarray, list)): + if isinstance(key, list): + # convert to array + key = np.array(key) + + # make sure it's 1D + if not key.ndim == 1: + raise TypeError( + "If slicing colors with an array, it must be a 1D bool or int array" + ) + + if key.dtype == bool: + # make sure len is same + if not key.size == self.buffer.data.shape[0]: + raise IndexError( + f"Length of array for fancy indexing must match number of datapoints.\n" + f"There are {len(self.buffer.data.shape[0])} datapoints and you have passed {key.size} indices" + ) + n_colors = np.count_nonzero(key) + + elif np.issubdtype(key.dtype, np.integer): + n_colors = key.size + + else: + raise TypeError( + "If slicing colors with an array, it must be a 1D bool or int array" + ) + + value = parse_colors(user_value, n_colors) + + else: + raise TypeError( + f"invalid key for setting colors, you may set colors using integer indices, slices, or " + f"fancy indexing using an array of integers or bool" + ) + + self.buffer.data[key] = value + + self._update_range(key) + + if len(self._event_handlers) < 1: + return + + event_info = { + "key": user_key, + "value": value, + "user_value": user_value, + } + + event = GraphicFeatureEvent("colors", info=event_info) + self._call_event_handlers(event) + + def __len__(self): + return len(self.buffer.data) + + +class UniformColor(GraphicFeature): + property_name = "colors" + event_info_spec = [ + { + "dict key": "value", + "type": "np.ndarray [RGBA]", + "description": "new color value", + }, + ] + + def __init__( + self, value: str | np.ndarray | tuple | list | pygfx.Color, alpha: float = 1.0 + ): + """Manages uniform color for line or scatter material""" + + v = (*tuple(pygfx.Color(value))[:-1], alpha) # apply alpha + self._value = pygfx.Color(v) + super().__init__() + + @property + def value(self) -> pygfx.Color: + return self._value + + @block_reentrance + def set_value(self, graphic, value: str | np.ndarray | tuple | list | pygfx.Color): + value = pygfx.Color(value) + graphic.world_object.material.color = value + self._value = value + + event = GraphicFeatureEvent(type="colors", info={"value": value}) + self._call_event_handlers(event) + + +class UniformSize(GraphicFeature): + property_name = "sizes" + event_info_spec = [ + {"dict key": "value", "type": "float", "description": "new size value"}, + ] + + def __init__(self, value: int | float): + """Manages uniform size for scatter material""" + + self._value = float(value) + super().__init__() + + @property + def value(self) -> float: + return self._value + + @block_reentrance + def set_value(self, graphic, value: float | int): + value = float(value) + graphic.world_object.material.size = value + self._value = value + + event = GraphicFeatureEvent(type="sizes", info={"value": value}) + self._call_event_handlers(event) + + +class SizeSpace(GraphicFeature): + property_name = "size_space" + event_info_spec = [ + { + "dict key": "value", + "type": "str", + "description": "'screen' | 'world' | 'model'", + }, + ] + + def __init__(self, value: str): + """Manages the coordinate space for scatter/line graphic""" + + self._value = value + super().__init__() + + @property + def value(self) -> str: + return self._value + + @block_reentrance + def set_value(self, graphic, value: str): + if value not in ["screen", "world", "model"]: + raise ValueError( + f"`size_space` must be one of: {['screen', 'world', 'model']}" + ) + + if "Line" in graphic.world_object.material.__class__.__name__: + graphic.world_object.material.thickness_space = value + else: + graphic.world_object.material.size_space = value + self._value = value + + event = GraphicFeatureEvent(type="size_space", info={"value": value}) + self._call_event_handlers(event) + + +class VertexPositions(BufferManager): + property_name = "data" + event_info_spec = [ + { + "dict key": "key", + "type": "slice, index (int) or numpy-like fancy index", + "description": "key at which vertex positions data were indexed/sliced", + }, + { + "dict key": "value", + "type": "int | float | array-like", + "description": "new data values for points that were changed", + }, + ] + + def __init__(self, data: Any, isolated_buffer: bool = True): + """ + Manages the vertex positions buffer shown in the graphic. + Supports fancy indexing if the data array also supports it. + """ + + data = self._fix_data(data) + super().__init__(data, isolated_buffer=isolated_buffer) + + def _fix_data(self, data): + # data = to_gpu_supported_dtype(data) + + if data.ndim == 1: + # if user provides a 1D array, assume these are y-values + data = np.column_stack([np.arange(data.size, dtype=data.dtype), data]) + + if data.shape[1] != 3: + if data.shape[1] != 2: + raise ValueError(f"Must pass 1D, 2D or 3D data") + + # zeros for z + zs = np.zeros(data.shape[0], dtype=data.dtype) + + # column stack [x, y, z] to make data of shape [n_points, 3] + data = np.column_stack([data[:, 0], data[:, 1], zs]) + + return to_gpu_supported_dtype(data) + + @block_reentrance + def __setitem__( + self, + key: int | slice | np.ndarray[int | bool] | tuple[slice, ...], + value: np.ndarray | float | list[float], + ): + # directly use the key to slice the buffer + self.buffer.data[key] = value + + # _update_range handles parsing the key to + # determine offset and size for GPU upload + self._update_range(key) + + self._emit_event("data", key, value) + + def __len__(self): + return len(self.buffer.data) + + +class PointsSizesFeature(BufferManager): + property_name = "sizes" + event_info_spec = [ + { + "dict key": "key", + "type": "slice, index (int) or numpy-like fancy index", + "description": "key at which point sizes were indexed/sliced", + }, + { + "dict key": "value", + "type": "int | float | array-like", + "description": "new size values for points that were changed", + }, + ] + + def __init__( + self, + sizes: int | float | np.ndarray | list[int | float] | tuple[int | float], + n_datapoints: int, + isolated_buffer: bool = True, + ): + """ + Manages sizes buffer of scatter points. + """ + sizes = self._fix_sizes(sizes, n_datapoints) + super().__init__(data=sizes, isolated_buffer=isolated_buffer) + + def _fix_sizes( + self, + sizes: int | float | np.ndarray | list[int | float] | tuple[int | float], + n_datapoints: int, + ): + if np.issubdtype(type(sizes), np.number): + # single value given + sizes = np.full( + n_datapoints, sizes, dtype=np.float32 + ) # force it into a float to avoid weird gpu errors + + elif isinstance( + sizes, (np.ndarray, tuple, list) + ): # if it's not a ndarray already, make it one + sizes = np.asarray(sizes, dtype=np.float32) # read it in as a numpy.float32 + if (sizes.ndim != 1) or (sizes.size != n_datapoints): + raise ValueError( + f"sequence of `sizes` must be 1 dimensional with " + f"the same length as the number of datapoints" + ) + + else: + raise TypeError( + "sizes must be a single , , or a sequence (array, list, tuple) of int" + "or float with the length equal to the number of datapoints" + ) + + if np.count_nonzero(sizes < 0) > 1: + raise ValueError( + "All sizes must be positive numbers greater than or equal to 0.0." + ) + + return sizes + + @block_reentrance + def __setitem__( + self, + key: int | slice | np.ndarray[int | bool] | list[int | bool], + value: int | float | np.ndarray | list[int | float] | tuple[int | float], + ): + # this is a very simple 1D buffer, no parsing required, directly set buffer + self.buffer.data[key] = value + self._update_range(key) + + self._emit_event("sizes", key, value) + + def __len__(self): + return len(self.buffer.data) + + +class Thickness(GraphicFeature): + property_name = "thickness" + event_info_spec = [ + {"dict key": "value", "type": "float", "description": "new thickness value"}, + ] + + def __init__(self, value: float): + self._value = value + super().__init__() + + @property + def value(self) -> float: + return self._value + + @block_reentrance + def set_value(self, graphic, value: float): + value = float(value) + graphic.world_object.material.thickness = value + self._value = value + + event = GraphicFeatureEvent(type="thickness", info={"value": value}) + self._call_event_handlers(event) + + +class VertexCmap(BufferManager): + property_name = "cmap" + event_info_spec = [ + { + "dict key": "key", + "type": "slice", + "description": "key at cmap colors were sliced", + }, + { + "dict key": "value", + "type": "str", + "description": "new cmap to set at given slice", + }, + ] + + def __init__( + self, + vertex_colors: VertexColors, + cmap_name: str | None, + transform: np.ndarray | None, + alpha: float = 1.0, + ): + """ + Sliceable colormap feature, manages a VertexColors instance and + provides a way to set colormaps with arbitrary transforms + """ + + super().__init__(data=vertex_colors.buffer) + + self._vertex_colors = vertex_colors + self._cmap_name = cmap_name + self._transform = transform + self._alpha = alpha + + if self._cmap_name is not None: + if not isinstance(self._cmap_name, str): + raise TypeError( + f"cmap name must be of type , you have passed: {self._cmap_name} of type: {type(self._cmap_name)}" + ) + + if self._transform is not None: + self._transform = np.asarray(self._transform) + + n_datapoints = vertex_colors.value.shape[0] + + colors = parse_cmap_values( + n_colors=n_datapoints, + cmap_name=self._cmap_name, + transform=self._transform, + ) + colors[:, -1] = alpha + # set vertex colors from cmap + self._vertex_colors[:] = colors + + @block_reentrance + def __setitem__(self, key: slice, cmap_name): + if not isinstance(key, slice): + raise TypeError( + "fancy indexing not supported for VertexCmap, only slices " + "of a continuous range are supported for applying a cmap" + ) + if key.step is not None: + raise TypeError( + "step sized indexing not currently supported for setting VertexCmap, " + "slices must be a continuous range" + ) + + # parse slice + start, stop, step = key.indices(self.value.shape[0]) + n_elements = len(range(start, stop, step)) + + colors = parse_cmap_values( + n_colors=n_elements, cmap_name=cmap_name, transform=self._transform + ) + colors[:, -1] = self.alpha + + self._cmap_name = cmap_name + self._vertex_colors[key] = colors + + # TODO: should we block vertex_colors from emitting an event? + # Because currently this will result in 2 emitted events, one + # for cmap and another from the colors + self._emit_event("cmap", key, cmap_name) + + @property + def name(self) -> str: + return self._cmap_name + + @property + def transform(self) -> np.ndarray | None: + """Get or set the cmap transform. Maps values from the transform array to the cmap colors""" + return self._transform + + @transform.setter + def transform( + self, + values: np.ndarray | list[float | int], + indices: slice | list | np.ndarray = None, + ): + if self._cmap_name is None: + raise AttributeError( + "cmap name is not set, set the cmap name before setting the transform" + ) + + values = np.asarray(values) + + colors = parse_cmap_values( + n_colors=self.value.shape[0], cmap_name=self._cmap_name, transform=values + ) + + colors[:, -1] = self.alpha + + self._transform = values + + if indices is None: + indices = slice(None) + + self._vertex_colors[indices] = colors + + self._emit_event("cmap.transform", indices, values) + + @property + def alpha(self) -> float: + """Get or set the alpha level""" + return self._alpha + + @alpha.setter + def alpha(self, value: float, indices: slice | list | np.ndarray = None): + self._vertex_colors[indices, -1] = value + self._alpha = value + + self._emit_event("cmap.alpha", indices, value) + + def __len__(self): + raise NotImplementedError( + "len not implemented for `cmap`, use len(colors) instead" + ) + + def __repr__(self): + return f"{self.__class__.__name__} | cmap: {self.name}\ntransform: {self.transform}" diff --git a/fastplotlib/graphics/features/_selection_features.py b/fastplotlib/graphics/features/_selection_features.py new file mode 100644 index 000000000..233353401 --- /dev/null +++ b/fastplotlib/graphics/features/_selection_features.py @@ -0,0 +1,342 @@ +from typing import Sequence + +import numpy as np + +from ...utils import mesh_masks +from ._base import GraphicFeature, GraphicFeatureEvent, block_reentrance + + +class LinearSelectionFeature(GraphicFeature): + event_info_spec = [ + { + "dict key": "value", + "type": "float", + "description": "new x or y value of selection", + }, + ] + + event_extra_attrs = [ + { + "attribute": "get_selected_index", + "type": "callable", + "description": "returns index under the selector", + } + ] + + def __init__(self, axis: str, value: float, limits: tuple[float, float]): + """ + + Parameters + ---------- + axis: "x" | "y" + axis the selector is restricted to + + value: float + position of the slider in world space, NOT data space + limits: (float, float) + min, max limits of the selector + + """ + + super().__init__() + + self._axis = axis + self._limits = limits + self._value = value + + @property + def value(self) -> np.float32: + """ + selection, data x or y value + """ + return self._value + + @block_reentrance + def set_value(self, selector, value: float): + # clip value between limits + value = np.clip(value, self._limits[0], self._limits[1], dtype=np.float32) + + # set position + if self._axis == "x": + dim = 0 + elif self._axis == "y": + dim = 1 + + for edge in selector._edges: + edge.geometry.positions.data[:, dim] = value + edge.geometry.positions.update_range() + + self._value = value + + event = GraphicFeatureEvent("selection", {"value": value}) + event.get_selected_index = selector.get_selected_index + + self._call_event_handlers(event) + + +class LinearRegionSelectionFeature(GraphicFeature): + event_info_spec = [ + { + "dict key": "value", + "type": "np.ndarray", + "description": "new [min, max] of selection", + }, + ] + + event_extra_attrs = [ + { + "attribute": "get_selected_indices", + "type": "callable", + "description": "returns indices under the selector", + }, + { + "attribute": "get_selected_data", + "type": "callable", + "description": "returns data under the selector", + }, + ] + + def __init__(self, value: tuple[int, int], axis: str, limits: tuple[float, float]): + super().__init__() + + self._axis = axis + self._limits = limits + self._value = tuple(int(v) for v in value) + + @property + def value(self) -> np.ndarray[float]: + """ + (min, max) of the selection, in data space + """ + return self._value + + @property + def axis(self) -> str: + """one of "x" | "y" """ + return self._axis + + @block_reentrance + def set_value(self, selector, value: Sequence[float]): + """ + Set start, stop range of selector + + Parameters + ---------- + selector: LinearRegionSelector + + value: (float, float) + (min, max) values in data space + + """ + if not len(value) == 2: + raise TypeError( + "selection must be a array, tuple, list, or sequence in the form of `(min, max)`, " + "where `min` and `max` are numeric values." + ) + + # convert to array, clip values if they are beyond the limits + value = np.asarray(value, dtype=np.float32).clip(*self._limits) + + # make sure `selector width >= 2`, left edge must not move past right edge! + # or bottom edge must not move past top edge! + if not (value[1] - value[0]) >= 0: + return + + if self.axis == "x": + # change left x position of the fill mesh + selector.fill.geometry.positions.data[mesh_masks.x_left] = value[0] + + # change right x position of the fill mesh + selector.fill.geometry.positions.data[mesh_masks.x_right] = value[1] + + # change x position of the left edge line + selector.edges[0].geometry.positions.data[:, 0] = value[0] + + # change x position of the right edge line + selector.edges[1].geometry.positions.data[:, 0] = value[1] + + elif self.axis == "y": + # change bottom y position of the fill mesh + selector.fill.geometry.positions.data[mesh_masks.y_bottom] = value[0] + + # change top position of the fill mesh + selector.fill.geometry.positions.data[mesh_masks.y_top] = value[1] + + # change y position of the bottom edge line + selector.edges[0].geometry.positions.data[:, 1] = value[0] + + # change y position of the top edge line + selector.edges[1].geometry.positions.data[:, 1] = value[1] + + self._value = value + + # send changes to GPU + selector.fill.geometry.positions.update_range() + + selector.edges[0].geometry.positions.update_range() + selector.edges[1].geometry.positions.update_range() + + # send event + if len(self._event_handlers) < 1: + return + + event = GraphicFeatureEvent("selection", {"value": self.value}) + + event.get_selected_indices = selector.get_selected_indices + event.get_selected_data = selector.get_selected_data + + self._call_event_handlers(event) + # TODO: user's selector event handlers can call event.graphic.get_selected_indices() to get the data index, + # and event.graphic.get_selected_data() to get the data under the selection + # this is probably a good idea so that the data isn't sliced until it's actually necessary + + +class RectangleSelectionFeature(GraphicFeature): + event_info_spec = [ + { + "dict key": "value", + "type": "np.ndarray", + "description": "new [xmin, xmax, ymin, ymax] of selection", + }, + ] + + event_extra_attrs = [ + { + "attribute": "get_selected_indices", + "type": "callable", + "description": "returns indices under the selector", + }, + { + "attribute": "get_selected_data", + "type": "callable", + "description": "returns data under the selector", + }, + ] + + def __init__( + self, + value: tuple[float, float, float, float], + limits: tuple[float, float, float, float], + ): + super().__init__() + + self._limits = limits + self._value = tuple(int(v) for v in value) + + @property + def value(self) -> np.ndarray[float]: + """ + (xmin, xmax, ymin, ymax) of the selection, in data space + """ + return self._value + + @block_reentrance + def set_value(self, selector, value: Sequence[float]): + """ + Set the selection of the rectangle selector. + + Parameters + ---------- + selector: RectangleSelector + + value: (float, float, float, float) + new values (xmin, xmax, ymin, ymax) of the selection + """ + if not len(value) == 4: + raise TypeError( + "Selection must be an array, tuple, list, or sequence in the form of `(xmin, xmax, ymin, ymax)`, " + "where `xmin`, `xmax`, `ymin`, `ymax` are numeric values." + ) + + # convert to array + value = np.asarray(value, dtype=np.float32) + + # clip values if they are beyond the limits + value[:2] = value[:2].clip(self._limits[0], self._limits[1]) + # clip y + value[2:] = value[2:].clip(self._limits[2], self._limits[3]) + + xmin, xmax, ymin, ymax = value + + # make sure `selector width >= 2` and selector height >=2 , left edge must not move past right edge! + # or bottom edge must not move past top edge! + if not (xmax - xmin) >= 0 or not (ymax - ymin) >= 0: + return + + # change fill mesh + # change left x position of the fill mesh + selector.fill.geometry.positions.data[mesh_masks.x_left] = xmin + + # change right x position of the fill mesh + selector.fill.geometry.positions.data[mesh_masks.x_right] = xmax + + # change bottom y position of the fill mesh + selector.fill.geometry.positions.data[mesh_masks.y_bottom] = ymin + + # change top position of the fill mesh + selector.fill.geometry.positions.data[mesh_masks.y_top] = ymax + + # change the edge lines + + # each edge line is defined by two end points which are stored in the + # geometry.positions + # [x0, y0, z0] + # [x1, y1, z0] + + # left line + z = selector.edges[0].geometry.positions.data[:, -1][0] + selector.edges[0].geometry.positions.data[:] = np.array( + [[xmin, ymin, z], [xmin, ymax, z]] + ) + + # right line + selector.edges[1].geometry.positions.data[:] = np.array( + [[xmax, ymin, z], [xmax, ymax, z]] + ) + + # bottom line + selector.edges[2].geometry.positions.data[:] = np.array( + [[xmin, ymin, z], [xmax, ymin, z]] + ) + + # top line + selector.edges[3].geometry.positions.data[:] = np.array( + [[xmin, ymax, z], [xmax, ymax, z]] + ) + + # change the vertex positions + + # bottom left + selector.vertices[0].geometry.positions.data[:] = np.array([[xmin, ymin, 1]]) + + # bottom right + selector.vertices[1].geometry.positions.data[:] = np.array([[xmax, ymin, 1]]) + + # top left + selector.vertices[2].geometry.positions.data[:] = np.array([[xmin, ymax, 1]]) + + # top right + selector.vertices[3].geometry.positions.data[:] = np.array([[xmax, ymax, 1]]) + + self._value = value + + # send changes to GPU + selector.fill.geometry.positions.update_range() + + for edge in selector.edges: + edge.geometry.positions.update_range() + + for vertex in selector.vertices: + vertex.geometry.positions.update_range() + + # send event + if len(self._event_handlers) < 1: + return + + event = GraphicFeatureEvent("selection", {"value": self.value}) + + event.get_selected_indices = selector.get_selected_indices + event.get_selected_data = selector.get_selected_data + + # calls any events + self._call_event_handlers(event) diff --git a/fastplotlib/graphics/features/_text.py b/fastplotlib/graphics/features/_text.py new file mode 100644 index 000000000..d8e5e95e8 --- /dev/null +++ b/fastplotlib/graphics/features/_text.py @@ -0,0 +1,137 @@ +import numpy as np + +import pygfx + +from ._base import GraphicFeature, GraphicFeatureEvent, block_reentrance + + +class TextData(GraphicFeature): + event_info_spec = [ + { + "dict key": "value", + "type": "str", + "description": "new text data", + }, + ] + + def __init__(self, value: str): + self._value = value + super().__init__() + + @property + def value(self) -> str: + return self._value + + @block_reentrance + def set_value(self, graphic, value: str): + graphic.world_object.set_text(value) + self._value = value + + event = GraphicFeatureEvent(type="text", info={"value": value}) + self._call_event_handlers(event) + + +class FontSize(GraphicFeature): + event_info_spec = [ + { + "dict key": "value", + "type": "float | int", + "description": "new font size", + }, + ] + + def __init__(self, value: float | int): + self._value = value + super().__init__() + + @property + def value(self) -> float | int: + return self._value + + @block_reentrance + def set_value(self, graphic, value: float | int): + graphic.world_object.font_size = value + self._value = graphic.world_object.font_size + + event = GraphicFeatureEvent(type="font_size", info={"value": value}) + self._call_event_handlers(event) + + +class TextFaceColor(GraphicFeature): + event_info_spec = [ + { + "dict key": "value", + "type": "str | np.ndarray", + "description": "new text color", + }, + ] + + def __init__(self, value: str | np.ndarray | list[float] | tuple[float]): + self._value = pygfx.Color(value) + super().__init__() + + @property + def value(self) -> pygfx.Color: + return self._value + + @block_reentrance + def set_value(self, graphic, value: str | np.ndarray | list[float] | tuple[float]): + value = pygfx.Color(value) + graphic.world_object.material.color = value + self._value = graphic.world_object.material.color + + event = GraphicFeatureEvent(type="face_color", info={"value": value}) + self._call_event_handlers(event) + + +class TextOutlineColor(GraphicFeature): + event_info_spec = [ + { + "dict key": "value", + "type": "str | np.ndarray", + "description": "new outline color", + }, + ] + + def __init__(self, value: str | np.ndarray | list[float] | tuple[float]): + self._value = pygfx.Color(value) + super().__init__() + + @property + def value(self) -> pygfx.Color: + return self._value + + @block_reentrance + def set_value(self, graphic, value: str | np.ndarray | list[float] | tuple[float]): + value = pygfx.Color(value) + graphic.world_object.material.outline_color = value + self._value = graphic.world_object.material.outline_color + + event = GraphicFeatureEvent(type="outline_color", info={"value": value}) + self._call_event_handlers(event) + + +class TextOutlineThickness(GraphicFeature): + event_info_spec = [ + { + "dict key": "value", + "type": "float", + "description": "new text outline thickness", + }, + ] + + def __init__(self, value: float): + self._value = value + super().__init__() + + @property + def value(self) -> float: + return self._value + + @block_reentrance + def set_value(self, graphic, value: float): + graphic.world_object.material.outline_thickness = value + self._value = graphic.world_object.material.outline_thickness + + event = GraphicFeatureEvent(type="outline_thickness", info={"value": value}) + self._call_event_handlers(event) diff --git a/fastplotlib/graphics/features/utils.py b/fastplotlib/graphics/features/utils.py new file mode 100644 index 000000000..e2f6e3428 --- /dev/null +++ b/fastplotlib/graphics/features/utils.py @@ -0,0 +1,87 @@ +import pygfx +import numpy as np + +from ._base import to_gpu_supported_dtype +from ...utils import make_pygfx_colors + + +def parse_colors( + colors: str | np.ndarray | list[str] | tuple[str], + n_colors: int | None, + alpha: float | None = None, +): + """ + + Parameters + ---------- + colors + n_colors + alpha + key + + Returns + ------- + + """ + + # if provided as a numpy array of str + if isinstance(colors, np.ndarray): + if colors.dtype.kind in ["U", "S"]: + colors = colors.tolist() + # if the color is provided as a numpy array + if isinstance(colors, np.ndarray): + if colors.shape == (4,): # single RGBA array + data = np.repeat(np.array([colors]), n_colors, axis=0) + # else assume it's already a stack of RGBA arrays, keep this directly as the data + elif colors.ndim == 2: + if colors.shape[1] != 4 and colors.shape[0] != n_colors: + raise ValueError( + "Valid array color arguments must be a single RGBA array or a stack of " + "RGBA arrays for each datapoint in the shape [n_datapoints, 4]" + ) + data = colors + else: + raise ValueError( + "Valid array color arguments must be a single RGBA array or a stack of " + "RGBA arrays for each datapoint in the shape [n_datapoints, 4]" + ) + + # if the color is provided as list or tuple + elif isinstance(colors, (list, tuple)): + # if iterable of str + if all([isinstance(val, str) for val in colors]): + if not len(colors) == n_colors: + raise ValueError( + f"Valid iterable color arguments must be a `tuple` or `list` of `str` " + f"where the length of the iterable is the same as the number of datapoints." + ) + + data = np.vstack([np.array(pygfx.Color(c)) for c in colors]) + + # if it's a single RGBA array as a tuple/list + elif len(colors) == 4: + c = pygfx.Color(colors) + data = np.repeat(np.array([c]), n_colors, axis=0) + + else: + raise ValueError( + f"Valid iterable color arguments must be a `tuple` or `list` representing RGBA values or " + f"an iterable of `str` with the same length as the number of datapoints." + ) + elif isinstance(colors, str): + if colors == "random": + data = np.random.rand(n_colors, 4) + data[:, -1] = alpha + else: + data = make_pygfx_colors(colors, n_colors) + else: + # assume it's a single color, use pygfx.Color to parse it + data = make_pygfx_colors(colors, n_colors) + + if alpha is not None: + if isinstance(alpha, float): + data[:, -1] = alpha + else: + raise TypeError("if alpha is provided it must be of type `float`") + + return to_gpu_supported_dtype(data) diff --git a/fastplotlib/graphics/histogram.py b/fastplotlib/graphics/histogram.py deleted file mode 100644 index 6efd83a96..000000000 --- a/fastplotlib/graphics/histogram.py +++ /dev/null @@ -1,116 +0,0 @@ -from warnings import warn -from typing import Union, Dict - -import numpy as np - -import pygfx - -from ._base import Graphic - - -class _HistogramBin(pygfx.Mesh): - def __int__(self, *args, **kwargs): - super(_HistogramBin, self).__init__(*args, **kwargs) - self.bin_center: float = None - self.frequency: Union[int, float] = None - - -class HistogramGraphic(Graphic): - def __init__( - self, - data: np.ndarray = None, - bins: Union[int, str] = "auto", - pre_computed: Dict[str, np.ndarray] = None, - colors: np.ndarray = "w", - draw_scale_factor: float = 100.0, - draw_bin_width_scale: float = 1.0, - **kwargs, - ): - """ - Create a Histogram Graphic - - Parameters - ---------- - data: np.ndarray or None, optional - data to create a histogram from, can be ``None`` if pre-computed values are provided to ``pre_computed`` - - bins: int or str, default is "auto", optional - this is directly just passed to ``numpy.histogram`` - - pre_computed: dict in the form {"hist": vals, "bin_edges" : vals}, optional - pre-computed histogram values - - colors: np.ndarray, optional - - draw_scale_factor: float, default ``100.0``, optional - scale the drawing of the entire Graphic - - draw_bin_width_scale: float, default ``1.0`` - scale the drawing of the bin widths - - kwargs - passed to Graphic - """ - - if pre_computed is None: - self.hist, self.bin_edges = np.histogram(data, bins) - else: - if not set(pre_computed.keys()) == {"hist", "bin_edges"}: - raise ValueError( - "argument to `pre_computed` must be a `dict` with keys 'hist' and 'bin_edges'" - ) - if not all(isinstance(v, np.ndarray) for v in pre_computed.values()): - raise ValueError( - "argument to `pre_computed` must be a `dict` where the values are numpy.ndarray" - ) - self.hist, self.bin_edges = pre_computed["hist"], pre_computed["bin_edges"] - - self.bin_interval = (self.bin_edges[1] - self.bin_edges[0]) / 2 - self.bin_centers = (self.bin_edges + self.bin_interval)[:-1] - - # scale between 0 - draw_scale_factor - scaled_bin_edges = ( - (self.bin_edges - self.bin_edges.min()) / (np.ptp(self.bin_edges)) - ) * draw_scale_factor - - bin_interval_scaled = scaled_bin_edges[1] / 2 - # get the centers of the bins from the edges - x_positions_bins = (scaled_bin_edges + bin_interval_scaled)[:-1].astype( - np.float32 - ) - - n_bins = x_positions_bins.shape[0] - bin_width = (draw_scale_factor / n_bins) * draw_bin_width_scale - - self.hist = self.hist.astype(np.float32) - - for bad_val in [np.nan, np.inf, -np.inf]: - if bad_val in self.hist: - warn( - f"Problematic value <{bad_val}> found in histogram, replacing with zero" - ) - self.hist[self.hist == bad_val] = 0 - - data = np.vstack([x_positions_bins, self.hist]) - - super(HistogramGraphic, self).__init__( - data=data, colors=colors, n_colors=n_bins, **kwargs - ) - - self._world_object: pygfx.Group = pygfx.Group() - - for x_val, y_val, bin_center in zip( - x_positions_bins, self.hist, self.bin_centers - ): - geometry = pygfx.plane_geometry( - width=bin_width, - height=y_val, - ) - - material = pygfx.MeshBasicMaterial() - hist_bin_graphic = _HistogramBin(geometry, material) - hist_bin_graphic.position.set(x_val, (y_val) / 2, 0) - hist_bin_graphic.bin_center = bin_center - hist_bin_graphic.frequency = y_val - - self.world_object.add(hist_bin_graphic) diff --git a/fastplotlib/graphics/image.py b/fastplotlib/graphics/image.py index 10f09eefb..957607fe1 100644 --- a/fastplotlib/graphics/image.py +++ b/fastplotlib/graphics/image.py @@ -1,202 +1,84 @@ +import math from typing import * -from math import ceil -from itertools import product -import weakref - -import numpy as np import pygfx from ..utils import quick_min_max -from ._base import Graphic, Interaction -from .selectors import LinearSelector, LinearRegionSelector -from ._features import ( - ImageCmapFeature, - ImageDataFeature, - HeatmapDataFeature, - HeatmapCmapFeature, - to_gpu_supported_dtype, +from ._base import Graphic +from .selectors import LinearSelector, LinearRegionSelector, RectangleSelector +from .features import ( + TextureArray, + ImageCmap, + ImageVmin, + ImageVmax, + ImageInterpolation, + ImageCmapInterpolation, ) -class _AddSelectorsMixin: - def add_linear_selector( - self, selection: int = None, padding: float = None, **kwargs - ) -> LinearSelector: - """ - Adds a :class:`.LinearSelector`. - - Parameters - ---------- - selection: int, optional - initial position of the selector - - padding: float, optional - pad the length of the selector - - kwargs: - passed to :class:`.LinearSelector` - - Returns - ------- - LinearSelector - - """ - - # default padding is 15% the height or width of the image - if "axis" in kwargs.keys(): - axis = kwargs["axis"] - else: - axis = "x" - - ( - bounds_init, - limits, - size, - origin, - axis, - end_points, - ) = self._get_linear_selector_init_args(padding, **kwargs) - - if selection is None: - selection = limits[0] - - if selection < limits[0] or selection > limits[1]: - raise ValueError( - f"the passed selection: {selection} is beyond the limits: {limits}" - ) - - selector = LinearSelector( - selection=selection, - limits=limits, - end_points=end_points, - parent=weakref.proxy(self), - **kwargs, - ) - - self._plot_area.add_graphic(selector, center=False) - selector.position_z = self.position_z + 1 - - return weakref.proxy(selector) - - def add_linear_region_selector( - self, padding: float = None, **kwargs - ) -> LinearRegionSelector: - """ - Add a :class:`.LinearRegionSelector`. - - Parameters - ---------- - padding: float, optional - Extends the linear selector along the y-axis to make it easier to interact with. - - kwargs: optional - passed to ``LinearRegionSelector`` +class _ImageTile(pygfx.Image): + """ + Similar to pygfx.Image, only difference is that it modifies the pick_info + by adding the data row start indices that correspond to this chunk of the big image + """ - Returns - ------- - LinearRegionSelector - linear selection graphic + def __init__( + self, + geometry, + material, + data_slice: tuple[slice, slice], + chunk_index: tuple[int, int], + **kwargs, + ): + super().__init__(geometry, material, **kwargs) - """ + self._data_slice = data_slice + self._chunk_index = chunk_index - ( - bounds_init, - limits, - size, - origin, - axis, - end_points, - ) = self._get_linear_selector_init_args(padding, **kwargs) + def _wgpu_get_pick_info(self, pick_value): + pick_info = super()._wgpu_get_pick_info(pick_value) - # create selector - selector = LinearRegionSelector( - bounds=bounds_init, - limits=limits, - size=size, - origin=origin, - parent=weakref.proxy(self), - fill_color=(0, 0, 0.35, 0.2), - **kwargs, + data_row_start, data_col_start = ( + self.data_slice[0].start, + self.data_slice[1].start, ) - self._plot_area.add_graphic(selector, center=False) - # so that it is above this graphic - selector.position_z = self.position_z + 3 - - # PlotArea manages this for garbage collection etc. just like all other Graphics - # so we should only work with a proxy on the user-end - return weakref.proxy(selector) - - # TODO: this method is a bit of a mess, can refactor later - def _get_linear_selector_init_args(self, padding: float, **kwargs): - # computes initial bounds, limits, size and origin of linear selectors - data = self.data() - - if "axis" in kwargs.keys(): - axis = kwargs["axis"] - else: - axis = "x" - - if padding is None: - if axis == "x": - # based on number of rows - padding = int(data.shape[0] * 0.15) - elif axis == "y": - # based on number of columns - padding = int(data.shape[1] * 0.15) - - if axis == "x": - offset = self.position_x - # x limits, number of columns - limits = (offset, data.shape[1] - 1) - - # size is number of rows + padding - # used by LinearRegionSelector but not LinearSelector - size = data.shape[0] + padding - - # initial position of the selector - # center row - position_y = data.shape[0] / 2 - - # need y offset too for this - origin = (limits[0] - offset, position_y + self.position_y) - - # endpoints of the data range - # used by linear selector but not linear region - # padding, n_rows + padding - end_points = (0 - padding, data.shape[0] + padding) - else: - offset = self.position_y - # y limits - limits = (offset, data.shape[0] - 1) - - # width + padding - # used by LinearRegionSelector but not LinearSelector - size = data.shape[1] + padding - - # initial position of the selector - position_x = data.shape[1] / 2 - - # need x offset too for this - origin = (position_x + self.position_x, limits[0] - offset) + # add the actual data row and col start indices + x, y = pick_info["index"] + x += data_col_start + y += data_row_start + pick_info["index"] = (x, y) - # endpoints of the data range - # used by linear selector but not linear region - end_points = (0 - padding, data.shape[1] + padding) + xp, yp = pick_info["pixel_coord"] + xp += data_col_start + yp += data_row_start + pick_info["pixel_coord"] = (xp, yp) - # initial bounds are 20% of the limits range - # used by LinearRegionSelector but not LinearSelector - bounds_init = (limits[0], int(np.ptp(limits) * 0.2) + offset) + # add row chunk and col chunk index to pick_info dict + return { + **pick_info, + "data_slice": self.data_slice, + "chunk_index": self.chunk_index, + } - return bounds_init, limits, size, origin, axis, end_points + @property + def data_slice(self) -> tuple[slice, slice]: + return self._data_slice - def _add_plot_area_hook(self, plot_area): - self._plot_area = plot_area + @property + def chunk_index(self) -> tuple[int, int]: + return self._chunk_index -class ImageGraphic(Graphic, Interaction, _AddSelectorsMixin): - feature_events = ("data", "cmap", "present") +class ImageGraphic(Graphic): + _features = { + "data": TextureArray, + "cmap": ImageCmap, + "vmin": ImageVmin, + "vmax": ImageVmax, + "interpolation": ImageInterpolation, + "cmap_interpolation": ImageCmapInterpolation, + } def __init__( self, @@ -204,9 +86,9 @@ def __init__( vmin: int = None, vmax: int = None, cmap: str = "plasma", - filter: str = "nearest", + interpolation: str = "nearest", + cmap_interpolation: str = "linear", isolated_buffer: bool = True, - *args, **kwargs, ): """ @@ -216,8 +98,7 @@ def __init__( ---------- data: array-like array-like, usually numpy.ndarray, must support ``memoryview()`` - Tensorflow Tensors also work **probably**, but not thoroughly tested - | shape must be ``[x_dim, y_dim]`` or ``[x_dim, y_dim, rgb]`` + | shape must be ``[n_rows, n_cols]``, ``[n_rows, n_cols, 3]`` for RGB or ``[n_rows, n_cols, 4]`` for RGBA vmin: int, optional minimum value for color scaling, calculated from data if not provided @@ -226,262 +107,333 @@ def __init__( maximum value for color scaling, calculated from data if not provided cmap: str, optional, default "plasma" - colormap to use to display the image data, ignored if data is RGB + colormap to use to display the data. For supported colormaps see the + ``cmap`` library catalogue: https://cmap-docs.readthedocs.io/en/stable/catalog/ - filter: str, optional, default "nearest" + interpolation: str, optional, default "nearest" interpolation filter, one of "nearest" or "linear" + cmap_interpolation: str, optional, default "linear" + colormap interpolation method, one of "nearest" or "linear" + isolated_buffer: bool, default True If True, initialize a buffer with the same shape as the input data and then set the data, useful if the data arrays are ready-only such as memmaps. - If False, the input array is itself used as the buffer. - - args: - additional arguments passed to Graphic + If False, the input array is itself used as the buffer - useful if the + array is large. kwargs: - additional keyword arguments passed to Graphic + additional keyword arguments passed to :class:`.Graphic` - Features - -------- + """ - **data**: :class:`.ImageDataFeature` - Manages the data buffer displayed in the ImageGraphic + super().__init__(**kwargs) - **cmap**: :class:`.ImageCmapFeature` - Manages the colormap + world_object = pygfx.Group() - **present**: :class:`.PresentFeature` - Control the presence of the Graphic in the scene + # texture array that manages the textures on the GPU for displaying this image + self._data = TextureArray(data, isolated_buffer=isolated_buffer) - """ + if (vmin is None) or (vmax is None): + vmin, vmax = quick_min_max(data) - super().__init__(*args, **kwargs) + # other graphic features + self._vmin = ImageVmin(vmin) + self._vmax = ImageVmax(vmax) - data = to_gpu_supported_dtype(data) + self._interpolation = ImageInterpolation(interpolation) - # TODO: we need to organize and do this better - if isolated_buffer: - # initialize a buffer with the same shape as the input data - # we do not directly use the input data array as the buffer - # because if the input array is a read-only type, such as - # numpy memmaps, we would not be able to change the image data - buffer_init = np.zeros(shape=data.shape, dtype=data.dtype) + # set map to None for RGB images + if self._data.value.ndim > 2: + self._cmap = None + _map = None else: - buffer_init = data + # use TextureMap for grayscale images + self._cmap = ImageCmap(cmap) + self._cmap_interpolation = ImageCmapInterpolation(cmap_interpolation) + + _map = pygfx.TextureMap( + self._cmap.texture, + filter=self._cmap_interpolation.value, + wrap="clamp-to-edge", + ) - if (vmin is None) or (vmax is None): - vmin, vmax = quick_min_max(data) + # one common material is used for every Texture chunk + self._material = pygfx.ImageBasicMaterial( + clim=(vmin, vmax), + map=_map, + interpolation=self._interpolation.value, + pick_write=True, + ) - texture = pygfx.Texture(buffer_init, dim=2) + # iterate through each texture chunk and create + # an _ImageTIle, offset the tile using the data indices + for texture, chunk_index, data_slice in self._data: - geometry = pygfx.Geometry(grid=texture) + # create an ImageTile using the texture for this chunk + img = _ImageTile( + geometry=pygfx.Geometry(grid=texture), + material=self._material, + data_slice=data_slice, # used to parse pick_info + chunk_index=chunk_index, + ) - self.cmap = ImageCmapFeature(self, cmap) + # row and column start index for this chunk + data_row_start = data_slice[0].start + data_col_start = data_slice[1].start - # if data is RGB or RGBA - if data.ndim > 2: - material = pygfx.ImageBasicMaterial( - clim=(vmin, vmax), map_interpolation=filter - ) - # if data is just 2D without color information, use colormap LUT - else: - material = pygfx.ImageBasicMaterial( - clim=(vmin, vmax), map=self.cmap(), map_interpolation=filter - ) + # offset tile position using the indices from the big data array + # that correspond to this chunk + img.world.x = data_col_start + img.world.y = data_row_start - world_object = pygfx.Image(geometry, material) + world_object.add(img) self._set_world_object(world_object) - self.cmap.vmin = vmin - self.cmap.vmax = vmax + @property + def data(self) -> TextureArray: + """Get or set the image data""" + return self._data - self.data = ImageDataFeature(self, data) - # TODO: we need to organize and do this better - if isolated_buffer: - # if the buffer was initialized with zeros - # set it with the actual data - self.data = data + @data.setter + def data(self, data): + self._data[:] = data - def set_feature(self, feature: str, new_data: Any, indices: Any): - pass + @property + def cmap(self) -> str: + """ + Get or set the colormap - def reset_feature(self, feature: str): - pass + For supported colormaps see the ``cmap`` library catalogue: https://cmap-docs.readthedocs.io/en/stable/catalog/ + """ + if self.data.value.ndim > 2: + raise AttributeError("RGB(A) images do not have a colormap property") + return self._cmap.value + @cmap.setter + def cmap(self, name: str): + if self.data.value.ndim > 2: + raise AttributeError("RGB(A) images do not have a colormap property") + self._cmap.set_value(self, name) -class _ImageTile(pygfx.Image): - """ - Similar to pygfx.Image, only difference is that it contains a few properties to keep track of - row chunk index, column chunk index - """ + @property + def vmin(self) -> float: + """lower contrast limit""" + return self._vmin.value - def _wgpu_get_pick_info(self, pick_value): - pick_info = super()._wgpu_get_pick_info(pick_value) + @vmin.setter + def vmin(self, value: float): + self._vmin.set_value(self, value) - # add row chunk and col chunk index to pick_info dict - return { - **pick_info, - "row_chunk_index": self.row_chunk_index, - "col_chunk_index": self.col_chunk_index, - } + @property + def vmax(self) -> float: + """upper contrast limit""" + return self._vmax.value + + @vmax.setter + def vmax(self, value: float): + self._vmax.set_value(self, value) @property - def row_chunk_index(self) -> int: - return self._row_chunk_index + def interpolation(self) -> str: + """Data interpolation method""" + return self._interpolation.value - @row_chunk_index.setter - def row_chunk_index(self, index: int): - self._row_chunk_index = index + @interpolation.setter + def interpolation(self, value: str): + self._interpolation.set_value(self, value) @property - def col_chunk_index(self) -> int: - return self._col_chunk_index + def cmap_interpolation(self) -> str: + """cmap interpolation method""" + return self._cmap_interpolation.value - @col_chunk_index.setter - def col_chunk_index(self, index: int): - self._col_chunk_index = index + @cmap_interpolation.setter + def cmap_interpolation(self, value: str): + self._cmap_interpolation.set_value(self, value) + def reset_vmin_vmax(self): + """ + Reset the vmin, vmax by estimating it from the data by subsampling. + """ -class HeatmapGraphic(Graphic, Interaction, _AddSelectorsMixin): - feature_events = ( - "data", - "cmap", - ) + vmin, vmax = quick_min_max(self._data.value) + self.vmin = vmin + self.vmax = vmax - def __init__( - self, - data: Any, - vmin: int = None, - vmax: int = None, - cmap: str = "plasma", - filter: str = "nearest", - chunk_size: int = 8192, - isolated_buffer: bool = True, - *args, - **kwargs, - ): + def add_linear_selector( + self, selection: int = None, axis: str = "x", **kwargs + ) -> LinearSelector: """ - Create an Image Graphic + Adds a :class:`.LinearSelector`. + + Selectors are just ``Graphic`` objects, so you can manage, remove, or delete them + from a plot area just like any other ``Graphic``. Parameters ---------- - data: array-like - array-like, usually numpy.ndarray, must support ``memoryview()`` - Tensorflow Tensors also work **probably**, but not thoroughly tested - | shape must be ``[x_dim, y_dim]`` + selection: int, optional + initial position of the selector - vmin: int, optional - minimum value for color scaling, calculated from data if not provided + kwargs: + passed to :class:`.LinearSelector` - vmax: int, optional - maximum value for color scaling, calculated from data if not provided + Returns + ------- + LinearSelector - cmap: str, optional, default "plasma" - colormap to use to display the data + """ - filter: str, optional, default "nearest" - interpolation filter, one of "nearest" or "linear" + if axis == "x": + limits = (0, self._data.value.shape[1]) + elif axis == "y": + limits = (0, self._data.value.shape[0]) + else: + raise ValueError("`axis` must be one of 'x' | 'y'") - chunk_size: int, default 8192, max 8192 - chunk size for each tile used to make up the heatmap texture + if selection is None: + selection = limits[0] - isolated_buffer: bool, default True - If True, initialize a buffer with the same shape as the input data and then - set the data, useful if the data arrays are ready-only such as memmaps. - If False, the input array is itself used as the buffer. + if selection < limits[0] or selection > limits[1]: + raise ValueError( + f"the passed selection: {selection} is beyond the limits: {limits}" + ) - args: - additional arguments passed to Graphic + selector = LinearSelector( + selection=selection, + limits=limits, + axis=axis, + parent=self, + **kwargs, + ) - kwargs: - additional keyword arguments passed to Graphic + self._plot_area.add_graphic(selector, center=False) - Features - -------- + # place selector above this graphic + selector.offset = selector.offset + (0.0, 0.0, self.offset[-1] + 1) - **data**: :class:`.HeatmapDataFeature` - Manages the data buffer displayed in the HeatmapGraphic + return selector - **cmap**: :class:`.HeatmapCmapFeature` - Manages the colormap + def add_linear_region_selector( + self, + selection: tuple[float, float] = None, + axis: str = "x", + padding: float = 0.0, + fill_color=(0, 0, 0.35, 0.2), + **kwargs, + ) -> LinearRegionSelector: + """ + Add a :class:`.LinearRegionSelector`. - **present**: :class:`.PresentFeature` - Control the presence of the Graphic in the scene + Selectors are just ``Graphic`` objects, so you can manage, remove, or delete them + from a plot area just like any other ``Graphic``. - """ + Parameters + ---------- + selection: (float, float) + initial (min, max) of the selection - super().__init__(*args, **kwargs) + axis: "x" | "y" + axis the selector can move along - if chunk_size > 8192: - raise ValueError("Maximum chunk size is 8192") + padding: float, default 100.0 + Extends the linear selector along the perpendicular axis to make it easier to interact with. - data = to_gpu_supported_dtype(data) + kwargs + passed to ``LinearRegionSelector`` - # TODO: we need to organize and do this better - if isolated_buffer: - # initialize a buffer with the same shape as the input data - # we do not directly use the input data array as the buffer - # because if the input array is a read-only type, such as - # numpy memmaps, we would not be able to change the image data - buffer_init = np.zeros(shape=data.shape, dtype=data.dtype) - else: - buffer_init = data + Returns + ------- + LinearRegionSelector - row_chunks = range(ceil(data.shape[0] / chunk_size)) - col_chunks = range(ceil(data.shape[1] / chunk_size)) + """ - chunks = list(product(row_chunks, col_chunks)) - # chunks is the index position of each chunk + if axis == "x": + size = self._data.value.shape[0] + center = size / 2 + limits = (0, self._data.value.shape[1]) + elif axis == "y": + size = self._data.value.shape[1] + center = size / 2 + limits = (0, self._data.value.shape[0]) + else: + raise ValueError("`axis` must be one of 'x' | 'y'") - start_ixs = [list(map(lambda c: c * chunk_size, chunk)) for chunk in chunks] - stop_ixs = [list(map(lambda c: c + chunk_size, chunk)) for chunk in start_ixs] + # default padding is 25% the height or width of the image + if padding is None: + size *= 1.25 + else: + size += padding - world_object = pygfx.Group() - self._set_world_object(world_object) + if selection is None: + selection = limits[0], int(limits[1] * 0.25) - if (vmin is None) or (vmax is None): - vmin, vmax = quick_min_max(data) + if padding is None: + size *= 1.25 - self.cmap = HeatmapCmapFeature(self, cmap) - self._material = pygfx.ImageBasicMaterial( - clim=(vmin, vmax), map=self.cmap(), map_interpolation=filter + else: + size += padding + + selector = LinearRegionSelector( + selection=selection, + limits=limits, + size=size, + center=center, + axis=axis, + fill_color=fill_color, + parent=self, + **kwargs, ) - for start, stop, chunk in zip(start_ixs, stop_ixs, chunks): - row_start, col_start = start - row_stop, col_stop = stop + self._plot_area.add_graphic(selector, center=False) - # x and y positions of the Tile in world space coordinates - y_pos, x_pos = row_start, col_start + # place above this graphic + selector.offset = selector.offset + (0.0, 0.0, self.offset[-1] + 1) - texture = pygfx.Texture( - buffer_init[row_start:row_stop, col_start:col_stop], dim=2 - ) - geometry = pygfx.Geometry(grid=texture) - # material = pygfx.ImageBasicMaterial(clim=(0, 1), map=self.cmap()) + return selector - img = _ImageTile(geometry, self._material) + def add_rectangle_selector( + self, + selection: tuple[float, float, float, float] = None, + fill_color=(0, 0, 0.35, 0.2), + **kwargs, + ) -> RectangleSelector: + """ + Add a :class:`.RectangleSelector`. - # row and column chunk index for this Tile - img.row_chunk_index = chunk[0] - img.col_chunk_index = chunk[1] + Selectors are just ``Graphic`` objects, so you can manage, remove, or delete them + from a plot area just like any other ``Graphic``. - img.world.x = x_pos - img.world.y = y_pos + Parameters + ---------- + selection: (float, float, float, float), optional + initial (xmin, xmax, ymin, ymax) of the selection + + """ + # default selection is 25% of the diagonal + if selection is None: + diagonal = math.sqrt( + self._data.value.shape[0] ** 2 + self._data.value.shape[1] ** 2 + ) + + selection = (0, int(diagonal / 4), 0, int(diagonal / 4)) - self.world_object.add(img) + # min/max limits are image shape + # rows are ys, columns are xs + limits = (0, self._data.value.shape[1], 0, self._data.value.shape[0]) - self.data = HeatmapDataFeature(self, buffer_init) - # TODO: we need to organize and do this better - if isolated_buffer: - # if the buffer was initialized with zeros - # set it with the actual data - self.data = data + selector = RectangleSelector( + selection=selection, + limits=limits, + fill_color=fill_color, + parent=self, + **kwargs, + ) + + self._plot_area.add_graphic(selector, center=False) - def set_feature(self, feature: str, new_data: Any, indices: Any): - pass + # place above this graphic + selector.offset = selector.offset + (0.0, 0.0, self.offset[-1] + 1) - def reset_feature(self, feature: str): - pass + return selector diff --git a/fastplotlib/graphics/line.py b/fastplotlib/graphics/line.py index d6f061ab0..4cdc7f413 100644 --- a/fastplotlib/graphics/line.py +++ b/fastplotlib/graphics/line.py @@ -1,30 +1,42 @@ from typing import * -import weakref import numpy as np import pygfx -from ..utils import parse_cmap_values -from ._base import Graphic, Interaction, PreviouslyModifiedData -from ._features import PointsDataFeature, ColorFeature, CmapFeature, ThicknessFeature -from .selectors import LinearRegionSelector, LinearSelector - - -class LineGraphic(Graphic, Interaction): - feature_events = ("data", "colors", "cmap", "thickness", "present") +from ._positions_base import PositionsGraphic +from .selectors import LinearRegionSelector, LinearSelector, RectangleSelector +from .features import ( + Thickness, + VertexPositions, + VertexColors, + UniformColor, + VertexCmap, + SizeSpace, +) +from ..utils import quick_min_max + + +class LineGraphic(PositionsGraphic): + _features = { + "data": VertexPositions, + "colors": (VertexColors, UniformColor), + "cmap": (VertexCmap, None), # none if UniformColor + "thickness": Thickness, + "size_space": SizeSpace, + } def __init__( self, data: Any, thickness: float = 2.0, - colors: Union[str, np.ndarray, Iterable] = "w", + colors: str | np.ndarray | Sequence = "w", + uniform_color: bool = False, alpha: float = 1.0, cmap: str = None, - cmap_values: Union[np.ndarray, List] = None, - z_position: float = None, - collection_index: int = None, - *args, + cmap_transform: np.ndarray | Sequence = None, + isolated_buffer: bool = True, + size_space: str = "screen", **kwargs, ): """ @@ -33,108 +45,109 @@ def __init__( Parameters ---------- data: array-like - Line data to plot, 2D must be of shape [n_points, 2], 3D must be of shape [n_points, 3] + Line data to plot. Can provide 1D, 2D, or a 3D data. + | If passing a 1D array, it is used to set the y-values and the x-values are generated as an integer range + from [0, data.size] + | 2D data must be of shape [n_points, 2]. 3D data must be of shape [n_points, 3] thickness: float, optional, default 2.0 thickness of the line colors: str, array, or iterable, default "w" specify colors as a single human-readable string, a single RGBA array, - or an iterable of strings or RGBA arrays + or a Sequence (array, tuple, or list) of strings or RGBA arrays - cmap: str, optional - apply a colormap to the line instead of assigning colors manually, this - overrides any argument passed to "colors" - - cmap_values: 1D array-like or list of numerical values, optional - if provided, these values are used to map the colors from the cmap + uniform_color: bool, default ``False`` + if True, uses a uniform buffer for the line color, + basically saves GPU VRAM when the entire line has a single color alpha: float, optional, default 1.0 alpha value for the colors - z_position: float, optional - z-axis position for placing the graphic - - args - passed to Graphic - - kwargs - passed to Graphic - - Features - -------- - - **data**: :class:`.ImageDataFeature` - Manages the line [x, y, z] positions data buffer, allows regular and fancy indexing. - - **colors**: :class:`.ColorFeature` - Manages the color buffer, allows regular and fancy indexing. + cmap: str, optional + Apply a colormap to the line instead of assigning colors manually, this + overrides any argument passed to "colors". For supported colormaps see the + ``cmap`` library catalogue: https://cmap-docs.readthedocs.io/en/stable/catalog/ - **cmap**: :class:`.CmapFeature` - Manages the cmap, wraps :class:`.ColorFeature` to add additional functionality relevant to cmaps. + cmap_transform: 1D array-like of numerical values, optional + if provided, these values are used to map the colors from the cmap - **thickness**: :class:`.ThicknessFeature` - Manages the thickness feature of the lines. + size_space: str, default "screen" + coordinate space in which the thickness is expressed ("screen", "world", "model") - **present**: :class:`.PresentFeature` - Control the presence of the Graphic in the scene, set to ``True`` or ``False`` + **kwargs + passed to :class:`.Graphic` """ - self.data = PointsDataFeature(self, data, collection_index=collection_index) - - if cmap is not None: - n_datapoints = self.data().shape[0] - - colors = parse_cmap_values( - n_colors=n_datapoints, cmap_name=cmap, cmap_values=cmap_values - ) - - self.colors = ColorFeature( - self, - colors, - n_colors=self.data().shape[0], + super().__init__( + data=data, + colors=colors, + uniform_color=uniform_color, alpha=alpha, - collection_index=collection_index, - ) - - self.cmap = CmapFeature( - self, self.colors(), cmap_name=cmap, cmap_values=cmap_values + cmap=cmap, + cmap_transform=cmap_transform, + isolated_buffer=isolated_buffer, + size_space=size_space, + **kwargs, ) - super(LineGraphic, self).__init__(*args, **kwargs) + self._thickness = Thickness(thickness) if thickness < 1.1: - material = pygfx.LineThinMaterial + MaterialCls = pygfx.LineThinMaterial else: - material = pygfx.LineMaterial - - self.thickness = ThicknessFeature(self, thickness) + MaterialCls = pygfx.LineMaterial + + if uniform_color: + geometry = pygfx.Geometry(positions=self._data.buffer) + material = MaterialCls( + thickness=self.thickness, + color_mode="uniform", + color=self.colors, + pick_write=True, + thickness_space=self.size_space, + ) + else: + material = MaterialCls( + thickness=self.thickness, + color_mode="vertex", + pick_write=True, + thickness_space=self.size_space, + ) + geometry = pygfx.Geometry( + positions=self._data.buffer, colors=self._colors.buffer + ) - world_object: pygfx.Line = pygfx.Line( - # self.data.feature_data because data is a Buffer - geometry=pygfx.Geometry(positions=self.data(), colors=self.colors()), - material=material(thickness=self.thickness(), color_mode="vertex"), - ) + world_object: pygfx.Line = pygfx.Line(geometry=geometry, material=material) self._set_world_object(world_object) - if z_position is not None: - self.position_z = z_position + @property + def thickness(self) -> float: + """Get or set the line thickness""" + return self._thickness.value + + @thickness.setter + def thickness(self, value: float): + self._thickness.set_value(self, value) def add_linear_selector( - self, selection: int = None, padding: float = 50, **kwargs + self, selection: float = None, axis: str = "x", **kwargs ) -> LinearSelector: """ - Adds a linear selector. + Adds a :class:`.LinearSelector`. + + Selectors are just ``Graphic`` objects, so you can manage, remove, or delete them from a + plot area just like any other ``Graphic``. Parameters ---------- - selection: int - initial position of the selector + selection: float, optional + selected point on the linear selector, by default the first datapoint on the line. - padding: float - pad the length of the selector + axis: str, default "x" + axis that the selector resides on kwargs passed to :class:`.LinearSelector` @@ -145,47 +158,51 @@ def add_linear_selector( """ - ( - bounds_init, - limits, - size, - origin, - axis, - end_points, - ) = self._get_linear_selector_init_args(padding, **kwargs) + bounds_init, limits, size, center = self._get_linear_selector_init_args( + axis, padding=0 + ) if selection is None: - selection = limits[0] - - if selection < limits[0] or selection > limits[1]: - raise ValueError( - f"the passed selection: {selection} is beyond the limits: {limits}" - ) + selection = bounds_init[0] selector = LinearSelector( selection=selection, limits=limits, - end_points=end_points, + axis=axis, parent=self, **kwargs, ) self._plot_area.add_graphic(selector, center=False) - selector.position_z = self.position_z + 1 - return weakref.proxy(selector) + # place selector above this graphic + selector.offset = selector.offset + (0.0, 0.0, self.offset[-1] + 1) + + return selector def add_linear_region_selector( - self, padding: float = 100.0, **kwargs + self, + selection: tuple[float, float] = None, + padding: float = 0.0, + axis: str = "x", + **kwargs, ) -> LinearRegionSelector: """ - Add a :class:`.LinearRegionSelector`. Selectors are just ``Graphic`` objects, so you can manage, - remove, or delete them from a plot area just like any other ``Graphic``. + Add a :class:`.LinearRegionSelector`. + + Selectors are just ``Graphic`` objects, so you can manage, remove, or delete them from a + plot area just like any other ``Graphic``. Parameters ---------- - padding: float, default 100.0 - Extends the linear selector along the y-axis to make it easier to interact with. + selection: (float, float), optional + the starting bounds of the linear region selector, computed from data if not provided + + axis: str, default "x" + axis that the selector resides on + + padding: float, default 0.0 + Extra padding to extend the linear region selector along the orthogonal axis to make it easier to interact with. kwargs passed to ``LinearRegionSelector`` @@ -197,118 +214,108 @@ def add_linear_region_selector( """ - ( - bounds_init, - limits, - size, - origin, - axis, - end_points, - ) = self._get_linear_selector_init_args(padding, **kwargs) + bounds_init, limits, size, center = self._get_linear_selector_init_args( + axis, padding + ) + + if selection is None: + selection = bounds_init # create selector selector = LinearRegionSelector( - bounds=bounds_init, + selection=selection, limits=limits, size=size, - origin=origin, + center=center, + axis=axis, parent=self, **kwargs, ) self._plot_area.add_graphic(selector, center=False) - # so that it is below this graphic - selector.position_z = self.position_z - 1 + + # place selector below this graphic + selector.offset = selector.offset + (0.0, 0.0, self.offset[-1] - 1) # PlotArea manages this for garbage collection etc. just like all other Graphics # so we should only work with a proxy on the user-end - return weakref.proxy(selector) + return selector - # TODO: this method is a bit of a mess, can refactor later - def _get_linear_selector_init_args(self, padding: float, **kwargs): - # computes initial bounds, limits, size and origin of linear selectors - data = self.data() + def add_rectangle_selector( + self, + selection: tuple[float, float, float, float] = None, + **kwargs, + ) -> RectangleSelector: + """ + Add a :class:`.RectangleSelector`. - if "axis" in kwargs.keys(): - axis = kwargs["axis"] - else: - axis = "x" + Selectors are just ``Graphic`` objects, so you can manage, remove, or delete them from a + plot area just like any other ``Graphic``. - if axis == "x": - offset = self.position_x - # x limits - limits = (data[0, 0] + offset, data[-1, 0] + offset) + Parameters + ---------- + selection: (float, float, float, float), optional + initial (xmin, xmax, ymin, ymax) of the selection + """ + # computes args to create selectors + n_datapoints = self.data.value.shape[0] + value_25p = int(n_datapoints / 4) - # height + padding - size = np.ptp(data[:, 1]) + padding + # remove any nans + data = self.data.value[~np.any(np.isnan(self.data.value), axis=1)] - # initial position of the selector - position_y = (data[:, 1].min() + data[:, 1].max()) / 2 + x_axis_vals = data[:, 0] + y_axis_vals = data[:, 1] - # need y offset too for this - origin = (limits[0] - offset, position_y + self.position_y) + ymin = np.floor(y_axis_vals.min()).astype(int) + ymax = np.ceil(y_axis_vals.max()).astype(int) - # endpoints of the data range - # used by linear selector but not linear region - end_points = ( - self.data()[:, 1].min() - padding, - self.data()[:, 1].max() + padding, - ) - else: - offset = self.position_y - # y limits - limits = (data[0, 1] + offset, data[-1, 1] + offset) + # default selection is 25% of the image + if selection is None: + selection = (x_axis_vals[0], x_axis_vals[value_25p], ymin, ymax) - # width + padding - size = np.ptp(data[:, 0]) + padding + # min/max limits + limits = (x_axis_vals[0], x_axis_vals[-1], ymin * 1.5, ymax * 1.5) - # initial position of the selector - position_x = (data[:, 0].min() + data[:, 0].max()) / 2 + selector = RectangleSelector( + selection=selection, + limits=limits, + parent=self, + **kwargs, + ) - # need x offset too for this - origin = (position_x + self.position_x, limits[0] - offset) + self._plot_area.add_graphic(selector, center=False) - end_points = ( - self.data()[:, 0].min() - padding, - self.data()[:, 0].max() + padding, - ) + return selector - # initial bounds are 20% of the limits range - bounds_init = (limits[0], int(np.ptp(limits) * 0.2) + offset) + # TODO: this method is a bit of a mess, can refactor later + def _get_linear_selector_init_args( + self, axis: str, padding + ) -> tuple[tuple[float, float], tuple[float, float], float, float]: + # computes args to create selectors + n_datapoints = self.data.value.shape[0] + value_25p = int(n_datapoints / 4) - return bounds_init, limits, size, origin, axis, end_points + # remove any nans + data = self.data.value[~np.any(np.isnan(self.data.value), axis=1)] - def _add_plot_area_hook(self, plot_area): - self._plot_area = plot_area + if axis == "x": + # xvals + axis_vals = data[:, 0] - def set_feature(self, feature: str, new_data: Any, indices: Any = None): - if not hasattr(self, "_previous_data"): - self._previous_data = dict() - elif hasattr(self, "_previous_data"): - self.reset_feature(feature) + # yvals to get size and center + magn_vals = data[:, 1] + elif axis == "y": + axis_vals = data[:, 1] + magn_vals = data[:, 0] - feature_instance = getattr(self, feature) - if indices is not None: - previous = feature_instance[indices].copy() - feature_instance[indices] = new_data - else: - previous = feature_instance._data.copy() - feature_instance._set(new_data) - if feature in self._previous_data.keys(): - self._previous_data[feature].data = previous - self._previous_data[feature].indices = indices - else: - self._previous_data[feature] = PreviouslyModifiedData( - data=previous, indices=indices - ) + bounds_init = axis_vals[0], axis_vals[value_25p] + limits = axis_vals[0], axis_vals[-1] - def reset_feature(self, feature: str): - if feature not in self._previous_data.keys(): - return + # width or height of selector + size = int(np.ptp(magn_vals) * 1.5 + padding) - prev_ixs = self._previous_data[feature].indices - feature_instance = getattr(self, feature) - if prev_ixs is not None: - feature_instance[prev_ixs] = self._previous_data[feature].data - else: - feature_instance._set(self._previous_data[feature].data) + # center of selector along the other axis + center = sum(quick_min_max(magn_vals)) / 2 + + return bounds_init, limits, size, center diff --git a/fastplotlib/graphics/line_collection.py b/fastplotlib/graphics/line_collection.py index 38597a830..de4139679 100644 --- a/fastplotlib/graphics/line_collection.py +++ b/fastplotlib/graphics/line_collection.py @@ -1,34 +1,141 @@ from typing import * -from copy import deepcopy -import weakref import numpy as np import pygfx from ..utils import parse_cmap_values -from ._base import Interaction, PreviouslyModifiedData, GraphicCollection -from ._features import GraphicFeature +from ._collection_base import CollectionIndexer, GraphicCollection, CollectionFeature from .line import LineGraphic -from .selectors import LinearRegionSelector, LinearSelector +from .selectors import LinearRegionSelector, LinearSelector, RectangleSelector -class LineCollection(GraphicCollection, Interaction): - child_type = LineGraphic.__name__ - feature_events = ("data", "colors", "cmap", "thickness", "present") +class _LineCollectionProperties: + """Mix-in class for LineCollection properties""" + + @property + def colors(self) -> CollectionFeature: + """get or set colors of lines in the collection""" + return CollectionFeature(self.graphics, "colors") + + @colors.setter + def colors(self, values: str | np.ndarray | tuple[float] | list[float] | list[str]): + if isinstance(values, str): + # set colors of all lines to one str color + for g in self: + g.colors = values + return + + elif all(isinstance(v, str) for v in values): + # individual str colors for each line + if not len(values) == len(self): + raise IndexError + + for g, v in zip(self.graphics, values): + g.colors = v + + return + + if isinstance(values, np.ndarray): + if values.ndim == 2: + # assume individual colors for each + for g, v in zip(self, values): + g.colors = v + return + + elif len(values) == 4: + # assume RGBA + self.colors[:] = values + + else: + # assume individual colors for each + for g, v in zip(self, values): + g.colors = v + + @property + def data(self) -> CollectionFeature: + """get or set data of lines in the collection""" + return CollectionFeature(self.graphics, "data") + + @data.setter + def data(self, values): + for g, v in zip(self, values): + g.data = v + + @property + def cmap(self) -> CollectionFeature: + """ + Get or set a cmap along the line collection. + + Optionally set using a tuple ("cmap", , ) to set the transform and/or alpha. + Example: + + line_collection.cmap = ("jet", sine_transform_vals, 0.7) + + """ + return CollectionFeature(self.graphics, "cmap") + + @cmap.setter + def cmap(self, args): + if isinstance(args, str): + name = args + transform, alpha = None, 1.0 + elif len(args) == 1: + name = args[0] + transform, alpha = None, None + + elif len(args) == 2: + name, transform = args + alpha = None + + elif len(args) == 3: + name, transform, alpha = args + + colors = parse_cmap_values( + n_colors=len(self), cmap_name=name, transform=transform + ) + colors[:, -1] = alpha + self.colors = colors + + @property + def thickness(self) -> np.ndarray: + """get or set the thickness of the lines""" + return np.asarray([g.thickness for g in self]) + + @thickness.setter + def thickness(self, values: np.ndarray | list[float]): + if not len(values) == len(self): + raise IndexError + + for g, v in zip(self, values): + g.thickness = v + + +class LineCollectionIndexer(CollectionIndexer, _LineCollectionProperties): + """Indexer for line collections""" + + pass + + +class LineCollection(GraphicCollection, _LineCollectionProperties): + _child_type = LineGraphic + _indexer = LineCollectionIndexer def __init__( self, - data: List[np.ndarray], - z_position: Union[List[float], float] = None, - thickness: Union[float, List[float]] = 2.0, - colors: Union[List[np.ndarray], np.ndarray] = "w", + data: np.ndarray | List[np.ndarray], + thickness: float | Sequence[float] = 2.0, + colors: str | Sequence[str] | np.ndarray | Sequence[np.ndarray] = "w", + uniform_colors: bool = False, alpha: float = 1.0, - cmap: Union[List[str], str] = None, - cmap_values: Union[np.ndarray, List] = None, + cmap: Sequence[str] | str = None, + cmap_transform: np.ndarray | List = None, name: str = None, - metadata: Union[list, tuple, np.ndarray] = None, - *args, + names: list[str] = None, + metadata: Any = None, + metadatas: Sequence[Any] | np.ndarray = None, + isolated_buffer: bool = True, + kwargs_lines: list[dict] = None, **kwargs, ): """ @@ -36,78 +143,84 @@ def __init__( Parameters ---------- + data: list of array-like + List or array-like of multiple line data to plot - data: list of array-like or array - List of line data to plot, each element must be a 1D, 2D, or 3D numpy array - if elements are 2D, interpreted as [y_vals, n_lines] - - z_position: list of float or float, optional - | if ``float``, single position will be used for all lines - | if ``list`` of ``float``, each value will apply to the individual lines + | if ``list`` each item in the list must be a 1D, 2D, or 3D numpy array + | if array-like, must be of shape [n_lines, n_points_line, y | xy | xyz] - thickness: float or list of float, default 2.0 + thickness: float or Iterable of float, default 2.0 | if ``float``, single thickness will be used for all lines | if ``list`` of ``float``, each value will apply to the individual lines - colors: str, RGBA array, list of RGBA array, or list of str, default "w" + colors: str, RGBA array, Iterable of RGBA array, or Iterable of str, default "w" | if single ``str`` such as "w", "r", "b", etc, represents a single color for all lines | if single ``RGBA array`` (tuple or list of size 4), represents a single color for all lines | if ``list`` of ``str``, represents color for each individual line, example ["w", "b", "r",...] | if ``RGBA array`` of shape [data_size, 4], represents a single RGBA array for each line - cmap: list of str or str, optional + alpha: float, optional + alpha value for colors, if colors is a ``str`` + + cmap: Iterable of str or str, optional | if ``str``, single cmap will be used for all lines | if ``list`` of ``str``, each cmap will apply to the individual lines .. note:: ``cmap`` overrides any arguments passed to ``colors`` - cmap_values: 1D array-like or list of numerical values, optional + cmap_transform: 1D array-like of numerical values, optional if provided, these values are used to map the colors from the cmap name: str, optional - name of the line collection + name of the line collection as a whole - metadata: list, tuple, or array - metadata associated with this collection, this is for the user to manage. - ``len(metadata)`` must be same as ``len(data)`` - - args - passed to GraphicCollection + names: list[str], optional + names of the individual lines in the collection, ``len(names)`` must equal ``len(data)`` - kwargs - passed to GraphicCollection + metadata: Any + meatadata associated with the collection as a whole - Features - -------- + metadatas: Iterable or array + metadata for each individual line associated with this collection, this is for the user to manage. + ``len(metadata)`` must be same as ``len(data)`` - Collections support the same features as the underlying graphic. You just have to slice the selection. + kwargs_lines: list[dict], optional + list of kwargs passed to the individual lines, ``len(kwargs_lines)`` must equal ``len(data)`` - See :class:`LineGraphic` details on the features. + kwargs_collection + kwargs for the collection, passed to GraphicCollection """ - super(LineCollection, self).__init__(name) + super().__init__(name=name, metadata=metadata, **kwargs) - if not isinstance(z_position, float) and z_position is not None: - if len(data) != len(z_position): + if not isinstance(thickness, (float, int)): + if len(thickness) != len(data): raise ValueError( - "z_position must be a single float or an iterable with same length as data" + f"len(thickness) != len(data)\n" f"{len(thickness)} != {len(data)}" ) - if not isinstance(thickness, (float, int)): - if len(thickness) != len(data): + if names is not None: + if len(names) != len(data): raise ValueError( - "args must be a single float or an iterable with same length as data" + f"len(names) != len(data)\n" f"{len(names)} != {len(data)}" ) - if metadata is not None: - if len(metadata) != len(data): + if metadatas is not None: + if len(metadatas) != len(data): raise ValueError( - f"len(metadata) != len(data)\n" f"{len(metadata)} != {len(data)}" + f"len(metadata) != len(data)\n" f"{len(metadatas)} != {len(data)}" ) - self._cmap_values = cmap_values + if kwargs_lines is not None: + if len(kwargs_lines) != len(data): + raise ValueError( + f"len(kwargs_lines) != len(data)\n" + f"{len(kwargs_lines)} != {len(data)}" + ) + + self._cmap_transform = cmap_transform self._cmap_str = cmap # cmap takes priority over colors @@ -115,7 +228,7 @@ def __init__( # cmap across lines if isinstance(cmap, str): colors = parse_cmap_values( - n_colors=len(data), cmap_name=cmap, cmap_values=cmap_values + n_colors=len(data), cmap_name=cmap, transform=cmap_transform ) single_color = False cmap = None @@ -174,14 +287,12 @@ def __init__( "or must be a tuple/list of colors represented by a string with the same length as the data" ) + if kwargs_lines is None: + kwargs_lines = dict() + self._set_world_object(pygfx.Group()) for i, d in enumerate(data): - if isinstance(z_position, list): - _z = z_position[i] - else: - _z = 1.0 - if isinstance(thickness, list): _s = thickness[i] else: @@ -198,66 +309,51 @@ def __init__( _cmap = cmap[i] _c = None - if metadata is not None: - _m = metadata[i] + if metadatas is not None: + _m = metadatas[i] else: _m = None + if names is not None: + _name = names[i] + else: + _name = None + lg = LineGraphic( data=d, thickness=_s, colors=_c, - z_position=_z, + uniform_color=uniform_colors, cmap=_cmap, - collection_index=i, + name=_name, metadata=_m, + isolated_buffer=isolated_buffer, + **kwargs_lines, ) - self.add_graphic(lg, reset_index=False) + self.add_graphic(lg) - @property - def cmap(self) -> str: - return self._cmap_str - - @cmap.setter - def cmap(self, cmap: str): - colors = parse_cmap_values( - n_colors=len(self), cmap_name=cmap, cmap_values=self.cmap_values - ) - - for i, g in enumerate(self.graphics): - g.colors = colors[i] - - self._cmap_str = cmap - - @property - def cmap_values(self) -> np.ndarray: - return self._cmap_values - - @cmap_values.setter - def cmap_values(self, values: Union[np.ndarray, list]): - colors = parse_cmap_values( - n_colors=len(self), cmap_name=self.cmap, cmap_values=values - ) - - for i, g in enumerate(self.graphics): - g.colors = colors[i] - - self._cmap_values = values + def __getitem__(self, item) -> LineCollectionIndexer: + return super().__getitem__(item) def add_linear_selector( - self, selection: int = None, padding: float = 50, **kwargs + self, selection: float = None, padding: float = 0.0, axis: str = "x", **kwargs ) -> LinearSelector: """ - Adds a :class:`.LinearSelector` . + Adds a linear selector. Parameters ---------- - selection: int - initial position of the selector + Parameters + ---------- + selection: float, optional + selected point on the linear selector, computed from data if not provided - padding: float - pad the length of the selector + axis: str, default "x" + axis that the selector resides on + + padding: float, default 0.0 + Extra padding to extend the linear selector along the orthogonal axis to make it easier to interact with. kwargs passed to :class:`.LinearSelector` @@ -268,46 +364,49 @@ def add_linear_selector( """ - ( - bounds, - limits, - size, - origin, - axis, - end_points, - ) = self._get_linear_selector_init_args(padding, **kwargs) + bounds_init, limits, size, center = self._get_linear_selector_init_args( + axis, padding + ) if selection is None: - selection = limits[0] - - if selection < limits[0] or selection > limits[1]: - raise ValueError( - f"the passed selection: {selection} is beyond the limits: {limits}" - ) + selection = bounds_init[0] selector = LinearSelector( selection=selection, limits=limits, - end_points=end_points, + axis=axis, parent=self, **kwargs, ) self._plot_area.add_graphic(selector, center=False) - selector.position_z = self.position_z + 1 - return weakref.proxy(selector) + # place selector above this graphic + selector.offset = selector.offset + (0.0, 0.0, self.offset[-1] + 1) + + return selector def add_linear_region_selector( - self, padding: float = 100.0, **kwargs + self, + selection: tuple[float, float] = None, + padding: float = 0.0, + axis: str = "x", + **kwargs, ) -> LinearRegionSelector: """ - Add a :class:`.LinearRegionSelector` + Add a :class:`.LinearRegionSelector`. Selectors are just ``Graphic`` objects, so you can manage, + remove, or delete them from a plot area just like any other ``Graphic``. Parameters ---------- - padding: float, default 100.0 - Extends the linear selector along the y-axis to make it easier to interact with. + selection: (float, float), optional + the starting bounds of the linear region selector, computed from data if not provided + + axis: str, default "x" + axis that the selector resides on + + padding: float, default 0.0 + Extra padding to extend the linear region selector along the orthogonal axis to make it easier to interact with. kwargs passed to ``LinearRegionSelector`` @@ -319,155 +418,103 @@ def add_linear_region_selector( """ - ( - bounds, - limits, - size, - origin, - axis, - end_points, - ) = self._get_linear_selector_init_args(padding, **kwargs) + bounds_init, limits, size, center = self._get_linear_selector_init_args( + axis, padding + ) + + if selection is None: + selection = bounds_init + # create selector selector = LinearRegionSelector( - bounds=bounds, + selection=selection, limits=limits, size=size, - origin=origin, + center=center, + axis=axis, parent=self, **kwargs, ) self._plot_area.add_graphic(selector, center=False) - selector.position_z = self.position_z - 1 - - return weakref.proxy(selector) - - def _get_linear_selector_init_args(self, padding, **kwargs): - bounds_init = list() - limits = list() - sizes = list() - origin = list() - end_points = list() - - for g in self.graphics: - ( - _bounds_init, - _limits, - _size, - _origin, - axis, - _end_points, - ) = g._get_linear_selector_init_args(padding=0, **kwargs) - - bounds_init.append(_bounds_init) - limits.append(_limits) - sizes.append(_size) - origin.append(_origin) - end_points.append(_end_points) - - # set the init bounds using the extents of the collection - b = np.vstack(bounds_init) - bounds = (b[:, 0].min(), b[:, 1].max()) - - # set the limits using the extents of the collection - limits = np.vstack(limits) - limits = (limits[:, 0].min(), limits[:, 1].max()) - - # stack endpoints - end_points = np.vstack(end_points) - # use the min endpoint for index 0, highest endpoint for index 1 - end_points = [ - end_points[:, 0].min() - padding, - end_points[:, 1].max() + padding, - ] - - # TODO: refactor this to use `LineStack.graphics[-1].position.y` - if isinstance(self, LineStack): - stack_offset = self.separation * len(sizes) - # sum them if it's a stack - size = sum(sizes) - # add the separations - size += stack_offset - - # a better way to get the max y value? - # graphics y-position + data y-max + padding - end_points[1] = ( - self.graphics[-1].position_y - + self.graphics[-1].data()[:, 1].max() - + padding - ) - else: - # just the biggest one if not stacked - size = max(sizes) + # place selector below this graphic + selector.offset = selector.offset + (0.0, 0.0, self.offset[-1] - 1) - size += padding + # PlotArea manages this for garbage collection etc. just like all other Graphics + # so we should only work with a proxy on the user-end + return selector - if axis == "x": - o = np.vstack(origin) - origin_y = (o[:, 1].min() + o[:, 1].max()) / 2 - origin = (limits[0], origin_y) - else: - o = np.vstack(origin) - origin_x = (o[:, 0].min() + o[:, 0].max()) / 2 - origin = (origin_x, limits[0]) + def add_rectangle_selector( + self, + selection: tuple[float, float, float, float] = None, + **kwargs, + ) -> RectangleSelector: + """ + Add a :class:`.RectangleSelector`. Selectors are just ``Graphic`` objects, so you can manage, + remove, or delete them from a plot area just like any other ``Graphic``. - return bounds, limits, size, origin, axis, end_points + Parameters + ---------- + selection: (float, float, float, float), optional + initial (xmin, xmax, ymin, ymax) of the selection + """ + bbox = self.world_object.get_world_bounding_box() - def _add_plot_area_hook(self, plot_area): - self._plot_area = plot_area + xdata = np.array(self.data[:, 0]) + xmin, xmax = (np.nanmin(xdata), np.nanmax(xdata)) + value_25px = (xmax - xmin) / 4 - def set_feature(self, feature: str, new_data: Any, indices: Any): - # if single value force to be an array of size 1 - if isinstance(indices, (np.integer, int)): - indices = np.array([indices]) - if not hasattr(self, "_previous_data"): - self._previous_data = dict() - elif hasattr(self, "_previous_data"): - if feature in self._previous_data.keys(): - # for now assume same index won't be changed with diff data - # I can't think of a usecase where we'd have to check the data too - # so unless there is a bug we keep it like this - if self._previous_data[feature].indices == indices: - return # nothing to change, and this allows bidirectional linking without infinite recursion + ydata = np.array(self.data[:, 1]) + ymin = np.floor(ydata.min()).astype(int) - self.reset_feature(feature) + ymax = np.ptp(bbox[:, 1]) - # coll_feature = getattr(self[indices], feature) + if selection is None: + selection = (xmin, value_25px, ymin, ymax) - data = list() + limits = (xmin, xmax, ymin - (ymax * 1.5 - ymax), ymax * 1.5) - for graphic in self.graphics[indices]: - feature_instance: GraphicFeature = getattr(graphic, feature) - data.append(feature_instance()) + selector = RectangleSelector( + selection=selection, + limits=limits, + parent=self, + **kwargs, + ) - # later we can think about multi-index events - previous_data = deepcopy(data[0]) + self._plot_area.add_graphic(selector, center=False) - if feature in self._previous_data.keys(): - self._previous_data[feature].data = previous_data - self._previous_data[feature].indices = indices - else: - self._previous_data[feature] = PreviouslyModifiedData( - data=previous_data, indices=indices - ) + return selector - # finally set the new data - # this MUST occur after setting the previous data attribute to prevent recursion - # since calling `feature._set()` triggers all the feature callbacks - feature_instance._set(new_data) + def _get_linear_selector_init_args(self, axis, padding): + # use bbox to get size and center + bbox = self.world_object.get_world_bounding_box() - def reset_feature(self, feature: str): - if feature not in self._previous_data.keys(): - return + if axis == "x": + xdata = np.array(self.data[:, 0]) + xmin, xmax = (np.nanmin(xdata), np.nanmax(xdata)) + value_25p = (xmax - xmin) / 4 + + bounds = (xmin, value_25p) + limits = (xmin, xmax) + # size from orthogonal axis + size = np.ptp(bbox[:, 1]) * 1.5 + # center on orthogonal axis + center = bbox[:, 1].mean() + + elif axis == "y": + ydata = np.array(self.data[:, 1]) + xmin, xmax = (np.nanmin(ydata), np.nanmax(ydata)) + value_25p = (xmax - xmin) / 4 - # implemented for a single index at moment - prev_ixs = self._previous_data[feature].indices - coll_feature = getattr(self[prev_ixs], feature) + bounds = (xmin, value_25p) + limits = (xmin, xmax) - coll_feature.block_events(True) - coll_feature._set(self._previous_data[feature].data) - coll_feature.block_events(False) + size = np.ptp(bbox[:, 0]) * 1.5 + # center on orthogonal axis + center = bbox[:, 0].mean() + + return bounds, limits, size, center axes = {"x": 0, "y": 1, "z": 2} @@ -477,14 +524,19 @@ class LineStack(LineCollection): def __init__( self, data: List[np.ndarray], - z_position: Union[List[float], float] = None, - thickness: Union[float, List[float]] = 2.0, - colors: Union[List[np.ndarray], np.ndarray] = "w", - cmap: Union[List[str], str] = None, - separation: float = 10, - separation_axis: str = "y", + thickness: float | Iterable[float] = 2.0, + colors: str | Iterable[str] | np.ndarray | Iterable[np.ndarray] = "w", + alpha: float = 1.0, + cmap: Iterable[str] | str = None, + cmap_transform: np.ndarray | List = None, name: str = None, - *args, + names: list[str] = None, + metadata: Any = None, + metadatas: Sequence[Any] | np.ndarray = None, + isolated_buffer: bool = True, + separation: float = 10.0, + separation_axis: str = "y", + kwargs_lines: list[dict] = None, **kwargs, ): """ @@ -493,32 +545,46 @@ def __init__( Parameters ---------- data: list of array-like - List of line data to plot, each element must be a 1D, 2D, or 3D numpy array - if elements are 2D, interpreted as [y_vals, n_lines] + List or array-like of multiple line data to plot - z_position: list of float or float, optional - | if ``float``, single position will be used for all lines - | if ``list`` of ``float``, each value will apply to individual lines + | if ``list`` each item in the list must be a 1D, 2D, or 3D numpy array + | if array-like, must be of shape [n_lines, n_points_line, y | xy | xyz] - thickness: float or list of float, default 2.0 + thickness: float or Iterable of float, default 2.0 | if ``float``, single thickness will be used for all lines | if ``list`` of ``float``, each value will apply to the individual lines - colors: str, RGBA array, list of RGBA array, or list of str, default "w" + colors: str, RGBA array, Iterable of RGBA array, or Iterable of str, default "w" | if single ``str`` such as "w", "r", "b", etc, represents a single color for all lines | if single ``RGBA array`` (tuple or list of size 4), represents a single color for all lines - | is ``list`` of ``str``, represents color for each individual line, example ["w", "b", "r",...] - | if ``list`` of ``RGBA array`` of shape [data_size, 4], represents a single RGBA array for each line + | if ``list`` of ``str``, represents color for each individual line, example ["w", "b", "r",...] + | if ``RGBA array`` of shape [data_size, 4], represents a single RGBA array for each line - cmap: list of str or str, optional + alpha: float, optional + alpha value for colors, if colors is a ``str`` + + cmap: Iterable of str or str, optional | if ``str``, single cmap will be used for all lines | if ``list`` of ``str``, each cmap will apply to the individual lines .. note:: ``cmap`` overrides any arguments passed to ``colors`` + cmap_transform: 1D array-like of numerical values, optional + if provided, these values are used to map the colors from the cmap + name: str, optional - name of the line stack + name of the line collection as a whole + + names: list[str], optional + names of the individual lines in the collection, ``len(names)`` must equal ``len(data)`` + + metadata: Any + metadata associated with the collection as a whole + + metadatas: Iterable or array + metadata for each individual line associated with this collection, this is for the user to manage. + ``len(metadata)`` must be same as ``len(data)`` separation: float, default 10 space in between each line graphic in the stack @@ -526,43 +592,40 @@ def __init__( separation_axis: str, default "y" axis in which the line graphics in the stack should be separated - name: str, optional - name of the line stack - - args - passed to LineCollection - - kwargs - passed to LineCollection - - Features - -------- + kwargs_lines: list[dict], optional + list of kwargs passed to the individual lines, ``len(kwargs_lines)`` must equal ``len(data)`` - Collections support the same features as the underlying graphic. You just have to slice the selection. - - See :class:`LineGraphic` details on the features. + kwargs_collection + kwargs for the collection, passed to GraphicCollection """ - super(LineStack, self).__init__( + super().__init__( data=data, - z_position=z_position, thickness=thickness, colors=colors, + alpha=alpha, cmap=cmap, + cmap_transform=cmap_transform, name=name, + names=names, + metadata=metadata, + metadatas=metadatas, + isolated_buffer=isolated_buffer, + kwargs_lines=kwargs_lines, **kwargs, ) axis_zero = 0 for i, line in enumerate(self.graphics): if separation_axis == "x": - line.position_x = axis_zero + line.offset = (axis_zero, *line.offset[1:]) + elif separation_axis == "y": - line.position_y = axis_zero + line.offset = (line.offset[0], axis_zero, line.offset[2]) axis_zero = ( - axis_zero + line.data()[:, axes[separation_axis]].max() + separation + axis_zero + line.data.value[:, axes[separation_axis]].max() + separation ) self.separation = separation diff --git a/fastplotlib/graphics/scatter.py b/fastplotlib/graphics/scatter.py index 961324c23..b31022f5b 100644 --- a/fastplotlib/graphics/scatter.py +++ b/fastplotlib/graphics/scatter.py @@ -3,24 +3,39 @@ import numpy as np import pygfx -from ..utils import parse_cmap_values -from ._base import Graphic -from ._features import PointsDataFeature, ColorFeature, CmapFeature, PointsSizesFeature - - -class ScatterGraphic(Graphic): - feature_events = ("data", "sizes", "colors", "cmap", "present") +from ._positions_base import PositionsGraphic +from .features import ( + PointsSizesFeature, + UniformSize, + SizeSpace, + VertexPositions, + VertexColors, + UniformColor, + VertexCmap, +) + + +class ScatterGraphic(PositionsGraphic): + _features = { + "data": VertexPositions, + "sizes": (PointsSizesFeature, UniformSize), + "colors": (VertexColors, UniformColor), + "cmap": (VertexCmap, None), + "size_space": SizeSpace, + } def __init__( self, - data: np.ndarray, - sizes: Union[int, float, np.ndarray, list] = 1, - colors: np.ndarray = "w", + data: Any, + colors: str | np.ndarray | tuple[float] | list[float] | list[str] = "w", + uniform_color: bool = False, alpha: float = 1.0, cmap: str = None, - cmap_values: Union[np.ndarray, List] = None, - z_position: float = 0.0, - *args, + cmap_transform: np.ndarray = None, + isolated_buffer: bool = True, + sizes: float | np.ndarray | Sequence[float] = 1, + uniform_size: bool = False, + size_space: str = "screen", **kwargs, ): """ @@ -29,71 +44,102 @@ def __init__( Parameters ---------- data: array-like - Scatter data to plot, 2D must be of shape [n_points, 2], 3D must be of shape [n_points, 3] - - sizes: float or iterable of float, optional, default 1.0 - size of the scatter points - - colors: str, array, or iterable, default "w" - specify colors as a single human readable string, a single RGBA array, - or an iterable of strings or RGBA arrays + Scatter data to plot, Can provide 2D, or a 3D data. 2D data must be of shape [n_points, 2]. + 3D data must be of shape [n_points, 3] - cmap: str, optional - apply a colormap to the scatter instead of assigning colors manually, this - overrides any argument passed to "colors" + colors: str, array, tuple, list, Sequence, default "w" + specify colors as a single human-readable string, a single RGBA array, + or a Sequence (array, tuple, or list) of strings or RGBA arrays - cmap_values: 1D array-like or list of numerical values, optional - if provided, these values are used to map the colors from the cmap + uniform_color: bool, default False + if True, uses a uniform buffer for the scatter point colors. Useful if you need to + save GPU VRAM when all points have the same color. alpha: float, optional, default 1.0 alpha value for the colors - z_position: float, optional - z-axis position for placing the graphic - - args - passed to Graphic + cmap: str, optional + apply a colormap to the scatter instead of assigning colors manually, this + overrides any argument passed to "colors". For supported colormaps see the + ``cmap`` library catalogue: https://cmap-docs.readthedocs.io/en/stable/catalog/ - kwargs - passed to Graphic + cmap_transform: 1D array-like or list of numerical values, optional + if provided, these values are used to map the colors from the cmap - Features - -------- + isolated_buffer: bool, default True + whether the buffers should be isolated from the user input array. + Generally always ``True``, ``False`` is for rare advanced use if you have large arrays. - **data**: :class:`.ImageDataFeature` - Manages the line [x, y, z] positions data buffer, allows regular and fancy indexing. + sizes: float or iterable of float, optional, default 1.0 + sizes of the scatter points - **colors**: :class:`.ColorFeature` - Manages the color buffer, allows regular and fancy indexing. + uniform_size: bool, default False + if True, uses a uniform buffer for the scatter point sizes. Useful if you need to + save GPU VRAM when all points have the same size. - **cmap**: :class:`.CmapFeature` - Manages the cmap, wraps :class:`.ColorFeature` to add additional functionality relevant to cmaps. + size_space: str, default "screen" + coordinate space in which the size is expressed ("screen", "world", "model") - **present**: :class:`.PresentFeature` - Control the presence of the Graphic in the scene, set to ``True`` or ``False`` + kwargs + passed to :class:`.Graphic` """ - self.data = PointsDataFeature(self, data) - n_datapoints = self.data().shape[0] - if cmap is not None: - colors = parse_cmap_values( - n_colors=n_datapoints, cmap_name=cmap, cmap_values=cmap_values - ) - - self.colors = ColorFeature(self, colors, n_colors=n_datapoints, alpha=alpha) - self.cmap = CmapFeature( - self, self.colors(), cmap_name=cmap, cmap_values=cmap_values + super().__init__( + data=data, + colors=colors, + uniform_color=uniform_color, + alpha=alpha, + cmap=cmap, + cmap_transform=cmap_transform, + isolated_buffer=isolated_buffer, + size_space=size_space, + **kwargs, ) - self.sizes = PointsSizesFeature(self, sizes) - super(ScatterGraphic, self).__init__(*args, **kwargs) - + n_datapoints = self.data.value.shape[0] + + geo_kwargs = {"positions": self._data.buffer} + material_kwargs = {"pick_write": True} + self._size_space = SizeSpace(size_space) + + if uniform_color: + material_kwargs["color_mode"] = "uniform" + material_kwargs["color"] = self.colors + else: + material_kwargs["color_mode"] = "vertex" + geo_kwargs["colors"] = self.colors.buffer + + if uniform_size: + material_kwargs["size_mode"] = "uniform" + self._sizes = UniformSize(sizes) + material_kwargs["size"] = self.sizes + else: + material_kwargs["size_mode"] = "vertex" + self._sizes = PointsSizesFeature(sizes, n_datapoints=n_datapoints) + geo_kwargs["sizes"] = self.sizes.buffer + + material_kwargs["size_space"] = self.size_space world_object = pygfx.Points( - pygfx.Geometry(positions=self.data(), sizes=self.sizes(), colors=self.colors()), - material=pygfx.PointsMaterial(color_mode="vertex", vertex_sizes=True), + pygfx.Geometry(**geo_kwargs), + material=pygfx.PointsMaterial(**material_kwargs), ) self._set_world_object(world_object) - self.position_z = z_position + @property + def sizes(self) -> PointsSizesFeature | float: + """Get or set the scatter point size(s)""" + if isinstance(self._sizes, PointsSizesFeature): + return self._sizes + + elif isinstance(self._sizes, UniformSize): + return self._sizes.value + + @sizes.setter + def sizes(self, value): + if isinstance(self._sizes, PointsSizesFeature): + self._sizes[:] = value + + elif isinstance(self._sizes, UniformSize): + self._sizes.set_value(self, value) diff --git a/fastplotlib/graphics/selectors/__init__.py b/fastplotlib/graphics/selectors/__init__.py index 1fb0c453e..9133192e9 100644 --- a/fastplotlib/graphics/selectors/__init__.py +++ b/fastplotlib/graphics/selectors/__init__.py @@ -1,12 +1,7 @@ from ._linear import LinearSelector from ._linear_region import LinearRegionSelector from ._polygon import PolygonSelector +from ._rectangle import RectangleSelector -from ._sync import Synchronizer -__all__ = [ - "LinearSelector", - "LinearRegionSelector", - "PolygonSelector", - "Synchronizer", -] +__all__ = ["LinearSelector", "LinearRegionSelector", "RectangleSelector"] diff --git a/fastplotlib/graphics/selectors/_base_selector.py b/fastplotlib/graphics/selectors/_base_selector.py index e6796f270..5cef0c6b0 100644 --- a/fastplotlib/graphics/selectors/_base_selector.py +++ b/fastplotlib/graphics/selectors/_base_selector.py @@ -3,6 +3,7 @@ from functools import partial import numpy as np +import pygfx from pygfx import WorldObject, Line, Mesh, Points @@ -15,12 +16,17 @@ class MoveInfo: stores move info for a WorldObject """ - # last position for an edge, fill, or vertex in world coordinates - # can be None, such as key events - last_position: Union[np.ndarray, None] + # The initial selection. Differs per type of selector + start_selection: Any + + # The initial world position of the cursor + start_position: np.ndarray | None + + # Delta position in world coordinates + delta: np.ndarray # WorldObject or "key" event - source: Union[WorldObject, str] + source: WorldObject | str # key bindings used to move the selector @@ -34,7 +40,73 @@ class MoveInfo: # Selector base class class BaseSelector(Graphic): - feature_events = ("selection",) + @property + def axis(self) -> str: + return self._axis + + @property + def fill_color(self) -> pygfx.Color: + """Returns the fill color of the selector, ``None`` if selector has no fill.""" + return self._fill_color + + @fill_color.setter + def fill_color(self, color: str | Sequence[float]): + """ + Set the fill color of the selector. + + Parameters + ---------- + color : str | Sequence[float] + String or sequence of floats that gets converted into a ``pygfx.Color`` object. + """ + color = pygfx.Color(color) + for fill in self._fill: + fill.material.color = color + self._original_colors[fill] = color + self._fill_color = color + + @property + def vertex_color(self) -> pygfx.Color: + """Returns the vertex color of the selector, ``None`` if selector has no vertices.""" + return self._vertex_color + + @vertex_color.setter + def vertex_color(self, color: str | Sequence[float]): + """ + Set the vertex color of the selector. + + Parameters + ---------- + color : str | Sequence[float] + String or sequence of floats that gets converted into a ``pygfx.Color`` object. + """ + color = pygfx.Color(color) + for vertex in self._vertices: + vertex.material.color = color + vertex.material.edge_color = color + self._original_colors[vertex] = color + self._vertex_color = color + + @property + def edge_color(self) -> pygfx.Color: + """Returns the edge color of the selector""" + return self._edge_color + + @edge_color.setter + def edge_color(self, color: str | Sequence[float]): + """ + Set the edge color of the selector. + + Parameters + ---------- + color : str | Sequence[float] + String or sequence of floats that gets converted into a ``pygfx.Color`` object. + """ + color = pygfx.Color(color) + for edge in self._edges: + edge.material.color = color + self._original_colors[edge] = color + self._edge_color = color def __init__( self, @@ -44,7 +116,8 @@ def __init__( hover_responsive: Tuple[WorldObject, ...] = None, arrow_keys_modifier: str = None, axis: str = None, - name: str = None + parent: Graphic = None, + **kwargs, ): if edges is None: edges = tuple() @@ -63,17 +136,22 @@ def __init__( self._edges + self._fill + self._vertices ) + for wo in self._world_objects: + wo.material.pick_write = True + self._hover_responsive: Tuple[WorldObject, ...] = hover_responsive + # Original color of object that we change the colors of + self._original_colors = {} + + # Colors as they are changed by the hover events, so they can be restored after a move action + self._hover_colors = {} + if hover_responsive is not None: - self._original_colors = dict() for wo in self._hover_responsive: self._original_colors[wo] = wo.material.color - self.axis = axis - - # current delta in world coordinates - self.delta: np.ndarray = None + self._axis = axis self.arrow_keys_modifier = arrow_keys_modifier # if not False, moves the slider on every render cycle @@ -94,7 +172,9 @@ def __init__( self._pygfx_event = None - Graphic.__init__(self, name=name) + self._parent = parent + + Graphic.__init__(self, **kwargs) def get_selected_index(self): """Not implemented for this selector""" @@ -109,7 +189,7 @@ def get_selected_data(self): raise NotImplementedError def _get_source(self, graphic): - if self.parent is None and graphic is None: + if self._parent is None and graphic is None: raise AttributeError( "No Graphic to apply selector. " "You must either set a ``parent`` Graphic on the selector, or pass a graphic." @@ -119,11 +199,11 @@ def _get_source(self, graphic): if graphic is not None: source = graphic else: - source = self.parent + source = self._parent return source - def _add_plot_area_hook(self, plot_area): + def _fpl_add_plot_area_hook(self, plot_area): self._plot_area = plot_area # when the pointer is pressed on a fill, edge or vertex @@ -136,8 +216,10 @@ def _add_plot_area_hook(self, plot_area): for fill in self._fill: if fill.material.color_is_transparent: - pfunc_fill = partial(self._check_fill_pointer_event, fill) - self._plot_area.renderer.add_event_handler(pfunc_fill, "pointer_down") + self._pfunc_fill = partial(self._check_fill_pointer_event, fill) + self._plot_area.renderer.add_event_handler( + self._pfunc_fill, "pointer_down" + ) # when the pointer moves self._plot_area.renderer.add_event_handler(self._move, "pointer_move") @@ -198,9 +280,14 @@ def _move_start(self, event_source: WorldObject, ev): pygfx ``Event`` """ - last_position = self._plot_area.map_screen_to_world(ev) + position = self._plot_area.map_screen_to_world(ev) - self._move_info = MoveInfo(last_position=last_position, source=event_source) + self._move_info = MoveInfo( + start_selection=None, + start_position=position, + delta=np.zeros_like(position), + source=event_source, + ) self._moving = True self._initial_controller_state = self._plot_area.controller.enabled @@ -223,33 +310,31 @@ def _move(self, ev): # disable controller during moves self._plot_area.controller.enabled = False - # get pointer current world position - world_pos = self._plot_area.map_screen_to_world(ev) - - # outside this viewport - if world_pos is None: - return + # get pointer current world position, in 'mouse capute mode' + world_pos = self._plot_area.map_screen_to_world(ev, allow_outside=True) - # compute the delta - self.delta = world_pos - self._move_info.last_position + # update the delta + self._move_info.delta = world_pos - self._move_info.start_position self._pygfx_event = ev - self._move_graphic(self.delta) - - # update last position - self._move_info.last_position = world_pos + self._move_graphic(self._move_info) # restore the initial controller state # if it was disabled, keep it disabled self._plot_area.controller.enabled = self._initial_controller_state - def _move_graphic(self, delta: np.ndarray): + def _move_graphic(self, move_info: MoveInfo): raise NotImplementedError("Must be implemented in subclass") def _move_end(self, ev): self._move_info = None self._moving = False + # Reset hover state + for wo, color in self._hover_colors.items(): + wo.material.color = color + self._hover_colors.clear() + # restore the initial controller state # if it was disabled, keep it disabled if self._initial_controller_state is not None: @@ -259,36 +344,56 @@ def _move_to_pointer(self, ev): """ Calculates delta just using current world object position and calls self._move_graphic(). """ - current_position: np.ndarray = self.position - - # middle mouse button clicks + # check for middle mouse button click if ev.button != 3: return + if self.axis == "x": + offset = self.offset[0] + elif self.axis == "y": + offset = self.offset[1] + + if self.selection.size > 1: + # linear region selectors + # TODO: get center for rectangle and polygon selectors + center = self.selection.mean(axis=0) + + else: + # linear selectors + center = self.selection + + current_pos_world: np.ndarray = center + offset + world_pos = self._plot_area.map_screen_to_world(ev) # outside this viewport if world_pos is None: return - self.delta = world_pos - current_position + delta = world_pos - current_pos_world self._pygfx_event = ev # use fill by default as the source, such as in region selectors if len(self._fill) > 0: - self._move_info = MoveInfo( - last_position=current_position, source=self._fill[0] + move_info = MoveInfo( + start_selection=None, + start_position=None, + delta=delta, + source=self._fill[0], ) # else use an edge, such as for linear selector else: - self._move_info = MoveInfo( - last_position=current_position, source=self._edges[0] + move_info = MoveInfo( + start_position=None, + start_selection=None, + delta=delta, + source=self._edges[0], ) - self._move_graphic(self.delta) - self._move_info = None + self._move_graphic(move_info) def _pointer_enter(self, ev): + if self._hover_responsive is None: return @@ -299,17 +404,23 @@ def _pointer_enter(self, ev): if wo in self._edges: self._edge_hovered = True - wo.material.color = "magenta" + if self._moving: + self._hover_colors[wo] = "magenta" + else: + wo.material.color = "magenta" def _pointer_leave(self, ev): if self._hover_responsive is None: return + self._edge_hovered = False + # reset colors for wo in self._hover_responsive: - wo.material.color = self._original_colors[wo] - - self._edge_hovered = False + if self._moving: + self._hover_colors[wo] = self._original_colors[wo] + else: + wo.material.color = self._original_colors[wo] def _toggle_arrow_key_moveable(self, ev): self.arrow_key_events_enabled = not self.arrow_key_events_enabled @@ -322,15 +433,23 @@ def _key_hold(self): # set event source # use fill by default as the source if len(self._fill) > 0: - self._move_info = MoveInfo(last_position=None, source=self._fill[0]) + move_info = MoveInfo( + start_selection=None, + start_position=None, + delta=delta, + source=self._fill[0], + ) # else use an edge else: - self._move_info = MoveInfo(last_position=None, source=self._edges[0]) + move_info = MoveInfo( + start_selection=None, + start_position=None, + delta=delta, + source=self._edges[0], + ) # move the graphic - self._move_graphic(delta=delta) - - self._move_info = None + self._move_graphic(move_info) def _key_down(self, ev): # key bind modifier must be set and must be used for the event @@ -345,8 +464,6 @@ def _key_down(self, ev): if ev.key not in key_bind_direction.keys(): return - # print(ev.key) - self._key_move_value = ev.key def _key_up(self, ev): @@ -354,28 +471,10 @@ def _key_up(self, ev): if ev.key in key_bind_direction.keys(): self._key_move_value = False - self._move_info = None - - def _cleanup(self): - """ - Cleanup plot renderer event handlers etc. - """ - self._plot_area.renderer.remove_event_handler(self._move, "pointer_move") - self._plot_area.renderer.remove_event_handler(self._move_end, "pointer_up") - self._plot_area.renderer.remove_event_handler(self._move_to_pointer, "click") - - self._plot_area.renderer.remove_event_handler(self._key_down, "key_down") - self._plot_area.renderer.remove_event_handler(self._key_up, "key_up") - - # remove animation func - self._plot_area.remove_animation(self._key_hold) - - # clear wo event handlers - for wo in self._world_objects: - wo._event_handlers.clear() - - if hasattr(self, "feature_events"): - feature_names = getattr(self, "feature_events") - for n in feature_names: - fea = getattr(self, n) - fea.clear_event_handlers() + def _fpl_prepare_del(self): + if hasattr(self, "_pfunc_fill"): + self._plot_area.renderer.remove_event_handler( + self._pfunc_fill, "pointer_down" + ) + del self._pfunc_fill + super()._fpl_prepare_del() diff --git a/fastplotlib/graphics/selectors/_linear.py b/fastplotlib/graphics/selectors/_linear.py index 16ccab1b4..64a673768 100644 --- a/fastplotlib/graphics/selectors/_linear.py +++ b/fastplotlib/graphics/selectors/_linear.py @@ -1,138 +1,158 @@ -from typing import * import math from numbers import Real +from typing import Sequence import numpy as np - import pygfx -try: - import ipywidgets +from .._base import Graphic +from .._collection_base import GraphicCollection +from ..features._selection_features import LinearSelectionFeature +from ._base_selector import BaseSelector, MoveInfo - HAS_IPYWIDGETS = True -except (ImportError, ModuleNotFoundError): - HAS_IPYWIDGETS = False -from .._base import Graphic, GraphicCollection -from .._features._selection_features import LinearSelectionFeature -from ._base_selector import BaseSelector +class LinearSelector(BaseSelector): + _features = {"selection": LinearSelectionFeature} + @property + def parent(self) -> Graphic: + return self._parent + + @property + def selection(self) -> float: + """ + x or y value of selector's current position + """ + return self._selection.value + + @selection.setter + def selection(self, value: int): + graphic = self._parent + + if isinstance(graphic, GraphicCollection): + pass + + self._selection.set_value(self, value) -class LinearSelector(BaseSelector): @property - def limits(self) -> Tuple[float, float]: + def limits(self) -> tuple[float, float]: return self._limits @limits.setter - def limits(self, values: Tuple[float, float]): + def limits(self, values: tuple[float, float]): # check that `values` is an iterable of two real numbers # using `Real` here allows it to work with builtin `int` and `float` types, and numpy scaler types if len(values) != 2 or not all(map(lambda v: isinstance(v, Real), values)): - raise TypeError( - "limits must be an iterable of two numeric values" - ) - self._limits = tuple(map(round, values)) # if values are close to zero things get weird so round them + raise TypeError("limits must be an iterable of two numeric values") + self._limits = tuple( + map(round, values) + ) # if values are close to zero things get weird so round them self.selection._limits = self._limits + @property + def edge_color(self) -> pygfx.Color: + """Returns the color of the linear selector.""" + return self._edge_color + + @edge_color.setter + def edge_color(self, color: str | Sequence[float]): + """ + Set the color of the linear selector. + + Parameters + ---------- + color : str | Sequence[float] + String or sequence of floats that gets converted into a ``pygfx.Color`` object. + """ + color = pygfx.Color(color) + # only want to change inner line color + self._edges[0].material.color = color + self._original_colors[self._edges[0]] = color + self._edge_color = color + # TODO: make `selection` arg in graphics data space not world space def __init__( self, - selection: int, - limits: Tuple[int, int], + selection: float, + limits: Sequence[float], axis: str = "x", parent: Graphic = None, - end_points: Tuple[int, int] = None, - arrow_keys_modifier: str = "Shift", + edge_color: str | Sequence[float] | np.ndarray = "w", thickness: float = 2.5, - color: Any = "w", + arrow_keys_modifier: str = "Shift", name: str = None, ): """ - Create a horizontal or vertical line slider that is synced to an ipywidget IntSlider + Create a horizontal or vertical line that can be used to select a value along an axis. Parameters ---------- selection: int - initial x or y selected position for the slider, in world space + initial x or y selected position for the selector, in data space limits: (int, int) - (min, max) limits along the x or y axis for the selector, in world space + (min, max) limits along the x or y-axis for the selector, in data space axis: str, default "x" - "x" | "y", the axis which the slider can move along + "x" | "y", the axis along which the selector can move parent: Graphic - parent graphic for this LineSelector - - end_points: (int, int) - set length of slider by bounding it between two x-pos or two y-pos + parent graphic for this LinearSelector arrow_keys_modifier: str modifier key that must be pressed to initiate movement using arrow keys, must be one of: - "Control", "Shift", "Alt" or ``None``. Double click on the selector first to enable the + "Control", "Shift", "Alt" or ``None``. Double-click the selector first to enable the arrow key movements, or set the attribute ``arrow_key_events_enabled = True`` thickness: float, default 2.5 - thickness of the slider + thickness of the selector - color: Any, default "w" - selection to set the color of the slider + edge_color: str | tuple | np.ndarray, default "w" + color of the selector name: str, optional - name of line slider - - Features - -------- - - selection: :class:`.LinearSelectionFeature` - ``selection()`` returns the current selector position in world coordinates. - Use ``get_selected_index()`` to get the currently selected index in data - space. - Use ``selection.add_event_handler()`` to add callback functions that are - called when the LinearSelector selection changes. See feature class for - event pick_info table + name of linear selector """ + self._fill_color = None + self._edge_color = pygfx.Color(edge_color) + self._vertex_color = None + if len(limits) != 2: raise ValueError("limits must be a tuple of 2 integers, i.e. (int, int)") - self._limits = tuple(map(round, limits)) - - selection = round(selection) + self._limits = np.asarray(limits) if axis == "x": - xs = np.zeros(2) - ys = np.array(end_points) - zs = np.zeros(2) + xs = np.array([selection, selection], dtype=np.float32) + ys = np.array([0, 1], dtype=np.float32) + zs = np.zeros(2, dtype=np.float32) - line_data = np.column_stack([xs, ys, zs]) elif axis == "y": - xs = np.array(end_points) - ys = np.zeros(2) - zs = np.zeros(2) + xs = np.array([0, 1], dtype=np.float32) + ys = np.array([selection, selection], dtype=np.float32) + zs = np.zeros(2, dtype=np.float32) - line_data = np.column_stack([xs, ys, zs]) else: - raise ValueError("`axis` must be one of 'x' or 'y'") + raise ValueError("`axis` must be one of 'x' | 'y'") - line_data = line_data.astype(np.float32) + line_data = np.column_stack([xs, ys, zs]) - if thickness < 1.1: - material = pygfx.LineThinMaterial - else: - material = pygfx.LineMaterial + material = pygfx.LineInfiniteSegmentMaterial self.colors_outer = pygfx.Color([0.3, 0.3, 0.3, 1.0]) line_inner = pygfx.Line( # self.data.feature_data because data is a Buffer geometry=pygfx.Geometry(positions=line_data), - material=material(thickness=thickness, color=color), + material=material(thickness=thickness, color=edge_color, pick_write=True), ) self.line_outer = pygfx.Line( geometry=pygfx.Geometry(positions=line_data), - material=material(thickness=thickness + 6, color=self.colors_outer), + material=material( + thickness=thickness + 6, color=self.colors_outer, pick_write=True + ), ) line_inner.world.z = self.line_outer.world.z + 1 @@ -142,25 +162,10 @@ def __init__( world_object.add(self.line_outer) world_object.add(line_inner) - self._set_world_object(world_object) - - # set x or y position if axis == "x": - self.position_x = selection - else: - self.position_y = selection - - self.selection = LinearSelectionFeature( - self, axis=axis, value=selection, limits=self._limits - ) - - self._move_info: dict = None - - self.parent = parent - - self._block_ipywidget_call = False - - self._handled_widgets = list() + offset = (parent.offset[0], 0, 0) + elif axis == "y": + offset = (0, parent.offset[1], 0) # init base selector BaseSelector.__init__( @@ -169,153 +174,38 @@ def __init__( hover_responsive=(line_inner, self.line_outer), arrow_keys_modifier=arrow_keys_modifier, axis=axis, + parent=parent, name=name, + offset=offset, ) - def _setup_ipywidget_slider(self, widget): - # setup an ipywidget slider with bidirectional callbacks to this LinearSelector - value = self.selection() - - if isinstance(widget, ipywidgets.IntSlider): - value = int(value) - - widget.value = value - - # user changes widget -> linear selection changes - widget.observe(self._ipywidget_callback, "value") - - # user changes linear selection -> widget changes - self.selection.add_event_handler(self._update_ipywidgets) - - self._handled_widgets.append(widget) - - def _update_ipywidgets(self, ev): - # update the ipywidget sliders when LinearSelector value changes - self._block_ipywidget_call = True # prevent infinite recursion - - value = ev.pick_info["new_data"] - # update all the handled slider widgets - for widget in self._handled_widgets: - if isinstance(widget, ipywidgets.IntSlider): - widget.value = int(value) - else: - widget.value = value - - self._block_ipywidget_call = False - - def _ipywidget_callback(self, change): - # update the LinearSelector if the ipywidget value changes - if self._block_ipywidget_call or self._moving: - return - - self.selection = change["new"] - - def _add_plot_area_hook(self, plot_area): - super()._add_plot_area_hook(plot_area=plot_area) - - # resize the slider widgets when the canvas is resized - self._plot_area.renderer.add_event_handler(self._set_slider_layout, "resize") - - def _set_slider_layout(self, *args): - w, h = self._plot_area.renderer.logical_size - - for widget in self._handled_widgets: - widget.layout = ipywidgets.Layout(width=f"{w}px") - - def make_ipywidget_slider(self, kind: str = "IntSlider", **kwargs): - """ - Makes and returns an ipywidget slider that is associated to this LinearSelector - - Parameters - ---------- - kind: str - "IntSlider", "FloatSlider" or "FloatLogSlider" - - kwargs - passed to the ipywidget slider constructor - - Returns - ------- - ipywidgets.Intslider or ipywidgets.FloatSlider - - """ - - if not HAS_IPYWIDGETS: - raise ImportError( - "Must installed `ipywidgets` to use `make_ipywidget_slider()`" - ) - - if kind not in ["IntSlider", "FloatSlider", "FloatLogSlider"]: - raise TypeError( - f"`kind` must be one of: 'IntSlider', 'FloatSlider' or 'FloatLogSlider'\n" - f"You have passed: '{kind}'" - ) - - cls = getattr(ipywidgets, kind) - - value = self.selection() - if "Int" in kind: - value = int(self.selection()) + self._set_world_object(world_object) - slider = cls( - min=self.limits[0], - max=self.limits[1], - value=value, - **kwargs, + self._selection = LinearSelectionFeature( + axis=axis, value=selection, limits=self._limits ) - self.add_ipywidget_handler(slider) - return slider - - def add_ipywidget_handler( - self, - widget, - step: Union[int, float] = None - ): - """ - Bidirectionally connect events with a ipywidget slider - - Parameters - ---------- - widget: ipywidgets.IntSlider, ipywidgets.FloatSlider, or ipywidgets.FloatLogSlider - ipywidget slider to connect to - - step: int or float, default ``None`` - step size, if ``None`` 100 steps are created + if self._parent is not None: + self.selection = selection + else: + self._selection.set_value(self, selection) + def get_selected_index(self, graphic: Graphic = None) -> int | list[int]: """ + Data index the selector is currently at w.r.t. the Graphic data. - if not isinstance(widget, (ipywidgets.IntSlider, ipywidgets.FloatSlider, ipywidgets.FloatLogSlider)): - raise TypeError( - f"`widget` must be one of: ipywidgets.IntSlider, ipywidgets.FloatSlider, or ipywidgets.FloatLogSlider\n" - f"You have passed a: <{type(widget)}" - ) - - if step is None: - step = (self.limits[1] - self.limits[0]) / 100 - - if isinstance(widget, ipywidgets.IntSlider): - step = int(step) - - widget.step = step - - self._setup_ipywidget_slider(widget) - - def get_selected_index(self, graphic: Graphic = None) -> Union[int, List[int]]: - """ - Data index the slider is currently at w.r.t. the Graphic data. With LineGraphic data, the geometry x or y - position is not always the data position, for example if plotting data using np.linspace. Use this to get - the data index of the slider. + With LineGraphic data, the geometry x or y position is not always the data position, for example if plotting + data using np.linspace. Use this to get the data index of the selector. Parameters ---------- graphic: Graphic, optional - Graphic to get the selected data index from. Default is the parent graphic associated to the slider. + Graphic to get the selected data index from. Default is the parent graphic associated to the selector. Returns ------- int or List[int] - data index the slider is currently at, list of ``int`` if a Collection + data index the selector is currently at, list of ``int`` if a Collection """ source = self._get_source(graphic) @@ -332,37 +222,44 @@ def get_selected_index(self, graphic: Graphic = None) -> Union[int, List[int]]: def _get_selected_index(self, graphic): # the array to search for the closest value along that axis if self.axis == "x": - geo_positions = graphic.data()[:, 0] - offset = getattr(graphic, f"position_{self.axis}") - else: - geo_positions = graphic.data()[:, 1] - offset = getattr(graphic, f"position_{self.axis}") + data = graphic.data[:, 0] + elif self.axis == "y": + data = graphic.data[:, 1] - if "Line" in graphic.__class__.__name__: - # we want to find the index of the geometry position that is closest to the slider's geometry position - find_value = self.selection() - offset + if ( + "Line" in graphic.__class__.__name__ + or "Scatter" in graphic.__class__.__name__ + ): + # we want to find the index of the data closest to the selector position + find_value = self.selection - # get closest data index to the world space position of the slider - idx = np.searchsorted(geo_positions, find_value, side="left") + # get closest data index to the world space position of the selector + idx = np.searchsorted(data, find_value, side="left") if idx > 0 and ( - idx == len(geo_positions) - or math.fabs(find_value - geo_positions[idx - 1]) - < math.fabs(find_value - geo_positions[idx]) + idx == len(data) + or math.fabs(find_value - data[idx - 1]) + < math.fabs(find_value - data[idx]) ): return round(idx - 1) else: return round(idx) - if ( - "Heatmap" in graphic.__class__.__name__ - or "Image" in graphic.__class__.__name__ - ): + if "Image" in graphic.__class__.__name__: # indices map directly to grid geometry for image data buffer - index = self.selection() - offset - return round(index) + index = self.selection + shape = graphic.data[:].shape + + if self.axis == "x": + # assume selecting columns + upper_bound = shape[1] - 1 + elif self.axis == "y": + # assume selecting rows + upper_bound = shape[0] - 1 - def _move_graphic(self, delta: np.ndarray): + return min(round(index), upper_bound) + + def _move_graphic(self, move_info: MoveInfo): """ Moves the graphic @@ -373,15 +270,9 @@ def _move_graphic(self, delta: np.ndarray): """ - if self.axis == "x": - self.selection = self.selection() + delta[0] - else: - self.selection = self.selection() + delta[1] - - def _cleanup(self): - super()._cleanup() - - for widget in self._handled_widgets: - widget.unobserve(self._ipywidget_callback, "value") + # If this the first move in this drag, store initial selection + if move_info.start_selection is None: + move_info.start_selection = self.selection - self._plot_area.renderer.remove_event_handler(self._set_slider_layout, "resize") + delta = move_info.delta[0] if self.axis == "x" else move_info.delta[1] + self.selection = move_info.start_selection + delta diff --git a/fastplotlib/graphics/selectors/_linear_region.py b/fastplotlib/graphics/selectors/_linear_region.py index 2a7547d5b..e93e2a147 100644 --- a/fastplotlib/graphics/selectors/_linear_region.py +++ b/fastplotlib/graphics/selectors/_linear_region.py @@ -1,87 +1,103 @@ -from typing import * from numbers import Real - -try: - import ipywidgets - - HAS_IPYWIDGETS = True -except (ImportError, ModuleNotFoundError): - HAS_IPYWIDGETS = False +from typing import Sequence import numpy as np - import pygfx -from .._base import Graphic, GraphicCollection -from ._base_selector import BaseSelector -from .._features._selection_features import LinearRegionSelectionFeature +from .._base import Graphic +from .._collection_base import GraphicCollection +from ..features._selection_features import LinearRegionSelectionFeature +from ._base_selector import BaseSelector, MoveInfo class LinearRegionSelector(BaseSelector): + _features = {"selection": LinearRegionSelectionFeature} + + @property + def parent(self) -> Graphic | None: + """graphic that the selector is associated with""" + return self._parent + + @property + def selection(self) -> np.ndarray[float]: + """ + (min, max) of selector along selector's axis + """ + # TODO: This probably does not account for rotation since world.position + # does not account for rotation, we can do this later + + return self._selection.value.copy() + + # TODO: if no parent graphic is set, this just returns values in world space + # but should we change it? + + @selection.setter + def selection(self, selection: Sequence[float]): + # set (min, max) of the selector in data space + graphic = self._parent + + self._selection.set_value(self, selection) + @property - def limits(self) -> Tuple[float, float]: + def limits(self) -> tuple[float, float]: return self._limits @limits.setter - def limits(self, values: Tuple[float, float]): + def limits(self, values: tuple[float, float]): # check that `values` is an iterable of two real numbers # using `Real` here allows it to work with builtin `int` and `float` types, and numpy scaler types if len(values) != 2 or not all(map(lambda v: isinstance(v, Real), values)): - raise TypeError( - "limits must be an iterable of two numeric values" - ) - self._limits = tuple(map(round, values)) # if values are close to zero things get weird so round them - self.selection._limits = self._limits + raise TypeError("limits must be an iterable of two numeric values") + self._limits = tuple( + map(round, values) + ) # if values are close to zero things get weird so round them + self._selection._limits = self._limits def __init__( self, - bounds: Tuple[int, int], - limits: Tuple[int, int], - size: int, - origin: Tuple[int, int], + selection: Sequence[float], + limits: Sequence[float], + size: float, + center: float, axis: str = "x", parent: Graphic = None, resizable: bool = True, - fill_color=(0, 0, 0.35), - edge_color=(0.8, 0.8, 0), - edge_thickness: int = 3, + fill_color: str | Sequence[float] = (0, 0, 0.35), + edge_color: str | Sequence[float] = (0.8, 0.6, 0), + edge_thickness: float = 8, arrow_keys_modifier: str = "Shift", name: str = None, ): """ Create a LinearRegionSelector graphic which can be moved only along either the x-axis or y-axis. - Allows sub-selecting data from a ``Graphic`` or from multiple Graphics. - - bounds[0], limits[0], and position[0] must be identical. + Allows sub-selecting data from a parent ``Graphic`` or from multiple Graphics. - Holding the right mouse button while dragging an edge will force the entire region selector to move. This is - a when using transparent fill areas due to ``pygfx`` picking limitations. - - **Note:** Events get very weird if the values of bounds, limits and origin are close to zero. If you need - a linear selector with small data, we recommend scaling the data and then using the selector. + Assumes that the data under the selector is a function of the axis on which the selector moves + along. Example: if the selector is along the x-axis, then there must be only one y-value for each + x-value, otherwise methods such as ``get_selected_data()`` do not make sense. Parameters ---------- - bounds: (int, int) - the initial bounds of the linear selector + selection: (float, float) + initial (min, max) x or y values - limits: (int, int) - (min limit, max limit) for the selector + limits: (float, float) + (min limit, max limit) within which the selector can move size: int - height or width of the selector + usually the data range, height or width of the selector - origin: (int, int) - initial position of the selector + center: float + usually the data mean, center offset of the selector on the orthogonal axis axis: str, default "x" - "x" | "y", axis for the selector + "x" | "y", axis along which the selector can move - parent: Graphic, default ``None`` - associate this selector with a parent Graphic + parent: ``Graphic`` instance, default ``None`` + associate this selector with a parent ``Graphic`` from which to fetch data or indices resizable: bool - if ``True``, the edges can be dragged to resize the width of the linear selection + if ``True``, the edges can be dragged to change the range of the selection fill_color: str, array, or tuple fill color for the selector, passed to pygfx.Color @@ -89,151 +105,122 @@ def __init__( edge_color: str, array, or tuple edge color for the selector, passed to pygfx.Color + edge_thickness: float, default 8 + edge thickness + arrow_keys_modifier: str modifier key that must be pressed to initiate movement using arrow keys, must be one of: "Control", "Shift", "Alt" or ``None`` - name: str - name for this selector graphic - - Features - -------- - - selection: :class:`.LinearRegionSelectionFeature` - ``selection()`` returns the current selector bounds in world coordinates. - Use ``get_selected_indices()`` to return the selected indices in data - space, and ``get_selected_data()`` to return the selected data. - Use ``selection.add_event_handler()`` to add callback functions that are - called when the LinearSelector selection changes. See feature class for - event pick_info table. + name: str, optional + name of this selector graphic """ + self._edge_color = pygfx.Color(edge_color) + self._fill_color = pygfx.Color(fill_color) + self._vertex_color = None # lots of very close to zero values etc. so round them, otherwise things get weird - bounds = tuple(map(round, bounds)) - self._limits = tuple(map(round, limits)) - origin = tuple(map(round, origin)) + if not len(selection) == 2: + raise ValueError + + selection = np.asarray(selection) + + if not len(limits) == 2: + raise ValueError + + self._limits = np.asarray(limits) # TODO: sanity checks, we recommend users to add LinearSelection using the add_linear_selector() methods # TODO: so we can worry about the sanity checks later - # if axis == "x": - # if limits[0] != origin[0] != bounds[0]: - # raise ValueError( - # f"limits[0] != position[0] != bounds[0]\n" - # f"{limits[0]} != {origin[0]} != {bounds[0]}" - # ) - # - # elif axis == "y": - # # initial y-position is position[1] - # if limits[0] != origin[1] != bounds[0]: - # raise ValueError( - # f"limits[0] != position[1] != bounds[0]\n" - # f"{limits[0]} != {origin[1]} != {bounds[0]}" - # ) - - self.parent = parent - - # world object for this will be a group - # basic mesh for the fill area of the selector - # line for each edge of the selector + group = pygfx.Group() - self._set_world_object(group) if axis == "x": mesh = pygfx.Mesh( pygfx.box_geometry(1, size, 1), - pygfx.MeshBasicMaterial(color=pygfx.Color(fill_color)), + pygfx.MeshBasicMaterial( + color=pygfx.Color(self.fill_color), pick_write=True + ), ) elif axis == "y": mesh = pygfx.Mesh( pygfx.box_geometry(size, 1, 1), - pygfx.MeshBasicMaterial(color=pygfx.Color(fill_color)), + pygfx.MeshBasicMaterial( + color=pygfx.Color(self.fill_color), pick_write=True + ), ) else: raise ValueError("`axis` must be one of 'x' or 'y'") # the fill of the selection self.fill = mesh - self.fill.world.position = (*origin, -2) + # no x, y offsets for linear region selector + # everything is done by setting the mesh data + # and line positions + self.fill.world.position = (0, 0, -2) - self.world_object.add(self.fill) + group.add(self.fill) self._resizable = resizable if axis == "x": - # position data for the left edge line - left_line_data = np.array( - [ - [origin[0], (-size / 2) + origin[1], 0.5], - [origin[0], (size / 2) + origin[1], 0.5], - ] - ).astype(np.float32) - - left_line = pygfx.Line( - pygfx.Geometry(positions=left_line_data), - pygfx.LineMaterial(thickness=edge_thickness, color=edge_color), - ) - - # position data for the right edge line - right_line_data = np.array( - [ - [bounds[1], (-size / 2) + origin[1], 0.5], - [bounds[1], (size / 2) + origin[1], 0.5], - ] - ).astype(np.float32) - - right_line = pygfx.Line( - pygfx.Geometry(positions=right_line_data), - pygfx.LineMaterial(thickness=edge_thickness, color=edge_color), + # just some data to initialize the edge lines + init_line_data = np.array([[0, -size / 2, 0], [0, size / 2, 0]]).astype( + np.float32 ) - self.edges: Tuple[pygfx.Line, pygfx.Line] = (left_line, right_line) - elif axis == "y": - # position data for the left edge line - bottom_line_data = np.array( - [ - [(-size / 2) + origin[0], origin[1], 0.5], - [(size / 2) + origin[0], origin[1], 0.5], - ] - ).astype(np.float32) - - bottom_line = pygfx.Line( - pygfx.Geometry(positions=bottom_line_data), - pygfx.LineMaterial(thickness=edge_thickness, color=edge_color), - ) - - # position data for the right edge line - top_line_data = np.array( + # just some line data to initialize y axis edge lines + init_line_data = np.array( [ - [(-size / 2) + origin[0], bounds[1], 0.5], - [(size / 2) + origin[0], bounds[1], 0.5], + [-size / 2, 0, 0], + [size / 2, 0, 0], ] ).astype(np.float32) - top_line = pygfx.Line( - pygfx.Geometry(positions=top_line_data), - pygfx.LineMaterial(thickness=edge_thickness, color=edge_color), - ) - - self.edges: Tuple[pygfx.Line, pygfx.Line] = (bottom_line, top_line) - else: raise ValueError("axis argument must be one of 'x' or 'y'") + line0 = pygfx.Line( + pygfx.Geometry( + positions=init_line_data.copy() + ), # copy so the line buffer is isolated + pygfx.LineMaterial( + thickness=edge_thickness, color=self.edge_color, pick_write=True + ), + ) + line1 = pygfx.Line( + pygfx.Geometry( + positions=init_line_data.copy() + ), # copy so the line buffer is isolated + pygfx.LineMaterial( + thickness=edge_thickness, color=self.edge_color, pick_write=True + ), + ) + + self.edges: tuple[pygfx.Line, pygfx.Line] = (line0, line1) + # add the edge lines for edge in self.edges: - edge.world.z = -1 - self.world_object.add(edge) + edge.world.z = -0.5 + group.add(edge) + + # TODO: if parent offset changes, we should set the selector offset too, use offset evented property + # TODO: add check if parent is `None`, will throw error otherwise + if axis == "x": + offset = (parent.offset[0], center + parent.offset[1], 0) + elif axis == "y": + offset = (center + parent.offset[1], parent.offset[1], 0) # set the initial bounds of the selector - self.selection = LinearRegionSelectionFeature( - self, bounds, axis=axis, limits=self._limits + # compensate for any offset from the parent graphic + # selection feature only works in world space, not data space + self._selection = LinearRegionSelectionFeature( + selection, axis=axis, limits=self._limits ) - self._handled_widgets = list() - self._block_ipywidget_call = False self._pygfx_event = None BaseSelector.__init__( @@ -243,15 +230,22 @@ def __init__( hover_responsive=self.edges, arrow_keys_modifier=arrow_keys_modifier, axis=axis, - name=name + parent=parent, + name=name, + offset=offset, ) + self._set_world_object(group) + + self.selection = selection + def get_selected_data( self, graphic: Graphic = None - ) -> Union[np.ndarray, List[np.ndarray], None]: + ) -> np.ndarray | list[np.ndarray]: """ Get the ``Graphic`` data bounded by the current selection. - Returns a view of the full data array. + Returns a view of the data array. + If the ``Graphic`` is a collection, such as a ``LineStack``, it returns a list of views of the full array. Can be performed on the ``parent`` Graphic or on another graphic by passing to the ``graphic`` arg. @@ -262,15 +256,16 @@ def get_selected_data( Parameters ---------- - graphic: Graphic, optional + graphic: Graphic, optional, default ``None`` if provided, returns the data selection from this graphic instead of the graphic set as ``parent`` Returns ------- - np.ndarray, List[np.ndarray], or None + np.ndarray or List[np.ndarray] view or list of views of the full array, returns ``None`` if selection is empty """ + source = self._get_source(graphic) ixs = self.get_selected_indices(source) @@ -279,44 +274,51 @@ def get_selected_data( # this will return a list of views of the arrays, therefore no copy operations occur # it's fine and fast even as a list of views because there is no re-allocating of memory # this is fast even for slicing a 10,000 x 5,000 LineStack - data_selections: List[np.ndarray] = list() + data_selections: list[np.ndarray] = list() for i, g in enumerate(source.graphics): if ixs[i].size == 0: - data_selections.append(None) + data_selections.append( + np.array([], dtype=np.float32).reshape(0, 3) + ) else: - s = slice(ixs[i][0], ixs[i][-1]) - data_selections.append(g.data.buffer.data[s]) + s = slice( + ixs[i][0], ixs[i][-1] + 1 + ) # add 1 because these are direct indices + # slices n_datapoints dim + data_selections.append(g.data[s]) - return source[:].data[s] - # just for one Line graphic + return data_selections else: if ixs.size == 0: - return None + # empty selection + return np.array([], dtype=np.float32).reshape(0, 3) - s = slice(ixs[0], ixs[-1]) - return source.data.buffer.data[s] + s = slice( + ixs[0], ixs[-1] + 1 + ) # add 1 to end because these are direct indices + # slices n_datapoints dim + # slice with min, max is faster than using all the indices + return source.data[s] + + if "Image" in source.__class__.__name__: + s = slice(ixs[0], ixs[-1] + 1) - if ( - "Heatmap" in source.__class__.__name__ - or "Image" in source.__class__.__name__ - ): - s = slice(ixs[0], ixs[-1]) if self.axis == "x": - return source.data()[:, s] + # slice columns + return source.data[:, s] + elif self.axis == "y": - return source.data()[s] + # slice rows + return source.data[s] def get_selected_indices( self, graphic: Graphic = None - ) -> Union[np.ndarray, List[np.ndarray]]: + ) -> np.ndarray | list[np.ndarray]: """ Returns the indices of the ``Graphic`` data bounded by the current selection. - This is useful because the ``bounds`` min and max are not necessarily the same - as the Line Geometry positions x-vals or y-vals. For example, if if you used a - np.linspace(0, 100, 1000) for xvals in your line, then you will have 1,000 - x-positions. If the selection ``bounds`` are set to ``(0, 10)``, the returned - indices would be ``(0, 100)``. + + These are the data indices along the selector's "axis" which correspond to the data under the selector. Parameters ---------- @@ -326,214 +328,80 @@ def get_selected_indices( Returns ------- Union[np.ndarray, List[np.ndarray]] - data indices of the selection, list of np.ndarray if graphic is LineCollection + data indices of the selection, list of np.ndarray if graphic is a collection """ + # we get the indices from the source graphic source = self._get_source(graphic) - # if the graphic position is not at (0, 0) then the bounds must be offset - offset = getattr(source, f"position_{self.selection.axis}") - offset_bounds = tuple(v - offset for v in self.selection()) - - # need them to be int to use as indices - offset_bounds = tuple(map(int, offset_bounds)) - - if self.selection.axis == "x": + # get the offset of the source graphic + if self.axis == "x": dim = 0 - else: + elif self.axis == "y": dim = 1 - if "Line" in source.__class__.__name__: - # now we need to map from graphic space to data space - # we can have more than 1 datapoint between two integer locations in the world space + # selector (min, max) data values along axis + bounds = self.selection + + if ( + "Line" in source.__class__.__name__ + or "Scatter" in source.__class__.__name__ + ): + # gets indices corresponding to n_datapoints dim + # data is [n_datapoints, xyz], so we return + # indices that can be used to slice `n_datapoints` if isinstance(source, GraphicCollection): ixs = list() for g in source.graphics: - # map for each graphic in the collection - g_ixs = np.where( - (g.data()[:, dim] >= offset_bounds[0]) - & (g.data()[:, dim] <= offset_bounds[1]) - )[0] + # indices for each graphic in the collection + data = g.data[:, dim] + g_ixs = np.where((data >= bounds[0]) & (data <= bounds[1]))[0] ixs.append(g_ixs) else: # map this only this graphic - ixs = np.where( - (source.data()[:, dim] >= offset_bounds[0]) - & (source.data()[:, dim] <= offset_bounds[1]) - )[0] + data = source.data[:, dim] + ixs = np.where((data >= bounds[0]) & (data <= bounds[1]))[0] return ixs - if ( - "Heatmap" in source.__class__.__name__ - or "Image" in source.__class__.__name__ - ): + if "Image" in source.__class__.__name__: # indices map directly to grid geometry for image data buffer - ixs = np.arange(*self.selection(), dtype=int) - return ixs - - def make_ipywidget_slider(self, kind: str = "IntRangeSlider", **kwargs): - """ - Makes and returns an ipywidget slider that is associated to this LinearSelector - - Parameters - ---------- - kind: str - "IntRangeSlider" or "FloatRangeSlider" - - kwargs - passed to the ipywidget slider constructor - - Returns - ------- - ipywidgets.Intslider or ipywidgets.FloatSlider - - """ - - if not HAS_IPYWIDGETS: - raise ImportError( - "Must installed `ipywidgets` to use `make_ipywidget_slider()`" - ) - - if kind not in ["IntRangeSlider", "FloatRangeSlider"]: - raise TypeError( - f"`kind` must be one of: 'IntRangeSlider', or 'FloatRangeSlider'\n" - f"You have passed: '{kind}'" - ) - - cls = getattr(ipywidgets, kind) - - value = self.selection() - if "Int" in kind: - value = tuple(map(int, self.selection())) - - slider = cls( - min=self.limits[0], - max=self.limits[1], - value=value, - **kwargs, - ) - self.add_ipywidget_handler(slider) - - return slider - - def add_ipywidget_handler( - self, - widget, - step: Union[int, float] = None - ): - """ - Bidirectionally connect events with a ipywidget slider - - Parameters - ---------- - widget: ipywidgets.IntRangeSlider or ipywidgets.FloatRangeSlider - ipywidget slider to connect to - - step: int or float, default ``None`` - step size, if ``None`` 100 steps are created - - """ - if not isinstance(widget, (ipywidgets.IntRangeSlider, ipywidgets.FloatRangeSlider)): - raise TypeError( - f"`widget` must be one of: ipywidgets.IntRangeSlider or ipywidgets.FloatRangeSlider\n" - f"You have passed a: <{type(widget)}" - ) - - if step is None: - step = (self.limits[1] - self.limits[0]) / 100 - - if isinstance(widget, ipywidgets.IntSlider): - step = int(step) - - widget.step = step - - self._setup_ipywidget_slider(widget) - - def _setup_ipywidget_slider(self, widget): - # setup an ipywidget slider with bidirectional callbacks to this LinearSelector - value = self.selection() - - if isinstance(widget, ipywidgets.IntSlider): - value = tuple(map(int, value)) - - widget.value = value - - # user changes widget -> linear selection changes - widget.observe(self._ipywidget_callback, "value") + return np.arange(*bounds, dtype=int) - # user changes linear selection -> widget changes - self.selection.add_event_handler(self._update_ipywidgets) + def _move_graphic(self, move_info: MoveInfo): - self._plot_area.renderer.add_event_handler(self._set_slider_layout, "resize") + # If this the first move in this drag, store initial selection + if move_info.start_selection is None: + move_info.start_selection = self.selection - self._handled_widgets.append(widget) + # add delta to current min, max to get new positions + delta = move_info.delta[0] if self.axis == "x" else move_info.delta[1] - def _update_ipywidgets(self, ev): - # update the ipywidget sliders when LinearSelector value changes - self._block_ipywidget_call = True # prevent infinite recursion + # Get original selection + cur_min, cur_max = move_info.start_selection - value = ev.pick_info["new_data"] - # update all the handled slider widgets - for widget in self._handled_widgets: - if isinstance(widget, ipywidgets.IntSlider): - widget.value = tuple(map(int, value)) - else: - widget.value = value - - self._block_ipywidget_call = False - - def _ipywidget_callback(self, change): - # update the LinearSelector if the ipywidget value changes - if self._block_ipywidget_call or self._moving: - return - - self.selection = change["new"] - - def _set_slider_layout(self, *args): - w, h = self._plot_area.renderer.logical_size - - for widget in self._handled_widgets: - widget.layout = ipywidgets.Layout(width=f"{w}px") - - def _move_graphic(self, delta: np.ndarray): - # add delta to current bounds to get new positions - if self.selection.axis == "x": - # min and max of current bounds, i.e. the edges - xmin, xmax = self.selection() - - # new left bound position - bound0_new = xmin + delta[0] - - # new right bound position - bound1_new = xmax + delta[0] - else: - # min and max of current bounds, i.e. the edges - ymin, ymax = self.selection() - - # new bottom bound position - bound0_new = ymin + delta[1] - - # new top bound position - bound1_new = ymax + delta[1] - - # move entire selector if source was fill - if self._move_info.source == self.fill: - # set the new bounds - self.selection = (bound0_new, bound1_new) + # move entire selector if event source was fill + if move_info.source == self.fill: + # Limit the delta to avoid weird resizine behavior + min_delta = self.limits[0] - cur_min + max_delta = self.limits[1] - cur_max + delta = np.clip(delta, min_delta, max_delta) + # Update both bounds with equal amount + self._selection.set_value(self, (cur_min + delta, cur_max + delta)) return - # if selector is not resizable do nothing + # if selector not resizable return if not self._resizable: return - # if resizable, move edges - if self._move_info.source == self.edges[0]: + # if event source was an edge and selector is resizable, + # move the edge that caused the event + if move_info.source == self.edges[0]: # change only left or bottom bound - self.selection = (bound0_new, self.selection()[1]) + new_min = min(cur_min + delta, cur_max) + self._selection.set_value(self, (new_min, cur_max)) - elif self._move_info.source == self.edges[1]: + elif move_info.source == self.edges[1]: # change only right or top bound - self.selection = (self.selection()[0], bound1_new) - else: - return + new_max = max(cur_max + delta, cur_min) + self._selection.set_value(self, (cur_min, new_max)) diff --git a/fastplotlib/graphics/selectors/_mesh_positions.py b/fastplotlib/graphics/selectors/_mesh_positions.py deleted file mode 100644 index 07ff60498..000000000 --- a/fastplotlib/graphics/selectors/_mesh_positions.py +++ /dev/null @@ -1,2 +0,0 @@ -import numpy as np - diff --git a/fastplotlib/graphics/selectors/_polygon.py b/fastplotlib/graphics/selectors/_polygon.py index b347da0f4..22e42e63e 100644 --- a/fastplotlib/graphics/selectors/_polygon.py +++ b/fastplotlib/graphics/selectors/_polygon.py @@ -16,7 +16,6 @@ def __init__( parent: Graphic = None, name: str = None, ): - self.parent = parent group = pygfx.Group() @@ -40,14 +39,16 @@ def get_vertices(self) -> np.ndarray: return np.vstack(vertices) - def _add_plot_area_hook(self, plot_area): + def _fpl_add_plot_area_hook(self, plot_area): self._plot_area = plot_area # click to add new segment self._plot_area.renderer.add_event_handler(self._add_segment, "click") # pointer move to change endpoint of segment - self._plot_area.renderer.add_event_handler(self._move_segment_endpoint, "pointer_move") + self._plot_area.renderer.add_event_handler( + self._move_segment_endpoint, "pointer_move" + ) # click to finish existing segment self._plot_area.renderer.add_event_handler(self._finish_segment, "click") @@ -61,15 +62,24 @@ def _add_segment(self, ev): """After click event, adds a new line segment""" self._current_mode = "add" - last_position = self._plot_area.map_screen_to_world(ev) - self._move_info = MoveInfo(last_position=last_position, source=None) + position = self._plot_area.map_screen_to_world(ev) + self._move_info = MoveInfo( + start_selection=None, + start_position=position, + delta=np.zeros_like(position), + source=None, + ) # line with same position for start and end until mouse moves - data = np.array([last_position, last_position]) + data = np.array([position, position]) new_line = pygfx.Line( geometry=pygfx.Geometry(positions=data.astype(np.float32)), - material=pygfx.LineMaterial(thickness=self.edge_width, color=pygfx.Color(self.edge_color)) + material=pygfx.LineMaterial( + thickness=self.edge_width, + color=pygfx.Color(self.edge_color), + pick_write=True, + ), ) self.world_object.add(new_line) @@ -86,7 +96,9 @@ def _move_segment_endpoint(self, ev): return # change endpoint - self.world_object.children[-1].geometry.positions.data[1] = np.array([world_pos]).astype(np.float32) + self.world_object.children[-1].geometry.positions.data[1] = np.array( + [world_pos] + ).astype(np.float32) self.world_object.children[-1].geometry.positions.update_range() def _finish_segment(self, ev): @@ -114,14 +126,17 @@ def _finish_polygon(self, ev): return # make new line to connect first and last vertices - data = np.vstack([ - world_pos, - self.world_object.children[0].geometry.positions.data[0] - ]) + data = np.vstack( + [world_pos, self.world_object.children[0].geometry.positions.data[0]] + ) new_line = pygfx.Line( geometry=pygfx.Geometry(positions=data.astype(np.float32)), - material=pygfx.LineMaterial(thickness=self.edge_width, color=pygfx.Color(self.edge_color)) + material=pygfx.LineMaterial( + thickness=self.edge_width, + color=pygfx.Color(self.edge_color), + pick_write=True, + ), ) self.world_object.add(new_line) @@ -130,7 +145,7 @@ def _finish_polygon(self, ev): self._add_segment: "click", self._move_segment_endpoint: "pointer_move", self._finish_segment: "click", - self._finish_polygon: "double_click" + self._finish_polygon: "double_click", } for handler, event in handlers.items(): diff --git a/fastplotlib/graphics/selectors/_rectangle.py b/fastplotlib/graphics/selectors/_rectangle.py new file mode 100644 index 000000000..db7691e07 --- /dev/null +++ b/fastplotlib/graphics/selectors/_rectangle.py @@ -0,0 +1,536 @@ +import warnings +from numbers import Real +from typing import * +import numpy as np + +import pygfx +from .._collection_base import GraphicCollection + +from .._base import Graphic +from ..features import RectangleSelectionFeature +from ._base_selector import BaseSelector, MoveInfo + + +class RectangleSelector(BaseSelector): + _features = {"selection": RectangleSelectionFeature} + + @property + def parent(self) -> Graphic | None: + """Graphic that selector is associated with.""" + return self._parent + + @property + def selection(self) -> np.ndarray[float]: + """ + (xmin, xmax, ymin, ymax) of the rectangle selection + """ + return self._selection.value.copy() + + @selection.setter + def selection(self, selection: Sequence[float]): + # set (xmin, xmax, ymin, ymax) of the selector in data space + graphic = self._parent + + if isinstance(graphic, GraphicCollection): + pass + + self._selection.set_value(self, selection) + + @property + def limits(self) -> Tuple[float, float, float, float]: + """Return the limits of the selector.""" + return self._limits + + @limits.setter + def limits(self, values: Tuple[float, float, float, float]): + if len(values) != 4 or not all(map(lambda v: isinstance(v, Real), values)): + raise TypeError("limits must be an iterable of two numeric values") + self._limits = tuple( + map(round, values) + ) # if values are close to zero things get weird so round them + self._selection._limits = self._limits + + def __init__( + self, + selection: Sequence[float], + limits: Sequence[float], + parent: Graphic = None, + resizable: bool = True, + fill_color=(0, 0, 0.35), + edge_color=(0.8, 0.6, 0), + edge_thickness: float = 8, + vertex_color=(0.7, 0.4, 0), + vertex_size: float = 8, + arrow_keys_modifier: str = "Shift", + name: str = None, + ): + """ + Create a RectangleSelector graphic which can be used to select a rectangular region of data. + Allows sub-selecting data from a ``Graphic`` or from multiple Graphics. + + Parameters + ---------- + selection: (float, float, float, float) + the initial selection of the rectangle, ``(x_min, x_max, y_min, y_max)`` + + limits: (float, float, float, float) + limits of the selector, ``(x_min, x_max, y_min, y_max)`` + + parent: Graphic, default ``None`` + associate this selector with a parent Graphic + + resizable: bool, default ``True`` + if ``True``, the edges can be dragged to resize the selection + + fill_color: str, array, or tuple + fill color for the selector as a str or RGBA array + + edge_color: str, array, or tuple + edge color for the selector as a str or RGBA array + + edge_thickness: float, default 8 + edge thickness + + vertex_color: str, array, or tuple + vertex color for the selector as a str or RGBA array + + arrow_keys_modifier: str + modifier key that must be pressed to initiate movement using arrow keys, must be one of: + "Control", "Shift", "Alt" or ``None`` + + name: str + name for this selector graphic + """ + + if not len(selection) == 4 or not len(limits) == 4: + raise ValueError() + + # lots of very close to zero values etc. so round them + selection = tuple(map(round, selection)) + limits = tuple(map(round, limits)) + + self._parent = parent + self._limits = np.asarray(limits) + self._resizable = resizable + + selection = np.asarray(selection) + + # world object for this will be a group + # basic mesh for the fill area of the selector + # line for each edge of the selector + group = pygfx.Group() + + xmin, xmax, ymin, ymax = selection + + self._fill_color = pygfx.Color(fill_color) + self._edge_color = pygfx.Color(edge_color) + self._vertex_color = pygfx.Color(vertex_color) + + width = xmax - xmin + height = ymax - ymin + + if width < 0 or height < 0: + raise ValueError() + + self.fill = pygfx.Mesh( + pygfx.box_geometry(width, height, 1), + pygfx.MeshBasicMaterial( + color=pygfx.Color(self.fill_color), pick_write=True + ), + ) + + self.fill.world.position = (0, 0, -2) + + group.add(self.fill) + + # position data for the left edge line + left_line_data = np.array( + [ + [xmin, ymin, 0], + [xmin, ymax, 0], + ] + ).astype(np.float32) + + left_line = pygfx.Line( + pygfx.Geometry(positions=left_line_data.copy()), + pygfx.LineMaterial(thickness=edge_thickness, color=self.edge_color), + ) + + # position data for the right edge line + right_line_data = np.array( + [ + [xmax, ymin, 0], + [xmax, ymax, 0], + ] + ).astype(np.float32) + + right_line = pygfx.Line( + pygfx.Geometry(positions=right_line_data.copy()), + pygfx.LineMaterial(thickness=edge_thickness, color=self.edge_color), + ) + + # position data for the left edge line + bottom_line_data = np.array( + [ + [xmin, ymax, 0], + [xmax, ymax, 0], + ] + ).astype(np.float32) + + bottom_line = pygfx.Line( + pygfx.Geometry(positions=bottom_line_data.copy()), + pygfx.LineMaterial(thickness=edge_thickness, color=self.edge_color), + ) + + # position data for the right edge line + top_line_data = np.array( + [ + [xmin, ymin, 0], + [xmax, ymin, 0], + ] + ).astype(np.float32) + + top_line = pygfx.Line( + pygfx.Geometry(positions=top_line_data.copy()), + pygfx.LineMaterial(thickness=edge_thickness, color=self.edge_color), + ) + + self.edges: Tuple[pygfx.Line, pygfx.Line, pygfx.Line, pygfx.Line] = ( + left_line, + right_line, + bottom_line, + top_line, + ) # left line, right line, bottom line, top line + + # add the edge lines + for edge in self.edges: + edge.world.z = -0.5 + group.add(edge) + + # vertices + top_left_vertex_data = (xmin, ymax, 1) + top_right_vertex_data = (xmax, ymax, 1) + bottom_left_vertex_data = (xmin, ymin, 1) + bottom_right_vertex_data = (xmax, ymin, 1) + + top_left_vertex = pygfx.Points( + pygfx.Geometry(positions=[top_left_vertex_data], sizes=[vertex_size]), + pygfx.PointsMarkerMaterial( + marker="square", + size=vertex_size, + color=self.vertex_color, + size_mode="vertex", + edge_color=self.vertex_color, + ), + ) + + top_right_vertex = pygfx.Points( + pygfx.Geometry(positions=[top_right_vertex_data], sizes=[vertex_size]), + pygfx.PointsMarkerMaterial( + marker="square", + size=vertex_size, + color=self.vertex_color, + size_mode="vertex", + edge_color=self.vertex_color, + ), + ) + + bottom_left_vertex = pygfx.Points( + pygfx.Geometry(positions=[bottom_left_vertex_data], sizes=[vertex_size]), + pygfx.PointsMarkerMaterial( + marker="square", + size=vertex_size, + color=self.vertex_color, + size_mode="vertex", + edge_color=self.vertex_color, + ), + ) + + bottom_right_vertex = pygfx.Points( + pygfx.Geometry(positions=[bottom_right_vertex_data], sizes=[vertex_size]), + pygfx.PointsMarkerMaterial( + marker="square", + size=vertex_size, + color=self.vertex_color, + size_mode="vertex", + edge_color=self.vertex_color, + ), + ) + + self.vertices: Tuple[pygfx.Points, pygfx.Points, pygfx.Points, pygfx.Points] = ( + bottom_left_vertex, + bottom_right_vertex, + top_left_vertex, + top_right_vertex, + ) + + for vertex in self.vertices: + vertex.world.z = -0.25 + group.add(vertex) + + self._selection = RectangleSelectionFeature(selection, limits=self._limits) + + # include parent offset + if parent is not None: + offset = (parent.offset[0], parent.offset[1], 0) + else: + offset = (0, 0, 0) + + BaseSelector.__init__( + self, + edges=self.edges, + fill=(self.fill,), + vertices=self.vertices, + hover_responsive=(*self.edges, *self.vertices), + arrow_keys_modifier=arrow_keys_modifier, + parent=parent, + name=name, + offset=offset, + ) + + self._set_world_object(group) + + self.selection = selection + + def get_selected_data( + self, graphic: Graphic = None, mode: str = "full" + ) -> Union[np.ndarray, List[np.ndarray]]: + """ + Get the ``Graphic`` data bounded by the current selection. + Returns a view of the data array. + + If the ``Graphic`` is a collection, such as a ``LineStack``, it returns a list of views of the full array. + Can be performed on the ``parent`` Graphic or on another graphic by passing to the ``graphic`` arg. + + Parameters + ---------- + graphic: Graphic, optional, default ``None`` + if provided, returns the data selection from this graphic instead of the graphic set as ``parent`` + mode: str, default 'full' + One of 'full', 'partial', or 'ignore'. Indicates how selected data should be returned based on the + selectors position over the graphic. Only used for ``LineGraphic``, ``LineCollection``, and ``LineStack`` + | If 'full', will return all data bounded by the x and y limits of the selector even if partial indices + along one axis are not fully covered by the selector. + | If 'partial' will return only the data that is bounded by the selector, missing indices not bounded by the + selector will be set to NaNs + | If 'ignore', will only return data for graphics that have indices completely bounded by the selector + + Returns + ------- + np.ndarray or List[np.ndarray] + view or list of views of the full array, returns empty array if selection is empty + """ + source = self._get_source(graphic) + ixs = self.get_selected_indices(source) + + # do not need to check for mode for images, because the selector is bounded by the image shape + # will always be `full` + if "Image" in source.__class__.__name__: + row_ixs, col_ixs = ixs + row_slice = slice(row_ixs[0], row_ixs[-1] + 1) + col_slice = slice(col_ixs[0], col_ixs[-1] + 1) + + return source.data[row_slice, col_slice] + + if mode not in ["full", "partial", "ignore"]: + raise ValueError( + f"`mode` must be one of 'full', 'partial', or 'ignore', you have passed {mode}" + ) + if "Line" in source.__class__.__name__: + + if isinstance(source, GraphicCollection): + data_selections: List[np.ndarray] = list() + + for i, g in enumerate(source.graphics): + # want to keep same length as the original line collection + if ixs[i].size == 0: + data_selections.append( + np.array([], dtype=np.float32).reshape(0, 3) + ) + else: + # s gives entire slice of data along the x + s = slice( + ixs[i][0], ixs[i][-1] + 1 + ) # add 1 because these are direct indices + # slices n_datapoints dim + + # calculate missing ixs using set difference + # then calculate shift + missing_ixs = ( + np.setdiff1d(np.arange(ixs[i][0], ixs[i][-1] + 1), ixs[i]) + - ixs[i][0] + ) + + match mode: + # take all ixs, ignore missing + case "full": + data_selections.append(g.data[s]) + # set missing ixs data to NaNs + case "partial": + if len(missing_ixs) > 0: + data = g.data[s].copy() + data[missing_ixs] = np.nan + data_selections.append(data) + else: + data_selections.append(g.data[s]) + # ignore lines that do not have full ixs to start + case "ignore": + if len(missing_ixs) > 0: + data_selections.append( + np.array([], dtype=np.float32).reshape(0, 3) + ) + else: + data_selections.append(g.data[s]) + return data_selections + else: # for lines + if ixs.size == 0: + # empty selection + return np.array([], dtype=np.float32).reshape(0, 3) + + s = slice( + ixs[0], ixs[-1] + 1 + ) # add 1 to end because these are direct indices + # slices n_datapoints dim + # slice with min, max is faster than using all the indices + + # get missing ixs + missing_ixs = np.setdiff1d(np.arange(ixs[0], ixs[-1] + 1), ixs) - ixs[0] + + match mode: + # return all, do not care about missing + case "full": + return source.data[s] + # set missing to NaNs + case "partial": + if len(missing_ixs) > 0: + data = source.data[s].copy() + data[missing_ixs] = np.nan + return data + else: + return source.data[s] + # missing means nothing will be returned even if selector is partially over data + # warn the user and return empty + case "ignore": + if len(missing_ixs) > 0: + warnings.warn( + "You have selected 'ignore' mode. Selected graphic has incomplete indices. " + "Move the selector or change the mode to one of `partial` or `full`." + ) + return np.array([], dtype=np.float32) + else: + return source.data[s] + + def get_selected_indices( + self, graphic: Graphic = None + ) -> np.ndarray | tuple[np.ndarray]: + """ + Returns the indices of the ``Graphic`` data bounded by the current selection. + + These are the data indices which correspond to the data under the selector. + + Parameters + ---------- + graphic: Graphic, default ``None`` + If provided, returns the selection indices from this graphic instrad of the graphic set as ``parent`` + + Returns + ------- + Union[np.ndarray, List[np.ndarray]] + data indicies of the selection + | tuple of [row_indices, col_indices] if the graphic is an image + | list of indices along the x-dimension for each line if graphic is a line collection + | array of indices along the x-dimension if graphic is a line + """ + # get indices from source + source = self._get_source(graphic) + + # selector (xmin, xmax, ymin, ymax) values + xmin, xmax, ymin, ymax = self.selection + + # image data does not need to check for mode because the selector is always bounded + # to the image + if "Image" in source.__class__.__name__: + col_ixs = np.arange(xmin, xmax, dtype=int) + row_ixs = np.arange(ymin, ymax, dtype=int) + return row_ixs, col_ixs + + if "Line" in source.__class__.__name__: + if isinstance(source, GraphicCollection): + ixs = list() + for g in source.graphics: + data = g.data.value + g_ixs = np.where( + (data[:, 0] >= xmin - g.offset[0]) + & (data[:, 0] <= xmax - g.offset[0]) + & (data[:, 1] >= ymin - g.offset[1]) + & (data[:, 1] <= ymax - g.offset[1]) + )[0] + ixs.append(g_ixs) + else: + # map only this graphic + data = source.data.value + ixs = np.where( + (data[:, 0] >= xmin) + & (data[:, 0] <= xmax) + & (data[:, 1] >= ymin) + & (data[:, 1] <= ymax) + )[0] + + return ixs + + def _move_graphic(self, move_info: MoveInfo): + + # If this the first move in this drag, store initial selection + if move_info.start_selection is None: + move_info.start_selection = self.selection + + # add delta to current min, max to get new positions + deltax, deltay = move_info.delta[0], move_info.delta[1] + + # Get original selection + xmin, xmax, ymin, ymax = move_info.start_selection + + # move entire selector if source is fill + if move_info.source == self.fill: + # Limit the delta to avoid weird resizine behavior + min_deltax = self.limits[0] - xmin + max_deltax = self.limits[1] - xmax + min_deltay = self.limits[2] - ymin + max_deltay = self.limits[3] - ymax + deltax = np.clip(deltax, min_deltax, max_deltax) + deltay = np.clip(deltay, min_deltay, max_deltay) + # Update all bounds with equal amount + self._selection.set_value( + self, (xmin + deltax, xmax + deltax, ymin + deltay, ymax + deltay) + ) + return + + # if selector not resizable return + if not self._resizable: + return + + xmin_new = min(xmin + deltax, xmax) + xmax_new = max(xmax + deltax, xmin) + ymin_new = min(ymin + deltay, ymax) + ymax_new = max(ymax + deltay, ymin) + + if move_info.source == self.vertices[0]: # bottom left + self._selection.set_value(self, (xmin_new, xmax, ymin_new, ymax)) + if move_info.source == self.vertices[1]: # bottom right + self._selection.set_value(self, (xmin, xmax_new, ymin_new, ymax)) + if move_info.source == self.vertices[2]: # top left + self._selection.set_value(self, (xmin_new, xmax, ymin, ymax_new)) + if move_info.source == self.vertices[3]: # top right + self._selection.set_value(self, (xmin, xmax_new, ymin, ymax_new)) + # if event source was an edge and selector is resizable, move the edge that caused the event + if move_info.source == self.edges[0]: + self._selection.set_value(self, (xmin_new, xmax, ymin, ymax)) + if move_info.source == self.edges[1]: + self._selection.set_value(self, (xmin, xmax_new, ymin, ymax)) + if move_info.source == self.edges[2]: + self._selection.set_value(self, (xmin, xmax, ymin_new, ymax)) + if move_info.source == self.edges[3]: + self._selection.set_value(self, (xmin, xmax, ymin, ymax_new)) + + def _move_to_pointer(self, ev): + pass diff --git a/fastplotlib/graphics/selectors/_rectangle_region.py b/fastplotlib/graphics/selectors/_rectangle_region.py deleted file mode 100644 index a5a9a31cb..000000000 --- a/fastplotlib/graphics/selectors/_rectangle_region.py +++ /dev/null @@ -1,355 +0,0 @@ -from typing import * -import numpy as np - -import pygfx - -from .._base import Graphic -from .._features import GraphicFeature -from ._base_selector import BaseSelector -from ._mesh_positions import x_right, x_left, y_top, y_bottom - - -class RectangleBoundsFeature(GraphicFeature): - """ - Feature for a linearly bounding region - - **event pick info** - - +--------------------+-------------------------------+--------------------------------------------------------------------------------------+ - | key | type | description | - +====================+===============================+======================================================================================+ - | "selected_indices" | ``numpy.ndarray`` or ``None`` | selected graphic data indices | - | "selected_data" | ``numpy.ndarray`` or ``None`` | selected graphic data | - | "new_data" | ``(float, float)`` | current bounds in world coordinates, NOT necessarily the same as "selected_indices". | - +--------------------+-------------------------------+--------------------------------------------------------------------------------------+ - - """ - - def __init__( - self, parent, bounds: Tuple[int, int], axis: str, limits: Tuple[int, int] - ): - super(RectangleBoundsFeature, self).__init__(parent, data=bounds) - - self._axis = axis - self.limits = limits - - self._set(bounds) - - @property - def axis(self) -> str: - """one of "x" | "y" """ - return self._axis - - def _set(self, value: Tuple[float, float, float, float]): - """ - - Parameters - ---------- - value: Tuple[float] - new values: (xmin, xmax, ymin, ymax) - - Returns - ------- - - """ - xmin, xmax, ymin, ymax = value - - # TODO: make sure new values do not exceed limits - - # change fill mesh - # change left x position of the fill mesh - self._parent.fill.geometry.positions.data[x_left, 0] = xmin - - # change right x position of the fill mesh - self._parent.fill.geometry.positions.data[x_right, 0] = xmax - - # change bottom y position of the fill mesh - self._parent.fill.geometry.positions.data[y_bottom, 1] = ymin - - # change top position of the fill mesh - self._parent.fill.geometry.positions.data[y_top, 1] = ymax - - # change the edge lines - - # each edge line is defined by two end points which are stored in the - # geometry.positions - # [x0, y0, z0] - # [x1, y1, z0] - - # left line - z = self._parent.edges[0].geometry.positions.data[:, -1][0] - self._parent.edges[0].geometry.positions.data[:] = np.array( - [[xmin, ymin, z], [xmin, ymax, z]] - ) - - # right line - self._parent.edges[1].geometry.positions.data[:] = np.array( - [[xmax, ymin, z], [xmax, ymax, z]] - ) - - # bottom line - self._parent.edges[2].geometry.positions.data[:] = np.array( - [[xmin, ymin, z], [xmax, ymin, z]] - ) - - # top line - self._parent.edges[3].geometry.positions.data[:] = np.array( - [[xmin, ymax, z], [xmax, ymax, z]] - ) - - self._data = value # (value[0], value[1]) - - # send changes to GPU - self._parent.fill.geometry.positions.update_range() - - for edge in self._parent.edges: - edge.geometry.positions.update_range() - - # calls any events - self._feature_changed(key=None, new_data=value) - - # TODO: feature_changed - def _feature_changed(self, key: Union[int, slice, Tuple[slice]], new_data: Any): - return - # if len(self._event_handlers) < 1: - # return - # - # if self._parent.parent is not None: - # selected_ixs = self._parent.get_selected_indices() - # selected_data = self._parent.get_selected_data() - # else: - # selected_ixs = None - # selected_data = None - # - # pick_info = { - # "index": None, - # "collection-index": self._collection_index, - # "world_object": self._parent.world_object, - # "new_data": new_data, - # "selected_indices": selected_ixs, - # "selected_data": selected_data - # "graphic", - # "delta", - # "pygfx_event" - # } - # - # event_data = FeatureEvent(type="bounds", pick_info=pick_info) - # - # self._call_event_handlers(event_data) - - -class RectangleRegionSelector(Graphic, BaseSelector): - feature_events = "bounds" - - def __init__( - self, - bounds: Tuple[int, int, int, int], - limits: Tuple[int, int], - origin: Tuple[int, int], - axis: str = "x", - parent: Graphic = None, - resizable: bool = True, - fill_color=(0, 0, 0.35), - edge_color=(0.8, 0.8, 0), - arrow_keys_modifier: str = "Shift", - name: str = None, - ): - """ - Create a LinearRegionSelector graphic which can be moved only along either the x-axis or y-axis. - Allows sub-selecting data from a ``Graphic`` or from multiple Graphics. - - bounds[0], limits[0], and position[0] must be identical - - Parameters - ---------- - bounds: (int, int, int, int) - the initial bounds of the rectangle, ``(x_min, x_max, y_min, y_max)`` - - limits: (int, int, int, int) - limits of the selector, ``(x_min, x_max, y_min, y_max)`` - - origin: (int, int) - initial position of the selector - - axis: str, default ``None`` - Restrict the selector to the "x" or "y" axis. - If the selector is restricted to an axis you cannot change the bounds along the other axis. For example, - if you set ``axis="x"``, then the ``y_min``, ``y_max`` values of the bounds will stay constant. - - parent: Graphic, default ``None`` - associate this selector with a parent Graphic - - resizable: bool - if ``True``, the edges can be dragged to resize the selection - - fill_color: str, array, or tuple - fill color for the selector, passed to pygfx.Color - - edge_color: str, array, or tuple - edge color for the selector, passed to pygfx.Color - - name: str - name for this selector graphic - """ - - # lots of very close to zero values etc. so round them - bounds = tuple(map(round, bounds)) - limits = tuple(map(round, limits)) - origin = tuple(map(round, origin)) - - Graphic.__init__(self, name=name) - - self.parent = parent - - # world object for this will be a group - # basic mesh for the fill area of the selector - # line for each edge of the selector - group = pygfx.Group() - self._set_world_object(group) - - xmin, xmax, ymin, ymax = bounds - - width = xmax - xmin - height = ymax - ymin - - self.fill = pygfx.Mesh( - pygfx.box_geometry(width, height, 1), - pygfx.MeshBasicMaterial(color=pygfx.Color(fill_color)), - ) - - self.fill.position.set(*origin, -2) - self.world_object.add(self.fill) - - # position data for the left edge line - left_line_data = np.array( - [ - [origin[0], (-height / 2) + origin[1], 0.5], - [origin[0], (height / 2) + origin[1], 0.5], - ] - ).astype(np.float32) - - left_line = pygfx.Line( - pygfx.Geometry(positions=left_line_data), - pygfx.LineMaterial(thickness=3, color=edge_color), - ) - - # position data for the right edge line - right_line_data = np.array( - [ - [bounds[1], (-height / 2) + origin[1], 0.5], - [bounds[1], (height / 2) + origin[1], 0.5], - ] - ).astype(np.float32) - - right_line = pygfx.Line( - pygfx.Geometry(positions=right_line_data), - pygfx.LineMaterial(thickness=3, color=edge_color), - ) - - # position data for the left edge line - bottom_line_data = np.array( - [ - [(-width / 2) + origin[0], origin[1], 0.5], - [(width / 2) + origin[0], origin[1], 0.5], - ] - ).astype(np.float32) - - bottom_line = pygfx.Line( - pygfx.Geometry(positions=bottom_line_data), - pygfx.LineMaterial(thickness=3, color=edge_color), - ) - - # position data for the right edge line - top_line_data = np.array( - [ - [(-width / 2) + origin[0], bounds[1], 0.5], - [(width / 2) + origin[0], bounds[1], 0.5], - ] - ).astype(np.float32) - - top_line = pygfx.Line( - pygfx.Geometry(positions=top_line_data), - pygfx.LineMaterial(thickness=3, color=edge_color), - ) - - self.edges: Tuple[pygfx.Line, ...] = ( - left_line, - right_line, - bottom_line, - top_line, - ) # left line, right line, bottom line, top line - - # add the edge lines - for edge in self.edges: - edge.position.set(*origin, -1) - self.world_object.add(edge) - - self._resizable = resizable - self._bounds = RectangleBoundsFeature(self, bounds, axis=axis, limits=limits) - - BaseSelector.__init__( - self, - edges=self.edges, - fill=(self.fill,), - hover_responsive=self.edges, - arrow_keys_modifier=arrow_keys_modifier, - axis=axis, - ) - - @property - def bounds(self) -> RectangleBoundsFeature: - """ - (xmin, xmax, ymin, ymax) The current bounds of the selection in world space. - - These bounds will NOT necessarily correspond to the indices of the data that are under the selection. - Use ``get_selected_indices()` which maps from world space to data indices. - """ - return self._bounds - - def _move_graphic(self, delta): - # new left bound position - xmin_new = Vector3(self.bounds()[0]).add(delta).x - - # new right bound position - xmax_new = Vector3(self.bounds()[1]).add(delta).x - - # new bottom bound position - ymin_new = Vector3(0, self.bounds()[2]).add(delta).y - - # new top bound position - ymax_new = Vector3(0, self.bounds()[3]).add(delta).y - - # move entire selector if source was fill - if self._move_info.source == self.fill: - # set the new bounds - self.bounds = (xmin_new, xmax_new, ymin_new, ymax_new) - return - - # if selector is not resizable do nothing - if not self._resizable: - return - - # if resizable, move edges - - xmin, xmax, ymin, ymax = self.bounds() - - # change only left bound - if self._move_info.source == self.edges[0]: - xmin = xmin_new - - # change only right bound - elif self._move_info.source == self.edges[1]: - xmax = xmax_new - - # change only bottom bound - elif self._move_info.source == self.edges[2]: - ymin = ymin_new - - # change only top bound - elif self._move_info.source == self.edges[3]: - ymax = ymax_new - else: - return - - # set the new bounds - self.bounds = (xmin, xmax, ymin, ymax) diff --git a/fastplotlib/graphics/selectors/_sync.py b/fastplotlib/graphics/selectors/_sync.py deleted file mode 100644 index 9414a2e20..000000000 --- a/fastplotlib/graphics/selectors/_sync.py +++ /dev/null @@ -1,88 +0,0 @@ -from . import LinearSelector -from typing import * - - -class Synchronizer: - def __init__(self, *selectors: LinearSelector, key_bind: Union[str, None] = "Shift"): - """ - Synchronize the movement of `Selectors`. Selectors will move in sync only when the selected `"key_bind"` is - used during the mouse movement event. Valid key binds are: ``"Control"``, ``"Shift"`` and ``"Alt"``. - If ``key_bind`` is ``None`` then the selectors will always be synchronized. - - Parameters - ---------- - selectors - selectors to synchronize - - key_bind: str, default ``"Shift"`` - one of ``"Control"``, ``"Shift"`` and ``"Alt"`` or ``None`` - """ - self._selectors = list() - self.key_bind = key_bind - - for s in selectors: - self.add(s) - - self.block_event = False - - self.enabled: bool = True - - @property - def selectors(self): - """Selectors managed by the Synchronizer""" - return self._selectors - - def add(self, selector): - """add a selector""" - selector.selection.add_event_handler(self._handle_event) - self._selectors.append(selector) - - def remove(self, selector): - """remove a selector""" - selector.selection.remove_event_handler(self._handle_event) - self._selectors.remove(selector) - - def clear(self): - for i in range(len(self.selectors)): - self.remove(self.selectors[0]) - - def _handle_event(self, ev): - if self.block_event: - # because infinite recursion - return - - if not self.enabled: - return - - self.block_event = True - - source = ev.pick_info["graphic"] - delta = ev.pick_info["delta"] - pygfx_ev = ev.pick_info["pygfx_event"] - - # only moves when modifier is used - if pygfx_ev is None: - self.block_event = False - return - - if self.key_bind is not None: - if self.key_bind not in pygfx_ev.modifiers: - self.block_event = False - return - - if delta is not None: - self._move_selectors(source, delta) - - self.block_event = False - - def _move_selectors(self, source, delta): - for s in self.selectors: - # must use == and not is to compare Graphics because they are weakref proxies! - if s == source: - # if it's the source, since it has already moved - continue - - s._move_graphic(delta) - - def __del__(self): - self.clear() diff --git a/fastplotlib/graphics/text.py b/fastplotlib/graphics/text.py index a159d9560..fd0e9d702 100644 --- a/fastplotlib/graphics/text.py +++ b/fastplotlib/graphics/text.py @@ -1,23 +1,36 @@ -from typing import * import pygfx import numpy as np from ._base import Graphic +from .features import ( + TextData, + FontSize, + TextFaceColor, + TextOutlineColor, + TextOutlineThickness, +) class TextGraphic(Graphic): + _features = { + "text": TextData, + "font_size": FontSize, + "face_color": TextFaceColor, + "outline_color": TextOutlineColor, + "outline_thickness": TextOutlineThickness, + } + def __init__( self, text: str, - position: Tuple[int] = (0, 0, 0), - size: int = 14, - face_color: Union[str, np.ndarray] = "w", - outline_color: Union[str, np.ndarray] = "w", - outline_thickness=0, + font_size: float | int = 14, + face_color: str | np.ndarray | list[float] | tuple[float] = "w", + outline_color: str | np.ndarray | list[float] | tuple[float] = "w", + outline_thickness: float = 0.0, screen_space: bool = True, + offset: tuple[float] = (0, 0, 0), anchor: str = "middle-center", - *args, - **kwargs + **kwargs, ): """ Create a text Graphic @@ -25,28 +38,25 @@ def __init__( Parameters ---------- text: str - display text - - position: int tuple, default (0, 0, 0) - int tuple indicating location of text in scene + text to display - size: int, default 10 - text size + font_size: float | int, default 10 + font size - face_color: str or array, default "w" + face_color: str, array, list, tuple, default "w" str or RGBA array to set the color of the text - outline_color: str or array, default "w" + outline_color: str, array, list, tuple, default "w" str or RGBA array to set the outline color of the text - outline_thickness: int, default 0 - text outline thickness + outline_thickness: float, default 0 + relative outline thickness, value between 0.0 - 0.5 screen_space: bool = True - whether the text is rendered in screen space, in contrast to world space + if True, text size is in screen space, if False the text size is in data space - name: str, optional - name of graphic, passed to Graphic + offset: (float, float, float), default (0, 0, 0) + places the text at this location anchor: str, default "middle-center" position of the origin of the text @@ -54,94 +64,83 @@ def __init__( * Vertical values: "top", "middle", "baseline", "bottom" * Horizontal values: "left", "center", "right" + + **kwargs + passed to :class:`.Graphic` + """ - super(TextGraphic, self).__init__(*args, **kwargs) - self._text = text + super().__init__(**kwargs) + + self._text = TextData(text) + self._font_size = FontSize(font_size) + self._face_color = TextFaceColor(face_color) + self._outline_color = TextOutlineColor(outline_color) + self._outline_thickness = TextOutlineThickness(outline_thickness) world_object = pygfx.Text( - pygfx.TextGeometry( - text=str(text), - font_size=size, - screen_space=screen_space, - anchor=anchor, - ), - pygfx.TextMaterial( - color=face_color, - outline_color=outline_color, - outline_thickness=outline_thickness, + text=self.text, + font_size=self.font_size, + screen_space=screen_space, + anchor=anchor, + material=pygfx.TextMaterial( + color=self.face_color, + outline_color=self.outline_color, + outline_thickness=self.outline_thickness, + pick_write=True, ), ) self._set_world_object(world_object) - self.world_object.position = position + self.offset = offset @property - def text(self): - """Returns the text of this graphic.""" - return self._text + def world_object(self) -> pygfx.Text: + """Text world object""" + return super(TextGraphic, self).world_object + + @property + def text(self) -> str: + """Get or set the text""" + return self._text.value @text.setter def text(self, text: str): - """Set the text of this graphic.""" - if not isinstance(text, str): - raise ValueError("Text must be of type str.") - - self._text = text - self.world_object.geometry.set_text(self._text) + self._text.set_value(self, text) @property - def text_size(self): - """Returns the text size of this graphic.""" - return self.world_object.geometry.font_size + def font_size(self) -> float | int: + """Get or set the font size""" + return self._font_size.value - @text_size.setter - def text_size(self, size: Union[int, float]): - """Set the text size of this graphic.""" - if not (isinstance(size, int) or isinstance(size, float)): - raise ValueError("Text size must be of type int or float") - - self.world_object.geometry.font_size = size + @font_size.setter + def font_size(self, size: float | int): + self._font_size.set_value(self, size) @property - def face_color(self): - """Returns the face color of this graphic.""" - return self.world_object.material.color + def face_color(self) -> pygfx.Color: + """Get or set the face color""" + return self._face_color.value @face_color.setter - def face_color(self, color: Union[str, np.ndarray]): - """Set the face color of this graphic.""" - if not (isinstance(color, str) or isinstance(color, np.ndarray)): - raise ValueError("Face color must be of type str or np.ndarray") - - color = pygfx.Color(color) - - self.world_object.material.color = color + def face_color(self, color: str | np.ndarray | list[float] | tuple[float]): + self._face_color.set_value(self, color) @property - def outline_size(self): - """Returns the outline size of this graphic.""" - return self.world_object.material.outline_thickness - - @outline_size.setter - def outline_size(self, size: Union[int, float]): - """Set the outline size of this text graphic.""" - if not (isinstance(size, int) or isinstance(size, float)): - raise ValueError("Outline size must be of type int or float") + def outline_thickness(self) -> float: + """Get or set the outline thickness""" + return self._outline_thickness.value - self.world_object.material.outline_thickness = size + @outline_thickness.setter + def outline_thickness(self, thickness: float): + self._outline_thickness.set_value(self, thickness) @property - def outline_color(self): - """Returns the outline color of this graphic.""" - return self.world_object.material.outline_color + def outline_color(self) -> pygfx.Color: + """Get or set the outline color""" + return self._outline_color.value @outline_color.setter - def outline_color(self, color: Union[str, np.ndarray]): - """Set the outline color of this graphic""" - if not (isinstance(color, str) or isinstance(color, np.ndarray)): - raise ValueError("Outline color must be of type str or np.ndarray") - - self.world_object.material.outline_color = color - + def outline_color(self, color: str | np.ndarray | list[float] | tuple[float]): + self._outline_color.set_value(self, color) diff --git a/fastplotlib/graphics/utils.py b/fastplotlib/graphics/utils.py new file mode 100644 index 000000000..6be5aefc4 --- /dev/null +++ b/fastplotlib/graphics/utils.py @@ -0,0 +1,37 @@ +from contextlib import contextmanager + +from ._base import Graphic + + +@contextmanager +def pause_events(*graphics: Graphic): + """ + Context manager for pausing Graphic events. + + Examples + -------- + + .. code-block:: + + # pass in any number of graphics + with fpl.pause_events(graphic1, graphic2, graphic3): + # enter context manager + # all events are blocked from graphic1, graphic2, graphic3 + + # context manager exited, event states restored. + + """ + if not all([isinstance(g, Graphic) for g in graphics]): + raise TypeError( + f"`pause_events` only takes Graphic instances as arguments, " + f"you have passed the following types:\n{[type(g) for g in graphics]}" + ) + + original_vals = [g.block_events for g in graphics] + + for g in graphics: + g.block_events = True + yield + + for g, value in zip(graphics, original_vals): + g.block_events = value diff --git a/fastplotlib/layouts/__init__.py b/fastplotlib/layouts/__init__.py index aaed4c5a4..23839586c 100644 --- a/fastplotlib/layouts/__init__.py +++ b/fastplotlib/layouts/__init__.py @@ -1,4 +1,10 @@ -from ._gridplot import GridPlot -from ._plot import Plot +from ._figure import Figure +from ._subplot import Subplot +from ._utils import IMGUI -__all__ = ["Plot", "GridPlot"] +if IMGUI: + from ._imgui_figure import ImguiFigure + + __all__ = ["Figure", "ImguiFigure"] +else: + __all__ = ["Figure"] diff --git a/fastplotlib/layouts/_defaults.py b/fastplotlib/layouts/_defaults.py deleted file mode 100644 index 9a223855f..000000000 --- a/fastplotlib/layouts/_defaults.py +++ /dev/null @@ -1,46 +0,0 @@ -import pygfx -from typing import * - -camera_types = { - "2d": pygfx.OrthographicCamera, - "3d": pygfx.PerspectiveCamera, -} - -controller_types = { - "2d": pygfx.PanZoomController, - "3d": pygfx.OrbitController, - pygfx.OrthographicCamera: pygfx.PanZoomController, - pygfx.PerspectiveCamera: pygfx.OrbitController, -} - - -def create_camera( - camera_type: str, big_camera: bool = False -) -> Union[pygfx.OrthographicCamera, pygfx.PerspectiveCamera]: - camera_type = camera_type.split("-") - - # kinda messy but works for now - if len(camera_type) > 1: - if camera_type[1] == "big": - big_camera = True - - camera_type = camera_type[0] - else: - camera_type = camera_type[0] - - cls = camera_types[camera_type] - - if cls is pygfx.OrthographicCamera: - if big_camera: - return cls(1024, 1024, -8192, 8192) - else: - return cls(1024, 1024) - - else: - return cls() - - -def create_controller(controller_type: str): - controller_type = controller_type.split("-")[0] - - return controller_types[controller_type]() diff --git a/fastplotlib/layouts/_engine.py b/fastplotlib/layouts/_engine.py new file mode 100644 index 000000000..bf73d5f0d --- /dev/null +++ b/fastplotlib/layouts/_engine.py @@ -0,0 +1,390 @@ +from functools import partial + +import numpy as np +import pygfx + +from ._subplot import Subplot +from ._rect import RectManager + + +class ScreenSpaceCamera(pygfx.Camera): + """ + Same as pygfx.ScreenCoordsCamera but y-axis is inverted. + + So top left corner is (0, 0). This is easier to manage because we + often resize using the bottom right corner. + + """ + + def _update_projection_matrix(self): + width, height = self._view_size + sx, sy, sz = 2 / width, 2 / height, 1 + dx, dy, dz = -1, 1, 0 # pygfx is -1, -1, 0 + m = sx, 0, 0, dx, 0, sy, 0, dy, 0, 0, sz, dz, 0, 0, 0, 1 + proj_matrix = np.array(m, dtype=float).reshape(4, 4) + proj_matrix.flags.writeable = False + return proj_matrix + + +class BaseLayout: + def __init__( + self, + renderer: pygfx.WgpuRenderer, + subplots: np.ndarray[Subplot], + canvas_rect: tuple[float, float], + moveable: bool, + resizeable: bool, + ): + """ + Base layout engine, subclass to create a usable layout engine. + """ + self._renderer = renderer + self._subplots: np.ndarray[Subplot] = subplots.ravel() + self._canvas_rect = canvas_rect + + self._last_pointer_pos: np.ndarray[np.float64, np.float64] = np.array( + [np.nan, np.nan] + ) + + # the current user action, move or resize + self._active_action: str | None = None + # subplot that is currently in action, i.e. currently being moved or resized + self._active_subplot: Subplot | None = None + # subplot that is in focus, i.e. being hovered by the pointer + self._subplot_focus: Subplot | None = None + + for subplot in self._subplots: + # highlight plane when pointer enters it + subplot.frame.plane.add_event_handler( + partial(self._highlight_plane, subplot), "pointer_enter" + ) + + if resizeable: + # highlight/unhighlight resize handler when pointer enters/leaves + subplot.frame.resize_handle.add_event_handler( + partial(self._highlight_resize_handler, subplot), "pointer_enter" + ) + subplot.frame.resize_handle.add_event_handler( + partial(self._unhighlight_resize_handler, subplot), "pointer_leave" + ) + + def _inside_render_rect(self, subplot: Subplot, pos: tuple[int, int]) -> bool: + """whether the pos is within the render area, used for filtering out pointer events""" + rect = subplot.frame.get_render_rect() + + x0, y0 = rect[:2] + + x1 = x0 + rect[2] + y1 = y0 + rect[3] + + if (x0 < pos[0] < x1) and (y0 < pos[1] < y1): + return True + + return False + + def canvas_resized(self, canvas_rect: tuple): + """ + called by figure when canvas is resized + + Parameters + ---------- + canvas_rect: (x, y, w, h) + the rect that pygfx can render to, excludes any areas used by imgui. + + """ + + self._canvas_rect = canvas_rect + for subplot in self._subplots: + subplot.frame.canvas_resized(canvas_rect) + + def _highlight_resize_handler(self, subplot: Subplot, ev): + if self._active_action == "resize": + return + + ev.target.material.color = subplot.frame.resize_handle_color.highlight + + def _unhighlight_resize_handler(self, subplot: Subplot, ev): + if self._active_action == "resize": + return + + ev.target.material.color = subplot.frame.resize_handle_color.idle + + def _highlight_plane(self, subplot: Subplot, ev): + if self._active_action is not None: + return + + # reset color of previous focus + if self._subplot_focus is not None: + self._subplot_focus.frame.plane.material.color = ( + subplot.frame.plane_color.idle + ) + + self._subplot_focus = subplot + ev.target.material.color = subplot.frame.plane_color.highlight + + def __len__(self): + return len(self._subplots) + + +class WindowLayout(BaseLayout): + def __init__( + self, + renderer, + subplots: np.ndarray[Subplot], + canvas_rect: tuple, + moveable=True, + resizeable=True, + ): + """ + Flexible layout engine that allows freely moving and resizing subplots. + Subplots are not allowed to overlap. + + We use a screenspace camera to perform an underlay render pass to draw the + subplot frames, there is no depth rendering so we do not allow overlaps. + + """ + + super().__init__(renderer, subplots, canvas_rect, moveable, resizeable) + + self._last_pointer_pos: np.ndarray[np.float64, np.float64] = np.array( + [np.nan, np.nan] + ) + + for subplot in self._subplots: + if moveable: + # start a move action + subplot.frame.plane.add_event_handler( + partial(self._action_start, subplot, "move"), "pointer_down" + ) + # start a resize action + subplot.frame.resize_handle.add_event_handler( + partial(self._action_start, subplot, "resize"), "pointer_down" + ) + + if moveable or resizeable: + # when pointer moves, do an iteration of move or resize action + self._renderer.add_event_handler(self._action_iter, "pointer_move") + + # end the action when pointer button goes up + self._renderer.add_event_handler(self._action_end, "pointer_up") + + def _new_extent_from_delta(self, delta: tuple[int, int]) -> np.ndarray: + delta_x, delta_y = delta + if self._active_action == "resize": + # subtract only from x1, y1 + new_extent = self._active_subplot.frame.extent - np.asarray( + [0, delta_x, 0, delta_y] + ) + else: + # moving + new_extent = self._active_subplot.frame.extent - np.asarray( + [delta_x, delta_x, delta_y, delta_y] + ) + + x0, x1, y0, y1 = new_extent + w = x1 - x0 + h = y1 - y0 + + # make sure width and height are valid + # min width, height is 50px + if w <= 50: # width > 0 + new_extent[:2] = self._active_subplot.frame.extent[:2] + + if h <= 50: # height > 0 + new_extent[2:] = self._active_subplot.frame.extent[2:] + + # ignore movement if this would cause an overlap + for subplot in self._subplots: + if subplot is self._active_subplot: + continue + + if subplot.frame.rect_manager.overlaps(new_extent): + # we have an overlap, need to ignore one or more deltas + # ignore x + if not subplot.frame.rect_manager.is_left_of( + x0 + ) or not subplot.frame.rect_manager.is_right_of(x1): + new_extent[:2] = self._active_subplot.frame.extent[:2] + + # ignore y + if not subplot.frame.rect_manager.is_above( + y0 + ) or not subplot.frame.rect_manager.is_below(y1): + new_extent[2:] = self._active_subplot.frame.extent[2:] + + # make sure all vals are non-negative + if (new_extent[:2] < 0).any(): + # ignore delta_x + new_extent[:2] = self._active_subplot.frame.extent[:2] + + if (new_extent[2:] < 0).any(): + # ignore delta_y + new_extent[2:] = self._active_subplot.frame.extent[2:] + + # canvas extent + cx0, cy0, cw, ch = self._canvas_rect + + # check if new x-range is beyond canvas x-max + if (new_extent[:2] > cx0 + cw).any(): + new_extent[:2] = self._active_subplot.frame.extent[:2] + + # check if new y-range is beyond canvas y-max + if (new_extent[2:] > cy0 + ch).any(): + new_extent[2:] = self._active_subplot.frame.extent[2:] + + return new_extent + + def _action_start(self, subplot: Subplot, action: str, ev): + if self._inside_render_rect(subplot, pos=(ev.x, ev.y)): + return + + if ev.button == 1: # left mouse button + self._active_action = action + if action == "resize": + subplot.frame.resize_handle.material.color = ( + subplot.frame.resize_handle_color.action + ) + elif action == "move": + subplot.frame.plane.material.color = subplot.frame.plane_color.action + else: + raise ValueError + + self._active_subplot = subplot + self._last_pointer_pos[:] = ev.x, ev.y + + def _action_iter(self, ev): + if self._active_action is None: + return + + delta_x, delta_y = self._last_pointer_pos - (ev.x, ev.y) + new_extent = self._new_extent_from_delta((delta_x, delta_y)) + self._active_subplot.frame.extent = new_extent + self._last_pointer_pos[:] = ev.x, ev.y + + def _action_end(self, ev): + self._active_action = None + if self._active_subplot is not None: + self._active_subplot.frame.resize_handle.material.color = ( + self._active_subplot.frame.resize_handle_color.idle + ) + self._active_subplot.frame.plane.material.color = ( + self._active_subplot.frame.plane_color.idle + ) + self._active_subplot = None + + self._last_pointer_pos[:] = np.nan + + def set_rect(self, subplot: Subplot, rect: tuple | list | np.ndarray): + """ + Set the rect of a Subplot + + Parameters + ---------- + subplot: Subplot + the subplot to set the rect of + + rect: (x, y, w, h) + as absolute pixels or fractional. + If width & height <= 1 the rect is assumed to be fractional. + Conversely, if width & height > 1 the rect is assumed to be in absolute pixels. + width & height must be > 0. Negative values are not allowed. + + """ + + new_rect = RectManager(*rect, self._canvas_rect) + extent = new_rect.extent + # check for overlaps + for s in self._subplots: + if s is subplot: + continue + + if s.frame.rect_manager.overlaps(extent): + raise ValueError(f"Given rect: {rect} overlaps with another subplot.") + + def set_extent(self, subplot: Subplot, extent: tuple | list | np.ndarray): + """ + Set the extent of a Subplot + + Parameters + ---------- + subplot: Subplot + the subplot to set the extent of + + extent: (xmin, xmax, ymin, ymax) + as absolute pixels or fractional. + If xmax & ymax <= 1 the extent is assumed to be fractional. + Conversely, if xmax & ymax > 1 the extent is assumed to be in absolute pixels. + Negative values are not allowed. xmax - xmin & ymax - ymin must be > 0. + + """ + + new_rect = RectManager.from_extent(extent, self._canvas_rect) + extent = new_rect.extent + # check for overlaps + for s in self._subplots: + if s is subplot: + continue + + if s.frame.rect_manager.overlaps(extent): + raise ValueError( + f"Given extent: {extent} overlaps with another subplot." + ) + + +class GridLayout(WindowLayout): + def __init__( + self, + renderer, + subplots: np.ndarray[Subplot], + canvas_rect: tuple[float, float, float, float], + shape: tuple[int, int], + ): + """ + Grid layout engine that auto-sets Frame and Subplot rects such that they maintain + a fixed grid layout. Does not allow freely moving or resizing subplots. + + """ + + super().__init__( + renderer, subplots, canvas_rect, moveable=False, resizeable=False + ) + + # {Subplot: (row_ix, col_ix)}, dict mapping subplots to their row and col index in the grid layout + self._subplot_grid_position: dict[Subplot, tuple[int, int]] + self._shape = shape + + @property + def shape(self) -> tuple[int, int]: + return self._shape + + def set_rect(self, subplot, rect: np.ndarray | list | tuple): + raise NotImplementedError( + "set_rect() not implemented for GridLayout which is an auto layout manager" + ) + + def set_extent(self, subplot, extent: np.ndarray | list | tuple): + raise NotImplementedError( + "set_extent() not implemented for GridLayout which is an auto layout manager" + ) + + def add_row(self): + raise NotImplementedError("Not yet implemented") + + def add_column(self): + raise NotImplementedError("Not yet implemented") + + def remove_row(self): + raise NotImplementedError("Not yet implemented") + + def remove_column(self): + raise NotImplementedError("Not yet implemented") + + def add_subplot(self): + raise NotImplementedError( + "Not implemented for GridLayout which is an auto layout manager" + ) + + def remove_subplot(self, subplot): + raise NotImplementedError( + "Not implemented for GridLayout which is an auto layout manager" + ) diff --git a/fastplotlib/layouts/_figure.py b/fastplotlib/layouts/_figure.py new file mode 100644 index 000000000..bfd97000b --- /dev/null +++ b/fastplotlib/layouts/_figure.py @@ -0,0 +1,941 @@ +import os +from itertools import product, chain +from pathlib import Path + +import numpy as np +from typing import Literal, Iterable +from inspect import getfullargspec +from warnings import warn + +import pygfx + +from rendercanvas import BaseRenderCanvas + +from ._utils import ( + make_canvas_and_renderer, + create_controller, + create_camera, + get_extents_from_grid, +) +from ._utils import controller_types as valid_controller_types +from ._subplot import Subplot +from ._engine import GridLayout, WindowLayout, ScreenSpaceCamera +from .. import ImageGraphic +from ..tools import Tooltip + + +class Figure: + def __init__( + self, + shape: tuple[int, int] = (1, 1), + rects: list[tuple | np.ndarray] = None, + extents: list[tuple | np.ndarray] = None, + cameras: ( + Literal["2d", "3d"] + | Iterable[Iterable[Literal["2d", "3d"]]] + | pygfx.PerspectiveCamera + | Iterable[Iterable[pygfx.PerspectiveCamera]] + ) = "2d", + controller_types: ( + Iterable[Iterable[Literal["panzoom", "fly", "trackball", "orbit"]]] + | Iterable[Literal["panzoom", "fly", "trackball", "orbit"]] + ) = None, + controller_ids: ( + Literal["sync"] + | Iterable[int] + | Iterable[Iterable[int]] + | Iterable[Iterable[str]] + ) = None, + controllers: pygfx.Controller | Iterable[Iterable[pygfx.Controller]] = None, + canvas: str | BaseRenderCanvas | pygfx.Texture = None, + renderer: pygfx.WgpuRenderer = None, + canvas_kwargs: dict = None, + size: tuple[int, int] = (500, 300), + names: list | np.ndarray = None, + show_tooltips: bool = False, + ): + """ + Create a Figure containing Subplots. + + Parameters + ---------- + shape: tuple[int, int], default (1, 1) + shape [n_rows, n_cols] that defines a grid of subplots + + rects: list of tuples or arrays + list of rects (x, y, width, height) that define the subplots. + rects can be defined in absolute pixels or as a fraction of the canvas. + If width & height <= 1 the rect is assumed to be fractional. + Conversely, if width & height > 1 the rect is assumed to be in absolute pixels. + width & height must be > 0. Negative values are not allowed. + + extents: list of tuples or arrays + list of extents (xmin, xmax, ymin, ymax) that define the subplots. + extents can be defined in absolute pixels or as a fraction of the canvas. + If xmax & ymax <= 1 the extent is assumed to be fractional. + Conversely, if xmax & ymax > 1 the extent is assumed to be in absolute pixels. + Negative values are not allowed. xmax - xmin & ymax - ymin must be > 0. + + If both ``rects`` and ``extents`` are provided, then ``rects`` takes precedence over ``extents``, i.e. + ``extents`` is ignored when ``rects`` are also provided. + + cameras: "2d", "3d", list of "2d" | "3d", Iterable of camera instances, or Iterable of "2d" | "3d", optional + | if str, one of ``"2d"`` or ``"3d"`` indicating 2D or 3D cameras for all subplots + | Iterable/list/array of ``2d`` and/or ``3d`` that specifies the camera type for each subplot + | Iterable/list/array of pygfx.PerspectiveCamera instances + + controller_types: str, Iterable, optional + list/array that specifies the controller type for each subplot. + Valid controller types: "panzoom", "fly", "trackball", "orbit". + If not specified a default controller is chosen based on the camera type. + Orthographic projections, i.e. "2d" cameras, use a "panzoom" controller by default. + Perspective projections with a FOV > 0, i.e. "3d" cameras, use a "fly" controller by default. + + controller_ids: str, list of int, np.ndarray of int, or list with sublists of subplot str names, optional + | If `None` a unique controller is created for each subplot + | If "sync" all the subplots use the same controller + + This allows custom assignment of controllers + + | Example with integers: + | sync first 2 plots, and sync last 2 plots: [[0, 0, 1], [2, 3, 3]] + | Example with str subplot names: + | list of lists of subplot names, each sublist is synced: [[subplot_a, subplot_b, subplot_e], [subplot_c, subplot_d]] + | this syncs subplot_a, subplot_b and subplot_e together; syncs subplot_c and subplot_d together + + controllers: pygfx.Controller | list[pygfx.Controller] | np.ndarray[pygfx.Controller], optional + Directly provide pygfx.Controller instances(s). Useful if you want to use a ``Controller`` from an existing + subplot or a ``Controller`` you have already instantiated. Also useful if you want to provide a custom + ``Controller`` subclass. Other controller kwargs, i.e. ``controller_types`` and ``controller_ids`` + are ignored if `controllers` are provided. + + canvas: str, BaseRenderCanvas, pygfx.Texture + Canvas to draw the figure onto, usually auto-selected based on running environment. + + renderer: pygfx.Renderer, optional + pygfx renderer instance + + canvas_kwargs: dict, optional + kwargs to pass to the canvas + + size: (int, int), optional + starting size of canvas in absolute pixels, default (500, 300) + + names: list or array of str, optional + subplot names + + show_tooltips: bool, default False + show tooltips on graphics + + """ + + if rects is not None: + if not all(isinstance(v, (np.ndarray, tuple, list)) for v in rects): + raise TypeError( + f"rects must a list of arrays, tuples, or lists of rects (x, y, w, h), you have passed: {rects}" + ) + n_subplots = len(rects) + layout_mode = "rect" + extents = [None] * n_subplots + + elif extents is not None: + if not all(isinstance(v, (np.ndarray, tuple, list)) for v in extents): + raise TypeError( + f"extents must a list of arrays, tuples, or lists of extents (xmin, xmax, ymin, ymax), " + f"you have passed: {extents}" + ) + n_subplots = len(extents) + layout_mode = "extent" + rects = [None] * n_subplots + + else: + if not all(isinstance(v, (int, np.integer)) for v in shape): + raise TypeError( + f"shape argument must be a tuple[n_rows, n_cols], you have passed: {shape}" + ) + n_subplots = shape[0] * shape[1] + layout_mode = "grid" + + # create fractional extents from the grid + extents = get_extents_from_grid(shape) + # empty rects + rects = [None] * n_subplots + + if names is not None: + # user has specified subplot names + subplot_names = np.asarray(names).flatten() + # make an array without nones for sanity checks + subplot_names_without_nones = subplot_names[subplot_names != np.array(None)] + + # make sure all names are unique + if ( + subplot_names_without_nones.size + != np.unique(subplot_names_without_nones).size + ): + raise ValueError( + f"subplot `names` must be unique, you have provided: {names}" + ) + + # check that there are enough subplots given the number of names + if subplot_names.size > n_subplots: + raise ValueError( + f"must provide same number or fewer subplot `names` than number of supblots specified by shape, " + f"extents, or rects." + f"You have specified {n_subplots} subplots, but {subplot_names.size} subplot names." + ) + + if subplot_names.size < n_subplots: + # pad the subplot names with nones + subplot_names = np.concatenate( + [ + subplot_names, + np.asarray([None] * (n_subplots - subplot_names.size)), + ] + ) + else: + # no user specified subplot names + if layout_mode == "grid": + # make names that show the [row index, col index] + subplot_names = np.asarray( + list(map(str, product(range(shape[0]), range(shape[1])))) + ) + else: + subplot_names = None + + if canvas_kwargs is not None: + if size not in canvas_kwargs.keys(): + canvas_kwargs["size"] = size + else: + canvas_kwargs = {"size": size, "max_fps": 60.0, "vsync": True} + + canvas, renderer = make_canvas_and_renderer( + canvas, renderer, canvas_kwargs=canvas_kwargs + ) + + canvas.add_event_handler(self._fpl_reset_layout, "resize") + + if isinstance(cameras, str): + # create the array representing the views for each subplot in the grid + cameras = np.array([cameras] * n_subplots) + + # list/tuple -> array if necessary + cameras = np.asarray(cameras).flatten() + + if cameras.size != n_subplots: + raise ValueError( + f"Number of cameras: {cameras.size} does not match the number of specified subplots: {n_subplots}" + ) + + # create the cameras + subplot_cameras = np.empty(n_subplots, dtype=object) + for index in range(n_subplots): + subplot_cameras[index] = create_camera(camera_type=cameras[index]) + + # if controller instances have been specified for each subplot + if controllers is not None: + # one controller for all subplots + if isinstance(controllers, pygfx.Controller): + controllers = [controllers] * n_subplots + + # individual controller instance specified for each subplot + else: + # I found that this is better than list(*chain()) because chain doesn't give the right + # result we want for arrays + for item in controllers: + if isinstance(item, pygfx.Controller): + pass + elif all(isinstance(c, pygfx.Controller) for c in item): + pass + else: + raise TypeError( + f"controllers argument must be a single pygfx.Controller instance, or a Iterable of " + f"pygfx.Controller instances. You have passed: {controllers}" + ) + + subplot_controllers: np.ndarray[pygfx.Controller] = np.asarray( + controllers + ).flatten() + if not subplot_controllers.size == n_subplots: + raise ValueError( + f"number of controllers passed must be the same as the number of subplots specified " + f"by shape, extents, or rects: {n_subplots}. You have passed: {subplot_controllers.size} controllers" + ) from None + + for index in range(n_subplots): + subplot_controllers[index].add_camera(subplot_cameras[index]) + + # parse controller_ids and controller_types to make desired controller for each subplot + else: + if controller_ids is None: + # individual controller for each subplot + controller_ids = np.arange(n_subplots) + + elif isinstance(controller_ids, str): + if controller_ids == "sync": + # this will end up creating one controller to control the camera of every subplot + controller_ids = np.zeros(n_subplots, dtype=int) + else: + raise ValueError( + f"`controller_ids` must be one of 'sync', an array/list of subplot names, or an array/list of " + f"integer ids. You have passed: {controller_ids}.\n" + f"See the docstring for more details." + ) + + # list controller_ids + elif isinstance(controller_ids, (list, np.ndarray)): + ids_flat = list(chain(*controller_ids)) + + # list of str of subplot names, convert this to integer ids + if all([isinstance(item, str) for item in ids_flat]): + if subplot_names is None: + raise ValueError( + "must specify subplot `names` to use list of str for `controller_ids`" + ) + + # make sure each controller_id str is a subplot name + if not all([n in subplot_names for n in ids_flat]): + raise KeyError( + f"all `controller_ids` strings must be one of the subplot names. You have passed " + f"the following `controller_ids`:\n{controller_ids}\n\n" + f"and the following subplot names:\n{subplot_names}" + ) + + if len(ids_flat) > len(set(ids_flat)): + raise ValueError( + f"id strings must not appear twice in `controller_ids`: \n{controller_ids}" + ) + + # initialize controller_ids array + ids_init = np.arange(n_subplots) + + # set id based on subplot position for each synced sublist + for row_ix, sublist in enumerate(controller_ids): + for name in sublist: + ids_init[subplot_names == name] = -( + row_ix + 1 + ) # use negative numbers to avoid collision with positive numbers from np.arange + + controller_ids = ids_init + + # integer ids + elif all([isinstance(item, (int, np.integer)) for item in ids_flat]): + controller_ids = np.asarray(controller_ids).flatten() + if controller_ids.max() < 0: + raise ValueError( + f"if passing an integer array of `controller_ids`, " + f"all the integers must be positive:{controller_ids}" + ) + + else: + raise TypeError( + f"list argument to `controller_ids` must be a list of `str` or `int`, " + f"you have passed: {controller_ids}" + ) + + if controller_ids.size != n_subplots: + raise ValueError( + f"Number of controller_ids: {controller_ids.size} " + f"does not match the number of subplots: {n_subplots}" + ) + + if controller_types is None: + # `create_controller()` will auto-determine controller for each subplot based on defaults + controller_types = np.array(["default"] * n_subplots) + + # valid controller types + if isinstance(controller_types, str): + controller_types = np.array([controller_types] * n_subplots) + + controller_types: np.ndarray[pygfx.Controller] = np.asarray( + controller_types + ).flatten() + # str controller_type or pygfx instances + valid_str = list(valid_controller_types.keys()) + ["default"] + + # make sure each controller type is valid + for controller_type in controller_types: + if controller_type is None: + continue + + if controller_type not in valid_str: + raise ValueError( + f"You have passed the invalid `controller_type`: {controller_type}. " + f"Valid `controller_types` arguments are:\n {valid_str}" + ) + + # make the real controllers for each subplot + subplot_controllers = np.empty(shape=n_subplots, dtype=object) + for cid in np.unique(controller_ids): + cont_type = controller_types[controller_ids == cid] + if np.unique(cont_type).size > 1: + raise ValueError( + "Multiple controller types have been assigned to the same controller id. " + "All controllers with the same id must use the same type of controller." + ) + + cont_type = cont_type[0] + + # get all the cameras that use this controller + cams = subplot_cameras[controller_ids == cid].ravel() + + if cont_type == "default": + # hacky fix for now because of how `create_controller()` works + cont_type = None + _controller = create_controller( + controller_type=cont_type, camera=cams[0] + ) + + subplot_controllers[controller_ids == cid] = _controller + + # add the other cameras that go with this controller + if cams.size > 1: + for cam in cams[1:]: + _controller.add_camera(cam) + + self._canvas = canvas + self._renderer = renderer + + if layout_mode == "grid": + n_rows, n_cols = shape + grid_index_iterator = list(product(range(n_rows), range(n_cols))) + self._subplots: np.ndarray[Subplot] = np.empty(shape=shape, dtype=object) + resizeable = False + + else: + self._subplots: np.ndarray[Subplot] = np.empty( + shape=n_subplots, dtype=object + ) + resizeable = True + + for i in range(n_subplots): + camera = subplot_cameras[i] + controller = subplot_controllers[i] + + if subplot_names is not None: + name = subplot_names[i] + else: + name = None + + subplot = Subplot( + parent=self, + camera=camera, + controller=controller, + canvas=canvas, + renderer=renderer, + name=name, + rect=rects[i], + extent=extents[i], # figure created extents for grid layout + resizeable=resizeable, + ) + + if layout_mode == "grid": + row_ix, col_ix = grid_index_iterator[i] + self._subplots[row_ix, col_ix] = subplot + else: + self._subplots[i] = subplot + + if layout_mode == "grid": + self._layout = GridLayout( + self.renderer, + subplots=self._subplots, + canvas_rect=self.get_pygfx_render_area(), + shape=shape, + ) + + elif layout_mode == "rect" or layout_mode == "extent": + self._layout = WindowLayout( + self.renderer, + subplots=self._subplots, + canvas_rect=self.get_pygfx_render_area(), + ) + + # underlay render pass + self._underlay_camera = ScreenSpaceCamera() + self._underlay_scene = pygfx.Scene() + + for subplot in self._subplots.ravel(): + self._underlay_scene.add(subplot.frame._world_object) + + # overlay render pass + self._overlay_camera = ScreenSpaceCamera() + self._overlay_scene = pygfx.Scene() + + # tooltip in overlay render pass + self._tooltip_manager = Tooltip() + self._overlay_scene.add(self._tooltip_manager.world_object) + + self._show_tooltips = show_tooltips + + self._animate_funcs_pre: list[callable] = list() + self._animate_funcs_post: list[callable] = list() + + self._current_iter = None + + self._sidecar = None + + self._output = None + + self._pause_render = False + + @property + def shape(self) -> list[tuple[int, int, int, int]] | tuple[int, int]: + """Only for grid layouts of subplots: [n_rows, n_cols]""" + if isinstance(self.layout, GridLayout): + return self.layout.shape + + @property + def layout(self) -> WindowLayout | GridLayout: + """ + Layout engine + """ + return self._layout + + @property + def canvas(self) -> BaseRenderCanvas: + """The canvas this Figure is drawn onto""" + return self._canvas + + @property + def renderer(self) -> pygfx.WgpuRenderer: + """The renderer that renders this Figure""" + return self._renderer + + @property + def controllers(self) -> np.ndarray[pygfx.Controller]: + """controllers, read-only array, access individual subplots to change a controller""" + controllers = np.asarray([subplot.controller for subplot in self], dtype=object) + + if isinstance(self.layout, GridLayout): + controllers = controllers.reshape(self.shape) + + controllers.flags.writeable = False + return controllers + + @property + def cameras(self) -> np.ndarray[pygfx.Camera]: + """cameras, read-only array, access individual subplots to change a camera""" + cameras = np.asarray([subplot.camera for subplot in self], dtype=object) + + if isinstance(self.layout, GridLayout): + cameras = cameras.reshape(self.shape) + + cameras.flags.writeable = False + return cameras + + @property + def names(self) -> np.ndarray[str]: + """subplot names, read-only array, access individual subplots to change a name""" + names = np.asarray([subplot.name for subplot in self]) + + if isinstance(self.layout, GridLayout): + names = names.reshape(self.shape) + + names.flags.writeable = False + return names + + @property + def tooltip_manager(self) -> Tooltip: + """manage tooltips""" + return self._tooltip_manager + + @property + def show_tooltips(self) -> bool: + """show/hide tooltips for all graphics""" + return self._show_tooltips + + @show_tooltips.setter + def show_tooltips(self, val: bool): + self._show_tooltips = val + + if val: + # register all graphics + for subplot in self: + for graphic in subplot.graphics: + self._tooltip_manager.register(graphic) + + elif not val: + self._tooltip_manager.unregister_all() + + def _render(self, draw=True): + # draw the underlay planes + self.renderer.render(self._underlay_scene, self._underlay_camera, flush=False) + + # call the animation functions before render + self._call_animate_functions(self._animate_funcs_pre) + for subplot in self: + subplot._render() + + # overlay render pass + self.renderer.render(self._overlay_scene, self._overlay_camera, flush=False) + + self.renderer.flush() + + # call post-render animate functions + self._call_animate_functions(self._animate_funcs_post) + + if draw: + # needs to be here else events don't get processed + self.canvas.request_draw() + + def _start_render(self): + """start render cycle""" + self.canvas.request_draw(self._render) + + def show( + self, + autoscale: bool = True, + maintain_aspect: bool = None, + sidecar: bool = False, + sidecar_kwargs: dict = None, + ): + """ + Begins the rendering event loop and shows the Figure, returns the canvas + + Parameters + ---------- + autoscale: bool, default ``True`` + autoscale the Scene + + maintain_aspect: bool, default ``True`` + maintain aspect ratio + + sidecar: bool, default ``True`` + display plot in a ``jupyterlab-sidecar``, only in jupyter + + sidecar_kwargs: dict, default ``None`` + kwargs for sidecar instance to display plot + i.e. title, layout + + Returns + ------- + BaseRenderCanvas + In Qt or GLFW, the canvas window containing the Figure will be shown. + In jupyter, it will display the plot in the output cell or sidecar. + """ + + # show was already called, return canvas + if self._output: + return self._output + + self._start_render() + + if sidecar_kwargs is None: + sidecar_kwargs = dict() + + # flip y-axis if ImageGraphics are present + for subplot in self: + for g in subplot.graphics: + if isinstance(g, ImageGraphic): + subplot.camera.local.scale_y *= -1 + break + + if autoscale: + for subplot in self: + if maintain_aspect is None: + _maintain_aspect = subplot.camera.maintain_aspect + else: + _maintain_aspect = maintain_aspect + subplot.auto_scale(maintain_aspect=maintain_aspect) + + # parse based on canvas type + if self.canvas.__class__.__name__ == "JupyterRenderCanvas": + if sidecar: + from sidecar import Sidecar + from IPython.display import display + + self._sidecar = Sidecar(**sidecar_kwargs) + self._output = self.canvas + with self._sidecar: + return display(self.canvas) + self._output = self.canvas + return self._output + + elif self.canvas.__class__.__name__ == "QRenderCanvas": + self._output = self.canvas + self._output.show() + return self.canvas + + elif self.canvas.__class__.__name__ == "OffscreenRenderCanvas": + # for test and docs gallery screenshots + self._fpl_reset_layout() + for subplot in self: + subplot.axes.update_using_camera() + + # render call is blocking only on github actions for some reason, + # but not for rtd build, this is a workaround + # for CI tests, the render call works if it's in test_examples + # but it is necessary for the gallery images too so that's why this check is here + if "RTD_BUILD" in os.environ.keys(): + if os.environ["RTD_BUILD"] == "1": + self._render() + + else: # assume GLFW + self._output = self.canvas + + # return the canvas + return self._output + + def close(self): + self._output.close() + if self._sidecar: + self._sidecar.close() + + def _call_animate_functions(self, funcs: list[callable]): + for fn in funcs: + try: + if len(getfullargspec(fn).args) > 0: + fn(self) + else: + fn() + except (ValueError, TypeError): + warn( + f"Could not resolve argspec of {self.__class__.__name__} animation function: {fn}, " + f"calling it without arguments." + ) + fn() + + def add_animations( + self, + *funcs: callable, + pre_render: bool = True, + post_render: bool = False, + ): + """ + Add function(s) that are called on every render cycle. + These are called at the Figure level. + + Parameters + ---------- + *funcs: callable(s) + function(s) that are called on each render cycle + + pre_render: bool, default ``True``, optional keyword-only argument + if true, these function(s) are called before a render cycle + + post_render: bool, default ``False``, optional keyword-only argument + if true, these function(s) are called after a render cycle + + """ + for f in funcs: + if not callable(f): + raise TypeError( + f"all positional arguments to add_animations() must be callable types, you have passed a: {type(f)}" + ) + if pre_render: + self._animate_funcs_pre += funcs + if post_render: + self._animate_funcs_post += funcs + + def remove_animation(self, func): + """ + Removes the passed animation function from both pre and post render. + + Parameters + ---------- + func: callable + The function to remove, raises a error if it's not registered as a pre or post animation function. + + """ + if func not in self._animate_funcs_pre and func not in self._animate_funcs_post: + raise KeyError( + f"The passed function: {func} is not registered as an animation function. These are the animation " + f" functions that are currently registered:\n" + f"pre: {self._animate_funcs_pre}\n\npost: {self._animate_funcs_post}" + ) + + if func in self._animate_funcs_pre: + self._animate_funcs_pre.remove(func) + + if func in self._animate_funcs_post: + self._animate_funcs_post.remove(func) + + def clear(self): + """Clear all Subplots""" + for subplot in self: + subplot.clear() + + def export_numpy(self, rgb: bool = False) -> np.ndarray: + """ + Export a snapshot of the Figure as numpy array. + + Parameters + ---------- + rgb: bool, default ``False`` + if True, use alpha blending to return an RGB image. + if False, returns an RGBA array + + Returns + ------- + np.ndarray + [n_rows, n_cols, 3] for RGB or [n_rows, n_cols, 4] for RGBA + """ + snapshot = self.renderer.snapshot() + + if rgb: + bg = np.zeros(snapshot.shape).astype(np.uint8) + bg[:, :, -1] = 255 + + img_alpha = snapshot[..., -1] / 255 + + rgb = snapshot[..., :-1] * img_alpha[..., None] + bg[..., :-1] * np.ones( + img_alpha.shape + )[..., None] * (1 - img_alpha[..., None]) + + return rgb.astype(np.uint8) + + return snapshot + + def export(self, uri: str | Path | bytes, **kwargs): + """ + Use ``imageio`` to export the current Figure to a file, or return a byte string. + Must have ``imageio`` installed. + + Parameters + ---------- + uri: str | Path | bytes + + kwargs: passed to imageio.v3.imwrite, see: https://imageio.readthedocs.io/en/stable/_autosummary/imageio.v3.imwrite.html + + Returns + ------- + None | bytes + see https://imageio.readthedocs.io/en/stable/_autosummary/imageio.v3.imwrite.html + """ + try: + import imageio.v3 as iio + except ModuleNotFoundError: + raise ImportError( + "imageio is required to use Figure.export(). Install it using pip or conda:\n" + "pip install imageio\n" + "conda install -c conda-forge imageio\n" + ) + else: + # image formats that support alpha channel: + # https://en.wikipedia.org/wiki/Alpha_compositing#Image_formats_supporting_alpha_channels + alpha_support = [".png", ".exr", ".tiff", ".tif", ".gif", ".jxl", ".svg"] + + uri = Path(uri) + + if uri.suffix in alpha_support: + rgb = False + else: + rgb = True + + snapshot = self.export_numpy(rgb=rgb) + + return iio.imwrite(uri, snapshot, **kwargs) + + def open_popup(self, *args, **kwargs): + warn("popups only supported by ImguiFigure") + + def _fpl_reset_layout(self, *ev): + """set the viewport rects for all subplots, *ev argument is not used, exists because of renderer resize event""" + self.layout.canvas_resized(self.get_pygfx_render_area()) + + def get_pygfx_render_area(self, *args) -> tuple[float, float, float, float]: + """ + Get rect for the portion of the canvas that the pygfx renderer draws to, + i.e. non-imgui, part of canvas + + Returns + ------- + tuple[float, float, float, float] + x_pos, y_pos, width, height + + """ + + width, height = self.canvas.get_logical_size() + + return 0, 0, width, height + + def add_subplot( + self, + rect=None, + extent=None, + camera: str | pygfx.PerspectiveCamera = "2d", + controller: str | pygfx.Controller = None, + name: str = None, + ) -> Subplot: + if isinstance(self.layout, GridLayout): + raise NotImplementedError( + "`add_subplot()` is not implemented for Figures using a GridLayout" + ) + + raise NotImplementedError("Not yet implemented") + + camera = create_camera(camera) + controller = create_controller(controller, camera) + + subplot = Subplot( + parent=self, + camera=camera, + controller=controller, + canvas=self.canvas, + renderer=self.renderer, + name=name, + rect=rect, + extent=extent, # figure created extents for grid layout + resizeable=True, + ) + + return subplot + + def remove_subplot(self, subplot: Subplot): + raise NotImplementedError("Not yet implemented") + + if isinstance(self.layout, GridLayout): + raise NotImplementedError( + "`remove_subplot()` is not implemented for Figures using a GridLayout" + ) + + if subplot not in self._subplots.tolist(): + raise KeyError(f"given subplot: {subplot} not found in the layout.") + + subplot.clear() + self._underlay_scene.remove(subplot.frame._world_object) + subplot.frame._world_object.clear() + self.layout._subplots = None + subplots = self._subplots.tolist() + subplots.remove(subplot) + self.layout.remove_subplot(subplot) + del subplot + + self._subplots = np.asarray(subplots) + self.layout._subplots = self._subplots.ravel() + + def __getitem__(self, index: str | int | tuple[int, int]) -> Subplot: + if isinstance(index, str): + for subplot in self._subplots.ravel(): + if subplot.name == index: + return subplot + raise IndexError(f"no subplot with given name: {index}") + + if isinstance(self.layout, GridLayout): + return self._subplots[index[0], index[1]] + + return self._subplots[index] + + def __iter__(self): + self._current_iter = iter(range(len(self))) + return self + + def __next__(self) -> Subplot: + pos = self._current_iter.__next__() + return self._subplots.ravel()[pos] + + def __len__(self): + """number of subplots""" + return len(self._layout) + + def __str__(self): + return f"{self.__class__.__name__}" + + def __repr__(self): + newline = "\n\t" + + return ( + f"fastplotlib.{self.__class__.__name__}" + f" Subplots:\n" + f"\t{newline.join(subplot.__str__() for subplot in self)}" + f"\n" + ) diff --git a/fastplotlib/layouts/_frame.py b/fastplotlib/layouts/_frame.py new file mode 100644 index 000000000..cd2a1cbc2 --- /dev/null +++ b/fastplotlib/layouts/_frame.py @@ -0,0 +1,371 @@ +import numpy as np +import pygfx + +from ._rect import RectManager +from ._utils import IMGUI_TOOLBAR_HEIGHT +from ..utils.types import SelectorColorStates +from ..graphics import TextGraphic + + +""" +Each Subplot is framed by a 2D plane mesh, a rectangle. +The rectangles are viewed using the UnderlayCamera where (0, 0) is the top left corner. +We can control the bbox of this rectangle by changing the x and y boundaries of the rectangle. + +Note how the y values of the plane mesh are negative, this is because of the UnderlayCamera. +We always just keep the positive y value, and make it negative only when setting the plane mesh. + +Illustration: + +(0, 0) --------------------------------------------------- +---------------------------------------------------------- +---------------------------------------------------------- +--------------(x0, -y0) --------------- (x1, -y0) -------- +------------------------|||||||||||||||------------------- +------------------------|||||||||||||||------------------- +------------------------|||||||||||||||------------------- +------------------------|||rectangle|||------------------- +------------------------|||||||||||||||------------------- +------------------------|||||||||||||||------------------- +------------------------|||||||||||||||------------------- +--------------(x0, -y1) --------------- (x1, -y1)--------- +---------------------------------------------------------- +------------------------------------------- (canvas_width, canvas_height) + +""" + + +# wgsl shader snippet for SDF function that defines the resize handler, a lower right triangle. +sdf_wgsl_resize_handle = """ +// hardcode square root of 2 +let m_sqrt_2 = 1.4142135; + +// given a distance from an origin point, this defines the hypotenuse of a lower right triangle +let distance = (-coord.x + coord.y) / m_sqrt_2; + +// return distance for this position +return distance * size; +""" + + +class MeshMasks: + """Used set the x0, x1, y0, y1 positions of the plane mesh""" + + x0 = np.array( + [ + [False, False, False], + [True, False, False], + [False, False, False], + [True, False, False], + ] + ) + + x1 = np.array( + [ + [True, False, False], + [False, False, False], + [True, False, False], + [False, False, False], + ] + ) + + y0 = np.array( + [ + [False, True, False], + [False, True, False], + [False, False, False], + [False, False, False], + ] + ) + + y1 = np.array( + [ + [False, False, False], + [False, False, False], + [False, True, False], + [False, True, False], + ] + ) + + +masks = MeshMasks + + +class Frame: + # resize handle color states + resize_handle_color = SelectorColorStates( + idle=(0.6, 0.6, 0.6, 1), # gray + highlight=(1, 1, 1, 1), # white + action=(1, 0, 1, 1), # magenta + ) + + # plane color states + plane_color = SelectorColorStates( + idle=(0.1, 0.1, 0.1), # dark grey + highlight=(0.2, 0.2, 0.2), # less dark grey + action=(0.1, 0.1, 0.2), # dark gray-blue + ) + + def __init__( + self, + viewport, + rect, + extent, + resizeable, + title, + docks, + toolbar_visible, + canvas_rect, + ): + """ + Manages the plane mesh, resize handle point, and subplot title. + It also sets the viewport rects for the subplot rect and the rects of the docks. + + Note: This is a backend class not meant to be user-facing. + + Parameters + ---------- + viewport: pygfx.Viewport + Subplot viewport + + rect: tuple | np.ndarray + rect of this subplot + + extent: tuple | np.ndarray + extent of this subplot + + resizeable: bool + if the Frame is resizeable or not + + title: str + subplot title + + docks: dict[str, PlotArea] + subplot dock + + toolbar_visible: bool + toolbar visibility + + canvas_rect: tuple + figure canvas rect, the render area excluding any areas taken by imgui edge windows + + """ + + self.viewport = viewport + self.docks = docks + self._toolbar_visible = toolbar_visible + + # create rect manager to handle all the backend rect calculations + if rect is not None: + self._rect_manager = RectManager(*rect, canvas_rect) + elif extent is not None: + self._rect_manager = RectManager.from_extent(extent, canvas_rect) + else: + raise ValueError("Must provide `rect` or `extent`") + + wobjects = list() + + # make title graphic + if title is None: + title_text = "" + else: + title_text = title + self._title_graphic = TextGraphic(title_text, font_size=16, face_color="white") + wobjects.append(self._title_graphic.world_object) + + # init mesh of size 1 to graphically represent rect + geometry = pygfx.plane_geometry(1, 1) + material = pygfx.MeshBasicMaterial(color=self.plane_color.idle, pick_write=True) + self._plane = pygfx.Mesh(geometry, material) + wobjects.append(self._plane) + + # otherwise text isn't visible + self._plane.world.z = 0.5 + + # create resize handler at point (x1, y1) + x1, y1 = self.extent[[1, 3]] + self._resize_handle = pygfx.Points( + # note negative y since y is inverted in UnderlayCamera + # subtract 7 so that the bottom right corner of the triangle is at the center + pygfx.Geometry(positions=[[x1 - 7, -y1 + 7, 0]]), + pygfx.PointsMarkerMaterial( + color=self.resize_handle_color.idle, + marker="custom", + custom_sdf=sdf_wgsl_resize_handle, + size=12, + size_space="screen", + pick_write=True, + ), + ) + + if not resizeable: + # set all color states to transparent if Frame isn't resizeable + c = (0, 0, 0, 0) + self._resize_handle.material.color = c + self._resize_handle.material.edge_width = 0 + self.resize_handle_color = SelectorColorStates(c, c, c) + + wobjects.append(self._resize_handle) + + self._world_object = pygfx.Group() + self._world_object.add(*wobjects) + + self._reset() + self.reset_viewport() + + @property + def rect_manager(self) -> RectManager: + return self._rect_manager + + @property + def extent(self) -> np.ndarray: + """extent, (xmin, xmax, ymin, ymax)""" + # not actually stored, computed when needed + return self._rect_manager.extent + + @extent.setter + def extent(self, extent): + self._rect_manager.extent = extent + self._reset() + self.reset_viewport() + + @property + def rect(self) -> np.ndarray[int]: + """rect in absolute screen space, (x, y, w, h)""" + return self._rect_manager.rect + + @rect.setter + def rect(self, rect: np.ndarray): + self._rect_manager.rect = rect + self._reset() + self.reset_viewport() + + def reset_viewport(self): + """reset the viewport rect for the subplot and docks""" + + # get rect of the render area + x, y, w, h = self.get_render_rect() + + # dock sizes + s_left = self.docks["left"].size + s_top = self.docks["top"].size + s_right = self.docks["right"].size + s_bottom = self.docks["bottom"].size + + # top and bottom have same width + # subtract left and right dock sizes + w_top_bottom = w - s_left - s_right + # top and bottom have same x pos + x_top_bottom = x + s_left + + # set dock rects + self.docks["left"].viewport.rect = x, y, s_left, h + self.docks["top"].viewport.rect = x_top_bottom, y, w_top_bottom, s_top + self.docks["bottom"].viewport.rect = ( + x_top_bottom, + y + h - s_bottom, + w_top_bottom, + s_bottom, + ) + self.docks["right"].viewport.rect = x + w - s_right, y, s_right, h + + # calc subplot rect by adjusting for dock sizes + x += s_left + y += s_top + w -= s_left + s_right + h -= s_top + s_bottom + + # set subplot rect + self.viewport.rect = x, y, w, h + + def get_render_rect(self) -> tuple[float, float, float, float]: + """ + Get the actual render area of the subplot, including the docks. + + Excludes area taken by the subplot title and toolbar. Also adds a small amount of spacing around the subplot. + """ + # the rect of the entire Frame + x, y, w, h = self.rect + + x += 1 # add 1 so a 1 pixel edge is visible + w -= 2 # subtract 2, so we get a 1 pixel edge on both sides + + # add 4 pixels above and below title for better spacing + y = y + 4 + self._title_graphic.font_size + 4 + + # spacing on the bottom if imgui toolbar is visible + if self.toolbar_visible: + toolbar_space = IMGUI_TOOLBAR_HEIGHT + resize_handle_space = 0 + else: + toolbar_space = 0 + # need some space for resize handler if imgui toolbar isn't present + resize_handle_space = 13 + + # adjust for the 4 pixels from the line above + # also give space for resize handler if imgui toolbar is not present + h = ( + h + - 4 + - self._title_graphic.font_size + - toolbar_space + - 4 + - resize_handle_space + ) + + return x, y, w, h + + def _reset(self): + """reset the plane mesh using the current rect state""" + + x0, x1, y0, y1 = self._rect_manager.extent + w = self._rect_manager.w + + self._plane.geometry.positions.data[masks.x0] = x0 + self._plane.geometry.positions.data[masks.x1] = x1 + + # negative y because UnderlayCamera y is inverted + self._plane.geometry.positions.data[masks.y0] = -y0 + self._plane.geometry.positions.data[masks.y1] = -y1 + + self._plane.geometry.positions.update_full() + + # note negative y since y is inverted in UnderlayCamera + # subtract 7 so that the bottom right corner of the triangle is at the center + self._resize_handle.geometry.positions.data[0] = [x1 - 7, -y1 + 7, 0] + self._resize_handle.geometry.positions.update_full() + + # set subplot title position + x = x0 + (w / 2) + y = y0 + (self._title_graphic.font_size / 2) + self._title_graphic.world_object.world.x = x + self._title_graphic.world_object.world.y = -y - 4 # add 4 pixels for spacing + + @property + def toolbar_visible(self) -> bool: + return self._toolbar_visible + + @toolbar_visible.setter + def toolbar_visible(self, visible: bool): + self._toolbar_visible = visible + self.reset_viewport() + + @property + def title_graphic(self) -> TextGraphic: + return self._title_graphic + + @property + def plane(self) -> pygfx.Mesh: + """the plane mesh""" + return self._plane + + @property + def resize_handle(self) -> pygfx.Points: + """resize handler point""" + return self._resize_handle + + def canvas_resized(self, canvas_rect): + """called by layout is resized""" + self._rect_manager.canvas_resized(canvas_rect) + self._reset() + self.reset_viewport() diff --git a/fastplotlib/layouts/_frame/__init__.py b/fastplotlib/layouts/_frame/__init__.py deleted file mode 100644 index c34884022..000000000 --- a/fastplotlib/layouts/_frame/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from ._frame import Frame diff --git a/fastplotlib/layouts/_frame/_frame.py b/fastplotlib/layouts/_frame/_frame.py deleted file mode 100644 index abd79759e..000000000 --- a/fastplotlib/layouts/_frame/_frame.py +++ /dev/null @@ -1,184 +0,0 @@ -import os - -from ._toolbar import ToolBar - -from ...graphics import ImageGraphic - -from .._utils import CANVAS_OPTIONS_AVAILABLE - - -class UnavailableOutputContext: - # called when a requested output context is not available - # ex: if trying to force jupyter_rfb canvas but jupyter_rfb is not installed - def __init__(self, context_name, msg): - self.context_name = context_name - self.msg = msg - - def __call__(self, *args, **kwargs): - raise ModuleNotFoundError( - f"The following output context is not available: {self.context_name}\n{self.msg}" - ) - - -# TODO: potentially put all output context and toolbars in their own module and have this determination done at import -if CANVAS_OPTIONS_AVAILABLE["jupyter"]: - from ._jupyter_output import JupyterOutputContext -else: - JupyterOutputContext = UnavailableOutputContext( - "Jupyter", - "You must install fastplotlib using the `'notebook'` option to use this context:\n" - 'pip install "fastplotlib[notebook]"' - ) - -if CANVAS_OPTIONS_AVAILABLE["qt"]: - from ._qt_output import QOutputContext -else: - QtOutput = UnavailableOutputContext( - "Qt", - "You must install `PyQt6` to use this output context" - ) - - -class Frame: - """ - Mixin class for Plot and GridPlot that "frames" the plot. - - Gives them their `show()` call that returns the appropriate output context. - """ - def __init__(self): - self._output = None - - @property - def toolbar(self) -> ToolBar: - """ipywidget or QToolbar instance""" - return self._output.toolbar - - @property - def widget(self): - """ipywidget or QWidget that contains this plot""" - # @caitlin: this is the same as the output context, but I figure widget is a simpler public name - return self._output - - def render(self): - """render call implemented in subclass""" - raise NotImplemented - - def _autoscale_init(self, maintain_aspect: bool): - """autoscale function that is called only during show()""" - if hasattr(self, "_subplots"): - for subplot in self: - if maintain_aspect is None: - _maintain_aspect = subplot.camera.maintain_aspect - else: - _maintain_aspect = maintain_aspect - subplot.auto_scale(maintain_aspect=_maintain_aspect, zoom=0.95) - else: - if maintain_aspect is None: - maintain_aspect = self.camera.maintain_aspect - self.auto_scale(maintain_aspect=maintain_aspect, zoom=0.95) - - def start_render(self): - """start render cycle""" - self.canvas.request_draw(self.render) - self.canvas.set_logical_size(*self._starting_size) - - def show( - self, - autoscale: bool = True, - maintain_aspect: bool = None, - toolbar: bool = True, - sidecar: bool = False, - sidecar_kwargs: dict = None, - add_widgets: list = None, - ): - """ - Begins the rendering event loop and shows the plot in the desired output context (jupyter, qt or glfw). - - Parameters - ---------- - autoscale: bool, default ``True`` - autoscale the Scene - - maintain_aspect: bool, default ``True`` - maintain aspect ratio - - toolbar: bool, default ``True`` - show toolbar - - sidecar: bool, default ``True`` - display plot in a ``jupyterlab-sidecar``, only for jupyter output context - - sidecar_kwargs: dict, default ``None`` - kwargs for sidecar instance to display plot - i.e. title, layout - - add_widgets: list of widgets - a list of ipywidgets or QWidget that are vertically stacked below the plot - - Returns - ------- - OutputContext - In jupyter, it will display the plot in the output cell or sidecar - - In Qt, it will display the Plot, toolbar, etc. as stacked widget, use `Plot.widget` to access it. - """ - - # show was already called, return existing output context - if self._output is not None: - return self._output - - self.start_render() - - if sidecar_kwargs is None: - sidecar_kwargs = dict() - - if add_widgets is None: - add_widgets = list() - - # flip y axis if ImageGraphics are present - if hasattr(self, "_subplots"): - for subplot in self: - for g in subplot.graphics: - if isinstance(g, ImageGraphic): - subplot.camera.local.scale_y *= -1 - break - else: - for g in self.graphics: - if isinstance(g, ImageGraphic): - self.camera.local.scale_y *= -1 - break - - if autoscale: - self._autoscale_init(maintain_aspect) - - # used for generating images in docs using nbsphinx - if "NB_SNAPSHOT" in os.environ.keys(): - if os.environ["NB_SNAPSHOT"] == "1": - return self.canvas.snapshot() - - # return the appropriate OutputContext based on the current canvas - if self.canvas.__class__.__name__ == "JupyterWgpuCanvas": - self._output = JupyterOutputContext( - frame=self, - make_toolbar=toolbar, - use_sidecar=sidecar, - sidecar_kwargs=sidecar_kwargs, - add_widgets=add_widgets, - ) - - elif self.canvas.__class__.__name__ == "QWgpuCanvas": - self._output = QOutputContext( - frame=self, - make_toolbar=toolbar, - add_widgets=add_widgets - ) - - else: # assume GLFW, the output context is just the canvas - self._output = self.canvas - - # return the output context, this call is required for jupyter but not for Qt - return self._output - - def close(self): - """Close the output context""" - self._output.close() diff --git a/fastplotlib/layouts/_frame/_ipywidget_toolbar.py b/fastplotlib/layouts/_frame/_ipywidget_toolbar.py deleted file mode 100644 index f27856e61..000000000 --- a/fastplotlib/layouts/_frame/_ipywidget_toolbar.py +++ /dev/null @@ -1,310 +0,0 @@ -import traceback -from datetime import datetime -from itertools import product -from math import copysign -from functools import partial -from typing import * - - -from ipywidgets.widgets import ( - IntSlider, - VBox, - HBox, - ToggleButton, - Dropdown, - Layout, - Button, - BoundedIntText, - Play, - jslink, -) - -from ...graphics.selectors import PolygonSelector -from ._toolbar import ToolBar - - -class IpywidgetToolBar(HBox, ToolBar): - """Basic toolbar using ipywidgets""" - def __init__(self, plot): - ToolBar.__init__(self, plot) - - self._auto_scale_button = Button( - value=False, - disabled=False, - icon="expand-arrows-alt", - layout=Layout(width="auto"), - tooltip="auto-scale scene", - ) - self._center_scene_button = Button( - value=False, - disabled=False, - icon="align-center", - layout=Layout(width="auto"), - tooltip="auto-center scene", - ) - self._panzoom_controller_button = ToggleButton( - value=True, - disabled=False, - icon="hand-pointer", - layout=Layout(width="auto"), - tooltip="panzoom controller", - ) - self._maintain_aspect_button = ToggleButton( - value=True, - disabled=False, - description="1:1", - layout=Layout(width="auto"), - tooltip="maintain aspect", - ) - self._maintain_aspect_button.style.font_weight = "bold" - - self._y_direction_button = Button( - value=False, - disabled=False, - icon="arrow-up", - layout=Layout(width="auto"), - tooltip="y-axis direction", - ) - - self._record_button = ToggleButton( - value=False, - disabled=False, - icon="video", - layout=Layout(width="auto"), - tooltip="record", - ) - - self._add_polygon_button = Button( - value=False, - disabled=False, - icon="draw-polygon", - layout=Layout(width="auto"), - tooltip="add PolygonSelector" - ) - - widgets = [ - self._auto_scale_button, - self._center_scene_button, - self._panzoom_controller_button, - self._maintain_aspect_button, - self._y_direction_button, - self._add_polygon_button, - self._record_button, - ] - - if hasattr(self.plot, "_subplots"): - positions = list(product(range(self.plot.shape[0]), range(self.plot.shape[1]))) - values = list() - for pos in positions: - if self.plot[pos].name is not None: - values.append(self.plot[pos].name) - else: - values.append(str(pos)) - - self._dropdown = Dropdown( - options=values, - disabled=False, - description="Subplots:", - layout=Layout(width="200px"), - ) - - self.plot.renderer.add_event_handler(self.update_current_subplot, "click") - - widgets.append(self._dropdown) - - self._panzoom_controller_button.observe(self.panzoom_handler, "value") - self._auto_scale_button.on_click(self.auto_scale_handler) - self._center_scene_button.on_click(self.center_scene_handler) - self._maintain_aspect_button.observe(self.maintain_aspect_handler, "value") - self._y_direction_button.on_click(self.y_direction_handler) - self._add_polygon_button.on_click(self.add_polygon) - self._record_button.observe(self.record_plot, "value") - - # set initial values for some buttons - self._maintain_aspect_button.value = self.current_subplot.camera.maintain_aspect - - if copysign(1, self.current_subplot.camera.local.scale_y) == -1: - self._y_direction_button.icon = "arrow-down" - else: - self._y_direction_button.icon = "arrow-up" - - super().__init__(widgets) - - def _get_subplot_dropdown_value(self) -> str: - return self._dropdown.value - - def auto_scale_handler(self, obj): - self.current_subplot.auto_scale(maintain_aspect=self.current_subplot.camera.maintain_aspect) - - def center_scene_handler(self, obj): - self.current_subplot.center_scene() - - def panzoom_handler(self, obj): - self.current_subplot.controller.enabled = self._panzoom_controller_button.value - - def maintain_aspect_handler(self, obj): - for camera in self.current_subplot.controller.cameras: - camera.maintain_aspect = self._maintain_aspect_button.value - - def y_direction_handler(self, obj): - # flip every camera under the same controller - for camera in self.current_subplot.controller.cameras: - camera.local.scale_y *= -1 - - if copysign(1, self.current_subplot.camera.local.scale_y) == -1: - self._y_direction_button.icon = "arrow-down" - else: - self._y_direction_button.icon = "arrow-up" - - def update_current_subplot(self, ev): - for subplot in self.plot: - pos = subplot.map_screen_to_world((ev.x, ev.y)) - if pos is not None: - # update self.dropdown - if subplot.name is None: - self._dropdown.value = str(subplot.position) - else: - self._dropdown.value = subplot.name - self._panzoom_controller_button.value = subplot.controller.enabled - self._maintain_aspect_button.value = subplot.camera.maintain_aspect - - if copysign(1, subplot.camera.local.scale_y) == -1: - self._y_direction_button.icon = "arrow-down" - else: - self._y_direction_button.icon = "arrow-up" - - def record_plot(self, obj): - if self._record_button.value: - try: - self.plot.record_start( - f"./{datetime.now().isoformat(timespec='seconds').replace(':', '_')}.mp4" - ) - except Exception: - traceback.print_exc() - self._record_button.value = False - else: - self.plot.record_stop() - - def add_polygon(self, obj): - ps = PolygonSelector(edge_width=3, edge_color="magenta") - self.current_subplot.add_graphic(ps, center=False) - - -class IpywidgetImageWidgetToolbar(VBox): - def __init__(self, iw): - """ - Basic toolbar for a ImageWidget instance. - - Parameters - ---------- - plot: - """ - self.iw = iw - - self.reset_vminvmax_button = Button( - value=False, - disabled=False, - icon="adjust", - layout=Layout(width="auto"), - tooltip="reset vmin/vmax", - ) - - self.reset_vminvmax_hlut_button = Button( - value=False, - icon="adjust", - description="reset", - layout=Layout(width="auto"), - tooltip="reset vmin/vmax and reset histogram using current frame" - ) - - self.sliders: Dict[str, IntSlider] = dict() - - # only for xy data, no time point slider needed - if self.iw.ndim == 2: - widgets = [self.reset_vminvmax_button] - # for txy, tzxy, etc. data - else: - for dim in self.iw.slider_dims: - slider = IntSlider( - min=0, - max=self.iw._dims_max_bounds[dim] - 1, - step=1, - value=0, - description=f"dimension: {dim}", - orientation="horizontal", - ) - - slider.observe(partial(self.iw._slider_value_changed, dim), names="value") - - self.sliders[dim] = slider - - self.step_size_setter = BoundedIntText( - value=1, - min=1, - max=self.sliders["t"].max, - step=1, - description="Step Size:", - disabled=False, - description_tooltip="set slider step", - layout=Layout(width="150px"), - ) - self.speed_text = BoundedIntText( - value=100, - min=1, - max=1_000, - step=50, - description="Speed", - disabled=False, - description_tooltip="Playback speed, this is NOT framerate.\nArbitrary units between 1 - 1,000", - layout=Layout(width="150px"), - ) - self.play_button = Play( - value=0, - min=self.sliders["t"].min, - max=self.sliders["t"].max, - step=self.sliders["t"].step, - description="play/pause", - disabled=False, - ) - widgets = [ - self.reset_vminvmax_button, - self.reset_vminvmax_hlut_button, - self.play_button, - self.step_size_setter, - self.speed_text - ] - - self.play_button.interval = 10 - - self.step_size_setter.observe(self._change_stepsize, "value") - self.speed_text.observe(self._change_framerate, "value") - jslink((self.play_button, "value"), (self.sliders["t"], "value")) - jslink((self.play_button, "max"), (self.sliders["t"], "max")) - - self.reset_vminvmax_button.on_click(self._reset_vminvmax) - self.reset_vminvmax_hlut_button.on_click(self._reset_vminvmax_frame) - - self.iw.gridplot.renderer.add_event_handler(self._set_slider_layout, "resize") - - # the buttons - self.hbox = HBox(widgets) - - super().__init__((self.hbox, *list(self.sliders.values()))) - - def _reset_vminvmax(self, obj): - self.iw.reset_vmin_vmax() - - def _reset_vminvmax_frame(self, obj): - self.iw.reset_vmin_vmax_frame() - - def _change_stepsize(self, obj): - self.sliders["t"].step = self.step_size_setter.value - - def _change_framerate(self, change): - interval = int(1000 / change["new"]) - self.play_button.interval = interval - - def _set_slider_layout(self, *args): - w, h = self.iw.gridplot.renderer.logical_size - for k, v in self.sliders.items(): - v.layout = Layout(width=f"{w}px") diff --git a/fastplotlib/layouts/_frame/_jupyter_output.py b/fastplotlib/layouts/_frame/_jupyter_output.py deleted file mode 100644 index 25f5e2a2e..000000000 --- a/fastplotlib/layouts/_frame/_jupyter_output.py +++ /dev/null @@ -1,84 +0,0 @@ -from typing import * - -from ipywidgets import VBox, Widget -from sidecar import Sidecar -from IPython.display import display - -from ._ipywidget_toolbar import IpywidgetToolBar - - -class JupyterOutputContext(VBox): - """ - Output context to display plots in jupyter. Inherits from ipywidgets.VBox - - Basically vstacks plot canvas, toolbar, and other widgets. Uses sidecar if desired. - """ - def __init__( - self, - frame, - make_toolbar: bool, - use_sidecar: bool, - sidecar_kwargs: dict, - add_widgets: List[Widget], - ): - """ - - Parameters - ---------- - frame: - Plot frame for which to generate the output context - - sidecar_kwargs: dict - optional kwargs passed to Sidecar - - add_widgets: List[Widget] - list of ipywidgets to stack below the plot and toolbar - """ - self.frame = frame - self.toolbar = None - self.sidecar = None - - # verify they are all valid ipywidgets - if False in [isinstance(w, Widget) for w in add_widgets]: - raise TypeError( - f"add_widgets must be list of ipywidgets, you have passed:\n{add_widgets}" - ) - - self.use_sidecar = use_sidecar - - if not make_toolbar: # just stack canvas and the additional widgets, if any - self.output = (frame.canvas, *add_widgets) - - if make_toolbar: # make toolbar and stack canvas, toolbar, add_widgets - self.toolbar = IpywidgetToolBar(frame) - self.output = (frame.canvas, self.toolbar, *add_widgets) - - if use_sidecar: # instantiate sidecar if desired - self.sidecar = Sidecar(**sidecar_kwargs) - - # stack all of these in the VBox - super().__init__(self.output) - - def _repr_mimebundle_(self, *args, **kwargs): - """ - This is what jupyter hook into when this output context instance is returned at the end of a cell. - """ - if self.use_sidecar: - with self.sidecar: - # TODO: prints all the child widgets in the cell output, will figure out later, sidecar output works - return display(VBox(self.output)) - else: - # just display VBox contents in cell output - return super()._repr_mimebundle_(*args, **kwargs) - - def close(self): - """Closes the output context, cleanup all the stuff""" - self.frame.canvas.close() - - if self.toolbar is not None: - self.toolbar.close() - - if self.sidecar is not None: - self.sidecar.close() - - super().close() # ipywidget VBox cleanup diff --git a/fastplotlib/layouts/_frame/_qt_output.py b/fastplotlib/layouts/_frame/_qt_output.py deleted file mode 100644 index b4c7cffd9..000000000 --- a/fastplotlib/layouts/_frame/_qt_output.py +++ /dev/null @@ -1,57 +0,0 @@ -from PyQt6 import QtWidgets - -from ._qt_toolbar import QToolbar - - -class QOutputContext(QtWidgets.QWidget): - """ - Output context to display plots in Qt apps. Inherits from QtWidgets.QWidget - - Basically vstacks plot canvas, toolbar, and other widgets. - """ - def __init__( - self, - frame, - make_toolbar, - add_widgets, - ): - """ - - Parameters - ---------- - frame: - Plot frame for which to generate the output context - - add_widgets: List[Widget] - list of QWidget to stack below the plot and toolbar - """ - # no parent, user can use Plot.widget.setParent(parent) if necessary to embed into other widgets - QtWidgets.QWidget.__init__(self, parent=None) - self.frame = frame - self.toolbar = None - - # vertical layout used to stack plot canvas, toolbar, and add_widgets - self.vlayout = QtWidgets.QVBoxLayout(self) - - # add canvas to layout - self.vlayout.addWidget(self.frame.canvas) - - if make_toolbar: # make toolbar and add to layout - self.toolbar = QToolbar(output_context=self, plot=frame) - self.vlayout.addWidget(self.toolbar) - - for w in add_widgets: # add any additional widgets to layout - w.setParent(self) - self.vlayout.addWidget(w) - - self.setLayout(self.vlayout) - - self.resize(*self.frame._starting_size) - - self.show() - - def close(self): - """Cleanup and close the output context""" - self.frame.canvas.close() - self.toolbar.close() - super().close() # QWidget cleanup diff --git a/fastplotlib/layouts/_frame/_qt_toolbar.py b/fastplotlib/layouts/_frame/_qt_toolbar.py deleted file mode 100644 index 9d4e0b48f..000000000 --- a/fastplotlib/layouts/_frame/_qt_toolbar.py +++ /dev/null @@ -1,235 +0,0 @@ -from datetime import datetime -from functools import partial -from math import copysign -import traceback -from typing import * - -from PyQt6 import QtWidgets, QtCore - -from ...graphics.selectors import PolygonSelector -from ._toolbar import ToolBar -from ._qtoolbar_template import Ui_QToolbar - - -class QToolbar(ToolBar, QtWidgets.QWidget): # inheritance order MUST be Toolbar first, QWidget second! Else breaks - """Toolbar for Qt context""" - def __init__(self, output_context, plot): - QtWidgets.QWidget.__init__(self, parent=output_context) - ToolBar.__init__(self, plot) - - # initialize UI - self.ui = Ui_QToolbar() - self.ui.setupUi(self) - - # connect button events - self.ui.auto_scale_button.clicked.connect(self.auto_scale_handler) - self.ui.center_button.clicked.connect(self.center_scene_handler) - self.ui.panzoom_button.toggled.connect(self.panzoom_handler) - self.ui.maintain_aspect_button.toggled.connect(self.maintain_aspect_handler) - self.ui.y_direction_button.clicked.connect(self.y_direction_handler) - - # the subplot labels that update when a user click on subplots - if hasattr(self.plot, "_subplots"): - subplot = self.plot[0, 0] - # set label from first subplot name - if subplot.name is not None: - name = subplot.name - else: - name = str(subplot.position) - - # here we will just use a simple label, not a dropdown like ipywidgets - # the dropdown implementation is tedious with Qt - self.ui.current_subplot = QtWidgets.QLabel(parent=self) - self.ui.current_subplot.setText(name) - self.ui.horizontalLayout.addWidget(self.ui.current_subplot) - - # update the subplot label when a subplot is clicked into - self.plot.renderer.add_event_handler(self.update_current_subplot, "click") - - self.setMaximumHeight(35) - - # set the initial values for buttons - self.ui.maintain_aspect_button.setChecked(self.current_subplot.camera.maintain_aspect) - self.ui.panzoom_button.setChecked(self.current_subplot.controller.enabled) - - if copysign(1, self.current_subplot.camera.local.scale_y) == -1: - self.ui.y_direction_button.setText("v") - else: - self.ui.y_direction_button.setText("^") - - def update_current_subplot(self, ev): - """update the text label for the current subplot""" - for subplot in self.plot: - pos = subplot.map_screen_to_world((ev.x, ev.y)) - if pos is not None: - if subplot.name is not None: - name = subplot.name - else: - name = str(subplot.position) - self.ui.current_subplot.setText(name) - - # set buttons w.r.t. current subplot - self.ui.panzoom_button.setChecked(subplot.controller.enabled) - self.ui.maintain_aspect_button.setChecked(subplot.camera.maintain_aspect) - - if copysign(1, subplot.camera.local.scale_y) == -1: - self.ui.y_direction_button.setText("v") - else: - self.ui.y_direction_button.setText("^") - - def _get_subplot_dropdown_value(self) -> str: - return self.ui.current_subplot.text() - - def auto_scale_handler(self, *args): - self.current_subplot.auto_scale(maintain_aspect=self.current_subplot.camera.maintain_aspect) - - def center_scene_handler(self, *args): - self.current_subplot.center_scene() - - def panzoom_handler(self, value: bool): - self.current_subplot.controller.enabled = value - - def maintain_aspect_handler(self, value: bool): - for camera in self.current_subplot.controller.cameras: - camera.maintain_aspect = value - - def y_direction_handler(self, *args): - # flip every camera under the same controller - for camera in self.current_subplot.controller.cameras: - camera.local.scale_y *= -1 - - if copysign(1, self.current_subplot.camera.local.scale_y) == -1: - self.ui.y_direction_button.setText("v") - else: - self.ui.y_direction_button.setText("^") - - def record_handler(self, ev): - if self.ui.record_button.isChecked(): - try: - self.plot.record_start( - f"./{datetime.now().isoformat(timespec='seconds').replace(':', '_')}.mp4" - ) - except Exception: - traceback.print_exc() - self.ui.record_button.setChecked(False) - else: - self.plot.record_stop() - - def add_polygon(self, *args): - ps = PolygonSelector(edge_width=3, edge_color="mageneta") - self.current_subplot.add_graphic(ps, center=False) - - -# TODO: There must be a better way to do this -# TODO: Check if an interface exists between ipywidgets and Qt -class SliderInterface: - """ - This exists so that ImageWidget has a common interface for Sliders. - - This interface makes a QSlider behave somewhat like a ipywidget IntSlider, enough for ImageWidget to function. - """ - def __init__(self, qslider): - self.qslider = qslider - - @property - def value(self) -> int: - return self.qslider.value() - - @value.setter - def value(self, value: int): - self.qslider.setValue(value) - - @property - def max(self) -> int: - return self.qslider.maximum() - - @max.setter - def max(self, value: int): - self.qslider.setMaximum(value) - - @property - def min(self): - return self.qslider.minimum() - - @min.setter - def min(self, value: int): - self.qslider.setMinimum(value) - - -class QToolbarImageWidget(QtWidgets.QWidget): - """Toolbar for ImageWidget""" - - def __init__(self, image_widget): - QtWidgets.QWidget.__init__(self) - - # vertical layout - self.vlayout = QtWidgets.QVBoxLayout(self) - - self.image_widget = image_widget - - hlayout_buttons = QtWidgets.QHBoxLayout() - - self.reset_vmin_vmax_button = QtWidgets.QPushButton(self) - self.reset_vmin_vmax_button.setText("auto-contrast") - self.reset_vmin_vmax_button.clicked.connect(self.image_widget.reset_vmin_vmax) - hlayout_buttons.addWidget(self.reset_vmin_vmax_button) - - self.reset_vmin_vmax_hlut_button = QtWidgets.QPushButton(self) - self.reset_vmin_vmax_hlut_button.setText("reset histogram-lut") - self.reset_vmin_vmax_hlut_button.clicked.connect(self.image_widget.reset_vmin_vmax_frame) - hlayout_buttons.addWidget(self.reset_vmin_vmax_hlut_button) - - self.vlayout.addLayout(hlayout_buttons) - - self.sliders: Dict[str, SliderInterface] = dict() - - # has time and/or z-volume - if self.image_widget.ndim > 2: - # create a slider, spinbox and dimension label for each dimension in the ImageWidget - for dim in self.image_widget.slider_dims: - hlayout = QtWidgets.QHBoxLayout() # horizontal stack for label, slider, spinbox - - # max value for current dimension - max_val = self.image_widget._dims_max_bounds[dim] - 1 - - # make slider - slider = QtWidgets.QSlider(self) - slider.setOrientation(QtCore.Qt.Orientation.Horizontal) - slider.setMinimum(0) - slider.setMaximum(max_val) - slider.setValue(0) - slider.setSingleStep(1) - slider.setPageStep(10) - - # make spinbox - spinbox = QtWidgets.QSpinBox(self) - spinbox.setMinimum(0) - spinbox.setMaximum(max_val) - spinbox.setValue(0) - spinbox.setSingleStep(1) - - # link slider and spinbox - slider.valueChanged.connect(spinbox.setValue) - spinbox.valueChanged.connect(slider.setValue) - - # connect slider to change the index within the dimension - slider.valueChanged.connect(partial(self.image_widget._slider_value_changed, dim)) - - # slider dimension label - slider_label = QtWidgets.QLabel(self) - slider_label.setText(dim) - - # add the widgets to the horizontal layout - hlayout.addWidget(slider_label) - hlayout.addWidget(slider) - hlayout.addWidget(spinbox) - - # add horizontal layout to the vertical layout - self.vlayout.addLayout(hlayout) - - # add to sliders dict for easier access to users - self.sliders[dim] = SliderInterface(slider) - - max_height = 35 + (35 * len(self.sliders.keys())) - - self.setMaximumHeight(max_height) diff --git a/fastplotlib/layouts/_frame/_qtoolbar_template.py b/fastplotlib/layouts/_frame/_qtoolbar_template.py deleted file mode 100644 index a8a1c6f86..000000000 --- a/fastplotlib/layouts/_frame/_qtoolbar_template.py +++ /dev/null @@ -1,62 +0,0 @@ -# Form implementation generated from reading ui file 'qtoolbar.ui' -# -# Created by: PyQt6 UI code generator 6.5.3 -# -# WARNING: Any manual changes made to this file will be lost when pyuic6 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt6 import QtCore, QtGui, QtWidgets - - -class Ui_QToolbar(object): - def setupUi(self, QToolbar): - QToolbar.setObjectName("QToolbar") - QToolbar.resize(638, 48) - self.horizontalLayout_2 = QtWidgets.QHBoxLayout(QToolbar) - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") - self.auto_scale_button = QtWidgets.QPushButton(parent=QToolbar) - self.auto_scale_button.setObjectName("auto_scale_button") - self.horizontalLayout.addWidget(self.auto_scale_button) - self.center_button = QtWidgets.QPushButton(parent=QToolbar) - self.center_button.setObjectName("center_button") - self.horizontalLayout.addWidget(self.center_button) - self.panzoom_button = QtWidgets.QPushButton(parent=QToolbar) - self.panzoom_button.setCheckable(True) - self.panzoom_button.setObjectName("panzoom_button") - self.horizontalLayout.addWidget(self.panzoom_button) - self.maintain_aspect_button = QtWidgets.QPushButton(parent=QToolbar) - font = QtGui.QFont() - font.setBold(True) - font.setWeight(75) - self.maintain_aspect_button.setFont(font) - self.maintain_aspect_button.setCheckable(True) - self.maintain_aspect_button.setObjectName("maintain_aspect_button") - self.horizontalLayout.addWidget(self.maintain_aspect_button) - self.y_direction_button = QtWidgets.QPushButton(parent=QToolbar) - self.y_direction_button.setObjectName("y_direction_button") - self.horizontalLayout.addWidget(self.y_direction_button) - self.add_polygon_button = QtWidgets.QPushButton(parent=QToolbar) - self.add_polygon_button.setObjectName("add_polygon_button") - self.horizontalLayout.addWidget(self.add_polygon_button) - self.record_button = QtWidgets.QPushButton(parent=QToolbar) - self.record_button.setCheckable(True) - self.record_button.setObjectName("record_button") - self.horizontalLayout.addWidget(self.record_button) - self.horizontalLayout_2.addLayout(self.horizontalLayout) - - self.retranslateUi(QToolbar) - QtCore.QMetaObject.connectSlotsByName(QToolbar) - - def retranslateUi(self, QToolbar): - _translate = QtCore.QCoreApplication.translate - QToolbar.setWindowTitle(_translate("QToolbar", "Form")) - self.auto_scale_button.setText(_translate("QToolbar", "autoscale")) - self.center_button.setText(_translate("QToolbar", "center")) - self.panzoom_button.setText(_translate("QToolbar", "panzoom")) - self.maintain_aspect_button.setText(_translate("QToolbar", "1:1")) - self.y_direction_button.setText(_translate("QToolbar", "^")) - self.add_polygon_button.setText(_translate("QToolbar", "polygon")) - self.record_button.setText(_translate("QToolbar", "record")) diff --git a/fastplotlib/layouts/_frame/_toolbar.py b/fastplotlib/layouts/_frame/_toolbar.py deleted file mode 100644 index 94410b8ea..000000000 --- a/fastplotlib/layouts/_frame/_toolbar.py +++ /dev/null @@ -1,45 +0,0 @@ -from fastplotlib.layouts._subplot import Subplot - - -class ToolBar: - def __init__(self, plot): - self.plot = plot - - def _get_subplot_dropdown_value(self) -> str: - raise NotImplemented - - @property - def current_subplot(self) -> Subplot: - """Returns current subplot""" - if hasattr(self.plot, "_subplots"): - # parses dropdown or label value as plot name or position - current = self._get_subplot_dropdown_value() - if current[0] == "(": - # str representation of int tuple to tuple of int - current = tuple(int(i) for i in current.strip("()").split(",")) - return self.plot[current] - else: - return self.plot[current] - else: - return self.plot - - def panzoom_handler(self, ev): - raise NotImplemented - - def maintain_aspect_handler(self, ev): - raise NotImplemented - - def y_direction_handler(self, ev): - raise NotImplemented - - def auto_scale_handler(self, ev): - raise NotImplemented - - def center_scene_handler(self, ev): - raise NotImplemented - - def record_handler(self, ev): - raise NotImplemented - - def add_polygon(self, ev): - raise NotImplemented diff --git a/fastplotlib/layouts/_frame/qtoolbar.ui b/fastplotlib/layouts/_frame/qtoolbar.ui deleted file mode 100644 index 6c9aadae8..000000000 --- a/fastplotlib/layouts/_frame/qtoolbar.ui +++ /dev/null @@ -1,89 +0,0 @@ - - - QToolbar - - - - 0 - 0 - 638 - 48 - - - - Form - - - - - - - - autoscale - - - - - - - center - - - - - - - panzoom - - - true - - - - - - - - 75 - true - - - - 1:1 - - - true - - - - - - - ^ - - - - - - - polygon - - - - - - - record - - - true - - - - - - - - - - diff --git a/fastplotlib/layouts/_graphic_methods_mixin.py b/fastplotlib/layouts/_graphic_methods_mixin.py new file mode 100644 index 000000000..cb9cd04c0 --- /dev/null +++ b/fastplotlib/layouts/_graphic_methods_mixin.py @@ -0,0 +1,485 @@ +# This is an auto-generated file and should not be modified directly + +from typing import * + +import numpy + +from ..graphics import * +from ..graphics._base import Graphic + + +class GraphicMethodsMixin: + def _create_graphic(self, graphic_class, *args, **kwargs) -> Graphic: + if "center" in kwargs.keys(): + center = kwargs.pop("center") + else: + center = False + + if "name" in kwargs.keys(): + self._check_graphic_name_exists(kwargs["name"]) + + graphic = graphic_class(*args, **kwargs) + self.add_graphic(graphic, center=center) + + return graphic + + def add_image( + self, + data: Any, + vmin: int = None, + vmax: int = None, + cmap: str = "plasma", + interpolation: str = "nearest", + cmap_interpolation: str = "linear", + isolated_buffer: bool = True, + **kwargs, + ) -> ImageGraphic: + """ + + Create an Image Graphic + + Parameters + ---------- + data: array-like + array-like, usually numpy.ndarray, must support ``memoryview()`` + | shape must be ``[n_rows, n_cols]``, ``[n_rows, n_cols, 3]`` for RGB or ``[n_rows, n_cols, 4]`` for RGBA + + vmin: int, optional + minimum value for color scaling, calculated from data if not provided + + vmax: int, optional + maximum value for color scaling, calculated from data if not provided + + cmap: str, optional, default "plasma" + colormap to use to display the data. For supported colormaps see the + ``cmap`` library catalogue: https://cmap-docs.readthedocs.io/en/stable/catalog/ + + interpolation: str, optional, default "nearest" + interpolation filter, one of "nearest" or "linear" + + cmap_interpolation: str, optional, default "linear" + colormap interpolation method, one of "nearest" or "linear" + + isolated_buffer: bool, default True + If True, initialize a buffer with the same shape as the input data and then + set the data, useful if the data arrays are ready-only such as memmaps. + If False, the input array is itself used as the buffer - useful if the + array is large. + + kwargs: + additional keyword arguments passed to :class:`.Graphic` + + + """ + return self._create_graphic( + ImageGraphic, + data, + vmin, + vmax, + cmap, + interpolation, + cmap_interpolation, + isolated_buffer, + **kwargs, + ) + + def add_line_collection( + self, + data: Union[numpy.ndarray, List[numpy.ndarray]], + thickness: Union[float, Sequence[float]] = 2.0, + colors: Union[str, Sequence[str], numpy.ndarray, Sequence[numpy.ndarray]] = "w", + uniform_colors: bool = False, + alpha: float = 1.0, + cmap: Union[Sequence[str], str] = None, + cmap_transform: Union[numpy.ndarray, List] = None, + name: str = None, + names: list[str] = None, + metadata: Any = None, + metadatas: Union[Sequence[Any], numpy.ndarray] = None, + isolated_buffer: bool = True, + kwargs_lines: list[dict] = None, + **kwargs, + ) -> LineCollection: + """ + + Create a collection of :class:`.LineGraphic` + + Parameters + ---------- + data: list of array-like + List or array-like of multiple line data to plot + + | if ``list`` each item in the list must be a 1D, 2D, or 3D numpy array + | if array-like, must be of shape [n_lines, n_points_line, y | xy | xyz] + + thickness: float or Iterable of float, default 2.0 + | if ``float``, single thickness will be used for all lines + | if ``list`` of ``float``, each value will apply to the individual lines + + colors: str, RGBA array, Iterable of RGBA array, or Iterable of str, default "w" + | if single ``str`` such as "w", "r", "b", etc, represents a single color for all lines + | if single ``RGBA array`` (tuple or list of size 4), represents a single color for all lines + | if ``list`` of ``str``, represents color for each individual line, example ["w", "b", "r",...] + | if ``RGBA array`` of shape [data_size, 4], represents a single RGBA array for each line + + alpha: float, optional + alpha value for colors, if colors is a ``str`` + + cmap: Iterable of str or str, optional + | if ``str``, single cmap will be used for all lines + | if ``list`` of ``str``, each cmap will apply to the individual lines + + .. note:: + ``cmap`` overrides any arguments passed to ``colors`` + + cmap_transform: 1D array-like of numerical values, optional + if provided, these values are used to map the colors from the cmap + + name: str, optional + name of the line collection as a whole + + names: list[str], optional + names of the individual lines in the collection, ``len(names)`` must equal ``len(data)`` + + metadata: Any + meatadata associated with the collection as a whole + + metadatas: Iterable or array + metadata for each individual line associated with this collection, this is for the user to manage. + ``len(metadata)`` must be same as ``len(data)`` + + kwargs_lines: list[dict], optional + list of kwargs passed to the individual lines, ``len(kwargs_lines)`` must equal ``len(data)`` + + kwargs_collection + kwargs for the collection, passed to GraphicCollection + + + """ + return self._create_graphic( + LineCollection, + data, + thickness, + colors, + uniform_colors, + alpha, + cmap, + cmap_transform, + name, + names, + metadata, + metadatas, + isolated_buffer, + kwargs_lines, + **kwargs, + ) + + def add_line( + self, + data: Any, + thickness: float = 2.0, + colors: Union[str, numpy.ndarray, Sequence] = "w", + uniform_color: bool = False, + alpha: float = 1.0, + cmap: str = None, + cmap_transform: Union[numpy.ndarray, Sequence] = None, + isolated_buffer: bool = True, + size_space: str = "screen", + **kwargs, + ) -> LineGraphic: + """ + + Create a line Graphic, 2d or 3d + + Parameters + ---------- + data: array-like + Line data to plot. Can provide 1D, 2D, or a 3D data. + | If passing a 1D array, it is used to set the y-values and the x-values are generated as an integer range + from [0, data.size] + | 2D data must be of shape [n_points, 2]. 3D data must be of shape [n_points, 3] + + thickness: float, optional, default 2.0 + thickness of the line + + colors: str, array, or iterable, default "w" + specify colors as a single human-readable string, a single RGBA array, + or a Sequence (array, tuple, or list) of strings or RGBA arrays + + uniform_color: bool, default ``False`` + if True, uses a uniform buffer for the line color, + basically saves GPU VRAM when the entire line has a single color + + alpha: float, optional, default 1.0 + alpha value for the colors + + cmap: str, optional + Apply a colormap to the line instead of assigning colors manually, this + overrides any argument passed to "colors". For supported colormaps see the + ``cmap`` library catalogue: https://cmap-docs.readthedocs.io/en/stable/catalog/ + + cmap_transform: 1D array-like of numerical values, optional + if provided, these values are used to map the colors from the cmap + + size_space: str, default "screen" + coordinate space in which the thickness is expressed ("screen", "world", "model") + + **kwargs + passed to :class:`.Graphic` + + + """ + return self._create_graphic( + LineGraphic, + data, + thickness, + colors, + uniform_color, + alpha, + cmap, + cmap_transform, + isolated_buffer, + size_space, + **kwargs, + ) + + def add_line_stack( + self, + data: List[numpy.ndarray], + thickness: Union[float, Iterable[float]] = 2.0, + colors: Union[str, Iterable[str], numpy.ndarray, Iterable[numpy.ndarray]] = "w", + alpha: float = 1.0, + cmap: Union[Iterable[str], str] = None, + cmap_transform: Union[numpy.ndarray, List] = None, + name: str = None, + names: list[str] = None, + metadata: Any = None, + metadatas: Union[Sequence[Any], numpy.ndarray] = None, + isolated_buffer: bool = True, + separation: float = 10.0, + separation_axis: str = "y", + kwargs_lines: list[dict] = None, + **kwargs, + ) -> LineStack: + """ + + Create a stack of :class:`.LineGraphic` that are separated along the "x" or "y" axis. + + Parameters + ---------- + data: list of array-like + List or array-like of multiple line data to plot + + | if ``list`` each item in the list must be a 1D, 2D, or 3D numpy array + | if array-like, must be of shape [n_lines, n_points_line, y | xy | xyz] + + thickness: float or Iterable of float, default 2.0 + | if ``float``, single thickness will be used for all lines + | if ``list`` of ``float``, each value will apply to the individual lines + + colors: str, RGBA array, Iterable of RGBA array, or Iterable of str, default "w" + | if single ``str`` such as "w", "r", "b", etc, represents a single color for all lines + | if single ``RGBA array`` (tuple or list of size 4), represents a single color for all lines + | if ``list`` of ``str``, represents color for each individual line, example ["w", "b", "r",...] + | if ``RGBA array`` of shape [data_size, 4], represents a single RGBA array for each line + + alpha: float, optional + alpha value for colors, if colors is a ``str`` + + cmap: Iterable of str or str, optional + | if ``str``, single cmap will be used for all lines + | if ``list`` of ``str``, each cmap will apply to the individual lines + + .. note:: + ``cmap`` overrides any arguments passed to ``colors`` + + cmap_transform: 1D array-like of numerical values, optional + if provided, these values are used to map the colors from the cmap + + name: str, optional + name of the line collection as a whole + + names: list[str], optional + names of the individual lines in the collection, ``len(names)`` must equal ``len(data)`` + + metadata: Any + metadata associated with the collection as a whole + + metadatas: Iterable or array + metadata for each individual line associated with this collection, this is for the user to manage. + ``len(metadata)`` must be same as ``len(data)`` + + separation: float, default 10 + space in between each line graphic in the stack + + separation_axis: str, default "y" + axis in which the line graphics in the stack should be separated + + + kwargs_lines: list[dict], optional + list of kwargs passed to the individual lines, ``len(kwargs_lines)`` must equal ``len(data)`` + + kwargs_collection + kwargs for the collection, passed to GraphicCollection + + + """ + return self._create_graphic( + LineStack, + data, + thickness, + colors, + alpha, + cmap, + cmap_transform, + name, + names, + metadata, + metadatas, + isolated_buffer, + separation, + separation_axis, + kwargs_lines, + **kwargs, + ) + + def add_scatter( + self, + data: Any, + colors: str | numpy.ndarray | tuple[float] | list[float] | list[str] = "w", + uniform_color: bool = False, + alpha: float = 1.0, + cmap: str = None, + cmap_transform: numpy.ndarray = None, + isolated_buffer: bool = True, + sizes: Union[float, numpy.ndarray, Sequence[float]] = 1, + uniform_size: bool = False, + size_space: str = "screen", + **kwargs, + ) -> ScatterGraphic: + """ + + Create a Scatter Graphic, 2d or 3d + + Parameters + ---------- + data: array-like + Scatter data to plot, Can provide 2D, or a 3D data. 2D data must be of shape [n_points, 2]. + 3D data must be of shape [n_points, 3] + + colors: str, array, tuple, list, Sequence, default "w" + specify colors as a single human-readable string, a single RGBA array, + or a Sequence (array, tuple, or list) of strings or RGBA arrays + + uniform_color: bool, default False + if True, uses a uniform buffer for the scatter point colors. Useful if you need to + save GPU VRAM when all points have the same color. + + alpha: float, optional, default 1.0 + alpha value for the colors + + cmap: str, optional + apply a colormap to the scatter instead of assigning colors manually, this + overrides any argument passed to "colors". For supported colormaps see the + ``cmap`` library catalogue: https://cmap-docs.readthedocs.io/en/stable/catalog/ + + cmap_transform: 1D array-like or list of numerical values, optional + if provided, these values are used to map the colors from the cmap + + isolated_buffer: bool, default True + whether the buffers should be isolated from the user input array. + Generally always ``True``, ``False`` is for rare advanced use if you have large arrays. + + sizes: float or iterable of float, optional, default 1.0 + sizes of the scatter points + + uniform_size: bool, default False + if True, uses a uniform buffer for the scatter point sizes. Useful if you need to + save GPU VRAM when all points have the same size. + + size_space: str, default "screen" + coordinate space in which the size is expressed ("screen", "world", "model") + + kwargs + passed to :class:`.Graphic` + + + """ + return self._create_graphic( + ScatterGraphic, + data, + colors, + uniform_color, + alpha, + cmap, + cmap_transform, + isolated_buffer, + sizes, + uniform_size, + size_space, + **kwargs, + ) + + def add_text( + self, + text: str, + font_size: float | int = 14, + face_color: str | numpy.ndarray | list[float] | tuple[float] = "w", + outline_color: str | numpy.ndarray | list[float] | tuple[float] = "w", + outline_thickness: float = 0.0, + screen_space: bool = True, + offset: tuple[float] = (0, 0, 0), + anchor: str = "middle-center", + **kwargs, + ) -> TextGraphic: + """ + + Create a text Graphic + + Parameters + ---------- + text: str + text to display + + font_size: float | int, default 10 + font size + + face_color: str, array, list, tuple, default "w" + str or RGBA array to set the color of the text + + outline_color: str, array, list, tuple, default "w" + str or RGBA array to set the outline color of the text + + outline_thickness: float, default 0 + relative outline thickness, value between 0.0 - 0.5 + + screen_space: bool = True + if True, text size is in screen space, if False the text size is in data space + + offset: (float, float, float), default (0, 0, 0) + places the text at this location + + anchor: str, default "middle-center" + position of the origin of the text + a string representing the vertical and horizontal anchors, separated by a dash + + * Vertical values: "top", "middle", "baseline", "bottom" + * Horizontal values: "left", "center", "right" + + **kwargs + passed to :class:`.Graphic` + + + """ + return self._create_graphic( + TextGraphic, + text, + font_size, + face_color, + outline_color, + outline_thickness, + screen_space, + offset, + anchor, + **kwargs, + ) diff --git a/fastplotlib/layouts/_gridplot.py b/fastplotlib/layouts/_gridplot.py deleted file mode 100644 index 473196f78..000000000 --- a/fastplotlib/layouts/_gridplot.py +++ /dev/null @@ -1,308 +0,0 @@ -from itertools import product -import numpy as np -from typing import * -from inspect import getfullargspec -from warnings import warn - -import pygfx - -from wgpu.gui.auto import WgpuCanvas - -from ._frame import Frame -from ._utils import make_canvas_and_renderer -from ._defaults import create_controller -from ._subplot import Subplot -from ._record_mixin import RecordMixin - - -def to_array(a) -> np.ndarray: - if isinstance(a, np.ndarray): - return a - - if not isinstance(a, list): - raise TypeError("must pass list or numpy array") - - return np.array(a) - - -valid_cameras = ["2d", "2d-big", "3d", "3d-big"] - - -class GridPlot(Frame, RecordMixin): - def __init__( - self, - shape: Tuple[int, int], - cameras: Union[np.ndarray, str] = "2d", - controllers: Union[np.ndarray, str] = None, - canvas: Union[str, WgpuCanvas, pygfx.Texture] = None, - renderer: pygfx.WgpuRenderer = None, - size: Tuple[int, int] = (500, 300), - **kwargs, - ): - """ - A grid of subplots. - - Parameters - ---------- - shape: tuple of int - (n_rows, n_cols) - - cameras: np.ndarray or str, optional - | One of ``"2d"`` or ``"3d"`` indicating 2D or 3D cameras for all subplots - | OR - | Array of ``2d`` and/or ``3d`` that specifies the camera type for each subplot - - controllers: np.ndarray or str, optional - | If `None` a unique controller is created for each subplot - | If "sync" all the subplots use the same controller - | If ``numpy.array``, its shape must be the same as ``grid_shape``. - - This allows custom assignment of controllers - - | Example: - | unique controllers for a 2x2 gridplot: np.array([[0, 1], [2, 3]]) - | same controllers for first 2 plots and last 2 plots: np.array([[0, 0, 1], [2, 3, 3]]) - - canvas: WgpuCanvas, optional - Canvas for drawing - - renderer: pygfx.Renderer, optional - pygfx renderer instance - - size: (int, int) - starting size of canvas, default (500, 300) - - """ - - self.shape = shape - - canvas, renderer = make_canvas_and_renderer(canvas, renderer) - - if isinstance(cameras, str): - if cameras not in valid_cameras: - raise ValueError( - f"If passing a str, `cameras` must be one of: {valid_cameras}" - ) - # create the array representing the views for each subplot in the grid - cameras = np.array([cameras] * self.shape[0] * self.shape[1]).reshape( - self.shape - ) - - if isinstance(controllers, str): - if controllers == "sync": - controllers = np.zeros( - self.shape[0] * self.shape[1], dtype=int - ).reshape(self.shape) - - if controllers is None: - controllers = np.arange(self.shape[0] * self.shape[1]).reshape(self.shape) - - controllers = to_array(controllers) - - if controllers.shape != self.shape: - raise ValueError - - cameras = to_array(cameras) - - self._controllers = np.empty(shape=cameras.shape, dtype=object) - - if cameras.shape != self.shape: - raise ValueError - - # create controllers if the arguments were integers - if np.issubdtype(controllers.dtype, np.integer): - if not np.all( - np.sort(np.unique(controllers)) - == np.arange(np.unique(controllers).size) - ): - raise ValueError("controllers must be consecutive integers") - - for controller in np.unique(controllers): - cam = np.unique(cameras[controllers == controller]) - if cam.size > 1: - raise ValueError( - f"Controller id: {controller} has been assigned to multiple different camera types" - ) - - self._controllers[controllers == controller] = create_controller(cam[0]) - # else assume it's a single pygfx.Controller instance or a list of controllers - else: - if isinstance(controllers, pygfx.Controller): - self._controllers = np.array( - [controllers] * shape[0] * shape[1] - ).reshape(shape) - else: - self._controllers = np.array(controllers).reshape(shape) - - if canvas is None: - canvas = WgpuCanvas() - - if renderer is None: - renderer = pygfx.renderers.WgpuRenderer(canvas) - - if "names" in kwargs.keys(): - self.names = to_array(kwargs["names"]) - if self.names.shape != self.shape: - raise ValueError - else: - self.names = None - - self._canvas = canvas - self._renderer = renderer - - nrows, ncols = self.shape - - self._subplots: np.ndarray[Subplot] = np.ndarray( - shape=(nrows, ncols), dtype=object - ) - - for i, j in self._get_iterator(): - position = (i, j) - camera = cameras[i, j] - controller = self._controllers[i, j] - - if self.names is not None: - name = self.names[i, j] - else: - name = None - - self._subplots[i, j] = Subplot( - parent=self, - position=position, - parent_dims=(nrows, ncols), - camera=camera, - controller=controller, - canvas=canvas, - renderer=renderer, - name=name, - ) - - self._animate_funcs_pre: List[callable] = list() - self._animate_funcs_post: List[callable] = list() - - self._current_iter = None - - self._starting_size = size - - RecordMixin.__init__(self) - Frame.__init__(self) - - @property - def canvas(self) -> WgpuCanvas: - """The canvas associated to this GridPlot""" - return self._canvas - - @property - def renderer(self) -> pygfx.WgpuRenderer: - """The renderer associated to this GridPlot""" - return self._renderer - - def __getitem__(self, index: Union[Tuple[int, int], str]) -> Subplot: - if isinstance(index, str): - for subplot in self._subplots.ravel(): - if subplot.name == index: - return subplot - raise IndexError("no subplot with given name") - else: - return self._subplots[index[0], index[1]] - - def render(self): - # call the animation functions before render - self._call_animate_functions(self._animate_funcs_pre) - - for subplot in self: - subplot.render() - - self.renderer.flush() - self.canvas.request_draw() - - # call post-render animate functions - self._call_animate_functions(self._animate_funcs_post) - - def _call_animate_functions(self, funcs: Iterable[callable]): - for fn in funcs: - try: - if len(getfullargspec(fn).args) > 0: - fn(self) - else: - fn() - except (ValueError, TypeError): - warn( - f"Could not resolve argspec of {self.__class__.__name__} animation function: {fn}, " - f"calling it without arguments." - ) - fn() - - def add_animations( - self, - *funcs: Iterable[callable], - pre_render: bool = True, - post_render: bool = False, - ): - """ - Add function(s) that are called on every render cycle. - These are called at the GridPlot level. - - Parameters - ---------- - *funcs: callable or iterable of callable - function(s) that are called on each render cycle - - pre_render: bool, default ``True``, optional keyword-only argument - if true, these function(s) are called before a render cycle - - post_render: bool, default ``False``, optional keyword-only argument - if true, these function(s) are called after a render cycle - - """ - for f in funcs: - if not callable(f): - raise TypeError( - f"all positional arguments to add_animations() must be callable types, you have passed a: {type(f)}" - ) - if pre_render: - self._animate_funcs_pre += funcs - if post_render: - self._animate_funcs_post += funcs - - def remove_animation(self, func): - """ - Removes the passed animation function from both pre and post render. - - Parameters - ---------- - func: callable - The function to remove, raises a error if it's not registered as a pre or post animation function. - - """ - if func not in self._animate_funcs_pre and func not in self._animate_funcs_post: - raise KeyError( - f"The passed function: {func} is not registered as an animation function. These are the animation " - f" functions that are currently registered:\n" - f"pre: {self._animate_funcs_pre}\n\npost: {self._animate_funcs_post}" - ) - - if func in self._animate_funcs_pre: - self._animate_funcs_pre.remove(func) - - if func in self._animate_funcs_post: - self._animate_funcs_post.remove(func) - - def clear(self): - """Clear all Subplots""" - for subplot in self: - subplot.clear() - - def _get_iterator(self): - return product(range(self.shape[0]), range(self.shape[1])) - - def __iter__(self): - self._current_iter = self._get_iterator() - return self - - def __next__(self) -> Subplot: - pos = self._current_iter.__next__() - return self._subplots[pos] - - def __repr__(self): - return f"fastplotlib.{self.__class__.__name__} @ {hex(id(self))}\n" diff --git a/fastplotlib/layouts/_imgui_figure.py b/fastplotlib/layouts/_imgui_figure.py new file mode 100644 index 000000000..c54890239 --- /dev/null +++ b/fastplotlib/layouts/_imgui_figure.py @@ -0,0 +1,237 @@ +from pathlib import Path +from typing import Literal, Iterable + +import numpy as np + +import imgui_bundle +from imgui_bundle import imgui, icons_fontawesome_6 as fa + +from wgpu.utils.imgui import ImguiRenderer, Stats +from rendercanvas import BaseRenderCanvas + +import pygfx + +from ._figure import Figure +from ..ui import EdgeWindow, SubplotToolbar, StandardRightClickMenu, Popup, GUI_EDGES +from ..ui import ColormapPicker + + +class ImguiFigure(Figure): + def __init__( + self, + shape: tuple[int, int] = (1, 1), + rects: list[tuple | np.ndarray] = None, + extents: list[tuple | np.ndarray] = None, + cameras: ( + Literal["2d", "3d"] + | Iterable[Iterable[Literal["2d", "3d"]]] + | pygfx.PerspectiveCamera + | Iterable[Iterable[pygfx.PerspectiveCamera]] + ) = "2d", + controller_types: ( + Iterable[Iterable[Literal["panzoom", "fly", "trackball", "orbit"]]] + | Iterable[Literal["panzoom", "fly", "trackball", "orbit"]] + ) = None, + controller_ids: ( + Literal["sync"] + | Iterable[int] + | Iterable[Iterable[int]] + | Iterable[Iterable[str]] + ) = None, + controllers: pygfx.Controller | Iterable[Iterable[pygfx.Controller]] = None, + canvas: str | BaseRenderCanvas | pygfx.Texture = None, + renderer: pygfx.WgpuRenderer = None, + canvas_kwargs: dict = None, + size: tuple[int, int] = (500, 300), + names: list | np.ndarray = None, + show_tooltips: bool = False, + ): + self._guis: dict[str, EdgeWindow] = {k: None for k in GUI_EDGES} + + super().__init__( + shape=shape, + rects=rects, + extents=extents, + cameras=cameras, + controller_types=controller_types, + controller_ids=controller_ids, + controllers=controllers, + canvas=canvas, + renderer=renderer, + canvas_kwargs=canvas_kwargs, + size=size, + names=names, + show_tooltips=show_tooltips, + ) + + self._imgui_renderer = ImguiRenderer(self.renderer.device, self.canvas) + + fronts_path = str( + Path(imgui_bundle.__file__).parent.joinpath( + "assets", "fonts", "Font_Awesome_6_Free-Solid-900.otf" + ) + ) + + io = imgui.get_io() + + self._fa_icons = io.fonts.add_font_from_file_ttf( + fronts_path, 16, glyph_ranges_as_int_list=[fa.ICON_MIN_FA, fa.ICON_MAX_FA] + ) + + io.fonts.build() + self.imgui_renderer.backend.create_fonts_texture() + + self.imgui_renderer.set_gui(self._draw_imgui) + + self._subplot_toolbars: np.ndarray[SubplotToolbar] = np.empty( + shape=self._subplots.size, dtype=object + ) + + for i, subplot in enumerate(self._subplots.ravel()): + toolbar = SubplotToolbar(subplot=subplot, fa_icons=self._fa_icons) + self._subplot_toolbars[i] = toolbar + + self._right_click_menu = StandardRightClickMenu( + figure=self, fa_icons=self._fa_icons + ) + + self._popups: dict[str, Popup] = {} + + self.imgui_show_fps = False + self._stats = Stats(self.renderer.device, self.canvas) + + self.register_popup(ColormapPicker) + + @property + def guis(self) -> dict[str, EdgeWindow]: + """GUI windows added to the Figure""" + return self._guis + + @property + def imgui_renderer(self) -> ImguiRenderer: + """imgui renderer""" + return self._imgui_renderer + + def _render(self, draw=False): + if self.imgui_show_fps: + with self._stats: + super()._render(draw) + else: + super()._render(draw) + + self.imgui_renderer.render() + + # needs to be here else events don't get processed + self.canvas.request_draw() + + def _draw_imgui(self) -> imgui.ImDrawData: + imgui.new_frame() + + for subplot, toolbar in zip( + self._subplots.ravel(), self._subplot_toolbars.ravel() + ): + if not subplot.toolbar: + # if subplot.toolbar is False + continue + toolbar.update() + + for gui in self.guis.values(): + if gui is not None: + gui.draw_window() + + for popup in self._popups.values(): + popup.update() + + self._right_click_menu.update() + + imgui.end_frame() + + imgui.render() + + return imgui.get_draw_data() + + def add_gui(self, gui: EdgeWindow): + """ + Add a GUI to the Figure. GUIs can be added to the left or bottom edge. + + Parameters + ---------- + gui: EdgeWindow + A GUI EdgeWindow instance + + """ + if not isinstance(gui, EdgeWindow): + raise TypeError( + f"GUI must be of type: {EdgeWindow} you have passed a {type(gui)}" + ) + + location = gui.location + + if location not in GUI_EDGES: + raise ValueError( + f"GUI does not have a valid location, valid locations are: {GUI_EDGES}, you have passed: {location}" + ) + + if self.guis[location] is not None: + raise ValueError(f"GUI already exists in the desired location: {location}") + + self.guis[location] = gui + + self._fpl_reset_layout() + + def get_pygfx_render_area(self, *args) -> tuple[int, int, int, int]: + """ + Get rect for the portion of the canvas that the pygfx renderer draws to, + i.e. non-imgui, part of canvas + + Returns + ------- + tuple[int, int, int, int] + x_pos, y_pos, width, height + + """ + + width, height = self.canvas.get_logical_size() + + for edge in ["right"]: + if self.guis[edge]: + width -= self._guis[edge].size + + for edge in ["bottom"]: + if self.guis[edge]: + height -= self._guis[edge].size + + return 0, 0, max(1, width), max(1, height) + + def register_popup(self, popup: Popup.__class__): + """ + Register a popup class. Note that this takes the class, not an instance + + Parameters + ---------- + popup: Popup subclass + + """ + self._popups[popup.name] = popup(self) + + def open_popup(self, name: str, pos: tuple[int, int], **kwargs): + """ + Open a registered popup + + Parameters + ---------- + name: str + The registered name of the popup + + pos: int, int + x_pos, y_pos for the popup + + kwargs + any additional kwargs to pass to the Popup's open() method + + """ + + if self._popups[name].is_open: + return + + self._popups[name].open(pos, **kwargs) diff --git a/fastplotlib/layouts/_plot.py b/fastplotlib/layouts/_plot.py deleted file mode 100644 index 5aa04bb76..000000000 --- a/fastplotlib/layouts/_plot.py +++ /dev/null @@ -1,66 +0,0 @@ -from typing import * - -import pygfx -from wgpu.gui.auto import WgpuCanvas - -from ._subplot import Subplot -from ._frame import Frame -from ._record_mixin import RecordMixin - - -class Plot(Subplot, Frame, RecordMixin): - def __init__( - self, - canvas: WgpuCanvas = None, - renderer: pygfx.WgpuRenderer = None, - camera: str = "2d", - controller: Union[pygfx.PanZoomController, pygfx.OrbitController] = None, - size: Tuple[int, int] = (500, 300), - **kwargs, - ): - """ - Simple Plot object. - - Parameters - ---------- - canvas: WgpuCanvas, optional - Canvas for drawing - - renderer: pygfx.Renderer, optional - pygfx renderer instance - - camera:str, optional - | One of ``"2d"`` or ``"3d"`` indicating 2D or 3D camera - - controller: None, PanZoomController or OrbitOrthoController, optional - Usually ``None``, you can pass an existing controller from another - ``Plot`` or ``Subplot`` within a ``GridPlot`` to synchronize them. - - size: (int, int) - starting size of canvas, default (500, 300) - - kwargs - passed to Subplot, for example ``name`` - - """ - super(Plot, self).__init__( - parent=None, - position=(0, 0), - parent_dims=(1, 1), - canvas=canvas, - renderer=renderer, - camera=camera, - controller=controller, - **kwargs, - ) - RecordMixin.__init__(self) - Frame.__init__(self) - - self._starting_size = size - - def render(self): - """performs a single render of the plot, not for the user""" - super(Plot, self).render() - - self.renderer.flush() - self.canvas.request_draw() diff --git a/fastplotlib/layouts/_plot_area.py b/fastplotlib/layouts/_plot_area.py index 7590bad10..2542fc215 100644 --- a/fastplotlib/layouts/_plot_area.py +++ b/fastplotlib/layouts/_plot_area.py @@ -1,197 +1,280 @@ from inspect import getfullargspec -from typing import * -import weakref +from typing import Literal, Union from warnings import warn import numpy as np import pygfx -from pygfx import ( - Scene, - OrthographicCamera, - PerspectiveCamera, - PanZoomController, - OrbitController, - Viewport, - WgpuRenderer, -) from pylinalg import vec_transform, vec_unproject -from wgpu.gui.auto import WgpuCanvas +from rendercanvas import BaseRenderCanvas +from ._utils import create_controller from ..graphics._base import Graphic from ..graphics.selectors._base_selector import BaseSelector +from ._graphic_methods_mixin import GraphicMethodsMixin +from ..legends import Legend -# dict to store Graphic instances -# this is the only place where the real references to Graphics are stored in a Python session -# {hex id str: Graphic} -GRAPHICS: Dict[str, Graphic] = dict() -SELECTORS: Dict[str, BaseSelector] = dict() +try: + get_ipython() +except NameError: + IS_IPYTHON = False + IPYTHON = None +else: + IS_IPYTHON = True + IPYTHON = get_ipython() -class PlotArea: + +class PlotArea(GraphicMethodsMixin): def __init__( self, - parent, - position: Any, - camera: Union[OrthographicCamera, PerspectiveCamera], - controller: Union[PanZoomController, OrbitController], - scene: Scene, - canvas: WgpuCanvas, - renderer: WgpuRenderer, + parent: Union["PlotArea", "Figure"], + camera: pygfx.PerspectiveCamera, + controller: pygfx.Controller, + scene: pygfx.Scene, + canvas: BaseRenderCanvas, + renderer: pygfx.WgpuRenderer, name: str = None, ): """ Base class for plot creation and management. ``PlotArea`` is not intended to be instantiated by users - but rather to provide functionality for ``subplot`` in ``gridplot`` and single ``plot``. + but rather to provide functionality for ``subplots`` in a user ``Figure`` Parameters ---------- - parent: PlotArea - parent class of subclasses will be a ``PlotArea`` instance + parent: PlotArea or Figure + parent object position: Any - typical use will be for ``subplots`` in a ``gridplot``, position would correspond to the ``[row, column]`` - location of the ``subplot`` in its ``gridplot`` + position of the plot area. In a ``subplot`` position would correspond to the ``[row, column]`` + index of the ``subplot``. In docks this would correspond to a str name, "top", "right", "bottom" or "left" - camera: pygfx OrthographicCamera or pygfx PerspectiveCamera - ``OrthographicCamera`` type is used to visualize 2D content and ``PerspectiveCamera`` type is used to view - 3D content, used to view the scene + camera: pygfx.PerspectiveCamera + Use perspective camera for both perspective and orthographic views. Set fov = 0 for orthographic projection - controller: pygfx PanZoomController or pygfx OrbitController - ``PanZoomController`` type is used for 2D pan-zoom camera control and ``OrbitController`` type is used for - rotating the camera around a center position, used to control the camera + controller: pygfx.Controller + One of the pygfx controllers: "panzoom", "fly", "trackball", "orbit" - scene: pygfx Scene + scene: pygfx.Scene represents the root of a scene graph, will be viewed by the given ``camera`` - canvas: WgpuCanvas + canvas: BaseRenderCanvas provides surface on which a scene will be rendered - renderer: WgpuRenderer - object used to render scenes using wgpu + renderer: pygfx.WgpuRenderer + renders the scene onto the canvas name: str, optional - name of ``subplot`` or ``plot`` subclass being instantiated + name this plot area """ - self._parent: PlotArea = parent - self._position = position + self._parent = parent self._scene = scene self._canvas = canvas self._renderer = renderer - if parent is None: - self._viewport: Viewport = Viewport(renderer) - else: - self._viewport = Viewport(parent.renderer) + self._viewport: pygfx.Viewport = pygfx.Viewport(renderer) self._camera = camera self._controller = controller - self.controller.add_camera(self.camera) + self.controller.add_camera(self._camera) self.controller.register_events( self.viewport, ) - self._animate_funcs_pre = list() - self._animate_funcs_post = list() - - self.renderer.add_event_handler(self.set_viewport_rect, "resize") + self._animate_funcs_pre: list[callable] = list() + self._animate_funcs_post: list[callable] = list() - # list of hex id strings for all graphics managed by this PlotArea - # the real Graphic instances are stored in the ``GRAPHICS`` dict - self._graphics: List[str] = list() + # list of all graphics managed by this PlotArea + self._graphics: list[Graphic] = list() # selectors are in their own list so they can be excluded from scene bbox calculations - # managed similar to GRAPHICS for garbage collection etc. - self._selectors: List[str] = list() + self._selectors: list[BaseSelector] = list() + + # legends, managed just like other graphics as explained above + self._legends: list[Legend] = list() + + # keep all graphics in a separate group, makes bbox calculations etc. easier + # this is the "real scene" excluding axes, selection tools etc. + self._fpl_graphics_scene = pygfx.Group() + self.scene.add(self._fpl_graphics_scene) self._name = name # need to think about how to deal with children better self.children = list() - self.set_viewport_rect() + self._background_material = pygfx.BackgroundMaterial( + (0.0, 0.0, 0.0, 1.0), + (0.0, 0.0, 0.0, 1.0), + (0.0, 0.0, 0.0, 1.0), + (0.0, 0.0, 0.0, 1.0), + ) + self._background = pygfx.Background(None, self._background_material) + self.scene.add(self._background) + + def get_figure(self, obj=None): + """Get Figure instance that contains this plot area""" + if obj is None: + obj = self + + if obj.parent.__class__.__name__.endswith("Figure"): + return obj.parent + else: + if obj.parent is None: + raise RecursionError + + return self.get_figure(obj=obj.parent) # several read-only properties @property def parent(self): - """The parent PlotArea""" + """A parent if relevant""" return self._parent @property - def position(self) -> Union[Tuple[int, int], Any]: - """Position of this plot area within a larger layout (such as GridPlot) if relevant""" - return self._position - - @property - def scene(self) -> Scene: + def scene(self) -> pygfx.Scene: """The Scene where Graphics lie in this plot area""" return self._scene @property - def canvas(self) -> WgpuCanvas: + def canvas(self) -> BaseRenderCanvas: """Canvas associated to the plot area""" return self._canvas @property - def renderer(self) -> WgpuRenderer: + def renderer(self) -> pygfx.WgpuRenderer: """Renderer associated to the plot area""" return self._renderer @property - def viewport(self) -> Viewport: + def viewport(self) -> pygfx.Viewport: """The rectangular area of the renderer associated to this plot area""" return self._viewport @property - def camera(self) -> Union[OrthographicCamera, PerspectiveCamera]: + def camera(self) -> pygfx.PerspectiveCamera: """camera used to view the scene""" return self._camera + @camera.setter + def camera(self, new_camera: str | pygfx.PerspectiveCamera): + # user wants to set completely new camera, remove current camera from controller + if isinstance(new_camera, pygfx.PerspectiveCamera): + self.controller.remove_camera(self._camera) + # add new camera to controller + self.controller.add_camera(new_camera) + + self._camera = new_camera + + # modify FOV if necessary + elif isinstance(new_camera, str): + if new_camera == "2d": + self._camera.fov = 0 + + elif new_camera == "3d": + # orthographic -> perspective only if fov = 0, i.e. if camera is in ortho mode + # otherwise keep same FOV + if self._camera.fov == 0: + self._camera.fov = 50 + + else: + raise ValueError( + "camera must be one of '2d', '3d' or a pygfx.PerspectiveCamera instance" + ) + else: + raise ValueError( + "camera must be one of '2d', '3d' or a pygfx.PerspectiveCamera instance" + ) + # in the future we can think about how to allow changing the controller @property - def controller(self) -> Union[PanZoomController, OrbitController]: - """controller used to control camera""" + def controller(self) -> pygfx.Controller: + """controller used to control the camera""" return self._controller + @controller.setter + def controller(self, new_controller: str | pygfx.Controller): + new_controller = create_controller(new_controller, self._camera) + + cameras_list = list() + + # remove all the cameras associated to this controller + for camera in self._controller.cameras: + self._controller.remove_camera(camera) + cameras_list.append(camera) + + # add the associated cameras to the new controller + for camera in cameras_list: + new_controller.add_camera(camera) + + new_controller.register_events(self.viewport) + + # TODO: monkeypatch until we figure out a better + # pygfx plans on refactoring viewports anyways + if self.parent is not None: + if self.parent.__class__.__name__.endswith("Figure"): + for subplot in self.parent: + if subplot.camera in cameras_list: + new_controller.register_events(subplot.viewport) + subplot._controller = new_controller + + self._controller = new_controller + @property - def graphics(self) -> Tuple[Graphic, ...]: - """Graphics in the plot area. Always returns a proxy to the Graphic instances.""" - proxies = list() - for loc in self._graphics: - p = weakref.proxy(GRAPHICS[loc]) - proxies.append(p) + def graphics(self) -> tuple[Graphic, ...]: + """Graphics in the plot area.""" + return tuple(self._graphics) - return tuple(proxies) + @property + def selectors(self) -> tuple[BaseSelector, ...]: + """Selectors in the plot area.""" + return tuple(self._selectors) @property - def selectors(self) -> Tuple[BaseSelector, ...]: - """Selectors in the plot area. Always returns a proxy to the Graphic instances.""" - proxies = list() - for loc in self._selectors: - p = weakref.proxy(SELECTORS[loc]) - proxies.append(p) + def legends(self) -> tuple[Legend, ...]: + """Legends in the plot area.""" + return tuple(self._legends) - return tuple(proxies) + @property + def objects(self) -> tuple[Graphic | BaseSelector | Legend, ...]: + return *self.graphics, *self.selectors, *self.legends @property - def name(self) -> Any: + def name(self) -> str: """The name of this plot area""" return self._name @name.setter - def name(self, name: Any): + def name(self, name: str): + if name is None: + self._name = None + return + + if not isinstance(name, str): + raise TypeError("PlotArea `name` must be of type ") self._name = name - def get_rect(self) -> Tuple[float, float, float, float]: - """allows setting the region occupied by the viewport w.r.t. the parent""" - raise NotImplementedError("Must be implemented in subclass") + @property + def background_color(self) -> tuple[pygfx.Color, ...]: + """background colors, (top left, top right, bottom right, bottom left)""" + return ( + self._background_material.color_top_left, + self._background_material.color_top_right, + self._background_material.color_bottom_right, + self._background_material.color_bottom_left, + ) + + @background_color.setter + def background_color(self, colors: str | tuple[float]): + """1, 2, or 4 colors, each color must be acceptable by pygfx.Color""" + self._background_material.set_colors(*colors) def map_screen_to_world( - self, pos: Union[Tuple[float, float], pygfx.PointerEvent] - ) -> np.ndarray: + self, pos: tuple[float, float] | pygfx.PointerEvent, allow_outside: bool = False + ) -> np.ndarray | None: """ Map screen position to world position @@ -204,7 +287,7 @@ def map_screen_to_world( if isinstance(pos, pygfx.PointerEvent): pos = pos.x, pos.y - if not self.viewport.is_inside(*pos): + if not allow_outside and not self.viewport.is_inside(*pos): return None vs = self.viewport.logical_size @@ -225,21 +308,18 @@ def map_screen_to_world( # default z is zero for now return np.array([*pos_world[:2], 0]) - def set_viewport_rect(self, *args): - self.viewport.rect = self.get_rect() - - def render(self): + def _render(self): self._call_animate_functions(self._animate_funcs_pre) # does not flush, flush must be implemented in user-facing Plot objects self.viewport.render(self.scene, self.camera) for child in self.children: - child.render() + child._render() self._call_animate_functions(self._animate_funcs_post) - def _call_animate_functions(self, funcs: Iterable[callable]): + def _call_animate_functions(self, funcs: list[callable]): for fn in funcs: try: args = getfullargspec(fn).args @@ -260,7 +340,7 @@ def _call_animate_functions(self, funcs: Iterable[callable]): def add_animations( self, - *funcs: Iterable[callable], + *funcs: callable, pre_render: bool = True, post_render: bool = False, ): @@ -270,7 +350,7 @@ def add_animations( Parameters ---------- - *funcs: callable or iterable of callable + *funcs: callable(s) function(s) that are called on each render cycle pre_render: bool, default ``True``, optional keyword-only argument @@ -327,16 +407,25 @@ def add_graphic(self, graphic: Graphic, center: bool = True): Center the camera on the newly added Graphic """ + + if graphic in self: + # graphic is already in this plot but was removed from the scene, add it back + self._fpl_graphics_scene.add(graphic.world_object) + return + self._add_or_insert_graphic(graphic=graphic, center=center, action="add") - graphic.position_z = len(self) + if self.camera.fov == 0: + # for orthographic positions stack objects along the z-axis + # for perspective projections we assume the user wants full 3D control + graphic.offset = (*graphic.offset[:-1], len(self)) def insert_graphic( self, graphic: Graphic, center: bool = True, index: int = 0, - z_position: int = None, + auto_offset: int = None, ): """ Insert graphic into scene at given position ``index`` in stored graphics. @@ -353,8 +442,8 @@ def insert_graphic( index: int, default 0 Index to insert graphic. - z_position: int, default None - z axis position to place Graphic. If ``None``, uses value of `index` argument + auto_offset: bool, default True + If True and using an orthographic projection, sets z-axis offset of graphic to `index` """ if index > len(self._graphics): @@ -368,16 +457,17 @@ def insert_graphic( graphic=graphic, center=center, action="insert", index=index ) - if z_position is None: - graphic.position_z = index - else: - graphic.position_z = z_position + if self.camera.fov == 0: + # for orthographic positions stack objects along the z-axis + # for perspective projections we assume the user wants full 3D control + if auto_offset: + graphic.offset = (*graphic.offset[:-1], index) def _add_or_insert_graphic( self, graphic: Graphic, center: bool = True, - action: str = Union["insert", "add"], + action: str = Literal["insert", "add"], index: int = 0, ): """Private method to handle inserting or adding a graphic to a PlotArea.""" @@ -390,56 +480,44 @@ def _add_or_insert_graphic( self._check_graphic_name_exists(graphic.name) if isinstance(graphic, BaseSelector): - # store in SELECTORS dict - loc = graphic.loc - SELECTORS[ - loc - ] = graphic # add hex id string for referencing this graphic instance - # don't manage garbage collection of LineSliders for now - if action == "insert": - self._selectors.insert(index, loc) - else: - self._selectors.append(loc) - else: - # store in GRAPHICS dict - loc = graphic.loc - GRAPHICS[ - loc - ] = graphic # add hex id string for referencing this graphic instance - - if action == "insert": - self._graphics.insert(index, loc) - else: - self._graphics.append(loc) + obj_list = self._selectors + self.scene.add(graphic.world_object) - # now that it's in the dict, just use the weakref - graphic = weakref.proxy(graphic) + elif isinstance(graphic, Legend): + obj_list = self._legends + self.scene.add(graphic.world_object) - # add world object to scene - self.scene.add(graphic.world_object) + elif isinstance(graphic, Graphic): + obj_list = self._graphics + self._fpl_graphics_scene.add(graphic.world_object) - if center: - self.center_graphic(graphic) + # add to tooltip registry + if self.get_figure().show_tooltips: + self.get_figure().tooltip_manager.register(graphic) - # if we don't use the weakref above, then the object lingers if a plot hook is used! - if hasattr(graphic, "_add_plot_area_hook"): - graphic._add_plot_area_hook(self) + else: + raise TypeError("graphic must be of type Graphic | BaseSelector | Legend") - def _check_graphic_name_exists(self, name): - graphic_names = list() + if action == "insert": + obj_list.insert(index, graphic) + elif action == "add": + obj_list.append(graphic) + else: + raise ValueError("valid actions are 'insert' | 'add'") - for g in self.graphics: - graphic_names.append(g.name) + if center: + self.center_graphic(graphic) - for s in self.selectors: - graphic_names.append(s.name) + graphic._fpl_add_plot_area_hook(self) - if name in graphic_names: + def _check_graphic_name_exists(self, name): + if name in self: raise ValueError( - f"graphics must have unique names, current graphic names are:\n {graphic_names}" + f"Graphic with given name already exists in subplot or plot area. " + f"All graphics within a subplot or plot area must have a unique name." ) - def center_graphic(self, graphic: Graphic, zoom: float = 1.35): + def center_graphic(self, graphic: Graphic, zoom: float = 1.0): """ Center the camera w.r.t. the passed graphic @@ -448,7 +526,7 @@ def center_graphic(self, graphic: Graphic, zoom: float = 1.35): graphic: Graphic The graphic instance to center on - zoom: float, default 1.3 + zoom: float zoom the camera after centering """ @@ -459,59 +537,65 @@ def center_graphic(self, graphic: Graphic, zoom: float = 1.35): # probably because camera.show_object uses bounding sphere self.camera.zoom = zoom - def center_scene(self, zoom: float = 1.35): + def center_scene(self, *, zoom: float = 1.0): """ Auto-center the scene, does not scale. Parameters ---------- - zoom: float, default 1.3 + zoom: float apply a zoom after centering the scene """ - if not len(self.scene.children) > 0: + + if not len(self._fpl_graphics_scene.children) > 0: return # scale all cameras associated with this controller # else it looks wonky for camera in self.controller.cameras: - camera.show_object(self.scene) + camera.show_object(self._fpl_graphics_scene) # camera.show_object can cause the camera width and height to increase so apply a zoom to compensate # probably because camera.show_object uses bounding sphere camera.zoom = zoom - def auto_scale(self, maintain_aspect: bool = False, zoom: float = 0.8): + def auto_scale( + self, + *, # since this is often used as an event handler, don't want to coerce maintain_aspect = True + maintain_aspect: None | bool = None, + zoom: float = 0.75, + ): """ Auto-scale the camera w.r.t to the scene Parameters ---------- - maintain_aspect: bool, default ``False`` - maintain the camera aspect ratio for all dimensions, if ``False`` the camera - is scaled according to the bounds in each dimension. + maintain_aspect: ``None`` or bool, default ``None`` + Maintain the camera aspect ratio for all dimensions. If ``None``, the aspect is left unchanged. + if ``False`` the camera is scaled to the bounding box of the current scene. + + zoom: float + zoom value for the camera after auto-scaling - zoom: float, default 0.8 - zoom value for the camera after auto-scaling, if zoom = 1.0 then the graphics - in the scene will fill the entire canvas. """ - if not len(self.scene.children) > 0: + + if not len(self._fpl_graphics_scene.children) > 0: return - # hacky workaround for now until we decide if we want to put selectors in their own scene - # remove all selectors from a scene to calculate scene bbox - for selector in self.selectors: - self.scene.remove(selector.world_object) self.center_scene() - if not isinstance(maintain_aspect, bool): - maintain_aspect = False # assume False + + if maintain_aspect is None: # if not provided keep current setting + maintain_aspect = self.camera.maintain_aspect # scale all cameras associated with this controller else it looks wonky for camera in self.controller.cameras: camera.maintain_aspect = maintain_aspect - if len(self.scene.children) > 0: - width, height, depth = np.ptp(self.scene.get_world_bounding_box(), axis=0) + if len(self._fpl_graphics_scene.children) > 0: + width, height, depth = np.ptp( + self._fpl_graphics_scene.get_world_bounding_box(), axis=0 + ) else: width, height, depth = (1, 1, 1) @@ -521,9 +605,6 @@ def auto_scale(self, maintain_aspect: bool = False, zoom: float = 0.8): if height < 0.01: height = 1 - for selector in self.selectors: - self.scene.add(selector.world_object) - # scale all cameras associated with this controller else it looks wonky for camera in self.controller.cameras: camera.width = width @@ -544,7 +625,11 @@ def remove_graphic(self, graphic: Graphic): """ - self.scene.remove(graphic.world_object) + if isinstance(graphic, (BaseSelector, Legend)): + self.scene.remove(graphic.world_object) + + elif isinstance(graphic, Graphic): + self._fpl_graphics_scene.remove(graphic.world_object) def delete_graphic(self, graphic: Graphic): """ @@ -556,83 +641,62 @@ def delete_graphic(self, graphic: Graphic): The graphic to delete """ - # TODO: proper gc of selectors, RAM is freed for regular graphics but not selectors - # TODO: references to selectors must be lingering somewhere - # get location - loc = graphic.loc - - # check which dict it's in - if loc in self._graphics: - glist = self._graphics - kind = "graphic" - elif loc in self._selectors: - kind = "selector" - glist = self._selectors - else: - raise KeyError( - f"Graphic with following address not found in plot area: {loc}" - ) + if graphic not in self: + raise KeyError(f"Graphic not found in plot area: {graphic}") + + if isinstance(graphic, BaseSelector): + self._selectors.remove(graphic) + + elif isinstance(graphic, Legend): + self._legends.remove(graphic) + + elif isinstance(graphic, Graphic): + self._graphics.remove(graphic) # remove from scene if necessary if graphic.world_object in self.scene.children: self.scene.remove(graphic.world_object) - # remove from list of addresses - glist.remove(loc) + elif graphic.world_object in self._fpl_graphics_scene.children: + self._fpl_graphics_scene.remove(graphic.world_object) # cleanup - graphic._cleanup() - - if kind == "graphic": - del GRAPHICS[loc] - elif kind == "selector": - del SELECTORS[loc] + graphic._fpl_prepare_del() + + if IS_IPYTHON: + # remove any references that ipython might have made + # check both namespaces + for namespace in [IPYTHON.user_ns, IPYTHON.user_ns_hidden]: + # find the reference + for ref, obj in namespace.items(): + if graphic is obj: + # we found the reference, remove from ipython + IPYTHON.del_var(ref) + break def clear(self): """ Clear the Plot or Subplot. Also performs garbage collection, i.e. runs ``delete_graphic`` on all graphics. """ - - for g in self.graphics: + for g in self.objects: self.delete_graphic(g) - for s in self.selectors: - self.delete_graphic(s) - def __getitem__(self, name: str): - for graphic in self.graphics: + for graphic in self.objects: if graphic.name == name: return graphic - for selector in self.selectors: - if selector.name == name: - return selector - - graphic_names = list() - for g in self.graphics: - graphic_names.append(g.name) - - selector_names = list() - for s in self.selectors: - selector_names.append(s.name) - - raise IndexError( - f"No graphic or selector of given name.\n" - f"The current graphics are:\n {graphic_names}\n" - f"The current selectors are:\n {selector_names}" - ) - - def __contains__(self, item: Union[str, Graphic]): - to_check = [*self.graphics, *self.selectors] + raise IndexError(f"No graphic or selector of given name in plot area.\n") + def __contains__(self, item: str | Graphic): if isinstance(item, Graphic): - if item in to_check: + if item in self.objects: return True else: return False elif isinstance(item, str): - for graphic in to_check: + for graphic in self.objects: # only check named graphics if graphic.name is None: continue @@ -643,21 +707,21 @@ def __contains__(self, item: Union[str, Graphic]): return False raise TypeError("PlotArea `in` operator accepts only `Graphic` or `str` types") - + def __str__(self): if self.name is None: name = "unnamed" else: name = self.name - return f"{name}: {self.__class__.__name__} @ {hex(id(self))}" + return f"{name}: {self.__class__.__name__}" def __repr__(self): newline = "\n\t" return ( f"{self}\n" - f" parent: {self.parent}\n" + f" parent: {self.parent.__str__()}\n" f" Graphics:\n" f"\t{newline.join(graphic.__repr__() for graphic in self.graphics)}" f"\n" diff --git a/fastplotlib/layouts/_record_mixin.py b/fastplotlib/layouts/_record_mixin.py deleted file mode 100644 index e3a491915..000000000 --- a/fastplotlib/layouts/_record_mixin.py +++ /dev/null @@ -1,241 +0,0 @@ -from typing import * -from pathlib import Path -from multiprocessing import Queue, Process -from time import time - -try: - import av -except ImportError: - HAS_AV = False -else: - HAS_AV = True - - -class VideoWriterAV(Process): - """Video writer, uses PyAV in an external process to write frames to disk""" - - def __init__( - self, - path: Union[Path, str], - queue: Queue, - fps: int, - width: int, - height: int, - codec: str, - pixel_format: str, - options: dict = None, - ): - super().__init__() - self.queue = queue - - self.container = av.open(path, mode="w") - - self.stream = self.container.add_stream(codec, rate=fps, options=options) - - # in case libx264, trim last rows and/or column - # because libx264 doesn't like non-even number width or height - if width % 2 != 0: - width -= 1 - if height % 2 != 0: - height -= 1 - - self.stream.width = width - self.stream.height = height - - self.stream.pix_fmt = pixel_format - - def run(self): - while True: - if self.queue.empty(): # no frame to write - continue - - frame = self.queue.get() - - # recording has ended - if frame is None: - self.container.close() - break - - frame = av.VideoFrame.from_ndarray( - frame[ - : self.stream.height, : self.stream.width - ], # trim if necessary because of x264 - format="rgb24", - ) - - for packet in self.stream.encode(frame): - self.container.mux(packet) - - # I don't exactly know what this does, copied from pyav example - for packet in self.stream.encode(): - self.container.mux(packet) - - # close file - self.container.close() - - # close process, release resources - self.close() - - -# adds recording functionality to GridPlot and Plot -class RecordMixin: - def __init__(self): - self._video_writer: VideoWriterAV = None - self._video_writer_queue = Queue() - self._record_fps = 25 - self._record_timer = 0 - self._record_start_time = 0 - - def _record(self): - """ - Sends frame to VideoWriter through video writer queue - """ - # current time - t = time() - - # put frame in queue only if enough time as passed according to the desired framerate - # otherwise it tries to record EVERY frame on every rendering cycle, which just blocks the rendering - if t - self._record_timer < (1 / self._record_fps): - return - - # reset timer - self._record_timer = t - - if self._video_writer is not None: - ss = self.canvas.snapshot() - # exclude alpha channel - self._video_writer_queue.put(ss.data[..., :-1]) - - def record_start( - self, - path: Union[str, Path], - fps: int = 25, - codec: str = "mpeg4", - pixel_format: str = "yuv420p", - options: dict = None, - ): - """ - Start a recording, experimental. Call ``record_end()`` to end a recording. - Note: playback duration does not exactly match recording duration. - - Requires PyAV: https://github.com/PyAV-Org/PyAV - - **Do not resize canvas during a recording, the width and height must remain constant!** - - Parameters - ---------- - path: str or Path - path to save the recording - - fps: int, default ``25`` - framerate, do not use > 25 within jupyter - - codec: str, default "mpeg4" - codec to use, see ``ffmpeg`` list: https://www.ffmpeg.org/ffmpeg-codecs.html . - In general, ``"mpeg4"`` should work on most systems. ``"libx264"`` is a - better option if you have it installed. - - pixel_format: str, default "yuv420p" - pixel format - - options: dict, optional - Codec options. For example, if using ``"mpeg4"`` you can use ``{"q:v": "20"}`` to set the quality between - 1-31, where "1" is highest and "31" is lowest. If using ``"libx264"``` you can use ``{"crf": "30"}`` where - the "crf" value is between "0" (highest quality) and "50" (lowest quality). See ``ffmpeg`` docs for more - info on codec options - - Examples - -------- - - With ``"mpeg4"`` - - .. code-block:: python - - # create a plot or gridplot etc - - # start recording video - plot.record_start("./video.mp4", options={"q:v": "20"} - - # do stuff like interacting with the plot, change things, etc. - - # end recording - plot.record_end() - - With ``"libx264"`` - - .. code-block:: python - - # create a plot or gridplot etc - - # start recording video - plot.record_start("./vid_x264.mp4", codec="libx264", options={"crf": "25"}) - - # do stuff like interacting with the plot, change things, etc. - - # end recording - plot.record_end() - - """ - - if not HAS_AV: - raise ModuleNotFoundError( - "Recording to video file requires `av`:\n" - "https://github.com/PyAV-Org/PyAV" - ) - - if Path(path).exists(): - raise FileExistsError(f"File already exists at given path: {path}") - - # queue for sending frames to VideoWriterAV process - self._video_writer_queue = Queue() - - # snapshot to get canvas width height - ss = self.canvas.snapshot() - - # writer process - self._video_writer = VideoWriterAV( - path=str(path), - queue=self._video_writer_queue, - fps=int(fps), - width=ss.width, - height=ss.height, - codec=codec, - pixel_format=pixel_format, - options=options, - ) - - # start writer process - self._video_writer.start() - - # 1.3 seems to work well to reduce that difference between playback time and recording time - # will properly investigate later - self._record_fps = fps * 1.3 - self._record_start_time = time() - - # record timer used to maintain desired framerate - self._record_timer = time() - - self.add_animations(self._record) - - def record_stop(self) -> float: - """ - End a current recording. Returns the real duration of the recording - - Returns - ------- - float - recording duration - """ - - # tell video writer that recording has finished - self._video_writer_queue.put(None) - - # wait for writer to finish - self._video_writer.join(timeout=5) - - self._video_writer = None - - # so self._record() is no longer called on every render cycle - self.remove_animation(self._record) - - return time() - self._record_start_time diff --git a/fastplotlib/layouts/_rect.py b/fastplotlib/layouts/_rect.py new file mode 100644 index 000000000..aa84ee8a2 --- /dev/null +++ b/fastplotlib/layouts/_rect.py @@ -0,0 +1,239 @@ +import numpy as np + + +class RectManager: + """ + Backend management of a rect. Allows converting between rects and extents, also works with fractional inputs. + """ + + def __init__(self, x: float, y: float, w: float, h: float, canvas_rect: tuple): + # initialize rect state arrays + # used to store internal state of the rect in both fractional screen space and absolute screen space + # the purpose of storing the fractional rect is that it remains constant when the canvas resizes + self._rect_frac = np.zeros(4, dtype=np.float64) + self._rect_screen_space = np.zeros(4, dtype=np.float64) + self._canvas_rect = np.asarray(canvas_rect) + + self._set((x, y, w, h)) + + def _set(self, rect): + """ + Using the passed rect which is either absolute screen space or fractional, + set the internal fractional and absolute screen space rects + """ + rect = np.asarray(rect) + for val, name in zip(rect, ["x-position", "y-position", "width", "height"]): + if val < 0: + raise ValueError( + f"Invalid rect value < 0: {rect}\n All values must be non-negative." + ) + + if (rect[2:] <= 1).all(): # fractional bbox + self._set_from_fract(rect) + + elif (rect[2:] > 1).all(): # bbox in already in screen coords coordinates + self._set_from_screen_space(rect) + + else: + raise ValueError(f"Invalid rect: {rect}") + + def _set_from_fract(self, rect): + """set rect from fractional representation""" + _, _, cw, ch = self._canvas_rect + mult = np.array([cw, ch, cw, ch]) + + # check that widths, heights are valid: + if rect[0] + rect[2] > 1: + raise ValueError( + f"invalid fractional rect: {rect}\n x + width > 1: {rect[0]} + {rect[2]} > 1" + ) + if rect[1] + rect[3] > 1: + raise ValueError( + f"invalid fractional rect: {rect}\n y + height > 1: {rect[1]} + {rect[3]} > 1" + ) + + # assign values to the arrays, don't just change the reference + self._rect_frac[:] = rect + self._rect_screen_space[:] = self._rect_frac * mult + + def _set_from_screen_space(self, rect): + """set rect from screen space representation""" + _, _, cw, ch = self._canvas_rect + mult = np.array([cw, ch, cw, ch]) + # for screen coords allow (x, y) = 1 or 0, but w, h must be > 1 + # check that widths, heights are valid + if rect[0] + rect[2] > cw: + raise ValueError( + f"invalid rect: {rect}\n x + width > canvas width: {rect[0]} + {rect[2]} > {cw}" + ) + if rect[1] + rect[3] > ch: + raise ValueError( + f"invalid rect: {rect}\n y + height > canvas height: {rect[1]} + {rect[3]} >{ch}" + ) + + self._rect_frac[:] = rect / mult + self._rect_screen_space[:] = rect + + @property + def x(self) -> np.float64: + """x position""" + return self._rect_screen_space[0] + + @property + def y(self) -> np.float64: + """y position""" + return self._rect_screen_space[1] + + @property + def w(self) -> np.float64: + """width""" + return self._rect_screen_space[2] + + @property + def h(self) -> np.float64: + """height""" + return self._rect_screen_space[3] + + @property + def rect(self) -> np.ndarray: + """rect, (x, y, w, h)""" + return self._rect_screen_space + + @rect.setter + def rect(self, rect: np.ndarray | tuple): + self._set(rect) + + def canvas_resized(self, canvas_rect: tuple): + # called by Frame when canvas is resized + self._canvas_rect[:] = canvas_rect + # set new rect using existing rect_frac since this remains constant regardless of resize + self._set(self._rect_frac) + + @property + def x0(self) -> np.float64: + """x0 position""" + return self.x + + @property + def x1(self) -> np.float64: + """x1 position""" + return self.x + self.w + + @property + def y0(self) -> np.float64: + """y0 position""" + return self.y + + @property + def y1(self) -> np.float64: + """y1 position""" + return self.y + self.h + + @classmethod + def from_extent(cls, extent, canvas_rect): + """create a RectManager from an extent""" + rect = cls.extent_to_rect(extent, canvas_rect) + return cls(*rect, canvas_rect) + + @property + def extent(self) -> np.ndarray: + """extent, (xmin, xmax, ymin, ymax)""" + # not actually stored, computed when needed + return np.asarray([self.x0, self.x1, self.y0, self.y1]) + + @extent.setter + def extent(self, extent): + rect = RectManager.extent_to_rect(extent, canvas_rect=self._canvas_rect) + + self._set(rect) + + @staticmethod + def extent_to_rect(extent, canvas_rect): + """convert an extent to a rect""" + RectManager.validate_extent(extent, canvas_rect) + x0, x1, y0, y1 = extent + + # width and height + w = x1 - x0 + h = y1 - y0 + + return x0, y0, w, h + + @staticmethod + def validate_extent(extent: np.ndarray | tuple, canvas_rect: tuple): + extent = np.asarray(extent) + cx0, cy0, cw, ch = canvas_rect + + # make sure extent is valid + if (extent < 0).any(): + raise ValueError(f"extent must be non-negative, you have passed: {extent}") + + if extent[1] <= 1 or extent[3] <= 1: # if x1 <= 1, or y1 <= 1 + # if fractional rect, convert to full + if not (extent <= 1).all(): # if x1 and y1 <= 1, then all vals must be <= 1 + raise ValueError( + f"if passing a fractional extent, all values must be fractional, you have passed: {extent}" + ) + extent *= np.asarray([cw, cw, ch, ch]) + + x0, x1, y0, y1 = extent + + # width and height + w = x1 - x0 + h = y1 - y0 + + # check if x1 - x0 <= 0 + if w <= 0: + raise ValueError(f"extent x-range must be non-negative: {extent}") + + # check if y1 - y0 <= 0 + if h <= 0: + raise ValueError(f"extent y-range must be non-negative: {extent}") + + # calc canvas extent + cx1 = cx0 + cw + cy1 = cy0 + ch + canvas_extent = np.asarray([cx0, cx1, cy0, cy1]) + + if x0 < cx0 or x1 < cx0 or x0 > cx1 or x1 > cx1: + raise ValueError( + f"extent: {extent} x-range is beyond the bounds of the canvas: {canvas_extent}" + ) + if y0 < cy0 or y1 < cy0 or y0 > cy1 or y1 > cy1: + raise ValueError( + f"extent: {extent} y-range is beyond the bounds of the canvas: {canvas_extent}" + ) + + def is_above(self, y0, dist: int = 1) -> bool: + # our bottom < other top within given distance + return self.y1 < y0 + dist + + def is_below(self, y1, dist: int = 1) -> bool: + # our top > other bottom + return self.y0 > y1 - dist + + def is_left_of(self, x0, dist: int = 1) -> bool: + # our right_edge < other left_edge + # self.x1 < other.x0 + return self.x1 < x0 + dist + + def is_right_of(self, x1, dist: int = 1) -> bool: + # self.x0 > other.x1 + return self.x0 > x1 - dist + + def overlaps(self, extent: np.ndarray) -> bool: + """returns whether this rect overlaps with the given extent""" + x0, x1, y0, y1 = extent + return not any( + [ + self.is_above(y0), + self.is_below(y1), + self.is_left_of(x0), + self.is_right_of(x1), + ] + ) + + def __repr__(self): + s = f"{self._rect_frac}\n{self.rect}" + + return s diff --git a/fastplotlib/layouts/_subplot.py b/fastplotlib/layouts/_subplot.py index c178c0fca..73f669fe5 100644 --- a/fastplotlib/layouts/_subplot.py +++ b/fastplotlib/layouts/_subplot.py @@ -1,68 +1,54 @@ -from typing import * +from typing import Literal, Union import numpy as np -from pygfx import ( - Scene, - OrthographicCamera, - PanZoomController, - OrbitController, - AxesHelper, - GridHelper, - WgpuRenderer, - Texture, -) -from wgpu.gui.auto import WgpuCanvas +import pygfx +from rendercanvas import BaseRenderCanvas from ..graphics import TextGraphic -from ._utils import make_canvas_and_renderer +from ._utils import create_camera, create_controller from ._plot_area import PlotArea -from ._defaults import create_camera, create_controller -from .graphic_methods_mixin import GraphicMethodsMixin +from ._frame import Frame +from ..graphics._axes import Axes -class Subplot(PlotArea, GraphicMethodsMixin): +class Subplot(PlotArea): def __init__( self, - parent: Any = None, - position: Tuple[int, int] = None, - parent_dims: Tuple[int, int] = None, - camera: str = "2d", - controller: Union[PanZoomController, OrbitController] = None, - canvas: Union[str, WgpuCanvas, Texture] = None, - renderer: WgpuRenderer = None, + parent: Union["Figure"], + camera: Literal["2d", "3d"] | pygfx.PerspectiveCamera, + controller: pygfx.Controller | str, + canvas: BaseRenderCanvas | pygfx.Texture, + rect: np.ndarray = None, + extent: np.ndarray = None, + resizeable: bool = True, + renderer: pygfx.WgpuRenderer = None, name: str = None, - **kwargs, ): """ - General plot object that composes a ``Gridplot``. Each ``Gridplot`` instance will have [n rows, n columns] - of subplots. + Subplot class. .. important:: - ``Subplot`` is not meant to be constructed directly, it only exists as part of a ``GridPlot`` + ``Subplot`` is not meant to be constructed directly, it only exists as part of a ``Figure`` Parameters ---------- - position: int tuple, optional - corresponds to the [row, column] position of the subplot within a ``Gridplot`` + parent: 'Figure' | None + parent Figure instance - parent_dims: int tuple, optional - dimensions of the parent ``GridPlot`` + camera: str or pygfx.PerspectiveCamera, default '2d' + indicates the FOV for the camera, '2d' sets ``fov = 0``, '3d' sets ``fov = 50``. + ``fov`` can be changed at any time. - camera: str, default '2d' - indicates the kind of pygfx camera that will be instantiated, '2d' uses pygfx ``OrthographicCamera`` and - '3d' uses pygfx ``PerspectiveCamera`` + controller: str or pygfx.Controller, optional + | if ``None``, uses a PanZoomController for "2d" camera or FlyController for "3d" camera. + | if ``str``, must be one of: `"panzoom", "fly", "trackball", or "orbit"`. + | also accepts a pygfx.Controller instance - controller: PanZoomController or OrbitOrthoController, optional - ``PanZoomController`` type is used for 2D pan-zoom camera control and ``OrbitController`` type is used for - rotating the camera around a center position, used to control the camera + canvas: BaseRenderCanvas, or a pygfx.Texture + Provides surface on which a scene will be rendered. - canvas: WgpuCanvas, Texture, or one of "jupyter", "glfw", "qt", optional - Provides surface on which a scene will be rendered. Can optionally provide a WgpuCanvas instance or a str - to force the PlotArea to use a specific canvas from one of the following options: "jupyter", "glfw", "qt". - Can also provide a pygfx Texture to render to. - - renderer: WgpuRenderer, optional + renderer: WgpuRenderer object used to render scenes using wgpu name: str, optional @@ -70,60 +56,70 @@ def __init__( """ - super(GraphicMethodsMixin, self).__init__() - - canvas, renderer = make_canvas_and_renderer(canvas, renderer) - - if position is None: - position = (0, 0) - - if parent_dims is None: - parent_dims = (1, 1) - - self.nrows, self.ncols = parent_dims + camera = create_camera(camera) - if controller is None: - controller = create_controller(camera) + controller = create_controller(controller_type=controller, camera=camera) self._docks = dict() - self.spacing = 2 - - self._axes: AxesHelper = AxesHelper(size=100) - for arrow in self._axes.children: - self._axes.remove(arrow) - - self._grid: GridHelper = GridHelper(size=100, thickness=1) + if "Imgui" in parent.__class__.__name__: + toolbar_visible = True + else: + toolbar_visible = False - super(Subplot, self).__init__( + super().__init__( parent=parent, - position=position, - camera=create_camera(camera), + camera=camera, controller=controller, - scene=Scene(), + scene=pygfx.Scene(), canvas=canvas, renderer=renderer, name=name, ) for pos in ["left", "top", "right", "bottom"]: - dv = Dock(self, pos, size=0) + dv = Dock(self, size=0) dv.name = pos self.docks[pos] = dv self.children.append(dv) - self._title_graphic: TextGraphic = None - if self.name is not None: - self.set_title(self.name) + self._axes = Axes(self) + self.scene.add(self.axes.world_object) + + self._frame = Frame( + viewport=self.viewport, + rect=rect, + extent=extent, + resizeable=resizeable, + title=name, + docks=self.docks, + toolbar_visible=toolbar_visible, + canvas_rect=parent.get_pygfx_render_area(), + ) + + @property + def axes(self) -> Axes: + """Axes object""" + return self._axes @property - def name(self) -> Any: + def name(self) -> str: + """Subplot name""" return self._name @name.setter - def name(self, name: Any): + def name(self, name: str): + if name is None: + self._name = None + return + + for subplot in self.get_figure(self): + if (subplot is self) or (subplot is None): + continue + if subplot.name == name: + raise ValueError("subplot names must be unique") + self._name = name - self.set_title(name) @property def docks(self) -> dict: @@ -140,90 +136,49 @@ def docks(self) -> dict: """ return self._docks - def set_title(self, text: Any): - """Sets the plot title, stored as a ``TextGraphic`` in the "top" dock area""" - if text is None: - return - - text = str(text) - if self._title_graphic is not None: - self._title_graphic.text = text - else: - tg = TextGraphic(text=text, size=18) - self._title_graphic = tg - - self.docks["top"].size = 35 - self.docks["top"].add_graphic(tg) - - self.center_title() - - def center_title(self): - """Centers name of subplot.""" - if self._title_graphic is None: - raise AttributeError("No title graphic is set") - - self._title_graphic.world_object.position = (0, 0, 0) - self.docks["top"].center_graphic(self._title_graphic, zoom=1.5) - self._title_graphic.world_object.position_y = -3.5 - - def get_rect(self): - """Returns the bounding box that defines the Subplot within the canvas.""" - row_ix, col_ix = self.position - width_canvas, height_canvas = self.renderer.logical_size - - x_pos = ( - (width_canvas / self.ncols) + ((col_ix - 1) * (width_canvas / self.ncols)) - ) + self.spacing - y_pos = ( - (height_canvas / self.nrows) + ((row_ix - 1) * (height_canvas / self.nrows)) - ) + self.spacing - width_subplot = (width_canvas / self.ncols) - self.spacing - height_subplot = (height_canvas / self.nrows) - self.spacing + @property + def toolbar(self) -> bool: + """show/hide toolbar""" + return self.frame.toolbar_visible - rect = np.array([x_pos, y_pos, width_subplot, height_subplot]) + @toolbar.setter + def toolbar(self, visible: bool): + self.frame.toolbar_visible = visible + self.frame.reset_viewport() - for dv in self.docks.values(): - rect = rect + dv.get_parent_rect_adjust() + def _render(self): + self.axes.update_using_camera() + super()._render() - return rect + @property + def title(self) -> TextGraphic: + """subplot title""" + return self._frame.title_graphic - def set_axes_visibility(self, visible: bool): - """Toggles axes visibility.""" - if visible: - self.scene.add(self._axes) - else: - self.scene.remove(self._axes) + @title.setter + def title(self, text: str): + text = str(text) + self.title.text = text - def set_grid_visibility(self, visible: bool): - """Toggles grid visibility.""" - if visible: - self.scene.add(self._grid) - else: - self.scene.remove(self._grid) + @property + def frame(self) -> Frame: + """Frame that the subplot lives in""" + return self._frame class Dock(PlotArea): - _valid_positions = ["right", "left", "top", "bottom"] - def __init__( self, parent: Subplot, - position: str, size: int, ): - if position not in self._valid_positions: - raise ValueError( - f"the `position` of an AnchoredViewport must be one of: {self._valid_positions}" - ) - self._size = size - super(Dock, self).__init__( + super().__init__( parent=parent, - position=position, - camera=OrthographicCamera(), - controller=PanZoomController(), - scene=Scene(), + camera=pygfx.OrthographicCamera(), + controller=pygfx.PanZoomController(), + scene=pygfx.Scene(), canvas=parent.canvas, renderer=parent.renderer, ) @@ -236,121 +191,10 @@ def size(self) -> int: @size.setter def size(self, s: int): self._size = s - self.parent.set_viewport_rect() - self.set_viewport_rect() + self.get_figure()._fpl_reset_layout() - def get_rect(self, *args): - if self.size == 0: - self.viewport.rect = None - return - - row_ix_parent, col_ix_parent = self.parent.position - width_canvas, height_canvas = self.parent.renderer.logical_size - - spacing = 2 # spacing in pixels - - if self.position == "right": - x_pos = ( - (width_canvas / self.parent.ncols) - + ((col_ix_parent - 1) * (width_canvas / self.parent.ncols)) - + (width_canvas / self.parent.ncols) - - self.size - ) - y_pos = ( - (height_canvas / self.parent.nrows) - + ((row_ix_parent - 1) * (height_canvas / self.parent.nrows)) - ) + spacing - width_viewport = self.size - height_viewport = (height_canvas / self.parent.nrows) - spacing - - elif self.position == "left": - x_pos = (width_canvas / self.parent.ncols) + ( - (col_ix_parent - 1) * (width_canvas / self.parent.ncols) - ) - y_pos = ( - (height_canvas / self.parent.nrows) - + ((row_ix_parent - 1) * (height_canvas / self.parent.nrows)) - ) + spacing - width_viewport = self.size - height_viewport = (height_canvas / self.parent.nrows) - spacing - - elif self.position == "top": - x_pos = ( - (width_canvas / self.parent.ncols) - + ((col_ix_parent - 1) * (width_canvas / self.parent.ncols)) - + spacing - ) - y_pos = ( - (height_canvas / self.parent.nrows) - + ((row_ix_parent - 1) * (height_canvas / self.parent.nrows)) - ) + spacing - width_viewport = (width_canvas / self.parent.ncols) - spacing - height_viewport = self.size - - elif self.position == "bottom": - x_pos = ( - (width_canvas / self.parent.ncols) - + ((col_ix_parent - 1) * (width_canvas / self.parent.ncols)) - + spacing - ) - y_pos = ( - ( - (height_canvas / self.parent.nrows) - + ((row_ix_parent - 1) * (height_canvas / self.parent.nrows)) - ) - + (height_canvas / self.parent.nrows) - - self.size - ) - width_viewport = (width_canvas / self.parent.ncols) - spacing - height_viewport = self.size - else: - raise ValueError("invalid position") - - return [x_pos, y_pos, width_viewport, height_viewport] - - def get_parent_rect_adjust(self): - if self.position == "right": - return np.array( - [ - 0, # parent subplot x-position is same - 0, - -self.size, # width of parent subplot is `self.size` smaller - 0, - ] - ) - - elif self.position == "left": - return np.array( - [ - self.size, # `self.size` added to parent subplot x-position - 0, - -self.size, # width of parent subplot is `self.size` smaller - 0, - ] - ) - - elif self.position == "top": - return np.array( - [ - 0, - self.size, # `self.size` added to parent subplot y-position - 0, - -self.size, # height of parent subplot is `self.size` smaller - ] - ) - - elif self.position == "bottom": - return np.array( - [ - 0, - 0, # parent subplot y-position is same, - 0, - -self.size, # height of parent subplot is `self.size` smaller - ] - ) - - def render(self): + def _render(self): if self.size == 0: return - super(Dock, self).render() + super()._render() diff --git a/fastplotlib/layouts/_utils.py b/fastplotlib/layouts/_utils.py index dd6fbeb50..98a6268f1 100644 --- a/fastplotlib/layouts/_utils.py +++ b/fastplotlib/layouts/_utils.py @@ -1,63 +1,29 @@ -from typing import * +import importlib +from itertools import product -from pygfx import WgpuRenderer, Texture +import numpy as np -# default auto-determined canvas -from wgpu.gui.auto import WgpuCanvas -from wgpu.gui.base import WgpuCanvasBase +import pygfx +from pygfx import WgpuRenderer, Texture, Renderer +from ..utils.gui import BaseRenderCanvas, RenderCanvas -# TODO: this determination can be better try: - from wgpu.gui.jupyter import JupyterWgpuCanvas + import imgui_bundle except ImportError: - JupyterWgpuCanvas = False + IMGUI = False +else: + IMGUI = True -try: - import PyQt6 - from wgpu.gui.qt import QWgpuCanvas -except ImportError: - QWgpuCanvas = False - -try: - from wgpu.gui.glfw import GlfwWgpuCanvas -except ImportError: - GlfwWgpuCanvas = False - - -CANVAS_OPTIONS = ["jupyter", "glfw", "qt"] -CANVAS_OPTIONS_AVAILABLE = { - "jupyter": JupyterWgpuCanvas, - "glfw": GlfwWgpuCanvas, - "qt": QWgpuCanvas, -} - - -def auto_determine_canvas(): - try: - ip = get_ipython() - if ip.has_trait("kernel"): - if hasattr(ip.kernel, "app"): - if ip.kernel.app.__class__.__name__ == "QApplication": - return QWgpuCanvas - else: - return JupyterWgpuCanvas - except NameError: - pass - else: - if CANVAS_OPTIONS_AVAILABLE["qt"]: - return QWgpuCanvas - elif CANVAS_OPTIONS_AVAILABLE["glfw"]: - return GlfwWgpuCanvas - - # We go with the wgpu auto guess - # for example, offscreen canvas etc. - return WgpuCanvas +# number of pixels taken by the imgui toolbar when present +IMGUI_TOOLBAR_HEIGHT = 39 def make_canvas_and_renderer( - canvas: Union[str, WgpuCanvas, Texture, None], renderer: [WgpuRenderer, None] + canvas: str | BaseRenderCanvas | Texture | None, + renderer: Renderer | None, + canvas_kwargs: dict, ): """ Parses arguments and returns the appropriate canvas and renderer instances @@ -65,26 +31,95 @@ def make_canvas_and_renderer( """ if canvas is None: - Canvas = auto_determine_canvas() - canvas = Canvas() - + canvas = RenderCanvas(**canvas_kwargs) elif isinstance(canvas, str): - if canvas not in CANVAS_OPTIONS: - raise ValueError(f"str canvas argument must be one of: {CANVAS_OPTIONS}") - elif not CANVAS_OPTIONS_AVAILABLE[canvas]: - raise ImportError( - f"The {canvas} framework is not installed for using this canvas" - ) - else: - canvas = CANVAS_OPTIONS_AVAILABLE[canvas]() - - elif not isinstance(canvas, (WgpuCanvasBase, Texture)): - raise ValueError( - f"canvas option must either be a valid WgpuCanvas implementation, a pygfx Texture" - f" or a str from the following options: {CANVAS_OPTIONS}" + import rendercanvas + + m = importlib.import_module("rendercanvas." + canvas) + canvas = m.RenderCanvas(**canvas_kwargs) + elif not isinstance(canvas, (BaseRenderCanvas, Texture)): + raise TypeError( + f"canvas option must either be a valid BaseRenderCanvas implementation, a pygfx Texture" + f" or a str with the gui backend name, valid str are: 'qt', 'glfw', 'jupyter', 'wx', and 'offscreen'" ) if renderer is None: renderer = WgpuRenderer(canvas) + elif not isinstance(renderer, Renderer): + raise TypeError( + f"renderer option must be a pygfx.Renderer instance such as pygfx.WgpuRenderer" + ) return canvas, renderer + + +def create_camera( + camera_type: pygfx.PerspectiveCamera | str, +) -> pygfx.PerspectiveCamera: + if isinstance(camera_type, pygfx.PerspectiveCamera): + return camera_type + + elif camera_type == "2d": + # use perspective for orthographic, makes it easier to then switch to controllers that make sense with fov > 0 + return pygfx.PerspectiveCamera(fov=0) + + elif camera_type == "3d": + return pygfx.PerspectiveCamera() + + else: + raise ValueError( + "camera must be one of: '2d', '3d' or an instance of pygfx.PerspectiveCamera" + ) + + +controller_types = { + "fly": pygfx.FlyController, + "panzoom": pygfx.PanZoomController, + "trackball": pygfx.TrackballController, + "orbit": pygfx.OrbitController, +} + + +def create_controller( + controller_type: pygfx.Controller | None | str, + camera: pygfx.PerspectiveCamera, +) -> pygfx.Controller: + """ + Creates the controllers and adds the camera to it. + """ + if isinstance(controller_type, pygfx.Controller): + controller_type.add_camera(camera) + return controller_type + + if controller_type is None: + # default controllers + if camera.fov == 0: + # default for orthographic + return pygfx.PanZoomController(camera) + else: + return pygfx.FlyController(camera) + + if controller_type not in controller_types.keys(): + raise KeyError( + f"controller must be a valid pygfx.Controller or one of: " + f"{list(controller_types.keys())}, you have passed: {controller_type}" + ) + + return controller_types[controller_type](camera) + + +def get_extents_from_grid( + shape: tuple[int, int], +) -> list[tuple[float, float, float, float]]: + """create fractional extents from a given grid shape""" + x_min = np.arange(0, 1, (1 / shape[1])) + x_max = x_min + 1 / shape[1] + y_min = np.arange(0, 1, (1 / shape[0])) + y_max = y_min + 1 / shape[0] + + extents = list() + for row_ix, col_ix in product(range(shape[0]), range(shape[1])): + extent = x_min[col_ix], x_max[col_ix], y_min[row_ix], y_max[row_ix] + extents.append(extent) + + return extents diff --git a/fastplotlib/layouts/graphic_methods_mixin.py b/fastplotlib/layouts/graphic_methods_mixin.py deleted file mode 100644 index b00187df7..000000000 --- a/fastplotlib/layouts/graphic_methods_mixin.py +++ /dev/null @@ -1,411 +0,0 @@ -# This is an auto-generated file and should not be modified directly - -from typing import * - -import numpy -import weakref - -from ..graphics import * -from ..graphics._base import Graphic - - -class GraphicMethodsMixin: - def __init__(self): - pass - - def _create_graphic(self, graphic_class, *args, **kwargs) -> Graphic: - if 'center' in kwargs.keys(): - center = kwargs.pop('center') - else: - center = False - - if 'name' in kwargs.keys(): - self._check_graphic_name_exists(kwargs['name']) - - graphic = graphic_class(*args, **kwargs) - self.add_graphic(graphic, center=center) - - # only return a proxy to the real graphic - return weakref.proxy(graphic) - - def add_heatmap(self, data: Any, vmin: int = None, vmax: int = None, cmap: str = 'plasma', filter: str = 'nearest', chunk_size: int = 8192, isolated_buffer: bool = True, *args, **kwargs) -> HeatmapGraphic: - """ - - Create an Image Graphic - - Parameters - ---------- - data: array-like - array-like, usually numpy.ndarray, must support ``memoryview()`` - Tensorflow Tensors also work **probably**, but not thoroughly tested - | shape must be ``[x_dim, y_dim]`` - - vmin: int, optional - minimum value for color scaling, calculated from data if not provided - - vmax: int, optional - maximum value for color scaling, calculated from data if not provided - - cmap: str, optional, default "plasma" - colormap to use to display the data - - filter: str, optional, default "nearest" - interpolation filter, one of "nearest" or "linear" - - chunk_size: int, default 8192, max 8192 - chunk size for each tile used to make up the heatmap texture - - isolated_buffer: bool, default True - If True, initialize a buffer with the same shape as the input data and then - set the data, useful if the data arrays are ready-only such as memmaps. - If False, the input array is itself used as the buffer. - - args: - additional arguments passed to Graphic - - kwargs: - additional keyword arguments passed to Graphic - - Features - -------- - - **data**: :class:`.HeatmapDataFeature` - Manages the data buffer displayed in the HeatmapGraphic - - **cmap**: :class:`.HeatmapCmapFeature` - Manages the colormap - - **present**: :class:`.PresentFeature` - Control the presence of the Graphic in the scene - - - """ - return self._create_graphic(HeatmapGraphic, data, vmin, vmax, cmap, filter, chunk_size, isolated_buffer, *args, **kwargs) - - def add_image(self, data: Any, vmin: int = None, vmax: int = None, cmap: str = 'plasma', filter: str = 'nearest', isolated_buffer: bool = True, *args, **kwargs) -> ImageGraphic: - """ - - Create an Image Graphic - - Parameters - ---------- - data: array-like - array-like, usually numpy.ndarray, must support ``memoryview()`` - Tensorflow Tensors also work **probably**, but not thoroughly tested - | shape must be ``[x_dim, y_dim]`` or ``[x_dim, y_dim, rgb]`` - - vmin: int, optional - minimum value for color scaling, calculated from data if not provided - - vmax: int, optional - maximum value for color scaling, calculated from data if not provided - - cmap: str, optional, default "plasma" - colormap to use to display the image data, ignored if data is RGB - - filter: str, optional, default "nearest" - interpolation filter, one of "nearest" or "linear" - - isolated_buffer: bool, default True - If True, initialize a buffer with the same shape as the input data and then - set the data, useful if the data arrays are ready-only such as memmaps. - If False, the input array is itself used as the buffer. - - args: - additional arguments passed to Graphic - - kwargs: - additional keyword arguments passed to Graphic - - Features - -------- - - **data**: :class:`.ImageDataFeature` - Manages the data buffer displayed in the ImageGraphic - - **cmap**: :class:`.ImageCmapFeature` - Manages the colormap - - **present**: :class:`.PresentFeature` - Control the presence of the Graphic in the scene - - - """ - return self._create_graphic(ImageGraphic, data, vmin, vmax, cmap, filter, isolated_buffer, *args, **kwargs) - - def add_line_collection(self, data: List[numpy.ndarray], z_position: Union[List[float], float] = None, thickness: Union[float, List[float]] = 2.0, colors: Union[List[numpy.ndarray], numpy.ndarray] = 'w', alpha: float = 1.0, cmap: Union[List[str], str] = None, cmap_values: Union[numpy.ndarray, List] = None, name: str = None, metadata: Union[list, tuple, numpy.ndarray] = None, *args, **kwargs) -> LineCollection: - """ - - Create a collection of :class:`.LineGraphic` - - Parameters - ---------- - - data: list of array-like or array - List of line data to plot, each element must be a 1D, 2D, or 3D numpy array - if elements are 2D, interpreted as [y_vals, n_lines] - - z_position: list of float or float, optional - | if ``float``, single position will be used for all lines - | if ``list`` of ``float``, each value will apply to the individual lines - - thickness: float or list of float, default 2.0 - | if ``float``, single thickness will be used for all lines - | if ``list`` of ``float``, each value will apply to the individual lines - - colors: str, RGBA array, list of RGBA array, or list of str, default "w" - | if single ``str`` such as "w", "r", "b", etc, represents a single color for all lines - | if single ``RGBA array`` (tuple or list of size 4), represents a single color for all lines - | if ``list`` of ``str``, represents color for each individual line, example ["w", "b", "r",...] - | if ``RGBA array`` of shape [data_size, 4], represents a single RGBA array for each line - - cmap: list of str or str, optional - | if ``str``, single cmap will be used for all lines - | if ``list`` of ``str``, each cmap will apply to the individual lines - - .. note:: - ``cmap`` overrides any arguments passed to ``colors`` - - cmap_values: 1D array-like or list of numerical values, optional - if provided, these values are used to map the colors from the cmap - - name: str, optional - name of the line collection - - metadata: list, tuple, or array - metadata associated with this collection, this is for the user to manage. - ``len(metadata)`` must be same as ``len(data)`` - - args - passed to GraphicCollection - - kwargs - passed to GraphicCollection - - Features - -------- - - Collections support the same features as the underlying graphic. You just have to slice the selection. - - See :class:`LineGraphic` details on the features. - - - """ - return self._create_graphic(LineCollection, data, z_position, thickness, colors, alpha, cmap, cmap_values, name, metadata, *args, **kwargs) - - def add_line(self, data: Any, thickness: float = 2.0, colors: Union[str, numpy.ndarray, Iterable] = 'w', alpha: float = 1.0, cmap: str = None, cmap_values: Union[numpy.ndarray, List] = None, z_position: float = None, collection_index: int = None, *args, **kwargs) -> LineGraphic: - """ - - Create a line Graphic, 2d or 3d - - Parameters - ---------- - data: array-like - Line data to plot, 2D must be of shape [n_points, 2], 3D must be of shape [n_points, 3] - - thickness: float, optional, default 2.0 - thickness of the line - - colors: str, array, or iterable, default "w" - specify colors as a single human-readable string, a single RGBA array, - or an iterable of strings or RGBA arrays - - cmap: str, optional - apply a colormap to the line instead of assigning colors manually, this - overrides any argument passed to "colors" - - cmap_values: 1D array-like or list of numerical values, optional - if provided, these values are used to map the colors from the cmap - - alpha: float, optional, default 1.0 - alpha value for the colors - - z_position: float, optional - z-axis position for placing the graphic - - args - passed to Graphic - - kwargs - passed to Graphic - - Features - -------- - - **data**: :class:`.ImageDataFeature` - Manages the line [x, y, z] positions data buffer, allows regular and fancy indexing. - - **colors**: :class:`.ColorFeature` - Manages the color buffer, allows regular and fancy indexing. - - **cmap**: :class:`.CmapFeature` - Manages the cmap, wraps :class:`.ColorFeature` to add additional functionality relevant to cmaps. - - **thickness**: :class:`.ThicknessFeature` - Manages the thickness feature of the lines. - - **present**: :class:`.PresentFeature` - Control the presence of the Graphic in the scene, set to ``True`` or ``False`` - - - """ - return self._create_graphic(LineGraphic, data, thickness, colors, alpha, cmap, cmap_values, z_position, collection_index, *args, **kwargs) - - def add_line_stack(self, data: List[numpy.ndarray], z_position: Union[List[float], float] = None, thickness: Union[float, List[float]] = 2.0, colors: Union[List[numpy.ndarray], numpy.ndarray] = 'w', cmap: Union[List[str], str] = None, separation: float = 10, separation_axis: str = 'y', name: str = None, *args, **kwargs) -> LineStack: - """ - - Create a stack of :class:`.LineGraphic` that are separated along the "x" or "y" axis. - - Parameters - ---------- - data: list of array-like - List of line data to plot, each element must be a 1D, 2D, or 3D numpy array - if elements are 2D, interpreted as [y_vals, n_lines] - - z_position: list of float or float, optional - | if ``float``, single position will be used for all lines - | if ``list`` of ``float``, each value will apply to individual lines - - thickness: float or list of float, default 2.0 - | if ``float``, single thickness will be used for all lines - | if ``list`` of ``float``, each value will apply to the individual lines - - colors: str, RGBA array, list of RGBA array, or list of str, default "w" - | if single ``str`` such as "w", "r", "b", etc, represents a single color for all lines - | if single ``RGBA array`` (tuple or list of size 4), represents a single color for all lines - | is ``list`` of ``str``, represents color for each individual line, example ["w", "b", "r",...] - | if ``list`` of ``RGBA array`` of shape [data_size, 4], represents a single RGBA array for each line - - cmap: list of str or str, optional - | if ``str``, single cmap will be used for all lines - | if ``list`` of ``str``, each cmap will apply to the individual lines - - .. note:: - ``cmap`` overrides any arguments passed to ``colors`` - - name: str, optional - name of the line stack - - separation: float, default 10 - space in between each line graphic in the stack - - separation_axis: str, default "y" - axis in which the line graphics in the stack should be separated - - name: str, optional - name of the line stack - - args - passed to LineCollection - - kwargs - passed to LineCollection - - - Features - -------- - - Collections support the same features as the underlying graphic. You just have to slice the selection. - - See :class:`LineGraphic` details on the features. - - - """ - return self._create_graphic(LineStack, data, z_position, thickness, colors, cmap, separation, separation_axis, name, *args, **kwargs) - - def add_scatter(self, data: numpy.ndarray, sizes: Union[int, float, numpy.ndarray, list] = 1, colors: numpy.ndarray = 'w', alpha: float = 1.0, cmap: str = None, cmap_values: Union[numpy.ndarray, List] = None, z_position: float = 0.0, *args, **kwargs) -> ScatterGraphic: - """ - - Create a Scatter Graphic, 2d or 3d - - Parameters - ---------- - data: array-like - Scatter data to plot, 2D must be of shape [n_points, 2], 3D must be of shape [n_points, 3] - - sizes: float or iterable of float, optional, default 1.0 - size of the scatter points - - colors: str, array, or iterable, default "w" - specify colors as a single human readable string, a single RGBA array, - or an iterable of strings or RGBA arrays - - cmap: str, optional - apply a colormap to the scatter instead of assigning colors manually, this - overrides any argument passed to "colors" - - cmap_values: 1D array-like or list of numerical values, optional - if provided, these values are used to map the colors from the cmap - - alpha: float, optional, default 1.0 - alpha value for the colors - - z_position: float, optional - z-axis position for placing the graphic - - args - passed to Graphic - - kwargs - passed to Graphic - - Features - -------- - - **data**: :class:`.ImageDataFeature` - Manages the line [x, y, z] positions data buffer, allows regular and fancy indexing. - - **colors**: :class:`.ColorFeature` - Manages the color buffer, allows regular and fancy indexing. - - **cmap**: :class:`.CmapFeature` - Manages the cmap, wraps :class:`.ColorFeature` to add additional functionality relevant to cmaps. - - **present**: :class:`.PresentFeature` - Control the presence of the Graphic in the scene, set to ``True`` or ``False`` - - - """ - return self._create_graphic(ScatterGraphic, data, sizes, colors, alpha, cmap, cmap_values, z_position, *args, **kwargs) - - def add_text(self, text: str, position: Tuple[int] = (0, 0, 0), size: int = 14, face_color: Union[str, numpy.ndarray] = 'w', outline_color: Union[str, numpy.ndarray] = 'w', outline_thickness=0, screen_space: bool = True, anchor: str = 'middle-center', *args, **kwargs) -> TextGraphic: - """ - - Create a text Graphic - - Parameters - ---------- - text: str - display text - - position: int tuple, default (0, 0, 0) - int tuple indicating location of text in scene - - size: int, default 10 - text size - - face_color: str or array, default "w" - str or RGBA array to set the color of the text - - outline_color: str or array, default "w" - str or RGBA array to set the outline color of the text - - outline_thickness: int, default 0 - text outline thickness - - screen_space: bool = True - whether the text is rendered in screen space, in contrast to world space - - name: str, optional - name of graphic, passed to Graphic - - anchor: str, default "middle-center" - position of the origin of the text - a string representing the vertical and horizontal anchors, separated by a dash - - * Vertical values: "top", "middle", "baseline", "bottom" - * Horizontal values: "left", "center", "right" - - """ - return self._create_graphic(TextGraphic, text, position, size, face_color, outline_color, outline_thickness, screen_space, anchor, *args, **kwargs) - diff --git a/fastplotlib/legends/__init__.py b/fastplotlib/legends/__init__.py new file mode 100644 index 000000000..507251f59 --- /dev/null +++ b/fastplotlib/legends/__init__.py @@ -0,0 +1,3 @@ +from .legend import Legend + +__all__ = ["Legend"] diff --git a/fastplotlib/legends/legend.py b/fastplotlib/legends/legend.py new file mode 100644 index 000000000..69a556109 --- /dev/null +++ b/fastplotlib/legends/legend.py @@ -0,0 +1,356 @@ +from functools import partial +from collections import OrderedDict +from typing import Iterable + +import numpy as np +import pygfx + +from ..graphics import Graphic +from ..graphics.features import GraphicFeatureEvent +from ..graphics import LineGraphic, ScatterGraphic, ImageGraphic +from ..utils import mesh_masks + + +class LegendItem: + def __init__( + self, + label: str, + color: pygfx.Color, + ): + """ + + Parameters + ---------- + label: str + + color: pygfx.Color + """ + self._label = label + self._color = color + + +class LineLegendItem(LegendItem): + def __init__( + self, parent, graphic: LineGraphic, label: str, position: tuple[int, int] + ): + """ + + Parameters + ---------- + graphic: LineGraphic + + label: str + + position: [x, y] + """ + + if label is not None: + pass + + elif graphic.name is not None: + pass + + else: + raise ValueError( + "Must specify `label` or Graphic must have a `name` to auto-use as the label" + ) + + # for now only support lines with a single color + if np.unique(graphic.colors.value, axis=0).shape[0] > 1: + raise ValueError("Use colorbars for multi-colored lines, not legends") + + color = pygfx.Color(np.unique(graphic.colors.value, axis=0).ravel()) + + self._parent = parent + + super().__init__(label, color) + + graphic.colors.add_event_handler(self._update_color) + + # construct Line WorldObject + data = np.array([[0, 0, 0], [3, 0, 0]], dtype=np.float32) + + material = pygfx.LineMaterial + + self._line_world_object = pygfx.Line( + geometry=pygfx.Geometry(positions=data), + material=material(thickness=8, color=self._color), + ) + + # self._line_world_object.world.x = position[0] + + self._label_world_object = pygfx.Text( + geometry=pygfx.TextGeometry( + text=str(label), + font_size=6, + screen_space=False, + anchor="middle-left", + ), + material=pygfx.TextMaterial( + color="w", + outline_color="w", + outline_thickness=0, + ), + ) + + self.world_object = pygfx.Group() + self.world_object.add(self._line_world_object, self._label_world_object) + + self.world_object.world.x = position[0] + # add 10 to x to account for space for the line + self._label_world_object.world.x = position[0] + 10 + + self.world_object.world.y = position[1] + self.world_object.world.z = 2 + + self.world_object.add_event_handler( + partial(self._highlight_graphic, graphic), "click" + ) + + @property + def label(self) -> str: + return self._label + + @label.setter + def label(self, text: str): + self._parent._check_label_unique(text) + self._label_world_object.geometry.set_text(text) + + def _update_color(self, ev: GraphicFeatureEvent): + new_color = ev.info["value"] + if np.unique(new_color, axis=0).shape[0] > 1: + raise ValueError( + "LegendError: LineGraphic colors no longer appropriate for legend" + ) + + self._color = new_color[0] + self._line_world_object.material.color = pygfx.Color(self._color) + + def _highlight_graphic(self, graphic: Graphic, ev): + graphic_color = pygfx.Color(np.unique(graphic.colors.value, axis=0).ravel()) + + if graphic_color == self._parent.highlight_color: + graphic.colors = self._color + else: + # hacky but fine for now + orig_color = pygfx.Color(self._color) + graphic.colors = self._parent.highlight_color + self._color = orig_color + + +class Legend(Graphic): + def __init__( + self, + plot_area, + highlight_color: str | tuple | np.ndarray = "w", + max_rows: int = 5, + *args, + **kwargs, + ): + """ + + Parameters + ---------- + plot_area: Union[Plot, Subplot, Dock] + plot area to put the legend in + + highlight_color: Union[str, tuple, np.ndarray], default "w" + highlight color + + max_rows: int, default 5 + maximum number of rows allowed in the legend + + """ + self._graphics: list[Graphic] = list() + + # hex id of Graphic, i.e. graphic._fpl_address are the keys + self._items: OrderedDict[str:LegendItem] = OrderedDict() + + super().__init__(*args, **kwargs) + + group = pygfx.Group() + self._legend_items_group = pygfx.Group() + self._set_world_object(group) + + self._mesh = pygfx.Mesh( + pygfx.box_geometry(50, 10, 1), + pygfx.MeshBasicMaterial( + color=pygfx.Color([0.1, 0.1, 0.1, 1]), wireframe_thickness=10 + ), + ) + + self.world_object.add(self._mesh) + self.world_object.add(self._legend_items_group) + + self.highlight_color = pygfx.Color(highlight_color) + + self._plot_area = plot_area + self._plot_area.add_graphic(self) + + if self._plot_area.__class__.__name__ == "Dock": + if self._plot_area.size < 1: + self._plot_area.size = 100 + + # TODO: refactor with "moveable graphic" base class once that's done + self._mesh.add_event_handler(self._pointer_down, "pointer_down") + self._plot_area.renderer.add_event_handler(self._pointer_move, "pointer_move") + self._plot_area.renderer.add_event_handler(self._pointer_up, "pointer_up") + + self._last_position = None + self._initial_controller_state = self._plot_area.controller.enabled + + self._max_rows = max_rows + + self._row_counter = 0 + self._col_counter = 0 + + def graphics(self) -> tuple[Graphic, ...]: + return tuple(self._graphics) + + def _check_label_unique(self, label): + for legend_item in self._items.values(): + if legend_item.label == label: + raise ValueError( + f"You have passed the label '{label}' which is already used for another legend item. " + f"All labels within a legend must be unique." + ) + + def add_graphic(self, graphic: Graphic, label: str = None): + if graphic in self._graphics: + raise KeyError( + f"Graphic already exists in legend with label: '{self._items[graphic._fpl_address].label}'" + ) + + self._check_label_unique(label) + + new_col_ix = self._col_counter + new_row_ix = self._row_counter + + x_pos = 0 + y_pos = 0 + + if self._row_counter == self._max_rows: + # set counters + new_col_ix = self._col_counter + 1 + + # get x position offset for this new column of LegendItems + # start by getting the LegendItems in the previous column + prev_column_items: list[LegendItem] = list(self._items.values())[ + -self._max_rows : + ] + # x position of LegendItems in previous column + x_pos = prev_column_items[-1].world_object.world.x + max_width = 0 + # get width of widest LegendItem in previous column to add to x_pos offset for this column + for item in prev_column_items: + bbox = item.world_object.get_world_bounding_box() + width, height, depth = np.ptp(bbox, axis=0) + max_width = max(max_width, width) + + # x position offset for this new column + x_pos = x_pos + max_width + 15 # add 15 for spacing + + # rest row index for next iteration + new_row_ix = 1 + else: + if len(self._items) > 0: + x_pos = list(self._items.values())[-1].world_object.world.x + + y_pos = new_row_ix * -10 + new_row_ix = self._row_counter + 1 + + if isinstance(graphic, LineGraphic): + legend_item = LineLegendItem(self, graphic, label, position=(x_pos, y_pos)) + else: + raise ValueError("Legend only supported for LineGraphic for now.") + + self._legend_items_group.add(legend_item.world_object) + self._reset_mesh_dims() + + self._graphics.append(graphic) + self._items[graphic._fpl_address] = legend_item + + graphic.add_event_handler(partial(self.remove_graphic, graphic), "deleted") + + self._col_counter = new_col_ix + self._row_counter = new_row_ix + + def _reset_mesh_dims(self): + bbox = self._legend_items_group.get_world_bounding_box() + + width, height, _ = np.ptp(bbox, axis=0) + + self._mesh.geometry.positions.data[mesh_masks.x_right] = width + 7 + self._mesh.geometry.positions.data[mesh_masks.x_left] = -5 + self._mesh.geometry.positions.data[mesh_masks.y_bottom] = 0 + self._mesh.geometry.positions.data[mesh_masks.y_bottom] = -height - 3 + self._mesh.geometry.positions.update_range() + + def remove_graphic(self, graphic: Graphic): + self._graphics.remove(graphic) + legend_item = self._items.pop(graphic._fpl_address) + self._legend_items_group.remove(legend_item.world_object) + self._reset_item_positions() + + def _reset_item_positions(self): + for i, (graphic_loc, legend_item) in enumerate(self._items.items()): + y_pos = i * -10 + legend_item.world_object.world.y = y_pos + + self._reset_mesh_dims() + + def reorder(self, labels: Iterable[str]): + all_labels = [legend_item.label for legend_item in self._items.values()] + + if not set(labels) == set(all_labels): + raise ValueError("Must pass all existing legend labels") + + new_items = OrderedDict() + + for label in labels: + for graphic_loc, legend_item in self._items.items(): + if label == legend_item.label: + new_items[graphic_loc] = self._items.pop(graphic_loc) + break + + self._items = new_items + self._reset_item_positions() + + def _pointer_down(self, ev): + self._last_position = self._plot_area.map_screen_to_world(ev) + self._initial_controller_state = self._plot_area.controller.enabled + + def _pointer_move(self, ev): + if self._last_position is None: + return + + self._plot_area.controller.enabled = False + + world_pos = self._plot_area.map_screen_to_world(ev) + + # outside viewport + if world_pos is None: + return + + delta = world_pos - self._last_position + + self.world_object.world.x = self.world_object.world.x + delta[0] + self.world_object.world.y = self.world_object.world.y + delta[1] + + self._last_position = world_pos + + self._plot_area.controller.enabled = self._initial_controller_state + + def _pointer_up(self, ev): + self._last_position = None + if self._initial_controller_state is not None: + self._plot_area.controller.enabled = self._initial_controller_state + + def __getitem__(self, graphic: Graphic) -> LegendItem: + if not isinstance(graphic, Graphic): + raise TypeError("Must index Legend with Graphics") + + if graphic._fpl_address not in self._items.keys(): + raise KeyError("Graphic not in legend") + + return self._items[graphic._fpl_address] diff --git a/fastplotlib/tools/__init__.py b/fastplotlib/tools/__init__.py new file mode 100644 index 000000000..df129a369 --- /dev/null +++ b/fastplotlib/tools/__init__.py @@ -0,0 +1,7 @@ +from ._histogram_lut import HistogramLUTTool +from ._tooltip import Tooltip + +__all__ = [ + "HistogramLUTTool", + "Tooltip", +] diff --git a/fastplotlib/tools/_histogram_lut.py b/fastplotlib/tools/_histogram_lut.py new file mode 100644 index 000000000..aeb8dd996 --- /dev/null +++ b/fastplotlib/tools/_histogram_lut.py @@ -0,0 +1,394 @@ +from math import ceil +import weakref + +import numpy as np + +import pygfx + +from ..utils import subsample_array +from ..graphics import LineGraphic, ImageGraphic, TextGraphic +from ..graphics.utils import pause_events +from ..graphics._base import Graphic +from ..graphics.selectors import LinearRegionSelector + + +def _get_image_graphic_events(image_graphic: ImageGraphic) -> list[str]: + """Small helper function to return the relevant events for an ImageGraphic""" + events = ["vmin", "vmax"] + + if not image_graphic.data.value.ndim > 2: + events.append("cmap") + + # if RGB(A), do not add cmap + + return events + + +# TODO: This is a widget, we can think about a BaseWidget class later if necessary +class HistogramLUTTool(Graphic): + def __init__( + self, + data: np.ndarray, + image_graphic: ImageGraphic, + nbins: int = 100, + flank_divisor: float = 5.0, + **kwargs, + ): + """ + + Parameters + ---------- + data + image_graphic + nbins: int, defaut 100. + Total number of bins used in the histogram + flank_divisor: float, default 5.0. + Fraction of empty histogram bins on the tails of the distribution set `np.inf` for no flanks + kwargs + """ + super().__init__(**kwargs) + + self._nbins = nbins + self._flank_divisor = flank_divisor + self._image_graphic = image_graphic + + self._data = weakref.proxy(data) + + self._scale_factor: float = 1.0 + + hist, edges, hist_scaled, edges_flanked = self._calculate_histogram(data) + + line_data = np.column_stack([hist_scaled, edges_flanked]) + + self._histogram_line = LineGraphic(line_data) + + bounds = (edges[0] * self._scale_factor, edges[-1] * self._scale_factor) + limits = (edges_flanked[0], edges_flanked[-1]) + size = 120 # since it's scaled to 100 + origin = (hist_scaled.max() / 2, 0) + + self._linear_region_selector = LinearRegionSelector( + selection=bounds, + limits=limits, + size=size, + center=origin[0], + axis="y", + edge_thickness=8, + parent=self._histogram_line, + ) + + # there will be a small difference with the histogram edges so this makes them both line up exactly + self._linear_region_selector.selection = ( + self._image_graphic.vmin * self._scale_factor, + self._image_graphic.vmax * self._scale_factor, + ) + + self._vmin = self.image_graphic.vmin + self._vmax = self.image_graphic.vmax + + vmin_str, vmax_str = self._get_vmin_vmax_str() + + self._text_vmin = TextGraphic( + text=vmin_str, + font_size=16, + offset=(0, 0, 0), + anchor="top-left", + outline_color="black", + outline_thickness=1, + ) + + self._text_vmin.world_object.material.pick_write = False + + self._text_vmax = TextGraphic( + text=vmax_str, + font_size=16, + offset=(0, 0, 0), + anchor="bottom-left", + outline_color="black", + outline_thickness=1, + ) + + self._text_vmax.world_object.material.pick_write = False + + widget_wo = pygfx.Group() + widget_wo.add( + self._histogram_line.world_object, + self._linear_region_selector.world_object, + self._text_vmin.world_object, + self._text_vmax.world_object, + ) + + self._set_world_object(widget_wo) + + self.world_object.local.scale_x *= -1 + + self._text_vmin.offset = (-120, self._linear_region_selector.selection[0], 0) + + self._text_vmax.offset = (-120, self._linear_region_selector.selection[1], 0) + + self._linear_region_selector.add_event_handler( + self._linear_region_handler, "selection" + ) + + ig_events = _get_image_graphic_events(self.image_graphic) + + self.image_graphic.add_event_handler(self._image_cmap_handler, *ig_events) + + # colorbar for grayscale images + if self.image_graphic.data.value.ndim != 3: + self._colorbar: ImageGraphic = self._make_colorbar(edges_flanked) + self._colorbar.add_event_handler(self._open_cmap_picker, "click") + + self.world_object.add(self._colorbar.world_object) + else: + self._colorbar = None + self._cmap = None + + def _make_colorbar(self, edges_flanked) -> ImageGraphic: + # use the histogram edge values as data for an + # image with 2 columns, this will be our colorbar! + colorbar_data = np.column_stack( + [ + np.linspace( + edges_flanked[0], edges_flanked[-1], ceil(np.ptp(edges_flanked)) + ) + ] + * 2 + ).astype(np.float32) + + colorbar_data /= self._scale_factor + + cbar = ImageGraphic( + data=colorbar_data, + vmin=self.vmin, + vmax=self.vmax, + cmap=self.image_graphic.cmap, + interpolation="linear", + offset=(-55, edges_flanked[0], -1), + ) + + cbar.world_object.world.scale_x = 20 + self._cmap = self.image_graphic.cmap + + return cbar + + def _get_vmin_vmax_str(self) -> tuple[str, str]: + if self.vmin < 0.001 or self.vmin > 99_999: + vmin_str = f"{self.vmin:.2e}" + else: + vmin_str = f"{self.vmin:.2f}" + + if self.vmax < 0.001 or self.vmax > 99_999: + vmax_str = f"{self.vmax:.2e}" + else: + vmax_str = f"{self.vmax:.2f}" + + return vmin_str, vmax_str + + def _fpl_add_plot_area_hook(self, plot_area): + self._plot_area = plot_area + self._linear_region_selector._fpl_add_plot_area_hook(plot_area) + self._histogram_line._fpl_add_plot_area_hook(plot_area) + + self._plot_area.auto_scale() + self._plot_area.controller.enabled = True + + def _calculate_histogram(self, data): + + # get a subsampled view of this array + data_ss = subsample_array(data, max_size=int(1e6)) # 1e6 is default + hist, edges = np.histogram(data_ss, bins=self._nbins) + + # used if data ptp <= 10 because event things get weird + # with tiny world objects due to floating point error + # so if ptp <= 10, scale up by a factor + data_interval = edges[-1] - edges[0] + self._scale_factor: int = max(1, 100 * int(10 / data_interval)) + + edges = edges * self._scale_factor + + bin_width = edges[1] - edges[0] + + flank_nbins = int(self._nbins / self._flank_divisor) + flank_size = flank_nbins * bin_width + + flank_left = np.arange(edges[0] - flank_size, edges[0], bin_width) + flank_right = np.arange( + edges[-1] + bin_width, edges[-1] + flank_size, bin_width + ) + + edges_flanked = np.concatenate((flank_left, edges, flank_right)) + + hist_flanked = np.concatenate( + (np.zeros(flank_nbins), hist, np.zeros(flank_nbins)) + ) + + # scale 0-100 to make it easier to see + # float32 data can produce unnecessarily high values + hist_scale_value = hist_flanked.max() + if np.allclose(hist_scale_value, 0): + hist_scale_value = 1 + hist_scaled = hist_flanked / (hist_scale_value / 100) + + if edges_flanked.size > hist_scaled.size: + # we don't care about accuracy here so if it's off by 1-2 bins that's fine + edges_flanked = edges_flanked[: hist_scaled.size] + + return hist, edges, hist_scaled, edges_flanked + + def _linear_region_handler(self, ev): + # must use world coordinate values directly from selection() + # otherwise the linear region bounds jump to the closest bin edges + selected_ixs = self._linear_region_selector.selection + vmin, vmax = selected_ixs[0], selected_ixs[1] + vmin, vmax = vmin / self._scale_factor, vmax / self._scale_factor + self.vmin, self.vmax = vmin, vmax + + def _image_cmap_handler(self, ev): + setattr(self, ev.type, ev.info["value"]) + + @property + def cmap(self) -> str: + return self._cmap + + @cmap.setter + def cmap(self, name: str): + if self._colorbar is None: + return + + with pause_events(self.image_graphic): + self.image_graphic.cmap = name + + self._cmap = name + self._colorbar.cmap = name + + @property + def vmin(self) -> float: + return self._vmin + + @vmin.setter + def vmin(self, value: float): + with pause_events(self.image_graphic, self._linear_region_selector): + # must use world coordinate values directly from selection() + # otherwise the linear region bounds jump to the closest bin edges + self._linear_region_selector.selection = ( + value * self._scale_factor, + self._linear_region_selector.selection[1], + ) + self.image_graphic.vmin = value + + self._vmin = value + if self._colorbar is not None: + self._colorbar.vmin = value + + vmin_str, vmax_str = self._get_vmin_vmax_str() + self._text_vmin.offset = (-120, self._linear_region_selector.selection[0], 0) + self._text_vmin.text = vmin_str + + @property + def vmax(self) -> float: + return self._vmax + + @vmax.setter + def vmax(self, value: float): + with pause_events(self.image_graphic, self._linear_region_selector): + # must use world coordinate values directly from selection() + # otherwise the linear region bounds jump to the closest bin edges + self._linear_region_selector.selection = ( + self._linear_region_selector.selection[0], + value * self._scale_factor, + ) + + self.image_graphic.vmax = value + + self._vmax = value + if self._colorbar is not None: + self._colorbar.vmax = value + + vmin_str, vmax_str = self._get_vmin_vmax_str() + self._text_vmax.offset = (-120, self._linear_region_selector.selection[1], 0) + self._text_vmax.text = vmax_str + + def set_data(self, data, reset_vmin_vmax: bool = True): + hist, edges, hist_scaled, edges_flanked = self._calculate_histogram(data) + + line_data = np.column_stack([hist_scaled, edges_flanked]) + + # set x and y vals + self._histogram_line.data[:, :2] = line_data + + bounds = (edges[0], edges[-1]) + limits = (edges_flanked[0], edges_flanked[-11]) + origin = (hist_scaled.max() / 2, 0) + + if reset_vmin_vmax: + # reset according to the new data + self._linear_region_selector.limits = limits + self._linear_region_selector.selection = bounds + else: + with pause_events(self.image_graphic, self._linear_region_selector): + # don't change the current selection + self._linear_region_selector.limits = limits + + self._data = weakref.proxy(data) + + if self._colorbar is not None: + self._colorbar.clear_event_handlers() + self.world_object.remove(self._colorbar.world_object) + + if self.image_graphic.data.value.ndim != 3: + self._colorbar: ImageGraphic = self._make_colorbar(edges_flanked) + self._colorbar.add_event_handler(self._open_cmap_picker, "click") + + self.world_object.add(self._colorbar.world_object) + else: + self._colorbar = None + self._cmap = None + + # reset plotarea dims + self._plot_area.auto_scale() + + @property + def image_graphic(self) -> ImageGraphic: + return self._image_graphic + + @image_graphic.setter + def image_graphic(self, graphic): + if not isinstance(graphic, ImageGraphic): + raise TypeError( + f"HistogramLUTTool can only use ImageGraphic types, you have passed: {type(graphic)}" + ) + + if self._image_graphic is not None: + # cleanup events from current image graphic + ig_events = _get_image_graphic_events(self._image_graphic) + self._image_graphic.remove_event_handler( + self._image_cmap_handler, *ig_events + ) + + self._image_graphic = graphic + + ig_events = _get_image_graphic_events(self._image_graphic) + + self.image_graphic.add_event_handler(self._image_cmap_handler, *ig_events) + + def disconnect_image_graphic(self): + ig_events = _get_image_graphic_events(self._image_graphic) + self._image_graphic.remove_event_handler(self._image_cmap_handler, *ig_events) + del self._image_graphic + # self._image_graphic = None + + def _open_cmap_picker(self, ev): + # check if right click + if ev.button != 2: + return + + pos = ev.x, ev.y + + self._plot_area.get_figure().open_popup("colormap-picker", pos, lut_tool=self) + + def _fpl_prepare_del(self): + self._linear_region_selector._fpl_prepare_del() + self._histogram_line._fpl_prepare_del() + del self._histogram_line + del self._linear_region_selector diff --git a/fastplotlib/tools/_tooltip.py b/fastplotlib/tools/_tooltip.py new file mode 100644 index 000000000..2fbdfcec2 --- /dev/null +++ b/fastplotlib/tools/_tooltip.py @@ -0,0 +1,297 @@ +from functools import partial + +import numpy as np +import pygfx + +from ..graphics import LineGraphic, ImageGraphic, ScatterGraphic, Graphic +from ..graphics.features import GraphicFeatureEvent + + +class MeshMasks: + """Used set the x0, x1, y0, y1 positions of the plane mesh""" + + x0 = np.array( + [ + [False, False, False], + [True, False, False], + [False, False, False], + [True, False, False], + ] + ) + + x1 = np.array( + [ + [True, False, False], + [False, False, False], + [True, False, False], + [False, False, False], + ] + ) + + y0 = np.array( + [ + [False, True, False], + [False, True, False], + [False, False, False], + [False, False, False], + ] + ) + + y1 = np.array( + [ + [False, False, False], + [False, False, False], + [False, True, False], + [False, True, False], + ] + ) + + +masks = MeshMasks + + +class Tooltip: + def __init__(self): + # text object + self._text = pygfx.Text( + text="", + font_size=12, + screen_space=False, + anchor="bottom-left", + material=pygfx.TextMaterial( + color="w", + outline_color="w", + outline_thickness=0.0, + pick_write=False, + ), + ) + + # plane for the background of the text object + geometry = pygfx.plane_geometry(1, 1) + material = pygfx.MeshBasicMaterial(color=(0.1, 0.1, 0.3, 0.95)) + self._plane = pygfx.Mesh(geometry, material) + # else text not visible + self._plane.world.z = 0.5 + + # line to outline the plane mesh + self._line = pygfx.Line( + geometry=pygfx.Geometry( + positions=np.array( + [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0], + [0, 0, 0], + [0, 0, 0], + ], + dtype=np.float32, + ) + ), + material=pygfx.LineThinMaterial(thickness=1.0, color=(0.8, 0.8, 1.0, 1.0)), + ) + + self._world_object = pygfx.Group() + self._world_object.add(self._plane, self._text, self._line) + + # padded to bbox so the background box behind the text extends a bit further + # making the text easier to read + self._padding = np.array([[5, 5, 0], [-5, -5, 0]], dtype=np.float32) + + self._registered_graphics = dict() + + @property + def world_object(self) -> pygfx.Group: + return self._world_object + + @property + def font_size(self): + """Get or set font size""" + return self._text.font_size + + @font_size.setter + def font_size(self, size: float): + self._text.font_size = size + + @property + def text_color(self): + """Get or set text color using a str or RGB(A) array""" + return self._text.material.color + + @text_color.setter + def text_color(self, color: str | tuple | list | np.ndarray): + self._text.material.color = color + + @property + def background_color(self): + """Get or set background color using a str or RGB(A) array""" + return self._plane.material.color + + @background_color.setter + def background_color(self, color: str | tuple | list | np.ndarray): + self._plane.material.color = color + + @property + def outline_color(self): + """Get or set outline color using a str or RGB(A) array""" + return self._line.material.color + + @outline_color.setter + def outline_color(self, color: str | tuple | list | np.ndarray): + self._line.material.color = color + + @property + def padding(self) -> np.ndarray: + """ + Get or set the background padding in number of pixels. + The padding defines the number of pixels around the tooltip text that the background is extended by. + """ + + return self.padding[0, :2].copy() + + @padding.setter + def padding(self, padding_xy: tuple[float, float]): + self._padding[0, :2] = padding_xy + self._padding[1, :2] = -np.asarray(padding_xy) + + def _set_position(self, pos: tuple[float, float]): + """ + Set the position of the tooltip + + Parameters + ---------- + pos: [float, float] + position in screen space + + """ + # need to flip due to inverted y + x, y = pos[0], pos[1] + + # put the tooltip slightly to the top right of the cursor positoin + x += 8 + y -= 8 + + self._text.world.position = (x, -y, 0) + + bbox = self._text.get_world_bounding_box() - self._padding + [[x0, y0, _], [x1, y1, _]] = bbox + + self._plane.geometry.positions.data[masks.x0] = x0 + self._plane.geometry.positions.data[masks.x1] = x1 + self._plane.geometry.positions.data[masks.y0] = y0 + self._plane.geometry.positions.data[masks.y1] = y1 + + self._plane.geometry.positions.update_range() + + # line points + pts = [[x0, y0], [x0, y1], [x1, y1], [x1, y0], [x0, y0]] + + self._line.geometry.positions.data[:, :2] = pts + self._line.geometry.positions.update_range() + + def _event_handler(self, custom_tooltip: callable, ev: pygfx.PointerEvent): + """Handles the tooltip appear event, determines the text to be set in the tooltip""" + if custom_tooltip is not None: + info = custom_tooltip(ev) + + elif isinstance(ev.graphic, ImageGraphic): + col, row = ev.pick_info["index"] + if ev.graphic.data.value.ndim == 2: + info = str(ev.graphic.data[row, col]) + else: + info = "\n".join( + f"{channel}: {val}" + for channel, val in zip("rgba", ev.graphic.data[row, col]) + ) + + elif isinstance(ev.graphic, (LineGraphic, ScatterGraphic)): + index = ev.pick_info["vertex_index"] + info = "\n".join( + f"{dim}: {val}" for dim, val in zip("xyz", ev.graphic.data[index]) + ) + else: + raise TypeError("Unsupported graphic") + + # make the tooltip object visible + self.world_object.visible = True + + # set the text and top left position of the tooltip + self._text.set_text(info) + self._set_position((ev.x, ev.y)) + + def _clear(self, ev): + self._text.set_text("") + self.world_object.visible = False + + def register( + self, + graphic: Graphic, + appear_event: str = "pointer_move", + disappear_event: str = "pointer_leave", + custom_info: callable = None, + ): + """ + Register a Graphic to display tooltips. + + **Note:** if the passed graphic is already registered then it first unregistered + and then re-registered using the given arguments. + + Parameters + ---------- + graphic: Graphic + Graphic to register + + appear_event: str, default "pointer_move" + the pointer that triggers the tooltip to appear. Usually one of "pointer_move" | "click" | "double_click" + + disappear_event: str, default "pointer_leave" + the event that triggers the tooltip to disappear, does not have to be a pointer event. + + custom_info: callable, default None + a custom function that takes the pointer event defined as the `appear_event` and returns the text + to display in the tooltip + + """ + if graphic in list(self._registered_graphics.keys()): + # unregister first and then re-register + self.unregister(graphic) + + pfunc = partial(self._event_handler, custom_info) + graphic.add_event_handler(pfunc, appear_event) + graphic.add_event_handler(self._clear, disappear_event) + + self._registered_graphics[graphic] = (pfunc, appear_event, disappear_event) + + # automatically unregister when graphic is deleted + graphic.add_event_handler(self.unregister, "deleted") + + def unregister(self, graphic: Graphic): + """ + Unregister a Graphic to no longer display tooltips for this graphic. + + **Note:** if the passed graphic is not registered then it is just ignored without raising any exception. + + Parameters + ---------- + graphic: Graphic + Graphic to unregister + + """ + + if isinstance(graphic, GraphicFeatureEvent): + # this happens when the deleted event is triggered + graphic = graphic.graphic + + if graphic not in self._registered_graphics: + return + + # get pfunc and event names + pfunc, appear_event, disappear_event = self._registered_graphics.pop(graphic) + + # remove handlers from graphic + graphic.remove_event_handler(pfunc, appear_event) + graphic.remove_event_handler(self._clear, disappear_event) + + def unregister_all(self): + """unregister all graphics""" + for graphic in self._registered_graphics.keys(): + self.unregister(graphic) diff --git a/fastplotlib/ui/__init__.py b/fastplotlib/ui/__init__.py new file mode 100644 index 000000000..a1e57a9c5 --- /dev/null +++ b/fastplotlib/ui/__init__.py @@ -0,0 +1,3 @@ +from ._base import BaseGUI, Window, EdgeWindow, Popup, GUI_EDGES +from ._subplot_toolbar import SubplotToolbar +from .right_click_menus import StandardRightClickMenu, ColormapPicker diff --git a/fastplotlib/ui/_base.py b/fastplotlib/ui/_base.py new file mode 100644 index 000000000..e31dd8d4a --- /dev/null +++ b/fastplotlib/ui/_base.py @@ -0,0 +1,240 @@ +from typing import Literal +import numpy as np + +from imgui_bundle import imgui + +from ..layouts._figure import Figure + + +GUI_EDGES = ["right", "bottom"] + + +class BaseGUI: + """ + Base class for all ImGUI based GUIs, windows and popups + + The main purpose of this base is for setting a unique ID between multiple figs with identical UI elements + + This ID can be pushed in subclasses within the `update()` method + """ + + ID_COUNTER: int = 0 + + def __init__(self): + BaseGUI.ID_COUNTER += 1 + self._id_counter = BaseGUI.ID_COUNTER + + def update(self): + """must be implemented in subclass""" + raise NotImplementedError + + +class Window(BaseGUI): + """Base class for imgui windows drawn within Figures""" + + pass + + +class EdgeWindow(Window): + def __init__( + self, + figure: Figure, + size: int, + location: Literal["bottom", "right"], + title: str, + window_flags: int = imgui.WindowFlags_.no_collapse + | imgui.WindowFlags_.no_resize, + *args, + **kwargs, + ): + """ + A base class for imgui windows displayed at the bottom or top edge of a Figure + + Parameters + ---------- + figure: Figure + Figure instance that this window will be placed in + + size: int + width or height of the window, depending on its location + + location: str, "bottom" | "right" + location of the window + + title: str + window title + + window_flags: int + window flag enum, valid flags are: + + .. code-block:: py + + imgui.WindowFlags_.no_title_bar + imgui.WindowFlags_.no_resize + imgui.WindowFlags_.no_move + imgui.WindowFlags_.no_scrollbar + imgui.WindowFlags_.no_scroll_with_mouse + imgui.WindowFlags_.no_collapse + imgui.WindowFlags_.always_auto_resize + imgui.WindowFlags_.no_background + imgui.WindowFlags_.no_saved_settings + imgui.WindowFlags_.no_mouse_inputs + imgui.WindowFlags_.menu_bar + imgui.WindowFlags_.horizontal_scrollbar + imgui.WindowFlags_.no_focus_on_appearing + imgui.WindowFlags_.no_bring_to_front_on_focus + imgui.WindowFlags_.always_vertical_scrollbar + imgui.WindowFlags_.always_horizontal_scrollbar + imgui.WindowFlags_.no_nav_inputs + imgui.WindowFlags_.no_nav_focus + imgui.WindowFlags_.unsaved_document + imgui.WindowFlags_.no_docking + imgui.WindowFlags_.no_nav + imgui.WindowFlags_.no_decoration + imgui.WindowFlags_.no_inputs + + *args + additional args for the GUI + + **kwargs + additional kwargs for teh GUI + """ + super().__init__() + + if location not in GUI_EDGES: + f"GUI does not have a valid location, valid locations are: {GUI_EDGES}, you have passed: {location}" + + self._figure = figure + self._size = size + self._location = location + self._title = title + self._window_flags = window_flags + self._fa_icons = self._figure._fa_icons + + self._x, self._y, self._width, self._height = self.get_rect() + + self._figure.canvas.add_event_handler(self._set_rect, "resize") + + @property + def size(self) -> int | None: + """width or height of the edge window""" + return self._size + + @size.setter + def size(self, value): + if not isinstance(value, int): + raise TypeError + self._size = value + + @property + def location(self) -> str: + """location of the window""" + return self._location + + @property + def x(self) -> int: + """canvas x position of the window""" + return self._x + + @property + def y(self) -> int: + """canvas y position of the window""" + return self._y + + @property + def width(self) -> int: + """with the window""" + return self._width + + @property + def height(self) -> int: + """height of the window""" + return self._height + + def _set_rect(self, *args): + self._x, self._y, self._width, self._height = self.get_rect() + + def get_rect(self) -> tuple[int, int, int, int]: + """ + Compute the rect that defines the area this GUI is drawn to + + Returns + ------- + int, int, int, int + x_pos, y_pos, width, height + + """ + + width_canvas, height_canvas = self._figure.canvas.get_logical_size() + + match self._location: + case "bottom": + x_pos = 0 + y_pos = height_canvas - self.size + width, height = (width_canvas, self.size) + + case "right": + x_pos, y_pos = (width_canvas - self.size, 0) + width, height = (self.size, height_canvas) + + if self._figure.guis["bottom"] is not None: + height -= self._figure.guis["bottom"].size + + return x_pos, y_pos, width, height + + def draw_window(self): + """helps simplify using imgui by managing window creation & position, and pushing/popping the ID""" + # window position & size + x, y, w, h = self.get_rect() + imgui.set_next_window_size((self.width, self.height)) + imgui.set_next_window_pos((self.x, self.y)) + # imgui.set_next_window_pos((x, y)) + # imgui.set_next_window_size((w, h)) + flags = self._window_flags + + # begin window + imgui.begin(self._title, p_open=None, flags=flags) + + # push ID to prevent conflict between multiple figs with same UI + imgui.push_id(self._id_counter) + + # draw stuff from subclass into window + self.update() + + # pop ID + imgui.pop_id() + + # end the window + imgui.end() + + def update(self): + """Implement your GUI here and it will be drawn within the window. See the GUI examples""" + raise NotImplementedError + + +class Popup(BaseGUI): + def __init__(self, figure: Figure, *args, **kwargs): + """ + Base class for creating ImGUI popups within Figures + + Parameters + ---------- + figure: Figure + Figure instance + *args + any args to pass to subclass constructor + + **kwargs + any kwargs to pass to subclass constructor + """ + + super().__init__() + + self._figure = figure + self._fa_icons = self._figure._fa_icons + + self.is_open = False + + def open(self, pos: tuple[int, int], *args, **kwargs): + """implement in subclass""" + raise NotImplementedError diff --git a/fastplotlib/ui/_subplot_toolbar.py b/fastplotlib/ui/_subplot_toolbar.py new file mode 100644 index 000000000..a06e81b90 --- /dev/null +++ b/fastplotlib/ui/_subplot_toolbar.py @@ -0,0 +1,78 @@ +from imgui_bundle import imgui, icons_fontawesome_6 as fa, imgui_ctx + +from ..layouts._subplot import Subplot +from ._base import Window +from ..layouts._utils import IMGUI_TOOLBAR_HEIGHT + + +class SubplotToolbar(Window): + def __init__(self, subplot: Subplot, fa_icons: imgui.ImFont): + """ + Subplot toolbar shown below all subplots + """ + super().__init__() + + self._subplot = subplot + self._fa_icons = fa_icons + + def update(self): + # get subplot rect + x, y, width, height = self._subplot.frame.rect + + # place the toolbar window below the subplot + pos = (x + 1, y + height - IMGUI_TOOLBAR_HEIGHT) + + imgui.set_next_window_size((width - 18, 0)) + imgui.set_next_window_pos(pos) + flags = ( + imgui.WindowFlags_.no_collapse + | imgui.WindowFlags_.no_title_bar + | imgui.WindowFlags_.no_background + ) + + imgui.begin(f"Toolbar-{hex(id(self._subplot))}", p_open=None, flags=flags) + + # icons for buttons + imgui.push_font(self._fa_icons) + + # push ID to prevent conflict between multiple figs with same UI + imgui.push_id(self._id_counter) + with imgui_ctx.begin_horizontal(f"toolbar-{hex(id(self._subplot))}"): + # autoscale button + if imgui.button(fa.ICON_FA_MAXIMIZE): + self._subplot.auto_scale() + imgui.pop_font() + if imgui.is_item_hovered(0): + imgui.set_tooltip("autoscale scene") + + # center scene + imgui.push_font(self._fa_icons) + if imgui.button(fa.ICON_FA_ALIGN_CENTER): + self._subplot.center_scene() + imgui.pop_font() + if imgui.is_item_hovered(0): + imgui.set_tooltip("center scene") + + imgui.push_font(self._fa_icons) + # checkbox controller + _, self._subplot.controller.enabled = imgui.checkbox( + fa.ICON_FA_COMPUTER_MOUSE, self._subplot.controller.enabled + ) + imgui.pop_font() + if imgui.is_item_hovered(0): + imgui.set_tooltip("enable/disable controller") + + imgui.push_font(self._fa_icons) + # checkbox maintain_apsect + _, self._subplot.camera.maintain_aspect = imgui.checkbox( + fa.ICON_FA_EXPAND, self._subplot.camera.maintain_aspect + ) + imgui.pop_font() + if imgui.is_item_hovered(0): + imgui.set_tooltip("maintain aspect") + + # pop id when all UI has been written to window + imgui.pop_id() + + # end window + imgui.end() diff --git a/fastplotlib/ui/right_click_menus/__init__.py b/fastplotlib/ui/right_click_menus/__init__.py new file mode 100644 index 000000000..6ccc50646 --- /dev/null +++ b/fastplotlib/ui/right_click_menus/__init__.py @@ -0,0 +1,2 @@ +from ._colormap_picker import ColormapPicker +from ._standard_menu import StandardRightClickMenu diff --git a/fastplotlib/ui/right_click_menus/_colormap_picker.py b/fastplotlib/ui/right_click_menus/_colormap_picker.py new file mode 100644 index 000000000..3c48bd4d8 --- /dev/null +++ b/fastplotlib/ui/right_click_menus/_colormap_picker.py @@ -0,0 +1,175 @@ +import ctypes + +import numpy as np +import cmap + +import wgpu +from imgui_bundle import imgui +from wgpu import GPUTexture + +from .. import Popup +from ...utils.functions import ( + COLORMAP_NAMES, + SEQUENTIAL_CMAPS, + CYCLIC_CMAPS, + DIVERGING_CMAPS, + MISC_CMAPS, +) + +all_cmaps = [*SEQUENTIAL_CMAPS, *CYCLIC_CMAPS, *DIVERGING_CMAPS, *MISC_CMAPS] + + +class ColormapPicker(Popup): + """Colormap picker menu popup tool""" + + # name used to trigger this popup after it has been registered with a Figure + name = "colormap-picker" + + def __init__(self, figure): + super().__init__(figure=figure, fa_icons=None) + + self.renderer = self._figure.renderer + self.imgui_renderer = self._figure.imgui_renderer + + # maps str cmap names -> int texture IDs + self._texture_ids: dict[str, int] = {} + self._textures = list() + + # make all colormaps and upload representative texture for each cmap to the GPU + for name in all_cmaps: + # get data that represents cmap + colormap = cmap.Colormap(name) + data = colormap(np.linspace(0, 1)) * 255 + + # needs to be 2D to create a texture + data = np.vstack([[data]] * 2).astype(np.uint8) + + # upload the texture to the GPU, get the texture ID and texture + self._texture_ids[name], texture = self._create_texture_and_upload(data) + self._textures.append(texture) + + # used to set the states of the UI + self._lut_tool = None + self._pos: tuple[int, int] = -1, -1 + self._open_new: bool = False + + self.is_open = False + + self._popup_state = "never-opened" + + self._texture_height = None + + def _create_texture_and_upload(self, data: np.ndarray) -> tuple[int, GPUTexture]: + """crates a GPUTexture from the 2D data and uploads it""" + + # create a GPUTexture + texture = self.renderer.device.create_texture( + size=(data.shape[1], data.shape[0], 4), + usage=wgpu.TextureUsage.COPY_DST | wgpu.TextureUsage.TEXTURE_BINDING, + dimension=wgpu.TextureDimension.d2, + format=wgpu.TextureFormat.rgba8unorm, + mip_level_count=1, + sample_count=1, + ) + + # upload to the GPU + self.renderer.device.queue.write_texture( + {"texture": texture, "mip_level": 0, "origin": (0, 0, 0)}, + data, + {"offset": 0, "bytes_per_row": data.shape[1] * 4}, + (data.shape[1], data.shape[0], 1), + ) + + # get a view + texture_view = texture.create_view() + + # get the id so that imgui can display it + id_texture = ctypes.c_int32(id(texture_view)).value + # add texture view to the backend so that it can be retrieved for rendering + self.imgui_renderer.backend._texture_views[id_texture] = texture_view + + return id_texture, texture + + def open(self, pos: tuple[int, int], lut_tool): + """ + Request that the popup be opened on the next render cycle + + Parameters + ---------- + pos: int, int + (x, y) position + + lut_tool: HistogramLUTTool + instance of the LUT tool + + Returns + ------- + + """ + self._lut_tool = lut_tool + + self._pos = pos + + self._open_new = True + + def close(self): + """cleanup after popup has closed""" + self._lut_tool = None + self._open_new = False + self._pos = -1, -1 + + self.is_open = False + + def _add_cmap_menu_item(self, cmap_name: str): + texture_id = self._texture_ids[cmap_name] + imgui.image( + texture_id, image_size=(50, self._texture_height), border_col=(1, 1, 1, 1) + ) + + imgui.same_line() + + clicked, selected = imgui.selectable( + label=cmap_name, + p_selected=cmap_name == self._lut_tool.cmap, + ) + + if clicked and selected: + self._lut_tool.cmap = cmap_name + + def update(self): + if self._open_new: + # new popup has been triggered by a LUT tool + self._open_new = False + + imgui.set_next_window_pos(self._pos) + imgui.open_popup("cmap-picker") + + if imgui.begin_popup("cmap-picker"): + self.is_open = True + + # make the cmap image height the same as the text height + self._texture_height = ( + self.imgui_renderer.backend.io.font_global_scale + * imgui.get_font().font_size + ) - 2 + + if imgui.menu_item("Reset vmin-vmax", "", False)[0]: + self._lut_tool.image_graphic.reset_vmin_vmax() + + # add all the cmap options + for cmap_type in COLORMAP_NAMES.keys(): + if cmap_type == "qualitative": + continue + + imgui.separator() + imgui.text(cmap_type.capitalize()) + + for cmap_name in COLORMAP_NAMES[cmap_type]: + self._add_cmap_menu_item(cmap_name) + + imgui.end_popup() + + else: + # popup went from open to closed + if self.is_open == True: + self.close() diff --git a/fastplotlib/ui/right_click_menus/_standard_menu.py b/fastplotlib/ui/right_click_menus/_standard_menu.py new file mode 100644 index 000000000..4bb59c51d --- /dev/null +++ b/fastplotlib/ui/right_click_menus/_standard_menu.py @@ -0,0 +1,200 @@ +from imgui_bundle import imgui + +from ...layouts._utils import controller_types +from ...layouts._plot_area import PlotArea +from ...ui import Popup + + +def flip_axis(subplot: PlotArea, axis: str, flip: bool): + camera = subplot.camera + axis_attr = f"scale_{axis}" + scale = getattr(camera.local, axis_attr) + + if flip and scale > 0: + # flip is checked and axis is not already flipped + setattr(camera.local, axis_attr, scale * -1) + + elif not flip and scale < 0: + # flip not checked and axis is flipped + setattr(camera.local, axis_attr, scale * -1) + + +class StandardRightClickMenu(Popup): + """Right click menu that is shown on subplots""" + + def __init__(self, figure, fa_icons): + super().__init__(figure=figure, fa_icons=fa_icons) + + self._last_right_click_pos = None + self._mouse_down: bool = False + + # whether the right click menu is currently open or not + self.is_open: bool = False + + def get_subplot(self) -> PlotArea | bool | None: + """get the subplot that a click occurred in""" + if self._last_right_click_pos is None: + return False + + for subplot in self._figure: + if subplot.viewport.is_inside(*self._last_right_click_pos): + return subplot + + # not inside a subplot + return False + + def cleanup(self): + """called when the popup disappears""" + self.is_open = False + + def update(self): + if imgui.is_mouse_down(1) and not self._mouse_down: + # mouse button was pressed down, store this position + self._mouse_down = True + self._last_right_click_pos = imgui.get_mouse_pos() + + if imgui.is_mouse_released(1) and self._mouse_down: + self._mouse_down = False + + # open popup only if mouse was not moved between mouse_down and mouse_up events + if self._last_right_click_pos == imgui.get_mouse_pos(): + if self.get_subplot() is not False: # must explicitly check for False + # open only if right click was inside a subplot + imgui.open_popup(f"right-click-menu") + + # TODO: call this just once when going from open -> closed state + if not imgui.is_popup_open("right-click-menu"): + self.cleanup() + + if imgui.begin_popup(f"right-click-menu"): + if self.get_subplot() is False: # must explicitly check for False + # for some reason it will still trigger at certain locations + # despite open_popup() only being called when an actual + # subplot is returned + imgui.end_popup() + imgui.close_current_popup() + self.cleanup() + return + + name = self.get_subplot().name + + if name is not None: + # text label at the top of the menu + imgui.text(f"subplot: {name}") + imgui.separator() + + _, show_fps = imgui.menu_item( + "Show fps", "", self.get_subplot().get_figure().imgui_show_fps + ) + self.get_subplot().get_figure().imgui_show_fps = show_fps + + # autoscale, center, maintain aspect + if imgui.menu_item(f"Autoscale", "", False)[0]: + self.get_subplot().auto_scale() + + if imgui.menu_item(f"Center", "", False)[0]: + self.get_subplot().center_scene() + + _, maintain_aspect = imgui.menu_item( + "Maintain Aspect", "", self.get_subplot().camera.maintain_aspect + ) + self.get_subplot().camera.maintain_aspect = maintain_aspect + + imgui.separator() + + # toggles to flip axes cameras + for axis in ["x", "y", "z"]: + scale = getattr(self.get_subplot().camera.local, f"scale_{axis}") + changed, flip = imgui.menu_item( + f"Flip {axis} axis", "", bool(scale < 0) + ) + + if changed: + flip_axis(self.get_subplot(), axis, flip) + + imgui.separator() + + # toggles to show/hide the grid + for plane in ["xy", "xz", "yz"]: + grid = getattr(self.get_subplot().axes.grids, plane) + visible = grid.visible + changed, new_visible = imgui.menu_item(f"Grid {plane}", "", visible) + + if changed: + grid.visible = new_visible + + imgui.separator() + + # camera FOV + changed, fov = imgui.slider_float( + "FOV", v=self.get_subplot().camera.fov, v_min=0.0, v_max=180.0 + ) + + imgui.separator() + + if changed: + # FOV between 0 and 1 is numerically unstable + if 0 < fov < 1: + fov = 1 + + # need to update FOV via controller, if FOV is directly set + # on the camera the controller will immediately set it back + self.get_subplot().controller.update_fov( + fov - self.get_subplot().camera.fov, + animate=False, + ) + + imgui.separator() + + # controller options + if imgui.begin_menu("Controller"): + _, enabled = imgui.menu_item( + "Enabled", "", self.get_subplot().controller.enabled + ) + + self.get_subplot().controller.enabled = enabled + + changed, damping = imgui.slider_float( + "Damping", + v=self.get_subplot().controller.damping, + v_min=0.0, + v_max=10.0, + ) + + if changed: + self.get_subplot().controller.damping = damping + + imgui.separator() + imgui.text("Controller type:") + # switching between different controllers + for name, controller_type_iter in controller_types.items(): + current_type = type(self.get_subplot().controller) + + clicked, _ = imgui.menu_item( + label=name, + shortcut="", + p_selected=current_type is controller_type_iter, + ) + + if clicked and (current_type is not controller_type_iter): + # menu item was clicked and the desired controller isn't the current one + self.get_subplot().controller = name + + imgui.end_menu() + + # renderer blend modes + if imgui.begin_menu("Blend mode"): + for blend_mode in sorted( + self.get_subplot().renderer._blenders_available.keys() + ): + clicked, _ = imgui.menu_item( + label=blend_mode, + shortcut="", + p_selected=self.get_subplot().renderer.blend_mode == blend_mode, + ) + + if clicked: + self.get_subplot().renderer.blend_mode = blend_mode + imgui.end_menu() + + imgui.end_popup() diff --git a/fastplotlib/utils/__init__.py b/fastplotlib/utils/__init__.py index c8f754883..dce4d96f9 100644 --- a/fastplotlib/utils/__init__.py +++ b/fastplotlib/utils/__init__.py @@ -1 +1,15 @@ +from dataclasses import dataclass + +# this MUST be imported as early as possible in fpl.__init__ before any other wgpu stuff +from .gui import loop from .functions import * +from .gpu import enumerate_adapters, select_adapter, print_wgpu_report +from ._plot_helpers import * + + +@dataclass +class _Config: + party_parrot: bool + + +config = _Config(party_parrot=False) diff --git a/fastplotlib/utils/_plot_helpers.py b/fastplotlib/utils/_plot_helpers.py new file mode 100644 index 000000000..12afe1cb2 --- /dev/null +++ b/fastplotlib/utils/_plot_helpers.py @@ -0,0 +1,82 @@ +from typing import Sequence + +import numpy as np + +from ..graphics._base import Graphic +from ..graphics._collection_base import GraphicCollection + + +def get_nearest_graphics_indices( + pos: tuple[float, float] | tuple[float, float, float], + graphics: Sequence[Graphic] | GraphicCollection, +) -> np.ndarray[int]: + """ + Returns indices of the nearest ``graphics`` to the passed position ``pos`` in world space + in order of closest to furtherst. Uses the distance between ``pos`` and the center of the + bounding sphere for each graphic. + + Parameters + ---------- + pos: (x, y) | (x, y, z) + position in world space, z-axis is ignored when calculating L2 norms if ``pos`` is 2D + + graphics: Sequence, i.e. array, list, tuple, etc. of Graphic | GraphicCollection + the graphics from which to return a sorted array of graphics in order of closest + to furthest graphic + + Returns + ------- + ndarray[int] + indices of the nearest nearest graphics to ``pos`` in order + + """ + if isinstance(graphics, GraphicCollection): + graphics = graphics.graphics + + if not all(isinstance(g, Graphic) for g in graphics): + raise TypeError("all elements of `graphics` must be Graphic objects") + + pos = np.asarray(pos).ravel() + + if pos.shape != (2,) and pos.shape != (3,): + raise TypeError( + f"pos.shape must be (2,) or (3,), the shape of pos you have passed is: {pos.shape}" + ) + + # get centers + centers = np.empty(shape=(len(graphics), len(pos))) + for i in range(centers.shape[0]): + centers[i] = graphics[i].world_object.get_world_bounding_sphere()[: len(pos)] + + # l2 + distances = np.linalg.norm(centers[:, : len(pos)] - pos, ord=2, axis=1) + + sort_indices = np.argsort(distances) + return sort_indices + + +def get_nearest_graphics( + pos: tuple[float, float] | tuple[float, float, float], + graphics: Sequence[Graphic] | GraphicCollection, +) -> np.ndarray[Graphic]: + """ + Returns the nearest ``graphics`` to the passed position ``pos`` in world space. + Uses the distance between ``pos`` and the center of the bounding sphere for each graphic. + + Parameters + ---------- + pos: (x, y) | (x, y, z) + position in world space, z-axis is ignored when calculating L2 norms if ``pos`` is 2D + + graphics: Sequence, i.e. array, list, tuple, etc. of Graphic | GraphicCollection + the graphics from which to return a sorted array of graphics in order of closest + to furthest graphic + + Returns + ------- + ndarray[Graphic] + nearest graphics to ``pos`` in order + + """ + sort_indices = get_nearest_graphics_indices(pos, graphics) + return np.asarray(graphics)[sort_indices] diff --git a/fastplotlib/utils/colormaps/Accent b/fastplotlib/utils/colormaps/Accent deleted file mode 100644 index 3bc12ed62..000000000 --- a/fastplotlib/utils/colormaps/Accent +++ /dev/null @@ -1,8 +0,0 @@ -4.980392158031463623e-01 7.882353067398071289e-01 4.980392158031463623e-01 1.000000000000000000e+00 -7.450980544090270996e-01 6.823529601097106934e-01 8.313725590705871582e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.529411911964416504e-01 5.254902243614196777e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.000000238418579102e-01 1.000000000000000000e+00 -2.196078449487686157e-01 4.235294163227081299e-01 6.901960968971252441e-01 1.000000000000000000e+00 -9.411764740943908691e-01 7.843137718737125397e-03 4.980392158031463623e-01 1.000000000000000000e+00 -7.490196228027343750e-01 3.568627536296844482e-01 9.019608050584793091e-02 1.000000000000000000e+00 -4.000000059604644775e-01 4.000000059604644775e-01 4.000000059604644775e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Blues b/fastplotlib/utils/colormaps/Blues deleted file mode 100644 index e1684d87a..000000000 --- a/fastplotlib/utils/colormaps/Blues +++ /dev/null @@ -1,256 +0,0 @@ -9.686274528503417969e-01 9.843137264251708984e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.655517339706420898e-01 9.823452234268188477e-01 9.990157485008239746e-01 1.000000000000000000e+00 -9.624759554862976074e-01 9.803767800331115723e-01 9.980314970016479492e-01 1.000000000000000000e+00 -9.594002366065979004e-01 9.784082770347595215e-01 9.970473051071166992e-01 1.000000000000000000e+00 -9.563245177268981934e-01 9.764398336410522461e-01 9.960630536079406738e-01 1.000000000000000000e+00 -9.532487392425537109e-01 9.744713306427001953e-01 9.950788021087646484e-01 1.000000000000000000e+00 -9.501730203628540039e-01 9.725028872489929199e-01 9.940945506095886230e-01 1.000000000000000000e+00 -9.470972418785095215e-01 9.705343842506408691e-01 9.931103587150573730e-01 1.000000000000000000e+00 -9.440215229988098145e-01 9.685659408569335938e-01 9.921261072158813477e-01 1.000000000000000000e+00 -9.409458041191101074e-01 9.665974378585815430e-01 9.911418557167053223e-01 1.000000000000000000e+00 -9.378700256347656250e-01 9.646289944648742676e-01 9.901576042175292969e-01 1.000000000000000000e+00 -9.347943067550659180e-01 9.626604914665222168e-01 9.891734123229980469e-01 1.000000000000000000e+00 -9.317185878753662109e-01 9.606920480728149414e-01 9.881891608238220215e-01 1.000000000000000000e+00 -9.286428093910217285e-01 9.587235450744628906e-01 9.872049093246459961e-01 1.000000000000000000e+00 -9.255670905113220215e-01 9.567551016807556152e-01 9.862206578254699707e-01 1.000000000000000000e+00 -9.224913716316223145e-01 9.547865986824035645e-01 9.852364659309387207e-01 1.000000000000000000e+00 -9.194155931472778320e-01 9.528181552886962891e-01 9.842522144317626953e-01 1.000000000000000000e+00 -9.163398742675781250e-01 9.508496522903442383e-01 9.832679629325866699e-01 1.000000000000000000e+00 -9.132641553878784180e-01 9.488812088966369629e-01 9.822837114334106445e-01 1.000000000000000000e+00 -9.101883769035339355e-01 9.469127058982849121e-01 9.812995195388793945e-01 1.000000000000000000e+00 -9.071126580238342285e-01 9.449442625045776367e-01 9.803152680397033691e-01 1.000000000000000000e+00 -9.040368795394897461e-01 9.429757595062255859e-01 9.793310165405273438e-01 1.000000000000000000e+00 -9.009611606597900391e-01 9.410073161125183105e-01 9.783467650413513184e-01 1.000000000000000000e+00 -8.978854417800903320e-01 9.390388131141662598e-01 9.773625731468200684e-01 1.000000000000000000e+00 -8.948096632957458496e-01 9.370703697204589844e-01 9.763783216476440430e-01 1.000000000000000000e+00 -8.917339444160461426e-01 9.351018667221069336e-01 9.753940701484680176e-01 1.000000000000000000e+00 -8.886582255363464355e-01 9.331334233283996582e-01 9.744098186492919922e-01 1.000000000000000000e+00 -8.855824470520019531e-01 9.311649203300476074e-01 9.734256267547607422e-01 1.000000000000000000e+00 -8.825067281723022461e-01 9.291964769363403320e-01 9.724413752555847168e-01 1.000000000000000000e+00 -8.794310092926025391e-01 9.272279739379882812e-01 9.714571237564086914e-01 1.000000000000000000e+00 -8.763552308082580566e-01 9.252595305442810059e-01 9.704728722572326660e-01 1.000000000000000000e+00 -8.732795119285583496e-01 9.232910275459289551e-01 9.694886803627014160e-01 1.000000000000000000e+00 -8.702191710472106934e-01 9.213225841522216797e-01 9.685044288635253906e-01 1.000000000000000000e+00 -8.672664165496826172e-01 9.193540811538696289e-01 9.675201773643493652e-01 1.000000000000000000e+00 -8.643137216567993164e-01 9.173856377601623535e-01 9.665359258651733398e-01 1.000000000000000000e+00 -8.613610267639160156e-01 9.154171347618103027e-01 9.655517339706420898e-01 1.000000000000000000e+00 -8.584083318710327148e-01 9.134486913681030273e-01 9.645674824714660645e-01 1.000000000000000000e+00 -8.554555773735046387e-01 9.114801883697509766e-01 9.635832309722900391e-01 1.000000000000000000e+00 -8.525028824806213379e-01 9.095117449760437012e-01 9.625989794731140137e-01 1.000000000000000000e+00 -8.495501875877380371e-01 9.075432419776916504e-01 9.616147875785827637e-01 1.000000000000000000e+00 -8.465974330902099609e-01 9.055747985839843750e-01 9.606305360794067383e-01 1.000000000000000000e+00 -8.436447381973266602e-01 9.036062955856323242e-01 9.596462845802307129e-01 1.000000000000000000e+00 -8.406920433044433594e-01 9.016378521919250488e-01 9.586620330810546875e-01 1.000000000000000000e+00 -8.377393484115600586e-01 8.996693491935729980e-01 9.576778411865234375e-01 1.000000000000000000e+00 -8.347865939140319824e-01 8.977009057998657227e-01 9.566935896873474121e-01 1.000000000000000000e+00 -8.318338990211486816e-01 8.957324028015136719e-01 9.557093381881713867e-01 1.000000000000000000e+00 -8.288812041282653809e-01 8.937639594078063965e-01 9.547250866889953613e-01 1.000000000000000000e+00 -8.259285092353820801e-01 8.917954564094543457e-01 9.537408947944641113e-01 1.000000000000000000e+00 -8.229757547378540039e-01 8.898270130157470703e-01 9.527566432952880859e-01 1.000000000000000000e+00 -8.200230598449707031e-01 8.878585100173950195e-01 9.517723917961120605e-01 1.000000000000000000e+00 -8.170703649520874023e-01 8.858900666236877441e-01 9.507881402969360352e-01 1.000000000000000000e+00 -8.141176700592041016e-01 8.839215636253356934e-01 9.498039484024047852e-01 1.000000000000000000e+00 -8.111649155616760254e-01 8.819531202316284180e-01 9.488196969032287598e-01 1.000000000000000000e+00 -8.082122206687927246e-01 8.799846172332763672e-01 9.478354454040527344e-01 1.000000000000000000e+00 -8.052595257759094238e-01 8.780161738395690918e-01 9.468511939048767090e-01 1.000000000000000000e+00 -8.023068308830261230e-01 8.760476708412170410e-01 9.458670020103454590e-01 1.000000000000000000e+00 -7.993540763854980469e-01 8.740792274475097656e-01 9.448827505111694336e-01 1.000000000000000000e+00 -7.964013814926147461e-01 8.721107244491577148e-01 9.438984990119934082e-01 1.000000000000000000e+00 -7.934486865997314453e-01 8.701422810554504395e-01 9.429142475128173828e-01 1.000000000000000000e+00 -7.904959917068481445e-01 8.681737780570983887e-01 9.419300556182861328e-01 1.000000000000000000e+00 -7.875432372093200684e-01 8.662053346633911133e-01 9.409458041191101074e-01 1.000000000000000000e+00 -7.845905423164367676e-01 8.642368316650390625e-01 9.399615526199340820e-01 1.000000000000000000e+00 -7.816378474235534668e-01 8.622683286666870117e-01 9.389773011207580566e-01 1.000000000000000000e+00 -7.786850929260253906e-01 8.602998852729797363e-01 9.379931092262268066e-01 1.000000000000000000e+00 -7.752403020858764648e-01 8.583006262779235840e-01 9.368243217468261719e-01 1.000000000000000000e+00 -7.703191041946411133e-01 8.562091588973999023e-01 9.351018667221069336e-01 1.000000000000000000e+00 -7.653979063034057617e-01 8.541176319122314453e-01 9.333794713020324707e-01 1.000000000000000000e+00 -7.604767680168151855e-01 8.520261645317077637e-01 9.316570758819580078e-01 1.000000000000000000e+00 -7.555555701255798340e-01 8.499346375465393066e-01 9.299346208572387695e-01 1.000000000000000000e+00 -7.506343722343444824e-01 8.478431105613708496e-01 9.282122254371643066e-01 1.000000000000000000e+00 -7.457131743431091309e-01 8.457516431808471680e-01 9.264898300170898438e-01 1.000000000000000000e+00 -7.407919764518737793e-01 8.436601161956787109e-01 9.247673749923706055e-01 1.000000000000000000e+00 -7.358708381652832031e-01 8.415686488151550293e-01 9.230449795722961426e-01 1.000000000000000000e+00 -7.309496402740478516e-01 8.394771218299865723e-01 9.213225841522216797e-01 1.000000000000000000e+00 -7.260284423828125000e-01 8.373855948448181152e-01 9.196001291275024414e-01 1.000000000000000000e+00 -7.211072444915771484e-01 8.352941274642944336e-01 9.178777337074279785e-01 1.000000000000000000e+00 -7.161861062049865723e-01 8.332026004791259766e-01 9.161553382873535156e-01 1.000000000000000000e+00 -7.112649083137512207e-01 8.311111330986022949e-01 9.144328832626342773e-01 1.000000000000000000e+00 -7.063437104225158691e-01 8.290196061134338379e-01 9.127104878425598145e-01 1.000000000000000000e+00 -7.014225125312805176e-01 8.269280791282653809e-01 9.109880924224853516e-01 1.000000000000000000e+00 -6.965013742446899414e-01 8.248366117477416992e-01 9.092656373977661133e-01 1.000000000000000000e+00 -6.915801763534545898e-01 8.227450847625732422e-01 9.075432419776916504e-01 1.000000000000000000e+00 -6.866589784622192383e-01 8.206536173820495605e-01 9.058208465576171875e-01 1.000000000000000000e+00 -6.817377805709838867e-01 8.185620903968811035e-01 9.040984511375427246e-01 1.000000000000000000e+00 -6.768165826797485352e-01 8.164705634117126465e-01 9.023759961128234863e-01 1.000000000000000000e+00 -6.718954443931579590e-01 8.143790960311889648e-01 9.006536006927490234e-01 1.000000000000000000e+00 -6.669742465019226074e-01 8.122875690460205078e-01 8.989312052726745605e-01 1.000000000000000000e+00 -6.620530486106872559e-01 8.101961016654968262e-01 8.972087502479553223e-01 1.000000000000000000e+00 -6.571318507194519043e-01 8.081045746803283691e-01 8.954863548278808594e-01 1.000000000000000000e+00 -6.522107124328613281e-01 8.060130476951599121e-01 8.937639594078063965e-01 1.000000000000000000e+00 -6.472895145416259766e-01 8.039215803146362305e-01 8.920415043830871582e-01 1.000000000000000000e+00 -6.423683166503906250e-01 8.018300533294677734e-01 8.903191089630126953e-01 1.000000000000000000e+00 -6.374471187591552734e-01 7.997385859489440918e-01 8.885967135429382324e-01 1.000000000000000000e+00 -6.325259804725646973e-01 7.976470589637756348e-01 8.868742585182189941e-01 1.000000000000000000e+00 -6.276047825813293457e-01 7.955555319786071777e-01 8.851518630981445312e-01 1.000000000000000000e+00 -6.226835846900939941e-01 7.934640645980834961e-01 8.834294676780700684e-01 1.000000000000000000e+00 -6.172549128532409668e-01 7.908650636672973633e-01 8.818454146385192871e-01 1.000000000000000000e+00 -6.109803915023803711e-01 7.874202132225036621e-01 8.804920911788940430e-01 1.000000000000000000e+00 -6.047058701515197754e-01 7.839754223823547363e-01 8.791387677192687988e-01 1.000000000000000000e+00 -5.984313488006591797e-01 7.805305719375610352e-01 8.777854442596435547e-01 1.000000000000000000e+00 -5.921568870544433594e-01 7.770857214927673340e-01 8.764321208000183105e-01 1.000000000000000000e+00 -5.858823657035827637e-01 7.736409306526184082e-01 8.750787973403930664e-01 1.000000000000000000e+00 -5.796078443527221680e-01 7.701960802078247070e-01 8.737254738807678223e-01 1.000000000000000000e+00 -5.733333230018615723e-01 7.667512297630310059e-01 8.723721504211425781e-01 1.000000000000000000e+00 -5.670588016510009766e-01 7.633064389228820801e-01 8.710188269615173340e-01 1.000000000000000000e+00 -5.607843399047851562e-01 7.598615884780883789e-01 8.696655035018920898e-01 1.000000000000000000e+00 -5.545098185539245605e-01 7.564167380332946777e-01 8.683121800422668457e-01 1.000000000000000000e+00 -5.482352972030639648e-01 7.529719471931457520e-01 8.669588565826416016e-01 1.000000000000000000e+00 -5.419607758522033691e-01 7.495270967483520508e-01 8.656055331230163574e-01 1.000000000000000000e+00 -5.356862545013427734e-01 7.460822463035583496e-01 8.642522096633911133e-01 1.000000000000000000e+00 -5.294117927551269531e-01 7.426374554634094238e-01 8.628988862037658691e-01 1.000000000000000000e+00 -5.231372714042663574e-01 7.391926050186157227e-01 8.615455627441406250e-01 1.000000000000000000e+00 -5.168627500534057617e-01 7.357478141784667969e-01 8.601922392845153809e-01 1.000000000000000000e+00 -5.105882287025451660e-01 7.323029637336730957e-01 8.588389158248901367e-01 1.000000000000000000e+00 -5.043137073516845703e-01 7.288581132888793945e-01 8.574855923652648926e-01 1.000000000000000000e+00 -4.980392158031463623e-01 7.254133224487304688e-01 8.561322689056396484e-01 1.000000000000000000e+00 -4.917646944522857666e-01 7.219684720039367676e-01 8.547789454460144043e-01 1.000000000000000000e+00 -4.854902029037475586e-01 7.185236215591430664e-01 8.534256219863891602e-01 1.000000000000000000e+00 -4.792156815528869629e-01 7.150788307189941406e-01 8.520722985267639160e-01 1.000000000000000000e+00 -4.729411900043487549e-01 7.116339802742004395e-01 8.507189750671386719e-01 1.000000000000000000e+00 -4.666666686534881592e-01 7.081891298294067383e-01 8.493656516075134277e-01 1.000000000000000000e+00 -4.603921473026275635e-01 7.047443389892578125e-01 8.480123281478881836e-01 1.000000000000000000e+00 -4.541176557540893555e-01 7.012994885444641113e-01 8.466590046882629395e-01 1.000000000000000000e+00 -4.478431344032287598e-01 6.978546977043151855e-01 8.453056812286376953e-01 1.000000000000000000e+00 -4.415686130523681641e-01 6.944098472595214844e-01 8.439522981643676758e-01 1.000000000000000000e+00 -4.352941215038299561e-01 6.909649968147277832e-01 8.425989747047424316e-01 1.000000000000000000e+00 -4.290196001529693604e-01 6.875202059745788574e-01 8.412456512451171875e-01 1.000000000000000000e+00 -4.227451086044311523e-01 6.840753555297851562e-01 8.398923277854919434e-01 1.000000000000000000e+00 -4.170857369899749756e-01 6.806305050849914551e-01 8.382314443588256836e-01 1.000000000000000000e+00 -4.120415151119232178e-01 6.771857142448425293e-01 8.362630009651184082e-01 1.000000000000000000e+00 -4.069973230361938477e-01 6.737408638000488281e-01 8.342944979667663574e-01 1.000000000000000000e+00 -4.019531011581420898e-01 6.702960133552551270e-01 8.323260545730590820e-01 1.000000000000000000e+00 -3.969088792800903320e-01 6.668512225151062012e-01 8.303575515747070312e-01 1.000000000000000000e+00 -3.918646574020385742e-01 6.634063720703125000e-01 8.283891081809997559e-01 1.000000000000000000e+00 -3.868204653263092041e-01 6.599615812301635742e-01 8.264206051826477051e-01 1.000000000000000000e+00 -3.817762434482574463e-01 6.565167307853698730e-01 8.244521617889404297e-01 1.000000000000000000e+00 -3.767320215702056885e-01 6.530718803405761719e-01 8.224836587905883789e-01 1.000000000000000000e+00 -3.716877996921539307e-01 6.496270895004272461e-01 8.205152153968811035e-01 1.000000000000000000e+00 -3.666436076164245605e-01 6.461822390556335449e-01 8.185467123985290527e-01 1.000000000000000000e+00 -3.615993857383728027e-01 6.427373886108398438e-01 8.165782094001770020e-01 1.000000000000000000e+00 -3.565551638603210449e-01 6.392925977706909180e-01 8.146097660064697266e-01 1.000000000000000000e+00 -3.515109717845916748e-01 6.358477473258972168e-01 8.126412630081176758e-01 1.000000000000000000e+00 -3.464667499065399170e-01 6.324028968811035156e-01 8.106728196144104004e-01 1.000000000000000000e+00 -3.414225280284881592e-01 6.289581060409545898e-01 8.087043166160583496e-01 1.000000000000000000e+00 -3.363783061504364014e-01 6.255132555961608887e-01 8.067358732223510742e-01 1.000000000000000000e+00 -3.313341140747070312e-01 6.220684647560119629e-01 8.047673702239990234e-01 1.000000000000000000e+00 -3.262898921966552734e-01 6.186236143112182617e-01 8.027989268302917480e-01 1.000000000000000000e+00 -3.212456703186035156e-01 6.151787638664245605e-01 8.008304238319396973e-01 1.000000000000000000e+00 -3.162014484405517578e-01 6.117339730262756348e-01 7.988619804382324219e-01 1.000000000000000000e+00 -3.111572563648223877e-01 6.082891225814819336e-01 7.968934774398803711e-01 1.000000000000000000e+00 -3.061130344867706299e-01 6.048442721366882324e-01 7.949250340461730957e-01 1.000000000000000000e+00 -3.010688126087188721e-01 6.013994812965393066e-01 7.929565310478210449e-01 1.000000000000000000e+00 -2.960246205329895020e-01 5.979546308517456055e-01 7.909880876541137695e-01 1.000000000000000000e+00 -2.909803986549377441e-01 5.945097804069519043e-01 7.890195846557617188e-01 1.000000000000000000e+00 -2.859361767768859863e-01 5.910649895668029785e-01 7.870511412620544434e-01 1.000000000000000000e+00 -2.808919548988342285e-01 5.876201391220092773e-01 7.850826382637023926e-01 1.000000000000000000e+00 -2.758477628231048584e-01 5.841752886772155762e-01 7.831141948699951172e-01 1.000000000000000000e+00 -2.708035409450531006e-01 5.807304978370666504e-01 7.811456918716430664e-01 1.000000000000000000e+00 -2.657593190670013428e-01 5.772856473922729492e-01 7.791772484779357910e-01 1.000000000000000000e+00 -2.607150971889495850e-01 5.738408565521240234e-01 7.772087454795837402e-01 1.000000000000000000e+00 -2.562860548496246338e-01 5.700115561485290527e-01 7.751634120941162109e-01 1.000000000000000000e+00 -2.522260546684265137e-01 5.659515857696533203e-01 7.730718851089477539e-01 1.000000000000000000e+00 -2.481660842895507812e-01 5.618915557861328125e-01 7.709804177284240723e-01 1.000000000000000000e+00 -2.441061139106750488e-01 5.578315854072570801e-01 7.688888907432556152e-01 1.000000000000000000e+00 -2.400461435317993164e-01 5.537716150283813477e-01 7.667973637580871582e-01 1.000000000000000000e+00 -2.359861582517623901e-01 5.497116446495056152e-01 7.647058963775634766e-01 1.000000000000000000e+00 -2.319261878728866577e-01 5.456516742706298828e-01 7.626143693923950195e-01 1.000000000000000000e+00 -2.278662025928497314e-01 5.415917038917541504e-01 7.605229020118713379e-01 1.000000000000000000e+00 -2.238062322139739990e-01 5.375317335128784180e-01 7.584313750267028809e-01 1.000000000000000000e+00 -2.197462469339370728e-01 5.334717631340026855e-01 7.563398480415344238e-01 1.000000000000000000e+00 -2.156862765550613403e-01 5.294117927551269531e-01 7.542483806610107422e-01 1.000000000000000000e+00 -2.116262912750244141e-01 5.253517627716064453e-01 7.521568536758422852e-01 1.000000000000000000e+00 -2.075663208961486816e-01 5.212917923927307129e-01 7.500653862953186035e-01 1.000000000000000000e+00 -2.035063505172729492e-01 5.172318220138549805e-01 7.479738593101501465e-01 1.000000000000000000e+00 -1.994463652372360229e-01 5.131718516349792480e-01 7.458823323249816895e-01 1.000000000000000000e+00 -1.953863948583602905e-01 5.091118812561035156e-01 7.437908649444580078e-01 1.000000000000000000e+00 -1.913264095783233643e-01 5.050519108772277832e-01 7.416993379592895508e-01 1.000000000000000000e+00 -1.872664391994476318e-01 5.009919404983520508e-01 7.396078705787658691e-01 1.000000000000000000e+00 -1.832064539194107056e-01 4.969319403171539307e-01 7.375163435935974121e-01 1.000000000000000000e+00 -1.791464835405349731e-01 4.928719699382781982e-01 7.354248166084289551e-01 1.000000000000000000e+00 -1.750864982604980469e-01 4.888119995594024658e-01 7.333333492279052734e-01 1.000000000000000000e+00 -1.710265278816223145e-01 4.847520291805267334e-01 7.312418222427368164e-01 1.000000000000000000e+00 -1.669665575027465820e-01 4.806920289993286133e-01 7.291503548622131348e-01 1.000000000000000000e+00 -1.629065722227096558e-01 4.766320586204528809e-01 7.270588278770446777e-01 1.000000000000000000e+00 -1.588466018438339233e-01 4.725720882415771484e-01 7.249673008918762207e-01 1.000000000000000000e+00 -1.547866165637969971e-01 4.685121178627014160e-01 7.228758335113525391e-01 1.000000000000000000e+00 -1.507266461849212646e-01 4.644521474838256836e-01 7.207843065261840820e-01 1.000000000000000000e+00 -1.466666609048843384e-01 4.603921473026275635e-01 7.186928391456604004e-01 1.000000000000000000e+00 -1.426066905260086060e-01 4.563321769237518311e-01 7.166013121604919434e-01 1.000000000000000000e+00 -1.385467201471328735e-01 4.522722065448760986e-01 7.145097851753234863e-01 1.000000000000000000e+00 -1.344867348670959473e-01 4.482122361660003662e-01 7.124183177947998047e-01 1.000000000000000000e+00 -1.304267644882202148e-01 4.441522359848022461e-01 7.103267908096313477e-01 1.000000000000000000e+00 -1.271049529314041138e-01 4.401845335960388184e-01 7.074971199035644531e-01 1.000000000000000000e+00 -1.240292191505432129e-01 4.362475872039794922e-01 7.044214010238647461e-01 1.000000000000000000e+00 -1.209534779191017151e-01 4.323106408119201660e-01 7.013456225395202637e-01 1.000000000000000000e+00 -1.178777366876602173e-01 4.283736944198608398e-01 6.982699036598205566e-01 1.000000000000000000e+00 -1.148020029067993164e-01 4.244367480278015137e-01 6.951941847801208496e-01 1.000000000000000000e+00 -1.117262616753578186e-01 4.204998016357421875e-01 6.921184062957763672e-01 1.000000000000000000e+00 -1.086505204439163208e-01 4.165628552436828613e-01 6.890426874160766602e-01 1.000000000000000000e+00 -1.055747792124748230e-01 4.126259088516235352e-01 6.859669089317321777e-01 1.000000000000000000e+00 -1.024990379810333252e-01 4.086889624595642090e-01 6.828911900520324707e-01 1.000000000000000000e+00 -9.942329674959182739e-02 4.047520160675048828e-01 6.798154711723327637e-01 1.000000000000000000e+00 -9.634755551815032959e-02 4.008150696754455566e-01 6.767396926879882812e-01 1.000000000000000000e+00 -9.327182173728942871e-02 3.968781232833862305e-01 6.736639738082885742e-01 1.000000000000000000e+00 -9.019608050584793091e-02 3.929411768913269043e-01 6.705882549285888672e-01 1.000000000000000000e+00 -8.712033927440643311e-02 3.890042304992675781e-01 6.675124764442443848e-01 1.000000000000000000e+00 -8.404459804296493530e-02 3.850672841072082520e-01 6.644367575645446777e-01 1.000000000000000000e+00 -8.096885681152343750e-02 3.811303377151489258e-01 6.613610386848449707e-01 1.000000000000000000e+00 -7.789311558008193970e-02 3.771933913230895996e-01 6.582852602005004883e-01 1.000000000000000000e+00 -7.481737434864044189e-02 3.732564449310302734e-01 6.552095413208007812e-01 1.000000000000000000e+00 -7.174164056777954102e-02 3.693194985389709473e-01 6.521338224411010742e-01 1.000000000000000000e+00 -6.866589933633804321e-02 3.653825521469116211e-01 6.490580439567565918e-01 1.000000000000000000e+00 -6.559015810489654541e-02 3.614456057548522949e-01 6.459823250770568848e-01 1.000000000000000000e+00 -6.251441687345504761e-02 3.575086593627929688e-01 6.429065465927124023e-01 1.000000000000000000e+00 -5.943867564201354980e-02 3.535717129707336426e-01 6.398308277130126953e-01 1.000000000000000000e+00 -5.636293813586235046e-02 3.496347665786743164e-01 6.367551088333129883e-01 1.000000000000000000e+00 -5.328719690442085266e-02 3.456978201866149902e-01 6.336793303489685059e-01 1.000000000000000000e+00 -5.021145567297935486e-02 3.417608737945556641e-01 6.306036114692687988e-01 1.000000000000000000e+00 -4.713571816682815552e-02 3.378239274024963379e-01 6.275278925895690918e-01 1.000000000000000000e+00 -4.405997693538665771e-02 3.338869810104370117e-01 6.244521141052246094e-01 1.000000000000000000e+00 -4.098423570394515991e-02 3.299500048160552979e-01 6.213763952255249023e-01 1.000000000000000000e+00 -3.790849819779396057e-02 3.260130584239959717e-01 6.183006763458251953e-01 1.000000000000000000e+00 -3.483275696635246277e-02 3.220761120319366455e-01 6.152248978614807129e-01 1.000000000000000000e+00 -3.175701573491096497e-02 3.181391656398773193e-01 6.121491789817810059e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.140945732593536377e-01 6.064898371696472168e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.100346028804779053e-01 6.004613637924194336e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.059746325016021729e-01 5.944328904151916504e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.019146621227264404e-01 5.884044766426086426e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.978546619415283203e-01 5.823760032653808594e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.937946915626525879e-01 5.763475298881530762e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.897347211837768555e-01 5.703191161155700684e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.856747508049011230e-01 5.642906427383422852e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.816147506237030029e-01 5.582622289657592773e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.775547802448272705e-01 5.522337555885314941e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.734948098659515381e-01 5.462052822113037109e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.694348394870758057e-01 5.401768684387207031e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.653748691082000732e-01 5.341483950614929199e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.613148689270019531e-01 5.281199812889099121e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.572548985481262207e-01 5.220915079116821289e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.531949281692504883e-01 5.160630345344543457e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.491349428892135620e-01 5.100346207618713379e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.450749725103378296e-01 5.040061473846435547e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.410149872303009033e-01 4.979777038097381592e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.369550168514251709e-01 4.919492602348327637e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.328950464725494385e-01 4.859207868576049805e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.288350611925125122e-01 4.798923432826995850e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.247750908136367798e-01 4.738638997077941895e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.207151055335998535e-01 4.678354561328887939e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.166551351547241211e-01 4.618069827556610107e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.125951498746871948e-01 4.557785391807556152e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.085351794958114624e-01 4.497500956058502197e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.044752091169357300e-01 4.437216520309448242e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.004152238368988037e-01 4.376932084560394287e-01 1.000000000000000000e+00 -3.137255087494850159e-02 1.963552534580230713e-01 4.316647350788116455e-01 1.000000000000000000e+00 -3.137255087494850159e-02 1.922952681779861450e-01 4.256362915039062500e-01 1.000000000000000000e+00 -3.137255087494850159e-02 1.882352977991104126e-01 4.196078479290008545e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/BrBG b/fastplotlib/utils/colormaps/BrBG deleted file mode 100644 index b737a5d04..000000000 --- a/fastplotlib/utils/colormaps/BrBG +++ /dev/null @@ -1,256 +0,0 @@ -3.294117748737335205e-01 1.882352977991104126e-01 1.960784383118152618e-02 1.000000000000000000e+00 -3.380238413810729980e-01 1.933102607727050781e-01 2.037677727639675140e-02 1.000000000000000000e+00 -3.466359078884124756e-01 1.983852386474609375e-01 2.114571258425712585e-02 1.000000000000000000e+00 -3.552479743957519531e-01 2.034602016210556030e-01 2.191464789211750031e-02 1.000000000000000000e+00 -3.638600409030914307e-01 2.085351794958114624e-01 2.268358319997787476e-02 1.000000000000000000e+00 -3.724721372127532959e-01 2.136101573705673218e-01 2.345251850783824921e-02 1.000000000000000000e+00 -3.810842037200927734e-01 2.186851203441619873e-01 2.422145381569862366e-02 1.000000000000000000e+00 -3.896962702274322510e-01 2.237600982189178467e-01 2.499038912355899811e-02 1.000000000000000000e+00 -3.983083367347717285e-01 2.288350611925125122e-01 2.575932256877422333e-02 1.000000000000000000e+00 -4.069204032421112061e-01 2.339100390672683716e-01 2.652825787663459778e-02 1.000000000000000000e+00 -4.155324995517730713e-01 2.389850020408630371e-01 2.729719318449497223e-02 1.000000000000000000e+00 -4.241445660591125488e-01 2.440599799156188965e-01 2.806612849235534668e-02 1.000000000000000000e+00 -4.327566325664520264e-01 2.491349428892135620e-01 2.883506380021572113e-02 1.000000000000000000e+00 -4.413686990737915039e-01 2.542099058628082275e-01 2.960399910807609558e-02 1.000000000000000000e+00 -4.499807655811309814e-01 2.592848837375640869e-01 3.037293441593647003e-02 1.000000000000000000e+00 -4.585928618907928467e-01 2.643598616123199463e-01 3.114186786115169525e-02 1.000000000000000000e+00 -4.672049283981323242e-01 2.694348394870758057e-01 3.191080316901206970e-02 1.000000000000000000e+00 -4.758169949054718018e-01 2.745098173618316650e-01 3.267974033951759338e-02 1.000000000000000000e+00 -4.844290614128112793e-01 2.795847654342651367e-01 3.344867378473281860e-02 1.000000000000000000e+00 -4.930411279201507568e-01 2.846597433090209961e-01 3.421760722994804382e-02 1.000000000000000000e+00 -5.016531944274902344e-01 2.897347211837768555e-01 3.498654440045356750e-02 1.000000000000000000e+00 -5.102652907371520996e-01 2.948096990585327148e-01 3.575547784566879272e-02 1.000000000000000000e+00 -5.188773274421691895e-01 2.998846471309661865e-01 3.652441501617431641e-02 1.000000000000000000e+00 -5.274894237518310547e-01 3.049596250057220459e-01 3.729334846138954163e-02 1.000000000000000000e+00 -5.361015200614929199e-01 3.100346028804779053e-01 3.806228190660476685e-02 1.000000000000000000e+00 -5.447135567665100098e-01 3.151095807552337646e-01 3.883121907711029053e-02 1.000000000000000000e+00 -5.529412031173706055e-01 3.213379383087158203e-01 4.190696030855178833e-02 1.000000000000000000e+00 -5.607843399047851562e-01 3.287197351455688477e-01 4.728950560092926025e-02 1.000000000000000000e+00 -5.686274766921997070e-01 3.361015021800994873e-01 5.267205089330673218e-02 1.000000000000000000e+00 -5.764706134796142578e-01 3.434832692146301270e-01 5.805459618568420410e-02 1.000000000000000000e+00 -5.843137502670288086e-01 3.508650660514831543e-01 6.343714147806167603e-02 1.000000000000000000e+00 -5.921568870544433594e-01 3.582468330860137939e-01 6.881968677043914795e-02 1.000000000000000000e+00 -6.000000238418579102e-01 3.656286001205444336e-01 7.420223206281661987e-02 1.000000000000000000e+00 -6.078431606292724609e-01 3.730103671550750732e-01 7.958477735519409180e-02 1.000000000000000000e+00 -6.156862974166870117e-01 3.803921639919281006e-01 8.496732264757156372e-02 1.000000000000000000e+00 -6.235294342041015625e-01 3.877739310264587402e-01 9.034986793994903564e-02 1.000000000000000000e+00 -6.313725709915161133e-01 3.951556980609893799e-01 9.573241323232650757e-02 1.000000000000000000e+00 -6.392157077789306641e-01 4.025374948978424072e-01 1.011149585247039795e-01 1.000000000000000000e+00 -6.470588445663452148e-01 4.099192619323730469e-01 1.064975038170814514e-01 1.000000000000000000e+00 -6.549019813537597656e-01 4.173010289669036865e-01 1.118800491094589233e-01 1.000000000000000000e+00 -6.627451181411743164e-01 4.246828258037567139e-01 1.172625944018363953e-01 1.000000000000000000e+00 -6.705882549285888672e-01 4.320645928382873535e-01 1.226451396942138672e-01 1.000000000000000000e+00 -6.784313917160034180e-01 4.394463598728179932e-01 1.280276775360107422e-01 1.000000000000000000e+00 -6.862745285034179688e-01 4.468281567096710205e-01 1.334102302789688110e-01 1.000000000000000000e+00 -6.941176652908325195e-01 4.542099237442016602e-01 1.387927681207656860e-01 1.000000000000000000e+00 -7.019608020782470703e-01 4.615916907787322998e-01 1.441753208637237549e-01 1.000000000000000000e+00 -7.098039388656616211e-01 4.689734578132629395e-01 1.495578587055206299e-01 1.000000000000000000e+00 -7.176470756530761719e-01 4.763552546501159668e-01 1.549404114484786987e-01 1.000000000000000000e+00 -7.254902124404907227e-01 4.837370216846466064e-01 1.603229492902755737e-01 1.000000000000000000e+00 -7.333333492279052734e-01 4.911187887191772461e-01 1.657055020332336426e-01 1.000000000000000000e+00 -7.411764860153198242e-01 4.985005855560302734e-01 1.710880398750305176e-01 1.000000000000000000e+00 -7.490196228027343750e-01 5.058823823928833008e-01 1.764705926179885864e-01 1.000000000000000000e+00 -7.539408206939697266e-01 5.158784985542297363e-01 1.887735426425933838e-01 1.000000000000000000e+00 -7.588619589805603027e-01 5.258746743202209473e-01 2.010765075683593750e-01 1.000000000000000000e+00 -7.637831568717956543e-01 5.358707904815673828e-01 2.133794724941253662e-01 1.000000000000000000e+00 -7.687043547630310059e-01 5.458669662475585938e-01 2.256824225187301636e-01 1.000000000000000000e+00 -7.736255526542663574e-01 5.558631420135498047e-01 2.379853874444961548e-01 1.000000000000000000e+00 -7.785466909408569336e-01 5.658592581748962402e-01 2.502883374691009521e-01 1.000000000000000000e+00 -7.834678888320922852e-01 5.758554339408874512e-01 2.625913023948669434e-01 1.000000000000000000e+00 -7.883890867233276367e-01 5.858516097068786621e-01 2.748942673206329346e-01 1.000000000000000000e+00 -7.933102846145629883e-01 5.958477258682250977e-01 2.871972322463989258e-01 1.000000000000000000e+00 -7.982314229011535645e-01 6.058439016342163086e-01 2.995001971721649170e-01 1.000000000000000000e+00 -8.031526207923889160e-01 6.158400774002075195e-01 3.118031620979309082e-01 1.000000000000000000e+00 -8.080738186836242676e-01 6.258361935615539551e-01 3.241061270236968994e-01 1.000000000000000000e+00 -8.129950165748596191e-01 6.358323693275451660e-01 3.364090621471405029e-01 1.000000000000000000e+00 -8.179162144660949707e-01 6.458285450935363770e-01 3.487120270729064941e-01 1.000000000000000000e+00 -8.228373527526855469e-01 6.558246612548828125e-01 3.610149919986724854e-01 1.000000000000000000e+00 -8.277585506439208984e-01 6.658208370208740234e-01 3.733179569244384766e-01 1.000000000000000000e+00 -8.326797485351562500e-01 6.758170127868652344e-01 3.856209218502044678e-01 1.000000000000000000e+00 -8.376009464263916016e-01 6.858131289482116699e-01 3.979238867759704590e-01 1.000000000000000000e+00 -8.425220847129821777e-01 6.958093047142028809e-01 4.102268218994140625e-01 1.000000000000000000e+00 -8.474432826042175293e-01 7.058054804801940918e-01 4.225297868251800537e-01 1.000000000000000000e+00 -8.523644804954528809e-01 7.158015966415405273e-01 4.348327517509460449e-01 1.000000000000000000e+00 -8.572856783866882324e-01 7.257977724075317383e-01 4.471357166767120361e-01 1.000000000000000000e+00 -8.622068166732788086e-01 7.357939481735229492e-01 4.594386816024780273e-01 1.000000000000000000e+00 -8.671280145645141602e-01 7.457900643348693848e-01 4.717416465282440186e-01 1.000000000000000000e+00 -8.720492124557495117e-01 7.557862401008605957e-01 4.840446114540100098e-01 1.000000000000000000e+00 -8.762783408164978027e-01 7.637062668800354004e-01 4.955786168575286865e-01 1.000000000000000000e+00 -8.798154592514038086e-01 7.695501446723937988e-01 5.063437223434448242e-01 1.000000000000000000e+00 -8.833525776863098145e-01 7.753940820693969727e-01 5.171087980270385742e-01 1.000000000000000000e+00 -8.868896365165710449e-01 7.812379598617553711e-01 5.278738737106323242e-01 1.000000000000000000e+00 -8.904267549514770508e-01 7.870818972587585449e-01 5.386390089988708496e-01 1.000000000000000000e+00 -8.939638733863830566e-01 7.929257750511169434e-01 5.494040846824645996e-01 1.000000000000000000e+00 -8.975009322166442871e-01 7.987697124481201172e-01 5.601691603660583496e-01 1.000000000000000000e+00 -9.010380506515502930e-01 8.046135902404785156e-01 5.709342360496520996e-01 1.000000000000000000e+00 -9.045751690864562988e-01 8.104575276374816895e-01 5.816993713378906250e-01 1.000000000000000000e+00 -9.081122875213623047e-01 8.163014054298400879e-01 5.924644470214843750e-01 1.000000000000000000e+00 -9.116493463516235352e-01 8.221453428268432617e-01 6.032295227050781250e-01 1.000000000000000000e+00 -9.151864647865295410e-01 8.279892206192016602e-01 6.139945983886718750e-01 1.000000000000000000e+00 -9.187235832214355469e-01 8.338331580162048340e-01 6.247597336769104004e-01 1.000000000000000000e+00 -9.222606420516967773e-01 8.396770358085632324e-01 6.355248093605041504e-01 1.000000000000000000e+00 -9.257977604866027832e-01 8.455209732055664062e-01 6.462898850440979004e-01 1.000000000000000000e+00 -9.293348789215087891e-01 8.513648509979248047e-01 6.570549607276916504e-01 1.000000000000000000e+00 -9.328719973564147949e-01 8.572087883949279785e-01 6.678200960159301758e-01 1.000000000000000000e+00 -9.364090561866760254e-01 8.630526661872863770e-01 6.785851716995239258e-01 1.000000000000000000e+00 -9.399461746215820312e-01 8.688966035842895508e-01 6.893502473831176758e-01 1.000000000000000000e+00 -9.434832930564880371e-01 8.747404813766479492e-01 7.001153230667114258e-01 1.000000000000000000e+00 -9.470203518867492676e-01 8.805844187736511230e-01 7.108804583549499512e-01 1.000000000000000000e+00 -9.505574703216552734e-01 8.864282965660095215e-01 7.216455340385437012e-01 1.000000000000000000e+00 -9.540945887565612793e-01 8.922721743583679199e-01 7.324106097221374512e-01 1.000000000000000000e+00 -9.576317071914672852e-01 8.981161117553710938e-01 7.431756854057312012e-01 1.000000000000000000e+00 -9.611687660217285156e-01 9.039599895477294922e-01 7.539408206939697266e-01 1.000000000000000000e+00 -9.647058844566345215e-01 9.098039269447326660e-01 7.647058963775634766e-01 1.000000000000000000e+00 -9.645521044731140137e-01 9.118031263351440430e-01 7.723952531814575195e-01 1.000000000000000000e+00 -9.643983244895935059e-01 9.138023853302001953e-01 7.800846099853515625e-01 1.000000000000000000e+00 -9.642445445060729980e-01 9.158016443252563477e-01 7.877739071846008301e-01 1.000000000000000000e+00 -9.640907049179077148e-01 9.178008437156677246e-01 7.954632639884948730e-01 1.000000000000000000e+00 -9.639369249343872070e-01 9.198001027107238770e-01 8.031526207923889160e-01 1.000000000000000000e+00 -9.637831449508666992e-01 9.217993021011352539e-01 8.108419775962829590e-01 1.000000000000000000e+00 -9.636293649673461914e-01 9.237985610961914062e-01 8.185313344001770020e-01 1.000000000000000000e+00 -9.634755849838256836e-01 9.257977604866027832e-01 8.262206912040710449e-01 1.000000000000000000e+00 -9.633218050003051758e-01 9.277970194816589355e-01 8.339100480079650879e-01 1.000000000000000000e+00 -9.631680250167846680e-01 9.297962188720703125e-01 8.415994048118591309e-01 1.000000000000000000e+00 -9.630142450332641602e-01 9.317954778671264648e-01 8.492887616157531738e-01 1.000000000000000000e+00 -9.628604650497436523e-01 9.337946772575378418e-01 8.569780588150024414e-01 1.000000000000000000e+00 -9.627066254615783691e-01 9.357939362525939941e-01 8.646674156188964844e-01 1.000000000000000000e+00 -9.625528454780578613e-01 9.377931356430053711e-01 8.723567724227905273e-01 1.000000000000000000e+00 -9.623990654945373535e-01 9.397923946380615234e-01 8.800461292266845703e-01 1.000000000000000000e+00 -9.622452855110168457e-01 9.417915940284729004e-01 8.877354860305786133e-01 1.000000000000000000e+00 -9.620915055274963379e-01 9.437908530235290527e-01 8.954248428344726562e-01 1.000000000000000000e+00 -9.619377255439758301e-01 9.457900524139404297e-01 9.031141996383666992e-01 1.000000000000000000e+00 -9.617839455604553223e-01 9.477893114089965820e-01 9.108035564422607422e-01 1.000000000000000000e+00 -9.616301655769348145e-01 9.497885704040527344e-01 9.184929132461547852e-01 1.000000000000000000e+00 -9.614763259887695312e-01 9.517877697944641113e-01 9.261822104454040527e-01 1.000000000000000000e+00 -9.613225460052490234e-01 9.537870287895202637e-01 9.338715672492980957e-01 1.000000000000000000e+00 -9.611687660217285156e-01 9.557862281799316406e-01 9.415609240531921387e-01 1.000000000000000000e+00 -9.610149860382080078e-01 9.577854871749877930e-01 9.492502808570861816e-01 1.000000000000000000e+00 -9.608612060546875000e-01 9.597846865653991699e-01 9.569396376609802246e-01 1.000000000000000000e+00 -9.572471976280212402e-01 9.599384665489196777e-01 9.595540165901184082e-01 1.000000000000000000e+00 -9.501730203628540039e-01 9.582468271255493164e-01 9.570934176445007324e-01 1.000000000000000000e+00 -9.430987834930419922e-01 9.565551877021789551e-01 9.546328186988830566e-01 1.000000000000000000e+00 -9.360246062278747559e-01 9.548634886741638184e-01 9.521722197532653809e-01 1.000000000000000000e+00 -9.289504289627075195e-01 9.531718492507934570e-01 9.497116208076477051e-01 1.000000000000000000e+00 -9.218761920928955078e-01 9.514802098274230957e-01 9.472510814666748047e-01 1.000000000000000000e+00 -9.148020148277282715e-01 9.497885704040527344e-01 9.447904825210571289e-01 1.000000000000000000e+00 -9.077277779579162598e-01 9.480968713760375977e-01 9.423298835754394531e-01 1.000000000000000000e+00 -9.006536006927490234e-01 9.464052319526672363e-01 9.398692846298217773e-01 1.000000000000000000e+00 -8.935793638229370117e-01 9.447135925292968750e-01 9.374086856842041016e-01 1.000000000000000000e+00 -8.865051865577697754e-01 9.430218935012817383e-01 9.349480867385864258e-01 1.000000000000000000e+00 -8.794310092926025391e-01 9.413302540779113770e-01 9.324874877929687500e-01 1.000000000000000000e+00 -8.723567724227905273e-01 9.396386146545410156e-01 9.300268888473510742e-01 1.000000000000000000e+00 -8.652825951576232910e-01 9.379469156265258789e-01 9.275663495063781738e-01 1.000000000000000000e+00 -8.582083582878112793e-01 9.362552762031555176e-01 9.251057505607604980e-01 1.000000000000000000e+00 -8.511341810226440430e-01 9.345636367797851562e-01 9.226451516151428223e-01 1.000000000000000000e+00 -8.440600037574768066e-01 9.328719973564147949e-01 9.201845526695251465e-01 1.000000000000000000e+00 -8.369857668876647949e-01 9.311802983283996582e-01 9.177239537239074707e-01 1.000000000000000000e+00 -8.299115896224975586e-01 9.294886589050292969e-01 9.152633547782897949e-01 1.000000000000000000e+00 -8.228373527526855469e-01 9.277970194816589355e-01 9.128027558326721191e-01 1.000000000000000000e+00 -8.157631754875183105e-01 9.261053204536437988e-01 9.103421568870544434e-01 1.000000000000000000e+00 -8.086889386177062988e-01 9.244136810302734375e-01 9.078815579414367676e-01 1.000000000000000000e+00 -8.016147613525390625e-01 9.227220416069030762e-01 9.054210186004638672e-01 1.000000000000000000e+00 -7.945405840873718262e-01 9.210304021835327148e-01 9.029604196548461914e-01 1.000000000000000000e+00 -7.874663472175598145e-01 9.193387031555175781e-01 9.004998207092285156e-01 1.000000000000000000e+00 -7.803921699523925781e-01 9.176470637321472168e-01 8.980392217636108398e-01 1.000000000000000000e+00 -7.694732546806335449e-01 9.131872653961181641e-01 8.925029039382934570e-01 1.000000000000000000e+00 -7.585543990135192871e-01 9.087274074554443359e-01 8.869665265083312988e-01 1.000000000000000000e+00 -7.476355433464050293e-01 9.042676091194152832e-01 8.814302086830139160e-01 1.000000000000000000e+00 -7.367166280746459961e-01 8.998077511787414551e-01 8.758938908576965332e-01 1.000000000000000000e+00 -7.257977724075317383e-01 8.953479528427124023e-01 8.703575730323791504e-01 1.000000000000000000e+00 -7.148789167404174805e-01 8.908880949020385742e-01 8.648211956024169922e-01 1.000000000000000000e+00 -7.039600014686584473e-01 8.864282965660095215e-01 8.592848777770996094e-01 1.000000000000000000e+00 -6.930411458015441895e-01 8.819684982299804688e-01 8.537485599517822266e-01 1.000000000000000000e+00 -6.821222901344299316e-01 8.775086402893066406e-01 8.482122421264648438e-01 1.000000000000000000e+00 -6.712033748626708984e-01 8.730488419532775879e-01 8.426758646965026855e-01 1.000000000000000000e+00 -6.602845191955566406e-01 8.685889840126037598e-01 8.371395468711853027e-01 1.000000000000000000e+00 -6.493656039237976074e-01 8.641291856765747070e-01 8.316032290458679199e-01 1.000000000000000000e+00 -6.384467482566833496e-01 8.596693873405456543e-01 8.260669112205505371e-01 1.000000000000000000e+00 -6.275278925895690918e-01 8.552095293998718262e-01 8.205305933952331543e-01 1.000000000000000000e+00 -6.166089773178100586e-01 8.507497310638427734e-01 8.149942159652709961e-01 1.000000000000000000e+00 -6.056901216506958008e-01 8.462898731231689453e-01 8.094578981399536133e-01 1.000000000000000000e+00 -5.947712659835815430e-01 8.418300747871398926e-01 8.039215803146362305e-01 1.000000000000000000e+00 -5.838523507118225098e-01 8.373702168464660645e-01 7.983852624893188477e-01 1.000000000000000000e+00 -5.729334950447082520e-01 8.329104185104370117e-01 7.928488850593566895e-01 1.000000000000000000e+00 -5.620146393775939941e-01 8.284506201744079590e-01 7.873125672340393066e-01 1.000000000000000000e+00 -5.510957241058349609e-01 8.239907622337341309e-01 7.817762494087219238e-01 1.000000000000000000e+00 -5.401768684387207031e-01 8.195309638977050781e-01 7.762399315834045410e-01 1.000000000000000000e+00 -5.292579531669616699e-01 8.150711059570312500e-01 7.707035541534423828e-01 1.000000000000000000e+00 -5.183390974998474121e-01 8.106113076210021973e-01 7.651672363281250000e-01 1.000000000000000000e+00 -5.074202418327331543e-01 8.061515092849731445e-01 7.596309185028076172e-01 1.000000000000000000e+00 -4.961937665939331055e-01 7.997693419456481934e-01 7.530180811882019043e-01 1.000000000000000000e+00 -4.846597313880920410e-01 7.914648056030273438e-01 7.453287243843078613e-01 1.000000000000000000e+00 -4.731257259845733643e-01 7.831603288650512695e-01 7.376393675804138184e-01 1.000000000000000000e+00 -4.615916907787322998e-01 7.748558521270751953e-01 7.299500107765197754e-01 1.000000000000000000e+00 -4.500576555728912354e-01 7.665513157844543457e-01 7.222606539726257324e-01 1.000000000000000000e+00 -4.385236501693725586e-01 7.582468390464782715e-01 7.145712971687316895e-01 1.000000000000000000e+00 -4.269896149635314941e-01 7.499423027038574219e-01 7.068819403648376465e-01 1.000000000000000000e+00 -4.154555797576904297e-01 7.416378259658813477e-01 6.991926431655883789e-01 1.000000000000000000e+00 -4.039215743541717529e-01 7.333333492279052734e-01 6.915032863616943359e-01 1.000000000000000000e+00 -3.923875391483306885e-01 7.250288128852844238e-01 6.838139295578002930e-01 1.000000000000000000e+00 -3.808535039424896240e-01 7.167243361473083496e-01 6.761245727539062500e-01 1.000000000000000000e+00 -3.693194985389709473e-01 7.084198594093322754e-01 6.684352159500122070e-01 1.000000000000000000e+00 -3.577854633331298828e-01 7.001153230667114258e-01 6.607458591461181641e-01 1.000000000000000000e+00 -3.462514281272888184e-01 6.918108463287353516e-01 6.530565023422241211e-01 1.000000000000000000e+00 -3.347174227237701416e-01 6.835063695907592773e-01 6.453671455383300781e-01 1.000000000000000000e+00 -3.231833875179290771e-01 6.752018332481384277e-01 6.376777887344360352e-01 1.000000000000000000e+00 -3.116493523120880127e-01 6.668973565101623535e-01 6.299884915351867676e-01 1.000000000000000000e+00 -3.001153469085693359e-01 6.585928201675415039e-01 6.222991347312927246e-01 1.000000000000000000e+00 -2.885813117027282715e-01 6.502883434295654297e-01 6.146097779273986816e-01 1.000000000000000000e+00 -2.770472764968872070e-01 6.419838666915893555e-01 6.069204211235046387e-01 1.000000000000000000e+00 -2.655132710933685303e-01 6.336793303489685059e-01 5.992310643196105957e-01 1.000000000000000000e+00 -2.539792358875274658e-01 6.253748536109924316e-01 5.915417075157165527e-01 1.000000000000000000e+00 -2.424452155828475952e-01 6.170703768730163574e-01 5.838523507118225098e-01 1.000000000000000000e+00 -2.309111952781677246e-01 6.087658405303955078e-01 5.761629939079284668e-01 1.000000000000000000e+00 -2.193771600723266602e-01 6.004613637924194336e-01 5.684736371040344238e-01 1.000000000000000000e+00 -2.078431397676467896e-01 5.921568870544433594e-01 5.607843399047851562e-01 1.000000000000000000e+00 -1.998462080955505371e-01 5.846213102340698242e-01 5.532487630844116211e-01 1.000000000000000000e+00 -1.918492913246154785e-01 5.770857334136962891e-01 5.457131862640380859e-01 1.000000000000000000e+00 -1.838523596525192261e-01 5.695501565933227539e-01 5.381776094436645508e-01 1.000000000000000000e+00 -1.758554428815841675e-01 5.620146393775939941e-01 5.306420326232910156e-01 1.000000000000000000e+00 -1.678585112094879150e-01 5.544790625572204590e-01 5.231065154075622559e-01 1.000000000000000000e+00 -1.598615944385528564e-01 5.469434857368469238e-01 5.155709385871887207e-01 1.000000000000000000e+00 -1.518646627664566040e-01 5.394079089164733887e-01 5.080353617668151855e-01 1.000000000000000000e+00 -1.438677459955215454e-01 5.318723320960998535e-01 5.004997849464416504e-01 1.000000000000000000e+00 -1.358708143234252930e-01 5.243368148803710938e-01 4.929642379283905029e-01 1.000000000000000000e+00 -1.278738975524902344e-01 5.168012380599975586e-01 4.854286909103393555e-01 1.000000000000000000e+00 -1.198769733309745789e-01 5.092656612396240234e-01 4.778931140899658203e-01 1.000000000000000000e+00 -1.118800491094589233e-01 5.017300844192504883e-01 4.703575670719146729e-01 1.000000000000000000e+00 -1.038831248879432678e-01 4.941945374011993408e-01 4.628219902515411377e-01 1.000000000000000000e+00 -9.588620066642761230e-02 4.866589903831481934e-01 4.552864134311676025e-01 1.000000000000000000e+00 -8.788927644491195679e-02 4.791234135627746582e-01 4.477508664131164551e-01 1.000000000000000000e+00 -7.989235222339630127e-02 4.715878367424011230e-01 4.402152895927429199e-01 1.000000000000000000e+00 -7.189542800188064575e-02 4.640522897243499756e-01 4.326797425746917725e-01 1.000000000000000000e+00 -6.389850378036499023e-02 4.565167129039764404e-01 4.251441657543182373e-01 1.000000000000000000e+00 -5.590157583355903625e-02 4.489811658859252930e-01 4.176086187362670898e-01 1.000000000000000000e+00 -4.790465161204338074e-02 4.414455890655517578e-01 4.100730419158935547e-01 1.000000000000000000e+00 -3.990772739052772522e-02 4.339100420475006104e-01 4.025374948978424072e-01 1.000000000000000000e+00 -3.191080316901206970e-02 4.263744652271270752e-01 3.950019180774688721e-01 1.000000000000000000e+00 -2.391387894749641418e-02 4.188389182090759277e-01 3.874663710594177246e-01 1.000000000000000000e+00 -1.591695472598075867e-02 4.113033413887023926e-01 3.799307942390441895e-01 1.000000000000000000e+00 -7.920030504465103149e-03 4.037677943706512451e-01 3.723952472209930420e-01 1.000000000000000000e+00 -3.844675142318010330e-03 3.967704772949218750e-01 3.650903403759002686e-01 1.000000000000000000e+00 -3.690888173878192902e-03 3.903114199638366699e-01 3.580161333084106445e-01 1.000000000000000000e+00 -3.537101205438375473e-03 3.838523626327514648e-01 3.509419560432434082e-01 1.000000000000000000e+00 -3.383314004167914391e-03 3.773933053016662598e-01 3.438677489757537842e-01 1.000000000000000000e+00 -3.229527035728096962e-03 3.709342479705810547e-01 3.367935419082641602e-01 1.000000000000000000e+00 -3.075740067288279533e-03 3.644751906394958496e-01 3.297193348407745361e-01 1.000000000000000000e+00 -2.921953098848462105e-03 3.580161333084106445e-01 3.226451277732849121e-01 1.000000000000000000e+00 -2.768166130408644676e-03 3.515571057796478271e-01 3.155709207057952881e-01 1.000000000000000000e+00 -2.614379161968827248e-03 3.450980484485626221e-01 3.084967434406280518e-01 1.000000000000000000e+00 -2.460592193529009819e-03 3.386389911174774170e-01 3.014225363731384277e-01 1.000000000000000000e+00 -2.306804992258548737e-03 3.321799337863922119e-01 2.943483293056488037e-01 1.000000000000000000e+00 -2.153018023818731308e-03 3.257208764553070068e-01 2.872741222381591797e-01 1.000000000000000000e+00 -1.999231055378913879e-03 3.192618191242218018e-01 2.801999151706695557e-01 1.000000000000000000e+00 -1.845444086939096451e-03 3.128027617931365967e-01 2.731257081031799316e-01 1.000000000000000000e+00 -1.691657002083957195e-03 3.063437044620513916e-01 2.660515308380126953e-01 1.000000000000000000e+00 -1.537870033644139767e-03 2.998846471309661865e-01 2.589773237705230713e-01 1.000000000000000000e+00 -1.384083065204322338e-03 2.934256196022033691e-01 2.519031167030334473e-01 1.000000000000000000e+00 -1.230296096764504910e-03 2.869665622711181641e-01 2.448289096355438232e-01 1.000000000000000000e+00 -1.076509011909365654e-03 2.805075049400329590e-01 2.377547025680541992e-01 1.000000000000000000e+00 -9.227220434695482254e-04 2.740484476089477539e-01 2.306805104017257690e-01 1.000000000000000000e+00 -7.689350168220698833e-04 2.675893902778625488e-01 2.236063033342361450e-01 1.000000000000000000e+00 -6.151480483822524548e-04 2.611303329467773438e-01 2.165320962667465210e-01 1.000000000000000000e+00 -4.613610217347741127e-04 2.546712756156921387e-01 2.094579041004180908e-01 1.000000000000000000e+00 -3.075740241911262274e-04 2.482122331857681274e-01 2.023836970329284668e-01 1.000000000000000000e+00 -1.537870120955631137e-04 2.417531758546829224e-01 1.953094899654388428e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.352941185235977173e-01 1.882352977991104126e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/BuGn b/fastplotlib/utils/colormaps/BuGn deleted file mode 100644 index e7d2c33a6..000000000 --- a/fastplotlib/utils/colormaps/BuGn +++ /dev/null @@ -1,256 +0,0 @@ -9.686274528503417969e-01 9.882352948188781738e-01 9.921568632125854492e-01 1.000000000000000000e+00 -9.664129018783569336e-01 9.873740673065185547e-01 9.916647672653198242e-01 1.000000000000000000e+00 -9.641984105110168457e-01 9.865128993988037109e-01 9.911726117134094238e-01 1.000000000000000000e+00 -9.619838595390319824e-01 9.856516718864440918e-01 9.906805157661437988e-01 1.000000000000000000e+00 -9.597693085670471191e-01 9.847904443740844727e-01 9.901883602142333984e-01 1.000000000000000000e+00 -9.575547575950622559e-01 9.839292764663696289e-01 9.896962642669677734e-01 1.000000000000000000e+00 -9.553402662277221680e-01 9.830680489540100098e-01 9.892041683197021484e-01 1.000000000000000000e+00 -9.531257152557373047e-01 9.822068214416503906e-01 9.887120127677917480e-01 1.000000000000000000e+00 -9.509111642837524414e-01 9.813456535339355469e-01 9.882199168205261230e-01 1.000000000000000000e+00 -9.486966729164123535e-01 9.804844260215759277e-01 9.877278208732604980e-01 1.000000000000000000e+00 -9.464821219444274902e-01 9.796231985092163086e-01 9.872356653213500977e-01 1.000000000000000000e+00 -9.442675709724426270e-01 9.787620306015014648e-01 9.867435693740844727e-01 1.000000000000000000e+00 -9.420530796051025391e-01 9.779008030891418457e-01 9.862514138221740723e-01 1.000000000000000000e+00 -9.398385286331176758e-01 9.770395755767822266e-01 9.857593178749084473e-01 1.000000000000000000e+00 -9.376239776611328125e-01 9.761784076690673828e-01 9.852672219276428223e-01 1.000000000000000000e+00 -9.354094862937927246e-01 9.753171801567077637e-01 9.847750663757324219e-01 1.000000000000000000e+00 -9.331949353218078613e-01 9.744559526443481445e-01 9.842829704284667969e-01 1.000000000000000000e+00 -9.309803843498229980e-01 9.735947847366333008e-01 9.837908744812011719e-01 1.000000000000000000e+00 -9.287658333778381348e-01 9.727335572242736816e-01 9.832987189292907715e-01 1.000000000000000000e+00 -9.265513420104980469e-01 9.718723297119140625e-01 9.828066229820251465e-01 1.000000000000000000e+00 -9.243367910385131836e-01 9.710111618041992188e-01 9.823144674301147461e-01 1.000000000000000000e+00 -9.221222400665283203e-01 9.701499342918395996e-01 9.818223714828491211e-01 1.000000000000000000e+00 -9.199077486991882324e-01 9.692887067794799805e-01 9.813302755355834961e-01 1.000000000000000000e+00 -9.176931977272033691e-01 9.684275388717651367e-01 9.808381199836730957e-01 1.000000000000000000e+00 -9.154786467552185059e-01 9.675663113594055176e-01 9.803460240364074707e-01 1.000000000000000000e+00 -9.132641553878784180e-01 9.667050838470458984e-01 9.798539280891418457e-01 1.000000000000000000e+00 -9.110496044158935547e-01 9.658439159393310547e-01 9.793617725372314453e-01 1.000000000000000000e+00 -9.088350534439086914e-01 9.649826884269714355e-01 9.788696765899658203e-01 1.000000000000000000e+00 -9.066205024719238281e-01 9.641215205192565918e-01 9.783775210380554199e-01 1.000000000000000000e+00 -9.044060111045837402e-01 9.632602930068969727e-01 9.778854250907897949e-01 1.000000000000000000e+00 -9.021914601325988770e-01 9.623990654945373535e-01 9.773933291435241699e-01 1.000000000000000000e+00 -8.999769091606140137e-01 9.615378975868225098e-01 9.769011735916137695e-01 1.000000000000000000e+00 -8.976547718048095703e-01 9.606459140777587891e-01 9.761784076690673828e-01 1.000000000000000000e+00 -8.945789933204650879e-01 9.595386385917663574e-01 9.738408327102661133e-01 1.000000000000000000e+00 -8.915032744407653809e-01 9.584313631057739258e-01 9.715032577514648438e-01 1.000000000000000000e+00 -8.884275555610656738e-01 9.573240876197814941e-01 9.691656827926635742e-01 1.000000000000000000e+00 -8.853517770767211914e-01 9.562168121337890625e-01 9.668281674385070801e-01 1.000000000000000000e+00 -8.822760581970214844e-01 9.551095962524414062e-01 9.644905924797058105e-01 1.000000000000000000e+00 -8.792002797126770020e-01 9.540023207664489746e-01 9.621530175209045410e-01 1.000000000000000000e+00 -8.761245608329772949e-01 9.528950452804565430e-01 9.598154425621032715e-01 1.000000000000000000e+00 -8.730488419532775879e-01 9.517877697944641113e-01 9.574778676033020020e-01 1.000000000000000000e+00 -8.699730634689331055e-01 9.506804943084716797e-01 9.551403522491455078e-01 1.000000000000000000e+00 -8.668973445892333984e-01 9.495732188224792480e-01 9.528027772903442383e-01 1.000000000000000000e+00 -8.638216257095336914e-01 9.484660029411315918e-01 9.504652023315429688e-01 1.000000000000000000e+00 -8.607458472251892090e-01 9.473587274551391602e-01 9.481276273727416992e-01 1.000000000000000000e+00 -8.576701283454895020e-01 9.462514519691467285e-01 9.457900524139404297e-01 1.000000000000000000e+00 -8.545944094657897949e-01 9.451441764831542969e-01 9.434525370597839355e-01 1.000000000000000000e+00 -8.515186309814453125e-01 9.440369009971618652e-01 9.411149621009826660e-01 1.000000000000000000e+00 -8.484429121017456055e-01 9.429296255111694336e-01 9.387773871421813965e-01 1.000000000000000000e+00 -8.453671932220458984e-01 9.418223500251770020e-01 9.364398121833801270e-01 1.000000000000000000e+00 -8.422914147377014160e-01 9.407151341438293457e-01 9.341022968292236328e-01 1.000000000000000000e+00 -8.392156958580017090e-01 9.396078586578369141e-01 9.317647218704223633e-01 1.000000000000000000e+00 -8.361399173736572266e-01 9.385005831718444824e-01 9.294271469116210938e-01 1.000000000000000000e+00 -8.330641984939575195e-01 9.373933076858520508e-01 9.270895719528198242e-01 1.000000000000000000e+00 -8.299884796142578125e-01 9.362860321998596191e-01 9.247519969940185547e-01 1.000000000000000000e+00 -8.269127011299133301e-01 9.351787567138671875e-01 9.224144816398620605e-01 1.000000000000000000e+00 -8.238369822502136230e-01 9.340714812278747559e-01 9.200769066810607910e-01 1.000000000000000000e+00 -8.207612633705139160e-01 9.329642653465270996e-01 9.177393317222595215e-01 1.000000000000000000e+00 -8.176854848861694336e-01 9.318569898605346680e-01 9.154017567634582520e-01 1.000000000000000000e+00 -8.146097660064697266e-01 9.307497143745422363e-01 9.130641818046569824e-01 1.000000000000000000e+00 -8.115340471267700195e-01 9.296424388885498047e-01 9.107266664505004883e-01 1.000000000000000000e+00 -8.084582686424255371e-01 9.285351634025573730e-01 9.083890914916992188e-01 1.000000000000000000e+00 -8.053825497627258301e-01 9.274278879165649414e-01 9.060515165328979492e-01 1.000000000000000000e+00 -8.023068308830261230e-01 9.263206720352172852e-01 9.037139415740966797e-01 1.000000000000000000e+00 -7.984313964843750000e-01 9.248750209808349609e-01 9.010688066482543945e-01 1.000000000000000000e+00 -7.921568751335144043e-01 9.224144816398620605e-01 8.975009322166442871e-01 1.000000000000000000e+00 -7.858823537826538086e-01 9.199538826942443848e-01 8.939331173896789551e-01 1.000000000000000000e+00 -7.796078324317932129e-01 9.174932837486267090e-01 8.903652429580688477e-01 1.000000000000000000e+00 -7.733333110809326172e-01 9.150326848030090332e-01 8.867973685264587402e-01 1.000000000000000000e+00 -7.670588493347167969e-01 9.125720858573913574e-01 8.832295536994934082e-01 1.000000000000000000e+00 -7.607843279838562012e-01 9.101114869117736816e-01 8.796616792678833008e-01 1.000000000000000000e+00 -7.545098066329956055e-01 9.076508879661560059e-01 8.760938048362731934e-01 1.000000000000000000e+00 -7.482352852821350098e-01 9.051902890205383301e-01 8.725259304046630859e-01 1.000000000000000000e+00 -7.419607639312744141e-01 9.027296900749206543e-01 8.689581155776977539e-01 1.000000000000000000e+00 -7.356863021850585938e-01 9.002691507339477539e-01 8.653902411460876465e-01 1.000000000000000000e+00 -7.294117808341979980e-01 8.978085517883300781e-01 8.618223667144775391e-01 1.000000000000000000e+00 -7.231372594833374023e-01 8.953479528427124023e-01 8.582544922828674316e-01 1.000000000000000000e+00 -7.168627381324768066e-01 8.928873538970947266e-01 8.546866774559020996e-01 1.000000000000000000e+00 -7.105882167816162109e-01 8.904267549514770508e-01 8.511188030242919922e-01 1.000000000000000000e+00 -7.043137550354003906e-01 8.879661560058593750e-01 8.475509285926818848e-01 1.000000000000000000e+00 -6.980392336845397949e-01 8.855055570602416992e-01 8.439830541610717773e-01 1.000000000000000000e+00 -6.917647123336791992e-01 8.830449581146240234e-01 8.404152393341064453e-01 1.000000000000000000e+00 -6.854901909828186035e-01 8.805844187736511230e-01 8.368473649024963379e-01 1.000000000000000000e+00 -6.792156696319580078e-01 8.781238198280334473e-01 8.332794904708862305e-01 1.000000000000000000e+00 -6.729411482810974121e-01 8.756632208824157715e-01 8.297116756439208984e-01 1.000000000000000000e+00 -6.666666865348815918e-01 8.732026219367980957e-01 8.261438012123107910e-01 1.000000000000000000e+00 -6.603921651840209961e-01 8.707420229911804199e-01 8.225759267807006836e-01 1.000000000000000000e+00 -6.541176438331604004e-01 8.682814240455627441e-01 8.190080523490905762e-01 1.000000000000000000e+00 -6.478431224822998047e-01 8.658208250999450684e-01 8.154402375221252441e-01 1.000000000000000000e+00 -6.415686011314392090e-01 8.633602261543273926e-01 8.118723630905151367e-01 1.000000000000000000e+00 -6.352941393852233887e-01 8.608996272087097168e-01 8.083044886589050293e-01 1.000000000000000000e+00 -6.290196180343627930e-01 8.584390878677368164e-01 8.047366142272949219e-01 1.000000000000000000e+00 -6.227450966835021973e-01 8.559784889221191406e-01 8.011687994003295898e-01 1.000000000000000000e+00 -6.164705753326416016e-01 8.535178899765014648e-01 7.976009249687194824e-01 1.000000000000000000e+00 -6.101960539817810059e-01 8.510572910308837891e-01 7.940330505371093750e-01 1.000000000000000000e+00 -6.039215922355651855e-01 8.485966920852661133e-01 7.904651761054992676e-01 1.000000000000000000e+00 -5.976470708847045898e-01 8.460438251495361328e-01 7.865282297134399414e-01 1.000000000000000000e+00 -5.913725495338439941e-01 8.433371782302856445e-01 7.819761633872985840e-01 1.000000000000000000e+00 -5.850980281829833984e-01 8.406305313110351562e-01 7.774240970611572266e-01 1.000000000000000000e+00 -5.788235068321228027e-01 8.379238843917846680e-01 7.728719711303710938e-01 1.000000000000000000e+00 -5.725490450859069824e-01 8.352172374725341797e-01 7.683199048042297363e-01 1.000000000000000000e+00 -5.662745237350463867e-01 8.325105905532836914e-01 7.637677788734436035e-01 1.000000000000000000e+00 -5.600000023841857910e-01 8.298039436340332031e-01 7.592157125473022461e-01 1.000000000000000000e+00 -5.537254810333251953e-01 8.270972967147827148e-01 7.546635866165161133e-01 1.000000000000000000e+00 -5.474509596824645996e-01 8.243905901908874512e-01 7.501115202903747559e-01 1.000000000000000000e+00 -5.411764979362487793e-01 8.216839432716369629e-01 7.455593943595886230e-01 1.000000000000000000e+00 -5.349019765853881836e-01 8.189772963523864746e-01 7.410073280334472656e-01 1.000000000000000000e+00 -5.286274552345275879e-01 8.162706494331359863e-01 7.364552021026611328e-01 1.000000000000000000e+00 -5.223529338836669922e-01 8.135640025138854980e-01 7.319031357765197754e-01 1.000000000000000000e+00 -5.160784125328063965e-01 8.108573555946350098e-01 7.273510098457336426e-01 1.000000000000000000e+00 -5.098039507865905762e-01 8.081507086753845215e-01 7.227989435195922852e-01 1.000000000000000000e+00 -5.035294294357299805e-01 8.054440617561340332e-01 7.182468175888061523e-01 1.000000000000000000e+00 -4.972549080848693848e-01 8.027374148368835449e-01 7.136947512626647949e-01 1.000000000000000000e+00 -4.909803867340087891e-01 8.000307679176330566e-01 7.091426253318786621e-01 1.000000000000000000e+00 -4.847058951854705811e-01 7.973241209983825684e-01 7.045905590057373047e-01 1.000000000000000000e+00 -4.784313738346099854e-01 7.946174740791320801e-01 7.000384330749511719e-01 1.000000000000000000e+00 -4.721568524837493896e-01 7.919108271598815918e-01 6.954863667488098145e-01 1.000000000000000000e+00 -4.658823609352111816e-01 7.892041802406311035e-01 6.909342408180236816e-01 1.000000000000000000e+00 -4.596078395843505859e-01 7.864974737167358398e-01 6.863821744918823242e-01 1.000000000000000000e+00 -4.533333480358123779e-01 7.837908267974853516e-01 6.818300485610961914e-01 1.000000000000000000e+00 -4.470588266849517822e-01 7.810841798782348633e-01 6.772779822349548340e-01 1.000000000000000000e+00 -4.407843053340911865e-01 7.783775329589843750e-01 6.727258563041687012e-01 1.000000000000000000e+00 -4.345098137855529785e-01 7.756708860397338867e-01 6.681737899780273438e-01 1.000000000000000000e+00 -4.282352924346923828e-01 7.729642391204833984e-01 6.636216640472412109e-01 1.000000000000000000e+00 -4.219607710838317871e-01 7.702575922012329102e-01 6.590695977210998535e-01 1.000000000000000000e+00 -4.156862795352935791e-01 7.675509452819824219e-01 6.545174717903137207e-01 1.000000000000000000e+00 -4.094117581844329834e-01 7.648442983627319336e-01 6.499654054641723633e-01 1.000000000000000000e+00 -4.031372666358947754e-01 7.621376514434814453e-01 6.454132795333862305e-01 1.000000000000000000e+00 -3.977239429950714111e-01 7.595540285110473633e-01 6.403075456619262695e-01 1.000000000000000000e+00 -3.931718468666076660e-01 7.570934295654296875e-01 6.346482038497924805e-01 1.000000000000000000e+00 -3.886197507381439209e-01 7.546328306198120117e-01 6.289888620376586914e-01 1.000000000000000000e+00 -3.840676546096801758e-01 7.521722316741943359e-01 6.233294606208801270e-01 1.000000000000000000e+00 -3.795155584812164307e-01 7.497116327285766602e-01 6.176701188087463379e-01 1.000000000000000000e+00 -3.749634623527526855e-01 7.472510337829589844e-01 6.120107769966125488e-01 1.000000000000000000e+00 -3.704113662242889404e-01 7.447904944419860840e-01 6.063513755798339844e-01 1.000000000000000000e+00 -3.658592700958251953e-01 7.423298954963684082e-01 6.006920337677001953e-01 1.000000000000000000e+00 -3.613072037696838379e-01 7.398692965507507324e-01 5.950326919555664062e-01 1.000000000000000000e+00 -3.567551076412200928e-01 7.374086976051330566e-01 5.893732905387878418e-01 1.000000000000000000e+00 -3.522030115127563477e-01 7.349480986595153809e-01 5.837139487266540527e-01 1.000000000000000000e+00 -3.476509153842926025e-01 7.324874997138977051e-01 5.780546069145202637e-01 1.000000000000000000e+00 -3.430988192558288574e-01 7.300269007682800293e-01 5.723952054977416992e-01 1.000000000000000000e+00 -3.385467231273651123e-01 7.275663018226623535e-01 5.667358636856079102e-01 1.000000000000000000e+00 -3.339946269989013672e-01 7.251057028770446777e-01 5.610765218734741211e-01 1.000000000000000000e+00 -3.294425308704376221e-01 7.226451635360717773e-01 5.554171204566955566e-01 1.000000000000000000e+00 -3.248904347419738770e-01 7.201845645904541016e-01 5.497577786445617676e-01 1.000000000000000000e+00 -3.203383386135101318e-01 7.177239656448364258e-01 5.440984368324279785e-01 1.000000000000000000e+00 -3.157862424850463867e-01 7.152633666992187500e-01 5.384390354156494141e-01 1.000000000000000000e+00 -3.112341463565826416e-01 7.128027677536010742e-01 5.327796936035156250e-01 1.000000000000000000e+00 -3.066820502281188965e-01 7.103421688079833984e-01 5.271203517913818359e-01 1.000000000000000000e+00 -3.021299540996551514e-01 7.078815698623657227e-01 5.214609503746032715e-01 1.000000000000000000e+00 -2.975778579711914062e-01 7.054209709167480469e-01 5.158016085624694824e-01 1.000000000000000000e+00 -2.930257618427276611e-01 7.029603719711303711e-01 5.101422667503356934e-01 1.000000000000000000e+00 -2.884736657142639160e-01 7.004998326301574707e-01 5.044828653335571289e-01 1.000000000000000000e+00 -2.839215695858001709e-01 6.980392336845397949e-01 4.988235235214233398e-01 1.000000000000000000e+00 -2.793694734573364258e-01 6.955786347389221191e-01 4.931641817092895508e-01 1.000000000000000000e+00 -2.748173773288726807e-01 6.931180357933044434e-01 4.875048100948333740e-01 1.000000000000000000e+00 -2.702652812004089355e-01 6.906574368476867676e-01 4.818454384803771973e-01 1.000000000000000000e+00 -2.657131850719451904e-01 6.881968379020690918e-01 4.761860966682434082e-01 1.000000000000000000e+00 -2.611610889434814453e-01 6.857362389564514160e-01 4.705267250537872314e-01 1.000000000000000000e+00 -2.566089928150177002e-01 6.832756400108337402e-01 4.648673534393310547e-01 1.000000000000000000e+00 -2.525951564311981201e-01 6.796616911888122559e-01 4.589773118495941162e-01 1.000000000000000000e+00 -2.489042729139328003e-01 6.753556132316589355e-01 4.529488682746887207e-01 1.000000000000000000e+00 -2.452133744955062866e-01 6.710495948791503906e-01 4.469204246997833252e-01 1.000000000000000000e+00 -2.415224909782409668e-01 6.667435765266418457e-01 4.408919513225555420e-01 1.000000000000000000e+00 -2.378316074609756470e-01 6.624374985694885254e-01 4.348635077476501465e-01 1.000000000000000000e+00 -2.341407090425491333e-01 6.581314802169799805e-01 4.288350641727447510e-01 1.000000000000000000e+00 -2.304498255252838135e-01 6.538254618644714355e-01 4.228066205978393555e-01 1.000000000000000000e+00 -2.267589420080184937e-01 6.495194435119628906e-01 4.167781770229339600e-01 1.000000000000000000e+00 -2.230680435895919800e-01 6.452133655548095703e-01 4.107497036457061768e-01 1.000000000000000000e+00 -2.193771600723266602e-01 6.409073472023010254e-01 4.047212600708007812e-01 1.000000000000000000e+00 -2.156862765550613403e-01 6.366013288497924805e-01 3.986928164958953857e-01 1.000000000000000000e+00 -2.119953930377960205e-01 6.322952508926391602e-01 3.926643729209899902e-01 1.000000000000000000e+00 -2.083044946193695068e-01 6.279892325401306152e-01 3.866358995437622070e-01 1.000000000000000000e+00 -2.046136111021041870e-01 6.236832141876220703e-01 3.806074559688568115e-01 1.000000000000000000e+00 -2.009227275848388672e-01 6.193771362304687500e-01 3.745790123939514160e-01 1.000000000000000000e+00 -1.972318291664123535e-01 6.150711178779602051e-01 3.685505688190460205e-01 1.000000000000000000e+00 -1.935409456491470337e-01 6.107650995254516602e-01 3.625220954418182373e-01 1.000000000000000000e+00 -1.898500621318817139e-01 6.064590811729431152e-01 3.564936518669128418e-01 1.000000000000000000e+00 -1.861591637134552002e-01 6.021530032157897949e-01 3.504652082920074463e-01 1.000000000000000000e+00 -1.824682801961898804e-01 5.978469848632812500e-01 3.444367647171020508e-01 1.000000000000000000e+00 -1.787773966789245605e-01 5.935409665107727051e-01 3.384082913398742676e-01 1.000000000000000000e+00 -1.750864982604980469e-01 5.892348885536193848e-01 3.323798477649688721e-01 1.000000000000000000e+00 -1.713956147432327271e-01 5.849288702011108398e-01 3.263514041900634766e-01 1.000000000000000000e+00 -1.677047312259674072e-01 5.806228518486022949e-01 3.203229606151580811e-01 1.000000000000000000e+00 -1.640138477087020874e-01 5.763167738914489746e-01 3.142944872379302979e-01 1.000000000000000000e+00 -1.603229492902755737e-01 5.720107555389404297e-01 3.082660436630249023e-01 1.000000000000000000e+00 -1.566320657730102539e-01 5.677047371864318848e-01 3.022376000881195068e-01 1.000000000000000000e+00 -1.529411822557449341e-01 5.633987188339233398e-01 2.962091565132141113e-01 1.000000000000000000e+00 -1.492502838373184204e-01 5.590926408767700195e-01 2.901807129383087158e-01 1.000000000000000000e+00 -1.455594003200531006e-01 5.547866225242614746e-01 2.841522395610809326e-01 1.000000000000000000e+00 -1.418685168027877808e-01 5.504806041717529297e-01 2.781237959861755371e-01 1.000000000000000000e+00 -1.381776183843612671e-01 5.461745262145996094e-01 2.720953524112701416e-01 1.000000000000000000e+00 -1.340253800153732300e-01 5.423298478126525879e-01 2.682814300060272217e-01 1.000000000000000000e+00 -1.297193318605422974e-01 5.386390089988708496e-01 2.652056813240051270e-01 1.000000000000000000e+00 -1.254132986068725586e-01 5.349481105804443359e-01 2.621299624443054199e-01 1.000000000000000000e+00 -1.211072653532028198e-01 5.312572121620178223e-01 2.590542137622833252e-01 1.000000000000000000e+00 -1.168012320995330811e-01 5.275663137435913086e-01 2.559784650802612305e-01 1.000000000000000000e+00 -1.124951913952827454e-01 5.238754153251647949e-01 2.529027163982391357e-01 1.000000000000000000e+00 -1.081891581416130066e-01 5.201845169067382812e-01 2.498269826173782349e-01 1.000000000000000000e+00 -1.038831248879432678e-01 5.164936780929565430e-01 2.467512488365173340e-01 1.000000000000000000e+00 -9.957708418369293213e-02 5.128027796745300293e-01 2.436755150556564331e-01 1.000000000000000000e+00 -9.527105093002319336e-02 5.091118812561035156e-01 2.405997663736343384e-01 1.000000000000000000e+00 -9.096501022577285767e-02 5.054209828376770020e-01 2.375240325927734375e-01 1.000000000000000000e+00 -8.665897697210311890e-02 5.017300844192504883e-01 2.344482839107513428e-01 1.000000000000000000e+00 -8.235294371843338013e-02 4.980392158031463623e-01 2.313725501298904419e-01 1.000000000000000000e+00 -7.804690301418304443e-02 4.943483173847198486e-01 2.282968163490295410e-01 1.000000000000000000e+00 -7.374086976051330566e-02 4.906574487686157227e-01 2.252210676670074463e-01 1.000000000000000000e+00 -6.943482905626296997e-02 4.869665503501892090e-01 2.221453338861465454e-01 1.000000000000000000e+00 -6.512879580259323120e-02 4.832756519317626953e-01 2.190695852041244507e-01 1.000000000000000000e+00 -6.082275882363319397e-02 4.795847833156585693e-01 2.159938514232635498e-01 1.000000000000000000e+00 -5.651672556996345520e-02 4.758938848972320557e-01 2.129181027412414551e-01 1.000000000000000000e+00 -5.221068859100341797e-02 4.722029864788055420e-01 2.098423689603805542e-01 1.000000000000000000e+00 -4.790465161204338074e-02 4.685121178627014160e-01 2.067666351795196533e-01 1.000000000000000000e+00 -4.359861463308334351e-02 4.648212194442749023e-01 2.036908864974975586e-01 1.000000000000000000e+00 -3.929258137941360474e-02 4.611303210258483887e-01 2.006151527166366577e-01 1.000000000000000000e+00 -3.498654440045356750e-02 4.574394524097442627e-01 1.975394040346145630e-01 1.000000000000000000e+00 -3.068050742149353027e-02 4.537485539913177490e-01 1.944636702537536621e-01 1.000000000000000000e+00 -2.637447044253349304e-02 4.500576555728912354e-01 1.913879215717315674e-01 1.000000000000000000e+00 -2.206843532621860504e-02 4.463667869567871094e-01 1.883121877908706665e-01 1.000000000000000000e+00 -1.776239834725856781e-02 4.426758885383605957e-01 1.852364540100097656e-01 1.000000000000000000e+00 -1.345636323094367981e-02 4.389850199222564697e-01 1.821607053279876709e-01 1.000000000000000000e+00 -9.150327183306217194e-03 4.352941215038299561e-01 1.790849715471267700e-01 1.000000000000000000e+00 -4.844290670007467270e-03 4.316032230854034424e-01 1.760092228651046753e-01 1.000000000000000000e+00 -5.382545059546828270e-04 4.279123544692993164e-01 1.729334890842437744e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.230372905731201172e-01 1.707189530134201050e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.179930686950683594e-01 1.686274558305740356e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.129488766193389893e-01 1.665359437465667725e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.079046547412872314e-01 1.644444465637207031e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.028604328632354736e-01 1.623529344797134399e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.978162109851837158e-01 1.602614372968673706e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.927720189094543457e-01 1.581699401140213013e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.877277970314025879e-01 1.560784280300140381e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.826835751533508301e-01 1.539869308471679688e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.776393830776214600e-01 1.518954187631607056e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.725951611995697021e-01 1.498039215803146362e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.675509393215179443e-01 1.477124243974685669e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.625067174434661865e-01 1.456209123134613037e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.574625253677368164e-01 1.435294151306152344e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.524183034896850586e-01 1.414379030466079712e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.473740816116333008e-01 1.393464058637619019e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.423298597335815430e-01 1.372549086809158325e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.372856676578521729e-01 1.351633965969085693e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.322414457798004150e-01 1.330718994140625000e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.271972239017486572e-01 1.309803873300552368e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.221530318260192871e-01 1.288888901472091675e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.171088099479675293e-01 1.267973929643630981e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.120645880699157715e-01 1.247058808803558350e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.070203661918640137e-01 1.226143762469291687e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.019761741161346436e-01 1.205228790640830994e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.969319522380828857e-01 1.184313744306564331e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.918877303600311279e-01 1.163398697972297668e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.868435084819793701e-01 1.142483651638031006e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.817993164062500000e-01 1.121568605303764343e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.767550945281982422e-01 1.100653558969497681e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.717108726501464844e-01 1.079738587141036987e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.666666805744171143e-01 1.058823540806770325e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/BuPu b/fastplotlib/utils/colormaps/BuPu deleted file mode 100644 index bfdac03b4..000000000 --- a/fastplotlib/utils/colormaps/BuPu +++ /dev/null @@ -1,256 +0,0 @@ -9.686274528503417969e-01 9.882352948188781738e-01 9.921568632125854492e-01 1.000000000000000000e+00 -9.657977819442749023e-01 9.862667918205261230e-01 9.910495877265930176e-01 1.000000000000000000e+00 -9.629681110382080078e-01 9.842983484268188477e-01 9.899423122406005859e-01 1.000000000000000000e+00 -9.601383805274963379e-01 9.823298454284667969e-01 9.888350367546081543e-01 1.000000000000000000e+00 -9.573087096214294434e-01 9.803614020347595215e-01 9.877278208732604980e-01 1.000000000000000000e+00 -9.544790387153625488e-01 9.783928990364074707e-01 9.866205453872680664e-01 1.000000000000000000e+00 -9.516493678092956543e-01 9.764244556427001953e-01 9.855132699012756348e-01 1.000000000000000000e+00 -9.488196969032287598e-01 9.744559526443481445e-01 9.844059944152832031e-01 1.000000000000000000e+00 -9.459900259971618652e-01 9.724875092506408691e-01 9.832987189292907715e-01 1.000000000000000000e+00 -9.431602954864501953e-01 9.705190062522888184e-01 9.821914434432983398e-01 1.000000000000000000e+00 -9.403306245803833008e-01 9.685505628585815430e-01 9.810842275619506836e-01 1.000000000000000000e+00 -9.375009536743164062e-01 9.665820598602294922e-01 9.799769520759582520e-01 1.000000000000000000e+00 -9.346712827682495117e-01 9.646136164665222168e-01 9.788696765899658203e-01 1.000000000000000000e+00 -9.318416118621826172e-01 9.626451134681701660e-01 9.777624011039733887e-01 1.000000000000000000e+00 -9.290119409561157227e-01 9.606766700744628906e-01 9.766551256179809570e-01 1.000000000000000000e+00 -9.261822104454040527e-01 9.587081670761108398e-01 9.755478501319885254e-01 1.000000000000000000e+00 -9.233525395393371582e-01 9.567397236824035645e-01 9.744405746459960938e-01 1.000000000000000000e+00 -9.205228686332702637e-01 9.547712206840515137e-01 9.733333587646484375e-01 1.000000000000000000e+00 -9.176931977272033691e-01 9.528027772903442383e-01 9.722260832786560059e-01 1.000000000000000000e+00 -9.148635268211364746e-01 9.508342742919921875e-01 9.711188077926635742e-01 1.000000000000000000e+00 -9.120338559150695801e-01 9.488658308982849121e-01 9.700115323066711426e-01 1.000000000000000000e+00 -9.092041254043579102e-01 9.468973278999328613e-01 9.689042568206787109e-01 1.000000000000000000e+00 -9.063744544982910156e-01 9.449288845062255859e-01 9.677969813346862793e-01 1.000000000000000000e+00 -9.035447835922241211e-01 9.429603815078735352e-01 9.666897058486938477e-01 1.000000000000000000e+00 -9.007151126861572266e-01 9.409919381141662598e-01 9.655824899673461914e-01 1.000000000000000000e+00 -8.978854417800903320e-01 9.390234351158142090e-01 9.644752144813537598e-01 1.000000000000000000e+00 -8.950557708740234375e-01 9.370549917221069336e-01 9.633679389953613281e-01 1.000000000000000000e+00 -8.922260403633117676e-01 9.350864887237548828e-01 9.622606635093688965e-01 1.000000000000000000e+00 -8.893963694572448730e-01 9.331180453300476074e-01 9.611533880233764648e-01 1.000000000000000000e+00 -8.865666985511779785e-01 9.311495423316955566e-01 9.600461125373840332e-01 1.000000000000000000e+00 -8.837370276451110840e-01 9.291810989379882812e-01 9.589388966560363770e-01 1.000000000000000000e+00 -8.809073567390441895e-01 9.272125959396362305e-01 9.578316211700439453e-01 1.000000000000000000e+00 -8.779238462448120117e-01 9.251057505607604980e-01 9.566474556922912598e-01 1.000000000000000000e+00 -8.738638758659362793e-01 9.220299720764160156e-01 9.549250006675720215e-01 1.000000000000000000e+00 -8.698039054870605469e-01 9.189542531967163086e-01 9.532026052474975586e-01 1.000000000000000000e+00 -8.657439351081848145e-01 9.158785343170166016e-01 9.514802098274230957e-01 1.000000000000000000e+00 -8.616839647293090820e-01 9.128027558326721191e-01 9.497578144073486328e-01 1.000000000000000000e+00 -8.576239943504333496e-01 9.097270369529724121e-01 9.480353593826293945e-01 1.000000000000000000e+00 -8.535640239715576172e-01 9.066512584686279297e-01 9.463129639625549316e-01 1.000000000000000000e+00 -8.495040535926818848e-01 9.035755395889282227e-01 9.445905685424804688e-01 1.000000000000000000e+00 -8.454440832138061523e-01 9.004998207092285156e-01 9.428681135177612305e-01 1.000000000000000000e+00 -8.413841128349304199e-01 8.974240422248840332e-01 9.411457180976867676e-01 1.000000000000000000e+00 -8.373240828514099121e-01 8.943483233451843262e-01 9.394233226776123047e-01 1.000000000000000000e+00 -8.332641124725341797e-01 8.912726044654846191e-01 9.377008676528930664e-01 1.000000000000000000e+00 -8.292041420936584473e-01 8.881968259811401367e-01 9.359784722328186035e-01 1.000000000000000000e+00 -8.251441717147827148e-01 8.851211071014404297e-01 9.342560768127441406e-01 1.000000000000000000e+00 -8.210842013359069824e-01 8.820453882217407227e-01 9.325336217880249023e-01 1.000000000000000000e+00 -8.170242309570312500e-01 8.789696097373962402e-01 9.308112263679504395e-01 1.000000000000000000e+00 -8.129642605781555176e-01 8.758938908576965332e-01 9.290888309478759766e-01 1.000000000000000000e+00 -8.089042901992797852e-01 8.728181719779968262e-01 9.273663759231567383e-01 1.000000000000000000e+00 -8.048443198204040527e-01 8.697423934936523438e-01 9.256439805030822754e-01 1.000000000000000000e+00 -8.007842898368835449e-01 8.666666746139526367e-01 9.239215850830078125e-01 1.000000000000000000e+00 -7.967243194580078125e-01 8.635909557342529297e-01 9.221991300582885742e-01 1.000000000000000000e+00 -7.926643490791320801e-01 8.605151772499084473e-01 9.204767346382141113e-01 1.000000000000000000e+00 -7.886043787002563477e-01 8.574394583702087402e-01 9.187543392181396484e-01 1.000000000000000000e+00 -7.845444083213806152e-01 8.543636798858642578e-01 9.170318841934204102e-01 1.000000000000000000e+00 -7.804844379425048828e-01 8.512879610061645508e-01 9.153094887733459473e-01 1.000000000000000000e+00 -7.764244675636291504e-01 8.482122421264648438e-01 9.135870933532714844e-01 1.000000000000000000e+00 -7.723644971847534180e-01 8.451364636421203613e-01 9.118646383285522461e-01 1.000000000000000000e+00 -7.683045268058776855e-01 8.420607447624206543e-01 9.101422429084777832e-01 1.000000000000000000e+00 -7.642444968223571777e-01 8.389850258827209473e-01 9.084198474884033203e-01 1.000000000000000000e+00 -7.601845264434814453e-01 8.359092473983764648e-01 9.066974520683288574e-01 1.000000000000000000e+00 -7.561245560646057129e-01 8.328335285186767578e-01 9.049749970436096191e-01 1.000000000000000000e+00 -7.520645856857299805e-01 8.297578096389770508e-01 9.032526016235351562e-01 1.000000000000000000e+00 -7.480046153068542480e-01 8.267435431480407715e-01 9.015917181968688965e-01 1.000000000000000000e+00 -7.439446449279785156e-01 8.239138722419738770e-01 9.001153111457824707e-01 1.000000000000000000e+00 -7.398846745491027832e-01 8.210842013359069824e-01 8.986389636993408203e-01 1.000000000000000000e+00 -7.358247041702270508e-01 8.182545304298400879e-01 8.971626162528991699e-01 1.000000000000000000e+00 -7.317647337913513184e-01 8.154248595237731934e-01 8.956862688064575195e-01 1.000000000000000000e+00 -7.277047038078308105e-01 8.125951290130615234e-01 8.942099213600158691e-01 1.000000000000000000e+00 -7.236447334289550781e-01 8.097654581069946289e-01 8.927335739135742188e-01 1.000000000000000000e+00 -7.195847630500793457e-01 8.069357872009277344e-01 8.912572264671325684e-01 1.000000000000000000e+00 -7.155247926712036133e-01 8.041061162948608398e-01 8.897808790206909180e-01 1.000000000000000000e+00 -7.114648222923278809e-01 8.012764453887939453e-01 8.883044719696044922e-01 1.000000000000000000e+00 -7.074048519134521484e-01 7.984467744827270508e-01 8.868281245231628418e-01 1.000000000000000000e+00 -7.033448815345764160e-01 7.956170439720153809e-01 8.853517770767211914e-01 1.000000000000000000e+00 -6.992849111557006836e-01 7.927873730659484863e-01 8.838754296302795410e-01 1.000000000000000000e+00 -6.952249407768249512e-01 7.899577021598815918e-01 8.823990821838378906e-01 1.000000000000000000e+00 -6.911649107933044434e-01 7.871280312538146973e-01 8.809227347373962402e-01 1.000000000000000000e+00 -6.871049404144287109e-01 7.842983603477478027e-01 8.794463872909545898e-01 1.000000000000000000e+00 -6.830449700355529785e-01 7.814686894416809082e-01 8.779700398445129395e-01 1.000000000000000000e+00 -6.789849996566772461e-01 7.786389589309692383e-01 8.764936327934265137e-01 1.000000000000000000e+00 -6.749250292778015137e-01 7.758092880249023438e-01 8.750172853469848633e-01 1.000000000000000000e+00 -6.708650588989257812e-01 7.729796171188354492e-01 8.735409379005432129e-01 1.000000000000000000e+00 -6.668050885200500488e-01 7.701499462127685547e-01 8.720645904541015625e-01 1.000000000000000000e+00 -6.627451181411743164e-01 7.673202753067016602e-01 8.705882430076599121e-01 1.000000000000000000e+00 -6.586851477622985840e-01 7.644906044006347656e-01 8.691118955612182617e-01 1.000000000000000000e+00 -6.546251177787780762e-01 7.616608738899230957e-01 8.676355481147766113e-01 1.000000000000000000e+00 -6.505651473999023438e-01 7.588312029838562012e-01 8.661591410636901855e-01 1.000000000000000000e+00 -6.465051770210266113e-01 7.560015320777893066e-01 8.646827936172485352e-01 1.000000000000000000e+00 -6.424452066421508789e-01 7.531718611717224121e-01 8.632064461708068848e-01 1.000000000000000000e+00 -6.383852362632751465e-01 7.503421902656555176e-01 8.617300987243652344e-01 1.000000000000000000e+00 -6.343252658843994141e-01 7.475125193595886230e-01 8.602537512779235840e-01 1.000000000000000000e+00 -6.302652955055236816e-01 7.446827888488769531e-01 8.587774038314819336e-01 1.000000000000000000e+00 -6.262053251266479492e-01 7.418531179428100586e-01 8.573010563850402832e-01 1.000000000000000000e+00 -6.221453547477722168e-01 7.390234470367431641e-01 8.558247089385986328e-01 1.000000000000000000e+00 -6.187773942947387695e-01 7.355017066001892090e-01 8.539792299270629883e-01 1.000000000000000000e+00 -6.165628433227539062e-01 7.308266162872314453e-01 8.515186309814453125e-01 1.000000000000000000e+00 -6.143483519554138184e-01 7.261514663696289062e-01 8.490580320358276367e-01 1.000000000000000000e+00 -6.121338009834289551e-01 7.214763760566711426e-01 8.465974330902099609e-01 1.000000000000000000e+00 -6.099192500114440918e-01 7.168012261390686035e-01 8.441368937492370605e-01 1.000000000000000000e+00 -6.077047586441040039e-01 7.121260762214660645e-01 8.416762948036193848e-01 1.000000000000000000e+00 -6.054902076721191406e-01 7.074509859085083008e-01 8.392156958580017090e-01 1.000000000000000000e+00 -6.032756567001342773e-01 7.027758359909057617e-01 8.367550969123840332e-01 1.000000000000000000e+00 -6.010611057281494141e-01 6.981007456779479980e-01 8.342944979667663574e-01 1.000000000000000000e+00 -5.988466143608093262e-01 6.934255957603454590e-01 8.318338990211486816e-01 1.000000000000000000e+00 -5.966320633888244629e-01 6.887505054473876953e-01 8.293733000755310059e-01 1.000000000000000000e+00 -5.944175124168395996e-01 6.840753555297851562e-01 8.269127011299133301e-01 1.000000000000000000e+00 -5.922030210494995117e-01 6.794002056121826172e-01 8.244521617889404297e-01 1.000000000000000000e+00 -5.899884700775146484e-01 6.747251152992248535e-01 8.219915628433227539e-01 1.000000000000000000e+00 -5.877739191055297852e-01 6.700499653816223145e-01 8.195309638977050781e-01 1.000000000000000000e+00 -5.855594277381896973e-01 6.653748750686645508e-01 8.170703649520874023e-01 1.000000000000000000e+00 -5.833448767662048340e-01 6.606997251510620117e-01 8.146097660064697266e-01 1.000000000000000000e+00 -5.811303257942199707e-01 6.560246348381042480e-01 8.121491670608520508e-01 1.000000000000000000e+00 -5.789157748222351074e-01 6.513494849205017090e-01 8.096885681152343750e-01 1.000000000000000000e+00 -5.767012834548950195e-01 6.466743350028991699e-01 8.072279691696166992e-01 1.000000000000000000e+00 -5.744867324829101562e-01 6.419992446899414062e-01 8.047673702239990234e-01 1.000000000000000000e+00 -5.722721815109252930e-01 6.373240947723388672e-01 8.023068308830261230e-01 1.000000000000000000e+00 -5.700576901435852051e-01 6.326490044593811035e-01 7.998462319374084473e-01 1.000000000000000000e+00 -5.678431391716003418e-01 6.279738545417785645e-01 7.973856329917907715e-01 1.000000000000000000e+00 -5.656285881996154785e-01 6.232987046241760254e-01 7.949250340461730957e-01 1.000000000000000000e+00 -5.634140968322753906e-01 6.186236143112182617e-01 7.924644351005554199e-01 1.000000000000000000e+00 -5.611995458602905273e-01 6.139484643936157227e-01 7.900038361549377441e-01 1.000000000000000000e+00 -5.589849948883056641e-01 6.092733740806579590e-01 7.875432372093200684e-01 1.000000000000000000e+00 -5.567704439163208008e-01 6.045982241630554199e-01 7.850826382637023926e-01 1.000000000000000000e+00 -5.545559525489807129e-01 5.999231338500976562e-01 7.826220393180847168e-01 1.000000000000000000e+00 -5.523414015769958496e-01 5.952479839324951172e-01 7.801614999771118164e-01 1.000000000000000000e+00 -5.501268506050109863e-01 5.905728340148925781e-01 7.777009010314941406e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.855901837348937988e-01 7.751787900924682617e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.802999138832092285e-01 7.725951671600341797e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.750095844268798828e-01 7.700115442276000977e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.697193145751953125e-01 7.674279212951660156e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.644290447235107422e-01 7.648442983627319336e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.591387748718261719e-01 7.622606754302978516e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.538485050201416016e-01 7.596770524978637695e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.485582351684570312e-01 7.570934295654296875e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.432679653167724609e-01 7.545098066329956055e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.379776954650878906e-01 7.519261837005615234e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.326874256134033203e-01 7.493425607681274414e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.273971557617187500e-01 7.467589378356933594e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.221068859100341797e-01 7.441753149032592773e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.168166160583496094e-01 7.415916919708251953e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.115263462066650391e-01 7.390080690383911133e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.062360763549804688e-01 7.364244461059570312e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.009458065032958984e-01 7.338408231735229492e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.956555068492889404e-01 7.312572002410888672e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.903652369976043701e-01 7.286735773086547852e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.850749671459197998e-01 7.260899543762207031e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.797846972942352295e-01 7.235063314437866211e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.744944274425506592e-01 7.209227085113525391e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.692041575908660889e-01 7.183390855789184570e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.639138877391815186e-01 7.157554626464843750e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.586236178874969482e-01 7.131718397140502930e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.533333480358123779e-01 7.105882167816162109e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.480430483818054199e-01 7.080045938491821289e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.427527785301208496e-01 7.054209709167480469e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.374625086784362793e-01 7.028373479843139648e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.321722388267517090e-01 7.002537250518798828e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.268819689750671387e-01 6.976701021194458008e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.215916991233825684e-01 6.950864791870117188e-01 1.000000000000000000e+00 -5.487120151519775391e-01 4.163783192634582520e-01 6.925798058509826660e-01 1.000000000000000000e+00 -5.482199192047119141e-01 4.112110733985900879e-01 6.901192069053649902e-01 1.000000000000000000e+00 -5.477278232574462891e-01 4.060438275337219238e-01 6.876586079597473145e-01 1.000000000000000000e+00 -5.472356677055358887e-01 4.008765816688537598e-01 6.851980090141296387e-01 1.000000000000000000e+00 -5.467435717582702637e-01 3.957093358039855957e-01 6.827374100685119629e-01 1.000000000000000000e+00 -5.462514162063598633e-01 3.905420899391174316e-01 6.802768111228942871e-01 1.000000000000000000e+00 -5.457593202590942383e-01 3.853748440742492676e-01 6.778162121772766113e-01 1.000000000000000000e+00 -5.452672243118286133e-01 3.802075982093811035e-01 6.753556132316589355e-01 1.000000000000000000e+00 -5.447750687599182129e-01 3.750403821468353271e-01 6.728950142860412598e-01 1.000000000000000000e+00 -5.442829728126525879e-01 3.698731362819671631e-01 6.704344749450683594e-01 1.000000000000000000e+00 -5.437908768653869629e-01 3.647058904170989990e-01 6.679738759994506836e-01 1.000000000000000000e+00 -5.432987213134765625e-01 3.595386445522308350e-01 6.655132770538330078e-01 1.000000000000000000e+00 -5.428066253662109375e-01 3.543713986873626709e-01 6.630526781082153320e-01 1.000000000000000000e+00 -5.423144698143005371e-01 3.492041528224945068e-01 6.605920791625976562e-01 1.000000000000000000e+00 -5.418223738670349121e-01 3.440369069576263428e-01 6.581314802169799805e-01 1.000000000000000000e+00 -5.413302779197692871e-01 3.388696610927581787e-01 6.556708812713623047e-01 1.000000000000000000e+00 -5.408381223678588867e-01 3.337024152278900146e-01 6.532102823257446289e-01 1.000000000000000000e+00 -5.403460264205932617e-01 3.285351693630218506e-01 6.507496833801269531e-01 1.000000000000000000e+00 -5.398539304733276367e-01 3.233679234981536865e-01 6.482891440391540527e-01 1.000000000000000000e+00 -5.393617749214172363e-01 3.182006776332855225e-01 6.458285450935363770e-01 1.000000000000000000e+00 -5.388696789741516113e-01 3.130334615707397461e-01 6.433679461479187012e-01 1.000000000000000000e+00 -5.383775234222412109e-01 3.078662157058715820e-01 6.409073472023010254e-01 1.000000000000000000e+00 -5.378854274749755859e-01 3.026989698410034180e-01 6.384467482566833496e-01 1.000000000000000000e+00 -5.373933315277099609e-01 2.975317239761352539e-01 6.359861493110656738e-01 1.000000000000000000e+00 -5.369011759757995605e-01 2.923644781112670898e-01 6.335255503654479980e-01 1.000000000000000000e+00 -5.364090800285339355e-01 2.871972322463989258e-01 6.310649514198303223e-01 1.000000000000000000e+00 -5.359169840812683105e-01 2.820299863815307617e-01 6.286044120788574219e-01 1.000000000000000000e+00 -5.354248285293579102e-01 2.768627405166625977e-01 6.261438131332397461e-01 1.000000000000000000e+00 -5.349327325820922852e-01 2.716954946517944336e-01 6.236832141876220703e-01 1.000000000000000000e+00 -5.344405770301818848e-01 2.665282487869262695e-01 6.212226152420043945e-01 1.000000000000000000e+00 -5.339484810829162598e-01 2.613610029220581055e-01 6.187620162963867188e-01 1.000000000000000000e+00 -5.334563851356506348e-01 2.561937570571899414e-01 6.163014173507690430e-01 1.000000000000000000e+00 -5.326874256134033203e-01 2.502883374691009521e-01 6.126412749290466309e-01 1.000000000000000000e+00 -5.318261981010437012e-01 2.441368699073791504e-01 6.085813045501708984e-01 1.000000000000000000e+00 -5.309650301933288574e-01 2.379853874444961548e-01 6.045213341712951660e-01 1.000000000000000000e+00 -5.301038026809692383e-01 2.318339049816131592e-01 6.004613637924194336e-01 1.000000000000000000e+00 -5.292425751686096191e-01 2.256824225187301636e-01 5.964013934135437012e-01 1.000000000000000000e+00 -5.283814072608947754e-01 2.195309549570083618e-01 5.923414230346679688e-01 1.000000000000000000e+00 -5.275201797485351562e-01 2.133794724941253662e-01 5.882814526557922363e-01 1.000000000000000000e+00 -5.266589522361755371e-01 2.072279900312423706e-01 5.842214822769165039e-01 1.000000000000000000e+00 -5.257977843284606934e-01 2.010765075683593750e-01 5.801614522933959961e-01 1.000000000000000000e+00 -5.249365568161010742e-01 1.949250251054763794e-01 5.761014819145202637e-01 1.000000000000000000e+00 -5.240753293037414551e-01 1.887735426425933838e-01 5.720415115356445312e-01 1.000000000000000000e+00 -5.232141613960266113e-01 1.826220750808715820e-01 5.679815411567687988e-01 1.000000000000000000e+00 -5.223529338836669922e-01 1.764705926179885864e-01 5.639215707778930664e-01 1.000000000000000000e+00 -5.214917063713073730e-01 1.703191101551055908e-01 5.598616003990173340e-01 1.000000000000000000e+00 -5.206305384635925293e-01 1.641676276922225952e-01 5.558016300201416016e-01 1.000000000000000000e+00 -5.197693109512329102e-01 1.580161452293395996e-01 5.517416596412658691e-01 1.000000000000000000e+00 -5.189080834388732910e-01 1.518646627664566040e-01 5.476816892623901367e-01 1.000000000000000000e+00 -5.180469155311584473e-01 1.457131803035736084e-01 5.436216592788696289e-01 1.000000000000000000e+00 -5.171856880187988281e-01 1.395617127418518066e-01 5.395616888999938965e-01 1.000000000000000000e+00 -5.163245201110839844e-01 1.334102302789688110e-01 5.355017185211181641e-01 1.000000000000000000e+00 -5.154632925987243652e-01 1.272587478160858154e-01 5.314417481422424316e-01 1.000000000000000000e+00 -5.146020650863647461e-01 1.211072653532028198e-01 5.273817777633666992e-01 1.000000000000000000e+00 -5.137408971786499023e-01 1.149557828903198242e-01 5.233218073844909668e-01 1.000000000000000000e+00 -5.128796696662902832e-01 1.088043078780174255e-01 5.192618370056152344e-01 1.000000000000000000e+00 -5.120184421539306641e-01 1.026528254151344299e-01 5.152018666267395020e-01 1.000000000000000000e+00 -5.111572742462158203e-01 9.650134295225143433e-02 5.111418962478637695e-01 1.000000000000000000e+00 -5.102960467338562012e-01 9.034986793994903564e-02 5.070818662643432617e-01 1.000000000000000000e+00 -5.094348192214965820e-01 8.419838547706604004e-02 5.030218958854675293e-01 1.000000000000000000e+00 -5.085736513137817383e-01 7.804690301418304443e-02 4.989619255065917969e-01 1.000000000000000000e+00 -5.077124238014221191e-01 7.189542800188064575e-02 4.949019551277160645e-01 1.000000000000000000e+00 -5.068511962890625000e-01 6.574394553899765015e-02 4.908419847488403320e-01 1.000000000000000000e+00 -5.059900283813476562e-01 5.959246307611465454e-02 4.867820143699645996e-01 1.000000000000000000e+00 -5.002844929695129395e-01 5.720876529812812805e-02 4.809996187686920166e-01 1.000000000000000000e+00 -4.938869774341583252e-01 5.536332353949546814e-02 4.749711751937866211e-01 1.000000000000000000e+00 -4.874894320964813232e-01 5.351787805557250977e-02 4.689427018165588379e-01 1.000000000000000000e+00 -4.810918867588043213e-01 5.167243257164955139e-02 4.629142582416534424e-01 1.000000000000000000e+00 -4.746943414211273193e-01 4.982699081301689148e-02 4.568858146667480469e-01 1.000000000000000000e+00 -4.682967960834503174e-01 4.798154532909393311e-02 4.508573710918426514e-01 1.000000000000000000e+00 -4.618992805480957031e-01 4.613609984517097473e-02 4.448288977146148682e-01 1.000000000000000000e+00 -4.555017352104187012e-01 4.429065808653831482e-02 4.388004541397094727e-01 1.000000000000000000e+00 -4.491041898727416992e-01 4.244521260261535645e-02 4.327720105648040771e-01 1.000000000000000000e+00 -4.427066445350646973e-01 4.059977084398269653e-02 4.267435669898986816e-01 1.000000000000000000e+00 -4.363090991973876953e-01 3.875432536005973816e-02 4.207151234149932861e-01 1.000000000000000000e+00 -4.299115836620330811e-01 3.690887987613677979e-02 4.146866500377655029e-01 1.000000000000000000e+00 -4.235140383243560791e-01 3.506343811750411987e-02 4.086582064628601074e-01 1.000000000000000000e+00 -4.171164929866790771e-01 3.321799263358116150e-02 4.026297628879547119e-01 1.000000000000000000e+00 -4.107189476490020752e-01 3.137255087494850159e-02 3.966013193130493164e-01 1.000000000000000000e+00 -4.043214023113250732e-01 2.952710539102554321e-02 3.905728459358215332e-01 1.000000000000000000e+00 -3.979238867759704590e-01 2.768166176974773407e-02 3.845444023609161377e-01 1.000000000000000000e+00 -3.915263414382934570e-01 2.583621628582477570e-02 3.785159587860107422e-01 1.000000000000000000e+00 -3.851287961006164551e-01 2.399077266454696655e-02 3.724875152111053467e-01 1.000000000000000000e+00 -3.787312507629394531e-01 2.214532904326915741e-02 3.664590418338775635e-01 1.000000000000000000e+00 -3.723337054252624512e-01 2.029988542199134827e-02 3.604305982589721680e-01 1.000000000000000000e+00 -3.659361898899078369e-01 1.845443993806838989e-02 3.544021546840667725e-01 1.000000000000000000e+00 -3.595386445522308350e-01 1.660899631679058075e-02 3.483737111091613770e-01 1.000000000000000000e+00 -3.531410992145538330e-01 1.476355269551277161e-02 3.423452377319335938e-01 1.000000000000000000e+00 -3.467435538768768311e-01 1.291810814291238785e-02 3.363167941570281982e-01 1.000000000000000000e+00 -3.403460085391998291e-01 1.107266452163457870e-02 3.302883505821228027e-01 1.000000000000000000e+00 -3.339484930038452148e-01 9.227219969034194946e-03 3.242599070072174072e-01 1.000000000000000000e+00 -3.275509476661682129e-01 7.381776347756385803e-03 3.182314634323120117e-01 1.000000000000000000e+00 -3.211534023284912109e-01 5.536332260817289352e-03 3.122029900550842285e-01 1.000000000000000000e+00 -3.147558569908142090e-01 3.690888173878192902e-03 3.061745464801788330e-01 1.000000000000000000e+00 -3.083583116531372070e-01 1.845444086939096451e-03 3.001461029052734375e-01 1.000000000000000000e+00 -3.019607961177825928e-01 0.000000000000000000e+00 2.941176593303680420e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/CMRmap b/fastplotlib/utils/colormaps/CMRmap deleted file mode 100644 index a5fb9dac1..000000000 --- a/fastplotlib/utils/colormaps/CMRmap +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.705882165580987930e-03 4.705882165580987930e-03 1.568627543747425079e-02 1.000000000000000000e+00 -9.411764331161975861e-03 9.411764331161975861e-03 3.137255087494850159e-02 1.000000000000000000e+00 -1.411764696240425110e-02 1.411764696240425110e-02 4.705882444977760315e-02 1.000000000000000000e+00 -1.882352866232395172e-02 1.882352866232395172e-02 6.274510174989700317e-02 1.000000000000000000e+00 -2.352941222488880157e-02 2.352941222488880157e-02 7.843137532472610474e-02 1.000000000000000000e+00 -2.823529392480850220e-02 2.823529392480850220e-02 9.411764889955520630e-02 1.000000000000000000e+00 -3.294117748737335205e-02 3.294117748737335205e-02 1.098039224743843079e-01 1.000000000000000000e+00 -3.764705732464790344e-02 3.764705732464790344e-02 1.254902034997940063e-01 1.000000000000000000e+00 -4.235294088721275330e-02 4.235294088721275330e-02 1.411764770746231079e-01 1.000000000000000000e+00 -4.705882444977760315e-02 4.705882444977760315e-02 1.568627506494522095e-01 1.000000000000000000e+00 -5.176470428705215454e-02 5.176470428705215454e-02 1.725490242242813110e-01 1.000000000000000000e+00 -5.647058784961700439e-02 5.647058784961700439e-02 1.882352977991104126e-01 1.000000000000000000e+00 -6.117647141218185425e-02 6.117647141218185425e-02 2.039215713739395142e-01 1.000000000000000000e+00 -6.588235497474670410e-02 6.588235497474670410e-02 2.196078449487686157e-01 1.000000000000000000e+00 -7.058823853731155396e-02 7.058823853731155396e-02 2.352941185235977173e-01 1.000000000000000000e+00 -7.529411464929580688e-02 7.529411464929580688e-02 2.509804069995880127e-01 1.000000000000000000e+00 -7.999999821186065674e-02 7.999999821186065674e-02 2.666666805744171143e-01 1.000000000000000000e+00 -8.470588177442550659e-02 8.470588177442550659e-02 2.823529541492462158e-01 1.000000000000000000e+00 -8.941176533699035645e-02 8.941176533699035645e-02 2.980392277240753174e-01 1.000000000000000000e+00 -9.411764889955520630e-02 9.411764889955520630e-02 3.137255012989044189e-01 1.000000000000000000e+00 -9.882353246212005615e-02 9.882353246212005615e-02 3.294117748737335205e-01 1.000000000000000000e+00 -1.035294085741043091e-01 1.035294085741043091e-01 3.450980484485626221e-01 1.000000000000000000e+00 -1.082352921366691589e-01 1.082352921366691589e-01 3.607843220233917236e-01 1.000000000000000000e+00 -1.129411756992340088e-01 1.129411756992340088e-01 3.764705955982208252e-01 1.000000000000000000e+00 -1.176470592617988586e-01 1.176470592617988586e-01 3.921568691730499268e-01 1.000000000000000000e+00 -1.223529428243637085e-01 1.223529428243637085e-01 4.078431427478790283e-01 1.000000000000000000e+00 -1.270588189363479614e-01 1.270588189363479614e-01 4.235294163227081299e-01 1.000000000000000000e+00 -1.317647099494934082e-01 1.317647099494934082e-01 4.392156898975372314e-01 1.000000000000000000e+00 -1.364705860614776611e-01 1.364705860614776611e-01 4.549019634723663330e-01 1.000000000000000000e+00 -1.411764770746231079e-01 1.411764770746231079e-01 4.705882370471954346e-01 1.000000000000000000e+00 -1.458823531866073608e-01 1.458823531866073608e-01 4.862745106220245361e-01 1.000000000000000000e+00 -1.505882292985916138e-01 1.500000059604644775e-01 5.009803771972656250e-01 1.000000000000000000e+00 -1.552941203117370605e-01 1.500000059604644775e-01 5.088235139846801758e-01 1.000000000000000000e+00 -1.599999964237213135e-01 1.500000059604644775e-01 5.166666507720947266e-01 1.000000000000000000e+00 -1.647058874368667603e-01 1.500000059604644775e-01 5.245097875595092773e-01 1.000000000000000000e+00 -1.694117635488510132e-01 1.500000059604644775e-01 5.323529243469238281e-01 1.000000000000000000e+00 -1.741176396608352661e-01 1.500000059604644775e-01 5.401960611343383789e-01 1.000000000000000000e+00 -1.788235306739807129e-01 1.500000059604644775e-01 5.480391979217529297e-01 1.000000000000000000e+00 -1.835294067859649658e-01 1.500000059604644775e-01 5.558823347091674805e-01 1.000000000000000000e+00 -1.882352977991104126e-01 1.500000059604644775e-01 5.637254714965820312e-01 1.000000000000000000e+00 -1.929411739110946655e-01 1.500000059604644775e-01 5.715686082839965820e-01 1.000000000000000000e+00 -1.976470649242401123e-01 1.500000059604644775e-01 5.794117450714111328e-01 1.000000000000000000e+00 -2.023529410362243652e-01 1.500000059604644775e-01 5.872548818588256836e-01 1.000000000000000000e+00 -2.070588171482086182e-01 1.500000059604644775e-01 5.950980186462402344e-01 1.000000000000000000e+00 -2.117647081613540649e-01 1.500000059604644775e-01 6.029411554336547852e-01 1.000000000000000000e+00 -2.164705842733383179e-01 1.500000059604644775e-01 6.107842922210693359e-01 1.000000000000000000e+00 -2.211764752864837646e-01 1.500000059604644775e-01 6.186274290084838867e-01 1.000000000000000000e+00 -2.258823513984680176e-01 1.500000059604644775e-01 6.264705657958984375e-01 1.000000000000000000e+00 -2.305882424116134644e-01 1.500000059604644775e-01 6.343137025833129883e-01 1.000000000000000000e+00 -2.352941185235977173e-01 1.500000059604644775e-01 6.421568393707275391e-01 1.000000000000000000e+00 -2.399999946355819702e-01 1.500000059604644775e-01 6.499999761581420898e-01 1.000000000000000000e+00 -2.447058856487274170e-01 1.500000059604644775e-01 6.578431129455566406e-01 1.000000000000000000e+00 -2.494117617607116699e-01 1.500000059604644775e-01 6.656862497329711914e-01 1.000000000000000000e+00 -2.541176378726959229e-01 1.500000059604644775e-01 6.735293865203857422e-01 1.000000000000000000e+00 -2.588235437870025635e-01 1.500000059604644775e-01 6.813725233078002930e-01 1.000000000000000000e+00 -2.635294198989868164e-01 1.500000059604644775e-01 6.892156600952148438e-01 1.000000000000000000e+00 -2.682352960109710693e-01 1.500000059604644775e-01 6.970587968826293945e-01 1.000000000000000000e+00 -2.729411721229553223e-01 1.500000059604644775e-01 7.049019336700439453e-01 1.000000000000000000e+00 -2.776470482349395752e-01 1.500000059604644775e-01 7.127450704574584961e-01 1.000000000000000000e+00 -2.823529541492462158e-01 1.500000059604644775e-01 7.205882072448730469e-01 1.000000000000000000e+00 -2.870588302612304688e-01 1.500000059604644775e-01 7.284313440322875977e-01 1.000000000000000000e+00 -2.917647063732147217e-01 1.500000059604644775e-01 7.362744808197021484e-01 1.000000000000000000e+00 -2.964705824851989746e-01 1.500000059604644775e-01 7.441176176071166992e-01 1.000000000000000000e+00 -3.023529350757598877e-01 1.503921598196029663e-01 7.480391860008239746e-01 1.000000000000000000e+00 -3.117647171020507812e-01 1.519607901573181152e-01 7.401960492134094238e-01 1.000000000000000000e+00 -3.211764693260192871e-01 1.535294055938720703e-01 7.323529124259948730e-01 1.000000000000000000e+00 -3.305882215499877930e-01 1.550980359315872192e-01 7.245097756385803223e-01 1.000000000000000000e+00 -3.400000035762786865e-01 1.566666662693023682e-01 7.166666388511657715e-01 1.000000000000000000e+00 -3.494117558002471924e-01 1.582352966070175171e-01 7.088235020637512207e-01 1.000000000000000000e+00 -3.588235378265380859e-01 1.598039269447326660e-01 7.009803652763366699e-01 1.000000000000000000e+00 -3.682352900505065918e-01 1.613725423812866211e-01 6.931372284889221191e-01 1.000000000000000000e+00 -3.776470720767974854e-01 1.629411727190017700e-01 6.852940917015075684e-01 1.000000000000000000e+00 -3.870588243007659912e-01 1.645098030567169189e-01 6.774509549140930176e-01 1.000000000000000000e+00 -3.964705765247344971e-01 1.660784333944320679e-01 6.696078181266784668e-01 1.000000000000000000e+00 -4.058823585510253906e-01 1.676470637321472168e-01 6.617646813392639160e-01 1.000000000000000000e+00 -4.152941107749938965e-01 1.692156791687011719e-01 6.539215445518493652e-01 1.000000000000000000e+00 -4.247058928012847900e-01 1.707843095064163208e-01 6.460784077644348145e-01 1.000000000000000000e+00 -4.341176450252532959e-01 1.723529398441314697e-01 6.382352709770202637e-01 1.000000000000000000e+00 -4.435293972492218018e-01 1.739215701818466187e-01 6.303921341896057129e-01 1.000000000000000000e+00 -4.529411792755126953e-01 1.754902005195617676e-01 6.225489974021911621e-01 1.000000000000000000e+00 -4.623529314994812012e-01 1.770588308572769165e-01 6.147058606147766113e-01 1.000000000000000000e+00 -4.717647135257720947e-01 1.786274462938308716e-01 6.068627238273620605e-01 1.000000000000000000e+00 -4.811764657497406006e-01 1.801960766315460205e-01 5.990195870399475098e-01 1.000000000000000000e+00 -4.905882477760314941e-01 1.817647069692611694e-01 5.911764502525329590e-01 1.000000000000000000e+00 -5.000000000000000000e-01 1.833333373069763184e-01 5.833333134651184082e-01 1.000000000000000000e+00 -5.094117522239685059e-01 1.849019676446914673e-01 5.754901766777038574e-01 1.000000000000000000e+00 -5.188235044479370117e-01 1.864705830812454224e-01 5.676470398902893066e-01 1.000000000000000000e+00 -5.282353162765502930e-01 1.880392134189605713e-01 5.598039031028747559e-01 1.000000000000000000e+00 -5.376470685005187988e-01 1.896078437566757202e-01 5.519607663154602051e-01 1.000000000000000000e+00 -5.470588207244873047e-01 1.911764740943908691e-01 5.441176295280456543e-01 1.000000000000000000e+00 -5.564705729484558105e-01 1.927451044321060181e-01 5.362744927406311035e-01 1.000000000000000000e+00 -5.658823251724243164e-01 1.943137198686599731e-01 5.284313559532165527e-01 1.000000000000000000e+00 -5.752941370010375977e-01 1.958823502063751221e-01 5.205882191658020020e-01 1.000000000000000000e+00 -5.847058892250061035e-01 1.974509805440902710e-01 5.127450823783874512e-01 1.000000000000000000e+00 -5.941176414489746094e-01 1.990196108818054199e-01 5.049019455909729004e-01 1.000000000000000000e+00 -6.047058701515197754e-01 2.005882412195205688e-01 4.958823621273040771e-01 1.000000000000000000e+00 -6.172549128532409668e-01 2.021568566560745239e-01 4.849019646644592285e-01 1.000000000000000000e+00 -6.298038959503173828e-01 2.037254869937896729e-01 4.739215672016143799e-01 1.000000000000000000e+00 -6.423529386520385742e-01 2.052941173315048218e-01 4.629411697387695312e-01 1.000000000000000000e+00 -6.549019813537597656e-01 2.068627476692199707e-01 4.519607722759246826e-01 1.000000000000000000e+00 -6.674509644508361816e-01 2.084313780069351196e-01 4.409804046154022217e-01 1.000000000000000000e+00 -6.800000071525573730e-01 2.099999934434890747e-01 4.300000071525573730e-01 1.000000000000000000e+00 -6.925489902496337891e-01 2.115686237812042236e-01 4.190196096897125244e-01 1.000000000000000000e+00 -7.050980329513549805e-01 2.131372541189193726e-01 4.080392122268676758e-01 1.000000000000000000e+00 -7.176470756530761719e-01 2.147058844566345215e-01 3.970588147640228271e-01 1.000000000000000000e+00 -7.301960587501525879e-01 2.162745147943496704e-01 3.860784173011779785e-01 1.000000000000000000e+00 -7.427451014518737793e-01 2.178431302309036255e-01 3.750980496406555176e-01 1.000000000000000000e+00 -7.552941441535949707e-01 2.194117605686187744e-01 3.641176521778106689e-01 1.000000000000000000e+00 -7.678431272506713867e-01 2.209803909063339233e-01 3.531372547149658203e-01 1.000000000000000000e+00 -7.803921699523925781e-01 2.225490212440490723e-01 3.421568572521209717e-01 1.000000000000000000e+00 -7.929411530494689941e-01 2.241176515817642212e-01 3.311764597892761230e-01 1.000000000000000000e+00 -8.054901957511901855e-01 2.256862819194793701e-01 3.201960921287536621e-01 1.000000000000000000e+00 -8.180392384529113770e-01 2.272548973560333252e-01 3.092156946659088135e-01 1.000000000000000000e+00 -8.305882215499877930e-01 2.288235276937484741e-01 2.982352972030639648e-01 1.000000000000000000e+00 -8.431372642517089844e-01 2.303921580314636230e-01 2.872548997402191162e-01 1.000000000000000000e+00 -8.556862473487854004e-01 2.319607883691787720e-01 2.762745022773742676e-01 1.000000000000000000e+00 -8.682352900505065918e-01 2.335294187068939209e-01 2.652941048145294189e-01 1.000000000000000000e+00 -8.807843327522277832e-01 2.350980341434478760e-01 2.543137371540069580e-01 1.000000000000000000e+00 -8.933333158493041992e-01 2.366666644811630249e-01 2.433333396911621094e-01 1.000000000000000000e+00 -9.058823585510253906e-01 2.382352948188781738e-01 2.323529422283172607e-01 1.000000000000000000e+00 -9.184314012527465820e-01 2.398039251565933228e-01 2.213725447654724121e-01 1.000000000000000000e+00 -9.309803843498229980e-01 2.413725554943084717e-01 2.103921622037887573e-01 1.000000000000000000e+00 -9.435294270515441895e-01 2.429411709308624268e-01 1.994117647409439087e-01 1.000000000000000000e+00 -9.560784101486206055e-01 2.445098012685775757e-01 1.884313672780990601e-01 1.000000000000000000e+00 -9.686274528503417969e-01 2.460784316062927246e-01 1.774509847164154053e-01 1.000000000000000000e+00 -9.811764955520629883e-01 2.476470619440078735e-01 1.664705872535705566e-01 1.000000000000000000e+00 -9.937254786491394043e-01 2.492156922817230225e-01 1.554901897907257080e-01 1.000000000000000000e+00 -9.984313845634460449e-01 2.539215683937072754e-01 1.476470530033111572e-01 1.000000000000000000e+00 -9.952940940856933594e-01 2.617647051811218262e-01 1.429411768913269043e-01 1.000000000000000000e+00 -9.921568632125854492e-01 2.696078419685363770e-01 1.382353007793426514e-01 1.000000000000000000e+00 -9.890196323394775391e-01 2.774509787559509277e-01 1.335294097661972046e-01 1.000000000000000000e+00 -9.858823418617248535e-01 2.852941155433654785e-01 1.288235336542129517e-01 1.000000000000000000e+00 -9.827451109886169434e-01 2.931372523307800293e-01 1.241176500916481018e-01 1.000000000000000000e+00 -9.796078205108642578e-01 3.009803891181945801e-01 1.194117665290832520e-01 1.000000000000000000e+00 -9.764705896377563477e-01 3.088235259056091309e-01 1.147058829665184021e-01 1.000000000000000000e+00 -9.733333587646484375e-01 3.166666626930236816e-01 1.099999994039535522e-01 1.000000000000000000e+00 -9.701960682868957520e-01 3.245097994804382324e-01 1.052941158413887024e-01 1.000000000000000000e+00 -9.670588374137878418e-01 3.323529362678527832e-01 1.005882322788238525e-01 1.000000000000000000e+00 -9.639215469360351562e-01 3.401960730552673340e-01 9.588235616683959961e-02 1.000000000000000000e+00 -9.607843160629272461e-01 3.480392098426818848e-01 9.117647260427474976e-02 1.000000000000000000e+00 -9.576470851898193359e-01 3.558823466300964355e-01 8.647058904170989990e-02 1.000000000000000000e+00 -9.545097947120666504e-01 3.637254834175109863e-01 8.176470547914505005e-02 1.000000000000000000e+00 -9.513725638389587402e-01 3.715686202049255371e-01 7.705882191658020020e-02 1.000000000000000000e+00 -9.482352733612060547e-01 3.794117569923400879e-01 7.235293835401535034e-02 1.000000000000000000e+00 -9.450980424880981445e-01 3.872548937797546387e-01 6.764706224203109741e-02 1.000000000000000000e+00 -9.419608116149902344e-01 3.950980305671691895e-01 6.294117867946624756e-02 1.000000000000000000e+00 -9.388235211372375488e-01 4.029411673545837402e-01 5.823529511690139771e-02 1.000000000000000000e+00 -9.356862902641296387e-01 4.107843041419982910e-01 5.352941155433654785e-02 1.000000000000000000e+00 -9.325489997863769531e-01 4.186274409294128418e-01 4.882352799177169800e-02 1.000000000000000000e+00 -9.294117689132690430e-01 4.264705777168273926e-01 4.411764815449714661e-02 1.000000000000000000e+00 -9.262745380401611328e-01 4.343137145042419434e-01 3.941176459193229675e-02 1.000000000000000000e+00 -9.231372475624084473e-01 4.421568512916564941e-01 3.470588102936744690e-02 1.000000000000000000e+00 -9.200000166893005371e-01 4.499999880790710449e-01 2.999999932944774628e-02 1.000000000000000000e+00 -9.168627262115478516e-01 4.578431248664855957e-01 2.529411762952804565e-02 1.000000000000000000e+00 -9.137254953384399414e-01 4.656862616539001465e-01 2.058823592960834503e-02 1.000000000000000000e+00 -9.105882644653320312e-01 4.735293984413146973e-01 1.588235236704349518e-02 1.000000000000000000e+00 -9.074509739875793457e-01 4.813725352287292480e-01 1.117647066712379456e-02 1.000000000000000000e+00 -9.043137431144714355e-01 4.892156720161437988e-01 6.470588035881519318e-03 1.000000000000000000e+00 -9.011764526367187500e-01 4.970588088035583496e-01 1.764705870300531387e-03 1.000000000000000000e+00 -8.999999761581420898e-01 5.049019455909729004e-01 1.960784429684281349e-03 1.000000000000000000e+00 -8.999999761581420898e-01 5.127450823783874512e-01 5.098039284348487854e-03 1.000000000000000000e+00 -8.999999761581420898e-01 5.205882191658020020e-01 8.235294371843338013e-03 1.000000000000000000e+00 -8.999999761581420898e-01 5.284313559532165527e-01 1.137254945933818817e-02 1.000000000000000000e+00 -8.999999761581420898e-01 5.362744927406311035e-01 1.450980361551046371e-02 1.000000000000000000e+00 -8.999999761581420898e-01 5.441176295280456543e-01 1.764705963432788849e-02 1.000000000000000000e+00 -8.999999761581420898e-01 5.519607663154602051e-01 2.078431285917758942e-02 1.000000000000000000e+00 -8.999999761581420898e-01 5.598039031028747559e-01 2.392156794667243958e-02 1.000000000000000000e+00 -8.999999761581420898e-01 5.676470398902893066e-01 2.705882303416728973e-02 1.000000000000000000e+00 -8.999999761581420898e-01 5.754901766777038574e-01 3.019607812166213989e-02 1.000000000000000000e+00 -8.999999761581420898e-01 5.833333134651184082e-01 3.333333507180213928e-02 1.000000000000000000e+00 -8.999999761581420898e-01 5.911764502525329590e-01 3.647058829665184021e-02 1.000000000000000000e+00 -8.999999761581420898e-01 5.990195870399475098e-01 3.960784152150154114e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.068627238273620605e-01 4.274509847164154053e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.147058606147766113e-01 4.588235169649124146e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.225489974021911621e-01 4.901960864663124084e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.303921341896057129e-01 5.215686187148094177e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.382352709770202637e-01 5.529411882162094116e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.460784077644348145e-01 5.843137204647064209e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.539215445518493652e-01 6.156862899661064148e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.617646813392639160e-01 6.470588594675064087e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.696078181266784668e-01 6.784313917160034180e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.774509549140930176e-01 7.098039239645004272e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.852940917015075684e-01 7.411764562129974365e-02 1.000000000000000000e+00 -8.999999761581420898e-01 6.931372284889221191e-01 7.725489884614944458e-02 1.000000000000000000e+00 -8.999999761581420898e-01 7.009803652763366699e-01 8.039215952157974243e-02 1.000000000000000000e+00 -8.999999761581420898e-01 7.088235020637512207e-01 8.352941274642944336e-02 1.000000000000000000e+00 -8.999999761581420898e-01 7.166666388511657715e-01 8.666666597127914429e-02 1.000000000000000000e+00 -8.999999761581420898e-01 7.245097756385803223e-01 8.980391919612884521e-02 1.000000000000000000e+00 -8.999999761581420898e-01 7.323529124259948730e-01 9.294117987155914307e-02 1.000000000000000000e+00 -8.999999761581420898e-01 7.401960492134094238e-01 9.607843309640884399e-02 1.000000000000000000e+00 -8.999999761581420898e-01 7.480391860008239746e-01 9.921568632125854492e-02 1.000000000000000000e+00 -8.999999761581420898e-01 7.535294294357299805e-01 1.094117611646652222e-01 1.000000000000000000e+00 -8.999999761581420898e-01 7.582352757453918457e-01 1.219607815146446228e-01 1.000000000000000000e+00 -8.999999761581420898e-01 7.629411816596984863e-01 1.345098018646240234e-01 1.000000000000000000e+00 -8.999999761581420898e-01 7.676470875740051270e-01 1.470588296651840210e-01 1.000000000000000000e+00 -8.999999761581420898e-01 7.723529338836669922e-01 1.596078425645828247e-01 1.000000000000000000e+00 -8.999999761581420898e-01 7.770588397979736328e-01 1.721568554639816284e-01 1.000000000000000000e+00 -8.999999761581420898e-01 7.817646861076354980e-01 1.847058832645416260e-01 1.000000000000000000e+00 -8.999999761581420898e-01 7.864705920219421387e-01 1.972548961639404297e-01 1.000000000000000000e+00 -8.999999761581420898e-01 7.911764979362487793e-01 2.098039239645004272e-01 1.000000000000000000e+00 -8.999999761581420898e-01 7.958823442459106445e-01 2.223529368638992310e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.005882501602172852e-01 2.349019646644592285e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.052940964698791504e-01 2.474509775638580322e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.100000023841857910e-01 2.599999904632568359e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.147059082984924316e-01 2.725490331649780273e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.194117546081542969e-01 2.850980460643768311e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.241176605224609375e-01 2.976470589637756348e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.288235068321228027e-01 3.101960718631744385e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.335294127464294434e-01 3.227450847625732422e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.382353186607360840e-01 3.352941274642944336e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.429411649703979492e-01 3.478431403636932373e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.476470708847045898e-01 3.603921532630920410e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.523529171943664551e-01 3.729411661624908447e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.570588231086730957e-01 3.854902088642120361e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.617647290229797363e-01 3.980392217636108398e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.664705753326416016e-01 4.105882346630096436e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.711764812469482422e-01 4.231372475624084473e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.758823275566101074e-01 4.356862604618072510e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.805882334709167480e-01 4.482353031635284424e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.852941393852233887e-01 4.607843160629272461e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.899999856948852539e-01 4.733333289623260498e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.947058916091918945e-01 4.858823418617248535e-01 1.000000000000000000e+00 -8.999999761581420898e-01 8.994117379188537598e-01 4.984313845634460449e-01 1.000000000000000000e+00 -9.027451276779174805e-01 9.027451276779174805e-01 5.137255191802978516e-01 1.000000000000000000e+00 -9.058823585510253906e-01 9.058823585510253906e-01 5.294117927551269531e-01 1.000000000000000000e+00 -9.090195894241333008e-01 9.090195894241333008e-01 5.450980663299560547e-01 1.000000000000000000e+00 -9.121568799018859863e-01 9.121568799018859863e-01 5.607843399047851562e-01 1.000000000000000000e+00 -9.152941107749938965e-01 9.152941107749938965e-01 5.764706134796142578e-01 1.000000000000000000e+00 -9.184314012527465820e-01 9.184314012527465820e-01 5.921568870544433594e-01 1.000000000000000000e+00 -9.215686321258544922e-01 9.215686321258544922e-01 6.078431606292724609e-01 1.000000000000000000e+00 -9.247058629989624023e-01 9.247058629989624023e-01 6.235294342041015625e-01 1.000000000000000000e+00 -9.278431534767150879e-01 9.278431534767150879e-01 6.392157077789306641e-01 1.000000000000000000e+00 -9.309803843498229980e-01 9.309803843498229980e-01 6.549019813537597656e-01 1.000000000000000000e+00 -9.341176748275756836e-01 9.341176748275756836e-01 6.705882549285888672e-01 1.000000000000000000e+00 -9.372549057006835938e-01 9.372549057006835938e-01 6.862745285034179688e-01 1.000000000000000000e+00 -9.403921365737915039e-01 9.403921365737915039e-01 7.019608020782470703e-01 1.000000000000000000e+00 -9.435294270515441895e-01 9.435294270515441895e-01 7.176470756530761719e-01 1.000000000000000000e+00 -9.466666579246520996e-01 9.466666579246520996e-01 7.333333492279052734e-01 1.000000000000000000e+00 -9.498039484024047852e-01 9.498039484024047852e-01 7.490196228027343750e-01 1.000000000000000000e+00 -9.529411792755126953e-01 9.529411792755126953e-01 7.647058963775634766e-01 1.000000000000000000e+00 -9.560784101486206055e-01 9.560784101486206055e-01 7.803921699523925781e-01 1.000000000000000000e+00 -9.592157006263732910e-01 9.592157006263732910e-01 7.960784435272216797e-01 1.000000000000000000e+00 -9.623529314994812012e-01 9.623529314994812012e-01 8.117647171020507812e-01 1.000000000000000000e+00 -9.654902219772338867e-01 9.654902219772338867e-01 8.274509906768798828e-01 1.000000000000000000e+00 -9.686274528503417969e-01 9.686274528503417969e-01 8.431372642517089844e-01 1.000000000000000000e+00 -9.717646837234497070e-01 9.717646837234497070e-01 8.588235378265380859e-01 1.000000000000000000e+00 -9.749019742012023926e-01 9.749019742012023926e-01 8.745098114013671875e-01 1.000000000000000000e+00 -9.780392050743103027e-01 9.780392050743103027e-01 8.901960849761962891e-01 1.000000000000000000e+00 -9.811764955520629883e-01 9.811764955520629883e-01 9.058823585510253906e-01 1.000000000000000000e+00 -9.843137264251708984e-01 9.843137264251708984e-01 9.215686321258544922e-01 1.000000000000000000e+00 -9.874509572982788086e-01 9.874509572982788086e-01 9.372549057006835938e-01 1.000000000000000000e+00 -9.905882477760314941e-01 9.905882477760314941e-01 9.529411792755126953e-01 1.000000000000000000e+00 -9.937254786491394043e-01 9.937254786491394043e-01 9.686274528503417969e-01 1.000000000000000000e+00 -9.968627691268920898e-01 9.968627691268920898e-01 9.843137264251708984e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Dark2 b/fastplotlib/utils/colormaps/Dark2 deleted file mode 100644 index 08f686764..000000000 --- a/fastplotlib/utils/colormaps/Dark2 +++ /dev/null @@ -1,8 +0,0 @@ -1.058823540806770325e-01 6.196078658103942871e-01 4.666666686534881592e-01 1.000000000000000000e+00 -8.509804010391235352e-01 3.725490272045135498e-01 7.843137718737125397e-03 1.000000000000000000e+00 -4.588235318660736084e-01 4.392156898975372314e-01 7.019608020782470703e-01 1.000000000000000000e+00 -9.058823585510253906e-01 1.607843190431594849e-01 5.411764979362487793e-01 1.000000000000000000e+00 -4.000000059604644775e-01 6.509804129600524902e-01 1.176470592617988586e-01 1.000000000000000000e+00 -9.019607901573181152e-01 6.705882549285888672e-01 7.843137718737125397e-03 1.000000000000000000e+00 -6.509804129600524902e-01 4.627451002597808838e-01 1.137254908680915833e-01 1.000000000000000000e+00 -4.000000059604644775e-01 4.000000059604644775e-01 4.000000059604644775e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/GnBu b/fastplotlib/utils/colormaps/GnBu deleted file mode 100644 index a1d789dd7..000000000 --- a/fastplotlib/utils/colormaps/GnBu +++ /dev/null @@ -1,256 +0,0 @@ -9.686274528503417969e-01 9.882352948188781738e-01 9.411764740943908691e-01 1.000000000000000000e+00 -9.657977819442749023e-01 9.871280193328857422e-01 9.385928511619567871e-01 1.000000000000000000e+00 -9.629681110382080078e-01 9.860207438468933105e-01 9.360092282295227051e-01 1.000000000000000000e+00 -9.601383805274963379e-01 9.849134683609008789e-01 9.334256052970886230e-01 1.000000000000000000e+00 -9.573087096214294434e-01 9.838062524795532227e-01 9.308419823646545410e-01 1.000000000000000000e+00 -9.544790387153625488e-01 9.826989769935607910e-01 9.282583594322204590e-01 1.000000000000000000e+00 -9.516493678092956543e-01 9.815917015075683594e-01 9.256747364997863770e-01 1.000000000000000000e+00 -9.488196969032287598e-01 9.804844260215759277e-01 9.230911135673522949e-01 1.000000000000000000e+00 -9.459900259971618652e-01 9.793771505355834961e-01 9.205074906349182129e-01 1.000000000000000000e+00 -9.431602954864501953e-01 9.782698750495910645e-01 9.179238677024841309e-01 1.000000000000000000e+00 -9.403306245803833008e-01 9.771626591682434082e-01 9.153402447700500488e-01 1.000000000000000000e+00 -9.375009536743164062e-01 9.760553836822509766e-01 9.127566218376159668e-01 1.000000000000000000e+00 -9.346712827682495117e-01 9.749481081962585449e-01 9.101729989051818848e-01 1.000000000000000000e+00 -9.318416118621826172e-01 9.738408327102661133e-01 9.075893759727478027e-01 1.000000000000000000e+00 -9.290119409561157227e-01 9.727335572242736816e-01 9.050057530403137207e-01 1.000000000000000000e+00 -9.261822104454040527e-01 9.716262817382812500e-01 9.024221301078796387e-01 1.000000000000000000e+00 -9.233525395393371582e-01 9.705190062522888184e-01 8.998385071754455566e-01 1.000000000000000000e+00 -9.205228686332702637e-01 9.694117903709411621e-01 8.972548842430114746e-01 1.000000000000000000e+00 -9.176931977272033691e-01 9.683045148849487305e-01 8.946712613105773926e-01 1.000000000000000000e+00 -9.148635268211364746e-01 9.671972393989562988e-01 8.920876383781433105e-01 1.000000000000000000e+00 -9.120338559150695801e-01 9.660899639129638672e-01 8.895040154457092285e-01 1.000000000000000000e+00 -9.092041254043579102e-01 9.649826884269714355e-01 8.869203925132751465e-01 1.000000000000000000e+00 -9.063744544982910156e-01 9.638754129409790039e-01 8.843367695808410645e-01 1.000000000000000000e+00 -9.035447835922241211e-01 9.627681374549865723e-01 8.817531466484069824e-01 1.000000000000000000e+00 -9.007151126861572266e-01 9.616609215736389160e-01 8.791695237159729004e-01 1.000000000000000000e+00 -8.978854417800903320e-01 9.605536460876464844e-01 8.765859007835388184e-01 1.000000000000000000e+00 -8.950557708740234375e-01 9.594463706016540527e-01 8.740022778511047363e-01 1.000000000000000000e+00 -8.922260403633117676e-01 9.583390951156616211e-01 8.714187145233154297e-01 1.000000000000000000e+00 -8.893963694572448730e-01 9.572318196296691895e-01 8.688350915908813477e-01 1.000000000000000000e+00 -8.865666985511779785e-01 9.561245441436767578e-01 8.662514686584472656e-01 1.000000000000000000e+00 -8.837370276451110840e-01 9.550173282623291016e-01 8.636678457260131836e-01 1.000000000000000000e+00 -8.809073567390441895e-01 9.539100527763366699e-01 8.610842227935791016e-01 1.000000000000000000e+00 -8.781238198280334473e-01 9.528181552886962891e-01 8.584852218627929688e-01 1.000000000000000000e+00 -8.756632208824157715e-01 9.518339037895202637e-01 8.557785749435424805e-01 1.000000000000000000e+00 -8.732026219367980957e-01 9.508496522903442383e-01 8.530718684196472168e-01 1.000000000000000000e+00 -8.707420229911804199e-01 9.498654603958129883e-01 8.503652215003967285e-01 1.000000000000000000e+00 -8.682814240455627441e-01 9.488812088966369629e-01 8.476585745811462402e-01 1.000000000000000000e+00 -8.658208250999450684e-01 9.478969573974609375e-01 8.449519276618957520e-01 1.000000000000000000e+00 -8.633602261543273926e-01 9.469127058982849121e-01 8.422452807426452637e-01 1.000000000000000000e+00 -8.608996272087097168e-01 9.459285140037536621e-01 8.395386338233947754e-01 1.000000000000000000e+00 -8.584390878677368164e-01 9.449442625045776367e-01 8.368319869041442871e-01 1.000000000000000000e+00 -8.559784889221191406e-01 9.439600110054016113e-01 8.341253399848937988e-01 1.000000000000000000e+00 -8.535178899765014648e-01 9.429757595062255859e-01 8.314186930656433105e-01 1.000000000000000000e+00 -8.510572910308837891e-01 9.419915676116943359e-01 8.287120461463928223e-01 1.000000000000000000e+00 -8.485966920852661133e-01 9.410073161125183105e-01 8.260053992271423340e-01 1.000000000000000000e+00 -8.461360931396484375e-01 9.400230646133422852e-01 8.232987523078918457e-01 1.000000000000000000e+00 -8.436754941940307617e-01 9.390388131141662598e-01 8.205921053886413574e-01 1.000000000000000000e+00 -8.412148952484130859e-01 9.380546212196350098e-01 8.178854584693908691e-01 1.000000000000000000e+00 -8.387542963027954102e-01 9.370703697204589844e-01 8.151787519454956055e-01 1.000000000000000000e+00 -8.362937569618225098e-01 9.360861182212829590e-01 8.124721050262451172e-01 1.000000000000000000e+00 -8.338331580162048340e-01 9.351018667221069336e-01 8.097654581069946289e-01 1.000000000000000000e+00 -8.313725590705871582e-01 9.341176748275756836e-01 8.070588111877441406e-01 1.000000000000000000e+00 -8.289119601249694824e-01 9.331334233283996582e-01 8.043521642684936523e-01 1.000000000000000000e+00 -8.264513611793518066e-01 9.321491718292236328e-01 8.016455173492431641e-01 1.000000000000000000e+00 -8.239907622337341309e-01 9.311649203300476074e-01 7.989388704299926758e-01 1.000000000000000000e+00 -8.215301632881164551e-01 9.301807284355163574e-01 7.962322235107421875e-01 1.000000000000000000e+00 -8.190695643424987793e-01 9.291964769363403320e-01 7.935255765914916992e-01 1.000000000000000000e+00 -8.166090250015258789e-01 9.282122254371643066e-01 7.908189296722412109e-01 1.000000000000000000e+00 -8.141484260559082031e-01 9.272279739379882812e-01 7.881122827529907227e-01 1.000000000000000000e+00 -8.116878271102905273e-01 9.262437820434570312e-01 7.854056358337402344e-01 1.000000000000000000e+00 -8.092272281646728516e-01 9.252595305442810059e-01 7.826989889144897461e-01 1.000000000000000000e+00 -8.067666292190551758e-01 9.242752790451049805e-01 7.799922823905944824e-01 1.000000000000000000e+00 -8.043060302734375000e-01 9.232910275459289551e-01 7.772856354713439941e-01 1.000000000000000000e+00 -8.018454313278198242e-01 9.223067760467529297e-01 7.745789885520935059e-01 1.000000000000000000e+00 -7.988927364349365234e-01 9.211380481719970703e-01 7.720568776130676270e-01 1.000000000000000000e+00 -7.944636940956115723e-01 9.194155931472778320e-01 7.700884342193603516e-01 1.000000000000000000e+00 -7.900345921516418457e-01 9.176931977272033691e-01 7.681199312210083008e-01 1.000000000000000000e+00 -7.856055498123168945e-01 9.159708023071289062e-01 7.661514878273010254e-01 1.000000000000000000e+00 -7.811764478683471680e-01 9.142483472824096680e-01 7.641829848289489746e-01 1.000000000000000000e+00 -7.767474055290222168e-01 9.125259518623352051e-01 7.622145414352416992e-01 1.000000000000000000e+00 -7.723183631896972656e-01 9.108035564422607422e-01 7.602460384368896484e-01 1.000000000000000000e+00 -7.678892612457275391e-01 9.090811014175415039e-01 7.582775950431823730e-01 1.000000000000000000e+00 -7.634602189064025879e-01 9.073587059974670410e-01 7.563090920448303223e-01 1.000000000000000000e+00 -7.590311169624328613e-01 9.056363105773925781e-01 7.543406486511230469e-01 1.000000000000000000e+00 -7.546020746231079102e-01 9.039138555526733398e-01 7.523721456527709961e-01 1.000000000000000000e+00 -7.501730322837829590e-01 9.021914601325988770e-01 7.504037022590637207e-01 1.000000000000000000e+00 -7.457439303398132324e-01 9.004690647125244141e-01 7.484351992607116699e-01 1.000000000000000000e+00 -7.413148880004882812e-01 8.987466096878051758e-01 7.464667558670043945e-01 1.000000000000000000e+00 -7.368857860565185547e-01 8.970242142677307129e-01 7.444982528686523438e-01 1.000000000000000000e+00 -7.324567437171936035e-01 8.953018188476562500e-01 7.425298094749450684e-01 1.000000000000000000e+00 -7.280277013778686523e-01 8.935793638229370117e-01 7.405613064765930176e-01 1.000000000000000000e+00 -7.235985994338989258e-01 8.918569684028625488e-01 7.385928630828857422e-01 1.000000000000000000e+00 -7.191695570945739746e-01 8.901345729827880859e-01 7.366243600845336914e-01 1.000000000000000000e+00 -7.147404551506042480e-01 8.884121775627136230e-01 7.346559166908264160e-01 1.000000000000000000e+00 -7.103114128112792969e-01 8.866897225379943848e-01 7.326874136924743652e-01 1.000000000000000000e+00 -7.058823704719543457e-01 8.849673271179199219e-01 7.307189702987670898e-01 1.000000000000000000e+00 -7.014532685279846191e-01 8.832449316978454590e-01 7.287504673004150391e-01 1.000000000000000000e+00 -6.970242261886596680e-01 8.815224766731262207e-01 7.267820239067077637e-01 1.000000000000000000e+00 -6.925951838493347168e-01 8.798000812530517578e-01 7.248135209083557129e-01 1.000000000000000000e+00 -6.881660819053649902e-01 8.780776858329772949e-01 7.228450775146484375e-01 1.000000000000000000e+00 -6.837370395660400391e-01 8.763552308082580566e-01 7.208765745162963867e-01 1.000000000000000000e+00 -6.793079376220703125e-01 8.746328353881835938e-01 7.189081311225891113e-01 1.000000000000000000e+00 -6.748788952827453613e-01 8.729104399681091309e-01 7.169396281242370605e-01 1.000000000000000000e+00 -6.704498529434204102e-01 8.711879849433898926e-01 7.149711847305297852e-01 1.000000000000000000e+00 -6.660207509994506836e-01 8.694655895233154297e-01 7.130026817321777344e-01 1.000000000000000000e+00 -6.615917086601257324e-01 8.677431941032409668e-01 7.110342383384704590e-01 1.000000000000000000e+00 -6.567474007606506348e-01 8.658823370933532715e-01 7.104959487915039062e-01 1.000000000000000000e+00 -6.512110829353332520e-01 8.637908697128295898e-01 7.123414278030395508e-01 1.000000000000000000e+00 -6.456747651100158691e-01 8.616993427276611328e-01 7.141868472099304199e-01 1.000000000000000000e+00 -6.401383876800537109e-01 8.596078157424926758e-01 7.160322666168212891e-01 1.000000000000000000e+00 -6.346020698547363281e-01 8.575163483619689941e-01 7.178777456283569336e-01 1.000000000000000000e+00 -6.290657520294189453e-01 8.554248213768005371e-01 7.197231650352478027e-01 1.000000000000000000e+00 -6.235294342041015625e-01 8.533333539962768555e-01 7.215686440467834473e-01 1.000000000000000000e+00 -6.179930567741394043e-01 8.512418270111083984e-01 7.234140634536743164e-01 1.000000000000000000e+00 -6.124567389488220215e-01 8.491503000259399414e-01 7.252595424652099609e-01 1.000000000000000000e+00 -6.069204211235046387e-01 8.470588326454162598e-01 7.271049618721008301e-01 1.000000000000000000e+00 -6.013841032981872559e-01 8.449673056602478027e-01 7.289503812789916992e-01 1.000000000000000000e+00 -5.958477258682250977e-01 8.428758382797241211e-01 7.307958602905273438e-01 1.000000000000000000e+00 -5.903114080429077148e-01 8.407843112945556641e-01 7.326412796974182129e-01 1.000000000000000000e+00 -5.847750902175903320e-01 8.386927843093872070e-01 7.344867587089538574e-01 1.000000000000000000e+00 -5.792387723922729492e-01 8.366013169288635254e-01 7.363321781158447266e-01 1.000000000000000000e+00 -5.737023949623107910e-01 8.345097899436950684e-01 7.381775975227355957e-01 1.000000000000000000e+00 -5.681660771369934082e-01 8.324183225631713867e-01 7.400230765342712402e-01 1.000000000000000000e+00 -5.626297593116760254e-01 8.303267955780029297e-01 7.418684959411621094e-01 1.000000000000000000e+00 -5.570934414863586426e-01 8.282352685928344727e-01 7.437139749526977539e-01 1.000000000000000000e+00 -5.515570640563964844e-01 8.261438012123107910e-01 7.455593943595886230e-01 1.000000000000000000e+00 -5.460207462310791016e-01 8.240522742271423340e-01 7.474048733711242676e-01 1.000000000000000000e+00 -5.404844284057617188e-01 8.219608068466186523e-01 7.492502927780151367e-01 1.000000000000000000e+00 -5.349481105804443359e-01 8.198692798614501953e-01 7.510957121849060059e-01 1.000000000000000000e+00 -5.294117927551269531e-01 8.177777528762817383e-01 7.529411911964416504e-01 1.000000000000000000e+00 -5.238754153251647949e-01 8.156862854957580566e-01 7.547866106033325195e-01 1.000000000000000000e+00 -5.183390974998474121e-01 8.135947585105895996e-01 7.566320896148681641e-01 1.000000000000000000e+00 -5.128027796745300293e-01 8.115032911300659180e-01 7.584775090217590332e-01 1.000000000000000000e+00 -5.072664618492126465e-01 8.094117641448974609e-01 7.603229284286499023e-01 1.000000000000000000e+00 -5.017300844192504883e-01 8.073202371597290039e-01 7.621684074401855469e-01 1.000000000000000000e+00 -4.961937665939331055e-01 8.052287697792053223e-01 7.640138268470764160e-01 1.000000000000000000e+00 -4.906574487686157227e-01 8.031372427940368652e-01 7.658593058586120605e-01 1.000000000000000000e+00 -4.851211011409759521e-01 8.010457754135131836e-01 7.677047252655029297e-01 1.000000000000000000e+00 -4.795847833156585693e-01 7.984621524810791016e-01 7.695501446723937988e-01 1.000000000000000000e+00 -4.740484356880187988e-01 7.953863739967346191e-01 7.713956236839294434e-01 1.000000000000000000e+00 -4.685121178627014160e-01 7.923106551170349121e-01 7.732410430908203125e-01 1.000000000000000000e+00 -4.629757702350616455e-01 7.892349362373352051e-01 7.750865221023559570e-01 1.000000000000000000e+00 -4.574394524097442627e-01 7.861591577529907227e-01 7.769319415092468262e-01 1.000000000000000000e+00 -4.519031047821044922e-01 7.830834388732910156e-01 7.787774205207824707e-01 1.000000000000000000e+00 -4.463667869567871094e-01 7.800076603889465332e-01 7.806228399276733398e-01 1.000000000000000000e+00 -4.408304393291473389e-01 7.769319415092468262e-01 7.824682593345642090e-01 1.000000000000000000e+00 -4.352941215038299561e-01 7.738562226295471191e-01 7.843137383460998535e-01 1.000000000000000000e+00 -4.297577738761901855e-01 7.707804441452026367e-01 7.861591577529907227e-01 1.000000000000000000e+00 -4.242214560508728027e-01 7.677047252655029297e-01 7.880046367645263672e-01 1.000000000000000000e+00 -4.186851084232330322e-01 7.646290063858032227e-01 7.898500561714172363e-01 1.000000000000000000e+00 -4.131487905979156494e-01 7.615532279014587402e-01 7.916954755783081055e-01 1.000000000000000000e+00 -4.076124429702758789e-01 7.584775090217590332e-01 7.935409545898437500e-01 1.000000000000000000e+00 -4.020761251449584961e-01 7.554017901420593262e-01 7.953863739967346191e-01 1.000000000000000000e+00 -3.965397775173187256e-01 7.523260116577148438e-01 7.972318530082702637e-01 1.000000000000000000e+00 -3.910034596920013428e-01 7.492502927780151367e-01 7.990772724151611328e-01 1.000000000000000000e+00 -3.854671418666839600e-01 7.461745738983154297e-01 8.009227514266967773e-01 1.000000000000000000e+00 -3.799307942390441895e-01 7.430987954139709473e-01 8.027681708335876465e-01 1.000000000000000000e+00 -3.743944764137268066e-01 7.400230765342712402e-01 8.046135902404785156e-01 1.000000000000000000e+00 -3.688581287860870361e-01 7.369473576545715332e-01 8.064590692520141602e-01 1.000000000000000000e+00 -3.633218109607696533e-01 7.338715791702270508e-01 8.083044886589050293e-01 1.000000000000000000e+00 -3.577854633331298828e-01 7.307958602905273438e-01 8.101499676704406738e-01 1.000000000000000000e+00 -3.522491455078125000e-01 7.277200818061828613e-01 8.119953870773315430e-01 1.000000000000000000e+00 -3.467127978801727295e-01 7.246443629264831543e-01 8.138408064842224121e-01 1.000000000000000000e+00 -3.411764800548553467e-01 7.215686440467834473e-01 8.156862854957580566e-01 1.000000000000000000e+00 -3.356401324272155762e-01 7.184928655624389648e-01 8.175317049026489258e-01 1.000000000000000000e+00 -3.301038146018981934e-01 7.154171466827392578e-01 8.193771839141845703e-01 1.000000000000000000e+00 -3.245674669742584229e-01 7.123414278030395508e-01 8.212226033210754395e-01 1.000000000000000000e+00 -3.190311491489410400e-01 7.092656493186950684e-01 8.230680227279663086e-01 1.000000000000000000e+00 -3.134948015213012695e-01 7.061899304389953613e-01 8.249135017395019531e-01 1.000000000000000000e+00 -3.079584836959838867e-01 7.031142115592956543e-01 8.267589211463928223e-01 1.000000000000000000e+00 -3.031910657882690430e-01 6.989619135856628418e-01 8.258362412452697754e-01 1.000000000000000000e+00 -2.988850474357604980e-01 6.941637992858886719e-01 8.232526183128356934e-01 1.000000000000000000e+00 -2.945789992809295654e-01 6.893656253814697266e-01 8.206689953804016113e-01 1.000000000000000000e+00 -2.902729809284210205e-01 6.845674514770507812e-01 8.180853724479675293e-01 1.000000000000000000e+00 -2.859669327735900879e-01 6.797693371772766113e-01 8.155017495155334473e-01 1.000000000000000000e+00 -2.816609144210815430e-01 6.749711632728576660e-01 8.129181265830993652e-01 1.000000000000000000e+00 -2.773548662662506104e-01 6.701729893684387207e-01 8.103345036506652832e-01 1.000000000000000000e+00 -2.730488181114196777e-01 6.653748750686645508e-01 8.077508807182312012e-01 1.000000000000000000e+00 -2.687427997589111328e-01 6.605767011642456055e-01 8.051672577857971191e-01 1.000000000000000000e+00 -2.644367516040802002e-01 6.557785272598266602e-01 8.025836348533630371e-01 1.000000000000000000e+00 -2.601307332515716553e-01 6.509804129600524902e-01 8.000000119209289551e-01 1.000000000000000000e+00 -2.558246850967407227e-01 6.461822390556335449e-01 7.974163889884948730e-01 1.000000000000000000e+00 -2.515186369419097900e-01 6.413840651512145996e-01 7.948327660560607910e-01 1.000000000000000000e+00 -2.472126036882400513e-01 6.365859508514404297e-01 7.922491431236267090e-01 1.000000000000000000e+00 -2.429065704345703125e-01 6.317877769470214844e-01 7.896655201911926270e-01 1.000000000000000000e+00 -2.386005371809005737e-01 6.269896030426025391e-01 7.870818972587585449e-01 1.000000000000000000e+00 -2.342945039272308350e-01 6.221914887428283691e-01 7.844982743263244629e-01 1.000000000000000000e+00 -2.299884706735610962e-01 6.173933148384094238e-01 7.819146513938903809e-01 1.000000000000000000e+00 -2.256824225187301636e-01 6.125951409339904785e-01 7.793310284614562988e-01 1.000000000000000000e+00 -2.213763892650604248e-01 6.077970266342163086e-01 7.767474055290222168e-01 1.000000000000000000e+00 -2.170703560113906860e-01 6.029988527297973633e-01 7.741637825965881348e-01 1.000000000000000000e+00 -2.127643227577209473e-01 5.982006788253784180e-01 7.715801596641540527e-01 1.000000000000000000e+00 -2.084582895040512085e-01 5.934025645256042480e-01 7.689965367317199707e-01 1.000000000000000000e+00 -2.041522562503814697e-01 5.886043906211853027e-01 7.664129137992858887e-01 1.000000000000000000e+00 -1.998462080955505371e-01 5.838062167167663574e-01 7.638292908668518066e-01 1.000000000000000000e+00 -1.955401748418807983e-01 5.790081024169921875e-01 7.612456679344177246e-01 1.000000000000000000e+00 -1.912341415882110596e-01 5.742099285125732422e-01 7.586620450019836426e-01 1.000000000000000000e+00 -1.869281083345413208e-01 5.694117546081542969e-01 7.560784220695495605e-01 1.000000000000000000e+00 -1.826220750808715820e-01 5.646135807037353516e-01 7.534947991371154785e-01 1.000000000000000000e+00 -1.783160269260406494e-01 5.598154664039611816e-01 7.509111762046813965e-01 1.000000000000000000e+00 -1.740099936723709106e-01 5.550172924995422363e-01 7.483275532722473145e-01 1.000000000000000000e+00 -1.697039604187011719e-01 5.502191185951232910e-01 7.457439303398132324e-01 1.000000000000000000e+00 -1.653979271650314331e-01 5.456978082656860352e-01 7.434371113777160645e-01 1.000000000000000000e+00 -1.610918939113616943e-01 5.412687659263610840e-01 7.412226200103759766e-01 1.000000000000000000e+00 -1.567858457565307617e-01 5.368396639823913574e-01 7.390080690383911133e-01 1.000000000000000000e+00 -1.524798125028610229e-01 5.324106216430664062e-01 7.367935180664062500e-01 1.000000000000000000e+00 -1.481737792491912842e-01 5.279815196990966797e-01 7.345790266990661621e-01 1.000000000000000000e+00 -1.438677459955215454e-01 5.235524773597717285e-01 7.323644757270812988e-01 1.000000000000000000e+00 -1.395617127418518066e-01 5.191234350204467773e-01 7.301499247550964355e-01 1.000000000000000000e+00 -1.352556645870208740e-01 5.146943330764770508e-01 7.279354333877563477e-01 1.000000000000000000e+00 -1.309496313333511353e-01 5.102652907371520996e-01 7.257208824157714844e-01 1.000000000000000000e+00 -1.266435980796813965e-01 5.058361887931823730e-01 7.235063314437866211e-01 1.000000000000000000e+00 -1.223375648260116577e-01 5.014071464538574219e-01 7.212918400764465332e-01 1.000000000000000000e+00 -1.180315241217613220e-01 4.969780743122100830e-01 7.190772891044616699e-01 1.000000000000000000e+00 -1.137254908680915833e-01 4.925490319728851318e-01 7.168627381324768066e-01 1.000000000000000000e+00 -1.094194576144218445e-01 4.881199598312377930e-01 7.146481871604919434e-01 1.000000000000000000e+00 -1.051134169101715088e-01 4.836908876895904541e-01 7.124336957931518555e-01 1.000000000000000000e+00 -1.008073836565017700e-01 4.792618155479431152e-01 7.102191448211669922e-01 1.000000000000000000e+00 -9.650134295225143433e-02 4.748327434062957764e-01 7.080045938491821289e-01 1.000000000000000000e+00 -9.219530969858169556e-02 4.704037010669708252e-01 7.057901024818420410e-01 1.000000000000000000e+00 -8.788927644491195679e-02 4.659746289253234863e-01 7.035755515098571777e-01 1.000000000000000000e+00 -8.358323574066162109e-02 4.615455567836761475e-01 7.013610005378723145e-01 1.000000000000000000e+00 -7.927720248699188232e-02 4.571164846420288086e-01 6.991465091705322266e-01 1.000000000000000000e+00 -7.497116178274154663e-02 4.526874423027038574e-01 6.969319581985473633e-01 1.000000000000000000e+00 -7.066512852907180786e-02 4.482583701610565186e-01 6.947174072265625000e-01 1.000000000000000000e+00 -6.635909527540206909e-02 4.438292980194091797e-01 6.925028562545776367e-01 1.000000000000000000e+00 -6.205305829644203186e-02 4.394002258777618408e-01 6.902883648872375488e-01 1.000000000000000000e+00 -5.774702131748199463e-02 4.349711537361145020e-01 6.880738139152526855e-01 1.000000000000000000e+00 -5.344098433852195740e-02 4.305421113967895508e-01 6.858592629432678223e-01 1.000000000000000000e+00 -4.913494735956192017e-02 4.261130392551422119e-01 6.836447715759277344e-01 1.000000000000000000e+00 -4.482891038060188293e-02 4.216839671134948730e-01 6.814302206039428711e-01 1.000000000000000000e+00 -4.052287712693214417e-02 4.172548949718475342e-01 6.792156696319580078e-01 1.000000000000000000e+00 -3.621684014797210693e-02 4.128258228302001953e-01 6.770011782646179199e-01 1.000000000000000000e+00 -3.191080316901206970e-02 4.083967804908752441e-01 6.747866272926330566e-01 1.000000000000000000e+00 -3.137255087494850159e-02 4.035370945930480957e-01 6.698808073997497559e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.986159265041351318e-01 6.645905375480651855e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.936947286128997803e-01 6.593002676963806152e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.887735605239868164e-01 6.540099978446960449e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.838523626327514648e-01 6.487197279930114746e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.789311945438385010e-01 6.434294581413269043e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.740099966526031494e-01 6.381391882896423340e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.690887987613677979e-01 6.328489184379577637e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.641676306724548340e-01 6.275586485862731934e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.592464327812194824e-01 6.222683787345886230e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.543252646923065186e-01 6.169781088829040527e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.494040668010711670e-01 6.116878390312194824e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.444828987121582031e-01 6.063975691795349121e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.395617008209228516e-01 6.011072397232055664e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.346405327320098877e-01 5.958169698715209961e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.297193348407745361e-01 5.905267000198364258e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.247981667518615723e-01 5.852364301681518555e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.198769688606262207e-01 5.799461603164672852e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.149558007717132568e-01 5.746558904647827148e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.100346028804779053e-01 5.693656206130981445e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.051134049892425537e-01 5.640753507614135742e-01 1.000000000000000000e+00 -3.137255087494850159e-02 3.001922369003295898e-01 5.587850809097290039e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.952710390090942383e-01 5.534948110580444336e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.903498709201812744e-01 5.482045412063598633e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.854286730289459229e-01 5.429142713546752930e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.805075049400329590e-01 5.376240015029907227e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.755863070487976074e-01 5.323337316513061523e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.706651389598846436e-01 5.270434617996215820e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.657439410686492920e-01 5.217531919479370117e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.608227729797363281e-01 5.164629220962524414e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.559015750885009766e-01 5.111726522445678711e-01 1.000000000000000000e+00 -3.137255087494850159e-02 2.509804069995880127e-01 5.058823823928833008e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Greens b/fastplotlib/utils/colormaps/Greens deleted file mode 100644 index 7e1a8733a..000000000 --- a/fastplotlib/utils/colormaps/Greens +++ /dev/null @@ -1,256 +0,0 @@ -9.686274528503417969e-01 9.882352948188781738e-01 9.607843160629272461e-01 1.000000000000000000e+00 -9.664129018783569336e-01 9.873740673065185547e-01 9.582006931304931641e-01 1.000000000000000000e+00 -9.641984105110168457e-01 9.865128993988037109e-01 9.556170701980590820e-01 1.000000000000000000e+00 -9.619838595390319824e-01 9.856516718864440918e-01 9.530334472656250000e-01 1.000000000000000000e+00 -9.597693085670471191e-01 9.847904443740844727e-01 9.504498243331909180e-01 1.000000000000000000e+00 -9.575547575950622559e-01 9.839292764663696289e-01 9.478662014007568359e-01 1.000000000000000000e+00 -9.553402662277221680e-01 9.830680489540100098e-01 9.452825784683227539e-01 1.000000000000000000e+00 -9.531257152557373047e-01 9.822068214416503906e-01 9.426989555358886719e-01 1.000000000000000000e+00 -9.509111642837524414e-01 9.813456535339355469e-01 9.401153326034545898e-01 1.000000000000000000e+00 -9.486966729164123535e-01 9.804844260215759277e-01 9.375317096710205078e-01 1.000000000000000000e+00 -9.464821219444274902e-01 9.796231985092163086e-01 9.349480867385864258e-01 1.000000000000000000e+00 -9.442675709724426270e-01 9.787620306015014648e-01 9.323644638061523438e-01 1.000000000000000000e+00 -9.420530796051025391e-01 9.779008030891418457e-01 9.297808408737182617e-01 1.000000000000000000e+00 -9.398385286331176758e-01 9.770395755767822266e-01 9.271972179412841797e-01 1.000000000000000000e+00 -9.376239776611328125e-01 9.761784076690673828e-01 9.246135950088500977e-01 1.000000000000000000e+00 -9.354094862937927246e-01 9.753171801567077637e-01 9.220299720764160156e-01 1.000000000000000000e+00 -9.331949353218078613e-01 9.744559526443481445e-01 9.194463491439819336e-01 1.000000000000000000e+00 -9.309803843498229980e-01 9.735947847366333008e-01 9.168627262115478516e-01 1.000000000000000000e+00 -9.287658333778381348e-01 9.727335572242736816e-01 9.142791032791137695e-01 1.000000000000000000e+00 -9.265513420104980469e-01 9.718723297119140625e-01 9.116954803466796875e-01 1.000000000000000000e+00 -9.243367910385131836e-01 9.710111618041992188e-01 9.091118574142456055e-01 1.000000000000000000e+00 -9.221222400665283203e-01 9.701499342918395996e-01 9.065282344818115234e-01 1.000000000000000000e+00 -9.199077486991882324e-01 9.692887067794799805e-01 9.039446115493774414e-01 1.000000000000000000e+00 -9.176931977272033691e-01 9.684275388717651367e-01 9.013609886169433594e-01 1.000000000000000000e+00 -9.154786467552185059e-01 9.675663113594055176e-01 8.987773656845092773e-01 1.000000000000000000e+00 -9.132641553878784180e-01 9.667050838470458984e-01 8.961937427520751953e-01 1.000000000000000000e+00 -9.110496044158935547e-01 9.658439159393310547e-01 8.936101794242858887e-01 1.000000000000000000e+00 -9.088350534439086914e-01 9.649826884269714355e-01 8.910265564918518066e-01 1.000000000000000000e+00 -9.066205024719238281e-01 9.641215205192565918e-01 8.884429335594177246e-01 1.000000000000000000e+00 -9.044060111045837402e-01 9.632602930068969727e-01 8.858593106269836426e-01 1.000000000000000000e+00 -9.021914601325988770e-01 9.623990654945373535e-01 8.832756876945495605e-01 1.000000000000000000e+00 -8.999769091606140137e-01 9.615378975868225098e-01 8.806920647621154785e-01 1.000000000000000000e+00 -8.975778818130493164e-01 9.605997800827026367e-01 8.779392838478088379e-01 1.000000000000000000e+00 -8.938869833946228027e-01 9.591234326362609863e-01 8.740022778511047363e-01 1.000000000000000000e+00 -8.901960849761962891e-01 9.576470851898193359e-01 8.700653314590454102e-01 1.000000000000000000e+00 -8.865051865577697754e-01 9.561706781387329102e-01 8.661283850669860840e-01 1.000000000000000000e+00 -8.828142881393432617e-01 9.546943306922912598e-01 8.621914386749267578e-01 1.000000000000000000e+00 -8.791233897209167480e-01 9.532179832458496094e-01 8.582544922828674316e-01 1.000000000000000000e+00 -8.754325509071350098e-01 9.517416357994079590e-01 8.543175458908081055e-01 1.000000000000000000e+00 -8.717416524887084961e-01 9.502652883529663086e-01 8.503805994987487793e-01 1.000000000000000000e+00 -8.680507540702819824e-01 9.487889409065246582e-01 8.464436531066894531e-01 1.000000000000000000e+00 -8.643598556518554688e-01 9.473125934600830078e-01 8.425067067146301270e-01 1.000000000000000000e+00 -8.606689572334289551e-01 9.458362460136413574e-01 8.385697603225708008e-01 1.000000000000000000e+00 -8.569780588150024414e-01 9.443598389625549316e-01 8.346328139305114746e-01 1.000000000000000000e+00 -8.532872200012207031e-01 9.428834915161132812e-01 8.306958675384521484e-01 1.000000000000000000e+00 -8.495963215827941895e-01 9.414071440696716309e-01 8.267589211463928223e-01 1.000000000000000000e+00 -8.459054231643676758e-01 9.399307966232299805e-01 8.228219747543334961e-01 1.000000000000000000e+00 -8.422145247459411621e-01 9.384544491767883301e-01 8.188850283622741699e-01 1.000000000000000000e+00 -8.385236263275146484e-01 9.369781017303466797e-01 8.149480819702148438e-01 1.000000000000000000e+00 -8.348327279090881348e-01 9.355017542839050293e-01 8.110111355781555176e-01 1.000000000000000000e+00 -8.311418890953063965e-01 9.340253472328186035e-01 8.070741891860961914e-01 1.000000000000000000e+00 -8.274509906768798828e-01 9.325489997863769531e-01 8.031372427940368652e-01 1.000000000000000000e+00 -8.237600922584533691e-01 9.310726523399353027e-01 7.992002964019775391e-01 1.000000000000000000e+00 -8.200691938400268555e-01 9.295963048934936523e-01 7.952633500099182129e-01 1.000000000000000000e+00 -8.163782954216003418e-01 9.281199574470520020e-01 7.913264036178588867e-01 1.000000000000000000e+00 -8.126874566078186035e-01 9.266436100006103516e-01 7.873894572257995605e-01 1.000000000000000000e+00 -8.089965581893920898e-01 9.251672625541687012e-01 7.834525108337402344e-01 1.000000000000000000e+00 -8.053056597709655762e-01 9.236909151077270508e-01 7.795155644416809082e-01 1.000000000000000000e+00 -8.016147613525390625e-01 9.222145080566406250e-01 7.755786180496215820e-01 1.000000000000000000e+00 -7.979238629341125488e-01 9.207381606101989746e-01 7.716416716575622559e-01 1.000000000000000000e+00 -7.942329645156860352e-01 9.192618131637573242e-01 7.677047252655029297e-01 1.000000000000000000e+00 -7.905421257019042969e-01 9.177854657173156738e-01 7.637677788734436035e-01 1.000000000000000000e+00 -7.868512272834777832e-01 9.163091182708740234e-01 7.598308324813842773e-01 1.000000000000000000e+00 -7.831603288650512695e-01 9.148327708244323730e-01 7.558938860893249512e-01 1.000000000000000000e+00 -7.792233824729919434e-01 9.132333993911743164e-01 7.518031597137451172e-01 1.000000000000000000e+00 -7.745482325553894043e-01 9.112648963928222656e-01 7.472510337829589844e-01 1.000000000000000000e+00 -7.698731422424316406e-01 9.092964529991149902e-01 7.426989674568176270e-01 1.000000000000000000e+00 -7.651979923248291016e-01 9.073279500007629395e-01 7.381468415260314941e-01 1.000000000000000000e+00 -7.605229020118713379e-01 9.053595066070556641e-01 7.335947751998901367e-01 1.000000000000000000e+00 -7.558477520942687988e-01 9.033910036087036133e-01 7.290426492691040039e-01 1.000000000000000000e+00 -7.511726021766662598e-01 9.014225006103515625e-01 7.244905829429626465e-01 1.000000000000000000e+00 -7.464975118637084961e-01 8.994540572166442871e-01 7.199384570121765137e-01 1.000000000000000000e+00 -7.418223619461059570e-01 8.974855542182922363e-01 7.153863906860351562e-01 1.000000000000000000e+00 -7.371472716331481934e-01 8.955171108245849609e-01 7.108342647552490234e-01 1.000000000000000000e+00 -7.324721217155456543e-01 8.935486078262329102e-01 7.062821984291076660e-01 1.000000000000000000e+00 -7.277969717979431152e-01 8.915801644325256348e-01 7.017301321029663086e-01 1.000000000000000000e+00 -7.231218814849853516e-01 8.896116614341735840e-01 6.971780061721801758e-01 1.000000000000000000e+00 -7.184467315673828125e-01 8.876432180404663086e-01 6.926259398460388184e-01 1.000000000000000000e+00 -7.137716412544250488e-01 8.856747150421142578e-01 6.880738139152526855e-01 1.000000000000000000e+00 -7.090964913368225098e-01 8.837062716484069824e-01 6.835217475891113281e-01 1.000000000000000000e+00 -7.044214010238647461e-01 8.817377686500549316e-01 6.789696216583251953e-01 1.000000000000000000e+00 -6.997462511062622070e-01 8.797693252563476562e-01 6.744175553321838379e-01 1.000000000000000000e+00 -6.950711011886596680e-01 8.778008222579956055e-01 6.698654294013977051e-01 1.000000000000000000e+00 -6.903960108757019043e-01 8.758323788642883301e-01 6.653133630752563477e-01 1.000000000000000000e+00 -6.857208609580993652e-01 8.738638758659362793e-01 6.607612371444702148e-01 1.000000000000000000e+00 -6.810457706451416016e-01 8.718954324722290039e-01 6.562091708183288574e-01 1.000000000000000000e+00 -6.763706207275390625e-01 8.699269294738769531e-01 6.516570448875427246e-01 1.000000000000000000e+00 -6.716955304145812988e-01 8.679584860801696777e-01 6.471049785614013672e-01 1.000000000000000000e+00 -6.670203804969787598e-01 8.659899830818176270e-01 6.425528526306152344e-01 1.000000000000000000e+00 -6.623452305793762207e-01 8.640215396881103516e-01 6.380007863044738770e-01 1.000000000000000000e+00 -6.576701402664184570e-01 8.620530366897583008e-01 6.334486603736877441e-01 1.000000000000000000e+00 -6.529949903488159180e-01 8.600845932960510254e-01 6.288965940475463867e-01 1.000000000000000000e+00 -6.483199000358581543e-01 8.581160902976989746e-01 6.243444681167602539e-01 1.000000000000000000e+00 -6.436447501182556152e-01 8.561476469039916992e-01 6.197924017906188965e-01 1.000000000000000000e+00 -6.389696002006530762e-01 8.541791439056396484e-01 6.152402758598327637e-01 1.000000000000000000e+00 -6.342945098876953125e-01 8.522107005119323730e-01 6.106882095336914062e-01 1.000000000000000000e+00 -6.292964220046997070e-01 8.500115275382995605e-01 6.061360836029052734e-01 1.000000000000000000e+00 -6.237601041793823242e-01 8.474279046058654785e-01 6.015840172767639160e-01 1.000000000000000000e+00 -6.182237863540649414e-01 8.448442816734313965e-01 5.970318913459777832e-01 1.000000000000000000e+00 -6.126874089241027832e-01 8.422606587409973145e-01 5.924798250198364258e-01 1.000000000000000000e+00 -6.071510910987854004e-01 8.396770358085632324e-01 5.879276990890502930e-01 1.000000000000000000e+00 -6.016147732734680176e-01 8.370934128761291504e-01 5.833756327629089355e-01 1.000000000000000000e+00 -5.960784554481506348e-01 8.345097899436950684e-01 5.788235068321228027e-01 1.000000000000000000e+00 -5.905420780181884766e-01 8.319261670112609863e-01 5.742714405059814453e-01 1.000000000000000000e+00 -5.850057601928710938e-01 8.293425440788269043e-01 5.697193145751953125e-01 1.000000000000000000e+00 -5.794694423675537109e-01 8.267589211463928223e-01 5.651672482490539551e-01 1.000000000000000000e+00 -5.739331245422363281e-01 8.241752982139587402e-01 5.606151223182678223e-01 1.000000000000000000e+00 -5.683967471122741699e-01 8.215916752815246582e-01 5.560630559921264648e-01 1.000000000000000000e+00 -5.628604292869567871e-01 8.190080523490905762e-01 5.515109300613403320e-01 1.000000000000000000e+00 -5.573241114616394043e-01 8.164244294166564941e-01 5.469588637351989746e-01 1.000000000000000000e+00 -5.517877936363220215e-01 8.138408064842224121e-01 5.424067378044128418e-01 1.000000000000000000e+00 -5.462514162063598633e-01 8.112571835517883301e-01 5.378546714782714844e-01 1.000000000000000000e+00 -5.407150983810424805e-01 8.086735606193542480e-01 5.333026051521301270e-01 1.000000000000000000e+00 -5.351787805557250977e-01 8.060899376869201660e-01 5.287504792213439941e-01 1.000000000000000000e+00 -5.296424627304077148e-01 8.035063147544860840e-01 5.241984128952026367e-01 1.000000000000000000e+00 -5.241060853004455566e-01 8.009227514266967773e-01 5.196462869644165039e-01 1.000000000000000000e+00 -5.185697674751281738e-01 7.983391284942626953e-01 5.150942206382751465e-01 1.000000000000000000e+00 -5.130334496498107910e-01 7.957555055618286133e-01 5.105420947074890137e-01 1.000000000000000000e+00 -5.074971318244934082e-01 7.931718826293945312e-01 5.059900283813476562e-01 1.000000000000000000e+00 -5.019608139991760254e-01 7.905882596969604492e-01 5.014379024505615234e-01 1.000000000000000000e+00 -4.964244663715362549e-01 7.880046367645263672e-01 4.968858063220977783e-01 1.000000000000000000e+00 -4.908881187438964844e-01 7.854210138320922852e-01 4.923337101936340332e-01 1.000000000000000000e+00 -4.853518009185791016e-01 7.828373908996582031e-01 4.877816140651702881e-01 1.000000000000000000e+00 -4.798154532909393311e-01 7.802537679672241211e-01 4.832295179367065430e-01 1.000000000000000000e+00 -4.742791354656219482e-01 7.776701450347900391e-01 4.786774218082427979e-01 1.000000000000000000e+00 -4.687427878379821777e-01 7.750865221023559570e-01 4.741253256797790527e-01 1.000000000000000000e+00 -4.632064700126647949e-01 7.725028991699218750e-01 4.695732295513153076e-01 1.000000000000000000e+00 -4.576701223850250244e-01 7.699192762374877930e-01 4.650211334228515625e-01 1.000000000000000000e+00 -4.517647027969360352e-01 7.670896053314208984e-01 4.612072408199310303e-01 1.000000000000000000e+00 -4.454901814460754395e-01 7.640138268470764160e-01 4.581314921379089355e-01 1.000000000000000000e+00 -4.392156898975372314e-01 7.609381079673767090e-01 4.550557434558868408e-01 1.000000000000000000e+00 -4.329411685466766357e-01 7.578623890876770020e-01 4.519799947738647461e-01 1.000000000000000000e+00 -4.266666769981384277e-01 7.547866106033325195e-01 4.489042758941650391e-01 1.000000000000000000e+00 -4.203921556472778320e-01 7.517108917236328125e-01 4.458285272121429443e-01 1.000000000000000000e+00 -4.141176342964172363e-01 7.486351132392883301e-01 4.427527785301208496e-01 1.000000000000000000e+00 -4.078431427478790283e-01 7.455593943595886230e-01 4.396770596504211426e-01 1.000000000000000000e+00 -4.015686213970184326e-01 7.424836754798889160e-01 4.366013109683990479e-01 1.000000000000000000e+00 -3.952941298484802246e-01 7.394078969955444336e-01 4.335255622863769531e-01 1.000000000000000000e+00 -3.890196084976196289e-01 7.363321781158447266e-01 4.304498136043548584e-01 1.000000000000000000e+00 -3.827450871467590332e-01 7.332564592361450195e-01 4.273740947246551514e-01 1.000000000000000000e+00 -3.764705955982208252e-01 7.301806807518005371e-01 4.242983460426330566e-01 1.000000000000000000e+00 -3.701960742473602295e-01 7.271049618721008301e-01 4.212225973606109619e-01 1.000000000000000000e+00 -3.639215826988220215e-01 7.240292429924011230e-01 4.181468784809112549e-01 1.000000000000000000e+00 -3.576470613479614258e-01 7.209534645080566406e-01 4.150711297988891602e-01 1.000000000000000000e+00 -3.513725399971008301e-01 7.178777456283569336e-01 4.119953811168670654e-01 1.000000000000000000e+00 -3.450980484485626221e-01 7.148020267486572266e-01 4.089196324348449707e-01 1.000000000000000000e+00 -3.388235270977020264e-01 7.117262482643127441e-01 4.058439135551452637e-01 1.000000000000000000e+00 -3.325490057468414307e-01 7.086505293846130371e-01 4.027681648731231689e-01 1.000000000000000000e+00 -3.262745141983032227e-01 7.055747509002685547e-01 3.996924161911010742e-01 1.000000000000000000e+00 -3.199999928474426270e-01 7.024990320205688477e-01 3.966166973114013672e-01 1.000000000000000000e+00 -3.137255012989044189e-01 6.994233131408691406e-01 3.935409486293792725e-01 1.000000000000000000e+00 -3.074509799480438232e-01 6.963475346565246582e-01 3.904651999473571777e-01 1.000000000000000000e+00 -3.011764585971832275e-01 6.932718157768249512e-01 3.873894512653350830e-01 1.000000000000000000e+00 -2.949019670486450195e-01 6.901960968971252441e-01 3.843137323856353760e-01 1.000000000000000000e+00 -2.886274456977844238e-01 6.871203184127807617e-01 3.812379837036132812e-01 1.000000000000000000e+00 -2.823529541492462158e-01 6.840445995330810547e-01 3.781622350215911865e-01 1.000000000000000000e+00 -2.760784327983856201e-01 6.809688806533813477e-01 3.750865161418914795e-01 1.000000000000000000e+00 -2.698039114475250244e-01 6.778931021690368652e-01 3.720107674598693848e-01 1.000000000000000000e+00 -2.635294198989868164e-01 6.748173832893371582e-01 3.689350187778472900e-01 1.000000000000000000e+00 -2.572548985481262207e-01 6.717416644096374512e-01 3.658592700958251953e-01 1.000000000000000000e+00 -2.525951564311981201e-01 6.681276559829711914e-01 3.628604412078857422e-01 1.000000000000000000e+00 -2.489042729139328003e-01 6.641907095909118652e-01 3.599077165126800537e-01 1.000000000000000000e+00 -2.452133744955062866e-01 6.602537631988525391e-01 3.569550216197967529e-01 1.000000000000000000e+00 -2.415224909782409668e-01 6.563168168067932129e-01 3.540022969245910645e-01 1.000000000000000000e+00 -2.378316074609756470e-01 6.523798704147338867e-01 3.510496020317077637e-01 1.000000000000000000e+00 -2.341407090425491333e-01 6.484429240226745605e-01 3.480968773365020752e-01 1.000000000000000000e+00 -2.304498255252838135e-01 6.445059776306152344e-01 3.451441824436187744e-01 1.000000000000000000e+00 -2.267589420080184937e-01 6.405690312385559082e-01 3.421914577484130859e-01 1.000000000000000000e+00 -2.230680435895919800e-01 6.366320848464965820e-01 3.392387628555297852e-01 1.000000000000000000e+00 -2.193771600723266602e-01 6.326951384544372559e-01 3.362860381603240967e-01 1.000000000000000000e+00 -2.156862765550613403e-01 6.287581920623779297e-01 3.333333432674407959e-01 1.000000000000000000e+00 -2.119953930377960205e-01 6.248212456703186035e-01 3.303806185722351074e-01 1.000000000000000000e+00 -2.083044946193695068e-01 6.208842992782592773e-01 3.274279236793518066e-01 1.000000000000000000e+00 -2.046136111021041870e-01 6.169473528861999512e-01 3.244751989841461182e-01 1.000000000000000000e+00 -2.009227275848388672e-01 6.130104064941406250e-01 3.215225040912628174e-01 1.000000000000000000e+00 -1.972318291664123535e-01 6.090734601020812988e-01 3.185697793960571289e-01 1.000000000000000000e+00 -1.935409456491470337e-01 6.051365137100219727e-01 3.156170845031738281e-01 1.000000000000000000e+00 -1.898500621318817139e-01 6.011995673179626465e-01 3.126643598079681396e-01 1.000000000000000000e+00 -1.861591637134552002e-01 5.972626209259033203e-01 3.097116351127624512e-01 1.000000000000000000e+00 -1.824682801961898804e-01 5.933256149291992188e-01 3.067589402198791504e-01 1.000000000000000000e+00 -1.787773966789245605e-01 5.893886685371398926e-01 3.038062155246734619e-01 1.000000000000000000e+00 -1.750864982604980469e-01 5.854517221450805664e-01 3.008535206317901611e-01 1.000000000000000000e+00 -1.713956147432327271e-01 5.815147757530212402e-01 2.979007959365844727e-01 1.000000000000000000e+00 -1.677047312259674072e-01 5.775778293609619141e-01 2.949481010437011719e-01 1.000000000000000000e+00 -1.640138477087020874e-01 5.736408829689025879e-01 2.919953763484954834e-01 1.000000000000000000e+00 -1.603229492902755737e-01 5.697039365768432617e-01 2.890426814556121826e-01 1.000000000000000000e+00 -1.566320657730102539e-01 5.657669901847839355e-01 2.860899567604064941e-01 1.000000000000000000e+00 -1.529411822557449341e-01 5.618300437927246094e-01 2.831372618675231934e-01 1.000000000000000000e+00 -1.492502838373184204e-01 5.578930974006652832e-01 2.801845371723175049e-01 1.000000000000000000e+00 -1.455594003200531006e-01 5.539561510086059570e-01 2.772318422794342041e-01 1.000000000000000000e+00 -1.418685168027877808e-01 5.500192046165466309e-01 2.742791175842285156e-01 1.000000000000000000e+00 -1.381776183843612671e-01 5.460822582244873047e-01 2.713264226913452148e-01 1.000000000000000000e+00 -1.340253800153732300e-01 5.423298478126525879e-01 2.682814300060272217e-01 1.000000000000000000e+00 -1.297193318605422974e-01 5.386390089988708496e-01 2.652056813240051270e-01 1.000000000000000000e+00 -1.254132986068725586e-01 5.349481105804443359e-01 2.621299624443054199e-01 1.000000000000000000e+00 -1.211072653532028198e-01 5.312572121620178223e-01 2.590542137622833252e-01 1.000000000000000000e+00 -1.168012320995330811e-01 5.275663137435913086e-01 2.559784650802612305e-01 1.000000000000000000e+00 -1.124951913952827454e-01 5.238754153251647949e-01 2.529027163982391357e-01 1.000000000000000000e+00 -1.081891581416130066e-01 5.201845169067382812e-01 2.498269826173782349e-01 1.000000000000000000e+00 -1.038831248879432678e-01 5.164936780929565430e-01 2.467512488365173340e-01 1.000000000000000000e+00 -9.957708418369293213e-02 5.128027796745300293e-01 2.436755150556564331e-01 1.000000000000000000e+00 -9.527105093002319336e-02 5.091118812561035156e-01 2.405997663736343384e-01 1.000000000000000000e+00 -9.096501022577285767e-02 5.054209828376770020e-01 2.375240325927734375e-01 1.000000000000000000e+00 -8.665897697210311890e-02 5.017300844192504883e-01 2.344482839107513428e-01 1.000000000000000000e+00 -8.235294371843338013e-02 4.980392158031463623e-01 2.313725501298904419e-01 1.000000000000000000e+00 -7.804690301418304443e-02 4.943483173847198486e-01 2.282968163490295410e-01 1.000000000000000000e+00 -7.374086976051330566e-02 4.906574487686157227e-01 2.252210676670074463e-01 1.000000000000000000e+00 -6.943482905626296997e-02 4.869665503501892090e-01 2.221453338861465454e-01 1.000000000000000000e+00 -6.512879580259323120e-02 4.832756519317626953e-01 2.190695852041244507e-01 1.000000000000000000e+00 -6.082275882363319397e-02 4.795847833156585693e-01 2.159938514232635498e-01 1.000000000000000000e+00 -5.651672556996345520e-02 4.758938848972320557e-01 2.129181027412414551e-01 1.000000000000000000e+00 -5.221068859100341797e-02 4.722029864788055420e-01 2.098423689603805542e-01 1.000000000000000000e+00 -4.790465161204338074e-02 4.685121178627014160e-01 2.067666351795196533e-01 1.000000000000000000e+00 -4.359861463308334351e-02 4.648212194442749023e-01 2.036908864974975586e-01 1.000000000000000000e+00 -3.929258137941360474e-02 4.611303210258483887e-01 2.006151527166366577e-01 1.000000000000000000e+00 -3.498654440045356750e-02 4.574394524097442627e-01 1.975394040346145630e-01 1.000000000000000000e+00 -3.068050742149353027e-02 4.537485539913177490e-01 1.944636702537536621e-01 1.000000000000000000e+00 -2.637447044253349304e-02 4.500576555728912354e-01 1.913879215717315674e-01 1.000000000000000000e+00 -2.206843532621860504e-02 4.463667869567871094e-01 1.883121877908706665e-01 1.000000000000000000e+00 -1.776239834725856781e-02 4.426758885383605957e-01 1.852364540100097656e-01 1.000000000000000000e+00 -1.345636323094367981e-02 4.389850199222564697e-01 1.821607053279876709e-01 1.000000000000000000e+00 -9.150327183306217194e-03 4.352941215038299561e-01 1.790849715471267700e-01 1.000000000000000000e+00 -4.844290670007467270e-03 4.316032230854034424e-01 1.760092228651046753e-01 1.000000000000000000e+00 -5.382545059546828270e-04 4.279123544692993164e-01 1.729334890842437744e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.230372905731201172e-01 1.707189530134201050e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.179930686950683594e-01 1.686274558305740356e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.129488766193389893e-01 1.665359437465667725e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.079046547412872314e-01 1.644444465637207031e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.028604328632354736e-01 1.623529344797134399e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.978162109851837158e-01 1.602614372968673706e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.927720189094543457e-01 1.581699401140213013e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.877277970314025879e-01 1.560784280300140381e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.826835751533508301e-01 1.539869308471679688e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.776393830776214600e-01 1.518954187631607056e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.725951611995697021e-01 1.498039215803146362e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.675509393215179443e-01 1.477124243974685669e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.625067174434661865e-01 1.456209123134613037e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.574625253677368164e-01 1.435294151306152344e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.524183034896850586e-01 1.414379030466079712e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.473740816116333008e-01 1.393464058637619019e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.423298597335815430e-01 1.372549086809158325e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.372856676578521729e-01 1.351633965969085693e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.322414457798004150e-01 1.330718994140625000e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.271972239017486572e-01 1.309803873300552368e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.221530318260192871e-01 1.288888901472091675e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.171088099479675293e-01 1.267973929643630981e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.120645880699157715e-01 1.247058808803558350e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.070203661918640137e-01 1.226143762469291687e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.019761741161346436e-01 1.205228790640830994e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.969319522380828857e-01 1.184313744306564331e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.918877303600311279e-01 1.163398697972297668e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.868435084819793701e-01 1.142483651638031006e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.817993164062500000e-01 1.121568605303764343e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.767550945281982422e-01 1.100653558969497681e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.717108726501464844e-01 1.079738587141036987e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.666666805744171143e-01 1.058823540806770325e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Greys b/fastplotlib/utils/colormaps/Greys deleted file mode 100644 index d00696898..000000000 --- a/fastplotlib/utils/colormaps/Greys +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.981545805931091309e-01 9.981545805931091309e-01 9.981545805931091309e-01 1.000000000000000000e+00 -9.963091015815734863e-01 9.963091015815734863e-01 9.963091015815734863e-01 1.000000000000000000e+00 -9.944636821746826172e-01 9.944636821746826172e-01 9.944636821746826172e-01 1.000000000000000000e+00 -9.926182031631469727e-01 9.926182031631469727e-01 9.926182031631469727e-01 1.000000000000000000e+00 -9.907727837562561035e-01 9.907727837562561035e-01 9.907727837562561035e-01 1.000000000000000000e+00 -9.889273643493652344e-01 9.889273643493652344e-01 9.889273643493652344e-01 1.000000000000000000e+00 -9.870818853378295898e-01 9.870818853378295898e-01 9.870818853378295898e-01 1.000000000000000000e+00 -9.852364659309387207e-01 9.852364659309387207e-01 9.852364659309387207e-01 1.000000000000000000e+00 -9.833909869194030762e-01 9.833909869194030762e-01 9.833909869194030762e-01 1.000000000000000000e+00 -9.815455675125122070e-01 9.815455675125122070e-01 9.815455675125122070e-01 1.000000000000000000e+00 -9.797000885009765625e-01 9.797000885009765625e-01 9.797000885009765625e-01 1.000000000000000000e+00 -9.778546690940856934e-01 9.778546690940856934e-01 9.778546690940856934e-01 1.000000000000000000e+00 -9.760092496871948242e-01 9.760092496871948242e-01 9.760092496871948242e-01 1.000000000000000000e+00 -9.741637706756591797e-01 9.741637706756591797e-01 9.741637706756591797e-01 1.000000000000000000e+00 -9.723183512687683105e-01 9.723183512687683105e-01 9.723183512687683105e-01 1.000000000000000000e+00 -9.704728722572326660e-01 9.704728722572326660e-01 9.704728722572326660e-01 1.000000000000000000e+00 -9.686274528503417969e-01 9.686274528503417969e-01 9.686274528503417969e-01 1.000000000000000000e+00 -9.667820334434509277e-01 9.667820334434509277e-01 9.667820334434509277e-01 1.000000000000000000e+00 -9.649365544319152832e-01 9.649365544319152832e-01 9.649365544319152832e-01 1.000000000000000000e+00 -9.630911350250244141e-01 9.630911350250244141e-01 9.630911350250244141e-01 1.000000000000000000e+00 -9.612456560134887695e-01 9.612456560134887695e-01 9.612456560134887695e-01 1.000000000000000000e+00 -9.594002366065979004e-01 9.594002366065979004e-01 9.594002366065979004e-01 1.000000000000000000e+00 -9.575547575950622559e-01 9.575547575950622559e-01 9.575547575950622559e-01 1.000000000000000000e+00 -9.557093381881713867e-01 9.557093381881713867e-01 9.557093381881713867e-01 1.000000000000000000e+00 -9.538639187812805176e-01 9.538639187812805176e-01 9.538639187812805176e-01 1.000000000000000000e+00 -9.520184397697448730e-01 9.520184397697448730e-01 9.520184397697448730e-01 1.000000000000000000e+00 -9.501730203628540039e-01 9.501730203628540039e-01 9.501730203628540039e-01 1.000000000000000000e+00 -9.483275413513183594e-01 9.483275413513183594e-01 9.483275413513183594e-01 1.000000000000000000e+00 -9.464821219444274902e-01 9.464821219444274902e-01 9.464821219444274902e-01 1.000000000000000000e+00 -9.446367025375366211e-01 9.446367025375366211e-01 9.446367025375366211e-01 1.000000000000000000e+00 -9.427912235260009766e-01 9.427912235260009766e-01 9.427912235260009766e-01 1.000000000000000000e+00 -9.408227801322937012e-01 9.408227801322937012e-01 9.408227801322937012e-01 1.000000000000000000e+00 -9.379931092262268066e-01 9.379931092262268066e-01 9.379931092262268066e-01 1.000000000000000000e+00 -9.351633787155151367e-01 9.351633787155151367e-01 9.351633787155151367e-01 1.000000000000000000e+00 -9.323337078094482422e-01 9.323337078094482422e-01 9.323337078094482422e-01 1.000000000000000000e+00 -9.295040369033813477e-01 9.295040369033813477e-01 9.295040369033813477e-01 1.000000000000000000e+00 -9.266743659973144531e-01 9.266743659973144531e-01 9.266743659973144531e-01 1.000000000000000000e+00 -9.238446950912475586e-01 9.238446950912475586e-01 9.238446950912475586e-01 1.000000000000000000e+00 -9.210149645805358887e-01 9.210149645805358887e-01 9.210149645805358887e-01 1.000000000000000000e+00 -9.181852936744689941e-01 9.181852936744689941e-01 9.181852936744689941e-01 1.000000000000000000e+00 -9.153556227684020996e-01 9.153556227684020996e-01 9.153556227684020996e-01 1.000000000000000000e+00 -9.125259518623352051e-01 9.125259518623352051e-01 9.125259518623352051e-01 1.000000000000000000e+00 -9.096962809562683105e-01 9.096962809562683105e-01 9.096962809562683105e-01 1.000000000000000000e+00 -9.068666100502014160e-01 9.068666100502014160e-01 9.068666100502014160e-01 1.000000000000000000e+00 -9.040368795394897461e-01 9.040368795394897461e-01 9.040368795394897461e-01 1.000000000000000000e+00 -9.012072086334228516e-01 9.012072086334228516e-01 9.012072086334228516e-01 1.000000000000000000e+00 -8.983775377273559570e-01 8.983775377273559570e-01 8.983775377273559570e-01 1.000000000000000000e+00 -8.955478668212890625e-01 8.955478668212890625e-01 8.955478668212890625e-01 1.000000000000000000e+00 -8.927181959152221680e-01 8.927181959152221680e-01 8.927181959152221680e-01 1.000000000000000000e+00 -8.898885250091552734e-01 8.898885250091552734e-01 8.898885250091552734e-01 1.000000000000000000e+00 -8.870587944984436035e-01 8.870587944984436035e-01 8.870587944984436035e-01 1.000000000000000000e+00 -8.842291235923767090e-01 8.842291235923767090e-01 8.842291235923767090e-01 1.000000000000000000e+00 -8.813994526863098145e-01 8.813994526863098145e-01 8.813994526863098145e-01 1.000000000000000000e+00 -8.785697817802429199e-01 8.785697817802429199e-01 8.785697817802429199e-01 1.000000000000000000e+00 -8.757401108741760254e-01 8.757401108741760254e-01 8.757401108741760254e-01 1.000000000000000000e+00 -8.729104399681091309e-01 8.729104399681091309e-01 8.729104399681091309e-01 1.000000000000000000e+00 -8.700807094573974609e-01 8.700807094573974609e-01 8.700807094573974609e-01 1.000000000000000000e+00 -8.672510385513305664e-01 8.672510385513305664e-01 8.672510385513305664e-01 1.000000000000000000e+00 -8.644213676452636719e-01 8.644213676452636719e-01 8.644213676452636719e-01 1.000000000000000000e+00 -8.615916967391967773e-01 8.615916967391967773e-01 8.615916967391967773e-01 1.000000000000000000e+00 -8.587620258331298828e-01 8.587620258331298828e-01 8.587620258331298828e-01 1.000000000000000000e+00 -8.559323549270629883e-01 8.559323549270629883e-01 8.559323549270629883e-01 1.000000000000000000e+00 -8.531026244163513184e-01 8.531026244163513184e-01 8.531026244163513184e-01 1.000000000000000000e+00 -8.501191735267639160e-01 8.501191735267639160e-01 8.501191735267639160e-01 1.000000000000000000e+00 -8.466743826866149902e-01 8.466743826866149902e-01 8.466743826866149902e-01 1.000000000000000000e+00 -8.432295322418212891e-01 8.432295322418212891e-01 8.432295322418212891e-01 1.000000000000000000e+00 -8.397846817970275879e-01 8.397846817970275879e-01 8.397846817970275879e-01 1.000000000000000000e+00 -8.363398909568786621e-01 8.363398909568786621e-01 8.363398909568786621e-01 1.000000000000000000e+00 -8.328950405120849609e-01 8.328950405120849609e-01 8.328950405120849609e-01 1.000000000000000000e+00 -8.294501900672912598e-01 8.294501900672912598e-01 8.294501900672912598e-01 1.000000000000000000e+00 -8.260053992271423340e-01 8.260053992271423340e-01 8.260053992271423340e-01 1.000000000000000000e+00 -8.225605487823486328e-01 8.225605487823486328e-01 8.225605487823486328e-01 1.000000000000000000e+00 -8.191156983375549316e-01 8.191156983375549316e-01 8.191156983375549316e-01 1.000000000000000000e+00 -8.156709074974060059e-01 8.156709074974060059e-01 8.156709074974060059e-01 1.000000000000000000e+00 -8.122260570526123047e-01 8.122260570526123047e-01 8.122260570526123047e-01 1.000000000000000000e+00 -8.087812662124633789e-01 8.087812662124633789e-01 8.087812662124633789e-01 1.000000000000000000e+00 -8.053364157676696777e-01 8.053364157676696777e-01 8.053364157676696777e-01 1.000000000000000000e+00 -8.018915653228759766e-01 8.018915653228759766e-01 8.018915653228759766e-01 1.000000000000000000e+00 -7.984467744827270508e-01 7.984467744827270508e-01 7.984467744827270508e-01 1.000000000000000000e+00 -7.950019240379333496e-01 7.950019240379333496e-01 7.950019240379333496e-01 1.000000000000000000e+00 -7.915570735931396484e-01 7.915570735931396484e-01 7.915570735931396484e-01 1.000000000000000000e+00 -7.881122827529907227e-01 7.881122827529907227e-01 7.881122827529907227e-01 1.000000000000000000e+00 -7.846674323081970215e-01 7.846674323081970215e-01 7.846674323081970215e-01 1.000000000000000000e+00 -7.812225818634033203e-01 7.812225818634033203e-01 7.812225818634033203e-01 1.000000000000000000e+00 -7.777777910232543945e-01 7.777777910232543945e-01 7.777777910232543945e-01 1.000000000000000000e+00 -7.743329405784606934e-01 7.743329405784606934e-01 7.743329405784606934e-01 1.000000000000000000e+00 -7.708881497383117676e-01 7.708881497383117676e-01 7.708881497383117676e-01 1.000000000000000000e+00 -7.674432992935180664e-01 7.674432992935180664e-01 7.674432992935180664e-01 1.000000000000000000e+00 -7.639984488487243652e-01 7.639984488487243652e-01 7.639984488487243652e-01 1.000000000000000000e+00 -7.605536580085754395e-01 7.605536580085754395e-01 7.605536580085754395e-01 1.000000000000000000e+00 -7.571088075637817383e-01 7.571088075637817383e-01 7.571088075637817383e-01 1.000000000000000000e+00 -7.536639571189880371e-01 7.536639571189880371e-01 7.536639571189880371e-01 1.000000000000000000e+00 -7.502191662788391113e-01 7.502191662788391113e-01 7.502191662788391113e-01 1.000000000000000000e+00 -7.467743158340454102e-01 7.467743158340454102e-01 7.467743158340454102e-01 1.000000000000000000e+00 -7.433294653892517090e-01 7.433294653892517090e-01 7.433294653892517090e-01 1.000000000000000000e+00 -7.393771409988403320e-01 7.393771409988403320e-01 7.393771409988403320e-01 1.000000000000000000e+00 -7.345790266990661621e-01 7.345790266990661621e-01 7.345790266990661621e-01 1.000000000000000000e+00 -7.297808527946472168e-01 7.297808527946472168e-01 7.297808527946472168e-01 1.000000000000000000e+00 -7.249826788902282715e-01 7.249826788902282715e-01 7.249826788902282715e-01 1.000000000000000000e+00 -7.201845645904541016e-01 7.201845645904541016e-01 7.201845645904541016e-01 1.000000000000000000e+00 -7.153863906860351562e-01 7.153863906860351562e-01 7.153863906860351562e-01 1.000000000000000000e+00 -7.105882167816162109e-01 7.105882167816162109e-01 7.105882167816162109e-01 1.000000000000000000e+00 -7.057901024818420410e-01 7.057901024818420410e-01 7.057901024818420410e-01 1.000000000000000000e+00 -7.009919285774230957e-01 7.009919285774230957e-01 7.009919285774230957e-01 1.000000000000000000e+00 -6.961937546730041504e-01 6.961937546730041504e-01 6.961937546730041504e-01 1.000000000000000000e+00 -6.913956403732299805e-01 6.913956403732299805e-01 6.913956403732299805e-01 1.000000000000000000e+00 -6.865974664688110352e-01 6.865974664688110352e-01 6.865974664688110352e-01 1.000000000000000000e+00 -6.817992925643920898e-01 6.817992925643920898e-01 6.817992925643920898e-01 1.000000000000000000e+00 -6.770011782646179199e-01 6.770011782646179199e-01 6.770011782646179199e-01 1.000000000000000000e+00 -6.722030043601989746e-01 6.722030043601989746e-01 6.722030043601989746e-01 1.000000000000000000e+00 -6.674048304557800293e-01 6.674048304557800293e-01 6.674048304557800293e-01 1.000000000000000000e+00 -6.626067161560058594e-01 6.626067161560058594e-01 6.626067161560058594e-01 1.000000000000000000e+00 -6.578085422515869141e-01 6.578085422515869141e-01 6.578085422515869141e-01 1.000000000000000000e+00 -6.530103683471679688e-01 6.530103683471679688e-01 6.530103683471679688e-01 1.000000000000000000e+00 -6.482122540473937988e-01 6.482122540473937988e-01 6.482122540473937988e-01 1.000000000000000000e+00 -6.434140801429748535e-01 6.434140801429748535e-01 6.434140801429748535e-01 1.000000000000000000e+00 -6.386159062385559082e-01 6.386159062385559082e-01 6.386159062385559082e-01 1.000000000000000000e+00 -6.338177919387817383e-01 6.338177919387817383e-01 6.338177919387817383e-01 1.000000000000000000e+00 -6.290196180343627930e-01 6.290196180343627930e-01 6.290196180343627930e-01 1.000000000000000000e+00 -6.242214441299438477e-01 6.242214441299438477e-01 6.242214441299438477e-01 1.000000000000000000e+00 -6.194232702255249023e-01 6.194232702255249023e-01 6.194232702255249023e-01 1.000000000000000000e+00 -6.146251559257507324e-01 6.146251559257507324e-01 6.146251559257507324e-01 1.000000000000000000e+00 -6.098269820213317871e-01 6.098269820213317871e-01 6.098269820213317871e-01 1.000000000000000000e+00 -6.050288081169128418e-01 6.050288081169128418e-01 6.050288081169128418e-01 1.000000000000000000e+00 -6.002306938171386719e-01 6.002306938171386719e-01 6.002306938171386719e-01 1.000000000000000000e+00 -5.954325199127197266e-01 5.954325199127197266e-01 5.954325199127197266e-01 1.000000000000000000e+00 -5.906343460083007812e-01 5.906343460083007812e-01 5.906343460083007812e-01 1.000000000000000000e+00 -5.860822796821594238e-01 5.860822796821594238e-01 5.860822796821594238e-01 1.000000000000000000e+00 -5.817762613296508789e-01 5.817762613296508789e-01 5.817762613296508789e-01 1.000000000000000000e+00 -5.774701833724975586e-01 5.774701833724975586e-01 5.774701833724975586e-01 1.000000000000000000e+00 -5.731641650199890137e-01 5.731641650199890137e-01 5.731641650199890137e-01 1.000000000000000000e+00 -5.688581466674804688e-01 5.688581466674804688e-01 5.688581466674804688e-01 1.000000000000000000e+00 -5.645520687103271484e-01 5.645520687103271484e-01 5.645520687103271484e-01 1.000000000000000000e+00 -5.602460503578186035e-01 5.602460503578186035e-01 5.602460503578186035e-01 1.000000000000000000e+00 -5.559400320053100586e-01 5.559400320053100586e-01 5.559400320053100586e-01 1.000000000000000000e+00 -5.516340136528015137e-01 5.516340136528015137e-01 5.516340136528015137e-01 1.000000000000000000e+00 -5.473279356956481934e-01 5.473279356956481934e-01 5.473279356956481934e-01 1.000000000000000000e+00 -5.430219173431396484e-01 5.430219173431396484e-01 5.430219173431396484e-01 1.000000000000000000e+00 -5.387158989906311035e-01 5.387158989906311035e-01 5.387158989906311035e-01 1.000000000000000000e+00 -5.344098210334777832e-01 5.344098210334777832e-01 5.344098210334777832e-01 1.000000000000000000e+00 -5.301038026809692383e-01 5.301038026809692383e-01 5.301038026809692383e-01 1.000000000000000000e+00 -5.257977843284606934e-01 5.257977843284606934e-01 5.257977843284606934e-01 1.000000000000000000e+00 -5.214917063713073730e-01 5.214917063713073730e-01 5.214917063713073730e-01 1.000000000000000000e+00 -5.171856880187988281e-01 5.171856880187988281e-01 5.171856880187988281e-01 1.000000000000000000e+00 -5.128796696662902832e-01 5.128796696662902832e-01 5.128796696662902832e-01 1.000000000000000000e+00 -5.085736513137817383e-01 5.085736513137817383e-01 5.085736513137817383e-01 1.000000000000000000e+00 -5.042675733566284180e-01 5.042675733566284180e-01 5.042675733566284180e-01 1.000000000000000000e+00 -4.999615550041198730e-01 4.999615550041198730e-01 4.999615550041198730e-01 1.000000000000000000e+00 -4.956555068492889404e-01 4.956555068492889404e-01 4.956555068492889404e-01 1.000000000000000000e+00 -4.913494884967803955e-01 4.913494884967803955e-01 4.913494884967803955e-01 1.000000000000000000e+00 -4.870434403419494629e-01 4.870434403419494629e-01 4.870434403419494629e-01 1.000000000000000000e+00 -4.827374219894409180e-01 4.827374219894409180e-01 4.827374219894409180e-01 1.000000000000000000e+00 -4.784313738346099854e-01 4.784313738346099854e-01 4.784313738346099854e-01 1.000000000000000000e+00 -4.741253256797790527e-01 4.741253256797790527e-01 4.741253256797790527e-01 1.000000000000000000e+00 -4.698193073272705078e-01 4.698193073272705078e-01 4.698193073272705078e-01 1.000000000000000000e+00 -4.655132591724395752e-01 4.655132591724395752e-01 4.655132591724395752e-01 1.000000000000000000e+00 -4.612072408199310303e-01 4.612072408199310303e-01 4.612072408199310303e-01 1.000000000000000000e+00 -4.569011926651000977e-01 4.569011926651000977e-01 4.569011926651000977e-01 1.000000000000000000e+00 -4.525951445102691650e-01 4.525951445102691650e-01 4.525951445102691650e-01 1.000000000000000000e+00 -4.484429061412811279e-01 4.484429061412811279e-01 4.484429061412811279e-01 1.000000000000000000e+00 -4.443829357624053955e-01 4.443829357624053955e-01 4.443829357624053955e-01 1.000000000000000000e+00 -4.403229653835296631e-01 4.403229653835296631e-01 4.403229653835296631e-01 1.000000000000000000e+00 -4.362629652023315430e-01 4.362629652023315430e-01 4.362629652023315430e-01 1.000000000000000000e+00 -4.322029948234558105e-01 4.322029948234558105e-01 4.322029948234558105e-01 1.000000000000000000e+00 -4.281430244445800781e-01 4.281430244445800781e-01 4.281430244445800781e-01 1.000000000000000000e+00 -4.240830540657043457e-01 4.240830540657043457e-01 4.240830540657043457e-01 1.000000000000000000e+00 -4.200230538845062256e-01 4.200230538845062256e-01 4.200230538845062256e-01 1.000000000000000000e+00 -4.159630835056304932e-01 4.159630835056304932e-01 4.159630835056304932e-01 1.000000000000000000e+00 -4.119031131267547607e-01 4.119031131267547607e-01 4.119031131267547607e-01 1.000000000000000000e+00 -4.078431427478790283e-01 4.078431427478790283e-01 4.078431427478790283e-01 1.000000000000000000e+00 -4.037831723690032959e-01 4.037831723690032959e-01 4.037831723690032959e-01 1.000000000000000000e+00 -3.997231721878051758e-01 3.997231721878051758e-01 3.997231721878051758e-01 1.000000000000000000e+00 -3.956632018089294434e-01 3.956632018089294434e-01 3.956632018089294434e-01 1.000000000000000000e+00 -3.916032314300537109e-01 3.916032314300537109e-01 3.916032314300537109e-01 1.000000000000000000e+00 -3.875432610511779785e-01 3.875432610511779785e-01 3.875432610511779785e-01 1.000000000000000000e+00 -3.834832608699798584e-01 3.834832608699798584e-01 3.834832608699798584e-01 1.000000000000000000e+00 -3.794232904911041260e-01 3.794232904911041260e-01 3.794232904911041260e-01 1.000000000000000000e+00 -3.753633201122283936e-01 3.753633201122283936e-01 3.753633201122283936e-01 1.000000000000000000e+00 -3.713033497333526611e-01 3.713033497333526611e-01 3.713033497333526611e-01 1.000000000000000000e+00 -3.672433793544769287e-01 3.672433793544769287e-01 3.672433793544769287e-01 1.000000000000000000e+00 -3.631833791732788086e-01 3.631833791732788086e-01 3.631833791732788086e-01 1.000000000000000000e+00 -3.591234087944030762e-01 3.591234087944030762e-01 3.591234087944030762e-01 1.000000000000000000e+00 -3.550634384155273438e-01 3.550634384155273438e-01 3.550634384155273438e-01 1.000000000000000000e+00 -3.510034680366516113e-01 3.510034680366516113e-01 3.510034680366516113e-01 1.000000000000000000e+00 -3.469434976577758789e-01 3.469434976577758789e-01 3.469434976577758789e-01 1.000000000000000000e+00 -3.428834974765777588e-01 3.428834974765777588e-01 3.428834974765777588e-01 1.000000000000000000e+00 -3.388235270977020264e-01 3.388235270977020264e-01 3.388235270977020264e-01 1.000000000000000000e+00 -3.347635567188262939e-01 3.347635567188262939e-01 3.347635567188262939e-01 1.000000000000000000e+00 -3.307035863399505615e-01 3.307035863399505615e-01 3.307035863399505615e-01 1.000000000000000000e+00 -3.266435861587524414e-01 3.266435861587524414e-01 3.266435861587524414e-01 1.000000000000000000e+00 -3.225836157798767090e-01 3.225836157798767090e-01 3.225836157798767090e-01 1.000000000000000000e+00 -3.174163699150085449e-01 3.174163699150085449e-01 3.174163699150085449e-01 1.000000000000000000e+00 -3.118800520896911621e-01 3.118800520896911621e-01 3.118800520896911621e-01 1.000000000000000000e+00 -3.063437044620513916e-01 3.063437044620513916e-01 3.063437044620513916e-01 1.000000000000000000e+00 -3.008073866367340088e-01 3.008073866367340088e-01 3.008073866367340088e-01 1.000000000000000000e+00 -2.952710390090942383e-01 2.952710390090942383e-01 2.952710390090942383e-01 1.000000000000000000e+00 -2.897347211837768555e-01 2.897347211837768555e-01 2.897347211837768555e-01 1.000000000000000000e+00 -2.841983735561370850e-01 2.841983735561370850e-01 2.841983735561370850e-01 1.000000000000000000e+00 -2.786620557308197021e-01 2.786620557308197021e-01 2.786620557308197021e-01 1.000000000000000000e+00 -2.731257081031799316e-01 2.731257081031799316e-01 2.731257081031799316e-01 1.000000000000000000e+00 -2.675893902778625488e-01 2.675893902778625488e-01 2.675893902778625488e-01 1.000000000000000000e+00 -2.620530426502227783e-01 2.620530426502227783e-01 2.620530426502227783e-01 1.000000000000000000e+00 -2.565167248249053955e-01 2.565167248249053955e-01 2.565167248249053955e-01 1.000000000000000000e+00 -2.509804069995880127e-01 2.509804069995880127e-01 2.509804069995880127e-01 1.000000000000000000e+00 -2.454440593719482422e-01 2.454440593719482422e-01 2.454440593719482422e-01 1.000000000000000000e+00 -2.399077266454696655e-01 2.399077266454696655e-01 2.399077266454696655e-01 1.000000000000000000e+00 -2.343713939189910889e-01 2.343713939189910889e-01 2.343713939189910889e-01 1.000000000000000000e+00 -2.288350611925125122e-01 2.288350611925125122e-01 2.288350611925125122e-01 1.000000000000000000e+00 -2.232987284660339355e-01 2.232987284660339355e-01 2.232987284660339355e-01 1.000000000000000000e+00 -2.177623957395553589e-01 2.177623957395553589e-01 2.177623957395553589e-01 1.000000000000000000e+00 -2.122260630130767822e-01 2.122260630130767822e-01 2.122260630130767822e-01 1.000000000000000000e+00 -2.066897302865982056e-01 2.066897302865982056e-01 2.066897302865982056e-01 1.000000000000000000e+00 -2.011533975601196289e-01 2.011533975601196289e-01 2.011533975601196289e-01 1.000000000000000000e+00 -1.956170648336410522e-01 1.956170648336410522e-01 1.956170648336410522e-01 1.000000000000000000e+00 -1.900807321071624756e-01 1.900807321071624756e-01 1.900807321071624756e-01 1.000000000000000000e+00 -1.845443993806838989e-01 1.845443993806838989e-01 1.845443993806838989e-01 1.000000000000000000e+00 -1.790080666542053223e-01 1.790080666542053223e-01 1.790080666542053223e-01 1.000000000000000000e+00 -1.734717488288879395e-01 1.734717488288879395e-01 1.734717488288879395e-01 1.000000000000000000e+00 -1.679354161024093628e-01 1.679354161024093628e-01 1.679354161024093628e-01 1.000000000000000000e+00 -1.623990833759307861e-01 1.623990833759307861e-01 1.623990833759307861e-01 1.000000000000000000e+00 -1.568627506494522095e-01 1.568627506494522095e-01 1.568627506494522095e-01 1.000000000000000000e+00 -1.513264179229736328e-01 1.513264179229736328e-01 1.513264179229736328e-01 1.000000000000000000e+00 -1.457900851964950562e-01 1.457900851964950562e-01 1.457900851964950562e-01 1.000000000000000000e+00 -1.411149501800537109e-01 1.411149501800537109e-01 1.411149501800537109e-01 1.000000000000000000e+00 -1.365628540515899658e-01 1.365628540515899658e-01 1.365628540515899658e-01 1.000000000000000000e+00 -1.320107579231262207e-01 1.320107579231262207e-01 1.320107579231262207e-01 1.000000000000000000e+00 -1.274586766958236694e-01 1.274586766958236694e-01 1.274586766958236694e-01 1.000000000000000000e+00 -1.229065731167793274e-01 1.229065731167793274e-01 1.229065731167793274e-01 1.000000000000000000e+00 -1.183544769883155823e-01 1.183544769883155823e-01 1.183544769883155823e-01 1.000000000000000000e+00 -1.138023808598518372e-01 1.138023808598518372e-01 1.138023808598518372e-01 1.000000000000000000e+00 -1.092502847313880920e-01 1.092502847313880920e-01 1.092502847313880920e-01 1.000000000000000000e+00 -1.046981960535049438e-01 1.046981960535049438e-01 1.046981960535049438e-01 1.000000000000000000e+00 -1.001460999250411987e-01 1.001460999250411987e-01 1.001460999250411987e-01 1.000000000000000000e+00 -9.559400379657745361e-02 9.559400379657745361e-02 9.559400379657745361e-02 1.000000000000000000e+00 -9.104190766811370850e-02 9.104190766811370850e-02 9.104190766811370850e-02 1.000000000000000000e+00 -8.648981153964996338e-02 8.648981153964996338e-02 8.648981153964996338e-02 1.000000000000000000e+00 -8.193771541118621826e-02 8.193771541118621826e-02 8.193771541118621826e-02 1.000000000000000000e+00 -7.738561928272247314e-02 7.738561928272247314e-02 7.738561928272247314e-02 1.000000000000000000e+00 -7.283352315425872803e-02 7.283352315425872803e-02 7.283352315425872803e-02 1.000000000000000000e+00 -6.828142702579498291e-02 6.828142702579498291e-02 6.828142702579498291e-02 1.000000000000000000e+00 -6.372933834791183472e-02 6.372933834791183472e-02 6.372933834791183472e-02 1.000000000000000000e+00 -5.917723849415779114e-02 5.917723849415779114e-02 5.917723849415779114e-02 1.000000000000000000e+00 -5.462514236569404602e-02 5.462514236569404602e-02 5.462514236569404602e-02 1.000000000000000000e+00 -5.007304996252059937e-02 5.007304996252059937e-02 5.007304996252059937e-02 1.000000000000000000e+00 -4.552095383405685425e-02 4.552095383405685425e-02 4.552095383405685425e-02 1.000000000000000000e+00 -4.096885770559310913e-02 4.096885770559310913e-02 4.096885770559310913e-02 1.000000000000000000e+00 -3.641676157712936401e-02 3.641676157712936401e-02 3.641676157712936401e-02 1.000000000000000000e+00 -3.186466917395591736e-02 3.186466917395591736e-02 3.186466917395591736e-02 1.000000000000000000e+00 -2.731257118284702301e-02 2.731257118284702301e-02 2.731257118284702301e-02 1.000000000000000000e+00 -2.276047691702842712e-02 2.276047691702842712e-02 2.276047691702842712e-02 1.000000000000000000e+00 -1.820838078856468201e-02 1.820838078856468201e-02 1.820838078856468201e-02 1.000000000000000000e+00 -1.365628559142351151e-02 1.365628559142351151e-02 1.365628559142351151e-02 1.000000000000000000e+00 -9.104190394282341003e-03 9.104190394282341003e-03 9.104190394282341003e-03 1.000000000000000000e+00 -4.552095197141170502e-03 4.552095197141170502e-03 4.552095197141170502e-03 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/OrRd b/fastplotlib/utils/colormaps/OrRd deleted file mode 100644 index 898a6d7c4..000000000 --- a/fastplotlib/utils/colormaps/OrRd +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 9.686274528503417969e-01 9.254902005195617676e-01 1.000000000000000000e+00 -9.998769760131835938e-01 9.667820334434509277e-01 9.210611581802368164e-01 1.000000000000000000e+00 -9.997539520263671875e-01 9.649365544319152832e-01 9.166320562362670898e-01 1.000000000000000000e+00 -9.996309280395507812e-01 9.630911350250244141e-01 9.122030138969421387e-01 1.000000000000000000e+00 -9.995079040527343750e-01 9.612456560134887695e-01 9.077739119529724121e-01 1.000000000000000000e+00 -9.993848800659179688e-01 9.594002366065979004e-01 9.033448696136474609e-01 1.000000000000000000e+00 -9.992617964744567871e-01 9.575547575950622559e-01 8.989158272743225098e-01 1.000000000000000000e+00 -9.991387724876403809e-01 9.557093381881713867e-01 8.944867253303527832e-01 1.000000000000000000e+00 -9.990157485008239746e-01 9.538639187812805176e-01 8.900576829910278320e-01 1.000000000000000000e+00 -9.988927245140075684e-01 9.520184397697448730e-01 8.856285810470581055e-01 1.000000000000000000e+00 -9.987697005271911621e-01 9.501730203628540039e-01 8.811995387077331543e-01 1.000000000000000000e+00 -9.986466765403747559e-01 9.483275413513183594e-01 8.767704963684082031e-01 1.000000000000000000e+00 -9.985236525535583496e-01 9.464821219444274902e-01 8.723413944244384766e-01 1.000000000000000000e+00 -9.984006285667419434e-01 9.446367025375366211e-01 8.679123520851135254e-01 1.000000000000000000e+00 -9.982776045799255371e-01 9.427912235260009766e-01 8.634832501411437988e-01 1.000000000000000000e+00 -9.981545805931091309e-01 9.409458041191101074e-01 8.590542078018188477e-01 1.000000000000000000e+00 -9.980314970016479492e-01 9.391003251075744629e-01 8.546251654624938965e-01 1.000000000000000000e+00 -9.979084730148315430e-01 9.372549057006835938e-01 8.501960635185241699e-01 1.000000000000000000e+00 -9.977854490280151367e-01 9.354094862937927246e-01 8.457670211791992188e-01 1.000000000000000000e+00 -9.976624250411987305e-01 9.335640072822570801e-01 8.413379192352294922e-01 1.000000000000000000e+00 -9.975394010543823242e-01 9.317185878753662109e-01 8.369088768959045410e-01 1.000000000000000000e+00 -9.974163770675659180e-01 9.298731088638305664e-01 8.324798345565795898e-01 1.000000000000000000e+00 -9.972933530807495117e-01 9.280276894569396973e-01 8.280507326126098633e-01 1.000000000000000000e+00 -9.971703290939331055e-01 9.261822104454040527e-01 8.236216902732849121e-01 1.000000000000000000e+00 -9.970473051071166992e-01 9.243367910385131836e-01 8.191926479339599609e-01 1.000000000000000000e+00 -9.969242811203002930e-01 9.224913716316223145e-01 8.147635459899902344e-01 1.000000000000000000e+00 -9.968012571334838867e-01 9.206458926200866699e-01 8.103345036506652832e-01 1.000000000000000000e+00 -9.966781735420227051e-01 9.188004732131958008e-01 8.059054017066955566e-01 1.000000000000000000e+00 -9.965551495552062988e-01 9.169549942016601562e-01 8.014763593673706055e-01 1.000000000000000000e+00 -9.964321255683898926e-01 9.151095747947692871e-01 7.970473170280456543e-01 1.000000000000000000e+00 -9.963091015815734863e-01 9.132641553878784180e-01 7.926182150840759277e-01 1.000000000000000000e+00 -9.961860775947570801e-01 9.114186763763427734e-01 7.881891727447509766e-01 1.000000000000000000e+00 -9.960630536079406738e-01 9.094963669776916504e-01 7.836678028106689453e-01 1.000000000000000000e+00 -9.959400296211242676e-01 9.070357680320739746e-01 7.785005569458007812e-01 1.000000000000000000e+00 -9.958170056343078613e-01 9.045751690864562988e-01 7.733333110809326172e-01 1.000000000000000000e+00 -9.956939816474914551e-01 9.021145701408386230e-01 7.681660652160644531e-01 1.000000000000000000e+00 -9.955709576606750488e-01 8.996539711952209473e-01 7.629988193511962891e-01 1.000000000000000000e+00 -9.954479336738586426e-01 8.971933722496032715e-01 7.578315734863281250e-01 1.000000000000000000e+00 -9.953248500823974609e-01 8.947327733039855957e-01 7.526643872261047363e-01 1.000000000000000000e+00 -9.952018260955810547e-01 8.922721743583679199e-01 7.474971413612365723e-01 1.000000000000000000e+00 -9.950788021087646484e-01 8.898116350173950195e-01 7.423298954963684082e-01 1.000000000000000000e+00 -9.949557781219482422e-01 8.873510360717773438e-01 7.371626496315002441e-01 1.000000000000000000e+00 -9.948327541351318359e-01 8.848904371261596680e-01 7.319954037666320801e-01 1.000000000000000000e+00 -9.947097301483154297e-01 8.824298381805419922e-01 7.268281579017639160e-01 1.000000000000000000e+00 -9.945867061614990234e-01 8.799692392349243164e-01 7.216609120368957520e-01 1.000000000000000000e+00 -9.944636821746826172e-01 8.775086402893066406e-01 7.164936661720275879e-01 1.000000000000000000e+00 -9.943406581878662109e-01 8.750480413436889648e-01 7.113264203071594238e-01 1.000000000000000000e+00 -9.942176342010498047e-01 8.725874423980712891e-01 7.061591744422912598e-01 1.000000000000000000e+00 -9.940945506095886230e-01 8.701269030570983887e-01 7.009919285774230957e-01 1.000000000000000000e+00 -9.939715266227722168e-01 8.676663041114807129e-01 6.958246827125549316e-01 1.000000000000000000e+00 -9.938485026359558105e-01 8.652057051658630371e-01 6.906574368476867676e-01 1.000000000000000000e+00 -9.937254786491394043e-01 8.627451062202453613e-01 6.854901909828186035e-01 1.000000000000000000e+00 -9.936024546623229980e-01 8.602845072746276855e-01 6.803229451179504395e-01 1.000000000000000000e+00 -9.934794306755065918e-01 8.578239083290100098e-01 6.751556992530822754e-01 1.000000000000000000e+00 -9.933564066886901855e-01 8.553633093833923340e-01 6.699884533882141113e-01 1.000000000000000000e+00 -9.932333827018737793e-01 8.529027104377746582e-01 6.648212075233459473e-01 1.000000000000000000e+00 -9.931103587150573730e-01 8.504421114921569824e-01 6.596539616584777832e-01 1.000000000000000000e+00 -9.929873347282409668e-01 8.479815721511840820e-01 6.544867157936096191e-01 1.000000000000000000e+00 -9.928643107414245605e-01 8.455209732055664062e-01 6.493194699287414551e-01 1.000000000000000000e+00 -9.927412271499633789e-01 8.430603742599487305e-01 6.441522240638732910e-01 1.000000000000000000e+00 -9.926182031631469727e-01 8.405997753143310547e-01 6.389849781990051270e-01 1.000000000000000000e+00 -9.924951791763305664e-01 8.381391763687133789e-01 6.338177919387817383e-01 1.000000000000000000e+00 -9.923721551895141602e-01 8.356785774230957031e-01 6.286505460739135742e-01 1.000000000000000000e+00 -9.922491312026977539e-01 8.332179784774780273e-01 6.234833002090454102e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.306035995483398438e-01 6.188081502914428711e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.275278806686401367e-01 6.156094074249267578e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.244521617889404297e-01 6.124106049537658691e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.213763833045959473e-01 6.092118620872497559e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.183006644248962402e-01 6.060130596160888672e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.152248859405517578e-01 6.028143167495727539e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.121491670608520508e-01 5.996155142784118652e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.090734481811523438e-01 5.964167714118957520e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.059976696968078613e-01 5.932179689407348633e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.029219508171081543e-01 5.900192260742187500e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.998462319374084473e-01 5.868204832077026367e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.967704534530639648e-01 5.836216807365417480e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.936947345733642578e-01 5.804229378700256348e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.906190156936645508e-01 5.772241353988647461e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.875432372093200684e-01 5.740253925323486328e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.844675183296203613e-01 5.708265900611877441e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.813917994499206543e-01 5.676278471946716309e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.783160209655761719e-01 5.644290447235107422e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.752403020858764648e-01 5.612303018569946289e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.721645236015319824e-01 5.580314993858337402e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.690888047218322754e-01 5.548327565193176270e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.660130858421325684e-01 5.516340136528015137e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.629373073577880859e-01 5.484352111816406250e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.598615884780883789e-01 5.452364683151245117e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.567858695983886719e-01 5.420376658439636230e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.537100911140441895e-01 5.388389229774475098e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.506343722343444824e-01 5.356401205062866211e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.475586533546447754e-01 5.324413776397705078e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.444828748703002930e-01 5.292425751686096191e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.414071559906005859e-01 5.260438323020935059e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.383314371109008789e-01 5.228450298309326172e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.352556586265563965e-01 5.196462869644165039e-01 1.000000000000000000e+00 -9.921107292175292969e-01 7.312110662460327148e-01 5.156632065773010254e-01 1.000000000000000000e+00 -9.919877052307128906e-01 7.255517244338989258e-01 5.103729367256164551e-01 1.000000000000000000e+00 -9.918646812438964844e-01 7.198923230171203613e-01 5.050826668739318848e-01 1.000000000000000000e+00 -9.917416572570800781e-01 7.142329812049865723e-01 4.997923970222473145e-01 1.000000000000000000e+00 -9.916186332702636719e-01 7.085736393928527832e-01 4.945021271705627441e-01 1.000000000000000000e+00 -9.914955496788024902e-01 7.029142379760742188e-01 4.892118275165557861e-01 1.000000000000000000e+00 -9.913725256919860840e-01 6.972548961639404297e-01 4.839215576648712158e-01 1.000000000000000000e+00 -9.912495017051696777e-01 6.915955543518066406e-01 4.786312878131866455e-01 1.000000000000000000e+00 -9.911264777183532715e-01 6.859361529350280762e-01 4.733410179615020752e-01 1.000000000000000000e+00 -9.910034537315368652e-01 6.802768111228942871e-01 4.680507481098175049e-01 1.000000000000000000e+00 -9.908804297447204590e-01 6.746174693107604980e-01 4.627604782581329346e-01 1.000000000000000000e+00 -9.907574057579040527e-01 6.689580678939819336e-01 4.574702084064483643e-01 1.000000000000000000e+00 -9.906343817710876465e-01 6.632987260818481445e-01 4.521799385547637939e-01 1.000000000000000000e+00 -9.905113577842712402e-01 6.576393842697143555e-01 4.468896687030792236e-01 1.000000000000000000e+00 -9.903883337974548340e-01 6.519799828529357910e-01 4.415993988513946533e-01 1.000000000000000000e+00 -9.902653098106384277e-01 6.463206410408020020e-01 4.363090991973876953e-01 1.000000000000000000e+00 -9.901422262191772461e-01 6.406612992286682129e-01 4.310188293457031250e-01 1.000000000000000000e+00 -9.900192022323608398e-01 6.350018978118896484e-01 4.257285594940185547e-01 1.000000000000000000e+00 -9.898961782455444336e-01 6.293425559997558594e-01 4.204382896423339844e-01 1.000000000000000000e+00 -9.897731542587280273e-01 6.236832141876220703e-01 4.151480197906494141e-01 1.000000000000000000e+00 -9.896501302719116211e-01 6.180238127708435059e-01 4.098577499389648438e-01 1.000000000000000000e+00 -9.895271062850952148e-01 6.123644709587097168e-01 4.045674800872802734e-01 1.000000000000000000e+00 -9.894040822982788086e-01 6.067051291465759277e-01 3.992772102355957031e-01 1.000000000000000000e+00 -9.892810583114624023e-01 6.010457277297973633e-01 3.939869403839111328e-01 1.000000000000000000e+00 -9.891580343246459961e-01 5.953863859176635742e-01 3.886966407299041748e-01 1.000000000000000000e+00 -9.890350103378295898e-01 5.897270441055297852e-01 3.834063708782196045e-01 1.000000000000000000e+00 -9.889119863510131836e-01 5.840676426887512207e-01 3.781161010265350342e-01 1.000000000000000000e+00 -9.887889027595520020e-01 5.784083008766174316e-01 3.728258311748504639e-01 1.000000000000000000e+00 -9.886658787727355957e-01 5.727489590644836426e-01 3.675355613231658936e-01 1.000000000000000000e+00 -9.885428547859191895e-01 5.670895576477050781e-01 3.622452914714813232e-01 1.000000000000000000e+00 -9.884198307991027832e-01 5.614302158355712891e-01 3.569550216197967529e-01 1.000000000000000000e+00 -9.882968068122863770e-01 5.557708740234375000e-01 3.516647517681121826e-01 1.000000000000000000e+00 -9.874355792999267578e-01 5.504806041717529297e-01 3.479738533496856689e-01 1.000000000000000000e+00 -9.858362078666687012e-01 5.455594062805175781e-01 3.458823561668395996e-01 1.000000000000000000e+00 -9.842368364334106445e-01 5.406382083892822266e-01 3.437908589839935303e-01 1.000000000000000000e+00 -9.826374650001525879e-01 5.357170104980468750e-01 3.416993319988250732e-01 1.000000000000000000e+00 -9.810380339622497559e-01 5.307958722114562988e-01 3.396078348159790039e-01 1.000000000000000000e+00 -9.794386625289916992e-01 5.258746743202209473e-01 3.375163376331329346e-01 1.000000000000000000e+00 -9.778392910957336426e-01 5.209534764289855957e-01 3.354248404502868652e-01 1.000000000000000000e+00 -9.762399196624755859e-01 5.160322785377502441e-01 3.333333432674407959e-01 1.000000000000000000e+00 -9.746405482292175293e-01 5.111111402511596680e-01 3.312418162822723389e-01 1.000000000000000000e+00 -9.730411171913146973e-01 5.061899423599243164e-01 3.291503190994262695e-01 1.000000000000000000e+00 -9.714417457580566406e-01 5.012687444686889648e-01 3.270588219165802002e-01 1.000000000000000000e+00 -9.698423743247985840e-01 4.963475465774536133e-01 3.249673247337341309e-01 1.000000000000000000e+00 -9.682430028915405273e-01 4.914263784885406494e-01 3.228758275508880615e-01 1.000000000000000000e+00 -9.666435718536376953e-01 4.865051805973052979e-01 3.207843005657196045e-01 1.000000000000000000e+00 -9.650442004203796387e-01 4.815840125083923340e-01 3.186928033828735352e-01 1.000000000000000000e+00 -9.634448289871215820e-01 4.766628146171569824e-01 3.166013062000274658e-01 1.000000000000000000e+00 -9.618454575538635254e-01 4.717416465282440186e-01 3.145098090171813965e-01 1.000000000000000000e+00 -9.602460861206054688e-01 4.668204486370086670e-01 3.124183118343353271e-01 1.000000000000000000e+00 -9.586466550827026367e-01 4.618992805480957031e-01 3.103267848491668701e-01 1.000000000000000000e+00 -9.570472836494445801e-01 4.569780826568603516e-01 3.082352876663208008e-01 1.000000000000000000e+00 -9.554479122161865234e-01 4.520569145679473877e-01 3.061437904834747314e-01 1.000000000000000000e+00 -9.538485407829284668e-01 4.471357166767120361e-01 3.040522933006286621e-01 1.000000000000000000e+00 -9.522491097450256348e-01 4.422145187854766846e-01 3.019607961177825928e-01 1.000000000000000000e+00 -9.506497383117675781e-01 4.372933506965637207e-01 2.998692691326141357e-01 1.000000000000000000e+00 -9.490503668785095215e-01 4.323721528053283691e-01 2.977777719497680664e-01 1.000000000000000000e+00 -9.474509954452514648e-01 4.274509847164154053e-01 2.956862747669219971e-01 1.000000000000000000e+00 -9.458516240119934082e-01 4.225297868251800537e-01 2.935947775840759277e-01 1.000000000000000000e+00 -9.442521929740905762e-01 4.176086187362670898e-01 2.915032804012298584e-01 1.000000000000000000e+00 -9.426528215408325195e-01 4.126874208450317383e-01 2.894117534160614014e-01 1.000000000000000000e+00 -9.410534501075744629e-01 4.077662527561187744e-01 2.873202562332153320e-01 1.000000000000000000e+00 -9.394540786743164062e-01 4.028450548648834229e-01 2.852287590503692627e-01 1.000000000000000000e+00 -9.378546476364135742e-01 3.979238867759704590e-01 2.831372618675231934e-01 1.000000000000000000e+00 -9.354094862937927246e-01 3.920030891895294189e-01 2.792003154754638672e-01 1.000000000000000000e+00 -9.324567317962646484e-01 3.854825198650360107e-01 2.741560935974121094e-01 1.000000000000000000e+00 -9.295040369033813477e-01 3.789619505405426025e-01 2.691118717193603516e-01 1.000000000000000000e+00 -9.265513420104980469e-01 3.724413812160491943e-01 2.640676796436309814e-01 1.000000000000000000e+00 -9.235985875129699707e-01 3.659208118915557861e-01 2.590234577655792236e-01 1.000000000000000000e+00 -9.206458926200866699e-01 3.594002425670623779e-01 2.539792358875274658e-01 1.000000000000000000e+00 -9.176931977272033691e-01 3.528796732425689697e-01 2.489350289106369019e-01 1.000000000000000000e+00 -9.147405028343200684e-01 3.463591039180755615e-01 2.438908070325851440e-01 1.000000000000000000e+00 -9.117877483367919922e-01 3.398385345935821533e-01 2.388466000556945801e-01 1.000000000000000000e+00 -9.088350534439086914e-01 3.333179652690887451e-01 2.338023781776428223e-01 1.000000000000000000e+00 -9.058823585510253906e-01 3.267973959445953369e-01 2.287581712007522583e-01 1.000000000000000000e+00 -9.029296636581420898e-01 3.202768266201019287e-01 2.237139493227005005e-01 1.000000000000000000e+00 -8.999769091606140137e-01 3.137562572956085205e-01 2.186697423458099365e-01 1.000000000000000000e+00 -8.970242142677307129e-01 3.072356879711151123e-01 2.136255353689193726e-01 1.000000000000000000e+00 -8.940715193748474121e-01 3.007151186466217041e-01 2.085813134908676147e-01 1.000000000000000000e+00 -8.911188244819641113e-01 2.941945493221282959e-01 2.035371065139770508e-01 1.000000000000000000e+00 -8.881660699844360352e-01 2.876739799976348877e-01 1.984928846359252930e-01 1.000000000000000000e+00 -8.852133750915527344e-01 2.811534106731414795e-01 1.934486776590347290e-01 1.000000000000000000e+00 -8.822606801986694336e-01 2.746328413486480713e-01 1.884044557809829712e-01 1.000000000000000000e+00 -8.793079853057861328e-01 2.681122720241546631e-01 1.833602488040924072e-01 1.000000000000000000e+00 -8.763552308082580566e-01 2.615917026996612549e-01 1.783160269260406494e-01 1.000000000000000000e+00 -8.734025359153747559e-01 2.550711333751678467e-01 1.732718199491500854e-01 1.000000000000000000e+00 -8.704498410224914551e-01 2.485505640506744385e-01 1.682275980710983276e-01 1.000000000000000000e+00 -8.674971461296081543e-01 2.420299947261810303e-01 1.631833910942077637e-01 1.000000000000000000e+00 -8.645443916320800781e-01 2.355094254016876221e-01 1.581391841173171997e-01 1.000000000000000000e+00 -8.615916967391967773e-01 2.289888560771942139e-01 1.530949622392654419e-01 1.000000000000000000e+00 -8.586390018463134766e-01 2.224682867527008057e-01 1.480507552623748779e-01 1.000000000000000000e+00 -8.556862473487854004e-01 2.159477174282073975e-01 1.430065333843231201e-01 1.000000000000000000e+00 -8.527335524559020996e-01 2.094271481037139893e-01 1.379623264074325562e-01 1.000000000000000000e+00 -8.497808575630187988e-01 2.029065787792205811e-01 1.329181045293807983e-01 1.000000000000000000e+00 -8.468281626701354980e-01 1.963860094547271729e-01 1.278738975524902344e-01 1.000000000000000000e+00 -8.438754081726074219e-01 1.898654401302337646e-01 1.228296831250190735e-01 1.000000000000000000e+00 -8.398154377937316895e-01 1.838062256574630737e-01 1.187081858515739441e-01 1.000000000000000000e+00 -8.353863954544067383e-01 1.779008060693740845e-01 1.148942708969116211e-01 1.000000000000000000e+00 -8.309573531150817871e-01 1.719953864812850952e-01 1.110803559422492981e-01 1.000000000000000000e+00 -8.265282511711120605e-01 1.660899668931961060e-01 1.072664335370063782e-01 1.000000000000000000e+00 -8.220992088317871094e-01 1.601845473051071167e-01 1.034525185823440552e-01 1.000000000000000000e+00 -8.176701068878173828e-01 1.542791277170181274e-01 9.963860362768173218e-02 1.000000000000000000e+00 -8.132410645484924316e-01 1.483737081289291382e-01 9.582468122243881226e-02 1.000000000000000000e+00 -8.088120222091674805e-01 1.424682885408401489e-01 9.201076626777648926e-02 1.000000000000000000e+00 -8.043829202651977539e-01 1.365628540515899658e-01 8.819684386253356934e-02 1.000000000000000000e+00 -7.999538779258728027e-01 1.306574344635009766e-01 8.438292890787124634e-02 1.000000000000000000e+00 -7.955247759819030762e-01 1.247520148754119873e-01 8.056901395320892334e-02 1.000000000000000000e+00 -7.910957336425781250e-01 1.188465952873229980e-01 7.675509154796600342e-02 1.000000000000000000e+00 -7.866666913032531738e-01 1.129411756992340088e-01 7.294117659330368042e-02 1.000000000000000000e+00 -7.822375893592834473e-01 1.070357561111450195e-01 6.912726163864135742e-02 1.000000000000000000e+00 -7.778085470199584961e-01 1.011303365230560303e-01 6.531333923339843750e-02 1.000000000000000000e+00 -7.733794450759887695e-01 9.522491693496704102e-02 6.149942427873611450e-02 1.000000000000000000e+00 -7.689504027366638184e-01 8.931948989629745483e-02 5.768550559878349304e-02 1.000000000000000000e+00 -7.645213603973388672e-01 8.341407030820846558e-02 5.387158691883087158e-02 1.000000000000000000e+00 -7.600922584533691406e-01 7.750865072011947632e-02 5.005767196416854858e-02 1.000000000000000000e+00 -7.556632161140441895e-01 7.160323113203048706e-02 4.624375328421592712e-02 1.000000000000000000e+00 -7.512341141700744629e-01 6.569781154394149780e-02 4.242983460426330566e-02 1.000000000000000000e+00 -7.468050718307495117e-01 5.979238823056221008e-02 3.861591592431068420e-02 1.000000000000000000e+00 -7.423760294914245605e-01 5.388696491718292236e-02 3.480200096964836121e-02 1.000000000000000000e+00 -7.379469275474548340e-01 4.798154532909393311e-02 3.098808228969573975e-02 1.000000000000000000e+00 -7.335178852081298828e-01 4.207612574100494385e-02 2.717416360974311829e-02 1.000000000000000000e+00 -7.290887832641601562e-01 3.617070242762565613e-02 2.336024679243564606e-02 1.000000000000000000e+00 -7.246597409248352051e-01 3.026528283953666687e-02 1.954632811248302460e-02 1.000000000000000000e+00 -7.202306985855102539e-01 2.435986138880252838e-02 1.573241129517555237e-02 1.000000000000000000e+00 -7.158015966415405273e-01 1.845443993806838989e-02 1.191849261522293091e-02 1.000000000000000000e+00 -7.113725543022155762e-01 1.254901941865682602e-02 8.104574866592884064e-03 1.000000000000000000e+00 -7.069435119628906250e-01 6.643598433583974838e-03 4.290657583624124527e-03 1.000000000000000000e+00 -7.025144100189208984e-01 7.381776231341063976e-04 4.767397185787558556e-04 1.000000000000000000e+00 -6.963629126548767090e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.899654269218444824e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.835678815841674805e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.771703362464904785e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.707727909088134766e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.643752455711364746e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.579777002334594727e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.515801548957824707e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.451826095581054688e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.387850642204284668e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.323875188827514648e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.259900331497192383e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.195924878120422363e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.131949424743652344e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.067973971366882324e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.003998517990112305e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.940023064613342285e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.876047611236572266e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.812072157859802246e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.748096704483032227e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.684121251106262207e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.620146393775939941e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.556170940399169922e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.492195487022399902e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.428220033645629883e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.364244580268859863e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.300269126892089844e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.236293673515319824e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.172318220138549805e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.108342766761779785e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.044367313385009766e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.980392158031463623e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Oranges b/fastplotlib/utils/colormaps/Oranges deleted file mode 100644 index 26534a14b..000000000 --- a/fastplotlib/utils/colormaps/Oranges +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 9.607843160629272461e-01 9.215686321258544922e-01 1.000000000000000000e+00 -9.998769760131835938e-01 9.589388966560363770e-01 9.180007576942443848e-01 1.000000000000000000e+00 -9.997539520263671875e-01 9.570934176445007324e-01 9.144328832626342773e-01 1.000000000000000000e+00 -9.996309280395507812e-01 9.552479982376098633e-01 9.108650684356689453e-01 1.000000000000000000e+00 -9.995079040527343750e-01 9.534025192260742188e-01 9.072971940040588379e-01 1.000000000000000000e+00 -9.993848800659179688e-01 9.515570998191833496e-01 9.037293195724487305e-01 1.000000000000000000e+00 -9.992617964744567871e-01 9.497116208076477051e-01 9.001615047454833984e-01 1.000000000000000000e+00 -9.991387724876403809e-01 9.478662014007568359e-01 8.965936303138732910e-01 1.000000000000000000e+00 -9.990157485008239746e-01 9.460207819938659668e-01 8.930257558822631836e-01 1.000000000000000000e+00 -9.988927245140075684e-01 9.441753029823303223e-01 8.894578814506530762e-01 1.000000000000000000e+00 -9.987697005271911621e-01 9.423298835754394531e-01 8.858900666236877441e-01 1.000000000000000000e+00 -9.986466765403747559e-01 9.404844045639038086e-01 8.823221921920776367e-01 1.000000000000000000e+00 -9.985236525535583496e-01 9.386389851570129395e-01 8.787543177604675293e-01 1.000000000000000000e+00 -9.984006285667419434e-01 9.367935657501220703e-01 8.751864433288574219e-01 1.000000000000000000e+00 -9.982776045799255371e-01 9.349480867385864258e-01 8.716186285018920898e-01 1.000000000000000000e+00 -9.981545805931091309e-01 9.331026673316955566e-01 8.680507540702819824e-01 1.000000000000000000e+00 -9.980314970016479492e-01 9.312571883201599121e-01 8.644828796386718750e-01 1.000000000000000000e+00 -9.979084730148315430e-01 9.294117689132690430e-01 8.609150052070617676e-01 1.000000000000000000e+00 -9.977854490280151367e-01 9.275663495063781738e-01 8.573471903800964355e-01 1.000000000000000000e+00 -9.976624250411987305e-01 9.257208704948425293e-01 8.537793159484863281e-01 1.000000000000000000e+00 -9.975394010543823242e-01 9.238754510879516602e-01 8.502114415168762207e-01 1.000000000000000000e+00 -9.974163770675659180e-01 9.220299720764160156e-01 8.466436266899108887e-01 1.000000000000000000e+00 -9.972933530807495117e-01 9.201845526695251465e-01 8.430757522583007812e-01 1.000000000000000000e+00 -9.971703290939331055e-01 9.183390736579895020e-01 8.395078778266906738e-01 1.000000000000000000e+00 -9.970473051071166992e-01 9.164936542510986328e-01 8.359400033950805664e-01 1.000000000000000000e+00 -9.969242811203002930e-01 9.146482348442077637e-01 8.323721885681152344e-01 1.000000000000000000e+00 -9.968012571334838867e-01 9.128027558326721191e-01 8.288043141365051270e-01 1.000000000000000000e+00 -9.966781735420227051e-01 9.109573364257812500e-01 8.252364397048950195e-01 1.000000000000000000e+00 -9.965551495552062988e-01 9.091118574142456055e-01 8.216685652732849121e-01 1.000000000000000000e+00 -9.964321255683898926e-01 9.072664380073547363e-01 8.181007504463195801e-01 1.000000000000000000e+00 -9.963091015815734863e-01 9.054210186004638672e-01 8.145328760147094727e-01 1.000000000000000000e+00 -9.961860775947570801e-01 9.035755395889282227e-01 8.109650015830993652e-01 1.000000000000000000e+00 -9.960630536079406738e-01 9.016224741935729980e-01 8.071664571762084961e-01 1.000000000000000000e+00 -9.959400296211242676e-01 8.989158272743225098e-01 8.017531633377075195e-01 1.000000000000000000e+00 -9.958170056343078613e-01 8.962091207504272461e-01 7.963398694992065430e-01 1.000000000000000000e+00 -9.956939816474914551e-01 8.935024738311767578e-01 7.909265756607055664e-01 1.000000000000000000e+00 -9.955709576606750488e-01 8.907958269119262695e-01 7.855132818222045898e-01 1.000000000000000000e+00 -9.954479336738586426e-01 8.880891799926757812e-01 7.800999879837036133e-01 1.000000000000000000e+00 -9.953248500823974609e-01 8.853825330734252930e-01 7.746866345405578613e-01 1.000000000000000000e+00 -9.952018260955810547e-01 8.826758861541748047e-01 7.692733407020568848e-01 1.000000000000000000e+00 -9.950788021087646484e-01 8.799692392349243164e-01 7.638600468635559082e-01 1.000000000000000000e+00 -9.949557781219482422e-01 8.772625923156738281e-01 7.584467530250549316e-01 1.000000000000000000e+00 -9.948327541351318359e-01 8.745559453964233398e-01 7.530334591865539551e-01 1.000000000000000000e+00 -9.947097301483154297e-01 8.718492984771728516e-01 7.476201653480529785e-01 1.000000000000000000e+00 -9.945867061614990234e-01 8.691426515579223633e-01 7.422068715095520020e-01 1.000000000000000000e+00 -9.944636821746826172e-01 8.664360046386718750e-01 7.367935180664062500e-01 1.000000000000000000e+00 -9.943406581878662109e-01 8.637293577194213867e-01 7.313802242279052734e-01 1.000000000000000000e+00 -9.942176342010498047e-01 8.610227108001708984e-01 7.259669303894042969e-01 1.000000000000000000e+00 -9.940945506095886230e-01 8.583160042762756348e-01 7.205536365509033203e-01 1.000000000000000000e+00 -9.939715266227722168e-01 8.556093573570251465e-01 7.151403427124023438e-01 1.000000000000000000e+00 -9.938485026359558105e-01 8.529027104377746582e-01 7.097270488739013672e-01 1.000000000000000000e+00 -9.937254786491394043e-01 8.501960635185241699e-01 7.043137550354003906e-01 1.000000000000000000e+00 -9.936024546623229980e-01 8.474894165992736816e-01 6.989004015922546387e-01 1.000000000000000000e+00 -9.934794306755065918e-01 8.447827696800231934e-01 6.934871077537536621e-01 1.000000000000000000e+00 -9.933564066886901855e-01 8.420761227607727051e-01 6.880738139152526855e-01 1.000000000000000000e+00 -9.932333827018737793e-01 8.393694758415222168e-01 6.826605200767517090e-01 1.000000000000000000e+00 -9.931103587150573730e-01 8.366628289222717285e-01 6.772472262382507324e-01 1.000000000000000000e+00 -9.929873347282409668e-01 8.339561820030212402e-01 6.718339323997497559e-01 1.000000000000000000e+00 -9.928643107414245605e-01 8.312495350837707520e-01 6.664205789566040039e-01 1.000000000000000000e+00 -9.927412271499633789e-01 8.285428881645202637e-01 6.610072851181030273e-01 1.000000000000000000e+00 -9.926182031631469727e-01 8.258362412452697754e-01 6.555939912796020508e-01 1.000000000000000000e+00 -9.924951791763305664e-01 8.231295943260192871e-01 6.501806974411010742e-01 1.000000000000000000e+00 -9.923721551895141602e-01 8.204228878021240234e-01 6.447674036026000977e-01 1.000000000000000000e+00 -9.922491312026977539e-01 8.177162408828735352e-01 6.393541097640991211e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.146405220031738281e-01 6.336024403572082520e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.104575276374816895e-01 6.268358230590820312e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.062745332717895508e-01 6.200692057609558105e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.020914793014526367e-01 6.133025884628295898e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.979084849357604980e-01 6.065359711647033691e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.937254905700683594e-01 5.997692942619323730e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.895424962043762207e-01 5.930026769638061523e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.853595018386840820e-01 5.862360596656799316e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.811764478683471680e-01 5.794694423675537109e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.769934535026550293e-01 5.727028250694274902e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.728104591369628906e-01 5.659362077713012695e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.686274647712707520e-01 5.591695308685302734e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.644444704055786133e-01 5.524029135704040527e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.602614164352416992e-01 5.456362962722778320e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.560784220695495605e-01 5.388696789741516113e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.518954277038574219e-01 5.321030616760253906e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.477124333381652832e-01 5.253363847732543945e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.435294389724731445e-01 5.185697674751281738e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.393463850021362305e-01 5.118031501770019531e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.351633906364440918e-01 5.050365328788757324e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.309803962707519531e-01 4.982698857784271240e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.267974019050598145e-01 4.915032684803009033e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.226144075393676758e-01 4.847366511821746826e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.184313535690307617e-01 4.779700040817260742e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.142483592033386230e-01 4.712033867835998535e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.100653648376464844e-01 4.644367694854736328e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.058823704719543457e-01 4.576701223850250244e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.016993761062622070e-01 4.509035050868988037e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.975163221359252930e-01 4.441368579864501953e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.933333277702331543e-01 4.373702406883239746e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.891503334045410156e-01 4.306036233901977539e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.849673390388488770e-01 4.238369762897491455e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.808304786682128906e-01 4.174394607543945312e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.767704486846923828e-01 4.116570651531219482e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.727104783058166504e-01 4.058746695518493652e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.686505079269409180e-01 4.000922739505767822e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.645905375480651855e-01 3.943098783493041992e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.605305671691894531e-01 3.885274827480316162e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.564705967903137207e-01 3.827450871467590332e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.524106264114379883e-01 3.769627213478088379e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.483506560325622559e-01 3.711803257465362549e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.442906856536865234e-01 3.653979301452636719e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.402306556701660156e-01 3.596155345439910889e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.361706852912902832e-01 3.538331389427185059e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.321107149124145508e-01 3.480507433414459229e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.280507445335388184e-01 3.422683477401733398e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.239907741546630859e-01 3.364859521389007568e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.199308037757873535e-01 3.307035863399505615e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.158708333969116211e-01 3.249211907386779785e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.118108630180358887e-01 3.191387951374053955e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.077508926391601562e-01 3.133563995361328125e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.036908626556396484e-01 3.075740039348602295e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.996308922767639160e-01 3.017916083335876465e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.955709218978881836e-01 2.960092127323150635e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.915109515190124512e-01 2.902268469333648682e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.874509811401367188e-01 2.844444513320922852e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.833910107612609863e-01 2.786620557308197021e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.793310403823852539e-01 2.728796601295471191e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.752710700035095215e-01 2.670972645282745361e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.712110996246337891e-01 2.613148689270019531e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.671510696411132812e-01 2.555324733257293701e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.630910992622375488e-01 2.497500926256179810e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.590311288833618164e-01 2.439677119255065918e-01 1.000000000000000000e+00 -9.921568632125854492e-01 5.549711585044860840e-01 2.381853163242340088e-01 1.000000000000000000e+00 -9.914186596870422363e-01 5.507266521453857422e-01 2.327720075845718384e-01 1.000000000000000000e+00 -9.899423122406005859e-01 5.462975502014160156e-01 2.277278006076812744e-01 1.000000000000000000e+00 -9.884659647941589355e-01 5.418685078620910645e-01 2.226835787296295166e-01 1.000000000000000000e+00 -9.869896173477172852e-01 5.374394655227661133e-01 2.176393717527389526e-01 1.000000000000000000e+00 -9.855132699012756348e-01 5.330103635787963867e-01 2.125951498746871948e-01 1.000000000000000000e+00 -9.840369224548339844e-01 5.285813212394714355e-01 2.075509428977966309e-01 1.000000000000000000e+00 -9.825605750083923340e-01 5.241522789001464844e-01 2.025067210197448730e-01 1.000000000000000000e+00 -9.810842275619506836e-01 5.197231769561767578e-01 1.974625140428543091e-01 1.000000000000000000e+00 -9.796078205108642578e-01 5.152941346168518066e-01 1.924183070659637451e-01 1.000000000000000000e+00 -9.781314730644226074e-01 5.108650326728820801e-01 1.873740851879119873e-01 1.000000000000000000e+00 -9.766551256179809570e-01 5.064359903335571289e-01 1.823298782110214233e-01 1.000000000000000000e+00 -9.751787781715393066e-01 5.020069479942321777e-01 1.772856563329696655e-01 1.000000000000000000e+00 -9.737024307250976562e-01 4.975778460502624512e-01 1.722414493560791016e-01 1.000000000000000000e+00 -9.722260832786560059e-01 4.931488037109375000e-01 1.671972274780273438e-01 1.000000000000000000e+00 -9.707497358322143555e-01 4.887197315692901611e-01 1.621530205011367798e-01 1.000000000000000000e+00 -9.692733287811279297e-01 4.842906594276428223e-01 1.571087986230850220e-01 1.000000000000000000e+00 -9.677969813346862793e-01 4.798615872859954834e-01 1.520645916461944580e-01 1.000000000000000000e+00 -9.663206338882446289e-01 4.754325151443481445e-01 1.470203697681427002e-01 1.000000000000000000e+00 -9.648442864418029785e-01 4.710034728050231934e-01 1.419761627912521362e-01 1.000000000000000000e+00 -9.633679389953613281e-01 4.665744006633758545e-01 1.369319558143615723e-01 1.000000000000000000e+00 -9.618915915489196777e-01 4.621453285217285156e-01 1.318877339363098145e-01 1.000000000000000000e+00 -9.604152441024780273e-01 4.577162563800811768e-01 1.268435269594192505e-01 1.000000000000000000e+00 -9.589388966560363770e-01 4.532871842384338379e-01 1.217993050813674927e-01 1.000000000000000000e+00 -9.574624896049499512e-01 4.488581418991088867e-01 1.167550906538963318e-01 1.000000000000000000e+00 -9.559861421585083008e-01 4.444290697574615479e-01 1.117108836770057678e-01 1.000000000000000000e+00 -9.545097947120666504e-01 4.399999976158142090e-01 1.066666692495346069e-01 1.000000000000000000e+00 -9.530334472656250000e-01 4.355709254741668701e-01 1.016224548220634460e-01 1.000000000000000000e+00 -9.515570998191833496e-01 4.311418831348419189e-01 9.657824039459228516e-02 1.000000000000000000e+00 -9.500807523727416992e-01 4.267128109931945801e-01 9.153402596712112427e-02 1.000000000000000000e+00 -9.486044049263000488e-01 4.222837388515472412e-01 8.648981153964996338e-02 1.000000000000000000e+00 -9.471280574798583984e-01 4.178546667098999023e-01 8.144559711217880249e-02 1.000000000000000000e+00 -9.456516504287719727e-01 4.134255945682525635e-01 7.640138268470764160e-02 1.000000000000000000e+00 -9.432526230812072754e-01 4.092272222042083740e-01 7.312572002410888672e-02 1.000000000000000000e+00 -9.402998685836791992e-01 4.051672518253326416e-01 7.091119140386581421e-02 1.000000000000000000e+00 -9.373471736907958984e-01 4.011072516441345215e-01 6.869665533304214478e-02 1.000000000000000000e+00 -9.343944787979125977e-01 3.970472812652587891e-01 6.648211926221847534e-02 1.000000000000000000e+00 -9.314417243003845215e-01 3.929873108863830566e-01 6.426759064197540283e-02 1.000000000000000000e+00 -9.284890294075012207e-01 3.889273405075073242e-01 6.205305829644203186e-02 1.000000000000000000e+00 -9.255363345146179199e-01 3.848673701286315918e-01 5.983852222561836243e-02 1.000000000000000000e+00 -9.225836396217346191e-01 3.808073699474334717e-01 5.762398988008499146e-02 1.000000000000000000e+00 -9.196308851242065430e-01 3.767473995685577393e-01 5.540945753455162048e-02 1.000000000000000000e+00 -9.166781902313232422e-01 3.726874291896820068e-01 5.319492518901824951e-02 1.000000000000000000e+00 -9.137254953384399414e-01 3.686274588108062744e-01 5.098039284348487854e-02 1.000000000000000000e+00 -9.107728004455566406e-01 3.645674884319305420e-01 4.876586049795150757e-02 1.000000000000000000e+00 -9.078200459480285645e-01 3.605074882507324219e-01 4.655132815241813660e-02 1.000000000000000000e+00 -9.048673510551452637e-01 3.564475178718566895e-01 4.433679208159446716e-02 1.000000000000000000e+00 -9.019146561622619629e-01 3.523875474929809570e-01 4.212225973606109619e-02 1.000000000000000000e+00 -8.989619612693786621e-01 3.483275771141052246e-01 3.990772739052772522e-02 1.000000000000000000e+00 -8.960092067718505859e-01 3.442675769329071045e-01 3.769319504499435425e-02 1.000000000000000000e+00 -8.930565118789672852e-01 3.402076065540313721e-01 3.547866269946098328e-02 1.000000000000000000e+00 -8.901038169860839844e-01 3.361476361751556396e-01 3.326413035392761230e-02 1.000000000000000000e+00 -8.871511220932006836e-01 3.320876657962799072e-01 3.104959614574909210e-02 1.000000000000000000e+00 -8.841983675956726074e-01 3.280276954174041748e-01 2.883506380021572113e-02 1.000000000000000000e+00 -8.812456727027893066e-01 3.239676952362060547e-01 2.662053145468235016e-02 1.000000000000000000e+00 -8.782929778099060059e-01 3.199077248573303223e-01 2.440599724650382996e-02 1.000000000000000000e+00 -8.753402829170227051e-01 3.158477544784545898e-01 2.219146490097045898e-02 1.000000000000000000e+00 -8.723875284194946289e-01 3.117877840995788574e-01 1.997693255543708801e-02 1.000000000000000000e+00 -8.694348335266113281e-01 3.077277839183807373e-01 1.776239834725856781e-02 1.000000000000000000e+00 -8.664821386337280273e-01 3.036678135395050049e-01 1.554786600172519684e-02 1.000000000000000000e+00 -8.635293841361999512e-01 2.996078431606292725e-01 1.333333365619182587e-02 1.000000000000000000e+00 -8.605766892433166504e-01 2.955478727817535400e-01 1.111880037933588028e-02 1.000000000000000000e+00 -8.576239943504333496e-01 2.914879024028778076e-01 8.904268033802509308e-03 1.000000000000000000e+00 -8.546712994575500488e-01 2.874279022216796875e-01 6.689734756946563721e-03 1.000000000000000000e+00 -8.517185449600219727e-01 2.833679318428039551e-01 4.475201945751905441e-03 1.000000000000000000e+00 -8.462744951248168945e-01 2.806920409202575684e-01 4.106113221496343613e-03 1.000000000000000000e+00 -8.399999737739562988e-01 2.784775197505950928e-01 4.352172371000051498e-03 1.000000000000000000e+00 -8.337255120277404785e-01 2.762629687786102295e-01 4.598231520503759384e-03 1.000000000000000000e+00 -8.274509906768798828e-01 2.740484476089477539e-01 4.844290670007467270e-03 1.000000000000000000e+00 -8.211764693260192871e-01 2.718338966369628906e-01 5.090349819511175156e-03 1.000000000000000000e+00 -8.149019479751586914e-01 2.696193754673004150e-01 5.336408969014883041e-03 1.000000000000000000e+00 -8.086274266242980957e-01 2.674048542976379395e-01 5.582468118518590927e-03 1.000000000000000000e+00 -8.023529648780822754e-01 2.651903033256530762e-01 5.828527268022298813e-03 1.000000000000000000e+00 -7.960784435272216797e-01 2.629757821559906006e-01 6.074586883187294006e-03 1.000000000000000000e+00 -7.898039221763610840e-01 2.607612311840057373e-01 6.320646032691001892e-03 1.000000000000000000e+00 -7.835294008255004883e-01 2.585467100143432617e-01 6.566705182194709778e-03 1.000000000000000000e+00 -7.772548794746398926e-01 2.563321888446807861e-01 6.812764331698417664e-03 1.000000000000000000e+00 -7.709804177284240723e-01 2.541176378726959229e-01 7.058823481202125549e-03 1.000000000000000000e+00 -7.647058963775634766e-01 2.519031167030334473e-01 7.304882630705833435e-03 1.000000000000000000e+00 -7.584313750267028809e-01 2.496885806322097778e-01 7.550941780209541321e-03 1.000000000000000000e+00 -7.521568536758422852e-01 2.474740445613861084e-01 7.797000929713249207e-03 1.000000000000000000e+00 -7.458823323249816895e-01 2.452595084905624390e-01 8.043060079216957092e-03 1.000000000000000000e+00 -7.396078705787658691e-01 2.430449873208999634e-01 8.289119228720664978e-03 1.000000000000000000e+00 -7.333333492279052734e-01 2.408304512500762939e-01 8.535178378224372864e-03 1.000000000000000000e+00 -7.270588278770446777e-01 2.386159151792526245e-01 8.781237527728080750e-03 1.000000000000000000e+00 -7.207843065261840820e-01 2.364013791084289551e-01 9.027297608554363251e-03 1.000000000000000000e+00 -7.145097851753234863e-01 2.341868579387664795e-01 9.273356758058071136e-03 1.000000000000000000e+00 -7.082353234291076660e-01 2.319723218679428101e-01 9.519415907561779022e-03 1.000000000000000000e+00 -7.019608020782470703e-01 2.297577857971191406e-01 9.765475057065486908e-03 1.000000000000000000e+00 -6.956862807273864746e-01 2.275432497262954712e-01 1.001153420656919479e-02 1.000000000000000000e+00 -6.894117593765258789e-01 2.253287136554718018e-01 1.025759335607290268e-02 1.000000000000000000e+00 -6.831372380256652832e-01 2.231141924858093262e-01 1.050365250557661057e-02 1.000000000000000000e+00 -6.768627166748046875e-01 2.208996564149856567e-01 1.074971165508031845e-02 1.000000000000000000e+00 -6.705882549285888672e-01 2.186851203441619873e-01 1.099577080458402634e-02 1.000000000000000000e+00 -6.643137335777282715e-01 2.164705842733383179e-01 1.124182995408773422e-02 1.000000000000000000e+00 -6.580392122268676758e-01 2.142560482025146484e-01 1.148788910359144211e-02 1.000000000000000000e+00 -6.517646908760070801e-01 2.120415270328521729e-01 1.173394825309514999e-02 1.000000000000000000e+00 -6.467819809913635254e-01 2.101499438285827637e-01 1.187235675752162933e-02 1.000000000000000000e+00 -6.419838666915893555e-01 2.083044946193695068e-01 1.199538633227348328e-02 1.000000000000000000e+00 -6.371856927871704102e-01 2.064590603113174438e-01 1.211841590702533722e-02 1.000000000000000000e+00 -6.323875188827514648e-01 2.046136111021041870e-01 1.224144548177719116e-02 1.000000000000000000e+00 -6.275894045829772949e-01 2.027681618928909302e-01 1.236447505652904510e-02 1.000000000000000000e+00 -6.227912306785583496e-01 2.009227275848388672e-01 1.248750463128089905e-02 1.000000000000000000e+00 -6.179930567741394043e-01 1.990772783756256104e-01 1.261053420603275299e-02 1.000000000000000000e+00 -6.131949424743652344e-01 1.972318291664123535e-01 1.273356378078460693e-02 1.000000000000000000e+00 -6.083967685699462891e-01 1.953863948583602905e-01 1.285659335553646088e-02 1.000000000000000000e+00 -6.035985946655273438e-01 1.935409456491470337e-01 1.297962293028831482e-02 1.000000000000000000e+00 -5.988004803657531738e-01 1.916954964399337769e-01 1.310265250504016876e-02 1.000000000000000000e+00 -5.940023064613342285e-01 1.898500621318817139e-01 1.322568207979202271e-02 1.000000000000000000e+00 -5.892041325569152832e-01 1.880046129226684570e-01 1.334871165454387665e-02 1.000000000000000000e+00 -5.844060182571411133e-01 1.861591637134552002e-01 1.347174122929573059e-02 1.000000000000000000e+00 -5.796078443527221680e-01 1.843137294054031372e-01 1.359477080404758453e-02 1.000000000000000000e+00 -5.748096704483032227e-01 1.824682801961898804e-01 1.371780131012201309e-02 1.000000000000000000e+00 -5.700115561485290527e-01 1.806228309869766235e-01 1.384083088487386703e-02 1.000000000000000000e+00 -5.652133822441101074e-01 1.787773966789245605e-01 1.396386045962572098e-02 1.000000000000000000e+00 -5.604152083396911621e-01 1.769319474697113037e-01 1.408689003437757492e-02 1.000000000000000000e+00 -5.556170940399169922e-01 1.750864982604980469e-01 1.420991960912942886e-02 1.000000000000000000e+00 -5.508189201354980469e-01 1.732410639524459839e-01 1.433294918388128281e-02 1.000000000000000000e+00 -5.460207462310791016e-01 1.713956147432327271e-01 1.445597875863313675e-02 1.000000000000000000e+00 -5.412226319313049316e-01 1.695501804351806641e-01 1.457900833338499069e-02 1.000000000000000000e+00 -5.364244580268859863e-01 1.677047312259674072e-01 1.470203790813684464e-02 1.000000000000000000e+00 -5.316262841224670410e-01 1.658592820167541504e-01 1.482506748288869858e-02 1.000000000000000000e+00 -5.268281698226928711e-01 1.640138477087020874e-01 1.494809705764055252e-02 1.000000000000000000e+00 -5.220299959182739258e-01 1.621683984994888306e-01 1.507112663239240646e-02 1.000000000000000000e+00 -5.172318220138549805e-01 1.603229492902755737e-01 1.519415620714426041e-02 1.000000000000000000e+00 -5.124337077140808105e-01 1.584775149822235107e-01 1.531718578189611435e-02 1.000000000000000000e+00 -5.076355338096618652e-01 1.566320657730102539e-01 1.544021535664796829e-02 1.000000000000000000e+00 -5.028373599052429199e-01 1.547866165637969971e-01 1.556324493139982224e-02 1.000000000000000000e+00 -4.980392158031463623e-01 1.529411822557449341e-01 1.568627543747425079e-02 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/PRGn b/fastplotlib/utils/colormaps/PRGn deleted file mode 100644 index 33b818b35..000000000 --- a/fastplotlib/utils/colormaps/PRGn +++ /dev/null @@ -1,256 +0,0 @@ -2.509804069995880127e-01 0.000000000000000000e+00 2.941176593303680420e-01 1.000000000000000000e+00 -2.592848837375640869e-01 6.459054071456193924e-03 3.027297258377075195e-01 1.000000000000000000e+00 -2.675893902778625488e-01 1.291810814291238785e-02 3.113417923450469971e-01 1.000000000000000000e+00 -2.758938968181610107e-01 1.937716268002986908e-02 3.199538588523864746e-01 1.000000000000000000e+00 -2.841983735561370850e-01 2.583621628582477570e-02 3.285659253597259521e-01 1.000000000000000000e+00 -2.925028800964355469e-01 3.229527175426483154e-02 3.371780216693878174e-01 1.000000000000000000e+00 -3.008073866367340088e-01 3.875432536005973816e-02 3.457900881767272949e-01 1.000000000000000000e+00 -3.091118931770324707e-01 4.521337896585464478e-02 3.544021546840667725e-01 1.000000000000000000e+00 -3.174163699150085449e-01 5.167243257164955139e-02 3.630142211914062500e-01 1.000000000000000000e+00 -3.257208764553070068e-01 5.813148617744445801e-02 3.716262876987457275e-01 1.000000000000000000e+00 -3.340253829956054688e-01 6.459054350852966309e-02 3.802383840084075928e-01 1.000000000000000000e+00 -3.423298597335815430e-01 7.104959338903427124e-02 3.888504505157470703e-01 1.000000000000000000e+00 -3.506343662738800049e-01 7.750865072011947632e-02 3.974625170230865479e-01 1.000000000000000000e+00 -3.589388728141784668e-01 8.396770805120468140e-02 4.060745835304260254e-01 1.000000000000000000e+00 -3.672433793544769287e-01 9.042675793170928955e-02 4.146866500377655029e-01 1.000000000000000000e+00 -3.755478560924530029e-01 9.688581526279449463e-02 4.232987165451049805e-01 1.000000000000000000e+00 -3.838523626327514648e-01 1.033448651432991028e-01 4.319108128547668457e-01 1.000000000000000000e+00 -3.921568691730499268e-01 1.098039224743843079e-01 4.405228793621063232e-01 1.000000000000000000e+00 -4.004613757133483887e-01 1.162629723548889160e-01 4.491349458694458008e-01 1.000000000000000000e+00 -4.087658524513244629e-01 1.227220296859741211e-01 4.577470123767852783e-01 1.000000000000000000e+00 -4.170703589916229248e-01 1.291810870170593262e-01 4.663590788841247559e-01 1.000000000000000000e+00 -4.253748655319213867e-01 1.356401443481445312e-01 4.749711751937866211e-01 1.000000000000000000e+00 -4.336793422698974609e-01 1.420991867780685425e-01 4.835832417011260986e-01 1.000000000000000000e+00 -4.419838488101959229e-01 1.485582441091537476e-01 4.921953082084655762e-01 1.000000000000000000e+00 -4.502883553504943848e-01 1.550173014402389526e-01 5.008074045181274414e-01 1.000000000000000000e+00 -4.585928618907928467e-01 1.614763587713241577e-01 5.094194412231445312e-01 1.000000000000000000e+00 -4.654363691806793213e-01 1.700884252786636353e-01 5.168012380599975586e-01 1.000000000000000000e+00 -4.708189070224761963e-01 1.808535158634185791e-01 5.229527354240417480e-01 1.000000000000000000e+00 -4.762014746665954590e-01 1.916186064481735229e-01 5.291041731834411621e-01 1.000000000000000000e+00 -4.815840125083923340e-01 2.023836970329284668e-01 5.352556705474853516e-01 1.000000000000000000e+00 -4.869665503501892090e-01 2.131487876176834106e-01 5.414071679115295410e-01 1.000000000000000000e+00 -4.923490881919860840e-01 2.239138782024383545e-01 5.475586056709289551e-01 1.000000000000000000e+00 -4.977316558361053467e-01 2.346789687871932983e-01 5.537101030349731445e-01 1.000000000000000000e+00 -5.031141638755798340e-01 2.454440593719482422e-01 5.598616003990173340e-01 1.000000000000000000e+00 -5.084967613220214844e-01 2.562091648578643799e-01 5.660130977630615234e-01 1.000000000000000000e+00 -5.138792991638183594e-01 2.669742405414581299e-01 5.721645355224609375e-01 1.000000000000000000e+00 -5.192618370056152344e-01 2.777393162250518799e-01 5.783160328865051270e-01 1.000000000000000000e+00 -5.246443748474121094e-01 2.885044217109680176e-01 5.844675302505493164e-01 1.000000000000000000e+00 -5.300269126892089844e-01 2.992694973945617676e-01 5.906189680099487305e-01 1.000000000000000000e+00 -5.354094505310058594e-01 3.100346028804779053e-01 5.967704653739929199e-01 1.000000000000000000e+00 -5.407919883728027344e-01 3.207996785640716553e-01 6.029219627380371094e-01 1.000000000000000000e+00 -5.461745262145996094e-01 3.315647840499877930e-01 6.090734601020812988e-01 1.000000000000000000e+00 -5.515570640563964844e-01 3.423298597335815430e-01 6.152248978614807129e-01 1.000000000000000000e+00 -5.569396615028381348e-01 3.530949652194976807e-01 6.213763952255249023e-01 1.000000000000000000e+00 -5.623221993446350098e-01 3.638600409030914307e-01 6.275278925895690918e-01 1.000000000000000000e+00 -5.677047371864318848e-01 3.746251463890075684e-01 6.336793303489685059e-01 1.000000000000000000e+00 -5.730872750282287598e-01 3.853902220726013184e-01 6.398308277130126953e-01 1.000000000000000000e+00 -5.784698128700256348e-01 3.961553275585174561e-01 6.459823250770568848e-01 1.000000000000000000e+00 -5.838523507118225098e-01 4.069204032421112061e-01 6.521338224411010742e-01 1.000000000000000000e+00 -5.892348885536193848e-01 4.176855087280273438e-01 6.582852602005004883e-01 1.000000000000000000e+00 -5.946174263954162598e-01 4.284505844116210938e-01 6.644367575645446777e-01 1.000000000000000000e+00 -6.000000238418579102e-01 4.392156898975372314e-01 6.705882549285888672e-01 1.000000000000000000e+00 -6.063052415847778320e-01 4.473663866519927979e-01 6.761245727539062500e-01 1.000000000000000000e+00 -6.126105189323425293e-01 4.555171132087707520e-01 6.816608905792236328e-01 1.000000000000000000e+00 -6.189157962799072266e-01 4.636678099632263184e-01 6.871972084045410156e-01 1.000000000000000000e+00 -6.252210736274719238e-01 4.718185365200042725e-01 6.927335858345031738e-01 1.000000000000000000e+00 -6.315263509750366211e-01 4.799692332744598389e-01 6.982699036598205566e-01 1.000000000000000000e+00 -6.378316283226013184e-01 4.881199598312377930e-01 7.038062214851379395e-01 1.000000000000000000e+00 -6.441368460655212402e-01 4.962706565856933594e-01 7.093425393104553223e-01 1.000000000000000000e+00 -6.504421234130859375e-01 5.044213533401489258e-01 7.148789167404174805e-01 1.000000000000000000e+00 -6.567474007606506348e-01 5.125721096992492676e-01 7.204152345657348633e-01 1.000000000000000000e+00 -6.630526781082153320e-01 5.207228064537048340e-01 7.259515523910522461e-01 1.000000000000000000e+00 -6.693579554557800293e-01 5.288735032081604004e-01 7.314878702163696289e-01 1.000000000000000000e+00 -6.756632328033447266e-01 5.370241999626159668e-01 7.370242476463317871e-01 1.000000000000000000e+00 -6.819684505462646484e-01 5.451749563217163086e-01 7.425605654716491699e-01 1.000000000000000000e+00 -6.882737278938293457e-01 5.533256530761718750e-01 7.480968832969665527e-01 1.000000000000000000e+00 -6.945790052413940430e-01 5.614763498306274414e-01 7.536332011222839355e-01 1.000000000000000000e+00 -7.008842825889587402e-01 5.696270465850830078e-01 7.591695785522460938e-01 1.000000000000000000e+00 -7.071895599365234375e-01 5.777778029441833496e-01 7.647058963775634766e-01 1.000000000000000000e+00 -7.134948372840881348e-01 5.859284996986389160e-01 7.702422142028808594e-01 1.000000000000000000e+00 -7.198000550270080566e-01 5.940791964530944824e-01 7.757785320281982422e-01 1.000000000000000000e+00 -7.261053323745727539e-01 6.022298932075500488e-01 7.813148498535156250e-01 1.000000000000000000e+00 -7.324106097221374512e-01 6.103806495666503906e-01 7.868512272834777832e-01 1.000000000000000000e+00 -7.387158870697021484e-01 6.185313463211059570e-01 7.923875451087951660e-01 1.000000000000000000e+00 -7.450211644172668457e-01 6.266820430755615234e-01 7.979238629341125488e-01 1.000000000000000000e+00 -7.513264417648315430e-01 6.348327398300170898e-01 8.034601807594299316e-01 1.000000000000000000e+00 -7.576316595077514648e-01 6.429834961891174316e-01 8.089965581893920898e-01 1.000000000000000000e+00 -7.636293768882751465e-01 6.506727933883666992e-01 8.136870265007019043e-01 1.000000000000000000e+00 -7.693194746971130371e-01 6.579008102416992188e-01 8.175317049026489258e-01 1.000000000000000000e+00 -7.750096321105957031e-01 6.651287674903869629e-01 8.213763833045959473e-01 1.000000000000000000e+00 -7.806997299194335938e-01 6.723567843437194824e-01 8.252210617065429688e-01 1.000000000000000000e+00 -7.863898277282714844e-01 6.795848011970520020e-01 8.290657401084899902e-01 1.000000000000000000e+00 -7.920799851417541504e-01 6.868127584457397461e-01 8.329104185104370117e-01 1.000000000000000000e+00 -7.977700829505920410e-01 6.940407752990722656e-01 8.367550969123840332e-01 1.000000000000000000e+00 -8.034601807594299316e-01 7.012687325477600098e-01 8.405997753143310547e-01 1.000000000000000000e+00 -8.091503381729125977e-01 7.084967494010925293e-01 8.444444537162780762e-01 1.000000000000000000e+00 -8.148404359817504883e-01 7.157247066497802734e-01 8.482891321182250977e-01 1.000000000000000000e+00 -8.205305933952331543e-01 7.229527235031127930e-01 8.521338105201721191e-01 1.000000000000000000e+00 -8.262206912040710449e-01 7.301806807518005371e-01 8.559784889221191406e-01 1.000000000000000000e+00 -8.319107890129089355e-01 7.374086976051330566e-01 8.598231673240661621e-01 1.000000000000000000e+00 -8.376009464263916016e-01 7.446366548538208008e-01 8.636678457260131836e-01 1.000000000000000000e+00 -8.432910442352294922e-01 7.518646717071533203e-01 8.675125241279602051e-01 1.000000000000000000e+00 -8.489811420440673828e-01 7.590926289558410645e-01 8.713571429252624512e-01 1.000000000000000000e+00 -8.546712994575500488e-01 7.663206458091735840e-01 8.752018213272094727e-01 1.000000000000000000e+00 -8.603613972663879395e-01 7.735486626625061035e-01 8.790464997291564941e-01 1.000000000000000000e+00 -8.660514950752258301e-01 7.807766199111938477e-01 8.828911781311035156e-01 1.000000000000000000e+00 -8.717416524887084961e-01 7.880046367645263672e-01 8.867358565330505371e-01 1.000000000000000000e+00 -8.774317502975463867e-01 7.952325940132141113e-01 8.905805349349975586e-01 1.000000000000000000e+00 -8.831218481063842773e-01 8.024606108665466309e-01 8.944252133369445801e-01 1.000000000000000000e+00 -8.888120055198669434e-01 8.096885681152343750e-01 8.982698917388916016e-01 1.000000000000000000e+00 -8.945021033287048340e-01 8.169165849685668945e-01 9.021145701408386230e-01 1.000000000000000000e+00 -9.001922607421875000e-01 8.241445422172546387e-01 9.059592485427856445e-01 1.000000000000000000e+00 -9.058823585510253906e-01 8.313725590705871582e-01 9.098039269447326660e-01 1.000000000000000000e+00 -9.083429574966430664e-01 8.367550969123840332e-01 9.121107459068298340e-01 1.000000000000000000e+00 -9.108035564422607422e-01 8.421376347541809082e-01 9.144175052642822266e-01 1.000000000000000000e+00 -9.132641553878784180e-01 8.475201725959777832e-01 9.167243242263793945e-01 1.000000000000000000e+00 -9.157246947288513184e-01 8.529027104377746582e-01 9.190311431884765625e-01 1.000000000000000000e+00 -9.181852936744689941e-01 8.582852482795715332e-01 9.213379621505737305e-01 1.000000000000000000e+00 -9.206458926200866699e-01 8.636678457260131836e-01 9.236447811126708984e-01 1.000000000000000000e+00 -9.231064915657043457e-01 8.690503835678100586e-01 9.259515404701232910e-01 1.000000000000000000e+00 -9.255670905113220215e-01 8.744329214096069336e-01 9.282583594322204590e-01 1.000000000000000000e+00 -9.280276894569396973e-01 8.798154592514038086e-01 9.305651783943176270e-01 1.000000000000000000e+00 -9.304882884025573730e-01 8.851979970932006836e-01 9.328719973564147949e-01 1.000000000000000000e+00 -9.329488873481750488e-01 8.905805349349975586e-01 9.351787567138671875e-01 1.000000000000000000e+00 -9.354094862937927246e-01 8.959630727767944336e-01 9.374855756759643555e-01 1.000000000000000000e+00 -9.378700256347656250e-01 9.013456106185913086e-01 9.397923946380615234e-01 1.000000000000000000e+00 -9.403306245803833008e-01 9.067282080650329590e-01 9.420992136001586914e-01 1.000000000000000000e+00 -9.427912235260009766e-01 9.121107459068298340e-01 9.444059729576110840e-01 1.000000000000000000e+00 -9.452518224716186523e-01 9.174932837486267090e-01 9.467127919197082520e-01 1.000000000000000000e+00 -9.477124214172363281e-01 9.228758215904235840e-01 9.490196108818054199e-01 1.000000000000000000e+00 -9.501730203628540039e-01 9.282583594322204590e-01 9.513264298439025879e-01 1.000000000000000000e+00 -9.526336193084716797e-01 9.336408972740173340e-01 9.536331892013549805e-01 1.000000000000000000e+00 -9.550942182540893555e-01 9.390234351158142090e-01 9.559400081634521484e-01 1.000000000000000000e+00 -9.575547575950622559e-01 9.444059729576110840e-01 9.582468271255493164e-01 1.000000000000000000e+00 -9.600153565406799316e-01 9.497885704040527344e-01 9.605536460876464844e-01 1.000000000000000000e+00 -9.624759554862976074e-01 9.551711082458496094e-01 9.628604650497436523e-01 1.000000000000000000e+00 -9.649365544319152832e-01 9.605536460876464844e-01 9.651672244071960449e-01 1.000000000000000000e+00 -9.673971533775329590e-01 9.659361839294433594e-01 9.674740433692932129e-01 1.000000000000000000e+00 -9.663206338882446289e-01 9.680892229080200195e-01 9.658592939376831055e-01 1.000000000000000000e+00 -9.617070555686950684e-01 9.670127034187316895e-01 9.603229761123657227e-01 1.000000000000000000e+00 -9.570934176445007324e-01 9.659361839294433594e-01 9.547865986824035645e-01 1.000000000000000000e+00 -9.524798393249511719e-01 9.648596644401550293e-01 9.492502808570861816e-01 1.000000000000000000e+00 -9.478662014007568359e-01 9.637831449508666992e-01 9.437139630317687988e-01 1.000000000000000000e+00 -9.432526230812072754e-01 9.627066254615783691e-01 9.381776452064514160e-01 1.000000000000000000e+00 -9.386389851570129395e-01 9.616301655769348145e-01 9.326412677764892578e-01 1.000000000000000000e+00 -9.340253472328186035e-01 9.605536460876464844e-01 9.271049499511718750e-01 1.000000000000000000e+00 -9.294117689132690430e-01 9.594771265983581543e-01 9.215686321258544922e-01 1.000000000000000000e+00 -9.247981309890747070e-01 9.584006071090698242e-01 9.160323143005371094e-01 1.000000000000000000e+00 -9.201845526695251465e-01 9.573240876197814941e-01 9.104959368705749512e-01 1.000000000000000000e+00 -9.155709147453308105e-01 9.562475681304931641e-01 9.049596190452575684e-01 1.000000000000000000e+00 -9.109573364257812500e-01 9.551711082458496094e-01 8.994233012199401855e-01 1.000000000000000000e+00 -9.063436985015869141e-01 9.540945887565612793e-01 8.938869833946228027e-01 1.000000000000000000e+00 -9.017301201820373535e-01 9.530180692672729492e-01 8.883506059646606445e-01 1.000000000000000000e+00 -8.971164822578430176e-01 9.519415497779846191e-01 8.828142881393432617e-01 1.000000000000000000e+00 -8.925029039382934570e-01 9.508650302886962891e-01 8.772779703140258789e-01 1.000000000000000000e+00 -8.878892660140991211e-01 9.497885704040527344e-01 8.717416524887084961e-01 1.000000000000000000e+00 -8.832756876945495605e-01 9.487120509147644043e-01 8.662053346633911133e-01 1.000000000000000000e+00 -8.786620497703552246e-01 9.476355314254760742e-01 8.606689572334289551e-01 1.000000000000000000e+00 -8.740484714508056641e-01 9.465590119361877441e-01 8.551326394081115723e-01 1.000000000000000000e+00 -8.694348335266113281e-01 9.454824924468994141e-01 8.495963215827941895e-01 1.000000000000000000e+00 -8.648211956024169922e-01 9.444059729576110840e-01 8.440600037574768066e-01 1.000000000000000000e+00 -8.602076172828674316e-01 9.433295130729675293e-01 8.385236263275146484e-01 1.000000000000000000e+00 -8.555939793586730957e-01 9.422529935836791992e-01 8.329873085021972656e-01 1.000000000000000000e+00 -8.509804010391235352e-01 9.411764740943908691e-01 8.274509906768798828e-01 1.000000000000000000e+00 -8.431372642517089844e-01 9.379469156265258789e-01 8.196078538894653320e-01 1.000000000000000000e+00 -8.352941274642944336e-01 9.347174167633056641e-01 8.117647171020507812e-01 1.000000000000000000e+00 -8.274509906768798828e-01 9.314879179000854492e-01 8.039215803146362305e-01 1.000000000000000000e+00 -8.196078538894653320e-01 9.282583594322204590e-01 7.960784435272216797e-01 1.000000000000000000e+00 -8.117647171020507812e-01 9.250288605690002441e-01 7.882353067398071289e-01 1.000000000000000000e+00 -8.039215803146362305e-01 9.217993021011352539e-01 7.803921699523925781e-01 1.000000000000000000e+00 -7.960784435272216797e-01 9.185698032379150391e-01 7.725490331649780273e-01 1.000000000000000000e+00 -7.882353067398071289e-01 9.153402447700500488e-01 7.647058963775634766e-01 1.000000000000000000e+00 -7.803921699523925781e-01 9.121107459068298340e-01 7.568627595901489258e-01 1.000000000000000000e+00 -7.725490331649780273e-01 9.088811874389648438e-01 7.490196228027343750e-01 1.000000000000000000e+00 -7.647058963775634766e-01 9.056516885757446289e-01 7.411764860153198242e-01 1.000000000000000000e+00 -7.568627595901489258e-01 9.024221301078796387e-01 7.333333492279052734e-01 1.000000000000000000e+00 -7.490196228027343750e-01 8.991926312446594238e-01 7.254902124404907227e-01 1.000000000000000000e+00 -7.411764860153198242e-01 8.959630727767944336e-01 7.176470756530761719e-01 1.000000000000000000e+00 -7.333333492279052734e-01 8.927335739135742188e-01 7.098039388656616211e-01 1.000000000000000000e+00 -7.254902124404907227e-01 8.895040154457092285e-01 7.019608020782470703e-01 1.000000000000000000e+00 -7.176470756530761719e-01 8.862745165824890137e-01 6.941176652908325195e-01 1.000000000000000000e+00 -7.098039388656616211e-01 8.830449581146240234e-01 6.862745285034179688e-01 1.000000000000000000e+00 -7.019608020782470703e-01 8.798154592514038086e-01 6.784313917160034180e-01 1.000000000000000000e+00 -6.941176652908325195e-01 8.765859007835388184e-01 6.705882549285888672e-01 1.000000000000000000e+00 -6.862745285034179688e-01 8.733564019203186035e-01 6.627451181411743164e-01 1.000000000000000000e+00 -6.784313917160034180e-01 8.701269030570983887e-01 6.549019813537597656e-01 1.000000000000000000e+00 -6.705882549285888672e-01 8.668973445892333984e-01 6.470588445663452148e-01 1.000000000000000000e+00 -6.627451181411743164e-01 8.636678457260131836e-01 6.392157077789306641e-01 1.000000000000000000e+00 -6.549019813537597656e-01 8.604382872581481934e-01 6.313725709915161133e-01 1.000000000000000000e+00 -6.451364755630493164e-01 8.553633093833923340e-01 6.226066946983337402e-01 1.000000000000000000e+00 -6.334486603736877441e-01 8.484429121017456055e-01 6.129180788993835449e-01 1.000000000000000000e+00 -6.217608451843261719e-01 8.415225148200988770e-01 6.032295227050781250e-01 1.000000000000000000e+00 -6.100730299949645996e-01 8.346020579338073730e-01 5.935409665107727051e-01 1.000000000000000000e+00 -5.983852148056030273e-01 8.276816606521606445e-01 5.838523507118225098e-01 1.000000000000000000e+00 -5.866973996162414551e-01 8.207612633705139160e-01 5.741637945175170898e-01 1.000000000000000000e+00 -5.750095844268798828e-01 8.138408064842224121e-01 5.644751787185668945e-01 1.000000000000000000e+00 -5.633218288421630859e-01 8.069204092025756836e-01 5.547866225242614746e-01 1.000000000000000000e+00 -5.516340136528015137e-01 8.000000119209289551e-01 5.450980663299560547e-01 1.000000000000000000e+00 -5.399461984634399414e-01 7.930795550346374512e-01 5.354094505310058594e-01 1.000000000000000000e+00 -5.282583832740783691e-01 7.861591577529907227e-01 5.257208943367004395e-01 1.000000000000000000e+00 -5.165705680847167969e-01 7.792387604713439941e-01 5.160322785377502441e-01 1.000000000000000000e+00 -5.048827528953552246e-01 7.723183631896972656e-01 5.063437223434448242e-01 1.000000000000000000e+00 -4.931949377059936523e-01 7.653979063034057617e-01 4.966551363468170166e-01 1.000000000000000000e+00 -4.815071225166320801e-01 7.584775090217590332e-01 4.869665503501892090e-01 1.000000000000000000e+00 -4.698193073272705078e-01 7.515571117401123047e-01 4.772779643535614014e-01 1.000000000000000000e+00 -4.581314921379089355e-01 7.446366548538208008e-01 4.675893783569335938e-01 1.000000000000000000e+00 -4.464436769485473633e-01 7.377162575721740723e-01 4.579008221626281738e-01 1.000000000000000000e+00 -4.347558617591857910e-01 7.307958602905273438e-01 4.482122361660003662e-01 1.000000000000000000e+00 -4.230680465698242188e-01 7.238754034042358398e-01 4.385236501693725586e-01 1.000000000000000000e+00 -4.113802313804626465e-01 7.169550061225891113e-01 4.288350641727447510e-01 1.000000000000000000e+00 -3.996924161911010742e-01 7.100346088409423828e-01 4.191464781761169434e-01 1.000000000000000000e+00 -3.880046010017395020e-01 7.031142115592956543e-01 4.094578921794891357e-01 1.000000000000000000e+00 -3.763168156147003174e-01 6.961937546730041504e-01 3.997693061828613281e-01 1.000000000000000000e+00 -3.646290004253387451e-01 6.892733573913574219e-01 3.900807499885559082e-01 1.000000000000000000e+00 -3.529411852359771729e-01 6.823529601097106934e-01 3.803921639919281006e-01 1.000000000000000000e+00 -3.432525992393493652e-01 6.740484237670898438e-01 3.739331066608428955e-01 1.000000000000000000e+00 -3.335640132427215576e-01 6.657439470291137695e-01 3.674740493297576904e-01 1.000000000000000000e+00 -3.238754272460937500e-01 6.574394702911376953e-01 3.610149919986724854e-01 1.000000000000000000e+00 -3.141868412494659424e-01 6.491349339485168457e-01 3.545559346675872803e-01 1.000000000000000000e+00 -3.044982552528381348e-01 6.408304572105407715e-01 3.480968773365020752e-01 1.000000000000000000e+00 -2.948096990585327148e-01 6.325259804725646973e-01 3.416378200054168701e-01 1.000000000000000000e+00 -2.851211130619049072e-01 6.242214441299438477e-01 3.351787626743316650e-01 1.000000000000000000e+00 -2.754325270652770996e-01 6.159169673919677734e-01 3.287197351455688477e-01 1.000000000000000000e+00 -2.657439410686492920e-01 6.076124310493469238e-01 3.222606778144836426e-01 1.000000000000000000e+00 -2.560553550720214844e-01 5.993079543113708496e-01 3.158016204833984375e-01 1.000000000000000000e+00 -2.463667839765548706e-01 5.910034775733947754e-01 3.093425631523132324e-01 1.000000000000000000e+00 -2.366781979799270630e-01 5.826989412307739258e-01 3.028835058212280273e-01 1.000000000000000000e+00 -2.269896119832992554e-01 5.743944644927978516e-01 2.964244484901428223e-01 1.000000000000000000e+00 -2.173010408878326416e-01 5.660899877548217773e-01 2.899653911590576172e-01 1.000000000000000000e+00 -2.076124548912048340e-01 5.577854514122009277e-01 2.835063338279724121e-01 1.000000000000000000e+00 -1.979238688945770264e-01 5.494809746742248535e-01 2.770472764968872070e-01 1.000000000000000000e+00 -1.882352977991104126e-01 5.411764979362487793e-01 2.705882489681243896e-01 1.000000000000000000e+00 -1.785467118024826050e-01 5.328719615936279297e-01 2.641291916370391846e-01 1.000000000000000000e+00 -1.688581258058547974e-01 5.245674848556518555e-01 2.576701343059539795e-01 1.000000000000000000e+00 -1.591695547103881836e-01 5.162629485130310059e-01 2.512110769748687744e-01 1.000000000000000000e+00 -1.494809687137603760e-01 5.079584717750549316e-01 2.447520196437835693e-01 1.000000000000000000e+00 -1.397923827171325684e-01 4.996539652347564697e-01 2.382929623126983643e-01 1.000000000000000000e+00 -1.301038116216659546e-01 4.913494884967803955e-01 2.318339049816131592e-01 1.000000000000000000e+00 -1.204152256250381470e-01 4.830449819564819336e-01 2.253748625516891479e-01 1.000000000000000000e+00 -1.107266470789909363e-01 4.747404754161834717e-01 2.189158052206039429e-01 1.000000000000000000e+00 -1.038062274456024170e-01 4.665897786617279053e-01 2.135332524776458740e-01 1.000000000000000000e+00 -9.965398162603378296e-02 4.585928618907928467e-01 2.092272192239761353e-01 1.000000000000000000e+00 -9.550172835588455200e-02 4.505959153175354004e-01 2.049211859703063965e-01 1.000000000000000000e+00 -9.134948253631591797e-02 4.425989985466003418e-01 2.006151527166366577e-01 1.000000000000000000e+00 -8.719722926616668701e-02 4.346020817756652832e-01 1.963091045618057251e-01 1.000000000000000000e+00 -8.304498344659805298e-02 4.266051650047302246e-01 1.920030713081359863e-01 1.000000000000000000e+00 -7.889273017644882202e-02 4.186082184314727783e-01 1.876970380544662476e-01 1.000000000000000000e+00 -7.474048435688018799e-02 4.106113016605377197e-01 1.833910048007965088e-01 1.000000000000000000e+00 -7.058823853731155396e-02 4.026143848896026611e-01 1.790849715471267700e-01 1.000000000000000000e+00 -6.643598526716232300e-02 3.946174681186676025e-01 1.747789382934570312e-01 1.000000000000000000e+00 -6.228373572230339050e-02 3.866205215454101562e-01 1.704728901386260986e-01 1.000000000000000000e+00 -5.813148617744445801e-02 3.786236047744750977e-01 1.661668568849563599e-01 1.000000000000000000e+00 -5.397924035787582397e-02 3.706266880035400391e-01 1.618608236312866211e-01 1.000000000000000000e+00 -4.982699081301689148e-02 3.626297712326049805e-01 1.575547903776168823e-01 1.000000000000000000e+00 -4.567474126815795898e-02 3.546328246593475342e-01 1.532487571239471436e-01 1.000000000000000000e+00 -4.152249172329902649e-02 3.466359078884124756e-01 1.489427089691162109e-01 1.000000000000000000e+00 -3.737024217844009399e-02 3.386389911174774170e-01 1.446366757154464722e-01 1.000000000000000000e+00 -3.321799263358116150e-02 3.306420743465423584e-01 1.403306424617767334e-01 1.000000000000000000e+00 -2.906574308872222900e-02 3.226451277732849121e-01 1.360246092081069946e-01 1.000000000000000000e+00 -2.491349540650844574e-02 3.146482110023498535e-01 1.317185759544372559e-01 1.000000000000000000e+00 -2.076124586164951324e-02 3.066512942314147949e-01 1.274125277996063232e-01 1.000000000000000000e+00 -1.660899631679058075e-02 2.986543774604797363e-01 1.231064945459365845e-01 1.000000000000000000e+00 -1.245674770325422287e-02 2.906574308872222900e-01 1.188004612922668457e-01 1.000000000000000000e+00 -8.304498158395290375e-03 2.826605141162872314e-01 1.144944280385971069e-01 1.000000000000000000e+00 -4.152249079197645187e-03 2.746635973453521729e-01 1.101883873343467712e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.666666805744171143e-01 1.058823540806770325e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Paired b/fastplotlib/utils/colormaps/Paired deleted file mode 100644 index 710d68bf4..000000000 --- a/fastplotlib/utils/colormaps/Paired +++ /dev/null @@ -1,12 +0,0 @@ -6.509804129600524902e-01 8.078431487083435059e-01 8.901960849761962891e-01 1.000000000000000000e+00 -1.215686276555061340e-01 4.705882370471954346e-01 7.058823704719543457e-01 1.000000000000000000e+00 -6.980392336845397949e-01 8.745098114013671875e-01 5.411764979362487793e-01 1.000000000000000000e+00 -2.000000029802322388e-01 6.274510025978088379e-01 1.725490242242813110e-01 1.000000000000000000e+00 -9.843137264251708984e-01 6.039215922355651855e-01 6.000000238418579102e-01 1.000000000000000000e+00 -8.901960849761962891e-01 1.019607856869697571e-01 1.098039224743843079e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.490196228027343750e-01 4.352941215038299561e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.980392158031463623e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.921568751335144043e-01 6.980392336845397949e-01 8.392156958580017090e-01 1.000000000000000000e+00 -4.156862795352935791e-01 2.392156869173049927e-01 6.039215922355651855e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.000000238418579102e-01 1.000000000000000000e+00 -6.941176652908325195e-01 3.490196168422698975e-01 1.568627506494522095e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Pastel1 b/fastplotlib/utils/colormaps/Pastel1 deleted file mode 100644 index 9f1a1eb66..000000000 --- a/fastplotlib/utils/colormaps/Pastel1 +++ /dev/null @@ -1,9 +0,0 @@ -9.843137264251708984e-01 7.058823704719543457e-01 6.823529601097106934e-01 1.000000000000000000e+00 -7.019608020782470703e-01 8.039215803146362305e-01 8.901960849761962891e-01 1.000000000000000000e+00 -8.000000119209289551e-01 9.215686321258544922e-01 7.725490331649780273e-01 1.000000000000000000e+00 -8.705882430076599121e-01 7.960784435272216797e-01 8.941176533699035645e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.509804010391235352e-01 6.509804129600524902e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.000000119209289551e-01 1.000000000000000000e+00 -8.980392217636108398e-01 8.470588326454162598e-01 7.411764860153198242e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.549019694328308105e-01 9.254902005195617676e-01 1.000000000000000000e+00 -9.490196108818054199e-01 9.490196108818054199e-01 9.490196108818054199e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Pastel2 b/fastplotlib/utils/colormaps/Pastel2 deleted file mode 100644 index adcb77b02..000000000 --- a/fastplotlib/utils/colormaps/Pastel2 +++ /dev/null @@ -1,8 +0,0 @@ -7.019608020782470703e-01 8.862745165824890137e-01 8.039215803146362305e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.039215803146362305e-01 6.745098233222961426e-01 1.000000000000000000e+00 -7.960784435272216797e-01 8.352941274642944336e-01 9.098039269447326660e-01 1.000000000000000000e+00 -9.568627476692199707e-01 7.921568751335144043e-01 8.941176533699035645e-01 1.000000000000000000e+00 -9.019607901573181152e-01 9.607843160629272461e-01 7.882353067398071289e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.490196108818054199e-01 6.823529601097106934e-01 1.000000000000000000e+00 -9.450980424880981445e-01 8.862745165824890137e-01 8.000000119209289551e-01 1.000000000000000000e+00 -8.000000119209289551e-01 8.000000119209289551e-01 8.000000119209289551e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/PiYG b/fastplotlib/utils/colormaps/PiYG deleted file mode 100644 index 5e8a656fb..000000000 --- a/fastplotlib/utils/colormaps/PiYG +++ /dev/null @@ -1,256 +0,0 @@ -5.568627715110778809e-01 3.921568859368562698e-03 3.215686380863189697e-01 1.000000000000000000e+00 -5.653210282325744629e-01 7.920030504465103149e-03 3.281814754009246826e-01 1.000000000000000000e+00 -5.737793445587158203e-01 1.191849261522293091e-02 3.347943127155303955e-01 1.000000000000000000e+00 -5.822376012802124023e-01 1.591695472598075867e-02 3.414071500301361084e-01 1.000000000000000000e+00 -5.906958580017089844e-01 1.991541683673858643e-02 3.480199873447418213e-01 1.000000000000000000e+00 -5.991541743278503418e-01 2.391387894749641418e-02 3.546328246593475342e-01 1.000000000000000000e+00 -6.076124310493469238e-01 2.791234105825424194e-02 3.612456619739532471e-01 1.000000000000000000e+00 -6.160707473754882812e-01 3.191080316901206970e-02 3.678585290908813477e-01 1.000000000000000000e+00 -6.245290040969848633e-01 3.590926527976989746e-02 3.744713664054870605e-01 1.000000000000000000e+00 -6.329873204231262207e-01 3.990772739052772522e-02 3.810842037200927734e-01 1.000000000000000000e+00 -6.414455771446228027e-01 4.390618950128555298e-02 3.876970410346984863e-01 1.000000000000000000e+00 -6.499038934707641602e-01 4.790465161204338074e-02 3.943098783493041992e-01 1.000000000000000000e+00 -6.583621501922607422e-01 5.190311372280120850e-02 4.009227156639099121e-01 1.000000000000000000e+00 -6.668204665184020996e-01 5.590157583355903625e-02 4.075355529785156250e-01 1.000000000000000000e+00 -6.752787232398986816e-01 5.990003794431686401e-02 4.141483902931213379e-01 1.000000000000000000e+00 -6.837370395660400391e-01 6.389850378036499023e-02 4.207612574100494385e-01 1.000000000000000000e+00 -6.921952962875366211e-01 6.789696216583251953e-02 4.273740947246551514e-01 1.000000000000000000e+00 -7.006536126136779785e-01 7.189542800188064575e-02 4.339869320392608643e-01 1.000000000000000000e+00 -7.091118693351745605e-01 7.589388638734817505e-02 4.405997693538665771e-01 1.000000000000000000e+00 -7.175701856613159180e-01 7.989235222339630127e-02 4.472126066684722900e-01 1.000000000000000000e+00 -7.260284423828125000e-01 8.389081060886383057e-02 4.538254439830780029e-01 1.000000000000000000e+00 -7.344867587089538574e-01 8.788927644491195679e-02 4.604382812976837158e-01 1.000000000000000000e+00 -7.429450154304504395e-01 9.188773483037948608e-02 4.670511484146118164e-01 1.000000000000000000e+00 -7.514033317565917969e-01 9.588620066642761230e-02 4.736639857292175293e-01 1.000000000000000000e+00 -7.598615884780883789e-01 9.988465905189514160e-02 4.802768230438232422e-01 1.000000000000000000e+00 -7.683199048042297363e-01 1.038831248879432678e-01 4.868896603584289551e-01 1.000000000000000000e+00 -7.744713425636291504e-01 1.129565536975860596e-01 4.939638674259185791e-01 1.000000000000000000e+00 -7.783160209655761719e-01 1.271049529314041138e-01 5.014994144439697266e-01 1.000000000000000000e+00 -7.821606993675231934e-01 1.412533670663833618e-01 5.090349912643432617e-01 1.000000000000000000e+00 -7.860053777694702148e-01 1.554017663002014160e-01 5.165705680847167969e-01 1.000000000000000000e+00 -7.898500561714172363e-01 1.695501804351806641e-01 5.241060853004455566e-01 1.000000000000000000e+00 -7.936947345733642578e-01 1.836985796689987183e-01 5.316416621208190918e-01 1.000000000000000000e+00 -7.975394129753112793e-01 1.978469789028167725e-01 5.391772389411926270e-01 1.000000000000000000e+00 -8.013840913772583008e-01 2.119953930377960205e-01 5.467128157615661621e-01 1.000000000000000000e+00 -8.052287697792053223e-01 2.261437922716140747e-01 5.542483925819396973e-01 1.000000000000000000e+00 -8.090734481811523438e-01 2.402921915054321289e-01 5.617839097976684570e-01 1.000000000000000000e+00 -8.129181265830993652e-01 2.544406056404113770e-01 5.693194866180419922e-01 1.000000000000000000e+00 -8.167628049850463867e-01 2.685889899730682373e-01 5.768550634384155273e-01 1.000000000000000000e+00 -8.206074833869934082e-01 2.827374041080474854e-01 5.843906402587890625e-01 1.000000000000000000e+00 -8.244521617889404297e-01 2.968858182430267334e-01 5.919261574745178223e-01 1.000000000000000000e+00 -8.282967805862426758e-01 3.110342323780059814e-01 5.994617342948913574e-01 1.000000000000000000e+00 -8.321414589881896973e-01 3.251826167106628418e-01 6.069973111152648926e-01 1.000000000000000000e+00 -8.359861373901367188e-01 3.393310308456420898e-01 6.145328879356384277e-01 1.000000000000000000e+00 -8.398308157920837402e-01 3.534794449806213379e-01 6.220684647560119629e-01 1.000000000000000000e+00 -8.436754941940307617e-01 3.676278293132781982e-01 6.296039819717407227e-01 1.000000000000000000e+00 -8.475201725959777832e-01 3.817762434482574463e-01 6.371395587921142578e-01 1.000000000000000000e+00 -8.513648509979248047e-01 3.959246575832366943e-01 6.446751356124877930e-01 1.000000000000000000e+00 -8.552095293998718262e-01 4.100730419158935547e-01 6.522107124328613281e-01 1.000000000000000000e+00 -8.590542078018188477e-01 4.242214560508728027e-01 6.597462296485900879e-01 1.000000000000000000e+00 -8.628988862037658691e-01 4.383698701858520508e-01 6.672818064689636230e-01 1.000000000000000000e+00 -8.667435646057128906e-01 4.525182545185089111e-01 6.748173832893371582e-01 1.000000000000000000e+00 -8.705882430076599121e-01 4.666666686534881592e-01 6.823529601097106934e-01 1.000000000000000000e+00 -8.735101819038391113e-01 4.763552546501159668e-01 6.891195774078369141e-01 1.000000000000000000e+00 -8.764321208000183105e-01 4.860438406467437744e-01 6.958861947059631348e-01 1.000000000000000000e+00 -8.793541193008422852e-01 4.957323968410491943e-01 7.026528120040893555e-01 1.000000000000000000e+00 -8.822760581970214844e-01 5.054209828376770020e-01 7.094194293022155762e-01 1.000000000000000000e+00 -8.851979970932006836e-01 5.151095986366271973e-01 7.161861062049865723e-01 1.000000000000000000e+00 -8.881199359893798828e-01 5.247981548309326172e-01 7.229527235031127930e-01 1.000000000000000000e+00 -8.910419344902038574e-01 5.344867110252380371e-01 7.297193408012390137e-01 1.000000000000000000e+00 -8.939638733863830566e-01 5.441753268241882324e-01 7.364859580993652344e-01 1.000000000000000000e+00 -8.968858122825622559e-01 5.538638830184936523e-01 7.432525753974914551e-01 1.000000000000000000e+00 -8.998077511787414551e-01 5.635524988174438477e-01 7.500192523002624512e-01 1.000000000000000000e+00 -9.027296900749206543e-01 5.732410550117492676e-01 7.567858695983886719e-01 1.000000000000000000e+00 -9.056516885757446289e-01 5.829296708106994629e-01 7.635524868965148926e-01 1.000000000000000000e+00 -9.085736274719238281e-01 5.926182270050048828e-01 7.703191041946411133e-01 1.000000000000000000e+00 -9.114955663681030273e-01 6.023067831993103027e-01 7.770857214927673340e-01 1.000000000000000000e+00 -9.144175052642822266e-01 6.119953989982604980e-01 7.838523387908935547e-01 1.000000000000000000e+00 -9.173395037651062012e-01 6.216839551925659180e-01 7.906190156936645508e-01 1.000000000000000000e+00 -9.202614426612854004e-01 6.313725709915161133e-01 7.973856329917907715e-01 1.000000000000000000e+00 -9.231833815574645996e-01 6.410611271858215332e-01 8.041522502899169922e-01 1.000000000000000000e+00 -9.261053204536437988e-01 6.507496833801269531e-01 8.109188675880432129e-01 1.000000000000000000e+00 -9.290273189544677734e-01 6.604382991790771484e-01 8.176854848861694336e-01 1.000000000000000000e+00 -9.319492578506469727e-01 6.701268553733825684e-01 8.244521617889404297e-01 1.000000000000000000e+00 -9.348711967468261719e-01 6.798154711723327637e-01 8.312187790870666504e-01 1.000000000000000000e+00 -9.377931356430053711e-01 6.895040273666381836e-01 8.379853963851928711e-01 1.000000000000000000e+00 -9.407151341438293457e-01 6.991926431655883789e-01 8.447520136833190918e-01 1.000000000000000000e+00 -9.436370730400085449e-01 7.088811993598937988e-01 8.515186309814453125e-01 1.000000000000000000e+00 -9.460207819938659668e-01 7.169550061225891113e-01 8.565167188644409180e-01 1.000000000000000000e+00 -9.478662014007568359e-01 7.234140634536743164e-01 8.597462773323059082e-01 1.000000000000000000e+00 -9.497116208076477051e-01 7.298731207847595215e-01 8.629757761955261230e-01 1.000000000000000000e+00 -9.515570998191833496e-01 7.363321781158447266e-01 8.662053346633911133e-01 1.000000000000000000e+00 -9.534025192260742188e-01 7.427912354469299316e-01 8.694348335266113281e-01 1.000000000000000000e+00 -9.552479982376098633e-01 7.492502927780151367e-01 8.726643323898315430e-01 1.000000000000000000e+00 -9.570934176445007324e-01 7.557093501091003418e-01 8.758938908576965332e-01 1.000000000000000000e+00 -9.589388966560363770e-01 7.621684074401855469e-01 8.791233897209167480e-01 1.000000000000000000e+00 -9.607843160629272461e-01 7.686274647712707520e-01 8.823529481887817383e-01 1.000000000000000000e+00 -9.626297354698181152e-01 7.750865221023559570e-01 8.855824470520019531e-01 1.000000000000000000e+00 -9.644752144813537598e-01 7.815455794334411621e-01 8.888120055198669434e-01 1.000000000000000000e+00 -9.663206338882446289e-01 7.880046367645263672e-01 8.920415043830871582e-01 1.000000000000000000e+00 -9.681661128997802734e-01 7.944636940956115723e-01 8.952710628509521484e-01 1.000000000000000000e+00 -9.700115323066711426e-01 8.009227514266967773e-01 8.985005617141723633e-01 1.000000000000000000e+00 -9.718569517135620117e-01 8.073817491531372070e-01 9.017301201820373535e-01 1.000000000000000000e+00 -9.737024307250976562e-01 8.138408064842224121e-01 9.049596190452575684e-01 1.000000000000000000e+00 -9.755478501319885254e-01 8.202998638153076172e-01 9.081891775131225586e-01 1.000000000000000000e+00 -9.773933291435241699e-01 8.267589211463928223e-01 9.114186763763427734e-01 1.000000000000000000e+00 -9.792387485504150391e-01 8.332179784774780273e-01 9.146482348442077637e-01 1.000000000000000000e+00 -9.810842275619506836e-01 8.396770358085632324e-01 9.178777337074279785e-01 1.000000000000000000e+00 -9.829296469688415527e-01 8.461360931396484375e-01 9.211072921752929688e-01 1.000000000000000000e+00 -9.847750663757324219e-01 8.525951504707336426e-01 9.243367910385131836e-01 1.000000000000000000e+00 -9.866205453872680664e-01 8.590542078018188477e-01 9.275663495063781738e-01 1.000000000000000000e+00 -9.884659647941589355e-01 8.655132651329040527e-01 9.307958483695983887e-01 1.000000000000000000e+00 -9.903114438056945801e-01 8.719723224639892578e-01 9.340253472328186035e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.784313797950744629e-01 9.372549057006835938e-01 1.000000000000000000e+00 -9.912341237068176270e-01 8.819684982299804688e-01 9.384852051734924316e-01 1.000000000000000000e+00 -9.903114438056945801e-01 8.855055570602416992e-01 9.397155046463012695e-01 1.000000000000000000e+00 -9.893887042999267578e-01 8.890426754951477051e-01 9.409458041191101074e-01 1.000000000000000000e+00 -9.884659647941589355e-01 8.925797939300537109e-01 9.421761035919189453e-01 1.000000000000000000e+00 -9.875432252883911133e-01 8.961168527603149414e-01 9.434064030647277832e-01 1.000000000000000000e+00 -9.866205453872680664e-01 8.996539711952209473e-01 9.446367025375366211e-01 1.000000000000000000e+00 -9.856978058815002441e-01 9.031910896301269531e-01 9.458670020103454590e-01 1.000000000000000000e+00 -9.847750663757324219e-01 9.067282080650329590e-01 9.470972418785095215e-01 1.000000000000000000e+00 -9.838523864746093750e-01 9.102652668952941895e-01 9.483275413513183594e-01 1.000000000000000000e+00 -9.829296469688415527e-01 9.138023853302001953e-01 9.495578408241271973e-01 1.000000000000000000e+00 -9.820069074630737305e-01 9.173395037651062012e-01 9.507881402969360352e-01 1.000000000000000000e+00 -9.810842275619506836e-01 9.208765625953674316e-01 9.520184397697448730e-01 1.000000000000000000e+00 -9.801614880561828613e-01 9.244136810302734375e-01 9.532487392425537109e-01 1.000000000000000000e+00 -9.792387485504150391e-01 9.279507994651794434e-01 9.544790387153625488e-01 1.000000000000000000e+00 -9.783160090446472168e-01 9.314879179000854492e-01 9.557093381881713867e-01 1.000000000000000000e+00 -9.773933291435241699e-01 9.350249767303466797e-01 9.569396376609802246e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.385620951652526855e-01 9.581699371337890625e-01 1.000000000000000000e+00 -9.755478501319885254e-01 9.420992136001586914e-01 9.594002366065979004e-01 1.000000000000000000e+00 -9.746251702308654785e-01 9.456362724304199219e-01 9.606305360794067383e-01 1.000000000000000000e+00 -9.737024307250976562e-01 9.491733908653259277e-01 9.618608355522155762e-01 1.000000000000000000e+00 -9.727796912193298340e-01 9.527105093002319336e-01 9.630911350250244141e-01 1.000000000000000000e+00 -9.718569517135620117e-01 9.562475681304931641e-01 9.643214344978332520e-01 1.000000000000000000e+00 -9.709342718124389648e-01 9.597846865653991699e-01 9.655517339706420898e-01 1.000000000000000000e+00 -9.700115323066711426e-01 9.633218050003051758e-01 9.667820334434509277e-01 1.000000000000000000e+00 -9.690887928009033203e-01 9.668589234352111816e-01 9.680122733116149902e-01 1.000000000000000000e+00 -9.673202633857727051e-01 9.684736728668212891e-01 9.656286239624023438e-01 1.000000000000000000e+00 -9.647058844566345215e-01 9.681661128997802734e-01 9.596309065818786621e-01 1.000000000000000000e+00 -9.620915055274963379e-01 9.678584933280944824e-01 9.536331892013549805e-01 1.000000000000000000e+00 -9.594771265983581543e-01 9.675509333610534668e-01 9.476355314254760742e-01 1.000000000000000000e+00 -9.568627476692199707e-01 9.672433733940124512e-01 9.416378140449523926e-01 1.000000000000000000e+00 -9.542483687400817871e-01 9.669358134269714355e-01 9.356401562690734863e-01 1.000000000000000000e+00 -9.516339898109436035e-01 9.666281938552856445e-01 9.296424388885498047e-01 1.000000000000000000e+00 -9.490196108818054199e-01 9.663206338882446289e-01 9.236447811126708984e-01 1.000000000000000000e+00 -9.464052319526672363e-01 9.660130739212036133e-01 9.176470637321472168e-01 1.000000000000000000e+00 -9.437908530235290527e-01 9.657055139541625977e-01 9.116493463516235352e-01 1.000000000000000000e+00 -9.411764740943908691e-01 9.653978943824768066e-01 9.056516885757446289e-01 1.000000000000000000e+00 -9.385620951652526855e-01 9.650903344154357910e-01 8.996539711952209473e-01 1.000000000000000000e+00 -9.359477162361145020e-01 9.647827744483947754e-01 8.936563134193420410e-01 1.000000000000000000e+00 -9.333333373069763184e-01 9.644752144813537598e-01 8.876585960388183594e-01 1.000000000000000000e+00 -9.307189583778381348e-01 9.641676545143127441e-01 8.816608786582946777e-01 1.000000000000000000e+00 -9.281045794486999512e-01 9.638600349426269531e-01 8.756632208824157715e-01 1.000000000000000000e+00 -9.254902005195617676e-01 9.635524749755859375e-01 8.696655035018920898e-01 1.000000000000000000e+00 -9.228758215904235840e-01 9.632449150085449219e-01 8.636678457260131836e-01 1.000000000000000000e+00 -9.202614426612854004e-01 9.629373550415039062e-01 8.576701283454895020e-01 1.000000000000000000e+00 -9.176470637321472168e-01 9.626297354698181152e-01 8.516724109649658203e-01 1.000000000000000000e+00 -9.150326848030090332e-01 9.623221755027770996e-01 8.456747531890869141e-01 1.000000000000000000e+00 -9.124183058738708496e-01 9.620146155357360840e-01 8.396770358085632324e-01 1.000000000000000000e+00 -9.098039269447326660e-01 9.617070555686950684e-01 8.336793780326843262e-01 1.000000000000000000e+00 -9.071895480155944824e-01 9.613994359970092773e-01 8.276816606521606445e-01 1.000000000000000000e+00 -9.045751690864562988e-01 9.610918760299682617e-01 8.216839432716369629e-01 1.000000000000000000e+00 -9.019607901573181152e-01 9.607843160629272461e-01 8.156862854957580566e-01 1.000000000000000000e+00 -8.948865532875061035e-01 9.577085971832275391e-01 8.043060302734375000e-01 1.000000000000000000e+00 -8.878123760223388672e-01 9.546328186988830566e-01 7.929257750511169434e-01 1.000000000000000000e+00 -8.807381987571716309e-01 9.515570998191833496e-01 7.815455794334411621e-01 1.000000000000000000e+00 -8.736639618873596191e-01 9.484813809394836426e-01 7.701653242111206055e-01 1.000000000000000000e+00 -8.665897846221923828e-01 9.454056024551391602e-01 7.587850689888000488e-01 1.000000000000000000e+00 -8.595155477523803711e-01 9.423298835754394531e-01 7.474048733711242676e-01 1.000000000000000000e+00 -8.524413704872131348e-01 9.392541050910949707e-01 7.360246181488037109e-01 1.000000000000000000e+00 -8.453671932220458984e-01 9.361783862113952637e-01 7.246443629264831543e-01 1.000000000000000000e+00 -8.382929563522338867e-01 9.331026673316955566e-01 7.132641077041625977e-01 1.000000000000000000e+00 -8.312187790870666504e-01 9.300268888473510742e-01 7.018839120864868164e-01 1.000000000000000000e+00 -8.241445422172546387e-01 9.269511699676513672e-01 6.905036568641662598e-01 1.000000000000000000e+00 -8.170703649520874023e-01 9.238754510879516602e-01 6.791234016418457031e-01 1.000000000000000000e+00 -8.099961280822753906e-01 9.207996726036071777e-01 6.677431464195251465e-01 1.000000000000000000e+00 -8.029219508171081543e-01 9.177239537239074707e-01 6.563629508018493652e-01 1.000000000000000000e+00 -7.958477735519409180e-01 9.146482348442077637e-01 6.449826955795288086e-01 1.000000000000000000e+00 -7.887735366821289062e-01 9.115724563598632812e-01 6.336024403572082520e-01 1.000000000000000000e+00 -7.816993594169616699e-01 9.084967374801635742e-01 6.222222447395324707e-01 1.000000000000000000e+00 -7.746251225471496582e-01 9.054210186004638672e-01 6.108419895172119141e-01 1.000000000000000000e+00 -7.675509452819824219e-01 9.023452401161193848e-01 5.994617342948913574e-01 1.000000000000000000e+00 -7.604767680168151855e-01 8.992695212364196777e-01 5.880814790725708008e-01 1.000000000000000000e+00 -7.534025311470031738e-01 8.961937427520751953e-01 5.767012834548950195e-01 1.000000000000000000e+00 -7.463283538818359375e-01 8.931180238723754883e-01 5.653210282325744629e-01 1.000000000000000000e+00 -7.392541170120239258e-01 8.900423049926757812e-01 5.539407730102539062e-01 1.000000000000000000e+00 -7.321799397468566895e-01 8.869665265083312988e-01 5.425605773925781250e-01 1.000000000000000000e+00 -7.251057028770446777e-01 8.838908076286315918e-01 5.311803221702575684e-01 1.000000000000000000e+00 -7.171856760978698730e-01 8.795078992843627930e-01 5.201845169067382812e-01 1.000000000000000000e+00 -7.084198594093322754e-01 8.738177418708801270e-01 5.095732212066650391e-01 1.000000000000000000e+00 -6.996539831161499023e-01 8.681276440620422363e-01 4.989619255065917969e-01 1.000000000000000000e+00 -6.908881068229675293e-01 8.624375462532043457e-01 4.883506298065185547e-01 1.000000000000000000e+00 -6.821222901344299316e-01 8.567473888397216797e-01 4.777393341064453125e-01 1.000000000000000000e+00 -6.733564138412475586e-01 8.510572910308837891e-01 4.671280384063720703e-01 1.000000000000000000e+00 -6.645905375480651855e-01 8.453671932220458984e-01 4.565167129039764404e-01 1.000000000000000000e+00 -6.558246612548828125e-01 8.396770358085632324e-01 4.459054172039031982e-01 1.000000000000000000e+00 -6.470588445663452148e-01 8.339869379997253418e-01 4.352941215038299561e-01 1.000000000000000000e+00 -6.382929682731628418e-01 8.282967805862426758e-01 4.246828258037567139e-01 1.000000000000000000e+00 -6.295270919799804688e-01 8.226066827774047852e-01 4.140715003013610840e-01 1.000000000000000000e+00 -6.207612752914428711e-01 8.169165849685668945e-01 4.034602046012878418e-01 1.000000000000000000e+00 -6.119953989982604980e-01 8.112264275550842285e-01 3.928489089012145996e-01 1.000000000000000000e+00 -6.032295227050781250e-01 8.055363297462463379e-01 3.822376132011413574e-01 1.000000000000000000e+00 -5.944636464118957520e-01 7.998462319374084473e-01 3.716262876987457275e-01 1.000000000000000000e+00 -5.856978297233581543e-01 7.941560745239257812e-01 3.610149919986724854e-01 1.000000000000000000e+00 -5.769319534301757812e-01 7.884659767150878906e-01 3.504036962985992432e-01 1.000000000000000000e+00 -5.681660771369934082e-01 7.827758789062500000e-01 3.397924005985260010e-01 1.000000000000000000e+00 -5.594002604484558105e-01 7.770857214927673340e-01 3.291810750961303711e-01 1.000000000000000000e+00 -5.506343841552734375e-01 7.713956236839294434e-01 3.185697793960571289e-01 1.000000000000000000e+00 -5.418685078620910645e-01 7.657055258750915527e-01 3.079584836959838867e-01 1.000000000000000000e+00 -5.331026315689086914e-01 7.600153684616088867e-01 2.973471879959106445e-01 1.000000000000000000e+00 -5.243368148803710938e-01 7.543252706527709961e-01 2.867358624935150146e-01 1.000000000000000000e+00 -5.155709385871887207e-01 7.486351132392883301e-01 2.761245667934417725e-01 1.000000000000000000e+00 -5.068050622940063477e-01 7.429450154304504395e-01 2.655132710933685303e-01 1.000000000000000000e+00 -4.980392158031463623e-01 7.372549176216125488e-01 2.549019753932952881e-01 1.000000000000000000e+00 -4.903498589992523193e-01 7.307958602905273438e-01 2.499807775020599365e-01 1.000000000000000000e+00 -4.826605021953582764e-01 7.243368029594421387e-01 2.450595945119857788e-01 1.000000000000000000e+00 -4.749711751937866211e-01 7.178777456283569336e-01 2.401384115219116211e-01 1.000000000000000000e+00 -4.672818183898925781e-01 7.114186882972717285e-01 2.352172285318374634e-01 1.000000000000000000e+00 -4.595924615859985352e-01 7.049596309661865234e-01 2.302960455417633057e-01 1.000000000000000000e+00 -4.519031047821044922e-01 6.985005736351013184e-01 2.253748625516891479e-01 1.000000000000000000e+00 -4.442137777805328369e-01 6.920415163040161133e-01 2.204536646604537964e-01 1.000000000000000000e+00 -4.365244209766387939e-01 6.855824589729309082e-01 2.155324816703796387e-01 1.000000000000000000e+00 -4.288350641727447510e-01 6.791234016418457031e-01 2.106112986803054810e-01 1.000000000000000000e+00 -4.211457073688507080e-01 6.726643443107604980e-01 2.056901156902313232e-01 1.000000000000000000e+00 -4.134563505649566650e-01 6.662052869796752930e-01 2.007689327001571655e-01 1.000000000000000000e+00 -4.057670235633850098e-01 6.597462296485900879e-01 1.958477497100830078e-01 1.000000000000000000e+00 -3.980776667594909668e-01 6.532871723175048828e-01 1.909265667200088501e-01 1.000000000000000000e+00 -3.903883099555969238e-01 6.468281149864196777e-01 1.860053837299346924e-01 1.000000000000000000e+00 -3.826989531517028809e-01 6.403691172599792480e-01 1.810842007398605347e-01 1.000000000000000000e+00 -3.750096261501312256e-01 6.339100599288940430e-01 1.761630177497863770e-01 1.000000000000000000e+00 -3.673202693462371826e-01 6.274510025978088379e-01 1.712418347597122192e-01 1.000000000000000000e+00 -3.596309125423431396e-01 6.209919452667236328e-01 1.663206517696380615e-01 1.000000000000000000e+00 -3.519415557384490967e-01 6.145328879356384277e-01 1.613994687795639038e-01 1.000000000000000000e+00 -3.442521989345550537e-01 6.080738306045532227e-01 1.564782708883285522e-01 1.000000000000000000e+00 -3.365628719329833984e-01 6.016147732734680176e-01 1.515570878982543945e-01 1.000000000000000000e+00 -3.288735151290893555e-01 5.951557159423828125e-01 1.466359049081802368e-01 1.000000000000000000e+00 -3.211841583251953125e-01 5.886966586112976074e-01 1.417147219181060791e-01 1.000000000000000000e+00 -3.134948015213012695e-01 5.822376012802124023e-01 1.367935389280319214e-01 1.000000000000000000e+00 -3.058054447174072266e-01 5.757785439491271973e-01 1.318723559379577637e-01 1.000000000000000000e+00 -2.990388274192810059e-01 5.690119266510009766e-01 1.287966221570968628e-01 1.000000000000000000e+00 -2.931949198246002197e-01 5.619376897811889648e-01 1.275663226842880249e-01 1.000000000000000000e+00 -2.873510122299194336e-01 5.548635125160217285e-01 1.263360232114791870e-01 1.000000000000000000e+00 -2.815071046352386475e-01 5.477893352508544922e-01 1.251057237386703491e-01 1.000000000000000000e+00 -2.756631970405578613e-01 5.407150983810424805e-01 1.238754317164421082e-01 1.000000000000000000e+00 -2.698192894458770752e-01 5.336409211158752441e-01 1.226451396942138672e-01 1.000000000000000000e+00 -2.639753818511962891e-01 5.265666842460632324e-01 1.214148402214050293e-01 1.000000000000000000e+00 -2.581314742565155029e-01 5.194925069808959961e-01 1.201845407485961914e-01 1.000000000000000000e+00 -2.522875964641571045e-01 5.124183297157287598e-01 1.189542487263679504e-01 1.000000000000000000e+00 -2.464436739683151245e-01 5.053440928459167480e-01 1.177239492535591125e-01 1.000000000000000000e+00 -2.405997663736343384e-01 4.982698857784271240e-01 1.164936572313308716e-01 1.000000000000000000e+00 -2.347558587789535522e-01 4.911957085132598877e-01 1.152633577585220337e-01 1.000000000000000000e+00 -2.289119511842727661e-01 4.841215014457702637e-01 1.140330657362937927e-01 1.000000000000000000e+00 -2.230680435895919800e-01 4.770472943782806396e-01 1.128027662634849548e-01 1.000000000000000000e+00 -2.172241508960723877e-01 4.699730873107910156e-01 1.115724742412567139e-01 1.000000000000000000e+00 -2.113802433013916016e-01 4.628988802433013916e-01 1.103421747684478760e-01 1.000000000000000000e+00 -2.055363357067108154e-01 4.558246731758117676e-01 1.091118827462196350e-01 1.000000000000000000e+00 -1.996924281120300293e-01 4.487504661083221436e-01 1.078815832734107971e-01 1.000000000000000000e+00 -1.938485205173492432e-01 4.416762888431549072e-01 1.066512912511825562e-01 1.000000000000000000e+00 -1.880046129226684570e-01 4.346020817756652832e-01 1.054209917783737183e-01 1.000000000000000000e+00 -1.821607053279876709e-01 4.275278747081756592e-01 1.041906923055648804e-01 1.000000000000000000e+00 -1.763167977333068848e-01 4.204536676406860352e-01 1.029604002833366394e-01 1.000000000000000000e+00 -1.704728901386260986e-01 4.133794605731964111e-01 1.017301008105278015e-01 1.000000000000000000e+00 -1.646289825439453125e-01 4.063052535057067871e-01 1.004998087882995605e-01 1.000000000000000000e+00 -1.587850898504257202e-01 3.992310762405395508e-01 9.926950931549072266e-02 1.000000000000000000e+00 -1.529411822557449341e-01 3.921568691730499268e-01 9.803921729326248169e-02 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/PuBu b/fastplotlib/utils/colormaps/PuBu deleted file mode 100644 index 92c3dd7e9..000000000 --- a/fastplotlib/utils/colormaps/PuBu +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 9.686274528503417969e-01 9.843137264251708984e-01 1.000000000000000000e+00 -9.976624250411987305e-01 9.666589498519897461e-01 9.832064509391784668e-01 1.000000000000000000e+00 -9.953248500823974609e-01 9.646905064582824707e-01 9.820991754531860352e-01 1.000000000000000000e+00 -9.929873347282409668e-01 9.627220034599304199e-01 9.809918999671936035e-01 1.000000000000000000e+00 -9.906497597694396973e-01 9.607535600662231445e-01 9.798846840858459473e-01 1.000000000000000000e+00 -9.883121848106384277e-01 9.587850570678710938e-01 9.787774085998535156e-01 1.000000000000000000e+00 -9.859746098518371582e-01 9.568166136741638184e-01 9.776701331138610840e-01 1.000000000000000000e+00 -9.836370348930358887e-01 9.548481106758117676e-01 9.765628576278686523e-01 1.000000000000000000e+00 -9.812995195388793945e-01 9.528796672821044922e-01 9.754555821418762207e-01 1.000000000000000000e+00 -9.789619445800781250e-01 9.509111642837524414e-01 9.743483066558837891e-01 1.000000000000000000e+00 -9.766243696212768555e-01 9.489427208900451660e-01 9.732410907745361328e-01 1.000000000000000000e+00 -9.742867946624755859e-01 9.469742178916931152e-01 9.721338152885437012e-01 1.000000000000000000e+00 -9.719492793083190918e-01 9.450057744979858398e-01 9.710265398025512695e-01 1.000000000000000000e+00 -9.696117043495178223e-01 9.430372714996337891e-01 9.699192643165588379e-01 1.000000000000000000e+00 -9.672741293907165527e-01 9.410688281059265137e-01 9.688119888305664062e-01 1.000000000000000000e+00 -9.649365544319152832e-01 9.391003251075744629e-01 9.677047133445739746e-01 1.000000000000000000e+00 -9.625989794731140137e-01 9.371318817138671875e-01 9.665974378585815430e-01 1.000000000000000000e+00 -9.602614641189575195e-01 9.351633787155151367e-01 9.654902219772338867e-01 1.000000000000000000e+00 -9.579238891601562500e-01 9.331949353218078613e-01 9.643829464912414551e-01 1.000000000000000000e+00 -9.555863142013549805e-01 9.312264323234558105e-01 9.632756710052490234e-01 1.000000000000000000e+00 -9.532487392425537109e-01 9.292579889297485352e-01 9.621683955192565918e-01 1.000000000000000000e+00 -9.509111642837524414e-01 9.272894859313964844e-01 9.610611200332641602e-01 1.000000000000000000e+00 -9.485736489295959473e-01 9.253210425376892090e-01 9.599538445472717285e-01 1.000000000000000000e+00 -9.462360739707946777e-01 9.233525395393371582e-01 9.588465690612792969e-01 1.000000000000000000e+00 -9.438984990119934082e-01 9.213840961456298828e-01 9.577393531799316406e-01 1.000000000000000000e+00 -9.415609240531921387e-01 9.194155931472778320e-01 9.566320776939392090e-01 1.000000000000000000e+00 -9.392233490943908691e-01 9.174471497535705566e-01 9.555248022079467773e-01 1.000000000000000000e+00 -9.368858337402343750e-01 9.154786467552185059e-01 9.544175267219543457e-01 1.000000000000000000e+00 -9.345482587814331055e-01 9.135102033615112305e-01 9.533102512359619141e-01 1.000000000000000000e+00 -9.322106838226318359e-01 9.115417003631591797e-01 9.522029757499694824e-01 1.000000000000000000e+00 -9.298731088638305664e-01 9.095732569694519043e-01 9.510957598686218262e-01 1.000000000000000000e+00 -9.275355339050292969e-01 9.076047539710998535e-01 9.499884843826293945e-01 1.000000000000000000e+00 -9.250596165657043457e-01 9.055440425872802734e-01 9.488350749015808105e-01 1.000000000000000000e+00 -9.216147661209106445e-01 9.028373956680297852e-01 9.473587274551391602e-01 1.000000000000000000e+00 -9.181699156761169434e-01 9.001307487487792969e-01 9.458823800086975098e-01 1.000000000000000000e+00 -9.147251248359680176e-01 8.974240422248840332e-01 9.444059729576110840e-01 1.000000000000000000e+00 -9.112802743911743164e-01 8.947173953056335449e-01 9.429296255111694336e-01 1.000000000000000000e+00 -9.078354239463806152e-01 8.920107483863830566e-01 9.414532780647277832e-01 1.000000000000000000e+00 -9.043906331062316895e-01 8.893041014671325684e-01 9.399769306182861328e-01 1.000000000000000000e+00 -9.009457826614379883e-01 8.865974545478820801e-01 9.385005831718444824e-01 1.000000000000000000e+00 -8.975009322166442871e-01 8.838908076286315918e-01 9.370242357254028320e-01 1.000000000000000000e+00 -8.940561413764953613e-01 8.811841607093811035e-01 9.355478882789611816e-01 1.000000000000000000e+00 -8.906112909317016602e-01 8.784775137901306152e-01 9.340714812278747559e-01 1.000000000000000000e+00 -8.871665000915527344e-01 8.757708668708801270e-01 9.325951337814331055e-01 1.000000000000000000e+00 -8.837216496467590332e-01 8.730642199516296387e-01 9.311187863349914551e-01 1.000000000000000000e+00 -8.802767992019653320e-01 8.703575730323791504e-01 9.296424388885498047e-01 1.000000000000000000e+00 -8.768320083618164062e-01 8.676509261131286621e-01 9.281660914421081543e-01 1.000000000000000000e+00 -8.733871579170227051e-01 8.649442791938781738e-01 9.266897439956665039e-01 1.000000000000000000e+00 -8.699423074722290039e-01 8.622375726699829102e-01 9.252133965492248535e-01 1.000000000000000000e+00 -8.664975166320800781e-01 8.595309257507324219e-01 9.237370491027832031e-01 1.000000000000000000e+00 -8.630526661872863770e-01 8.568242788314819336e-01 9.222606420516967773e-01 1.000000000000000000e+00 -8.596078157424926758e-01 8.541176319122314453e-01 9.207842946052551270e-01 1.000000000000000000e+00 -8.561630249023437500e-01 8.514109849929809570e-01 9.193079471588134766e-01 1.000000000000000000e+00 -8.527181744575500488e-01 8.487043380737304688e-01 9.178315997123718262e-01 1.000000000000000000e+00 -8.492733836174011230e-01 8.459976911544799805e-01 9.163552522659301758e-01 1.000000000000000000e+00 -8.458285331726074219e-01 8.432910442352294922e-01 9.148789048194885254e-01 1.000000000000000000e+00 -8.423836827278137207e-01 8.405843973159790039e-01 9.134025573730468750e-01 1.000000000000000000e+00 -8.389388918876647949e-01 8.378777503967285156e-01 9.119262099266052246e-01 1.000000000000000000e+00 -8.354940414428710938e-01 8.351711034774780273e-01 9.104498028755187988e-01 1.000000000000000000e+00 -8.320491909980773926e-01 8.324644565582275391e-01 9.089734554290771484e-01 1.000000000000000000e+00 -8.286044001579284668e-01 8.297578096389770508e-01 9.074971079826354980e-01 1.000000000000000000e+00 -8.251595497131347656e-01 8.270511627197265625e-01 9.060207605361938477e-01 1.000000000000000000e+00 -8.217146992683410645e-01 8.243444561958312988e-01 9.045444130897521973e-01 1.000000000000000000e+00 -8.182699084281921387e-01 8.216378092765808105e-01 9.030680656433105469e-01 1.000000000000000000e+00 -8.143944740295410156e-01 8.189926743507385254e-01 9.016224741935729980e-01 1.000000000000000000e+00 -8.092272281646728516e-01 8.165320754051208496e-01 9.002691507339477539e-01 1.000000000000000000e+00 -8.040599822998046875e-01 8.140715360641479492e-01 8.989158272743225098e-01 1.000000000000000000e+00 -7.988927364349365234e-01 8.116109371185302734e-01 8.975625038146972656e-01 1.000000000000000000e+00 -7.937254905700683594e-01 8.091503381729125977e-01 8.962091207504272461e-01 1.000000000000000000e+00 -7.885582447052001953e-01 8.066897392272949219e-01 8.948557972908020020e-01 1.000000000000000000e+00 -7.833909988403320312e-01 8.042291402816772461e-01 8.935024738311767578e-01 1.000000000000000000e+00 -7.782237529754638672e-01 8.017685413360595703e-01 8.921491503715515137e-01 1.000000000000000000e+00 -7.730565071105957031e-01 7.993079423904418945e-01 8.907958269119262695e-01 1.000000000000000000e+00 -7.678892612457275391e-01 7.968473434448242188e-01 8.894425034523010254e-01 1.000000000000000000e+00 -7.627220153808593750e-01 7.943868041038513184e-01 8.880891799926757812e-01 1.000000000000000000e+00 -7.575547695159912109e-01 7.919262051582336426e-01 8.867358565330505371e-01 1.000000000000000000e+00 -7.523875236511230469e-01 7.894656062126159668e-01 8.853825330734252930e-01 1.000000000000000000e+00 -7.472202777862548828e-01 7.870050072669982910e-01 8.840292096138000488e-01 1.000000000000000000e+00 -7.420530319213867188e-01 7.845444083213806152e-01 8.826758861541748047e-01 1.000000000000000000e+00 -7.368857860565185547e-01 7.820838093757629395e-01 8.813225626945495605e-01 1.000000000000000000e+00 -7.317185401916503906e-01 7.796232104301452637e-01 8.799692392349243164e-01 1.000000000000000000e+00 -7.265513539314270020e-01 7.771626114845275879e-01 8.786159157752990723e-01 1.000000000000000000e+00 -7.213841080665588379e-01 7.747020125389099121e-01 8.772625923156738281e-01 1.000000000000000000e+00 -7.162168622016906738e-01 7.722414731979370117e-01 8.759092688560485840e-01 1.000000000000000000e+00 -7.110496163368225098e-01 7.697808742523193359e-01 8.745559453964233398e-01 1.000000000000000000e+00 -7.058823704719543457e-01 7.673202753067016602e-01 8.732026219367980957e-01 1.000000000000000000e+00 -7.007151246070861816e-01 7.648596763610839844e-01 8.718492984771728516e-01 1.000000000000000000e+00 -6.955478787422180176e-01 7.623990774154663086e-01 8.704959750175476074e-01 1.000000000000000000e+00 -6.903806328773498535e-01 7.599384784698486328e-01 8.691426515579223633e-01 1.000000000000000000e+00 -6.852133870124816895e-01 7.574778795242309570e-01 8.677893280982971191e-01 1.000000000000000000e+00 -6.800461411476135254e-01 7.550172805786132812e-01 8.664360046386718750e-01 1.000000000000000000e+00 -6.748788952827453613e-01 7.525566816329956055e-01 8.650826811790466309e-01 1.000000000000000000e+00 -6.697116494178771973e-01 7.500961422920227051e-01 8.637293577194213867e-01 1.000000000000000000e+00 -6.645444035530090332e-01 7.476355433464050293e-01 8.623760342597961426e-01 1.000000000000000000e+00 -6.593771576881408691e-01 7.451749444007873535e-01 8.610227108001708984e-01 1.000000000000000000e+00 -6.542099118232727051e-01 7.427143454551696777e-01 8.596693873405456543e-01 1.000000000000000000e+00 -6.486735939979553223e-01 7.402537465095520020e-01 8.582698702812194824e-01 1.000000000000000000e+00 -6.425220966339111328e-01 7.377931475639343262e-01 8.567935228347778320e-01 1.000000000000000000e+00 -6.363705992698669434e-01 7.353325486183166504e-01 8.553171753883361816e-01 1.000000000000000000e+00 -6.302191615104675293e-01 7.328719496726989746e-01 8.538408279418945312e-01 1.000000000000000000e+00 -6.240676641464233398e-01 7.304113507270812988e-01 8.523644804954528809e-01 1.000000000000000000e+00 -6.179161667823791504e-01 7.279508113861083984e-01 8.508881330490112305e-01 1.000000000000000000e+00 -6.117647290229797363e-01 7.254902124404907227e-01 8.494117856025695801e-01 1.000000000000000000e+00 -6.056132316589355469e-01 7.230296134948730469e-01 8.479354381561279297e-01 1.000000000000000000e+00 -5.994617342948913574e-01 7.205690145492553711e-01 8.464590311050415039e-01 1.000000000000000000e+00 -5.933102369308471680e-01 7.181084156036376953e-01 8.449826836585998535e-01 1.000000000000000000e+00 -5.871587991714477539e-01 7.156478166580200195e-01 8.435063362121582031e-01 1.000000000000000000e+00 -5.810073018074035645e-01 7.131872177124023438e-01 8.420299887657165527e-01 1.000000000000000000e+00 -5.748558044433593750e-01 7.107266187667846680e-01 8.405536413192749023e-01 1.000000000000000000e+00 -5.687043666839599609e-01 7.082660794258117676e-01 8.390772938728332520e-01 1.000000000000000000e+00 -5.625528693199157715e-01 7.058054804801940918e-01 8.376009464263916016e-01 1.000000000000000000e+00 -5.564013719558715820e-01 7.033448815345764160e-01 8.361245393753051758e-01 1.000000000000000000e+00 -5.502498745918273926e-01 7.008842825889587402e-01 8.346481919288635254e-01 1.000000000000000000e+00 -5.440984368324279785e-01 6.984236836433410645e-01 8.331718444824218750e-01 1.000000000000000000e+00 -5.379469394683837891e-01 6.959630846977233887e-01 8.316954970359802246e-01 1.000000000000000000e+00 -5.317954421043395996e-01 6.935024857521057129e-01 8.302191495895385742e-01 1.000000000000000000e+00 -5.256440043449401855e-01 6.910418868064880371e-01 8.287428021430969238e-01 1.000000000000000000e+00 -5.194925069808959961e-01 6.885812878608703613e-01 8.272664546966552734e-01 1.000000000000000000e+00 -5.133410096168518066e-01 6.861207485198974609e-01 8.257901072502136230e-01 1.000000000000000000e+00 -5.071895718574523926e-01 6.836601495742797852e-01 8.243137001991271973e-01 1.000000000000000000e+00 -5.010380744934082031e-01 6.811995506286621094e-01 8.228373527526855469e-01 1.000000000000000000e+00 -4.948865771293640137e-01 6.787389516830444336e-01 8.213610053062438965e-01 1.000000000000000000e+00 -4.887351095676422119e-01 6.762783527374267578e-01 8.198846578598022461e-01 1.000000000000000000e+00 -4.825836122035980225e-01 6.738177537918090820e-01 8.184083104133605957e-01 1.000000000000000000e+00 -4.764321446418762207e-01 6.713571548461914062e-01 8.169319629669189453e-01 1.000000000000000000e+00 -4.702806472778320312e-01 6.688965559005737305e-01 8.154556155204772949e-01 1.000000000000000000e+00 -4.641291797161102295e-01 6.664359569549560547e-01 8.139792680740356445e-01 1.000000000000000000e+00 -4.579777121543884277e-01 6.639754176139831543e-01 8.125028610229492188e-01 1.000000000000000000e+00 -4.510880410671234131e-01 6.612071990966796875e-01 8.108419775962829590e-01 1.000000000000000000e+00 -4.434601962566375732e-01 6.581314802169799805e-01 8.089965581893920898e-01 1.000000000000000000e+00 -4.358323812484741211e-01 6.550557613372802734e-01 8.071510791778564453e-01 1.000000000000000000e+00 -4.282045364379882812e-01 6.519799828529357910e-01 8.053056597709655762e-01 1.000000000000000000e+00 -4.205766916275024414e-01 6.489042639732360840e-01 8.034601807594299316e-01 1.000000000000000000e+00 -4.129488766193389893e-01 6.458285450935363770e-01 8.016147613525390625e-01 1.000000000000000000e+00 -4.053210318088531494e-01 6.427527666091918945e-01 7.997693419456481934e-01 1.000000000000000000e+00 -3.976931869983673096e-01 6.396770477294921875e-01 7.979238629341125488e-01 1.000000000000000000e+00 -3.900653719902038574e-01 6.366013288497924805e-01 7.960784435272216797e-01 1.000000000000000000e+00 -3.824375271797180176e-01 6.335255503654479980e-01 7.942329645156860352e-01 1.000000000000000000e+00 -3.748096823692321777e-01 6.304498314857482910e-01 7.923875451087951660e-01 1.000000000000000000e+00 -3.671818673610687256e-01 6.273741126060485840e-01 7.905421257019042969e-01 1.000000000000000000e+00 -3.595540225505828857e-01 6.242983341217041016e-01 7.886966466903686523e-01 1.000000000000000000e+00 -3.519261777400970459e-01 6.212226152420043945e-01 7.868512272834777832e-01 1.000000000000000000e+00 -3.442983329296112061e-01 6.181468963623046875e-01 7.850057482719421387e-01 1.000000000000000000e+00 -3.366705179214477539e-01 6.150711178779602051e-01 7.831603288650512695e-01 1.000000000000000000e+00 -3.290426731109619141e-01 6.119953989982604980e-01 7.813148498535156250e-01 1.000000000000000000e+00 -3.214148283004760742e-01 6.089196205139160156e-01 7.794694304466247559e-01 1.000000000000000000e+00 -3.137870132923126221e-01 6.058439016342163086e-01 7.776240110397338867e-01 1.000000000000000000e+00 -3.061591684818267822e-01 6.027681827545166016e-01 7.757785320281982422e-01 1.000000000000000000e+00 -2.985313236713409424e-01 5.996924042701721191e-01 7.739331126213073730e-01 1.000000000000000000e+00 -2.909035086631774902e-01 5.966166853904724121e-01 7.720876336097717285e-01 1.000000000000000000e+00 -2.832756638526916504e-01 5.935409665107727051e-01 7.702422142028808594e-01 1.000000000000000000e+00 -2.756478190422058105e-01 5.904651880264282227e-01 7.683967947959899902e-01 1.000000000000000000e+00 -2.680200040340423584e-01 5.873894691467285156e-01 7.665513157844543457e-01 1.000000000000000000e+00 -2.603921592235565186e-01 5.843137502670288086e-01 7.647058963775634766e-01 1.000000000000000000e+00 -2.527643144130706787e-01 5.812379717826843262e-01 7.628604173660278320e-01 1.000000000000000000e+00 -2.451364845037460327e-01 5.781622529029846191e-01 7.610149979591369629e-01 1.000000000000000000e+00 -2.375086545944213867e-01 5.750865340232849121e-01 7.591695785522460938e-01 1.000000000000000000e+00 -2.298808097839355469e-01 5.720107555389404297e-01 7.573240995407104492e-01 1.000000000000000000e+00 -2.222529798746109009e-01 5.689350366592407227e-01 7.554786801338195801e-01 1.000000000000000000e+00 -2.146251499652862549e-01 5.658592581748962402e-01 7.536332011222839355e-01 1.000000000000000000e+00 -2.079969197511672974e-01 5.622453093528747559e-01 7.517108917236328125e-01 1.000000000000000000e+00 -2.019684761762619019e-01 5.583083629608154297e-01 7.497423887252807617e-01 1.000000000000000000e+00 -1.959400177001953125e-01 5.543714165687561035e-01 7.477739453315734863e-01 1.000000000000000000e+00 -1.899115741252899170e-01 5.504344701766967773e-01 7.458054423332214355e-01 1.000000000000000000e+00 -1.838831156492233276e-01 5.464975237846374512e-01 7.438369989395141602e-01 1.000000000000000000e+00 -1.778546720743179321e-01 5.425605773925781250e-01 7.418684959411621094e-01 1.000000000000000000e+00 -1.718262135982513428e-01 5.386236310005187988e-01 7.399000525474548340e-01 1.000000000000000000e+00 -1.657977700233459473e-01 5.346866846084594727e-01 7.379315495491027832e-01 1.000000000000000000e+00 -1.597693264484405518e-01 5.307497382164001465e-01 7.359631061553955078e-01 1.000000000000000000e+00 -1.537408679723739624e-01 5.268127918243408203e-01 7.339946031570434570e-01 1.000000000000000000e+00 -1.477124243974685669e-01 5.228758454322814941e-01 7.320261597633361816e-01 1.000000000000000000e+00 -1.416839659214019775e-01 5.189388990402221680e-01 7.300576567649841309e-01 1.000000000000000000e+00 -1.356555223464965820e-01 5.150018930435180664e-01 7.280892133712768555e-01 1.000000000000000000e+00 -1.296270638704299927e-01 5.110649466514587402e-01 7.261207103729248047e-01 1.000000000000000000e+00 -1.235986128449440002e-01 5.071280002593994141e-01 7.241522669792175293e-01 1.000000000000000000e+00 -1.175701618194580078e-01 5.031910538673400879e-01 7.221837639808654785e-01 1.000000000000000000e+00 -1.115417182445526123e-01 4.992541372776031494e-01 7.202153205871582031e-01 1.000000000000000000e+00 -1.055132672190666199e-01 4.953171908855438232e-01 7.182468175888061523e-01 1.000000000000000000e+00 -9.948481619358062744e-02 4.913802444934844971e-01 7.162783741950988770e-01 1.000000000000000000e+00 -9.345636516809463501e-02 4.874432981014251709e-01 7.143098711967468262e-01 1.000000000000000000e+00 -8.742791414260864258e-02 4.835063517093658447e-01 7.123414278030395508e-01 1.000000000000000000e+00 -8.139946311712265015e-02 4.795694053173065186e-01 7.103729248046875000e-01 1.000000000000000000e+00 -7.537101209163665771e-02 4.756324589252471924e-01 7.084044814109802246e-01 1.000000000000000000e+00 -6.934256106615066528e-02 4.716955125331878662e-01 7.064359784126281738e-01 1.000000000000000000e+00 -6.331411004066467285e-02 4.677585661411285400e-01 7.044675350189208984e-01 1.000000000000000000e+00 -5.728565901517868042e-02 4.638216197490692139e-01 7.024990320205688477e-01 1.000000000000000000e+00 -5.125720798969268799e-02 4.598846733570098877e-01 7.005305886268615723e-01 1.000000000000000000e+00 -4.522875696420669556e-02 4.559477269649505615e-01 6.985620856285095215e-01 1.000000000000000000e+00 -3.920030593872070312e-02 4.520107507705688477e-01 6.965936422348022461e-01 1.000000000000000000e+00 -3.317185863852500916e-02 4.480738043785095215e-01 6.946251392364501953e-01 1.000000000000000000e+00 -2.714340575039386749e-02 4.441368579864501953e-01 6.926566958427429199e-01 1.000000000000000000e+00 -2.111495658755302429e-02 4.401999115943908691e-01 6.906881928443908691e-01 1.000000000000000000e+00 -1.951557025313377380e-02 4.371857047080993652e-01 6.869665384292602539e-01 1.000000000000000000e+00 -1.939254067838191986e-02 4.344790577888488770e-01 6.826605200767517090e-01 1.000000000000000000e+00 -1.926951110363006592e-02 4.317723810672760010e-01 6.783545017242431641e-01 1.000000000000000000e+00 -1.914648152887821198e-02 4.290657341480255127e-01 6.740484237670898438e-01 1.000000000000000000e+00 -1.902345195412635803e-02 4.263590872287750244e-01 6.697424054145812988e-01 1.000000000000000000e+00 -1.890042237937450409e-02 4.236524403095245361e-01 6.654363870620727539e-01 1.000000000000000000e+00 -1.877739280462265015e-02 4.209457933902740479e-01 6.611303091049194336e-01 1.000000000000000000e+00 -1.865436322987079620e-02 4.182391464710235596e-01 6.568242907524108887e-01 1.000000000000000000e+00 -1.853133365511894226e-02 4.155324995517730713e-01 6.525182723999023438e-01 1.000000000000000000e+00 -1.840830408036708832e-02 4.128258228302001953e-01 6.482122540473937988e-01 1.000000000000000000e+00 -1.828527450561523438e-02 4.101191759109497070e-01 6.439061760902404785e-01 1.000000000000000000e+00 -1.816224493086338043e-02 4.074125289916992188e-01 6.396001577377319336e-01 1.000000000000000000e+00 -1.803921535611152649e-02 4.047058820724487305e-01 6.352941393852233887e-01 1.000000000000000000e+00 -1.791618578135967255e-02 4.019992351531982422e-01 6.309880614280700684e-01 1.000000000000000000e+00 -1.779315620660781860e-02 3.992925882339477539e-01 6.266820430755615234e-01 1.000000000000000000e+00 -1.767012663185596466e-02 3.965859413146972656e-01 6.223760247230529785e-01 1.000000000000000000e+00 -1.754709705710411072e-02 3.938792645931243896e-01 6.180699467658996582e-01 1.000000000000000000e+00 -1.742406748235225677e-02 3.911726176738739014e-01 6.137639284133911133e-01 1.000000000000000000e+00 -1.730103790760040283e-02 3.884659707546234131e-01 6.094579100608825684e-01 1.000000000000000000e+00 -1.717800833284854889e-02 3.857593238353729248e-01 6.051518917083740234e-01 1.000000000000000000e+00 -1.705497875809669495e-02 3.830526769161224365e-01 6.008458137512207031e-01 1.000000000000000000e+00 -1.693194918334484100e-02 3.803460299968719482e-01 5.965397953987121582e-01 1.000000000000000000e+00 -1.680891960859298706e-02 3.776393830776214600e-01 5.922337770462036133e-01 1.000000000000000000e+00 -1.668589003384113312e-02 3.749327063560485840e-01 5.879276990890502930e-01 1.000000000000000000e+00 -1.656286045908927917e-02 3.722260594367980957e-01 5.836216807365417480e-01 1.000000000000000000e+00 -1.643983088433742523e-02 3.695194125175476074e-01 5.793156623840332031e-01 1.000000000000000000e+00 -1.631680130958557129e-02 3.668127655982971191e-01 5.750095844268798828e-01 1.000000000000000000e+00 -1.619377173483371735e-02 3.641061186790466309e-01 5.707035660743713379e-01 1.000000000000000000e+00 -1.607074216008186340e-02 3.613994717597961426e-01 5.663975477218627930e-01 1.000000000000000000e+00 -1.594771258533000946e-02 3.586928248405456543e-01 5.620915293693542480e-01 1.000000000000000000e+00 -1.582468301057815552e-02 3.559861481189727783e-01 5.577854514122009277e-01 1.000000000000000000e+00 -1.570165343582630157e-02 3.532795011997222900e-01 5.534794330596923828e-01 1.000000000000000000e+00 -1.547097228467464447e-02 3.492810428142547607e-01 5.472356677055358887e-01 1.000000000000000000e+00 -1.522491313517093658e-02 3.450980484485626221e-01 5.407150983810424805e-01 1.000000000000000000e+00 -1.497885398566722870e-02 3.409150242805480957e-01 5.341945290565490723e-01 1.000000000000000000e+00 -1.473279483616352081e-02 3.367320299148559570e-01 5.276739597320556641e-01 1.000000000000000000e+00 -1.448673568665981293e-02 3.325490057468414307e-01 5.211533904075622559e-01 1.000000000000000000e+00 -1.424067653715610504e-02 3.283660113811492920e-01 5.146328210830688477e-01 1.000000000000000000e+00 -1.399461738765239716e-02 3.241830170154571533e-01 5.081122517585754395e-01 1.000000000000000000e+00 -1.374855823814868927e-02 3.199999928474426270e-01 5.015916824340820312e-01 1.000000000000000000e+00 -1.350249908864498138e-02 3.158169984817504883e-01 4.950711131095886230e-01 1.000000000000000000e+00 -1.325643993914127350e-02 3.116339743137359619e-01 4.885505437850952148e-01 1.000000000000000000e+00 -1.301038078963756561e-02 3.074509799480438232e-01 4.820299744606018066e-01 1.000000000000000000e+00 -1.276432164013385773e-02 3.032679855823516846e-01 4.755094051361083984e-01 1.000000000000000000e+00 -1.251826249063014984e-02 2.990849614143371582e-01 4.689888358116149902e-01 1.000000000000000000e+00 -1.227220334112644196e-02 2.949019670486450195e-01 4.624682962894439697e-01 1.000000000000000000e+00 -1.202614419162273407e-02 2.907189428806304932e-01 4.559477269649505615e-01 1.000000000000000000e+00 -1.178008504211902618e-02 2.865359485149383545e-01 4.494271576404571533e-01 1.000000000000000000e+00 -1.153402496129274368e-02 2.823529541492462158e-01 4.429065883159637451e-01 1.000000000000000000e+00 -1.128796581178903580e-02 2.781699299812316895e-01 4.363860189914703369e-01 1.000000000000000000e+00 -1.104190666228532791e-02 2.739869356155395508e-01 4.298654496669769287e-01 1.000000000000000000e+00 -1.079584751278162003e-02 2.698039114475250244e-01 4.233448803424835205e-01 1.000000000000000000e+00 -1.054978836327791214e-02 2.656209170818328857e-01 4.168243110179901123e-01 1.000000000000000000e+00 -1.030372921377420425e-02 2.614379227161407471e-01 4.103037416934967041e-01 1.000000000000000000e+00 -1.005767006427049637e-02 2.572548985481262207e-01 4.037831723690032959e-01 1.000000000000000000e+00 -9.811610914766788483e-03 2.530719041824340820e-01 3.972626030445098877e-01 1.000000000000000000e+00 -9.565551765263080597e-03 2.488888949155807495e-01 3.907420337200164795e-01 1.000000000000000000e+00 -9.319492615759372711e-03 2.447058856487274170e-01 3.842214643955230713e-01 1.000000000000000000e+00 -9.073433466255664825e-03 2.405228763818740845e-01 3.777008950710296631e-01 1.000000000000000000e+00 -8.827374316751956940e-03 2.363398671150207520e-01 3.711803257465362549e-01 1.000000000000000000e+00 -8.581315167248249054e-03 2.321568578481674194e-01 3.646597564220428467e-01 1.000000000000000000e+00 -8.335256017744541168e-03 2.279738634824752808e-01 3.581391870975494385e-01 1.000000000000000000e+00 -8.089196868240833282e-03 2.237908542156219482e-01 3.516186177730560303e-01 1.000000000000000000e+00 -7.843137718737125397e-03 2.196078449487686157e-01 3.450980484485626221e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/PuBuGn b/fastplotlib/utils/colormaps/PuBuGn deleted file mode 100644 index 1c70e5147..000000000 --- a/fastplotlib/utils/colormaps/PuBuGn +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 9.686274528503417969e-01 9.843137264251708984e-01 1.000000000000000000e+00 -9.976624250411987305e-01 9.660438299179077148e-01 9.829604029655456543e-01 1.000000000000000000e+00 -9.953248500823974609e-01 9.634602069854736328e-01 9.816070795059204102e-01 1.000000000000000000e+00 -9.929873347282409668e-01 9.608765840530395508e-01 9.802537560462951660e-01 1.000000000000000000e+00 -9.906497597694396973e-01 9.582929611206054688e-01 9.789004325866699219e-01 1.000000000000000000e+00 -9.883121848106384277e-01 9.557093381881713867e-01 9.775471091270446777e-01 1.000000000000000000e+00 -9.859746098518371582e-01 9.531257152557373047e-01 9.761937856674194336e-01 1.000000000000000000e+00 -9.836370348930358887e-01 9.505420923233032227e-01 9.748404622077941895e-01 1.000000000000000000e+00 -9.812995195388793945e-01 9.479584693908691406e-01 9.734871387481689453e-01 1.000000000000000000e+00 -9.789619445800781250e-01 9.453748464584350586e-01 9.721338152885437012e-01 1.000000000000000000e+00 -9.766243696212768555e-01 9.427912235260009766e-01 9.707804918289184570e-01 1.000000000000000000e+00 -9.742867946624755859e-01 9.402076005935668945e-01 9.694271683692932129e-01 1.000000000000000000e+00 -9.719492793083190918e-01 9.376239776611328125e-01 9.680738449096679688e-01 1.000000000000000000e+00 -9.696117043495178223e-01 9.350403547286987305e-01 9.667205214500427246e-01 1.000000000000000000e+00 -9.672741293907165527e-01 9.324567317962646484e-01 9.653671383857727051e-01 1.000000000000000000e+00 -9.649365544319152832e-01 9.298731088638305664e-01 9.640138149261474609e-01 1.000000000000000000e+00 -9.625989794731140137e-01 9.272894859313964844e-01 9.626604914665222168e-01 1.000000000000000000e+00 -9.602614641189575195e-01 9.247058629989624023e-01 9.613071680068969727e-01 1.000000000000000000e+00 -9.579238891601562500e-01 9.221222400665283203e-01 9.599538445472717285e-01 1.000000000000000000e+00 -9.555863142013549805e-01 9.195386171340942383e-01 9.586005210876464844e-01 1.000000000000000000e+00 -9.532487392425537109e-01 9.169549942016601562e-01 9.572471976280212402e-01 1.000000000000000000e+00 -9.509111642837524414e-01 9.143713712692260742e-01 9.558938741683959961e-01 1.000000000000000000e+00 -9.485736489295959473e-01 9.117877483367919922e-01 9.545405507087707520e-01 1.000000000000000000e+00 -9.462360739707946777e-01 9.092041254043579102e-01 9.531872272491455078e-01 1.000000000000000000e+00 -9.438984990119934082e-01 9.066205024719238281e-01 9.518339037895202637e-01 1.000000000000000000e+00 -9.415609240531921387e-01 9.040368795394897461e-01 9.504805803298950195e-01 1.000000000000000000e+00 -9.392233490943908691e-01 9.014533162117004395e-01 9.491272568702697754e-01 1.000000000000000000e+00 -9.368858337402343750e-01 8.988696932792663574e-01 9.477739334106445312e-01 1.000000000000000000e+00 -9.345482587814331055e-01 8.962860703468322754e-01 9.464206099510192871e-01 1.000000000000000000e+00 -9.322106838226318359e-01 8.937024474143981934e-01 9.450672864913940430e-01 1.000000000000000000e+00 -9.298731088638305664e-01 8.911188244819641113e-01 9.437139630317687988e-01 1.000000000000000000e+00 -9.275355339050292969e-01 8.885352015495300293e-01 9.423606395721435547e-01 1.000000000000000000e+00 -9.250596165657043457e-01 8.860130906105041504e-01 9.410226941108703613e-01 1.000000000000000000e+00 -9.216147661209106445e-01 8.839215636253356934e-01 9.397923946380615234e-01 1.000000000000000000e+00 -9.181699156761169434e-01 8.818300366401672363e-01 9.385620951652526855e-01 1.000000000000000000e+00 -9.147251248359680176e-01 8.797385692596435547e-01 9.373317956924438477e-01 1.000000000000000000e+00 -9.112802743911743164e-01 8.776470422744750977e-01 9.361014962196350098e-01 1.000000000000000000e+00 -9.078354239463806152e-01 8.755555748939514160e-01 9.348711967468261719e-01 1.000000000000000000e+00 -9.043906331062316895e-01 8.734640479087829590e-01 9.336408972740173340e-01 1.000000000000000000e+00 -9.009457826614379883e-01 8.713725209236145020e-01 9.324105978012084961e-01 1.000000000000000000e+00 -8.975009322166442871e-01 8.692810535430908203e-01 9.311802983283996582e-01 1.000000000000000000e+00 -8.940561413764953613e-01 8.671895265579223633e-01 9.299499988555908203e-01 1.000000000000000000e+00 -8.906112909317016602e-01 8.650980591773986816e-01 9.287196993827819824e-01 1.000000000000000000e+00 -8.871665000915527344e-01 8.630065321922302246e-01 9.274893999099731445e-01 1.000000000000000000e+00 -8.837216496467590332e-01 8.609150052070617676e-01 9.262591600418090820e-01 1.000000000000000000e+00 -8.802767992019653320e-01 8.588235378265380859e-01 9.250288605690002441e-01 1.000000000000000000e+00 -8.768320083618164062e-01 8.567320108413696289e-01 9.237985610961914062e-01 1.000000000000000000e+00 -8.733871579170227051e-01 8.546405434608459473e-01 9.225682616233825684e-01 1.000000000000000000e+00 -8.699423074722290039e-01 8.525490164756774902e-01 9.213379621505737305e-01 1.000000000000000000e+00 -8.664975166320800781e-01 8.504574894905090332e-01 9.201076626777648926e-01 1.000000000000000000e+00 -8.630526661872863770e-01 8.483660221099853516e-01 9.188773632049560547e-01 1.000000000000000000e+00 -8.596078157424926758e-01 8.462744951248168945e-01 9.176470637321472168e-01 1.000000000000000000e+00 -8.561630249023437500e-01 8.441830277442932129e-01 9.164167642593383789e-01 1.000000000000000000e+00 -8.527181744575500488e-01 8.420915007591247559e-01 9.151864647865295410e-01 1.000000000000000000e+00 -8.492733836174011230e-01 8.399999737739562988e-01 9.139561653137207031e-01 1.000000000000000000e+00 -8.458285331726074219e-01 8.379085063934326172e-01 9.127258658409118652e-01 1.000000000000000000e+00 -8.423836827278137207e-01 8.358169794082641602e-01 9.114955663681030273e-01 1.000000000000000000e+00 -8.389388918876647949e-01 8.337255120277404785e-01 9.102652668952941895e-01 1.000000000000000000e+00 -8.354940414428710938e-01 8.316339850425720215e-01 9.090349674224853516e-01 1.000000000000000000e+00 -8.320491909980773926e-01 8.295424580574035645e-01 9.078046679496765137e-01 1.000000000000000000e+00 -8.286044001579284668e-01 8.274509906768798828e-01 9.065743684768676758e-01 1.000000000000000000e+00 -8.251595497131347656e-01 8.253594636917114258e-01 9.053440690040588379e-01 1.000000000000000000e+00 -8.217146992683410645e-01 8.232679963111877441e-01 9.041138291358947754e-01 1.000000000000000000e+00 -8.182699084281921387e-01 8.211764693260192871e-01 9.028835296630859375e-01 1.000000000000000000e+00 -8.143944740295410156e-01 8.189926743507385254e-01 9.016224741935729980e-01 1.000000000000000000e+00 -8.092272281646728516e-01 8.165320754051208496e-01 9.002691507339477539e-01 1.000000000000000000e+00 -8.040599822998046875e-01 8.140715360641479492e-01 8.989158272743225098e-01 1.000000000000000000e+00 -7.988927364349365234e-01 8.116109371185302734e-01 8.975625038146972656e-01 1.000000000000000000e+00 -7.937254905700683594e-01 8.091503381729125977e-01 8.962091207504272461e-01 1.000000000000000000e+00 -7.885582447052001953e-01 8.066897392272949219e-01 8.948557972908020020e-01 1.000000000000000000e+00 -7.833909988403320312e-01 8.042291402816772461e-01 8.935024738311767578e-01 1.000000000000000000e+00 -7.782237529754638672e-01 8.017685413360595703e-01 8.921491503715515137e-01 1.000000000000000000e+00 -7.730565071105957031e-01 7.993079423904418945e-01 8.907958269119262695e-01 1.000000000000000000e+00 -7.678892612457275391e-01 7.968473434448242188e-01 8.894425034523010254e-01 1.000000000000000000e+00 -7.627220153808593750e-01 7.943868041038513184e-01 8.880891799926757812e-01 1.000000000000000000e+00 -7.575547695159912109e-01 7.919262051582336426e-01 8.867358565330505371e-01 1.000000000000000000e+00 -7.523875236511230469e-01 7.894656062126159668e-01 8.853825330734252930e-01 1.000000000000000000e+00 -7.472202777862548828e-01 7.870050072669982910e-01 8.840292096138000488e-01 1.000000000000000000e+00 -7.420530319213867188e-01 7.845444083213806152e-01 8.826758861541748047e-01 1.000000000000000000e+00 -7.368857860565185547e-01 7.820838093757629395e-01 8.813225626945495605e-01 1.000000000000000000e+00 -7.317185401916503906e-01 7.796232104301452637e-01 8.799692392349243164e-01 1.000000000000000000e+00 -7.265513539314270020e-01 7.771626114845275879e-01 8.786159157752990723e-01 1.000000000000000000e+00 -7.213841080665588379e-01 7.747020125389099121e-01 8.772625923156738281e-01 1.000000000000000000e+00 -7.162168622016906738e-01 7.722414731979370117e-01 8.759092688560485840e-01 1.000000000000000000e+00 -7.110496163368225098e-01 7.697808742523193359e-01 8.745559453964233398e-01 1.000000000000000000e+00 -7.058823704719543457e-01 7.673202753067016602e-01 8.732026219367980957e-01 1.000000000000000000e+00 -7.007151246070861816e-01 7.648596763610839844e-01 8.718492984771728516e-01 1.000000000000000000e+00 -6.955478787422180176e-01 7.623990774154663086e-01 8.704959750175476074e-01 1.000000000000000000e+00 -6.903806328773498535e-01 7.599384784698486328e-01 8.691426515579223633e-01 1.000000000000000000e+00 -6.852133870124816895e-01 7.574778795242309570e-01 8.677893280982971191e-01 1.000000000000000000e+00 -6.800461411476135254e-01 7.550172805786132812e-01 8.664360046386718750e-01 1.000000000000000000e+00 -6.748788952827453613e-01 7.525566816329956055e-01 8.650826811790466309e-01 1.000000000000000000e+00 -6.697116494178771973e-01 7.500961422920227051e-01 8.637293577194213867e-01 1.000000000000000000e+00 -6.645444035530090332e-01 7.476355433464050293e-01 8.623760342597961426e-01 1.000000000000000000e+00 -6.593771576881408691e-01 7.451749444007873535e-01 8.610227108001708984e-01 1.000000000000000000e+00 -6.542099118232727051e-01 7.427143454551696777e-01 8.596693873405456543e-01 1.000000000000000000e+00 -6.480737924575805664e-01 7.402537465095520020e-01 8.582698702812194824e-01 1.000000000000000000e+00 -6.403229236602783203e-01 7.377931475639343262e-01 8.567935228347778320e-01 1.000000000000000000e+00 -6.325721144676208496e-01 7.353325486183166504e-01 8.553171753883361816e-01 1.000000000000000000e+00 -6.248212456703186035e-01 7.328719496726989746e-01 8.538408279418945312e-01 1.000000000000000000e+00 -6.170703768730163574e-01 7.304113507270812988e-01 8.523644804954528809e-01 1.000000000000000000e+00 -6.093195080757141113e-01 7.279508113861083984e-01 8.508881330490112305e-01 1.000000000000000000e+00 -6.015686392784118652e-01 7.254902124404907227e-01 8.494117856025695801e-01 1.000000000000000000e+00 -5.938177704811096191e-01 7.230296134948730469e-01 8.479354381561279297e-01 1.000000000000000000e+00 -5.860669016838073730e-01 7.205690145492553711e-01 8.464590311050415039e-01 1.000000000000000000e+00 -5.783160328865051270e-01 7.181084156036376953e-01 8.449826836585998535e-01 1.000000000000000000e+00 -5.705651640892028809e-01 7.156478166580200195e-01 8.435063362121582031e-01 1.000000000000000000e+00 -5.628142952919006348e-01 7.131872177124023438e-01 8.420299887657165527e-01 1.000000000000000000e+00 -5.550634264945983887e-01 7.107266187667846680e-01 8.405536413192749023e-01 1.000000000000000000e+00 -5.473125576972961426e-01 7.082660794258117676e-01 8.390772938728332520e-01 1.000000000000000000e+00 -5.395616888999938965e-01 7.058054804801940918e-01 8.376009464263916016e-01 1.000000000000000000e+00 -5.318108201026916504e-01 7.033448815345764160e-01 8.361245393753051758e-01 1.000000000000000000e+00 -5.240599513053894043e-01 7.008842825889587402e-01 8.346481919288635254e-01 1.000000000000000000e+00 -5.163090825080871582e-01 6.984236836433410645e-01 8.331718444824218750e-01 1.000000000000000000e+00 -5.085582733154296875e-01 6.959630846977233887e-01 8.316954970359802246e-01 1.000000000000000000e+00 -5.008074045181274414e-01 6.935024857521057129e-01 8.302191495895385742e-01 1.000000000000000000e+00 -4.930565059185028076e-01 6.910418868064880371e-01 8.287428021430969238e-01 1.000000000000000000e+00 -4.853056371212005615e-01 6.885812878608703613e-01 8.272664546966552734e-01 1.000000000000000000e+00 -4.775547981262207031e-01 6.861207485198974609e-01 8.257901072502136230e-01 1.000000000000000000e+00 -4.698039293289184570e-01 6.836601495742797852e-01 8.243137001991271973e-01 1.000000000000000000e+00 -4.620530605316162109e-01 6.811995506286621094e-01 8.228373527526855469e-01 1.000000000000000000e+00 -4.543021917343139648e-01 6.787389516830444336e-01 8.213610053062438965e-01 1.000000000000000000e+00 -4.465513229370117188e-01 6.762783527374267578e-01 8.198846578598022461e-01 1.000000000000000000e+00 -4.388004541397094727e-01 6.738177537918090820e-01 8.184083104133605957e-01 1.000000000000000000e+00 -4.310495853424072266e-01 6.713571548461914062e-01 8.169319629669189453e-01 1.000000000000000000e+00 -4.232987165451049805e-01 6.688965559005737305e-01 8.154556155204772949e-01 1.000000000000000000e+00 -4.155478775501251221e-01 6.664359569549560547e-01 8.139792680740356445e-01 1.000000000000000000e+00 -4.077970087528228760e-01 6.639754176139831543e-01 8.125028610229492188e-01 1.000000000000000000e+00 -4.009073376655578613e-01 6.612071990966796875e-01 8.108419775962829590e-01 1.000000000000000000e+00 -3.948788940906524658e-01 6.581314802169799805e-01 8.089965581893920898e-01 1.000000000000000000e+00 -3.888504505157470703e-01 6.550557613372802734e-01 8.071510791778564453e-01 1.000000000000000000e+00 -3.828219771385192871e-01 6.519799828529357910e-01 8.053056597709655762e-01 1.000000000000000000e+00 -3.767935335636138916e-01 6.489042639732360840e-01 8.034601807594299316e-01 1.000000000000000000e+00 -3.707650899887084961e-01 6.458285450935363770e-01 8.016147613525390625e-01 1.000000000000000000e+00 -3.647366464138031006e-01 6.427527666091918945e-01 7.997693419456481934e-01 1.000000000000000000e+00 -3.587082028388977051e-01 6.396770477294921875e-01 7.979238629341125488e-01 1.000000000000000000e+00 -3.526797294616699219e-01 6.366013288497924805e-01 7.960784435272216797e-01 1.000000000000000000e+00 -3.466512858867645264e-01 6.335255503654479980e-01 7.942329645156860352e-01 1.000000000000000000e+00 -3.406228423118591309e-01 6.304498314857482910e-01 7.923875451087951660e-01 1.000000000000000000e+00 -3.345943987369537354e-01 6.273741126060485840e-01 7.905421257019042969e-01 1.000000000000000000e+00 -3.285659253597259521e-01 6.242983341217041016e-01 7.886966466903686523e-01 1.000000000000000000e+00 -3.225374817848205566e-01 6.212226152420043945e-01 7.868512272834777832e-01 1.000000000000000000e+00 -3.165090382099151611e-01 6.181468963623046875e-01 7.850057482719421387e-01 1.000000000000000000e+00 -3.104805946350097656e-01 6.150711178779602051e-01 7.831603288650512695e-01 1.000000000000000000e+00 -3.044521212577819824e-01 6.119953989982604980e-01 7.813148498535156250e-01 1.000000000000000000e+00 -2.984236776828765869e-01 6.089196205139160156e-01 7.794694304466247559e-01 1.000000000000000000e+00 -2.923952341079711914e-01 6.058439016342163086e-01 7.776240110397338867e-01 1.000000000000000000e+00 -2.863667905330657959e-01 6.027681827545166016e-01 7.757785320281982422e-01 1.000000000000000000e+00 -2.803383171558380127e-01 5.996924042701721191e-01 7.739331126213073730e-01 1.000000000000000000e+00 -2.743098735809326172e-01 5.966166853904724121e-01 7.720876336097717285e-01 1.000000000000000000e+00 -2.682814300060272217e-01 5.935409665107727051e-01 7.702422142028808594e-01 1.000000000000000000e+00 -2.622529864311218262e-01 5.904651880264282227e-01 7.683967947959899902e-01 1.000000000000000000e+00 -2.562245428562164307e-01 5.873894691467285156e-01 7.665513157844543457e-01 1.000000000000000000e+00 -2.501960694789886475e-01 5.843137502670288086e-01 7.647058963775634766e-01 1.000000000000000000e+00 -2.441676259040832520e-01 5.812379717826843262e-01 7.628604173660278320e-01 1.000000000000000000e+00 -2.381391823291778564e-01 5.781622529029846191e-01 7.610149979591369629e-01 1.000000000000000000e+00 -2.321107238531112671e-01 5.750865340232849121e-01 7.591695785522460938e-01 1.000000000000000000e+00 -2.260822802782058716e-01 5.720107555389404297e-01 7.573240995407104492e-01 1.000000000000000000e+00 -2.200538218021392822e-01 5.689350366592407227e-01 7.554786801338195801e-01 1.000000000000000000e+00 -2.140253782272338867e-01 5.658592581748962402e-01 7.536332011222839355e-01 1.000000000000000000e+00 -2.077662497758865356e-01 5.635524988174438477e-01 7.487889528274536133e-01 1.000000000000000000e+00 -2.013687044382095337e-01 5.617070198059082031e-01 7.421452999114990234e-01 1.000000000000000000e+00 -1.949711591005325317e-01 5.598616003990173340e-01 7.355017066001892090e-01 1.000000000000000000e+00 -1.885736286640167236e-01 5.580161213874816895e-01 7.288581132888793945e-01 1.000000000000000000e+00 -1.821760833263397217e-01 5.561707019805908203e-01 7.222145199775695801e-01 1.000000000000000000e+00 -1.757785528898239136e-01 5.543252825736999512e-01 7.155709266662597656e-01 1.000000000000000000e+00 -1.693810075521469116e-01 5.524798035621643066e-01 7.089273333549499512e-01 1.000000000000000000e+00 -1.629834622144699097e-01 5.506343841552734375e-01 7.022837400436401367e-01 1.000000000000000000e+00 -1.565859317779541016e-01 5.487889051437377930e-01 6.956401467323303223e-01 1.000000000000000000e+00 -1.501883864402770996e-01 5.469434857368469238e-01 6.889965534210205078e-01 1.000000000000000000e+00 -1.437908560037612915e-01 5.450980663299560547e-01 6.823529601097106934e-01 1.000000000000000000e+00 -1.373933106660842896e-01 5.432525873184204102e-01 6.757093667984008789e-01 1.000000000000000000e+00 -1.309957653284072876e-01 5.414071679115295410e-01 6.690657734870910645e-01 1.000000000000000000e+00 -1.245982348918914795e-01 5.395616888999938965e-01 6.624221205711364746e-01 1.000000000000000000e+00 -1.182006895542144775e-01 5.377162694931030273e-01 6.557785272598266602e-01 1.000000000000000000e+00 -1.118031516671180725e-01 5.358707904815673828e-01 6.491349339485168457e-01 1.000000000000000000e+00 -1.054056137800216675e-01 5.340253710746765137e-01 6.424913406372070312e-01 1.000000000000000000e+00 -9.900807589292526245e-02 5.321799516677856445e-01 6.358477473258972168e-01 1.000000000000000000e+00 -9.261053800582885742e-02 5.303344726562500000e-01 6.292041540145874023e-01 1.000000000000000000e+00 -8.621299266815185547e-02 5.284890532493591309e-01 6.225605607032775879e-01 1.000000000000000000e+00 -7.981545478105545044e-02 5.266435742378234863e-01 6.159169673919677734e-01 1.000000000000000000e+00 -7.341791689395904541e-02 5.247981548309326172e-01 6.092733740806579590e-01 1.000000000000000000e+00 -6.702037900686264038e-02 5.229527354240417480e-01 6.026297807693481445e-01 1.000000000000000000e+00 -6.062283739447593689e-02 5.211072564125061035e-01 5.959861874580383301e-01 1.000000000000000000e+00 -5.422529950737953186e-02 5.192618370056152344e-01 5.893425345420837402e-01 1.000000000000000000e+00 -4.782775789499282837e-02 5.174163579940795898e-01 5.826989412307739258e-01 1.000000000000000000e+00 -4.143022000789642334e-02 5.155709385871887207e-01 5.760553479194641113e-01 1.000000000000000000e+00 -3.503267839550971985e-02 5.137255191802978516e-01 5.694117546081542969e-01 1.000000000000000000e+00 -2.863514050841331482e-02 5.118800401687622070e-01 5.627681612968444824e-01 1.000000000000000000e+00 -2.223760075867176056e-02 5.100346207618713379e-01 5.561245679855346680e-01 1.000000000000000000e+00 -1.584006100893020630e-02 5.081891417503356934e-01 5.494809746742248535e-01 1.000000000000000000e+00 -9.442522190511226654e-03 5.063437223434448242e-01 5.428373813629150391e-01 1.000000000000000000e+00 -7.750865072011947632e-03 5.039446353912353516e-01 5.366551280021667480e-01 1.000000000000000000e+00 -7.627835497260093689e-03 5.013610124588012695e-01 5.306266546249389648e-01 1.000000000000000000e+00 -7.504805922508239746e-03 4.987773895263671875e-01 5.245982408523559570e-01 1.000000000000000000e+00 -7.381776347756385803e-03 4.961937665939331055e-01 5.185697674751281738e-01 1.000000000000000000e+00 -7.258746773004531860e-03 4.936101436614990234e-01 5.125413537025451660e-01 1.000000000000000000e+00 -7.135717198252677917e-03 4.910265207290649414e-01 5.065128803253173828e-01 1.000000000000000000e+00 -7.012687623500823975e-03 4.884428977966308594e-01 5.004844069480895996e-01 1.000000000000000000e+00 -6.889658048748970032e-03 4.858592748641967773e-01 4.944559931755065918e-01 1.000000000000000000e+00 -6.766628008335828781e-03 4.832756519317626953e-01 4.884275197982788086e-01 1.000000000000000000e+00 -6.643598433583974838e-03 4.806920289993286133e-01 4.823990762233734131e-01 1.000000000000000000e+00 -6.520568858832120895e-03 4.781084060668945312e-01 4.763706326484680176e-01 1.000000000000000000e+00 -6.397539284080266953e-03 4.755248129367828369e-01 4.703421890735626221e-01 1.000000000000000000e+00 -6.274509709328413010e-03 4.729411900043487549e-01 4.643137156963348389e-01 1.000000000000000000e+00 -6.151480134576559067e-03 4.703575670719146729e-01 4.582852721214294434e-01 1.000000000000000000e+00 -6.028450559824705124e-03 4.677739441394805908e-01 4.522568285465240479e-01 1.000000000000000000e+00 -5.905420985072851181e-03 4.651903212070465088e-01 4.462283849716186523e-01 1.000000000000000000e+00 -5.782391410320997238e-03 4.626066982746124268e-01 4.401999115943908691e-01 1.000000000000000000e+00 -5.659361835569143295e-03 4.600230753421783447e-01 4.341714680194854736e-01 1.000000000000000000e+00 -5.536332260817289352e-03 4.574394524097442627e-01 4.281430244445800781e-01 1.000000000000000000e+00 -5.413302686065435410e-03 4.548558294773101807e-01 4.221145808696746826e-01 1.000000000000000000e+00 -5.290273111313581467e-03 4.522722065448760986e-01 4.160861074924468994e-01 1.000000000000000000e+00 -5.167243536561727524e-03 4.496885836124420166e-01 4.100576639175415039e-01 1.000000000000000000e+00 -5.044213961809873581e-03 4.471049606800079346e-01 4.040292203426361084e-01 1.000000000000000000e+00 -4.921184387058019638e-03 4.445213377475738525e-01 3.980007767677307129e-01 1.000000000000000000e+00 -4.798154346644878387e-03 4.419377148151397705e-01 3.919723331928253174e-01 1.000000000000000000e+00 -4.675124771893024445e-03 4.393540918827056885e-01 3.859438598155975342e-01 1.000000000000000000e+00 -4.552095197141170502e-03 4.367704689502716064e-01 3.799154162406921387e-01 1.000000000000000000e+00 -4.429065622389316559e-03 4.341868460178375244e-01 3.738869726657867432e-01 1.000000000000000000e+00 -4.306036047637462616e-03 4.316032230854034424e-01 3.678585290908813477e-01 1.000000000000000000e+00 -4.183006472885608673e-03 4.290196001529693604e-01 3.618300557136535645e-01 1.000000000000000000e+00 -4.059976898133754730e-03 4.264359772205352783e-01 3.558016121387481689e-01 1.000000000000000000e+00 -3.936947323381900787e-03 4.238523542881011963e-01 3.497731685638427734e-01 1.000000000000000000e+00 -3.921568859368562698e-03 4.194386899471282959e-01 3.452518284320831299e-01 1.000000000000000000e+00 -3.921568859368562698e-03 4.147635400295257568e-01 3.409457802772521973e-01 1.000000000000000000e+00 -3.921568859368562698e-03 4.100884199142456055e-01 3.366397619247436523e-01 1.000000000000000000e+00 -3.921568859368562698e-03 4.054132997989654541e-01 3.323337137699127197e-01 1.000000000000000000e+00 -3.921568859368562698e-03 4.007381796836853027e-01 3.280276954174041748e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.960630595684051514e-01 3.237216472625732422e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.913879394531250000e-01 3.194155991077423096e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.867127895355224609e-01 3.151095807552337646e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.820376694202423096e-01 3.108035326004028320e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.773625493049621582e-01 3.064975142478942871e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.726874291896820068e-01 3.021914660930633545e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.680123090744018555e-01 2.978854179382324219e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.633371889591217041e-01 2.935793995857238770e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.586620390415191650e-01 2.892733514308929443e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.539869189262390137e-01 2.849673330783843994e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.493117988109588623e-01 2.806612849235534668e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.446366786956787109e-01 2.763552367687225342e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.399615585803985596e-01 2.720492184162139893e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.352864384651184082e-01 2.677431702613830566e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.306112885475158691e-01 2.634371519088745117e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.259361684322357178e-01 2.591311037540435791e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.212610483169555664e-01 2.548250555992126465e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.165859282016754150e-01 2.505190372467041016e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.119108080863952637e-01 2.462129890918731689e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.072356879711151123e-01 2.419069558382034302e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.025605678558349609e-01 2.376009225845336914e-01 1.000000000000000000e+00 -3.921568859368562698e-03 2.978854179382324219e-01 2.332948893308639526e-01 1.000000000000000000e+00 -3.921568859368562698e-03 2.932102978229522705e-01 2.289888560771942139e-01 1.000000000000000000e+00 -3.921568859368562698e-03 2.885351777076721191e-01 2.246828079223632812e-01 1.000000000000000000e+00 -3.921568859368562698e-03 2.838600575923919678e-01 2.203767746686935425e-01 1.000000000000000000e+00 -3.921568859368562698e-03 2.791849374771118164e-01 2.160707414150238037e-01 1.000000000000000000e+00 -3.921568859368562698e-03 2.745098173618316650e-01 2.117647081613540649e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/PuOr b/fastplotlib/utils/colormaps/PuOr deleted file mode 100644 index 9f95d83c9..000000000 --- a/fastplotlib/utils/colormaps/PuOr +++ /dev/null @@ -1,256 +0,0 @@ -4.980392158031463623e-01 2.313725501298904419e-01 3.137255087494850159e-02 1.000000000000000000e+00 -5.060361623764038086e-01 2.358323782682418823e-01 3.106497414410114288e-02 1.000000000000000000e+00 -5.140330791473388672e-01 2.402921915054321289e-01 3.075740113854408264e-02 1.000000000000000000e+00 -5.220299959182739258e-01 2.447520196437835693e-01 3.044982627034187317e-02 1.000000000000000000e+00 -5.300269126892089844e-01 2.492118477821350098e-01 3.014225326478481293e-02 1.000000000000000000e+00 -5.380238294601440430e-01 2.536716759204864502e-01 2.983467839658260345e-02 1.000000000000000000e+00 -5.460207462310791016e-01 2.581314742565155029e-01 2.952710539102554321e-02 1.000000000000000000e+00 -5.540176630020141602e-01 2.625913023948669434e-01 2.921953052282333374e-02 1.000000000000000000e+00 -5.620146393775939941e-01 2.670511305332183838e-01 2.891195751726627350e-02 1.000000000000000000e+00 -5.700115561485290527e-01 2.715109586715698242e-01 2.860438264906406403e-02 1.000000000000000000e+00 -5.780084729194641113e-01 2.759707868099212646e-01 2.829680964350700378e-02 1.000000000000000000e+00 -5.860053896903991699e-01 2.804306149482727051e-01 2.798923477530479431e-02 1.000000000000000000e+00 -5.940023064613342285e-01 2.848904132843017578e-01 2.768166176974773407e-02 1.000000000000000000e+00 -6.019992232322692871e-01 2.893502414226531982e-01 2.737408690154552460e-02 1.000000000000000000e+00 -6.099961400032043457e-01 2.938100695610046387e-01 2.706651203334331512e-02 1.000000000000000000e+00 -6.179930567741394043e-01 2.982698976993560791e-01 2.675893902778625488e-02 1.000000000000000000e+00 -6.259900331497192383e-01 3.027297258377075195e-01 2.645136415958404541e-02 1.000000000000000000e+00 -6.339869499206542969e-01 3.071895539760589600e-01 2.614379115402698517e-02 1.000000000000000000e+00 -6.419838666915893555e-01 3.116493523120880127e-01 2.583621628582477570e-02 1.000000000000000000e+00 -6.499807834625244141e-01 3.161091804504394531e-01 2.552864328026771545e-02 1.000000000000000000e+00 -6.579777002334594727e-01 3.205690085887908936e-01 2.522106841206550598e-02 1.000000000000000000e+00 -6.659746170043945312e-01 3.250288367271423340e-01 2.491349540650844574e-02 1.000000000000000000e+00 -6.739715337753295898e-01 3.294886648654937744e-01 2.460592053830623627e-02 1.000000000000000000e+00 -6.819684505462646484e-01 3.339484930038452148e-01 2.429834753274917603e-02 1.000000000000000000e+00 -6.899654269218444824e-01 3.384082913398742676e-01 2.399077266454696655e-02 1.000000000000000000e+00 -6.979623436927795410e-01 3.428681194782257080e-01 2.368319965898990631e-02 1.000000000000000000e+00 -7.054209709167480469e-01 3.483275771141052246e-01 2.460592053830623627e-02 1.000000000000000000e+00 -7.123414278030395508e-01 3.547866344451904297e-01 2.675893902778625488e-02 1.000000000000000000e+00 -7.192618250846862793e-01 3.612456619739532471e-01 2.891195751726627350e-02 1.000000000000000000e+00 -7.261822223663330078e-01 3.677047193050384521e-01 3.106497414410114288e-02 1.000000000000000000e+00 -7.331026792526245117e-01 3.741637766361236572e-01 3.321799263358116150e-02 1.000000000000000000e+00 -7.400230765342712402e-01 3.806228339672088623e-01 3.537101298570632935e-02 1.000000000000000000e+00 -7.469434738159179688e-01 3.870818912982940674e-01 3.752402961254119873e-02 1.000000000000000000e+00 -7.538638710975646973e-01 3.935409486293792725e-01 3.967704623937606812e-02 1.000000000000000000e+00 -7.607843279838562012e-01 4.000000059604644775e-01 4.183006659150123596e-02 1.000000000000000000e+00 -7.677047252655029297e-01 4.064590632915496826e-01 4.398308321833610535e-02 1.000000000000000000e+00 -7.746251225471496582e-01 4.129181206226348877e-01 4.613609984517097473e-02 1.000000000000000000e+00 -7.815455794334411621e-01 4.193771481513977051e-01 4.828912019729614258e-02 1.000000000000000000e+00 -7.884659767150878906e-01 4.258362054824829102e-01 5.044213682413101196e-02 1.000000000000000000e+00 -7.953863739967346191e-01 4.322952628135681152e-01 5.259515717625617981e-02 1.000000000000000000e+00 -8.023068308830261230e-01 4.387543201446533203e-01 5.474817380309104919e-02 1.000000000000000000e+00 -8.092272281646728516e-01 4.452133774757385254e-01 5.690119042992591858e-02 1.000000000000000000e+00 -8.161476254463195801e-01 4.516724348068237305e-01 5.905421078205108643e-02 1.000000000000000000e+00 -8.230680227279663086e-01 4.581314921379089355e-01 6.120722740888595581e-02 1.000000000000000000e+00 -8.299884796142578125e-01 4.645905494689941406e-01 6.336024403572082520e-02 1.000000000000000000e+00 -8.369088768959045410e-01 4.710496068000793457e-01 6.551326066255569458e-02 1.000000000000000000e+00 -8.438292741775512695e-01 4.775086641311645508e-01 6.766628473997116089e-02 1.000000000000000000e+00 -8.507497310638427734e-01 4.839676916599273682e-01 6.981930136680603027e-02 1.000000000000000000e+00 -8.576701283454895020e-01 4.904267489910125732e-01 7.197231799364089966e-02 1.000000000000000000e+00 -8.645905256271362305e-01 4.968858063220977783e-01 7.412533462047576904e-02 1.000000000000000000e+00 -8.715109825134277344e-01 5.033448934555053711e-01 7.627835124731063843e-02 1.000000000000000000e+00 -8.784313797950744629e-01 5.098039507865905762e-01 7.843137532472610474e-02 1.000000000000000000e+00 -8.828911781311035156e-01 5.181084275245666504e-01 9.058054536581039429e-02 1.000000000000000000e+00 -8.873510360717773438e-01 5.264129042625427246e-01 1.027297228574752808e-01 1.000000000000000000e+00 -8.918108344078063965e-01 5.347174406051635742e-01 1.148788928985595703e-01 1.000000000000000000e+00 -8.962706923484802246e-01 5.430219173431396484e-01 1.270280629396438599e-01 1.000000000000000000e+00 -9.007304906845092773e-01 5.513263940811157227e-01 1.391772329807281494e-01 1.000000000000000000e+00 -9.051902890205383301e-01 5.596309304237365723e-01 1.513264179229736328e-01 1.000000000000000000e+00 -9.096501469612121582e-01 5.679354071617126465e-01 1.634755879640579224e-01 1.000000000000000000e+00 -9.141099452972412109e-01 5.762398838996887207e-01 1.756247580051422119e-01 1.000000000000000000e+00 -9.185698032379150391e-01 5.845444202423095703e-01 1.877739280462265015e-01 1.000000000000000000e+00 -9.230296015739440918e-01 5.928488969802856445e-01 1.999231129884719849e-01 1.000000000000000000e+00 -9.274893999099731445e-01 6.011533737182617188e-01 2.120722830295562744e-01 1.000000000000000000e+00 -9.319492578506469727e-01 6.094579100608825684e-01 2.242214530706405640e-01 1.000000000000000000e+00 -9.364090561866760254e-01 6.177623867988586426e-01 2.363706231117248535e-01 1.000000000000000000e+00 -9.408689141273498535e-01 6.260669231414794922e-01 2.485197931528091431e-01 1.000000000000000000e+00 -9.453287124633789062e-01 6.343713998794555664e-01 2.606689631938934326e-01 1.000000000000000000e+00 -9.497885704040527344e-01 6.426758766174316406e-01 2.728181481361389160e-01 1.000000000000000000e+00 -9.542483687400817871e-01 6.509804129600524902e-01 2.849673330783843994e-01 1.000000000000000000e+00 -9.587081670761108398e-01 6.592848896980285645e-01 2.971164882183074951e-01 1.000000000000000000e+00 -9.631680250167846680e-01 6.675893664360046387e-01 3.092656731605529785e-01 1.000000000000000000e+00 -9.676278233528137207e-01 6.758939027786254883e-01 3.214148283004760742e-01 1.000000000000000000e+00 -9.720876812934875488e-01 6.841983795166015625e-01 3.335640132427215576e-01 1.000000000000000000e+00 -9.765474796295166016e-01 6.925028562545776367e-01 3.457131981849670410e-01 1.000000000000000000e+00 -9.810072779655456543e-01 7.008073925971984863e-01 3.578623533248901367e-01 1.000000000000000000e+00 -9.854671359062194824e-01 7.091118693351745605e-01 3.700115382671356201e-01 1.000000000000000000e+00 -9.899269342422485352e-01 7.174164056777954102e-01 3.821606934070587158e-01 1.000000000000000000e+00 -9.922337532043457031e-01 7.246443629264831543e-01 3.946174681186676025e-01 1.000000000000000000e+00 -9.923875331878662109e-01 7.307958602905273438e-01 4.073817729949951172e-01 1.000000000000000000e+00 -9.925413131713867188e-01 7.369473576545715332e-01 4.201461076736450195e-01 1.000000000000000000e+00 -9.926950931549072266e-01 7.430987954139709473e-01 4.329104125499725342e-01 1.000000000000000000e+00 -9.928489327430725098e-01 7.492502927780151367e-01 4.456747472286224365e-01 1.000000000000000000e+00 -9.930027127265930176e-01 7.554017901420593262e-01 4.584390521049499512e-01 1.000000000000000000e+00 -9.931564927101135254e-01 7.615532279014587402e-01 4.712033867835998535e-01 1.000000000000000000e+00 -9.933102726936340332e-01 7.677047252655029297e-01 4.839676916599273682e-01 1.000000000000000000e+00 -9.934640526771545410e-01 7.738562226295471191e-01 4.967320263385772705e-01 1.000000000000000000e+00 -9.936178326606750488e-01 7.800076603889465332e-01 5.094963312149047852e-01 1.000000000000000000e+00 -9.937716126441955566e-01 7.861591577529907227e-01 5.222606658935546875e-01 1.000000000000000000e+00 -9.939253926277160645e-01 7.923106551170349121e-01 5.350250005722045898e-01 1.000000000000000000e+00 -9.940791726112365723e-01 7.984621524810791016e-01 5.477893352508544922e-01 1.000000000000000000e+00 -9.942330121994018555e-01 8.046135902404785156e-01 5.605536103248596191e-01 1.000000000000000000e+00 -9.943867921829223633e-01 8.107650876045227051e-01 5.733179450035095215e-01 1.000000000000000000e+00 -9.945405721664428711e-01 8.169165849685668945e-01 5.860822796821594238e-01 1.000000000000000000e+00 -9.946943521499633789e-01 8.230680227279663086e-01 5.988466143608093262e-01 1.000000000000000000e+00 -9.948481321334838867e-01 8.292195200920104980e-01 6.116108894348144531e-01 1.000000000000000000e+00 -9.950019121170043945e-01 8.353710174560546875e-01 6.243752241134643555e-01 1.000000000000000000e+00 -9.951556921005249023e-01 8.415225148200988770e-01 6.371395587921142578e-01 1.000000000000000000e+00 -9.953094720840454102e-01 8.476739525794982910e-01 6.499038934707641602e-01 1.000000000000000000e+00 -9.954633116722106934e-01 8.538254499435424805e-01 6.626682281494140625e-01 1.000000000000000000e+00 -9.956170916557312012e-01 8.599769473075866699e-01 6.754325032234191895e-01 1.000000000000000000e+00 -9.957708716392517090e-01 8.661283850669860840e-01 6.881968379020690918e-01 1.000000000000000000e+00 -9.959246516227722168e-01 8.722798824310302734e-01 7.009611725807189941e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.784313797950744629e-01 7.137255072593688965e-01 1.000000000000000000e+00 -9.950019121170043945e-01 8.819684982299804688e-01 7.237216234207153320e-01 1.000000000000000000e+00 -9.939253926277160645e-01 8.855055570602416992e-01 7.337177991867065430e-01 1.000000000000000000e+00 -9.928489327430725098e-01 8.890426754951477051e-01 7.437139749526977539e-01 1.000000000000000000e+00 -9.917724132537841797e-01 8.925797939300537109e-01 7.537100911140441895e-01 1.000000000000000000e+00 -9.906958937644958496e-01 8.961168527603149414e-01 7.637062668800354004e-01 1.000000000000000000e+00 -9.896193742752075195e-01 8.996539711952209473e-01 7.737024426460266113e-01 1.000000000000000000e+00 -9.885428547859191895e-01 9.031910896301269531e-01 7.836985588073730469e-01 1.000000000000000000e+00 -9.874663352966308594e-01 9.067282080650329590e-01 7.936947345733642578e-01 1.000000000000000000e+00 -9.863898754119873047e-01 9.102652668952941895e-01 8.036909103393554688e-01 1.000000000000000000e+00 -9.853133559226989746e-01 9.138023853302001953e-01 8.136870265007019043e-01 1.000000000000000000e+00 -9.842368364334106445e-01 9.173395037651062012e-01 8.236832022666931152e-01 1.000000000000000000e+00 -9.831603169441223145e-01 9.208765625953674316e-01 8.336793780326843262e-01 1.000000000000000000e+00 -9.820837974548339844e-01 9.244136810302734375e-01 8.436754941940307617e-01 1.000000000000000000e+00 -9.810072779655456543e-01 9.279507994651794434e-01 8.536716699600219727e-01 1.000000000000000000e+00 -9.799308180809020996e-01 9.314879179000854492e-01 8.636678457260131836e-01 1.000000000000000000e+00 -9.788542985916137695e-01 9.350249767303466797e-01 8.736639618873596191e-01 1.000000000000000000e+00 -9.777777791023254395e-01 9.385620951652526855e-01 8.836601376533508301e-01 1.000000000000000000e+00 -9.767012596130371094e-01 9.420992136001586914e-01 8.936563134193420410e-01 1.000000000000000000e+00 -9.756247401237487793e-01 9.456362724304199219e-01 9.036524295806884766e-01 1.000000000000000000e+00 -9.745482802391052246e-01 9.491733908653259277e-01 9.136486053466796875e-01 1.000000000000000000e+00 -9.734717607498168945e-01 9.527105093002319336e-01 9.236447811126708984e-01 1.000000000000000000e+00 -9.723952412605285645e-01 9.562475681304931641e-01 9.336408972740173340e-01 1.000000000000000000e+00 -9.713187217712402344e-01 9.597846865653991699e-01 9.436370730400085449e-01 1.000000000000000000e+00 -9.702422022819519043e-01 9.633218050003051758e-01 9.536331892013549805e-01 1.000000000000000000e+00 -9.691656827926635742e-01 9.668589234352111816e-01 9.636293649673461914e-01 1.000000000000000000e+00 -9.662437438964843750e-01 9.663975238800048828e-01 9.677047133445739746e-01 1.000000000000000000e+00 -9.614763259887695312e-01 9.619377255439758301e-01 9.658592939376831055e-01 1.000000000000000000e+00 -9.567089676856994629e-01 9.574778676033020020e-01 9.640138149261474609e-01 1.000000000000000000e+00 -9.519415497779846191e-01 9.530180692672729492e-01 9.621683955192565918e-01 1.000000000000000000e+00 -9.471741914749145508e-01 9.485582709312438965e-01 9.603229761123657227e-01 1.000000000000000000e+00 -9.424067735671997070e-01 9.440984129905700684e-01 9.584774971008300781e-01 1.000000000000000000e+00 -9.376393556594848633e-01 9.396386146545410156e-01 9.566320776939392090e-01 1.000000000000000000e+00 -9.328719973564147949e-01 9.351787567138671875e-01 9.547865986824035645e-01 1.000000000000000000e+00 -9.281045794486999512e-01 9.307189583778381348e-01 9.529411792755126953e-01 1.000000000000000000e+00 -9.233371615409851074e-01 9.262591600418090820e-01 9.510957598686218262e-01 1.000000000000000000e+00 -9.185698032379150391e-01 9.217993021011352539e-01 9.492502808570861816e-01 1.000000000000000000e+00 -9.138023853302001953e-01 9.173395037651062012e-01 9.474048614501953125e-01 1.000000000000000000e+00 -9.090349674224853516e-01 9.128796458244323730e-01 9.455593824386596680e-01 1.000000000000000000e+00 -9.042676091194152832e-01 9.084198474884033203e-01 9.437139630317687988e-01 1.000000000000000000e+00 -8.995001912117004395e-01 9.039599895477294922e-01 9.418684840202331543e-01 1.000000000000000000e+00 -8.947327733039855957e-01 8.995001912117004395e-01 9.400230646133422852e-01 1.000000000000000000e+00 -8.899654150009155273e-01 8.950403928756713867e-01 9.381776452064514160e-01 1.000000000000000000e+00 -8.851979970932006836e-01 8.905805349349975586e-01 9.363321661949157715e-01 1.000000000000000000e+00 -8.804305791854858398e-01 8.861207365989685059e-01 9.344867467880249023e-01 1.000000000000000000e+00 -8.756632208824157715e-01 8.816608786582946777e-01 9.326412677764892578e-01 1.000000000000000000e+00 -8.708958029747009277e-01 8.772010803222656250e-01 9.307958483695983887e-01 1.000000000000000000e+00 -8.661283850669860840e-01 8.727412819862365723e-01 9.289504289627075195e-01 1.000000000000000000e+00 -8.613610267639160156e-01 8.682814240455627441e-01 9.271049499511718750e-01 1.000000000000000000e+00 -8.565936088562011719e-01 8.638216257095336914e-01 9.252595305442810059e-01 1.000000000000000000e+00 -8.518261909484863281e-01 8.593617677688598633e-01 9.234140515327453613e-01 1.000000000000000000e+00 -8.470588326454162598e-01 8.549019694328308105e-01 9.215686321258544922e-01 1.000000000000000000e+00 -8.412148952484130859e-01 8.476739525794982910e-01 9.177239537239074707e-01 1.000000000000000000e+00 -8.353710174560546875e-01 8.404459953308105469e-01 9.138792753219604492e-01 1.000000000000000000e+00 -8.295270800590515137e-01 8.332179784774780273e-01 9.100345969200134277e-01 1.000000000000000000e+00 -8.236832022666931152e-01 8.259900212287902832e-01 9.061899185180664062e-01 1.000000000000000000e+00 -8.178392648696899414e-01 8.187620043754577637e-01 9.023452401161193848e-01 1.000000000000000000e+00 -8.119953870773315430e-01 8.115340471267700195e-01 8.985005617141723633e-01 1.000000000000000000e+00 -8.061515092849731445e-01 8.043060302734375000e-01 8.946558833122253418e-01 1.000000000000000000e+00 -8.003075718879699707e-01 7.970780730247497559e-01 8.908112049102783203e-01 1.000000000000000000e+00 -7.944636940956115723e-01 7.898500561714172363e-01 8.869665265083312988e-01 1.000000000000000000e+00 -7.886197566986083984e-01 7.826220393180847168e-01 8.831218481063842773e-01 1.000000000000000000e+00 -7.827758789062500000e-01 7.753940820693969727e-01 8.792772293090820312e-01 1.000000000000000000e+00 -7.769319415092468262e-01 7.681660652160644531e-01 8.754325509071350098e-01 1.000000000000000000e+00 -7.710880637168884277e-01 7.609381079673767090e-01 8.715878725051879883e-01 1.000000000000000000e+00 -7.652441263198852539e-01 7.537100911140441895e-01 8.677431941032409668e-01 1.000000000000000000e+00 -7.594002485275268555e-01 7.464821338653564453e-01 8.638985157012939453e-01 1.000000000000000000e+00 -7.535563111305236816e-01 7.392541170120239258e-01 8.600538372993469238e-01 1.000000000000000000e+00 -7.477124333381652832e-01 7.320261597633361816e-01 8.562091588973999023e-01 1.000000000000000000e+00 -7.418684959411621094e-01 7.247981429100036621e-01 8.523644804954528809e-01 1.000000000000000000e+00 -7.360246181488037109e-01 7.175701856613159180e-01 8.485198020935058594e-01 1.000000000000000000e+00 -7.301806807518005371e-01 7.103421688079833984e-01 8.446751236915588379e-01 1.000000000000000000e+00 -7.243368029594421387e-01 7.031142115592956543e-01 8.408304452896118164e-01 1.000000000000000000e+00 -7.184928655624389648e-01 6.958861947059631348e-01 8.369857668876647949e-01 1.000000000000000000e+00 -7.126489877700805664e-01 6.886582374572753906e-01 8.331410884857177734e-01 1.000000000000000000e+00 -7.068050503730773926e-01 6.814302206039428711e-01 8.292964100837707520e-01 1.000000000000000000e+00 -7.009611725807189941e-01 6.742022037506103516e-01 8.254517316818237305e-01 1.000000000000000000e+00 -6.941945552825927734e-01 6.662821769714355469e-01 8.206074833869934082e-01 1.000000000000000000e+00 -6.865051984786987305e-01 6.576701402664184570e-01 8.147635459899902344e-01 1.000000000000000000e+00 -6.788158416748046875e-01 6.490580439567565918e-01 8.089196681976318359e-01 1.000000000000000000e+00 -6.711264848709106445e-01 6.404460072517395020e-01 8.030757308006286621e-01 1.000000000000000000e+00 -6.634371280670166016e-01 6.318339109420776367e-01 7.972318530082702637e-01 1.000000000000000000e+00 -6.557477712631225586e-01 6.232218146324157715e-01 7.913879156112670898e-01 1.000000000000000000e+00 -6.480584144592285156e-01 6.146097779273986816e-01 7.855440378189086914e-01 1.000000000000000000e+00 -6.403691172599792480e-01 6.059976816177368164e-01 7.797001004219055176e-01 1.000000000000000000e+00 -6.326797604560852051e-01 5.973856449127197266e-01 7.738562226295471191e-01 1.000000000000000000e+00 -6.249904036521911621e-01 5.887735486030578613e-01 7.680122852325439453e-01 1.000000000000000000e+00 -6.173010468482971191e-01 5.801614522933959961e-01 7.621684074401855469e-01 1.000000000000000000e+00 -6.096116900444030762e-01 5.715494155883789062e-01 7.563244700431823730e-01 1.000000000000000000e+00 -6.019223332405090332e-01 5.629373192787170410e-01 7.504805922508239746e-01 1.000000000000000000e+00 -5.942329764366149902e-01 5.543252825736999512e-01 7.446366548538208008e-01 1.000000000000000000e+00 -5.865436196327209473e-01 5.457131862640380859e-01 7.387927770614624023e-01 1.000000000000000000e+00 -5.788542628288269043e-01 5.371010899543762207e-01 7.329488396644592285e-01 1.000000000000000000e+00 -5.711649656295776367e-01 5.284890532493591309e-01 7.271049618721008301e-01 1.000000000000000000e+00 -5.634756088256835938e-01 5.198769569396972656e-01 7.212610244750976562e-01 1.000000000000000000e+00 -5.557862520217895508e-01 5.112649202346801758e-01 7.154171466827392578e-01 1.000000000000000000e+00 -5.480968952178955078e-01 5.026528239250183105e-01 7.095732688903808594e-01 1.000000000000000000e+00 -5.404075384140014648e-01 4.940407574176788330e-01 7.037293314933776855e-01 1.000000000000000000e+00 -5.327181816101074219e-01 4.854286909103393555e-01 6.978854537010192871e-01 1.000000000000000000e+00 -5.250288248062133789e-01 4.768165946006774902e-01 6.920415163040161133e-01 1.000000000000000000e+00 -5.173394680023193359e-01 4.682045280933380127e-01 6.861976385116577148e-01 1.000000000000000000e+00 -5.096501111984252930e-01 4.595924615859985352e-01 6.803537011146545410e-01 1.000000000000000000e+00 -5.019608139991760254e-01 4.509803950786590576e-01 6.745098233222961426e-01 1.000000000000000000e+00 -4.951941668987274170e-01 4.392925798892974854e-01 6.689734458923339844e-01 1.000000000000000000e+00 -4.884275197982788086e-01 4.276047646999359131e-01 6.634371280670166016e-01 1.000000000000000000e+00 -4.816609025001525879e-01 4.159169495105743408e-01 6.579008102416992188e-01 1.000000000000000000e+00 -4.748942852020263672e-01 4.042291343212127686e-01 6.523644924163818359e-01 1.000000000000000000e+00 -4.681276381015777588e-01 3.925413191318511963e-01 6.468281149864196777e-01 1.000000000000000000e+00 -4.613610208034515381e-01 3.808535039424896240e-01 6.412917971611022949e-01 1.000000000000000000e+00 -4.545943737030029297e-01 3.691657185554504395e-01 6.357554793357849121e-01 1.000000000000000000e+00 -4.478277564048767090e-01 3.574779033660888672e-01 6.302191615104675293e-01 1.000000000000000000e+00 -4.410611391067504883e-01 3.457900881767272949e-01 6.246828436851501465e-01 1.000000000000000000e+00 -4.342944920063018799e-01 3.341022729873657227e-01 6.191464662551879883e-01 1.000000000000000000e+00 -4.275278747081756592e-01 3.224144577980041504e-01 6.136101484298706055e-01 1.000000000000000000e+00 -4.207612574100494385e-01 3.107266426086425781e-01 6.080738306045532227e-01 1.000000000000000000e+00 -4.139946103096008301e-01 2.990388274192810059e-01 6.025375127792358398e-01 1.000000000000000000e+00 -4.072279930114746094e-01 2.873510122299194336e-01 5.970011353492736816e-01 1.000000000000000000e+00 -4.004613757133483887e-01 2.756631970405578613e-01 5.914648175239562988e-01 1.000000000000000000e+00 -3.936947286128997803e-01 2.639753818511962891e-01 5.859284996986389160e-01 1.000000000000000000e+00 -3.869281113147735596e-01 2.522875964641571045e-01 5.803921818733215332e-01 1.000000000000000000e+00 -3.801614642143249512e-01 2.405997663736343384e-01 5.748558044433593750e-01 1.000000000000000000e+00 -3.733948469161987305e-01 2.289119511842727661e-01 5.693194866180419922e-01 1.000000000000000000e+00 -3.666282296180725098e-01 2.172241508960723877e-01 5.637831687927246094e-01 1.000000000000000000e+00 -3.598615825176239014e-01 2.055363357067108154e-01 5.582468509674072266e-01 1.000000000000000000e+00 -3.530949652194976807e-01 1.938485205173492432e-01 5.527104735374450684e-01 1.000000000000000000e+00 -3.463283479213714600e-01 1.821607053279876709e-01 5.471741557121276855e-01 1.000000000000000000e+00 -3.395617008209228516e-01 1.704728901386260986e-01 5.416378378868103027e-01 1.000000000000000000e+00 -3.327950835227966309e-01 1.587850898504257202e-01 5.361015200614929199e-01 1.000000000000000000e+00 -3.264129161834716797e-01 1.499423235654830933e-01 5.286428332328796387e-01 1.000000000000000000e+00 -3.204152286052703857e-01 1.439446359872817993e-01 5.192618370056152344e-01 1.000000000000000000e+00 -3.144175410270690918e-01 1.379469484090805054e-01 5.098808407783508301e-01 1.000000000000000000e+00 -3.084198236465454102e-01 1.319492459297180176e-01 5.004997849464416504e-01 1.000000000000000000e+00 -3.024221360683441162e-01 1.259515583515167236e-01 4.911187887191772461e-01 1.000000000000000000e+00 -2.964244484901428223e-01 1.199538633227348328e-01 4.817377924919128418e-01 1.000000000000000000e+00 -2.904267609119415283e-01 1.139561682939529419e-01 4.723567962646484375e-01 1.000000000000000000e+00 -2.844290733337402344e-01 1.079584807157516479e-01 4.629757702350616455e-01 1.000000000000000000e+00 -2.784313857555389404e-01 1.019607856869697571e-01 4.535947740077972412e-01 1.000000000000000000e+00 -2.724336683750152588e-01 9.596309065818786621e-02 4.442137777805328369e-01 1.000000000000000000e+00 -2.664359807968139648e-01 8.996539562940597534e-02 4.348327517509460449e-01 1.000000000000000000e+00 -2.604382932186126709e-01 8.396770805120468140e-02 4.254517555236816406e-01 1.000000000000000000e+00 -2.544406056404113770e-01 7.797001302242279053e-02 4.160707294940948486e-01 1.000000000000000000e+00 -2.484429031610488892e-01 7.197231799364089966e-02 4.066897332668304443e-01 1.000000000000000000e+00 -2.424452155828475952e-01 6.597462296485900879e-02 3.973087370395660400e-01 1.000000000000000000e+00 -2.364475131034851074e-01 5.997693166136741638e-02 3.879277110099792480e-01 1.000000000000000000e+00 -2.304498255252838135e-01 5.397924035787582397e-02 3.785467147827148438e-01 1.000000000000000000e+00 -2.244521379470825195e-01 4.798154532909393311e-02 3.691657185554504395e-01 1.000000000000000000e+00 -2.184544354677200317e-01 4.198385402560234070e-02 3.597846925258636475e-01 1.000000000000000000e+00 -2.124567478895187378e-01 3.598615899682044983e-02 3.504036962985992432e-01 1.000000000000000000e+00 -2.064590603113174438e-01 2.998846583068370819e-02 3.410226702690124512e-01 1.000000000000000000e+00 -2.004613578319549561e-01 2.399077266454696655e-02 3.316416740417480469e-01 1.000000000000000000e+00 -1.944636702537536621e-01 1.799307949841022491e-02 3.222606778144836426e-01 1.000000000000000000e+00 -1.884659677743911743e-01 1.199538633227348328e-02 3.128796517848968506e-01 1.000000000000000000e+00 -1.824682801961898804e-01 5.997693166136741638e-03 3.034986555576324463e-01 1.000000000000000000e+00 -1.764705926179885864e-01 0.000000000000000000e+00 2.941176593303680420e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/PuRd b/fastplotlib/utils/colormaps/PuRd deleted file mode 100644 index 0c5014f78..000000000 --- a/fastplotlib/utils/colormaps/PuRd +++ /dev/null @@ -1,256 +0,0 @@ -9.686274528503417969e-01 9.568627476692199707e-01 9.764705896377563477e-01 1.000000000000000000e+00 -9.666589498519897461e-01 9.545251727104187012e-01 9.752402901649475098e-01 1.000000000000000000e+00 -9.646905064582824707e-01 9.521875977516174316e-01 9.740099906921386719e-01 1.000000000000000000e+00 -9.627220034599304199e-01 9.498500823974609375e-01 9.727796912193298340e-01 1.000000000000000000e+00 -9.607535600662231445e-01 9.475125074386596680e-01 9.715493917465209961e-01 1.000000000000000000e+00 -9.587850570678710938e-01 9.451749324798583984e-01 9.703190922737121582e-01 1.000000000000000000e+00 -9.568166136741638184e-01 9.428373575210571289e-01 9.690887928009033203e-01 1.000000000000000000e+00 -9.548481106758117676e-01 9.404997825622558594e-01 9.678584933280944824e-01 1.000000000000000000e+00 -9.528796672821044922e-01 9.381622672080993652e-01 9.666281938552856445e-01 1.000000000000000000e+00 -9.509111642837524414e-01 9.358246922492980957e-01 9.653978943824768066e-01 1.000000000000000000e+00 -9.489427208900451660e-01 9.334871172904968262e-01 9.641676545143127441e-01 1.000000000000000000e+00 -9.469742178916931152e-01 9.311495423316955566e-01 9.629373550415039062e-01 1.000000000000000000e+00 -9.450057744979858398e-01 9.288119673728942871e-01 9.617070555686950684e-01 1.000000000000000000e+00 -9.430372714996337891e-01 9.264744520187377930e-01 9.604767560958862305e-01 1.000000000000000000e+00 -9.410688281059265137e-01 9.241368770599365234e-01 9.592464566230773926e-01 1.000000000000000000e+00 -9.391003251075744629e-01 9.217993021011352539e-01 9.580161571502685547e-01 1.000000000000000000e+00 -9.371318817138671875e-01 9.194617271423339844e-01 9.567858576774597168e-01 1.000000000000000000e+00 -9.351633787155151367e-01 9.171242117881774902e-01 9.555555582046508789e-01 1.000000000000000000e+00 -9.331949353218078613e-01 9.147866368293762207e-01 9.543252587318420410e-01 1.000000000000000000e+00 -9.312264323234558105e-01 9.124490618705749512e-01 9.530949592590332031e-01 1.000000000000000000e+00 -9.292579889297485352e-01 9.101114869117736816e-01 9.518646597862243652e-01 1.000000000000000000e+00 -9.272894859313964844e-01 9.077739119529724121e-01 9.506343603134155273e-01 1.000000000000000000e+00 -9.253210425376892090e-01 9.054363965988159180e-01 9.494040608406066895e-01 1.000000000000000000e+00 -9.233525395393371582e-01 9.030988216400146484e-01 9.481737613677978516e-01 1.000000000000000000e+00 -9.213840961456298828e-01 9.007612466812133789e-01 9.469434618949890137e-01 1.000000000000000000e+00 -9.194155931472778320e-01 8.984236717224121094e-01 9.457131624221801758e-01 1.000000000000000000e+00 -9.174471497535705566e-01 8.960860967636108398e-01 9.444828629493713379e-01 1.000000000000000000e+00 -9.154786467552185059e-01 8.937485814094543457e-01 9.432526230812072754e-01 1.000000000000000000e+00 -9.135102033615112305e-01 8.914110064506530762e-01 9.420223236083984375e-01 1.000000000000000000e+00 -9.115417003631591797e-01 8.890734314918518066e-01 9.407920241355895996e-01 1.000000000000000000e+00 -9.095732569694519043e-01 8.867358565330505371e-01 9.395617246627807617e-01 1.000000000000000000e+00 -9.076047539710998535e-01 8.843982815742492676e-01 9.383314251899719238e-01 1.000000000000000000e+00 -9.055901765823364258e-01 8.817377686500549316e-01 9.369319677352905273e-01 1.000000000000000000e+00 -9.032526016235351562e-01 8.768166303634643555e-01 9.343483448028564453e-01 1.000000000000000000e+00 -9.009150266647338867e-01 8.718954324722290039e-01 9.317647218704223633e-01 1.000000000000000000e+00 -8.985774517059326172e-01 8.669742345809936523e-01 9.291810989379882812e-01 1.000000000000000000e+00 -8.962399363517761230e-01 8.620530366897583008e-01 9.265974760055541992e-01 1.000000000000000000e+00 -8.939023613929748535e-01 8.571318984031677246e-01 9.240138530731201172e-01 1.000000000000000000e+00 -8.915647864341735840e-01 8.522107005119323730e-01 9.214302301406860352e-01 1.000000000000000000e+00 -8.892272114753723145e-01 8.472895026206970215e-01 9.188466072082519531e-01 1.000000000000000000e+00 -8.868896365165710449e-01 8.423683047294616699e-01 9.162629842758178711e-01 1.000000000000000000e+00 -8.845521211624145508e-01 8.374471068382263184e-01 9.136793613433837891e-01 1.000000000000000000e+00 -8.822145462036132812e-01 8.325259685516357422e-01 9.110957384109497070e-01 1.000000000000000000e+00 -8.798769712448120117e-01 8.276047706604003906e-01 9.085121154785156250e-01 1.000000000000000000e+00 -8.775393962860107422e-01 8.226835727691650391e-01 9.059284925460815430e-01 1.000000000000000000e+00 -8.752018213272094727e-01 8.177623748779296875e-01 9.033448696136474609e-01 1.000000000000000000e+00 -8.728643059730529785e-01 8.128412365913391113e-01 9.007612466812133789e-01 1.000000000000000000e+00 -8.705267310142517090e-01 8.079200387001037598e-01 8.981776237487792969e-01 1.000000000000000000e+00 -8.681891560554504395e-01 8.029988408088684082e-01 8.955940008163452148e-01 1.000000000000000000e+00 -8.658515810966491699e-01 7.980776429176330566e-01 8.930103778839111328e-01 1.000000000000000000e+00 -8.635140061378479004e-01 7.931565046310424805e-01 8.904267549514770508e-01 1.000000000000000000e+00 -8.611764907836914062e-01 7.882353067398071289e-01 8.878431320190429688e-01 1.000000000000000000e+00 -8.588389158248901367e-01 7.833141088485717773e-01 8.852595090866088867e-01 1.000000000000000000e+00 -8.565013408660888672e-01 7.783929109573364258e-01 8.826758861541748047e-01 1.000000000000000000e+00 -8.541637659072875977e-01 7.734717130661010742e-01 8.800922632217407227e-01 1.000000000000000000e+00 -8.518261909484863281e-01 7.685505747795104980e-01 8.775086402893066406e-01 1.000000000000000000e+00 -8.494886755943298340e-01 7.636293768882751465e-01 8.749250173568725586e-01 1.000000000000000000e+00 -8.471511006355285645e-01 7.587081789970397949e-01 8.723413944244384766e-01 1.000000000000000000e+00 -8.448135256767272949e-01 7.537869811058044434e-01 8.697577714920043945e-01 1.000000000000000000e+00 -8.424759507179260254e-01 7.488658428192138672e-01 8.671741485595703125e-01 1.000000000000000000e+00 -8.401384353637695312e-01 7.439446449279785156e-01 8.645905256271362305e-01 1.000000000000000000e+00 -8.378008604049682617e-01 7.390234470367431641e-01 8.620069026947021484e-01 1.000000000000000000e+00 -8.354632854461669922e-01 7.341022491455078125e-01 8.594232797622680664e-01 1.000000000000000000e+00 -8.331257104873657227e-01 7.291811108589172363e-01 8.568396568298339844e-01 1.000000000000000000e+00 -8.310342431068420410e-01 7.243521809577941895e-01 8.543175458908081055e-01 1.000000000000000000e+00 -8.296809196472167969e-01 7.198000550270080566e-01 8.519800305366516113e-01 1.000000000000000000e+00 -8.283275365829467773e-01 7.152479887008666992e-01 8.496424555778503418e-01 1.000000000000000000e+00 -8.269742131233215332e-01 7.106958627700805664e-01 8.473048806190490723e-01 1.000000000000000000e+00 -8.256208896636962891e-01 7.061437964439392090e-01 8.449673056602478027e-01 1.000000000000000000e+00 -8.242675662040710449e-01 7.015916705131530762e-01 8.426297307014465332e-01 1.000000000000000000e+00 -8.229142427444458008e-01 6.970396041870117188e-01 8.402922153472900391e-01 1.000000000000000000e+00 -8.215609192848205566e-01 6.924874782562255859e-01 8.379546403884887695e-01 1.000000000000000000e+00 -8.202075958251953125e-01 6.879354119300842285e-01 8.356170654296875000e-01 1.000000000000000000e+00 -8.188542723655700684e-01 6.833832859992980957e-01 8.332794904708862305e-01 1.000000000000000000e+00 -8.175009489059448242e-01 6.788312196731567383e-01 8.309419751167297363e-01 1.000000000000000000e+00 -8.161476254463195801e-01 6.742790937423706055e-01 8.286044001579284668e-01 1.000000000000000000e+00 -8.147943019866943359e-01 6.697270274162292480e-01 8.262668251991271973e-01 1.000000000000000000e+00 -8.134409785270690918e-01 6.651749610900878906e-01 8.239292502403259277e-01 1.000000000000000000e+00 -8.120876550674438477e-01 6.606228351593017578e-01 8.215916752815246582e-01 1.000000000000000000e+00 -8.107343316078186035e-01 6.560707688331604004e-01 8.192541599273681641e-01 1.000000000000000000e+00 -8.093810081481933594e-01 6.515186429023742676e-01 8.169165849685668945e-01 1.000000000000000000e+00 -8.080276846885681152e-01 6.469665765762329102e-01 8.145790100097656250e-01 1.000000000000000000e+00 -8.066743612289428711e-01 6.424144506454467773e-01 8.122414350509643555e-01 1.000000000000000000e+00 -8.053210377693176270e-01 6.378623843193054199e-01 8.099038600921630859e-01 1.000000000000000000e+00 -8.039677143096923828e-01 6.333102583885192871e-01 8.075663447380065918e-01 1.000000000000000000e+00 -8.026143908500671387e-01 6.287581920623779297e-01 8.052287697792053223e-01 1.000000000000000000e+00 -8.012610673904418945e-01 6.242060661315917969e-01 8.028911948204040527e-01 1.000000000000000000e+00 -7.999077439308166504e-01 6.196539998054504395e-01 8.005536198616027832e-01 1.000000000000000000e+00 -7.985544204711914062e-01 6.151018738746643066e-01 7.982160449028015137e-01 1.000000000000000000e+00 -7.972010970115661621e-01 6.105498075485229492e-01 7.958785295486450195e-01 1.000000000000000000e+00 -7.958477735519409180e-01 6.059976816177368164e-01 7.935409545898437500e-01 1.000000000000000000e+00 -7.944944500923156738e-01 6.014456152915954590e-01 7.912033796310424805e-01 1.000000000000000000e+00 -7.931411266326904297e-01 5.968934893608093262e-01 7.888658046722412109e-01 1.000000000000000000e+00 -7.917878031730651855e-01 5.923414230346679688e-01 7.865282297134399414e-01 1.000000000000000000e+00 -7.904344201087951660e-01 5.877892971038818359e-01 7.841907143592834473e-01 1.000000000000000000e+00 -7.890810966491699219e-01 5.832372307777404785e-01 7.818531394004821777e-01 1.000000000000000000e+00 -7.892503142356872559e-01 5.782237648963928223e-01 7.793310284614562988e-01 1.000000000000000000e+00 -7.919569611549377441e-01 5.724413394927978516e-01 7.765013575553894043e-01 1.000000000000000000e+00 -7.946636080741882324e-01 5.666589736938476562e-01 7.736716866493225098e-01 1.000000000000000000e+00 -7.973702549934387207e-01 5.608766078948974609e-01 7.708419561386108398e-01 1.000000000000000000e+00 -8.000769019126892090e-01 5.550941824913024902e-01 7.680122852325439453e-01 1.000000000000000000e+00 -8.027835488319396973e-01 5.493118166923522949e-01 7.651826143264770508e-01 1.000000000000000000e+00 -8.054901957511901855e-01 5.435293912887573242e-01 7.623529434204101562e-01 1.000000000000000000e+00 -8.081968426704406738e-01 5.377470254898071289e-01 7.595232725143432617e-01 1.000000000000000000e+00 -8.109034895896911621e-01 5.319646000862121582e-01 7.566936016082763672e-01 1.000000000000000000e+00 -8.136101365089416504e-01 5.261822342872619629e-01 7.538638710975646973e-01 1.000000000000000000e+00 -8.163167834281921387e-01 5.203998684883117676e-01 7.510342001914978027e-01 1.000000000000000000e+00 -8.190234303474426270e-01 5.146174430847167969e-01 7.482045292854309082e-01 1.000000000000000000e+00 -8.217300772666931152e-01 5.088350772857666016e-01 7.453748583793640137e-01 1.000000000000000000e+00 -8.244367837905883789e-01 5.030526518821716309e-01 7.425451874732971191e-01 1.000000000000000000e+00 -8.271434307098388672e-01 4.972702860832214355e-01 7.397155165672302246e-01 1.000000000000000000e+00 -8.298500776290893555e-01 4.914878904819488525e-01 7.368857860565185547e-01 1.000000000000000000e+00 -8.325567245483398438e-01 4.857054948806762695e-01 7.340561151504516602e-01 1.000000000000000000e+00 -8.352633714675903320e-01 4.799230992794036865e-01 7.312264442443847656e-01 1.000000000000000000e+00 -8.379700183868408203e-01 4.741407036781311035e-01 7.283967733383178711e-01 1.000000000000000000e+00 -8.406766653060913086e-01 4.683583378791809082e-01 7.255671024322509766e-01 1.000000000000000000e+00 -8.433833122253417969e-01 4.625759422779083252e-01 7.227374315261840820e-01 1.000000000000000000e+00 -8.460899591445922852e-01 4.567935466766357422e-01 7.199077010154724121e-01 1.000000000000000000e+00 -8.487966060638427734e-01 4.510111510753631592e-01 7.170780301094055176e-01 1.000000000000000000e+00 -8.515032529830932617e-01 4.452287554740905762e-01 7.142483592033386230e-01 1.000000000000000000e+00 -8.542098999023437500e-01 4.394463598728179932e-01 7.114186882972717285e-01 1.000000000000000000e+00 -8.569165468215942383e-01 4.336639642715454102e-01 7.085890173912048340e-01 1.000000000000000000e+00 -8.596231937408447266e-01 4.278815984725952148e-01 7.057593464851379395e-01 1.000000000000000000e+00 -8.623299002647399902e-01 4.220992028713226318e-01 7.029296159744262695e-01 1.000000000000000000e+00 -8.650365471839904785e-01 4.163168072700500488e-01 7.000999450683593750e-01 1.000000000000000000e+00 -8.677431941032409668e-01 4.105344116687774658e-01 6.972702741622924805e-01 1.000000000000000000e+00 -8.704498410224914551e-01 4.047520160675048828e-01 6.944406032562255859e-01 1.000000000000000000e+00 -8.731564879417419434e-01 3.989696204662322998e-01 6.916109323501586914e-01 1.000000000000000000e+00 -8.750019073486328125e-01 3.923875391483306885e-01 6.878585219383239746e-01 1.000000000000000000e+00 -8.759861588478088379e-01 3.850057721138000488e-01 6.831833720207214355e-01 1.000000000000000000e+00 -8.769704103469848633e-01 3.776240050792694092e-01 6.785082817077636719e-01 1.000000000000000000e+00 -8.779546618461608887e-01 3.702422082424163818e-01 6.738331317901611328e-01 1.000000000000000000e+00 -8.789388537406921387e-01 3.628604412078857422e-01 6.691580414772033691e-01 1.000000000000000000e+00 -8.799231052398681641e-01 3.554786741733551025e-01 6.644828915596008301e-01 1.000000000000000000e+00 -8.809073567390441895e-01 3.480968773365020752e-01 6.598077416419982910e-01 1.000000000000000000e+00 -8.818916082382202148e-01 3.407151103019714355e-01 6.551326513290405273e-01 1.000000000000000000e+00 -8.828758001327514648e-01 3.333333432674407959e-01 6.504575014114379883e-01 1.000000000000000000e+00 -8.838600516319274902e-01 3.259515464305877686e-01 6.457824110984802246e-01 1.000000000000000000e+00 -8.848443031311035156e-01 3.185697793960571289e-01 6.411072611808776855e-01 1.000000000000000000e+00 -8.858285546302795410e-01 3.111880123615264893e-01 6.364321708679199219e-01 1.000000000000000000e+00 -8.868127465248107910e-01 3.038062155246734619e-01 6.317570209503173828e-01 1.000000000000000000e+00 -8.877969980239868164e-01 2.964244484901428223e-01 6.270818710327148438e-01 1.000000000000000000e+00 -8.887812495231628418e-01 2.890426814556121826e-01 6.224067807197570801e-01 1.000000000000000000e+00 -8.897655010223388672e-01 2.816609144210815430e-01 6.177316308021545410e-01 1.000000000000000000e+00 -8.907496929168701172e-01 2.742791175842285156e-01 6.130565404891967773e-01 1.000000000000000000e+00 -8.917339444160461426e-01 2.668973505496978760e-01 6.083813905715942383e-01 1.000000000000000000e+00 -8.927181959152221680e-01 2.595155835151672363e-01 6.037062406539916992e-01 1.000000000000000000e+00 -8.937024474143981934e-01 2.521337866783142090e-01 5.990311503410339355e-01 1.000000000000000000e+00 -8.946866393089294434e-01 2.447520196437835693e-01 5.943560004234313965e-01 1.000000000000000000e+00 -8.956708908081054688e-01 2.373702377080917358e-01 5.896809101104736328e-01 1.000000000000000000e+00 -8.966551423072814941e-01 2.299884706735610962e-01 5.850057601928710938e-01 1.000000000000000000e+00 -8.976393938064575195e-01 2.226066887378692627e-01 5.803306698799133301e-01 1.000000000000000000e+00 -8.986235857009887695e-01 2.152249068021774292e-01 5.756555199623107910e-01 1.000000000000000000e+00 -8.996078372001647949e-01 2.078431397676467896e-01 5.709803700447082520e-01 1.000000000000000000e+00 -9.005920886993408203e-01 2.004613578319549561e-01 5.663052797317504883e-01 1.000000000000000000e+00 -9.015763401985168457e-01 1.930795907974243164e-01 5.616301298141479492e-01 1.000000000000000000e+00 -9.025605320930480957e-01 1.856978088617324829e-01 5.569550395011901855e-01 1.000000000000000000e+00 -9.035447835922241211e-01 1.783160269260406494e-01 5.522798895835876465e-01 1.000000000000000000e+00 -9.045290350914001465e-01 1.709342598915100098e-01 5.476047396659851074e-01 1.000000000000000000e+00 -9.055132865905761719e-01 1.635524779558181763e-01 5.429296493530273438e-01 1.000000000000000000e+00 -9.039599895477294922e-01 1.590157598257064819e-01 5.371779799461364746e-01 1.000000000000000000e+00 -9.008842706680297852e-01 1.561860889196395874e-01 5.307804942131042480e-01 1.000000000000000000e+00 -8.978085517883300781e-01 1.533564031124114990e-01 5.243829488754272461e-01 1.000000000000000000e+00 -8.947327733039855957e-01 1.505267173051834106e-01 5.179854035377502441e-01 1.000000000000000000e+00 -8.916570544242858887e-01 1.476970463991165161e-01 5.115878582000732422e-01 1.000000000000000000e+00 -8.885813355445861816e-01 1.448673605918884277e-01 5.051903128623962402e-01 1.000000000000000000e+00 -8.855055570602416992e-01 1.420376747846603394e-01 4.987927675247192383e-01 1.000000000000000000e+00 -8.824298381805419922e-01 1.392080038785934448e-01 4.923952221870422363e-01 1.000000000000000000e+00 -8.793541193008422852e-01 1.363783180713653564e-01 4.859977066516876221e-01 1.000000000000000000e+00 -8.762783408164978027e-01 1.335486322641372681e-01 4.796001613140106201e-01 1.000000000000000000e+00 -8.732026219367980957e-01 1.307189613580703735e-01 4.732026159763336182e-01 1.000000000000000000e+00 -8.701269030570983887e-01 1.278892755508422852e-01 4.668050706386566162e-01 1.000000000000000000e+00 -8.670511245727539062e-01 1.250595897436141968e-01 4.604075253009796143e-01 1.000000000000000000e+00 -8.639754056930541992e-01 1.222299113869667053e-01 4.540100097656250000e-01 1.000000000000000000e+00 -8.608996272087097168e-01 1.194002330303192139e-01 4.476124644279479980e-01 1.000000000000000000e+00 -8.578239083290100098e-01 1.165705472230911255e-01 4.412149190902709961e-01 1.000000000000000000e+00 -8.547481894493103027e-01 1.137408688664436340e-01 4.348173737525939941e-01 1.000000000000000000e+00 -8.516724109649658203e-01 1.109111905097961426e-01 4.284198284149169922e-01 1.000000000000000000e+00 -8.485966920852661133e-01 1.080815047025680542e-01 4.220223128795623779e-01 1.000000000000000000e+00 -8.455209732055664062e-01 1.052518263459205627e-01 4.156247675418853760e-01 1.000000000000000000e+00 -8.424451947212219238e-01 1.024221479892730713e-01 4.092272222042083740e-01 1.000000000000000000e+00 -8.393694758415222168e-01 9.959246218204498291e-02 4.028296768665313721e-01 1.000000000000000000e+00 -8.362937569618225098e-01 9.676278382539749146e-02 3.964321315288543701e-01 1.000000000000000000e+00 -8.332179784774780273e-01 9.393310546875000000e-02 3.900346159934997559e-01 1.000000000000000000e+00 -8.301422595977783203e-01 9.110341966152191162e-02 3.836370706558227539e-01 1.000000000000000000e+00 -8.270665407180786133e-01 8.827374130487442017e-02 3.772395253181457520e-01 1.000000000000000000e+00 -8.239907622337341309e-01 8.544406294822692871e-02 3.708419799804687500e-01 1.000000000000000000e+00 -8.209150433540344238e-01 8.261437714099884033e-02 3.644444346427917480e-01 1.000000000000000000e+00 -8.178392648696899414e-01 7.978469878435134888e-02 3.580469191074371338e-01 1.000000000000000000e+00 -8.147635459899902344e-01 7.695502042770385742e-02 3.516493737697601318e-01 1.000000000000000000e+00 -8.116878271102905273e-01 7.412533462047576904e-02 3.452518284320831299e-01 1.000000000000000000e+00 -8.086120486259460449e-01 7.129565626382827759e-02 3.388542830944061279e-01 1.000000000000000000e+00 -8.028604388236999512e-01 6.892733275890350342e-02 3.355017304420471191e-01 1.000000000000000000e+00 -7.962168455123901367e-01 6.671280413866043091e-02 3.331641554832458496e-01 1.000000000000000000e+00 -7.895732522010803223e-01 6.449826806783676147e-02 3.308266103267669678e-01 1.000000000000000000e+00 -7.829296588897705078e-01 6.228373572230339050e-02 3.284890353679656982e-01 1.000000000000000000e+00 -7.762860655784606934e-01 6.006920337677001953e-02 3.261514902114868164e-01 1.000000000000000000e+00 -7.696424722671508789e-01 5.785467103123664856e-02 3.238139152526855469e-01 1.000000000000000000e+00 -7.629988193511962891e-01 5.564013868570327759e-02 3.214763700962066650e-01 1.000000000000000000e+00 -7.563552260398864746e-01 5.342560634016990662e-02 3.191387951374053955e-01 1.000000000000000000e+00 -7.497116327285766602e-01 5.121107399463653564e-02 3.168012201786041260e-01 1.000000000000000000e+00 -7.430680394172668457e-01 4.899654164910316467e-02 3.144636750221252441e-01 1.000000000000000000e+00 -7.364244461059570312e-01 4.678200557827949524e-02 3.121261000633239746e-01 1.000000000000000000e+00 -7.297808527946472168e-01 4.456747323274612427e-02 3.097885549068450928e-01 1.000000000000000000e+00 -7.231372594833374023e-01 4.235294088721275330e-02 3.074509799480438232e-01 1.000000000000000000e+00 -7.164936661720275879e-01 4.013840854167938232e-02 3.051134049892425537e-01 1.000000000000000000e+00 -7.098500728607177734e-01 3.792387619614601135e-02 3.027758598327636719e-01 1.000000000000000000e+00 -7.032064795494079590e-01 3.570934385061264038e-02 3.004382848739624023e-01 1.000000000000000000e+00 -6.965628862380981445e-01 3.349481150507926941e-02 2.981007397174835205e-01 1.000000000000000000e+00 -6.899192333221435547e-01 3.128027543425559998e-02 2.957631647586822510e-01 1.000000000000000000e+00 -6.832756400108337402e-01 2.906574308872222900e-02 2.934256196022033691e-01 1.000000000000000000e+00 -6.766320466995239258e-01 2.685121074318885803e-02 2.910880446434020996e-01 1.000000000000000000e+00 -6.699884533882141113e-01 2.463667839765548706e-02 2.887504696846008301e-01 1.000000000000000000e+00 -6.633448600769042969e-01 2.242214605212211609e-02 2.864129245281219482e-01 1.000000000000000000e+00 -6.567012667655944824e-01 2.020761184394359589e-02 2.840753495693206787e-01 1.000000000000000000e+00 -6.500576734542846680e-01 1.799307949841022491e-02 2.817378044128417969e-01 1.000000000000000000e+00 -6.434140801429748535e-01 1.577854715287685394e-02 2.794002294540405273e-01 1.000000000000000000e+00 -6.367704868316650391e-01 1.356401387602090836e-02 2.770626544952392578e-01 1.000000000000000000e+00 -6.301268935203552246e-01 1.134948059916496277e-02 2.747251093387603760e-01 1.000000000000000000e+00 -6.234833002090454102e-01 9.134948253631591797e-03 2.723875343799591064e-01 1.000000000000000000e+00 -6.168396472930908203e-01 6.920415442436933517e-03 2.700499892234802246e-01 1.000000000000000000e+00 -6.101960539817810059e-01 4.705882165580987930e-03 2.677124142646789551e-01 1.000000000000000000e+00 -6.035524606704711914e-01 2.491349587216973305e-03 2.653748691082000732e-01 1.000000000000000000e+00 -5.969088673591613770e-01 2.768166013993322849e-04 2.630372941493988037e-01 1.000000000000000000e+00 -5.908035635948181152e-01 0.000000000000000000e+00 2.588696777820587158e-01 1.000000000000000000e+00 -5.847750902175903320e-01 0.000000000000000000e+00 2.544406056404113770e-01 1.000000000000000000e+00 -5.787466168403625488e-01 0.000000000000000000e+00 2.500115334987640381e-01 1.000000000000000000e+00 -5.727182030677795410e-01 0.000000000000000000e+00 2.455824613571166992e-01 1.000000000000000000e+00 -5.666897296905517578e-01 0.000000000000000000e+00 2.411534041166305542e-01 1.000000000000000000e+00 -5.606612563133239746e-01 0.000000000000000000e+00 2.367243319749832153e-01 1.000000000000000000e+00 -5.546328425407409668e-01 0.000000000000000000e+00 2.322952747344970703e-01 1.000000000000000000e+00 -5.486043691635131836e-01 0.000000000000000000e+00 2.278662025928497314e-01 1.000000000000000000e+00 -5.425759553909301758e-01 0.000000000000000000e+00 2.234371453523635864e-01 1.000000000000000000e+00 -5.365474820137023926e-01 0.000000000000000000e+00 2.190080732107162476e-01 1.000000000000000000e+00 -5.305190086364746094e-01 0.000000000000000000e+00 2.145790010690689087e-01 1.000000000000000000e+00 -5.244905948638916016e-01 0.000000000000000000e+00 2.101499438285827637e-01 1.000000000000000000e+00 -5.184621214866638184e-01 0.000000000000000000e+00 2.057208716869354248e-01 1.000000000000000000e+00 -5.124337077140808105e-01 0.000000000000000000e+00 2.012918144464492798e-01 1.000000000000000000e+00 -5.064052343368530273e-01 0.000000000000000000e+00 1.968627423048019409e-01 1.000000000000000000e+00 -5.003767609596252441e-01 0.000000000000000000e+00 1.924336850643157959e-01 1.000000000000000000e+00 -4.943483173847198486e-01 0.000000000000000000e+00 1.880046129226684570e-01 1.000000000000000000e+00 -4.883198738098144531e-01 0.000000000000000000e+00 1.835755407810211182e-01 1.000000000000000000e+00 -4.822914302349090576e-01 0.000000000000000000e+00 1.791464835405349731e-01 1.000000000000000000e+00 -4.762629866600036621e-01 0.000000000000000000e+00 1.747174113988876343e-01 1.000000000000000000e+00 -4.702345132827758789e-01 0.000000000000000000e+00 1.702883541584014893e-01 1.000000000000000000e+00 -4.642060697078704834e-01 0.000000000000000000e+00 1.658592820167541504e-01 1.000000000000000000e+00 -4.581776261329650879e-01 0.000000000000000000e+00 1.614302247762680054e-01 1.000000000000000000e+00 -4.521491825580596924e-01 0.000000000000000000e+00 1.570011526346206665e-01 1.000000000000000000e+00 -4.461207091808319092e-01 0.000000000000000000e+00 1.525720804929733276e-01 1.000000000000000000e+00 -4.400922656059265137e-01 0.000000000000000000e+00 1.481430232524871826e-01 1.000000000000000000e+00 -4.340638220310211182e-01 0.000000000000000000e+00 1.437139511108398438e-01 1.000000000000000000e+00 -4.280353784561157227e-01 0.000000000000000000e+00 1.392848938703536987e-01 1.000000000000000000e+00 -4.220069348812103271e-01 0.000000000000000000e+00 1.348558217287063599e-01 1.000000000000000000e+00 -4.159784615039825439e-01 0.000000000000000000e+00 1.304267644882202148e-01 1.000000000000000000e+00 -4.099500179290771484e-01 0.000000000000000000e+00 1.259976923465728760e-01 1.000000000000000000e+00 -4.039215743541717529e-01 0.000000000000000000e+00 1.215686276555061340e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Purples b/fastplotlib/utils/colormaps/Purples deleted file mode 100644 index 3d6079876..000000000 --- a/fastplotlib/utils/colormaps/Purples +++ /dev/null @@ -1,256 +0,0 @@ -9.882352948188781738e-01 9.843137264251708984e-01 9.921568632125854492e-01 1.000000000000000000e+00 -9.866359233856201172e-01 9.825913310050964355e-01 9.911726117134094238e-01 1.000000000000000000e+00 -9.850365519523620605e-01 9.808688759803771973e-01 9.901883602142333984e-01 1.000000000000000000e+00 -9.834371209144592285e-01 9.791464805603027344e-01 9.892041683197021484e-01 1.000000000000000000e+00 -9.818377494812011719e-01 9.774240851402282715e-01 9.882199168205261230e-01 1.000000000000000000e+00 -9.802383780479431152e-01 9.757016301155090332e-01 9.872356653213500977e-01 1.000000000000000000e+00 -9.786390066146850586e-01 9.739792346954345703e-01 9.862514138221740723e-01 1.000000000000000000e+00 -9.770395755767822266e-01 9.722568392753601074e-01 9.852672219276428223e-01 1.000000000000000000e+00 -9.754402041435241699e-01 9.705343842506408691e-01 9.842829704284667969e-01 1.000000000000000000e+00 -9.738408327102661133e-01 9.688119888305664062e-01 9.832987189292907715e-01 1.000000000000000000e+00 -9.722414612770080566e-01 9.670895934104919434e-01 9.823144674301147461e-01 1.000000000000000000e+00 -9.706420898437500000e-01 9.653671383857727051e-01 9.813302755355834961e-01 1.000000000000000000e+00 -9.690426588058471680e-01 9.636447429656982422e-01 9.803460240364074707e-01 1.000000000000000000e+00 -9.674432873725891113e-01 9.619223475456237793e-01 9.793617725372314453e-01 1.000000000000000000e+00 -9.658439159393310547e-01 9.601999521255493164e-01 9.783775210380554199e-01 1.000000000000000000e+00 -9.642445445060729980e-01 9.584774971008300781e-01 9.773933291435241699e-01 1.000000000000000000e+00 -9.626451134681701660e-01 9.567551016807556152e-01 9.764090776443481445e-01 1.000000000000000000e+00 -9.610457420349121094e-01 9.550327062606811523e-01 9.754248261451721191e-01 1.000000000000000000e+00 -9.594463706016540527e-01 9.533102512359619141e-01 9.744405746459960938e-01 1.000000000000000000e+00 -9.578469991683959961e-01 9.515878558158874512e-01 9.734563827514648438e-01 1.000000000000000000e+00 -9.562475681304931641e-01 9.498654603958129883e-01 9.724721312522888184e-01 1.000000000000000000e+00 -9.546481966972351074e-01 9.481430053710937500e-01 9.714878797531127930e-01 1.000000000000000000e+00 -9.530488252639770508e-01 9.464206099510192871e-01 9.705036282539367676e-01 1.000000000000000000e+00 -9.514494538307189941e-01 9.446982145309448242e-01 9.695194363594055176e-01 1.000000000000000000e+00 -9.498500823974609375e-01 9.429757595062255859e-01 9.685351848602294922e-01 1.000000000000000000e+00 -9.482506513595581055e-01 9.412533640861511230e-01 9.675509333610534668e-01 1.000000000000000000e+00 -9.466512799263000488e-01 9.395309686660766602e-01 9.665666818618774414e-01 1.000000000000000000e+00 -9.450519084930419922e-01 9.378085136413574219e-01 9.655824899673461914e-01 1.000000000000000000e+00 -9.434525370597839355e-01 9.360861182212829590e-01 9.645982384681701660e-01 1.000000000000000000e+00 -9.418531060218811035e-01 9.343637228012084961e-01 9.636139869689941406e-01 1.000000000000000000e+00 -9.402537345886230469e-01 9.326412677764892578e-01 9.626297354698181152e-01 1.000000000000000000e+00 -9.386543631553649902e-01 9.309188723564147949e-01 9.616455435752868652e-01 1.000000000000000000e+00 -9.369319677352905273e-01 9.291195869445800781e-01 9.606305360794067383e-01 1.000000000000000000e+00 -9.343483448028564453e-01 9.267820119857788086e-01 9.594002366065979004e-01 1.000000000000000000e+00 -9.317647218704223633e-01 9.244444370269775391e-01 9.581699371337890625e-01 1.000000000000000000e+00 -9.291810989379882812e-01 9.221068620681762695e-01 9.569396376609802246e-01 1.000000000000000000e+00 -9.265974760055541992e-01 9.197693467140197754e-01 9.557093381881713867e-01 1.000000000000000000e+00 -9.240138530731201172e-01 9.174317717552185059e-01 9.544790387153625488e-01 1.000000000000000000e+00 -9.214302301406860352e-01 9.150941967964172363e-01 9.532487392425537109e-01 1.000000000000000000e+00 -9.188466072082519531e-01 9.127566218376159668e-01 9.520184397697448730e-01 1.000000000000000000e+00 -9.162629842758178711e-01 9.104190468788146973e-01 9.507881402969360352e-01 1.000000000000000000e+00 -9.136793613433837891e-01 9.080815315246582031e-01 9.495578408241271973e-01 1.000000000000000000e+00 -9.110957384109497070e-01 9.057439565658569336e-01 9.483275413513183594e-01 1.000000000000000000e+00 -9.085121154785156250e-01 9.034063816070556641e-01 9.470972418785095215e-01 1.000000000000000000e+00 -9.059284925460815430e-01 9.010688066482543945e-01 9.458670020103454590e-01 1.000000000000000000e+00 -9.033448696136474609e-01 8.987312316894531250e-01 9.446367025375366211e-01 1.000000000000000000e+00 -9.007612466812133789e-01 8.963937163352966309e-01 9.434064030647277832e-01 1.000000000000000000e+00 -8.981776237487792969e-01 8.940561413764953613e-01 9.421761035919189453e-01 1.000000000000000000e+00 -8.955940008163452148e-01 8.917185664176940918e-01 9.409458041191101074e-01 1.000000000000000000e+00 -8.930103778839111328e-01 8.893809914588928223e-01 9.397155046463012695e-01 1.000000000000000000e+00 -8.904267549514770508e-01 8.870434165000915527e-01 9.384852051734924316e-01 1.000000000000000000e+00 -8.878431320190429688e-01 8.847059011459350586e-01 9.372549057006835938e-01 1.000000000000000000e+00 -8.852595090866088867e-01 8.823683261871337891e-01 9.360246062278747559e-01 1.000000000000000000e+00 -8.826758861541748047e-01 8.800307512283325195e-01 9.347943067550659180e-01 1.000000000000000000e+00 -8.800922632217407227e-01 8.776931762695312500e-01 9.335640072822570801e-01 1.000000000000000000e+00 -8.775086402893066406e-01 8.753556609153747559e-01 9.323337078094482422e-01 1.000000000000000000e+00 -8.749250173568725586e-01 8.730180859565734863e-01 9.311034083366394043e-01 1.000000000000000000e+00 -8.723413944244384766e-01 8.706805109977722168e-01 9.298731088638305664e-01 1.000000000000000000e+00 -8.697577714920043945e-01 8.683429360389709473e-01 9.286428093910217285e-01 1.000000000000000000e+00 -8.671741485595703125e-01 8.660053610801696777e-01 9.274125099182128906e-01 1.000000000000000000e+00 -8.645905256271362305e-01 8.636678457260131836e-01 9.261822104454040527e-01 1.000000000000000000e+00 -8.620069026947021484e-01 8.613302707672119141e-01 9.249519705772399902e-01 1.000000000000000000e+00 -8.594232797622680664e-01 8.589926958084106445e-01 9.237216711044311523e-01 1.000000000000000000e+00 -8.568396568298339844e-01 8.566551208496093750e-01 9.224913716316223145e-01 1.000000000000000000e+00 -8.539792299270629883e-01 8.540099859237670898e-01 9.211072921752929688e-01 1.000000000000000000e+00 -8.502883315086364746e-01 8.504421114921569824e-01 9.192618131637573242e-01 1.000000000000000000e+00 -8.465974330902099609e-01 8.468742966651916504e-01 9.174163937568664551e-01 1.000000000000000000e+00 -8.429065942764282227e-01 8.433064222335815430e-01 9.155709147453308105e-01 1.000000000000000000e+00 -8.392156958580017090e-01 8.397385478019714355e-01 9.137254953384399414e-01 1.000000000000000000e+00 -8.355247974395751953e-01 8.361707329750061035e-01 9.118800759315490723e-01 1.000000000000000000e+00 -8.318338990211486816e-01 8.326028585433959961e-01 9.100345969200134277e-01 1.000000000000000000e+00 -8.281430006027221680e-01 8.290349841117858887e-01 9.081891775131225586e-01 1.000000000000000000e+00 -8.244521617889404297e-01 8.254671096801757812e-01 9.063436985015869141e-01 1.000000000000000000e+00 -8.207612633705139160e-01 8.218992948532104492e-01 9.044982790946960449e-01 1.000000000000000000e+00 -8.170703649520874023e-01 8.183314204216003418e-01 9.026528000831604004e-01 1.000000000000000000e+00 -8.133794665336608887e-01 8.147635459899902344e-01 9.008073806762695312e-01 1.000000000000000000e+00 -8.096885681152343750e-01 8.111956715583801270e-01 8.989619612693786621e-01 1.000000000000000000e+00 -8.059976696968078613e-01 8.076278567314147949e-01 8.971164822578430176e-01 1.000000000000000000e+00 -8.023068308830261230e-01 8.040599822998046875e-01 8.952710628509521484e-01 1.000000000000000000e+00 -7.986159324645996094e-01 8.004921078681945801e-01 8.934255838394165039e-01 1.000000000000000000e+00 -7.949250340461730957e-01 7.969242334365844727e-01 8.915801644325256348e-01 1.000000000000000000e+00 -7.912341356277465820e-01 7.933564186096191406e-01 8.897347450256347656e-01 1.000000000000000000e+00 -7.875432372093200684e-01 7.897885441780090332e-01 8.878892660140991211e-01 1.000000000000000000e+00 -7.838523387908935547e-01 7.862206697463989258e-01 8.860438466072082520e-01 1.000000000000000000e+00 -7.801614999771118164e-01 7.826528549194335938e-01 8.841983675956726074e-01 1.000000000000000000e+00 -7.764706015586853027e-01 7.790849804878234863e-01 8.823529481887817383e-01 1.000000000000000000e+00 -7.727797031402587891e-01 7.755171060562133789e-01 8.805074691772460938e-01 1.000000000000000000e+00 -7.690888047218322754e-01 7.719492316246032715e-01 8.786620497703552246e-01 1.000000000000000000e+00 -7.653979063034057617e-01 7.683814167976379395e-01 8.768166303634643555e-01 1.000000000000000000e+00 -7.617070078849792480e-01 7.648135423660278320e-01 8.749711513519287109e-01 1.000000000000000000e+00 -7.580161690711975098e-01 7.612456679344177246e-01 8.731257319450378418e-01 1.000000000000000000e+00 -7.543252706527709961e-01 7.576777935028076172e-01 8.712802529335021973e-01 1.000000000000000000e+00 -7.506343722343444824e-01 7.541099786758422852e-01 8.694348335266113281e-01 1.000000000000000000e+00 -7.469434738159179688e-01 7.505421042442321777e-01 8.675894141197204590e-01 1.000000000000000000e+00 -7.432525753974914551e-01 7.469742298126220703e-01 8.657439351081848145e-01 1.000000000000000000e+00 -7.395617365837097168e-01 7.434063553810119629e-01 8.638985157012939453e-01 1.000000000000000000e+00 -7.358708381652832031e-01 7.395617365837097168e-01 8.618223667144775391e-01 1.000000000000000000e+00 -7.321799397468566895e-01 7.352556586265563965e-01 8.593617677688598633e-01 1.000000000000000000e+00 -7.284890413284301758e-01 7.309496402740478516e-01 8.569011688232421875e-01 1.000000000000000000e+00 -7.247981429100036621e-01 7.266436219215393066e-01 8.544406294822692871e-01 1.000000000000000000e+00 -7.211072444915771484e-01 7.223375439643859863e-01 8.519800305366516113e-01 1.000000000000000000e+00 -7.174164056777954102e-01 7.180315256118774414e-01 8.495194315910339355e-01 1.000000000000000000e+00 -7.137255072593688965e-01 7.137255072593688965e-01 8.470588326454162598e-01 1.000000000000000000e+00 -7.100346088409423828e-01 7.094194293022155762e-01 8.445982336997985840e-01 1.000000000000000000e+00 -7.063437104225158691e-01 7.051134109497070312e-01 8.421376347541809082e-01 1.000000000000000000e+00 -7.026528120040893555e-01 7.008073925971984863e-01 8.396770358085632324e-01 1.000000000000000000e+00 -6.989619135856628418e-01 6.965013742446899414e-01 8.372164368629455566e-01 1.000000000000000000e+00 -6.952710747718811035e-01 6.921952962875366211e-01 8.347558379173278809e-01 1.000000000000000000e+00 -6.915801763534545898e-01 6.878892779350280762e-01 8.322952985763549805e-01 1.000000000000000000e+00 -6.878892779350280762e-01 6.835832595825195312e-01 8.298346996307373047e-01 1.000000000000000000e+00 -6.841983795166015625e-01 6.792771816253662109e-01 8.273741006851196289e-01 1.000000000000000000e+00 -6.805074810981750488e-01 6.749711632728576660e-01 8.249135017395019531e-01 1.000000000000000000e+00 -6.768165826797485352e-01 6.706651449203491211e-01 8.224529027938842773e-01 1.000000000000000000e+00 -6.731257438659667969e-01 6.663590669631958008e-01 8.199923038482666016e-01 1.000000000000000000e+00 -6.694348454475402832e-01 6.620530486106872559e-01 8.175317049026489258e-01 1.000000000000000000e+00 -6.657439470291137695e-01 6.577470302581787109e-01 8.150711059570312500e-01 1.000000000000000000e+00 -6.620530486106872559e-01 6.534410119056701660e-01 8.126105070114135742e-01 1.000000000000000000e+00 -6.583621501922607422e-01 6.491349339485168457e-01 8.101499676704406738e-01 1.000000000000000000e+00 -6.546712517738342285e-01 6.448289155960083008e-01 8.076893687248229980e-01 1.000000000000000000e+00 -6.509804129600524902e-01 6.405228972434997559e-01 8.052287697792053223e-01 1.000000000000000000e+00 -6.472895145416259766e-01 6.362168192863464355e-01 8.027681708335876465e-01 1.000000000000000000e+00 -6.435986161231994629e-01 6.319108009338378906e-01 8.003075718879699707e-01 1.000000000000000000e+00 -6.399077177047729492e-01 6.276047825813293457e-01 7.978469729423522949e-01 1.000000000000000000e+00 -6.362168192863464355e-01 6.232987046241760254e-01 7.953863739967346191e-01 1.000000000000000000e+00 -6.325259804725646973e-01 6.189926862716674805e-01 7.929257750511169434e-01 1.000000000000000000e+00 -6.288350820541381836e-01 6.146866679191589355e-01 7.904651761054992676e-01 1.000000000000000000e+00 -6.251441836357116699e-01 6.103806495666503906e-01 7.880046367645263672e-01 1.000000000000000000e+00 -6.214532852172851562e-01 6.060745716094970703e-01 7.855440378189086914e-01 1.000000000000000000e+00 -6.177623867988586426e-01 6.021376252174377441e-01 7.834525108337402344e-01 1.000000000000000000e+00 -6.140714883804321289e-01 5.985698103904724121e-01 7.817301154136657715e-01 1.000000000000000000e+00 -6.103806495666503906e-01 5.950019359588623047e-01 7.800076603889465332e-01 1.000000000000000000e+00 -6.066897511482238770e-01 5.914340615272521973e-01 7.782852649688720703e-01 1.000000000000000000e+00 -6.029988527297973633e-01 5.878661870956420898e-01 7.765628695487976074e-01 1.000000000000000000e+00 -5.993079543113708496e-01 5.842983722686767578e-01 7.748404741287231445e-01 1.000000000000000000e+00 -5.956170558929443359e-01 5.807304978370666504e-01 7.731180191040039062e-01 1.000000000000000000e+00 -5.919261574745178223e-01 5.771626234054565430e-01 7.713956236839294434e-01 1.000000000000000000e+00 -5.882353186607360840e-01 5.735947489738464355e-01 7.696732282638549805e-01 1.000000000000000000e+00 -5.845444202423095703e-01 5.700269341468811035e-01 7.679507732391357422e-01 1.000000000000000000e+00 -5.808535218238830566e-01 5.664590597152709961e-01 7.662283778190612793e-01 1.000000000000000000e+00 -5.771626234054565430e-01 5.628911852836608887e-01 7.645059823989868164e-01 1.000000000000000000e+00 -5.734717249870300293e-01 5.593233108520507812e-01 7.627835273742675781e-01 1.000000000000000000e+00 -5.697808265686035156e-01 5.557554960250854492e-01 7.610611319541931152e-01 1.000000000000000000e+00 -5.660899877548217773e-01 5.521876215934753418e-01 7.593387365341186523e-01 1.000000000000000000e+00 -5.623990893363952637e-01 5.486197471618652344e-01 7.576162815093994141e-01 1.000000000000000000e+00 -5.587081909179687500e-01 5.450519323348999023e-01 7.558938860893249512e-01 1.000000000000000000e+00 -5.550172924995422363e-01 5.414840579032897949e-01 7.541714906692504883e-01 1.000000000000000000e+00 -5.513263940811157227e-01 5.379161834716796875e-01 7.524490356445312500e-01 1.000000000000000000e+00 -5.476354956626892090e-01 5.343483090400695801e-01 7.507266402244567871e-01 1.000000000000000000e+00 -5.439446568489074707e-01 5.307804942131042480e-01 7.490042448043823242e-01 1.000000000000000000e+00 -5.402537584304809570e-01 5.272126197814941406e-01 7.472817897796630859e-01 1.000000000000000000e+00 -5.365628600120544434e-01 5.236447453498840332e-01 7.455593943595886230e-01 1.000000000000000000e+00 -5.328719615936279297e-01 5.200768709182739258e-01 7.438369989395141602e-01 1.000000000000000000e+00 -5.291810631752014160e-01 5.165090560913085938e-01 7.421145439147949219e-01 1.000000000000000000e+00 -5.254902243614196777e-01 5.129411816596984863e-01 7.403921484947204590e-01 1.000000000000000000e+00 -5.217993259429931641e-01 5.093733072280883789e-01 7.386697530746459961e-01 1.000000000000000000e+00 -5.181084275245666504e-01 5.058054327964782715e-01 7.369473576545715332e-01 1.000000000000000000e+00 -5.144175291061401367e-01 5.022376179695129395e-01 7.352249026298522949e-01 1.000000000000000000e+00 -5.107266306877136230e-01 4.986697435379028320e-01 7.335025072097778320e-01 1.000000000000000000e+00 -5.070357322692871094e-01 4.951018691062927246e-01 7.317801117897033691e-01 1.000000000000000000e+00 -5.033448934555053711e-01 4.915340244770050049e-01 7.300576567649841309e-01 1.000000000000000000e+00 -5.002691149711608887e-01 4.868127703666687012e-01 7.276431918144226074e-01 1.000000000000000000e+00 -4.975624680519104004e-01 4.813994765281677246e-01 7.248135209083557129e-01 1.000000000000000000e+00 -4.948558211326599121e-01 4.759861528873443604e-01 7.219838500022888184e-01 1.000000000000000000e+00 -4.921491742134094238e-01 4.705728590488433838e-01 7.191541790962219238e-01 1.000000000000000000e+00 -4.894425272941589355e-01 4.651595652103424072e-01 7.163245081901550293e-01 1.000000000000000000e+00 -4.867358803749084473e-01 4.597462415695190430e-01 7.134948372840881348e-01 1.000000000000000000e+00 -4.840292334556579590e-01 4.543329477310180664e-01 7.106651067733764648e-01 1.000000000000000000e+00 -4.813225567340850830e-01 4.489196538925170898e-01 7.078354358673095703e-01 1.000000000000000000e+00 -4.786159098148345947e-01 4.435063302516937256e-01 7.050057649612426758e-01 1.000000000000000000e+00 -4.759092628955841064e-01 4.380930364131927490e-01 7.021760940551757812e-01 1.000000000000000000e+00 -4.732026159763336182e-01 4.326797425746917725e-01 6.993464231491088867e-01 1.000000000000000000e+00 -4.704959690570831299e-01 4.272664487361907959e-01 6.965167522430419922e-01 1.000000000000000000e+00 -4.677893221378326416e-01 4.218531250953674316e-01 6.936870217323303223e-01 1.000000000000000000e+00 -4.650826752185821533e-01 4.164398312568664551e-01 6.908573508262634277e-01 1.000000000000000000e+00 -4.623759984970092773e-01 4.110265374183654785e-01 6.880276799201965332e-01 1.000000000000000000e+00 -4.596693515777587891e-01 4.056132137775421143e-01 6.851980090141296387e-01 1.000000000000000000e+00 -4.569627046585083008e-01 4.001999199390411377e-01 6.823683381080627441e-01 1.000000000000000000e+00 -4.542560577392578125e-01 3.947866261005401611e-01 6.795386672019958496e-01 1.000000000000000000e+00 -4.515494108200073242e-01 3.893733322620391846e-01 6.767089366912841797e-01 1.000000000000000000e+00 -4.488427639007568359e-01 3.839600086212158203e-01 6.738792657852172852e-01 1.000000000000000000e+00 -4.461360871791839600e-01 3.785467147827148438e-01 6.710495948791503906e-01 1.000000000000000000e+00 -4.434294402599334717e-01 3.731334209442138672e-01 6.682199239730834961e-01 1.000000000000000000e+00 -4.407227933406829834e-01 3.677200973033905029e-01 6.653902530670166016e-01 1.000000000000000000e+00 -4.380161464214324951e-01 3.623068034648895264e-01 6.625605821609497070e-01 1.000000000000000000e+00 -4.353094995021820068e-01 3.568935096263885498e-01 6.597308516502380371e-01 1.000000000000000000e+00 -4.326028525829315186e-01 3.514801859855651855e-01 6.569011807441711426e-01 1.000000000000000000e+00 -4.298962056636810303e-01 3.460668921470642090e-01 6.540715098381042480e-01 1.000000000000000000e+00 -4.271895289421081543e-01 3.406535983085632324e-01 6.512418389320373535e-01 1.000000000000000000e+00 -4.244828820228576660e-01 3.352403044700622559e-01 6.484121680259704590e-01 1.000000000000000000e+00 -4.217762351036071777e-01 3.298269808292388916e-01 6.455824971199035645e-01 1.000000000000000000e+00 -4.190695881843566895e-01 3.244136869907379150e-01 6.427527666091918945e-01 1.000000000000000000e+00 -4.163629412651062012e-01 3.190003931522369385e-01 6.399230957031250000e-01 1.000000000000000000e+00 -4.136562943458557129e-01 3.137716352939605713e-01 6.373702287673950195e-01 1.000000000000000000e+00 -4.109496474266052246e-01 3.086043894290924072e-01 6.349096298217773438e-01 1.000000000000000000e+00 -4.082429707050323486e-01 3.034371435642242432e-01 6.324490308761596680e-01 1.000000000000000000e+00 -4.055363237857818604e-01 2.982698976993560791e-01 6.299884915351867676e-01 1.000000000000000000e+00 -4.028296768665313721e-01 2.931026518344879150e-01 6.275278925895690918e-01 1.000000000000000000e+00 -4.001230299472808838e-01 2.879354059696197510e-01 6.250672936439514160e-01 1.000000000000000000e+00 -3.974163830280303955e-01 2.827681601047515869e-01 6.226066946983337402e-01 1.000000000000000000e+00 -3.947097361087799072e-01 2.776009142398834229e-01 6.201460957527160645e-01 1.000000000000000000e+00 -3.920030891895294189e-01 2.724336683750152588e-01 6.176854968070983887e-01 1.000000000000000000e+00 -3.892964124679565430e-01 2.672664225101470947e-01 6.152248978614807129e-01 1.000000000000000000e+00 -3.865897655487060547e-01 2.620992064476013184e-01 6.127642989158630371e-01 1.000000000000000000e+00 -3.838831186294555664e-01 2.569319605827331543e-01 6.103036999702453613e-01 1.000000000000000000e+00 -3.811764717102050781e-01 2.517647147178649902e-01 6.078431606292724609e-01 1.000000000000000000e+00 -3.784698247909545898e-01 2.465974688529968262e-01 6.053825616836547852e-01 1.000000000000000000e+00 -3.757631778717041016e-01 2.414302229881286621e-01 6.029219627380371094e-01 1.000000000000000000e+00 -3.730565309524536133e-01 2.362629771232604980e-01 6.004613637924194336e-01 1.000000000000000000e+00 -3.703498542308807373e-01 2.310957312583923340e-01 5.980007648468017578e-01 1.000000000000000000e+00 -3.676432073116302490e-01 2.259284853935241699e-01 5.955401659011840820e-01 1.000000000000000000e+00 -3.649365603923797607e-01 2.207612395286560059e-01 5.930795669555664062e-01 1.000000000000000000e+00 -3.622299134731292725e-01 2.155940085649490356e-01 5.906189680099487305e-01 1.000000000000000000e+00 -3.595232665538787842e-01 2.104267627000808716e-01 5.881584286689758301e-01 1.000000000000000000e+00 -3.568166196346282959e-01 2.052595168352127075e-01 5.856978297233581543e-01 1.000000000000000000e+00 -3.541099429130554199e-01 2.000922709703445435e-01 5.832372307777404785e-01 1.000000000000000000e+00 -3.514032959938049316e-01 1.949250251054763794e-01 5.807766318321228027e-01 1.000000000000000000e+00 -3.486966490745544434e-01 1.897577792406082153e-01 5.783160328865051270e-01 1.000000000000000000e+00 -3.459900021553039551e-01 1.845905482769012451e-01 5.758554339408874512e-01 1.000000000000000000e+00 -3.432833552360534668e-01 1.794233024120330811e-01 5.733948349952697754e-01 1.000000000000000000e+00 -3.405767083168029785e-01 1.742560565471649170e-01 5.709342360496520996e-01 1.000000000000000000e+00 -3.378700613975524902e-01 1.690888106822967529e-01 5.684736371040344238e-01 1.000000000000000000e+00 -3.351633846759796143e-01 1.639215648174285889e-01 5.660130977630615234e-01 1.000000000000000000e+00 -3.324567377567291260e-01 1.587543189525604248e-01 5.635524988174438477e-01 1.000000000000000000e+00 -3.297500908374786377e-01 1.535870879888534546e-01 5.610918998718261719e-01 1.000000000000000000e+00 -3.271510899066925049e-01 1.487427949905395508e-01 5.588465929031372070e-01 1.000000000000000000e+00 -3.245674669742584229e-01 1.439446359872817993e-01 5.566320419311523438e-01 1.000000000000000000e+00 -3.219838440418243408e-01 1.391464769840240479e-01 5.544175505638122559e-01 1.000000000000000000e+00 -3.194002211093902588e-01 1.343483328819274902e-01 5.522029995918273926e-01 1.000000000000000000e+00 -3.168165981769561768e-01 1.295501738786697388e-01 5.499884486198425293e-01 1.000000000000000000e+00 -3.142329752445220947e-01 1.247520148754119873e-01 5.477739572525024414e-01 1.000000000000000000e+00 -3.116493523120880127e-01 1.199538633227348328e-01 5.455594062805175781e-01 1.000000000000000000e+00 -3.090657293796539307e-01 1.151557117700576782e-01 5.433448553085327148e-01 1.000000000000000000e+00 -3.064821362495422363e-01 1.103575527667999268e-01 5.411303639411926270e-01 1.000000000000000000e+00 -3.038985133171081543e-01 1.055594012141227722e-01 5.389158129692077637e-01 1.000000000000000000e+00 -3.013148903846740723e-01 1.007612422108650208e-01 5.367012619972229004e-01 1.000000000000000000e+00 -2.987312674522399902e-01 9.596309065818786621e-02 5.344867110252380371e-01 1.000000000000000000e+00 -2.961476445198059082e-01 9.116493910551071167e-02 5.322722196578979492e-01 1.000000000000000000e+00 -2.935640215873718262e-01 8.636678010225296021e-02 5.300576686859130859e-01 1.000000000000000000e+00 -2.909803986549377441e-01 8.156862854957580566e-02 5.278431177139282227e-01 1.000000000000000000e+00 -2.883967757225036621e-01 7.677046954631805420e-02 5.256286263465881348e-01 1.000000000000000000e+00 -2.858131527900695801e-01 7.197231799364089966e-02 5.234140753746032715e-01 1.000000000000000000e+00 -2.832295298576354980e-01 6.717416644096374512e-02 5.211995244026184082e-01 1.000000000000000000e+00 -2.806459069252014160e-01 6.237600743770599365e-02 5.189850330352783203e-01 1.000000000000000000e+00 -2.780622839927673340e-01 5.757785588502883911e-02 5.167704820632934570e-01 1.000000000000000000e+00 -2.754786610603332520e-01 5.277970060706138611e-02 5.145559310913085938e-01 1.000000000000000000e+00 -2.728950381278991699e-01 4.798154532909393311e-02 5.123413801193237305e-01 1.000000000000000000e+00 -2.703114151954650879e-01 4.318339005112648010e-02 5.101268887519836426e-01 1.000000000000000000e+00 -2.677277922630310059e-01 3.838523477315902710e-02 5.079123377799987793e-01 1.000000000000000000e+00 -2.651441693305969238e-01 3.358708322048187256e-02 5.056977868080139160e-01 1.000000000000000000e+00 -2.625605463981628418e-01 2.878892794251441956e-02 5.034832954406738281e-01 1.000000000000000000e+00 -2.599769234657287598e-01 2.399077266454696655e-02 5.012687444686889648e-01 1.000000000000000000e+00 -2.573933005332946777e-01 1.919261738657951355e-02 4.990542232990264893e-01 1.000000000000000000e+00 -2.548096776008605957e-01 1.439446397125720978e-02 4.968396723270416260e-01 1.000000000000000000e+00 -2.522260546684265137e-01 9.596308693289756775e-03 4.946251511573791504e-01 1.000000000000000000e+00 -2.496424466371536255e-01 4.798154346644878387e-03 4.924106001853942871e-01 1.000000000000000000e+00 -2.470588237047195435e-01 0.000000000000000000e+00 4.901960790157318115e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/RdBu b/fastplotlib/utils/colormaps/RdBu deleted file mode 100644 index 6482fa00f..000000000 --- a/fastplotlib/utils/colormaps/RdBu +++ /dev/null @@ -1,256 +0,0 @@ -4.039215743541717529e-01 0.000000000000000000e+00 1.215686276555061340e-01 1.000000000000000000e+00 -4.154555797576904297e-01 3.690888173878192902e-03 1.234140694141387939e-01 1.000000000000000000e+00 -4.269896149635314941e-01 7.381776347756385803e-03 1.252595186233520508e-01 1.000000000000000000e+00 -4.385236501693725586e-01 1.107266452163457870e-02 1.271049529314041138e-01 1.000000000000000000e+00 -4.500576555728912354e-01 1.476355269551277161e-02 1.289504021406173706e-01 1.000000000000000000e+00 -4.615916907787322998e-01 1.845443993806838989e-02 1.307958513498306274e-01 1.000000000000000000e+00 -4.731257259845733643e-01 2.214532904326915741e-02 1.326412856578826904e-01 1.000000000000000000e+00 -4.846597313880920410e-01 2.583621628582477570e-02 1.344867348670959473e-01 1.000000000000000000e+00 -4.961937665939331055e-01 2.952710539102554321e-02 1.363321840763092041e-01 1.000000000000000000e+00 -5.077278017997741699e-01 3.321799263358116150e-02 1.381776183843612671e-01 1.000000000000000000e+00 -5.192618370056152344e-01 3.690887987613677979e-02 1.400230675935745239e-01 1.000000000000000000e+00 -5.307958722114562988e-01 4.059977084398269653e-02 1.418685168027877808e-01 1.000000000000000000e+00 -5.423298478126525879e-01 4.429065808653831482e-02 1.437139511108398438e-01 1.000000000000000000e+00 -5.538638830184936523e-01 4.798154532909393311e-02 1.455594003200531006e-01 1.000000000000000000e+00 -5.653979182243347168e-01 5.167243257164955139e-02 1.474048495292663574e-01 1.000000000000000000e+00 -5.769319534301757812e-01 5.536332353949546814e-02 1.492502838373184204e-01 1.000000000000000000e+00 -5.884659886360168457e-01 5.905421078205108643e-02 1.510957330465316772e-01 1.000000000000000000e+00 -6.000000238418579102e-01 6.274510174989700317e-02 1.529411822557449341e-01 1.000000000000000000e+00 -6.115339994430541992e-01 6.643598526716232300e-02 1.547866165637969971e-01 1.000000000000000000e+00 -6.230680346488952637e-01 7.012687623500823975e-02 1.566320657730102539e-01 1.000000000000000000e+00 -6.346020698547363281e-01 7.381775975227355957e-02 1.584775149822235107e-01 1.000000000000000000e+00 -6.461361050605773926e-01 7.750865072011947632e-02 1.603229492902755737e-01 1.000000000000000000e+00 -6.576701402664184570e-01 8.119954168796539307e-02 1.621683984994888306e-01 1.000000000000000000e+00 -6.692041754722595215e-01 8.489042520523071289e-02 1.640138477087020874e-01 1.000000000000000000e+00 -6.807381510734558105e-01 8.858131617307662964e-02 1.658592820167541504e-01 1.000000000000000000e+00 -6.922721862792968750e-01 9.227219969034194946e-02 1.677047312259674072e-01 1.000000000000000000e+00 -7.008073925971984863e-01 9.965398162603378296e-02 1.712418347597122192e-01 1.000000000000000000e+00 -7.063437104225158691e-01 1.107266470789909363e-01 1.764705926179885864e-01 1.000000000000000000e+00 -7.118800282478332520e-01 1.217993050813674927e-01 1.816993504762649536e-01 1.000000000000000000e+00 -7.174164056777954102e-01 1.328719705343246460e-01 1.869281083345413208e-01 1.000000000000000000e+00 -7.229527235031127930e-01 1.439446359872817993e-01 1.921568661928176880e-01 1.000000000000000000e+00 -7.284890413284301758e-01 1.550173014402389526e-01 1.973856240510940552e-01 1.000000000000000000e+00 -7.340253591537475586e-01 1.660899668931961060e-01 2.026143819093704224e-01 1.000000000000000000e+00 -7.395617365837097168e-01 1.771626323461532593e-01 2.078431397676467896e-01 1.000000000000000000e+00 -7.450980544090270996e-01 1.882352977991104126e-01 2.130718976259231567e-01 1.000000000000000000e+00 -7.506343722343444824e-01 1.993079632520675659e-01 2.183006554841995239e-01 1.000000000000000000e+00 -7.561706900596618652e-01 2.103806287050247192e-01 2.235294133424758911e-01 1.000000000000000000e+00 -7.617070078849792480e-01 2.214532941579818726e-01 2.287581712007522583e-01 1.000000000000000000e+00 -7.672433853149414062e-01 2.325259447097778320e-01 2.339869290590286255e-01 1.000000000000000000e+00 -7.727797031402587891e-01 2.435986101627349854e-01 2.392156869173049927e-01 1.000000000000000000e+00 -7.783160209655761719e-01 2.546712756156921387e-01 2.444444447755813599e-01 1.000000000000000000e+00 -7.838523387908935547e-01 2.657439410686492920e-01 2.496732026338577271e-01 1.000000000000000000e+00 -7.893887162208557129e-01 2.768166065216064453e-01 2.549019753932952881e-01 1.000000000000000000e+00 -7.949250340461730957e-01 2.878892719745635986e-01 2.601307332515716553e-01 1.000000000000000000e+00 -8.004613518714904785e-01 2.989619374275207520e-01 2.653594911098480225e-01 1.000000000000000000e+00 -8.059976696968078613e-01 3.100346028804779053e-01 2.705882489681243896e-01 1.000000000000000000e+00 -8.115340471267700195e-01 3.211072683334350586e-01 2.758170068264007568e-01 1.000000000000000000e+00 -8.170703649520874023e-01 3.321799337863922119e-01 2.810457646846771240e-01 1.000000000000000000e+00 -8.226066827774047852e-01 3.432525992393493652e-01 2.862745225429534912e-01 1.000000000000000000e+00 -8.281430006027221680e-01 3.543252646923065186e-01 2.915032804012298584e-01 1.000000000000000000e+00 -8.336793780326843262e-01 3.653979301452636719e-01 2.967320382595062256e-01 1.000000000000000000e+00 -8.392156958580017090e-01 3.764705955982208252e-01 3.019607961177825928e-01 1.000000000000000000e+00 -8.438292741775512695e-01 3.870818912982940674e-01 3.101114928722381592e-01 1.000000000000000000e+00 -8.484429121017456055e-01 3.976931869983673096e-01 3.182622194290161133e-01 1.000000000000000000e+00 -8.530564904212951660e-01 4.083045125007629395e-01 3.264129161834716797e-01 1.000000000000000000e+00 -8.576701283454895020e-01 4.189158082008361816e-01 3.345636427402496338e-01 1.000000000000000000e+00 -8.622837662696838379e-01 4.295271039009094238e-01 3.427143394947052002e-01 1.000000000000000000e+00 -8.668973445892333984e-01 4.401383996009826660e-01 3.508650660514831543e-01 1.000000000000000000e+00 -8.715109825134277344e-01 4.507497251033782959e-01 3.590157628059387207e-01 1.000000000000000000e+00 -8.761245608329772949e-01 4.613610208034515381e-01 3.671664595603942871e-01 1.000000000000000000e+00 -8.807381987571716309e-01 4.719723165035247803e-01 3.753171861171722412e-01 1.000000000000000000e+00 -8.853517770767211914e-01 4.825836122035980225e-01 3.834678828716278076e-01 1.000000000000000000e+00 -8.899654150009155273e-01 4.931949377059936523e-01 3.916186094284057617e-01 1.000000000000000000e+00 -8.945789933204650879e-01 5.038062334060668945e-01 3.997693061828613281e-01 1.000000000000000000e+00 -8.991926312446594238e-01 5.144175291061401367e-01 4.079200327396392822e-01 1.000000000000000000e+00 -9.038062095642089844e-01 5.250288248062133789e-01 4.160707294940948486e-01 1.000000000000000000e+00 -9.084198474884033203e-01 5.356401205062866211e-01 4.242214560508728027e-01 1.000000000000000000e+00 -9.130334258079528809e-01 5.462514162063598633e-01 4.323721528053283691e-01 1.000000000000000000e+00 -9.176470637321472168e-01 5.568627715110778809e-01 4.405228793621063232e-01 1.000000000000000000e+00 -9.222606420516967773e-01 5.674740672111511230e-01 4.486735761165618896e-01 1.000000000000000000e+00 -9.268742799758911133e-01 5.780853629112243652e-01 4.568243026733398438e-01 1.000000000000000000e+00 -9.314879179000854492e-01 5.886966586112976074e-01 4.649749994277954102e-01 1.000000000000000000e+00 -9.361014962196350098e-01 5.993079543113708496e-01 4.731257259845733643e-01 1.000000000000000000e+00 -9.407151341438293457e-01 6.099192500114440918e-01 4.812764227390289307e-01 1.000000000000000000e+00 -9.453287124633789062e-01 6.205305457115173340e-01 4.894271492958068848e-01 1.000000000000000000e+00 -9.499423503875732422e-01 6.311418414115905762e-01 4.975778460502624512e-01 1.000000000000000000e+00 -9.545559287071228027e-01 6.417531967163085938e-01 5.057285428047180176e-01 1.000000000000000000e+00 -9.575547575950622559e-01 6.512110829353332520e-01 5.151095986366271973e-01 1.000000000000000000e+00 -9.589388966560363770e-01 6.595155596733093262e-01 5.257208943367004395e-01 1.000000000000000000e+00 -9.603229761123657227e-01 6.678200960159301758e-01 5.363321900367736816e-01 1.000000000000000000e+00 -9.617070555686950684e-01 6.761245727539062500e-01 5.469434857368469238e-01 1.000000000000000000e+00 -9.630911350250244141e-01 6.844290494918823242e-01 5.575547814369201660e-01 1.000000000000000000e+00 -9.644752144813537598e-01 6.927335858345031738e-01 5.681660771369934082e-01 1.000000000000000000e+00 -9.658592939376831055e-01 7.010380625724792480e-01 5.787773728370666504e-01 1.000000000000000000e+00 -9.672433733940124512e-01 7.093425393104553223e-01 5.893886685371398926e-01 1.000000000000000000e+00 -9.686274528503417969e-01 7.176470756530761719e-01 6.000000238418579102e-01 1.000000000000000000e+00 -9.700115323066711426e-01 7.259515523910522461e-01 6.106113195419311523e-01 1.000000000000000000e+00 -9.713956117630004883e-01 7.342560291290283203e-01 6.212226152420043945e-01 1.000000000000000000e+00 -9.727796912193298340e-01 7.425605654716491699e-01 6.318339109420776367e-01 1.000000000000000000e+00 -9.741637706756591797e-01 7.508650422096252441e-01 6.424452066421508789e-01 1.000000000000000000e+00 -9.755478501319885254e-01 7.591695785522460938e-01 6.530565023422241211e-01 1.000000000000000000e+00 -9.769319295883178711e-01 7.674740552902221680e-01 6.636677980422973633e-01 1.000000000000000000e+00 -9.783160090446472168e-01 7.757785320281982422e-01 6.742790937423706055e-01 1.000000000000000000e+00 -9.797000885009765625e-01 7.840830683708190918e-01 6.848904490470886230e-01 1.000000000000000000e+00 -9.810842275619506836e-01 7.923875451087951660e-01 6.955017447471618652e-01 1.000000000000000000e+00 -9.824683070182800293e-01 8.006920218467712402e-01 7.061130404472351074e-01 1.000000000000000000e+00 -9.838523864746093750e-01 8.089965581893920898e-01 7.167243361473083496e-01 1.000000000000000000e+00 -9.852364659309387207e-01 8.173010349273681641e-01 7.273356318473815918e-01 1.000000000000000000e+00 -9.866205453872680664e-01 8.256055116653442383e-01 7.379469275474548340e-01 1.000000000000000000e+00 -9.880046248435974121e-01 8.339100480079650879e-01 7.485582232475280762e-01 1.000000000000000000e+00 -9.893887042999267578e-01 8.422145247459411621e-01 7.591695785522460938e-01 1.000000000000000000e+00 -9.907727837562561035e-01 8.505190014839172363e-01 7.697808742523193359e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.588235378265380859e-01 7.803921699523925781e-01 1.000000000000000000e+00 -9.912341237068176270e-01 8.631295561790466309e-01 7.877739071846008301e-01 1.000000000000000000e+00 -9.903114438056945801e-01 8.674355745315551758e-01 7.951557040214538574e-01 1.000000000000000000e+00 -9.893887042999267578e-01 8.717416524887084961e-01 8.025375008583068848e-01 1.000000000000000000e+00 -9.884659647941589355e-01 8.760476708412170410e-01 8.099192380905151367e-01 1.000000000000000000e+00 -9.875432252883911133e-01 8.803536891937255859e-01 8.173010349273681641e-01 1.000000000000000000e+00 -9.866205453872680664e-01 8.846597671508789062e-01 8.246828317642211914e-01 1.000000000000000000e+00 -9.856978058815002441e-01 8.889657855033874512e-01 8.320645689964294434e-01 1.000000000000000000e+00 -9.847750663757324219e-01 8.932718038558959961e-01 8.394463658332824707e-01 1.000000000000000000e+00 -9.838523864746093750e-01 8.975778818130493164e-01 8.468281626701354980e-01 1.000000000000000000e+00 -9.829296469688415527e-01 9.018839001655578613e-01 8.542098999023437500e-01 1.000000000000000000e+00 -9.820069074630737305e-01 9.061899185180664062e-01 8.615916967391967773e-01 1.000000000000000000e+00 -9.810842275619506836e-01 9.104959368705749512e-01 8.689734935760498047e-01 1.000000000000000000e+00 -9.801614880561828613e-01 9.148020148277282715e-01 8.763552308082580566e-01 1.000000000000000000e+00 -9.792387485504150391e-01 9.191080331802368164e-01 8.837370276451110840e-01 1.000000000000000000e+00 -9.783160090446472168e-01 9.234140515327453613e-01 8.911188244819641113e-01 1.000000000000000000e+00 -9.773933291435241699e-01 9.277201294898986816e-01 8.985005617141723633e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.320261478424072266e-01 9.058823585510253906e-01 1.000000000000000000e+00 -9.755478501319885254e-01 9.363321661949157715e-01 9.132641553878784180e-01 1.000000000000000000e+00 -9.746251702308654785e-01 9.406382441520690918e-01 9.206458926200866699e-01 1.000000000000000000e+00 -9.737024307250976562e-01 9.449442625045776367e-01 9.280276894569396973e-01 1.000000000000000000e+00 -9.727796912193298340e-01 9.492502808570861816e-01 9.354094862937927246e-01 1.000000000000000000e+00 -9.718569517135620117e-01 9.535562992095947266e-01 9.427912235260009766e-01 1.000000000000000000e+00 -9.709342718124389648e-01 9.578623771667480469e-01 9.501730203628540039e-01 1.000000000000000000e+00 -9.700115323066711426e-01 9.621683955192565918e-01 9.575547575950622559e-01 1.000000000000000000e+00 -9.690887928009033203e-01 9.664744138717651367e-01 9.649365544319152832e-01 1.000000000000000000e+00 -9.657055139541625977e-01 9.672433733940124512e-01 9.680892229080200195e-01 1.000000000000000000e+00 -9.598615765571594238e-01 9.644752144813537598e-01 9.670127034187316895e-01 1.000000000000000000e+00 -9.540176987648010254e-01 9.617070555686950684e-01 9.659361839294433594e-01 1.000000000000000000e+00 -9.481737613677978516e-01 9.589388966560363770e-01 9.648596644401550293e-01 1.000000000000000000e+00 -9.423298835754394531e-01 9.561706781387329102e-01 9.637831449508666992e-01 1.000000000000000000e+00 -9.364859461784362793e-01 9.534025192260742188e-01 9.627066254615783691e-01 1.000000000000000000e+00 -9.306420683860778809e-01 9.506343603134155273e-01 9.616301655769348145e-01 1.000000000000000000e+00 -9.247981309890747070e-01 9.478662014007568359e-01 9.605536460876464844e-01 1.000000000000000000e+00 -9.189542531967163086e-01 9.450980424880981445e-01 9.594771265983581543e-01 1.000000000000000000e+00 -9.131103157997131348e-01 9.423298835754394531e-01 9.584006071090698242e-01 1.000000000000000000e+00 -9.072664380073547363e-01 9.395617246627807617e-01 9.573240876197814941e-01 1.000000000000000000e+00 -9.014225006103515625e-01 9.367935657501220703e-01 9.562475681304931641e-01 1.000000000000000000e+00 -8.955786228179931641e-01 9.340253472328186035e-01 9.551711082458496094e-01 1.000000000000000000e+00 -8.897347450256347656e-01 9.312571883201599121e-01 9.540945887565612793e-01 1.000000000000000000e+00 -8.838908076286315918e-01 9.284890294075012207e-01 9.530180692672729492e-01 1.000000000000000000e+00 -8.780469298362731934e-01 9.257208704948425293e-01 9.519415497779846191e-01 1.000000000000000000e+00 -8.722029924392700195e-01 9.229527115821838379e-01 9.508650302886962891e-01 1.000000000000000000e+00 -8.663591146469116211e-01 9.201845526695251465e-01 9.497885704040527344e-01 1.000000000000000000e+00 -8.605151772499084473e-01 9.174163937568664551e-01 9.487120509147644043e-01 1.000000000000000000e+00 -8.546712994575500488e-01 9.146482348442077637e-01 9.476355314254760742e-01 1.000000000000000000e+00 -8.488273620605468750e-01 9.118800759315490723e-01 9.465590119361877441e-01 1.000000000000000000e+00 -8.429834842681884766e-01 9.091118574142456055e-01 9.454824924468994141e-01 1.000000000000000000e+00 -8.371395468711853027e-01 9.063436985015869141e-01 9.444059729576110840e-01 1.000000000000000000e+00 -8.312956690788269043e-01 9.035755395889282227e-01 9.433295130729675293e-01 1.000000000000000000e+00 -8.254517316818237305e-01 9.008073806762695312e-01 9.422529935836791992e-01 1.000000000000000000e+00 -8.196078538894653320e-01 8.980392217636108398e-01 9.411764740943908691e-01 1.000000000000000000e+00 -8.099192380905151367e-01 8.931180238723754883e-01 9.384083151817321777e-01 1.000000000000000000e+00 -8.002306818962097168e-01 8.881968259811401367e-01 9.356401562690734863e-01 1.000000000000000000e+00 -7.905421257019042969e-01 8.832756876945495605e-01 9.328719973564147949e-01 1.000000000000000000e+00 -7.808535099029541016e-01 8.783544898033142090e-01 9.301037788391113281e-01 1.000000000000000000e+00 -7.711649537086486816e-01 8.734332919120788574e-01 9.273356199264526367e-01 1.000000000000000000e+00 -7.614763379096984863e-01 8.685120940208435059e-01 9.245674610137939453e-01 1.000000000000000000e+00 -7.517877817153930664e-01 8.635909557342529297e-01 9.217993021011352539e-01 1.000000000000000000e+00 -7.420991659164428711e-01 8.586697578430175781e-01 9.190311431884765625e-01 1.000000000000000000e+00 -7.324106097221374512e-01 8.537485599517822266e-01 9.162629842758178711e-01 1.000000000000000000e+00 -7.227220535278320312e-01 8.488273620605468750e-01 9.134948253631591797e-01 1.000000000000000000e+00 -7.130334377288818359e-01 8.439061641693115234e-01 9.107266664505004883e-01 1.000000000000000000e+00 -7.033448815345764160e-01 8.389850258827209473e-01 9.079584479331970215e-01 1.000000000000000000e+00 -6.936562657356262207e-01 8.340638279914855957e-01 9.051902890205383301e-01 1.000000000000000000e+00 -6.839677095413208008e-01 8.291426301002502441e-01 9.024221301078796387e-01 1.000000000000000000e+00 -6.742790937423706055e-01 8.242214322090148926e-01 8.996539711952209473e-01 1.000000000000000000e+00 -6.645905375480651855e-01 8.193002939224243164e-01 8.968858122825622559e-01 1.000000000000000000e+00 -6.549019813537597656e-01 8.143790960311889648e-01 8.941176533699035645e-01 1.000000000000000000e+00 -6.452133655548095703e-01 8.094578981399536133e-01 8.913494944572448730e-01 1.000000000000000000e+00 -6.355248093605041504e-01 8.045367002487182617e-01 8.885813355445861816e-01 1.000000000000000000e+00 -6.258361935615539551e-01 7.996155619621276855e-01 8.858131766319274902e-01 1.000000000000000000e+00 -6.161476373672485352e-01 7.946943640708923340e-01 8.830449581146240234e-01 1.000000000000000000e+00 -6.064590811729431152e-01 7.897731661796569824e-01 8.802767992019653320e-01 1.000000000000000000e+00 -5.967704653739929199e-01 7.848519682884216309e-01 8.775086402893066406e-01 1.000000000000000000e+00 -5.870819091796875000e-01 7.799307703971862793e-01 8.747404813766479492e-01 1.000000000000000000e+00 -5.773932933807373047e-01 7.750096321105957031e-01 8.719723224639892578e-01 1.000000000000000000e+00 -5.664744377136230469e-01 7.687043547630310059e-01 8.685120940208435059e-01 1.000000000000000000e+00 -5.543252825736999512e-01 7.610149979591369629e-01 8.643598556518554688e-01 1.000000000000000000e+00 -5.421760678291320801e-01 7.533256411552429199e-01 8.602076172828674316e-01 1.000000000000000000e+00 -5.300269126892089844e-01 7.456362843513488770e-01 8.560553789138793945e-01 1.000000000000000000e+00 -5.178777575492858887e-01 7.379469275474548340e-01 8.519031405448913574e-01 1.000000000000000000e+00 -5.057285428047180176e-01 7.302575707435607910e-01 8.477508425712585449e-01 1.000000000000000000e+00 -4.935793876647949219e-01 7.225682139396667480e-01 8.435986042022705078e-01 1.000000000000000000e+00 -4.814302325248718262e-01 7.148789167404174805e-01 8.394463658332824707e-01 1.000000000000000000e+00 -4.692810475826263428e-01 7.071895599365234375e-01 8.352941274642944336e-01 1.000000000000000000e+00 -4.571318626403808594e-01 6.995002031326293945e-01 8.311418890953063965e-01 1.000000000000000000e+00 -4.449827075004577637e-01 6.918108463287353516e-01 8.269895911216735840e-01 1.000000000000000000e+00 -4.328335225582122803e-01 6.841214895248413086e-01 8.228373527526855469e-01 1.000000000000000000e+00 -4.206843376159667969e-01 6.764321327209472656e-01 8.186851143836975098e-01 1.000000000000000000e+00 -4.085351824760437012e-01 6.687427759170532227e-01 8.145328760147094727e-01 1.000000000000000000e+00 -3.963859975337982178e-01 6.610534191131591797e-01 8.103806376457214355e-01 1.000000000000000000e+00 -3.842368423938751221e-01 6.533640623092651367e-01 8.062283992767333984e-01 1.000000000000000000e+00 -3.720876574516296387e-01 6.456747651100158691e-01 8.020761013031005859e-01 1.000000000000000000e+00 -3.599384725093841553e-01 6.379854083061218262e-01 7.979238629341125488e-01 1.000000000000000000e+00 -3.477893173694610596e-01 6.302960515022277832e-01 7.937716245651245117e-01 1.000000000000000000e+00 -3.356401324272155762e-01 6.226066946983337402e-01 7.896193861961364746e-01 1.000000000000000000e+00 -3.234909772872924805e-01 6.149173378944396973e-01 7.854671478271484375e-01 1.000000000000000000e+00 -3.113417923450469971e-01 6.072279810905456543e-01 7.813148498535156250e-01 1.000000000000000000e+00 -2.991926074028015137e-01 5.995386242866516113e-01 7.771626114845275879e-01 1.000000000000000000e+00 -2.870434522628784180e-01 5.918492674827575684e-01 7.730103731155395508e-01 1.000000000000000000e+00 -2.748942673206329346e-01 5.841599106788635254e-01 7.688581347465515137e-01 1.000000000000000000e+00 -2.627451121807098389e-01 5.764706134796142578e-01 7.647058963775634766e-01 1.000000000000000000e+00 -2.575163543224334717e-01 5.695501565933227539e-01 7.611687779426574707e-01 1.000000000000000000e+00 -2.522875964641571045e-01 5.626297593116760254e-01 7.576316595077514648e-01 1.000000000000000000e+00 -2.470588237047195435e-01 5.557093620300292969e-01 7.540946006774902344e-01 1.000000000000000000e+00 -2.418300658464431763e-01 5.487889051437377930e-01 7.505574822425842285e-01 1.000000000000000000e+00 -2.366013079881668091e-01 5.418685078620910645e-01 7.470203638076782227e-01 1.000000000000000000e+00 -2.313725501298904419e-01 5.349481105804443359e-01 7.434833049774169922e-01 1.000000000000000000e+00 -2.261437922716140747e-01 5.280276536941528320e-01 7.399461865425109863e-01 1.000000000000000000e+00 -2.209150344133377075e-01 5.211072564125061035e-01 7.364090681076049805e-01 1.000000000000000000e+00 -2.156862765550613403e-01 5.141868591308593750e-01 7.328719496726989746e-01 1.000000000000000000e+00 -2.104575186967849731e-01 5.072664618492126465e-01 7.293348908424377441e-01 1.000000000000000000e+00 -2.052287608385086060e-01 5.003460049629211426e-01 7.257977724075317383e-01 1.000000000000000000e+00 -2.000000029802322388e-01 4.934256076812744141e-01 7.222606539726257324e-01 1.000000000000000000e+00 -1.947712451219558716e-01 4.865051805973052979e-01 7.187235951423645020e-01 1.000000000000000000e+00 -1.895424872636795044e-01 4.795847833156585693e-01 7.151864767074584961e-01 1.000000000000000000e+00 -1.843137294054031372e-01 4.726643562316894531e-01 7.116493582725524902e-01 1.000000000000000000e+00 -1.790849715471267700e-01 4.657439589500427246e-01 7.081122398376464844e-01 1.000000000000000000e+00 -1.738562136888504028e-01 4.588235318660736084e-01 7.045751810073852539e-01 1.000000000000000000e+00 -1.686274558305740356e-01 4.519031047821044922e-01 7.010380625724792480e-01 1.000000000000000000e+00 -1.633986979722976685e-01 4.449827075004577637e-01 6.975009441375732422e-01 1.000000000000000000e+00 -1.581699401140213013e-01 4.380622804164886475e-01 6.939638853073120117e-01 1.000000000000000000e+00 -1.529411822557449341e-01 4.311418831348419189e-01 6.904267668724060059e-01 1.000000000000000000e+00 -1.477124243974685669e-01 4.242214560508728027e-01 6.868896484375000000e-01 1.000000000000000000e+00 -1.424836665391921997e-01 4.173010289669036865e-01 6.833525300025939941e-01 1.000000000000000000e+00 -1.372549086809158325e-01 4.103806316852569580e-01 6.798154711723327637e-01 1.000000000000000000e+00 -1.320261508226394653e-01 4.034602046012878418e-01 6.762783527374267578e-01 1.000000000000000000e+00 -1.272587478160858154e-01 3.958477377891540527e-01 6.687427759170532227e-01 1.000000000000000000e+00 -1.229527071118354797e-01 3.875432610511779785e-01 6.572087407112121582e-01 1.000000000000000000e+00 -1.186466738581657410e-01 3.792387545108795166e-01 6.456747651100158691e-01 1.000000000000000000e+00 -1.143406406044960022e-01 3.709342479705810547e-01 6.341407299041748047e-01 1.000000000000000000e+00 -1.100345999002456665e-01 3.626297712326049805e-01 6.226066946983337402e-01 1.000000000000000000e+00 -1.057285666465759277e-01 3.543252646923065186e-01 6.110726594924926758e-01 1.000000000000000000e+00 -1.014225333929061890e-01 3.460207581520080566e-01 5.995386242866516113e-01 1.000000000000000000e+00 -9.711649268865585327e-02 3.377162516117095947e-01 5.880045890808105469e-01 1.000000000000000000e+00 -9.281045943498611450e-02 3.294117748737335205e-01 5.764706134796142578e-01 1.000000000000000000e+00 -8.850441873073577881e-02 3.211072683334350586e-01 5.649365782737731934e-01 1.000000000000000000e+00 -8.419838547706604004e-02 3.128027617931365967e-01 5.534025430679321289e-01 1.000000000000000000e+00 -7.989235222339630127e-02 3.044982552528381348e-01 5.418685078620910645e-01 1.000000000000000000e+00 -7.558631151914596558e-02 2.961937785148620605e-01 5.303344726562500000e-01 1.000000000000000000e+00 -7.128027826547622681e-02 2.878892719745635986e-01 5.188004374504089355e-01 1.000000000000000000e+00 -6.697423756122589111e-02 2.795847654342651367e-01 5.072664618492126465e-01 1.000000000000000000e+00 -6.266820430755615234e-02 2.712802886962890625e-01 4.957323968410491943e-01 1.000000000000000000e+00 -5.836216732859611511e-02 2.629757821559906006e-01 4.841983914375305176e-01 1.000000000000000000e+00 -5.405613407492637634e-02 2.546712756156921387e-01 4.726643562316894531e-01 1.000000000000000000e+00 -4.975009709596633911e-02 2.463667839765548706e-01 4.611303210258483887e-01 1.000000000000000000e+00 -4.544406011700630188e-02 2.380622774362564087e-01 4.495963156223297119e-01 1.000000000000000000e+00 -4.113802313804626465e-02 2.297577857971191406e-01 4.380622804164886475e-01 1.000000000000000000e+00 -3.683198615908622742e-02 2.214532941579818726e-01 4.265282452106475830e-01 1.000000000000000000e+00 -3.252595290541648865e-02 2.131487876176834106e-01 4.149942398071289062e-01 1.000000000000000000e+00 -2.821991592645645142e-02 2.048442959785461426e-01 4.034602046012878418e-01 1.000000000000000000e+00 -2.391387894749641418e-02 1.965397894382476807e-01 3.919261693954467773e-01 1.000000000000000000e+00 -1.960784383118152618e-02 1.882352977991104126e-01 3.803921639919281006e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/RdGy b/fastplotlib/utils/colormaps/RdGy deleted file mode 100644 index a6f80f093..000000000 --- a/fastplotlib/utils/colormaps/RdGy +++ /dev/null @@ -1,256 +0,0 @@ -4.039215743541717529e-01 0.000000000000000000e+00 1.215686276555061340e-01 1.000000000000000000e+00 -4.154555797576904297e-01 3.690888173878192902e-03 1.234140694141387939e-01 1.000000000000000000e+00 -4.269896149635314941e-01 7.381776347756385803e-03 1.252595186233520508e-01 1.000000000000000000e+00 -4.385236501693725586e-01 1.107266452163457870e-02 1.271049529314041138e-01 1.000000000000000000e+00 -4.500576555728912354e-01 1.476355269551277161e-02 1.289504021406173706e-01 1.000000000000000000e+00 -4.615916907787322998e-01 1.845443993806838989e-02 1.307958513498306274e-01 1.000000000000000000e+00 -4.731257259845733643e-01 2.214532904326915741e-02 1.326412856578826904e-01 1.000000000000000000e+00 -4.846597313880920410e-01 2.583621628582477570e-02 1.344867348670959473e-01 1.000000000000000000e+00 -4.961937665939331055e-01 2.952710539102554321e-02 1.363321840763092041e-01 1.000000000000000000e+00 -5.077278017997741699e-01 3.321799263358116150e-02 1.381776183843612671e-01 1.000000000000000000e+00 -5.192618370056152344e-01 3.690887987613677979e-02 1.400230675935745239e-01 1.000000000000000000e+00 -5.307958722114562988e-01 4.059977084398269653e-02 1.418685168027877808e-01 1.000000000000000000e+00 -5.423298478126525879e-01 4.429065808653831482e-02 1.437139511108398438e-01 1.000000000000000000e+00 -5.538638830184936523e-01 4.798154532909393311e-02 1.455594003200531006e-01 1.000000000000000000e+00 -5.653979182243347168e-01 5.167243257164955139e-02 1.474048495292663574e-01 1.000000000000000000e+00 -5.769319534301757812e-01 5.536332353949546814e-02 1.492502838373184204e-01 1.000000000000000000e+00 -5.884659886360168457e-01 5.905421078205108643e-02 1.510957330465316772e-01 1.000000000000000000e+00 -6.000000238418579102e-01 6.274510174989700317e-02 1.529411822557449341e-01 1.000000000000000000e+00 -6.115339994430541992e-01 6.643598526716232300e-02 1.547866165637969971e-01 1.000000000000000000e+00 -6.230680346488952637e-01 7.012687623500823975e-02 1.566320657730102539e-01 1.000000000000000000e+00 -6.346020698547363281e-01 7.381775975227355957e-02 1.584775149822235107e-01 1.000000000000000000e+00 -6.461361050605773926e-01 7.750865072011947632e-02 1.603229492902755737e-01 1.000000000000000000e+00 -6.576701402664184570e-01 8.119954168796539307e-02 1.621683984994888306e-01 1.000000000000000000e+00 -6.692041754722595215e-01 8.489042520523071289e-02 1.640138477087020874e-01 1.000000000000000000e+00 -6.807381510734558105e-01 8.858131617307662964e-02 1.658592820167541504e-01 1.000000000000000000e+00 -6.922721862792968750e-01 9.227219969034194946e-02 1.677047312259674072e-01 1.000000000000000000e+00 -7.008073925971984863e-01 9.965398162603378296e-02 1.712418347597122192e-01 1.000000000000000000e+00 -7.063437104225158691e-01 1.107266470789909363e-01 1.764705926179885864e-01 1.000000000000000000e+00 -7.118800282478332520e-01 1.217993050813674927e-01 1.816993504762649536e-01 1.000000000000000000e+00 -7.174164056777954102e-01 1.328719705343246460e-01 1.869281083345413208e-01 1.000000000000000000e+00 -7.229527235031127930e-01 1.439446359872817993e-01 1.921568661928176880e-01 1.000000000000000000e+00 -7.284890413284301758e-01 1.550173014402389526e-01 1.973856240510940552e-01 1.000000000000000000e+00 -7.340253591537475586e-01 1.660899668931961060e-01 2.026143819093704224e-01 1.000000000000000000e+00 -7.395617365837097168e-01 1.771626323461532593e-01 2.078431397676467896e-01 1.000000000000000000e+00 -7.450980544090270996e-01 1.882352977991104126e-01 2.130718976259231567e-01 1.000000000000000000e+00 -7.506343722343444824e-01 1.993079632520675659e-01 2.183006554841995239e-01 1.000000000000000000e+00 -7.561706900596618652e-01 2.103806287050247192e-01 2.235294133424758911e-01 1.000000000000000000e+00 -7.617070078849792480e-01 2.214532941579818726e-01 2.287581712007522583e-01 1.000000000000000000e+00 -7.672433853149414062e-01 2.325259447097778320e-01 2.339869290590286255e-01 1.000000000000000000e+00 -7.727797031402587891e-01 2.435986101627349854e-01 2.392156869173049927e-01 1.000000000000000000e+00 -7.783160209655761719e-01 2.546712756156921387e-01 2.444444447755813599e-01 1.000000000000000000e+00 -7.838523387908935547e-01 2.657439410686492920e-01 2.496732026338577271e-01 1.000000000000000000e+00 -7.893887162208557129e-01 2.768166065216064453e-01 2.549019753932952881e-01 1.000000000000000000e+00 -7.949250340461730957e-01 2.878892719745635986e-01 2.601307332515716553e-01 1.000000000000000000e+00 -8.004613518714904785e-01 2.989619374275207520e-01 2.653594911098480225e-01 1.000000000000000000e+00 -8.059976696968078613e-01 3.100346028804779053e-01 2.705882489681243896e-01 1.000000000000000000e+00 -8.115340471267700195e-01 3.211072683334350586e-01 2.758170068264007568e-01 1.000000000000000000e+00 -8.170703649520874023e-01 3.321799337863922119e-01 2.810457646846771240e-01 1.000000000000000000e+00 -8.226066827774047852e-01 3.432525992393493652e-01 2.862745225429534912e-01 1.000000000000000000e+00 -8.281430006027221680e-01 3.543252646923065186e-01 2.915032804012298584e-01 1.000000000000000000e+00 -8.336793780326843262e-01 3.653979301452636719e-01 2.967320382595062256e-01 1.000000000000000000e+00 -8.392156958580017090e-01 3.764705955982208252e-01 3.019607961177825928e-01 1.000000000000000000e+00 -8.438292741775512695e-01 3.870818912982940674e-01 3.101114928722381592e-01 1.000000000000000000e+00 -8.484429121017456055e-01 3.976931869983673096e-01 3.182622194290161133e-01 1.000000000000000000e+00 -8.530564904212951660e-01 4.083045125007629395e-01 3.264129161834716797e-01 1.000000000000000000e+00 -8.576701283454895020e-01 4.189158082008361816e-01 3.345636427402496338e-01 1.000000000000000000e+00 -8.622837662696838379e-01 4.295271039009094238e-01 3.427143394947052002e-01 1.000000000000000000e+00 -8.668973445892333984e-01 4.401383996009826660e-01 3.508650660514831543e-01 1.000000000000000000e+00 -8.715109825134277344e-01 4.507497251033782959e-01 3.590157628059387207e-01 1.000000000000000000e+00 -8.761245608329772949e-01 4.613610208034515381e-01 3.671664595603942871e-01 1.000000000000000000e+00 -8.807381987571716309e-01 4.719723165035247803e-01 3.753171861171722412e-01 1.000000000000000000e+00 -8.853517770767211914e-01 4.825836122035980225e-01 3.834678828716278076e-01 1.000000000000000000e+00 -8.899654150009155273e-01 4.931949377059936523e-01 3.916186094284057617e-01 1.000000000000000000e+00 -8.945789933204650879e-01 5.038062334060668945e-01 3.997693061828613281e-01 1.000000000000000000e+00 -8.991926312446594238e-01 5.144175291061401367e-01 4.079200327396392822e-01 1.000000000000000000e+00 -9.038062095642089844e-01 5.250288248062133789e-01 4.160707294940948486e-01 1.000000000000000000e+00 -9.084198474884033203e-01 5.356401205062866211e-01 4.242214560508728027e-01 1.000000000000000000e+00 -9.130334258079528809e-01 5.462514162063598633e-01 4.323721528053283691e-01 1.000000000000000000e+00 -9.176470637321472168e-01 5.568627715110778809e-01 4.405228793621063232e-01 1.000000000000000000e+00 -9.222606420516967773e-01 5.674740672111511230e-01 4.486735761165618896e-01 1.000000000000000000e+00 -9.268742799758911133e-01 5.780853629112243652e-01 4.568243026733398438e-01 1.000000000000000000e+00 -9.314879179000854492e-01 5.886966586112976074e-01 4.649749994277954102e-01 1.000000000000000000e+00 -9.361014962196350098e-01 5.993079543113708496e-01 4.731257259845733643e-01 1.000000000000000000e+00 -9.407151341438293457e-01 6.099192500114440918e-01 4.812764227390289307e-01 1.000000000000000000e+00 -9.453287124633789062e-01 6.205305457115173340e-01 4.894271492958068848e-01 1.000000000000000000e+00 -9.499423503875732422e-01 6.311418414115905762e-01 4.975778460502624512e-01 1.000000000000000000e+00 -9.545559287071228027e-01 6.417531967163085938e-01 5.057285428047180176e-01 1.000000000000000000e+00 -9.575547575950622559e-01 6.512110829353332520e-01 5.151095986366271973e-01 1.000000000000000000e+00 -9.589388966560363770e-01 6.595155596733093262e-01 5.257208943367004395e-01 1.000000000000000000e+00 -9.603229761123657227e-01 6.678200960159301758e-01 5.363321900367736816e-01 1.000000000000000000e+00 -9.617070555686950684e-01 6.761245727539062500e-01 5.469434857368469238e-01 1.000000000000000000e+00 -9.630911350250244141e-01 6.844290494918823242e-01 5.575547814369201660e-01 1.000000000000000000e+00 -9.644752144813537598e-01 6.927335858345031738e-01 5.681660771369934082e-01 1.000000000000000000e+00 -9.658592939376831055e-01 7.010380625724792480e-01 5.787773728370666504e-01 1.000000000000000000e+00 -9.672433733940124512e-01 7.093425393104553223e-01 5.893886685371398926e-01 1.000000000000000000e+00 -9.686274528503417969e-01 7.176470756530761719e-01 6.000000238418579102e-01 1.000000000000000000e+00 -9.700115323066711426e-01 7.259515523910522461e-01 6.106113195419311523e-01 1.000000000000000000e+00 -9.713956117630004883e-01 7.342560291290283203e-01 6.212226152420043945e-01 1.000000000000000000e+00 -9.727796912193298340e-01 7.425605654716491699e-01 6.318339109420776367e-01 1.000000000000000000e+00 -9.741637706756591797e-01 7.508650422096252441e-01 6.424452066421508789e-01 1.000000000000000000e+00 -9.755478501319885254e-01 7.591695785522460938e-01 6.530565023422241211e-01 1.000000000000000000e+00 -9.769319295883178711e-01 7.674740552902221680e-01 6.636677980422973633e-01 1.000000000000000000e+00 -9.783160090446472168e-01 7.757785320281982422e-01 6.742790937423706055e-01 1.000000000000000000e+00 -9.797000885009765625e-01 7.840830683708190918e-01 6.848904490470886230e-01 1.000000000000000000e+00 -9.810842275619506836e-01 7.923875451087951660e-01 6.955017447471618652e-01 1.000000000000000000e+00 -9.824683070182800293e-01 8.006920218467712402e-01 7.061130404472351074e-01 1.000000000000000000e+00 -9.838523864746093750e-01 8.089965581893920898e-01 7.167243361473083496e-01 1.000000000000000000e+00 -9.852364659309387207e-01 8.173010349273681641e-01 7.273356318473815918e-01 1.000000000000000000e+00 -9.866205453872680664e-01 8.256055116653442383e-01 7.379469275474548340e-01 1.000000000000000000e+00 -9.880046248435974121e-01 8.339100480079650879e-01 7.485582232475280762e-01 1.000000000000000000e+00 -9.893887042999267578e-01 8.422145247459411621e-01 7.591695785522460938e-01 1.000000000000000000e+00 -9.907727837562561035e-01 8.505190014839172363e-01 7.697808742523193359e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.588235378265380859e-01 7.803921699523925781e-01 1.000000000000000000e+00 -9.924644231796264648e-01 8.643598556518554688e-01 7.890042066574096680e-01 1.000000000000000000e+00 -9.927719831466674805e-01 8.698961734771728516e-01 7.976163029670715332e-01 1.000000000000000000e+00 -9.930796027183532715e-01 8.754325509071350098e-01 8.062283992767333984e-01 1.000000000000000000e+00 -9.933871626853942871e-01 8.809688687324523926e-01 8.148404359817504883e-01 1.000000000000000000e+00 -9.936947226524353027e-01 8.865051865577697754e-01 8.234525322914123535e-01 1.000000000000000000e+00 -9.940022826194763184e-01 8.920415043830871582e-01 8.320645689964294434e-01 1.000000000000000000e+00 -9.943099021911621094e-01 8.975778818130493164e-01 8.406766653060913086e-01 1.000000000000000000e+00 -9.946174621582031250e-01 9.031141996383666992e-01 8.492887616157531738e-01 1.000000000000000000e+00 -9.949250221252441406e-01 9.086505174636840820e-01 8.579007983207702637e-01 1.000000000000000000e+00 -9.952325820922851562e-01 9.141868352890014648e-01 8.665128946304321289e-01 1.000000000000000000e+00 -9.955402016639709473e-01 9.197232127189636230e-01 8.751249313354492188e-01 1.000000000000000000e+00 -9.958477616310119629e-01 9.252595305442810059e-01 8.837370276451110840e-01 1.000000000000000000e+00 -9.961553215980529785e-01 9.307958483695983887e-01 8.923491239547729492e-01 1.000000000000000000e+00 -9.964628815650939941e-01 9.363321661949157715e-01 9.009611606597900391e-01 1.000000000000000000e+00 -9.967705011367797852e-01 9.418684840202331543e-01 9.095732569694519043e-01 1.000000000000000000e+00 -9.970780611038208008e-01 9.474048614501953125e-01 9.181852936744689941e-01 1.000000000000000000e+00 -9.973856210708618164e-01 9.529411792755126953e-01 9.267973899841308594e-01 1.000000000000000000e+00 -9.976931810379028320e-01 9.584774971008300781e-01 9.354094862937927246e-01 1.000000000000000000e+00 -9.980007410049438477e-01 9.640138149261474609e-01 9.440215229988098145e-01 1.000000000000000000e+00 -9.983083605766296387e-01 9.695501923561096191e-01 9.526336193084716797e-01 1.000000000000000000e+00 -9.986159205436706543e-01 9.750865101814270020e-01 9.612456560134887695e-01 1.000000000000000000e+00 -9.989234805107116699e-01 9.806228280067443848e-01 9.698577523231506348e-01 1.000000000000000000e+00 -9.992310404777526855e-01 9.861591458320617676e-01 9.784698486328125000e-01 1.000000000000000000e+00 -9.995386600494384766e-01 9.916955232620239258e-01 9.870818853378295898e-01 1.000000000000000000e+00 -9.998462200164794922e-01 9.972318410873413086e-01 9.956939816474914551e-01 1.000000000000000000e+00 -9.976162910461425781e-01 9.976162910461425781e-01 9.976162910461425781e-01 1.000000000000000000e+00 -9.928489327430725098e-01 9.928489327430725098e-01 9.928489327430725098e-01 1.000000000000000000e+00 -9.880815148353576660e-01 9.880815148353576660e-01 9.880815148353576660e-01 1.000000000000000000e+00 -9.833140969276428223e-01 9.833140969276428223e-01 9.833140969276428223e-01 1.000000000000000000e+00 -9.785467386245727539e-01 9.785467386245727539e-01 9.785467386245727539e-01 1.000000000000000000e+00 -9.737793207168579102e-01 9.737793207168579102e-01 9.737793207168579102e-01 1.000000000000000000e+00 -9.690119028091430664e-01 9.690119028091430664e-01 9.690119028091430664e-01 1.000000000000000000e+00 -9.642445445060729980e-01 9.642445445060729980e-01 9.642445445060729980e-01 1.000000000000000000e+00 -9.594771265983581543e-01 9.594771265983581543e-01 9.594771265983581543e-01 1.000000000000000000e+00 -9.547097086906433105e-01 9.547097086906433105e-01 9.547097086906433105e-01 1.000000000000000000e+00 -9.499423503875732422e-01 9.499423503875732422e-01 9.499423503875732422e-01 1.000000000000000000e+00 -9.451749324798583984e-01 9.451749324798583984e-01 9.451749324798583984e-01 1.000000000000000000e+00 -9.404075145721435547e-01 9.404075145721435547e-01 9.404075145721435547e-01 1.000000000000000000e+00 -9.356401562690734863e-01 9.356401562690734863e-01 9.356401562690734863e-01 1.000000000000000000e+00 -9.308727383613586426e-01 9.308727383613586426e-01 9.308727383613586426e-01 1.000000000000000000e+00 -9.261053204536437988e-01 9.261053204536437988e-01 9.261053204536437988e-01 1.000000000000000000e+00 -9.213379621505737305e-01 9.213379621505737305e-01 9.213379621505737305e-01 1.000000000000000000e+00 -9.165705442428588867e-01 9.165705442428588867e-01 9.165705442428588867e-01 1.000000000000000000e+00 -9.118031263351440430e-01 9.118031263351440430e-01 9.118031263351440430e-01 1.000000000000000000e+00 -9.070357680320739746e-01 9.070357680320739746e-01 9.070357680320739746e-01 1.000000000000000000e+00 -9.022683501243591309e-01 9.022683501243591309e-01 9.022683501243591309e-01 1.000000000000000000e+00 -8.975009322166442871e-01 8.975009322166442871e-01 8.975009322166442871e-01 1.000000000000000000e+00 -8.927335739135742188e-01 8.927335739135742188e-01 8.927335739135742188e-01 1.000000000000000000e+00 -8.879661560058593750e-01 8.879661560058593750e-01 8.879661560058593750e-01 1.000000000000000000e+00 -8.831987977027893066e-01 8.831987977027893066e-01 8.831987977027893066e-01 1.000000000000000000e+00 -8.784313797950744629e-01 8.784313797950744629e-01 8.784313797950744629e-01 1.000000000000000000e+00 -8.725874423980712891e-01 8.725874423980712891e-01 8.725874423980712891e-01 1.000000000000000000e+00 -8.667435646057128906e-01 8.667435646057128906e-01 8.667435646057128906e-01 1.000000000000000000e+00 -8.608996272087097168e-01 8.608996272087097168e-01 8.608996272087097168e-01 1.000000000000000000e+00 -8.550557494163513184e-01 8.550557494163513184e-01 8.550557494163513184e-01 1.000000000000000000e+00 -8.492118120193481445e-01 8.492118120193481445e-01 8.492118120193481445e-01 1.000000000000000000e+00 -8.433679342269897461e-01 8.433679342269897461e-01 8.433679342269897461e-01 1.000000000000000000e+00 -8.375240564346313477e-01 8.375240564346313477e-01 8.375240564346313477e-01 1.000000000000000000e+00 -8.316801190376281738e-01 8.316801190376281738e-01 8.316801190376281738e-01 1.000000000000000000e+00 -8.258362412452697754e-01 8.258362412452697754e-01 8.258362412452697754e-01 1.000000000000000000e+00 -8.199923038482666016e-01 8.199923038482666016e-01 8.199923038482666016e-01 1.000000000000000000e+00 -8.141484260559082031e-01 8.141484260559082031e-01 8.141484260559082031e-01 1.000000000000000000e+00 -8.083044886589050293e-01 8.083044886589050293e-01 8.083044886589050293e-01 1.000000000000000000e+00 -8.024606108665466309e-01 8.024606108665466309e-01 8.024606108665466309e-01 1.000000000000000000e+00 -7.966166734695434570e-01 7.966166734695434570e-01 7.966166734695434570e-01 1.000000000000000000e+00 -7.907727956771850586e-01 7.907727956771850586e-01 7.907727956771850586e-01 1.000000000000000000e+00 -7.849288582801818848e-01 7.849288582801818848e-01 7.849288582801818848e-01 1.000000000000000000e+00 -7.790849804878234863e-01 7.790849804878234863e-01 7.790849804878234863e-01 1.000000000000000000e+00 -7.732410430908203125e-01 7.732410430908203125e-01 7.732410430908203125e-01 1.000000000000000000e+00 -7.673971652984619141e-01 7.673971652984619141e-01 7.673971652984619141e-01 1.000000000000000000e+00 -7.615532279014587402e-01 7.615532279014587402e-01 7.615532279014587402e-01 1.000000000000000000e+00 -7.557093501091003418e-01 7.557093501091003418e-01 7.557093501091003418e-01 1.000000000000000000e+00 -7.498654127120971680e-01 7.498654127120971680e-01 7.498654127120971680e-01 1.000000000000000000e+00 -7.440215349197387695e-01 7.440215349197387695e-01 7.440215349197387695e-01 1.000000000000000000e+00 -7.381775975227355957e-01 7.381775975227355957e-01 7.381775975227355957e-01 1.000000000000000000e+00 -7.323337197303771973e-01 7.323337197303771973e-01 7.323337197303771973e-01 1.000000000000000000e+00 -7.254902124404907227e-01 7.254902124404907227e-01 7.254902124404907227e-01 1.000000000000000000e+00 -7.176470756530761719e-01 7.176470756530761719e-01 7.176470756530761719e-01 1.000000000000000000e+00 -7.098039388656616211e-01 7.098039388656616211e-01 7.098039388656616211e-01 1.000000000000000000e+00 -7.019608020782470703e-01 7.019608020782470703e-01 7.019608020782470703e-01 1.000000000000000000e+00 -6.941176652908325195e-01 6.941176652908325195e-01 6.941176652908325195e-01 1.000000000000000000e+00 -6.862745285034179688e-01 6.862745285034179688e-01 6.862745285034179688e-01 1.000000000000000000e+00 -6.784313917160034180e-01 6.784313917160034180e-01 6.784313917160034180e-01 1.000000000000000000e+00 -6.705882549285888672e-01 6.705882549285888672e-01 6.705882549285888672e-01 1.000000000000000000e+00 -6.627451181411743164e-01 6.627451181411743164e-01 6.627451181411743164e-01 1.000000000000000000e+00 -6.549019813537597656e-01 6.549019813537597656e-01 6.549019813537597656e-01 1.000000000000000000e+00 -6.470588445663452148e-01 6.470588445663452148e-01 6.470588445663452148e-01 1.000000000000000000e+00 -6.392157077789306641e-01 6.392157077789306641e-01 6.392157077789306641e-01 1.000000000000000000e+00 -6.313725709915161133e-01 6.313725709915161133e-01 6.313725709915161133e-01 1.000000000000000000e+00 -6.235294342041015625e-01 6.235294342041015625e-01 6.235294342041015625e-01 1.000000000000000000e+00 -6.156862974166870117e-01 6.156862974166870117e-01 6.156862974166870117e-01 1.000000000000000000e+00 -6.078431606292724609e-01 6.078431606292724609e-01 6.078431606292724609e-01 1.000000000000000000e+00 -6.000000238418579102e-01 6.000000238418579102e-01 6.000000238418579102e-01 1.000000000000000000e+00 -5.921568870544433594e-01 5.921568870544433594e-01 5.921568870544433594e-01 1.000000000000000000e+00 -5.843137502670288086e-01 5.843137502670288086e-01 5.843137502670288086e-01 1.000000000000000000e+00 -5.764706134796142578e-01 5.764706134796142578e-01 5.764706134796142578e-01 1.000000000000000000e+00 -5.686274766921997070e-01 5.686274766921997070e-01 5.686274766921997070e-01 1.000000000000000000e+00 -5.607843399047851562e-01 5.607843399047851562e-01 5.607843399047851562e-01 1.000000000000000000e+00 -5.529412031173706055e-01 5.529412031173706055e-01 5.529412031173706055e-01 1.000000000000000000e+00 -5.450980663299560547e-01 5.450980663299560547e-01 5.450980663299560547e-01 1.000000000000000000e+00 -5.372549295425415039e-01 5.372549295425415039e-01 5.372549295425415039e-01 1.000000000000000000e+00 -5.294117927551269531e-01 5.294117927551269531e-01 5.294117927551269531e-01 1.000000000000000000e+00 -5.204921364784240723e-01 5.204921364784240723e-01 5.204921364784240723e-01 1.000000000000000000e+00 -5.115724802017211914e-01 5.115724802017211914e-01 5.115724802017211914e-01 1.000000000000000000e+00 -5.026528239250183105e-01 5.026528239250183105e-01 5.026528239250183105e-01 1.000000000000000000e+00 -4.937331676483154297e-01 4.937331676483154297e-01 4.937331676483154297e-01 1.000000000000000000e+00 -4.848135411739349365e-01 4.848135411739349365e-01 4.848135411739349365e-01 1.000000000000000000e+00 -4.758938848972320557e-01 4.758938848972320557e-01 4.758938848972320557e-01 1.000000000000000000e+00 -4.669742286205291748e-01 4.669742286205291748e-01 4.669742286205291748e-01 1.000000000000000000e+00 -4.580546021461486816e-01 4.580546021461486816e-01 4.580546021461486816e-01 1.000000000000000000e+00 -4.491349458694458008e-01 4.491349458694458008e-01 4.491349458694458008e-01 1.000000000000000000e+00 -4.402152895927429199e-01 4.402152895927429199e-01 4.402152895927429199e-01 1.000000000000000000e+00 -4.312956631183624268e-01 4.312956631183624268e-01 4.312956631183624268e-01 1.000000000000000000e+00 -4.223760068416595459e-01 4.223760068416595459e-01 4.223760068416595459e-01 1.000000000000000000e+00 -4.134563505649566650e-01 4.134563505649566650e-01 4.134563505649566650e-01 1.000000000000000000e+00 -4.045367240905761719e-01 4.045367240905761719e-01 4.045367240905761719e-01 1.000000000000000000e+00 -3.956170678138732910e-01 3.956170678138732910e-01 3.956170678138732910e-01 1.000000000000000000e+00 -3.866974115371704102e-01 3.866974115371704102e-01 3.866974115371704102e-01 1.000000000000000000e+00 -3.777777850627899170e-01 3.777777850627899170e-01 3.777777850627899170e-01 1.000000000000000000e+00 -3.688581287860870361e-01 3.688581287860870361e-01 3.688581287860870361e-01 1.000000000000000000e+00 -3.599384725093841553e-01 3.599384725093841553e-01 3.599384725093841553e-01 1.000000000000000000e+00 -3.510188460350036621e-01 3.510188460350036621e-01 3.510188460350036621e-01 1.000000000000000000e+00 -3.420991897583007812e-01 3.420991897583007812e-01 3.420991897583007812e-01 1.000000000000000000e+00 -3.331795334815979004e-01 3.331795334815979004e-01 3.331795334815979004e-01 1.000000000000000000e+00 -3.242599070072174072e-01 3.242599070072174072e-01 3.242599070072174072e-01 1.000000000000000000e+00 -3.153402507305145264e-01 3.153402507305145264e-01 3.153402507305145264e-01 1.000000000000000000e+00 -3.064205944538116455e-01 3.064205944538116455e-01 3.064205944538116455e-01 1.000000000000000000e+00 -2.980392277240753174e-01 2.980392277240753174e-01 2.980392277240753174e-01 1.000000000000000000e+00 -2.901960909366607666e-01 2.901960909366607666e-01 2.901960909366607666e-01 1.000000000000000000e+00 -2.823529541492462158e-01 2.823529541492462158e-01 2.823529541492462158e-01 1.000000000000000000e+00 -2.745098173618316650e-01 2.745098173618316650e-01 2.745098173618316650e-01 1.000000000000000000e+00 -2.666666805744171143e-01 2.666666805744171143e-01 2.666666805744171143e-01 1.000000000000000000e+00 -2.588235437870025635e-01 2.588235437870025635e-01 2.588235437870025635e-01 1.000000000000000000e+00 -2.509804069995880127e-01 2.509804069995880127e-01 2.509804069995880127e-01 1.000000000000000000e+00 -2.431372553110122681e-01 2.431372553110122681e-01 2.431372553110122681e-01 1.000000000000000000e+00 -2.352941185235977173e-01 2.352941185235977173e-01 2.352941185235977173e-01 1.000000000000000000e+00 -2.274509817361831665e-01 2.274509817361831665e-01 2.274509817361831665e-01 1.000000000000000000e+00 -2.196078449487686157e-01 2.196078449487686157e-01 2.196078449487686157e-01 1.000000000000000000e+00 -2.117647081613540649e-01 2.117647081613540649e-01 2.117647081613540649e-01 1.000000000000000000e+00 -2.039215713739395142e-01 2.039215713739395142e-01 2.039215713739395142e-01 1.000000000000000000e+00 -1.960784345865249634e-01 1.960784345865249634e-01 1.960784345865249634e-01 1.000000000000000000e+00 -1.882352977991104126e-01 1.882352977991104126e-01 1.882352977991104126e-01 1.000000000000000000e+00 -1.803921610116958618e-01 1.803921610116958618e-01 1.803921610116958618e-01 1.000000000000000000e+00 -1.725490242242813110e-01 1.725490242242813110e-01 1.725490242242813110e-01 1.000000000000000000e+00 -1.647058874368667603e-01 1.647058874368667603e-01 1.647058874368667603e-01 1.000000000000000000e+00 -1.568627506494522095e-01 1.568627506494522095e-01 1.568627506494522095e-01 1.000000000000000000e+00 -1.490196138620376587e-01 1.490196138620376587e-01 1.490196138620376587e-01 1.000000000000000000e+00 -1.411764770746231079e-01 1.411764770746231079e-01 1.411764770746231079e-01 1.000000000000000000e+00 -1.333333402872085571e-01 1.333333402872085571e-01 1.333333402872085571e-01 1.000000000000000000e+00 -1.254902034997940063e-01 1.254902034997940063e-01 1.254902034997940063e-01 1.000000000000000000e+00 -1.176470592617988586e-01 1.176470592617988586e-01 1.176470592617988586e-01 1.000000000000000000e+00 -1.098039224743843079e-01 1.098039224743843079e-01 1.098039224743843079e-01 1.000000000000000000e+00 -1.019607856869697571e-01 1.019607856869697571e-01 1.019607856869697571e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/RdPu b/fastplotlib/utils/colormaps/RdPu deleted file mode 100644 index 9c6375b05..000000000 --- a/fastplotlib/utils/colormaps/RdPu +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 9.686274528503417969e-01 9.529411792755126953e-01 1.000000000000000000e+00 -9.997539520263671875e-01 9.657977819442749023e-01 9.502345323562622070e-01 1.000000000000000000e+00 -9.995079040527343750e-01 9.629681110382080078e-01 9.475278854370117188e-01 1.000000000000000000e+00 -9.992617964744567871e-01 9.601383805274963379e-01 9.448212385177612305e-01 1.000000000000000000e+00 -9.990157485008239746e-01 9.573087096214294434e-01 9.421145915985107422e-01 1.000000000000000000e+00 -9.987697005271911621e-01 9.544790387153625488e-01 9.394079446792602539e-01 1.000000000000000000e+00 -9.985236525535583496e-01 9.516493678092956543e-01 9.367012977600097656e-01 1.000000000000000000e+00 -9.982776045799255371e-01 9.488196969032287598e-01 9.339945912361145020e-01 1.000000000000000000e+00 -9.980314970016479492e-01 9.459900259971618652e-01 9.312879443168640137e-01 1.000000000000000000e+00 -9.977854490280151367e-01 9.431602954864501953e-01 9.285812973976135254e-01 1.000000000000000000e+00 -9.975394010543823242e-01 9.403306245803833008e-01 9.258746504783630371e-01 1.000000000000000000e+00 -9.972933530807495117e-01 9.375009536743164062e-01 9.231680035591125488e-01 1.000000000000000000e+00 -9.970473051071166992e-01 9.346712827682495117e-01 9.204613566398620605e-01 1.000000000000000000e+00 -9.968012571334838867e-01 9.318416118621826172e-01 9.177547097206115723e-01 1.000000000000000000e+00 -9.965551495552062988e-01 9.290119409561157227e-01 9.150480628013610840e-01 1.000000000000000000e+00 -9.963091015815734863e-01 9.261822104454040527e-01 9.123414158821105957e-01 1.000000000000000000e+00 -9.960630536079406738e-01 9.233525395393371582e-01 9.096347689628601074e-01 1.000000000000000000e+00 -9.958170056343078613e-01 9.205228686332702637e-01 9.069281220436096191e-01 1.000000000000000000e+00 -9.955709576606750488e-01 9.176931977272033691e-01 9.042214751243591309e-01 1.000000000000000000e+00 -9.953248500823974609e-01 9.148635268211364746e-01 9.015148282051086426e-01 1.000000000000000000e+00 -9.950788021087646484e-01 9.120338559150695801e-01 8.988081216812133789e-01 1.000000000000000000e+00 -9.948327541351318359e-01 9.092041254043579102e-01 8.961014747619628906e-01 1.000000000000000000e+00 -9.945867061614990234e-01 9.063744544982910156e-01 8.933948278427124023e-01 1.000000000000000000e+00 -9.943406581878662109e-01 9.035447835922241211e-01 8.906881809234619141e-01 1.000000000000000000e+00 -9.940945506095886230e-01 9.007151126861572266e-01 8.879815340042114258e-01 1.000000000000000000e+00 -9.938485026359558105e-01 8.978854417800903320e-01 8.852748870849609375e-01 1.000000000000000000e+00 -9.936024546623229980e-01 8.950557708740234375e-01 8.825682401657104492e-01 1.000000000000000000e+00 -9.933564066886901855e-01 8.922260403633117676e-01 8.798615932464599609e-01 1.000000000000000000e+00 -9.931103587150573730e-01 8.893963694572448730e-01 8.771549463272094727e-01 1.000000000000000000e+00 -9.928643107414245605e-01 8.865666985511779785e-01 8.744482994079589844e-01 1.000000000000000000e+00 -9.926182031631469727e-01 8.837370276451110840e-01 8.717416524887084961e-01 1.000000000000000000e+00 -9.923721551895141602e-01 8.809073567390441895e-01 8.690350055694580078e-01 1.000000000000000000e+00 -9.921414852142333984e-01 8.780161738395690918e-01 8.662207126617431641e-01 1.000000000000000000e+00 -9.920184612274169922e-01 8.746943473815917969e-01 8.626528382301330566e-01 1.000000000000000000e+00 -9.918954372406005859e-01 8.713725209236145020e-01 8.590849637985229492e-01 1.000000000000000000e+00 -9.917724132537841797e-01 8.680507540702819824e-01 8.555170893669128418e-01 1.000000000000000000e+00 -9.916493892669677734e-01 8.647289276123046875e-01 8.519492745399475098e-01 1.000000000000000000e+00 -9.915263652801513672e-01 8.614071607589721680e-01 8.483814001083374023e-01 1.000000000000000000e+00 -9.914032816886901855e-01 8.580853343009948730e-01 8.448135256767272949e-01 1.000000000000000000e+00 -9.912802577018737793e-01 8.547635674476623535e-01 8.412456512451171875e-01 1.000000000000000000e+00 -9.911572337150573730e-01 8.514417409896850586e-01 8.376778364181518555e-01 1.000000000000000000e+00 -9.910342097282409668e-01 8.481199741363525391e-01 8.341099619865417480e-01 1.000000000000000000e+00 -9.909111857414245605e-01 8.447981476783752441e-01 8.305420875549316406e-01 1.000000000000000000e+00 -9.907881617546081543e-01 8.414763808250427246e-01 8.269742131233215332e-01 1.000000000000000000e+00 -9.906651377677917480e-01 8.381545543670654297e-01 8.234063982963562012e-01 1.000000000000000000e+00 -9.905421137809753418e-01 8.348327279090881348e-01 8.198385238647460938e-01 1.000000000000000000e+00 -9.904190897941589355e-01 8.315109610557556152e-01 8.162706494331359863e-01 1.000000000000000000e+00 -9.902960658073425293e-01 8.281891345977783203e-01 8.127028346061706543e-01 1.000000000000000000e+00 -9.901729822158813477e-01 8.248673677444458008e-01 8.091349601745605469e-01 1.000000000000000000e+00 -9.900499582290649414e-01 8.215455412864685059e-01 8.055670857429504395e-01 1.000000000000000000e+00 -9.899269342422485352e-01 8.182237744331359863e-01 8.019992113113403320e-01 1.000000000000000000e+00 -9.898039102554321289e-01 8.149019479751586914e-01 7.984313964843750000e-01 1.000000000000000000e+00 -9.896808862686157227e-01 8.115801811218261719e-01 7.948635220527648926e-01 1.000000000000000000e+00 -9.895578622817993164e-01 8.082583546638488770e-01 7.912956476211547852e-01 1.000000000000000000e+00 -9.894348382949829102e-01 8.049365878105163574e-01 7.877277731895446777e-01 1.000000000000000000e+00 -9.893118143081665039e-01 8.016147613525390625e-01 7.841599583625793457e-01 1.000000000000000000e+00 -9.891887903213500977e-01 7.982929348945617676e-01 7.805920839309692383e-01 1.000000000000000000e+00 -9.890657663345336914e-01 7.949711680412292480e-01 7.770242094993591309e-01 1.000000000000000000e+00 -9.889427423477172852e-01 7.916493415832519531e-01 7.734563350677490234e-01 1.000000000000000000e+00 -9.888196587562561035e-01 7.883275747299194336e-01 7.698885202407836914e-01 1.000000000000000000e+00 -9.886966347694396973e-01 7.850057482719421387e-01 7.663206458091735840e-01 1.000000000000000000e+00 -9.885736107826232910e-01 7.816839814186096191e-01 7.627527713775634766e-01 1.000000000000000000e+00 -9.884505867958068848e-01 7.783621549606323242e-01 7.591849565505981445e-01 1.000000000000000000e+00 -9.883275628089904785e-01 7.750403881072998047e-01 7.556170821189880371e-01 1.000000000000000000e+00 -9.881737828254699707e-01 7.713802456855773926e-01 7.526028156280517578e-01 1.000000000000000000e+00 -9.879277348518371582e-01 7.667050957679748535e-01 7.512494921684265137e-01 1.000000000000000000e+00 -9.876816868782043457e-01 7.620300054550170898e-01 7.498961687088012695e-01 1.000000000000000000e+00 -9.874355792999267578e-01 7.573548555374145508e-01 7.485428452491760254e-01 1.000000000000000000e+00 -9.871895313262939453e-01 7.526797652244567871e-01 7.471895217895507812e-01 1.000000000000000000e+00 -9.869434833526611328e-01 7.480046153068542480e-01 7.458361983299255371e-01 1.000000000000000000e+00 -9.866974353790283203e-01 7.433294653892517090e-01 7.444828748703002930e-01 1.000000000000000000e+00 -9.864513874053955078e-01 7.386543750762939453e-01 7.431295514106750488e-01 1.000000000000000000e+00 -9.862052798271179199e-01 7.339792251586914062e-01 7.417762279510498047e-01 1.000000000000000000e+00 -9.859592318534851074e-01 7.293041348457336426e-01 7.404229044914245605e-01 1.000000000000000000e+00 -9.857131838798522949e-01 7.246289849281311035e-01 7.390695810317993164e-01 1.000000000000000000e+00 -9.854671359062194824e-01 7.199538350105285645e-01 7.377162575721740723e-01 1.000000000000000000e+00 -9.852210879325866699e-01 7.152787446975708008e-01 7.363629341125488281e-01 1.000000000000000000e+00 -9.849749803543090820e-01 7.106035947799682617e-01 7.350096106529235840e-01 1.000000000000000000e+00 -9.847289323806762695e-01 7.059285044670104980e-01 7.336562871932983398e-01 1.000000000000000000e+00 -9.844828844070434570e-01 7.012533545494079590e-01 7.323029637336730957e-01 1.000000000000000000e+00 -9.842368364334106445e-01 6.965782642364501953e-01 7.309496402740478516e-01 1.000000000000000000e+00 -9.839907884597778320e-01 6.919031143188476562e-01 7.295963168144226074e-01 1.000000000000000000e+00 -9.837447404861450195e-01 6.872279644012451172e-01 7.282429933547973633e-01 1.000000000000000000e+00 -9.834986329078674316e-01 6.825528740882873535e-01 7.268896698951721191e-01 1.000000000000000000e+00 -9.832525849342346191e-01 6.778777241706848145e-01 7.255363464355468750e-01 1.000000000000000000e+00 -9.830065369606018066e-01 6.732026338577270508e-01 7.241830229759216309e-01 1.000000000000000000e+00 -9.827604889869689941e-01 6.685274839401245117e-01 7.228296995162963867e-01 1.000000000000000000e+00 -9.825144410133361816e-01 6.638523936271667480e-01 7.214763760566711426e-01 1.000000000000000000e+00 -9.822683334350585938e-01 6.591772437095642090e-01 7.201230525970458984e-01 1.000000000000000000e+00 -9.820222854614257812e-01 6.545020937919616699e-01 7.187697291374206543e-01 1.000000000000000000e+00 -9.817762374877929688e-01 6.498270034790039062e-01 7.174164056777954102e-01 1.000000000000000000e+00 -9.815301895141601562e-01 6.451518535614013672e-01 7.160630822181701660e-01 1.000000000000000000e+00 -9.812841415405273438e-01 6.404767632484436035e-01 7.147096991539001465e-01 1.000000000000000000e+00 -9.810380339622497559e-01 6.358016133308410645e-01 7.133563756942749023e-01 1.000000000000000000e+00 -9.807919859886169434e-01 6.311264634132385254e-01 7.120030522346496582e-01 1.000000000000000000e+00 -9.805459380149841309e-01 6.264513731002807617e-01 7.106497287750244141e-01 1.000000000000000000e+00 -9.802537560462951660e-01 6.209919452667236328e-01 7.088811993598937988e-01 1.000000000000000000e+00 -9.798846840858459473e-01 6.142252683639526367e-01 7.064206004142761230e-01 1.000000000000000000e+00 -9.795155525207519531e-01 6.074586510658264160e-01 7.039600014686584473e-01 1.000000000000000000e+00 -9.791464805603027344e-01 6.006920337677001953e-01 7.014994025230407715e-01 1.000000000000000000e+00 -9.787774085998535156e-01 5.939254164695739746e-01 6.990388035774230957e-01 1.000000000000000000e+00 -9.784082770347595215e-01 5.871587991714477539e-01 6.965782642364501953e-01 1.000000000000000000e+00 -9.780392050743103027e-01 5.803921818733215332e-01 6.941176652908325195e-01 1.000000000000000000e+00 -9.776701331138610840e-01 5.736255049705505371e-01 6.916570663452148438e-01 1.000000000000000000e+00 -9.773010611534118652e-01 5.668588876724243164e-01 6.891964673995971680e-01 1.000000000000000000e+00 -9.769319295883178711e-01 5.600922703742980957e-01 6.867358684539794922e-01 1.000000000000000000e+00 -9.765628576278686523e-01 5.533256530761718750e-01 6.842752695083618164e-01 1.000000000000000000e+00 -9.761937856674194336e-01 5.465590357780456543e-01 6.818146705627441406e-01 1.000000000000000000e+00 -9.758246541023254395e-01 5.397923588752746582e-01 6.793540716171264648e-01 1.000000000000000000e+00 -9.754555821418762207e-01 5.330257415771484375e-01 6.768935322761535645e-01 1.000000000000000000e+00 -9.750865101814270020e-01 5.262591242790222168e-01 6.744329333305358887e-01 1.000000000000000000e+00 -9.747174382209777832e-01 5.194925069808959961e-01 6.719723343849182129e-01 1.000000000000000000e+00 -9.743483066558837891e-01 5.127258896827697754e-01 6.695117354393005371e-01 1.000000000000000000e+00 -9.739792346954345703e-01 5.059592723846435547e-01 6.670511364936828613e-01 1.000000000000000000e+00 -9.736101627349853516e-01 4.991926252841949463e-01 6.645905375480651855e-01 1.000000000000000000e+00 -9.732410907745361328e-01 4.924259781837463379e-01 6.621299386024475098e-01 1.000000000000000000e+00 -9.728719592094421387e-01 4.856593608856201172e-01 6.596693396568298340e-01 1.000000000000000000e+00 -9.725028872489929199e-01 4.788927435874938965e-01 6.572087407112121582e-01 1.000000000000000000e+00 -9.721338152885437012e-01 4.721260964870452881e-01 6.547482013702392578e-01 1.000000000000000000e+00 -9.717646837234497070e-01 4.653594791889190674e-01 6.522876024246215820e-01 1.000000000000000000e+00 -9.713956117630004883e-01 4.585928618907928467e-01 6.498270034790039062e-01 1.000000000000000000e+00 -9.710265398025512695e-01 4.518262147903442383e-01 6.473664045333862305e-01 1.000000000000000000e+00 -9.706574678421020508e-01 4.450595974922180176e-01 6.449058055877685547e-01 1.000000000000000000e+00 -9.702883362770080566e-01 4.382929503917694092e-01 6.424452066421508789e-01 1.000000000000000000e+00 -9.699192643165588379e-01 4.315263330936431885e-01 6.399846076965332031e-01 1.000000000000000000e+00 -9.695501923561096191e-01 4.247597157955169678e-01 6.375240087509155273e-01 1.000000000000000000e+00 -9.691810607910156250e-01 4.179930686950683594e-01 6.350634098052978516e-01 1.000000000000000000e+00 -9.688119888305664062e-01 4.112264513969421387e-01 6.326028704643249512e-01 1.000000000000000000e+00 -9.670280814170837402e-01 4.046443700790405273e-01 6.307573914527893066e-01 1.000000000000000000e+00 -9.638292789459228516e-01 3.982468247413635254e-01 6.295270919799804688e-01 1.000000000000000000e+00 -9.606305360794067383e-01 3.918492794036865234e-01 6.282967925071716309e-01 1.000000000000000000e+00 -9.574317336082458496e-01 3.854517638683319092e-01 6.270664930343627930e-01 1.000000000000000000e+00 -9.542329907417297363e-01 3.790542185306549072e-01 6.258361935615539551e-01 1.000000000000000000e+00 -9.510341882705688477e-01 3.726566731929779053e-01 6.246058940887451172e-01 1.000000000000000000e+00 -9.478354454040527344e-01 3.662591278553009033e-01 6.233756542205810547e-01 1.000000000000000000e+00 -9.446367025375366211e-01 3.598615825176239014e-01 6.221453547477722168e-01 1.000000000000000000e+00 -9.414379000663757324e-01 3.534640669822692871e-01 6.209150552749633789e-01 1.000000000000000000e+00 -9.382391571998596191e-01 3.470665216445922852e-01 6.196847558021545410e-01 1.000000000000000000e+00 -9.350403547286987305e-01 3.406689763069152832e-01 6.184544563293457031e-01 1.000000000000000000e+00 -9.318416118621826172e-01 3.342714309692382812e-01 6.172241568565368652e-01 1.000000000000000000e+00 -9.286428093910217285e-01 3.278738856315612793e-01 6.159938573837280273e-01 1.000000000000000000e+00 -9.254440665245056152e-01 3.214763700962066650e-01 6.147635579109191895e-01 1.000000000000000000e+00 -9.222452640533447266e-01 3.150788247585296631e-01 6.135332584381103516e-01 1.000000000000000000e+00 -9.190465211868286133e-01 3.086812794208526611e-01 6.123029589653015137e-01 1.000000000000000000e+00 -9.158477783203125000e-01 3.022837340831756592e-01 6.110726594924926758e-01 1.000000000000000000e+00 -9.126489758491516113e-01 2.958861887454986572e-01 6.098423600196838379e-01 1.000000000000000000e+00 -9.094502329826354980e-01 2.894886434078216553e-01 6.086120605468750000e-01 1.000000000000000000e+00 -9.062514305114746094e-01 2.830911278724670410e-01 6.073817610740661621e-01 1.000000000000000000e+00 -9.030526876449584961e-01 2.766935825347900391e-01 6.061514616012573242e-01 1.000000000000000000e+00 -8.998538851737976074e-01 2.702960371971130371e-01 6.049211621284484863e-01 1.000000000000000000e+00 -8.966551423072814941e-01 2.638984918594360352e-01 6.036908626556396484e-01 1.000000000000000000e+00 -8.934563398361206055e-01 2.575009465217590332e-01 6.024605631828308105e-01 1.000000000000000000e+00 -8.902575969696044922e-01 2.511034309864044189e-01 6.012303233146667480e-01 1.000000000000000000e+00 -8.870587944984436035e-01 2.447058856487274170e-01 6.000000238418579102e-01 1.000000000000000000e+00 -8.838600516319274902e-01 2.383083403110504150e-01 5.987697243690490723e-01 1.000000000000000000e+00 -8.806613087654113770e-01 2.319108098745346069e-01 5.975394248962402344e-01 1.000000000000000000e+00 -8.774625062942504883e-01 2.255132645368576050e-01 5.963091254234313965e-01 1.000000000000000000e+00 -8.742637634277343750e-01 2.191157191991806030e-01 5.950788259506225586e-01 1.000000000000000000e+00 -8.710649609565734863e-01 2.127181887626647949e-01 5.938485264778137207e-01 1.000000000000000000e+00 -8.678662180900573730e-01 2.063206434249877930e-01 5.926182270050048828e-01 1.000000000000000000e+00 -8.630526661872863770e-01 2.000000029802322388e-01 5.902345180511474609e-01 1.000000000000000000e+00 -8.572703003883361816e-01 1.937254965305328369e-01 5.871587991714477539e-01 1.000000000000000000e+00 -8.514878749847412109e-01 1.874509751796722412e-01 5.840830206871032715e-01 1.000000000000000000e+00 -8.457055091857910156e-01 1.811764687299728394e-01 5.810073018074035645e-01 1.000000000000000000e+00 -8.399230837821960449e-01 1.749019622802734375e-01 5.779315829277038574e-01 1.000000000000000000e+00 -8.341407179832458496e-01 1.686274558305740356e-01 5.748558044433593750e-01 1.000000000000000000e+00 -8.283583521842956543e-01 1.623529344797134399e-01 5.717800855636596680e-01 1.000000000000000000e+00 -8.225759267807006836e-01 1.560784280300140381e-01 5.687043666839599609e-01 1.000000000000000000e+00 -8.167935609817504883e-01 1.498039215803146362e-01 5.656285881996154785e-01 1.000000000000000000e+00 -8.110111355781555176e-01 1.435294151306152344e-01 5.625528693199157715e-01 1.000000000000000000e+00 -8.052287697792053223e-01 1.372549086809158325e-01 5.594771504402160645e-01 1.000000000000000000e+00 -7.994463443756103516e-01 1.309803873300552368e-01 5.564013719558715820e-01 1.000000000000000000e+00 -7.936639785766601562e-01 1.247058808803558350e-01 5.533256530761718750e-01 1.000000000000000000e+00 -7.878816127777099609e-01 1.184313744306564331e-01 5.502498745918273926e-01 1.000000000000000000e+00 -7.820991873741149902e-01 1.121568605303764343e-01 5.471741557121276855e-01 1.000000000000000000e+00 -7.763168215751647949e-01 1.058823540806770325e-01 5.440984368324279785e-01 1.000000000000000000e+00 -7.705343961715698242e-01 9.960784018039703369e-02 5.410226583480834961e-01 1.000000000000000000e+00 -7.647520303726196289e-01 9.333333373069763184e-02 5.379469394683837891e-01 1.000000000000000000e+00 -7.589696049690246582e-01 8.705881983041763306e-02 5.348712205886840820e-01 1.000000000000000000e+00 -7.531872391700744629e-01 8.078431338071823120e-02 5.317954421043395996e-01 1.000000000000000000e+00 -7.474048733711242676e-01 7.450980693101882935e-02 5.287197232246398926e-01 1.000000000000000000e+00 -7.416224479675292969e-01 6.823529303073883057e-02 5.256440043449401855e-01 1.000000000000000000e+00 -7.358400821685791016e-01 6.196078285574913025e-02 5.225682258605957031e-01 1.000000000000000000e+00 -7.300576567649841309e-01 5.568627268075942993e-02 5.194925069808959961e-01 1.000000000000000000e+00 -7.242752909660339355e-01 4.941176623106002808e-02 5.164167881011962891e-01 1.000000000000000000e+00 -7.184928655624389648e-01 4.313725605607032776e-02 5.133410096168518066e-01 1.000000000000000000e+00 -7.127104997634887695e-01 3.686274588108062744e-02 5.102652907371520996e-01 1.000000000000000000e+00 -7.069281339645385742e-01 3.058823570609092712e-02 5.071895718574523926e-01 1.000000000000000000e+00 -7.011457085609436035e-01 2.431372553110122681e-02 5.041137933731079102e-01 1.000000000000000000e+00 -6.953633427619934082e-01 1.803921535611152649e-02 5.010380744934082031e-01 1.000000000000000000e+00 -6.895809173583984375e-01 1.176470611244440079e-02 4.979623258113861084e-01 1.000000000000000000e+00 -6.837985515594482422e-01 5.490195937454700470e-03 4.948865771293640137e-01 1.000000000000000000e+00 -6.775547862052917480e-01 3.921568859368562698e-03 4.934717416763305664e-01 1.000000000000000000e+00 -6.711572408676147461e-01 3.921568859368562698e-03 4.926105439662933350e-01 1.000000000000000000e+00 -6.647596955299377441e-01 3.921568859368562698e-03 4.917493164539337158e-01 1.000000000000000000e+00 -6.583621501922607422e-01 3.921568859368562698e-03 4.908881187438964844e-01 1.000000000000000000e+00 -6.519646048545837402e-01 3.921568859368562698e-03 4.900269210338592529e-01 1.000000000000000000e+00 -6.455671191215515137e-01 3.921568859368562698e-03 4.891656935214996338e-01 1.000000000000000000e+00 -6.391695737838745117e-01 3.921568859368562698e-03 4.883044958114624023e-01 1.000000000000000000e+00 -6.327720284461975098e-01 3.921568859368562698e-03 4.874432981014251709e-01 1.000000000000000000e+00 -6.263744831085205078e-01 3.921568859368562698e-03 4.865820705890655518e-01 1.000000000000000000e+00 -6.199769377708435059e-01 3.921568859368562698e-03 4.857208728790283203e-01 1.000000000000000000e+00 -6.135793924331665039e-01 3.921568859368562698e-03 4.848596751689910889e-01 1.000000000000000000e+00 -6.071818470954895020e-01 3.921568859368562698e-03 4.839984476566314697e-01 1.000000000000000000e+00 -6.007843017578125000e-01 3.921568859368562698e-03 4.831372499465942383e-01 1.000000000000000000e+00 -5.943867564201354980e-01 3.921568859368562698e-03 4.822760522365570068e-01 1.000000000000000000e+00 -5.879892110824584961e-01 3.921568859368562698e-03 4.814148545265197754e-01 1.000000000000000000e+00 -5.815916657447814941e-01 3.921568859368562698e-03 4.805536270141601562e-01 1.000000000000000000e+00 -5.751941800117492676e-01 3.921568859368562698e-03 4.796924293041229248e-01 1.000000000000000000e+00 -5.687966346740722656e-01 3.921568859368562698e-03 4.788312315940856934e-01 1.000000000000000000e+00 -5.623990893363952637e-01 3.921568859368562698e-03 4.779700040817260742e-01 1.000000000000000000e+00 -5.560015439987182617e-01 3.921568859368562698e-03 4.771088063716888428e-01 1.000000000000000000e+00 -5.496039986610412598e-01 3.921568859368562698e-03 4.762476086616516113e-01 1.000000000000000000e+00 -5.432064533233642578e-01 3.921568859368562698e-03 4.753863811492919922e-01 1.000000000000000000e+00 -5.368089079856872559e-01 3.921568859368562698e-03 4.745251834392547607e-01 1.000000000000000000e+00 -5.304113626480102539e-01 3.921568859368562698e-03 4.736639857292175293e-01 1.000000000000000000e+00 -5.240138173103332520e-01 3.921568859368562698e-03 4.728027582168579102e-01 1.000000000000000000e+00 -5.176162719726562500e-01 3.921568859368562698e-03 4.719415605068206787e-01 1.000000000000000000e+00 -5.112187862396240234e-01 3.921568859368562698e-03 4.710803627967834473e-01 1.000000000000000000e+00 -5.048212409019470215e-01 3.921568859368562698e-03 4.702191352844238281e-01 1.000000000000000000e+00 -4.984236955642700195e-01 3.921568859368562698e-03 4.693579375743865967e-01 1.000000000000000000e+00 -4.920261502265930176e-01 3.921568859368562698e-03 4.684967398643493652e-01 1.000000000000000000e+00 -4.856286048889160156e-01 3.921568859368562698e-03 4.676355123519897461e-01 1.000000000000000000e+00 -4.792310595512390137e-01 3.921568859368562698e-03 4.667743146419525146e-01 1.000000000000000000e+00 -4.731564819812774658e-01 3.813917748630046844e-03 4.652672111988067627e-01 1.000000000000000000e+00 -4.671280384063720703e-01 3.690888173878192902e-03 4.636678099632263184e-01 1.000000000000000000e+00 -4.610995650291442871e-01 3.567858599126338959e-03 4.620684385299682617e-01 1.000000000000000000e+00 -4.550711214542388916e-01 3.444829024374485016e-03 4.604690372943878174e-01 1.000000000000000000e+00 -4.490426778793334961e-01 3.321799216791987419e-03 4.588696658611297607e-01 1.000000000000000000e+00 -4.430142343044281006e-01 3.198769642040133476e-03 4.572702944278717041e-01 1.000000000000000000e+00 -4.369857609272003174e-01 3.075740067288279533e-03 4.556708931922912598e-01 1.000000000000000000e+00 -4.309573173522949219e-01 2.952710492536425591e-03 4.540715217590332031e-01 1.000000000000000000e+00 -4.249288737773895264e-01 2.829680917784571648e-03 4.524721205234527588e-01 1.000000000000000000e+00 -4.189004302024841309e-01 2.706651343032717705e-03 4.508727490901947021e-01 1.000000000000000000e+00 -4.128719866275787354e-01 2.583621768280863762e-03 4.492733478546142578e-01 1.000000000000000000e+00 -4.068435132503509521e-01 2.460592193529009819e-03 4.476739764213562012e-01 1.000000000000000000e+00 -4.008150696754455566e-01 2.337562385946512222e-03 4.460745751857757568e-01 1.000000000000000000e+00 -3.947866261005401611e-01 2.214532811194658279e-03 4.444752037525177002e-01 1.000000000000000000e+00 -3.887581825256347656e-01 2.091503236442804337e-03 4.428758025169372559e-01 1.000000000000000000e+00 -3.827297091484069824e-01 1.968473661690950394e-03 4.412764310836791992e-01 1.000000000000000000e+00 -3.767012655735015869e-01 1.845444086939096451e-03 4.396770596504211426e-01 1.000000000000000000e+00 -3.706728219985961914e-01 1.722414512187242508e-03 4.380776584148406982e-01 1.000000000000000000e+00 -3.646443784236907959e-01 1.599384821020066738e-03 4.364782869815826416e-01 1.000000000000000000e+00 -3.586159050464630127e-01 1.476355246268212795e-03 4.348788857460021973e-01 1.000000000000000000e+00 -3.525874614715576172e-01 1.353325671516358852e-03 4.332795143127441406e-01 1.000000000000000000e+00 -3.465590178966522217e-01 1.230296096764504910e-03 4.316801130771636963e-01 1.000000000000000000e+00 -3.405305743217468262e-01 1.107266405597329140e-03 4.300807416439056396e-01 1.000000000000000000e+00 -3.345021009445190430e-01 9.842368308454751968e-04 4.284813404083251953e-01 1.000000000000000000e+00 -3.284736573696136475e-01 8.612072560936212540e-04 4.268819689750671387e-01 1.000000000000000000e+00 -3.224452137947082520e-01 7.381776231341063976e-04 4.252825975418090820e-01 1.000000000000000000e+00 -3.164167702198028564e-01 6.151480483822524548e-04 4.236831963062286377e-01 1.000000000000000000e+00 -3.103883266448974609e-01 4.921184154227375984e-04 4.220838248729705811e-01 1.000000000000000000e+00 -3.043598532676696777e-01 3.690888115670531988e-04 4.204844236373901367e-01 1.000000000000000000e+00 -2.983314096927642822e-01 2.460592077113687992e-04 4.188850522041320801e-01 1.000000000000000000e+00 -2.923029661178588867e-01 1.230296038556843996e-04 4.172856509685516357e-01 1.000000000000000000e+00 -2.862745225429534912e-01 0.000000000000000000e+00 4.156862795352935791e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/RdYlBu b/fastplotlib/utils/colormaps/RdYlBu deleted file mode 100644 index 9323fe0b1..000000000 --- a/fastplotlib/utils/colormaps/RdYlBu +++ /dev/null @@ -1,256 +0,0 @@ -6.470588445663452148e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.547482013702392578e-01 7.381776347756385803e-03 1.491733938455581665e-01 1.000000000000000000e+00 -6.624374985694885254e-01 1.476355269551277161e-02 1.493271887302398682e-01 1.000000000000000000e+00 -6.701268553733825684e-01 2.214532904326915741e-02 1.494809687137603760e-01 1.000000000000000000e+00 -6.778162121772766113e-01 2.952710539102554321e-02 1.496347486972808838e-01 1.000000000000000000e+00 -6.855055689811706543e-01 3.690887987613677979e-02 1.497885435819625854e-01 1.000000000000000000e+00 -6.931949257850646973e-01 4.429065808653831482e-02 1.499423235654830933e-01 1.000000000000000000e+00 -7.008842825889587402e-01 5.167243257164955139e-02 1.500961184501647949e-01 1.000000000000000000e+00 -7.085736393928527832e-01 5.905421078205108643e-02 1.502498984336853027e-01 1.000000000000000000e+00 -7.162629961967468262e-01 6.643598526716232300e-02 1.504036933183670044e-01 1.000000000000000000e+00 -7.239523530006408691e-01 7.381775975227355957e-02 1.505574733018875122e-01 1.000000000000000000e+00 -7.316416501998901367e-01 8.119954168796539307e-02 1.507112681865692139e-01 1.000000000000000000e+00 -7.393310070037841797e-01 8.858131617307662964e-02 1.508650481700897217e-01 1.000000000000000000e+00 -7.470203638076782227e-01 9.596309065818786621e-02 1.510188430547714233e-01 1.000000000000000000e+00 -7.547097206115722656e-01 1.033448651432991028e-01 1.511726230382919312e-01 1.000000000000000000e+00 -7.623990774154663086e-01 1.107266470789909363e-01 1.513264179229736328e-01 1.000000000000000000e+00 -7.700884342193603516e-01 1.181084215641021729e-01 1.514801979064941406e-01 1.000000000000000000e+00 -7.777777910232543945e-01 1.254902034997940063e-01 1.516339927911758423e-01 1.000000000000000000e+00 -7.854671478271484375e-01 1.328719705343246460e-01 1.517877727746963501e-01 1.000000000000000000e+00 -7.931565046310424805e-01 1.402537524700164795e-01 1.519415676593780518e-01 1.000000000000000000e+00 -8.008458018302917480e-01 1.476355195045471191e-01 1.520953476428985596e-01 1.000000000000000000e+00 -8.085351586341857910e-01 1.550173014402389526e-01 1.522491276264190674e-01 1.000000000000000000e+00 -8.162245154380798340e-01 1.623990833759307861e-01 1.524029225111007690e-01 1.000000000000000000e+00 -8.239138722419738770e-01 1.697808504104614258e-01 1.525567024946212769e-01 1.000000000000000000e+00 -8.316032290458679199e-01 1.771626323461532593e-01 1.527104973793029785e-01 1.000000000000000000e+00 -8.392925858497619629e-01 1.845443993806838989e-01 1.528642773628234863e-01 1.000000000000000000e+00 -8.453671932220458984e-01 1.929257959127426147e-01 1.550941914319992065e-01 1.000000000000000000e+00 -8.498269915580749512e-01 2.023068070411682129e-01 1.594002246856689453e-01 1.000000000000000000e+00 -8.542867898941040039e-01 2.116878181695938110e-01 1.637062728404998779e-01 1.000000000000000000e+00 -8.587466478347778320e-01 2.210688143968582153e-01 1.680123060941696167e-01 1.000000000000000000e+00 -8.632064461708068848e-01 2.304498255252838135e-01 1.723183393478393555e-01 1.000000000000000000e+00 -8.676663041114807129e-01 2.398308366537094116e-01 1.766243726015090942e-01 1.000000000000000000e+00 -8.721261024475097656e-01 2.492118477821350098e-01 1.809304058551788330e-01 1.000000000000000000e+00 -8.765859007835388184e-01 2.585928440093994141e-01 1.852364540100097656e-01 1.000000000000000000e+00 -8.810457587242126465e-01 2.679738700389862061e-01 1.895424872636795044e-01 1.000000000000000000e+00 -8.855055570602416992e-01 2.773548662662506104e-01 1.938485205173492432e-01 1.000000000000000000e+00 -8.899654150009155273e-01 2.867358624935150146e-01 1.981545537710189819e-01 1.000000000000000000e+00 -8.944252133369445801e-01 2.961168885231018066e-01 2.024605870246887207e-01 1.000000000000000000e+00 -8.988850712776184082e-01 3.054978847503662109e-01 2.067666351795196533e-01 1.000000000000000000e+00 -9.033448696136474609e-01 3.148788809776306152e-01 2.110726684331893921e-01 1.000000000000000000e+00 -9.078046679496765137e-01 3.242599070072174072e-01 2.153787016868591309e-01 1.000000000000000000e+00 -9.122645258903503418e-01 3.336409032344818115e-01 2.196847349405288696e-01 1.000000000000000000e+00 -9.167243242263793945e-01 3.430219292640686035e-01 2.239907681941986084e-01 1.000000000000000000e+00 -9.211841821670532227e-01 3.524029254913330078e-01 2.282968163490295410e-01 1.000000000000000000e+00 -9.256439805030822754e-01 3.617839217185974121e-01 2.326028496026992798e-01 1.000000000000000000e+00 -9.301037788391113281e-01 3.711649477481842041e-01 2.369088828563690186e-01 1.000000000000000000e+00 -9.345636367797851562e-01 3.805459439754486084e-01 2.412149161100387573e-01 1.000000000000000000e+00 -9.390234351158142090e-01 3.899269402027130127e-01 2.455209493637084961e-01 1.000000000000000000e+00 -9.434832930564880371e-01 3.993079662322998047e-01 2.498269826173782349e-01 1.000000000000000000e+00 -9.479430913925170898e-01 4.086889624595642090e-01 2.541330158710479736e-01 1.000000000000000000e+00 -9.524029493331909180e-01 4.180699586868286133e-01 2.584390640258789062e-01 1.000000000000000000e+00 -9.568627476692199707e-01 4.274509847164154053e-01 2.627451121807098389e-01 1.000000000000000000e+00 -9.582468271255493164e-01 4.374471306800842285e-01 2.673587203025817871e-01 1.000000000000000000e+00 -9.596309065818786621e-01 4.474432766437530518e-01 2.719723284244537354e-01 1.000000000000000000e+00 -9.610149860382080078e-01 4.574394524097442627e-01 2.765859365463256836e-01 1.000000000000000000e+00 -9.623990654945373535e-01 4.674355983734130859e-01 2.811995446681976318e-01 1.000000000000000000e+00 -9.637831449508666992e-01 4.774317443370819092e-01 2.858131527900695801e-01 1.000000000000000000e+00 -9.651672244071960449e-01 4.874279201030731201e-01 2.904267609119415283e-01 1.000000000000000000e+00 -9.665513038635253906e-01 4.974240660667419434e-01 2.950403690338134766e-01 1.000000000000000000e+00 -9.679353833198547363e-01 5.074202418327331543e-01 2.996539771556854248e-01 1.000000000000000000e+00 -9.693194627761840820e-01 5.174163579940795898e-01 3.042675852775573730e-01 1.000000000000000000e+00 -9.707036018371582031e-01 5.274125337600708008e-01 3.088811933994293213e-01 1.000000000000000000e+00 -9.720876812934875488e-01 5.374087095260620117e-01 3.134948015213012695e-01 1.000000000000000000e+00 -9.734717607498168945e-01 5.474048256874084473e-01 3.181084096431732178e-01 1.000000000000000000e+00 -9.748558402061462402e-01 5.574010014533996582e-01 3.227220177650451660e-01 1.000000000000000000e+00 -9.762399196624755859e-01 5.673971772193908691e-01 3.273356258869171143e-01 1.000000000000000000e+00 -9.776239991188049316e-01 5.773932933807373047e-01 3.319492638111114502e-01 1.000000000000000000e+00 -9.790080785751342773e-01 5.873894691467285156e-01 3.365628719329833984e-01 1.000000000000000000e+00 -9.803921580314636230e-01 5.973856449127197266e-01 3.411764800548553467e-01 1.000000000000000000e+00 -9.817762374877929688e-01 6.073817610740661621e-01 3.457900881767272949e-01 1.000000000000000000e+00 -9.831603169441223145e-01 6.173779368400573730e-01 3.504036962985992432e-01 1.000000000000000000e+00 -9.845443964004516602e-01 6.273741126060485840e-01 3.550173044204711914e-01 1.000000000000000000e+00 -9.859284758567810059e-01 6.373702287673950195e-01 3.596309125423431396e-01 1.000000000000000000e+00 -9.873125553131103516e-01 6.473664045333862305e-01 3.642445206642150879e-01 1.000000000000000000e+00 -9.886966347694396973e-01 6.573625802993774414e-01 3.688581287860870361e-01 1.000000000000000000e+00 -9.900807142257690430e-01 6.673586964607238770e-01 3.734717369079589844e-01 1.000000000000000000e+00 -9.914647936820983887e-01 6.773548722267150879e-01 3.780853450298309326e-01 1.000000000000000000e+00 -9.922337532043457031e-01 6.861976385116577148e-01 3.840061426162719727e-01 1.000000000000000000e+00 -9.923875331878662109e-01 6.938869953155517578e-01 3.912341296672821045e-01 1.000000000000000000e+00 -9.925413131713867188e-01 7.015762925148010254e-01 3.984621167182922363e-01 1.000000000000000000e+00 -9.926950931549072266e-01 7.092656493186950684e-01 4.056901335716247559e-01 1.000000000000000000e+00 -9.928489327430725098e-01 7.169550061225891113e-01 4.129181206226348877e-01 1.000000000000000000e+00 -9.930027127265930176e-01 7.246443629264831543e-01 4.201461076736450195e-01 1.000000000000000000e+00 -9.931564927101135254e-01 7.323337197303771973e-01 4.273740947246551514e-01 1.000000000000000000e+00 -9.933102726936340332e-01 7.400230765342712402e-01 4.346020817756652832e-01 1.000000000000000000e+00 -9.934640526771545410e-01 7.477124333381652832e-01 4.418300688266754150e-01 1.000000000000000000e+00 -9.936178326606750488e-01 7.554017901420593262e-01 4.490580558776855469e-01 1.000000000000000000e+00 -9.937716126441955566e-01 7.630911469459533691e-01 4.562860429286956787e-01 1.000000000000000000e+00 -9.939253926277160645e-01 7.707804441452026367e-01 4.635140299797058105e-01 1.000000000000000000e+00 -9.940791726112365723e-01 7.784698009490966797e-01 4.707420170307159424e-01 1.000000000000000000e+00 -9.942330121994018555e-01 7.861591577529907227e-01 4.779700040817260742e-01 1.000000000000000000e+00 -9.943867921829223633e-01 7.938485145568847656e-01 4.851979911327362061e-01 1.000000000000000000e+00 -9.945405721664428711e-01 8.015378713607788086e-01 4.924259781837463379e-01 1.000000000000000000e+00 -9.946943521499633789e-01 8.092272281646728516e-01 4.996539652347564697e-01 1.000000000000000000e+00 -9.948481321334838867e-01 8.169165849685668945e-01 5.068819522857666016e-01 1.000000000000000000e+00 -9.950019121170043945e-01 8.246059417724609375e-01 5.141099691390991211e-01 1.000000000000000000e+00 -9.951556921005249023e-01 8.322952985763549805e-01 5.213379263877868652e-01 1.000000000000000000e+00 -9.953094720840454102e-01 8.399845957756042480e-01 5.285659432411193848e-01 1.000000000000000000e+00 -9.954633116722106934e-01 8.476739525794982910e-01 5.357939004898071289e-01 1.000000000000000000e+00 -9.956170916557312012e-01 8.553633093833923340e-01 5.430219173431396484e-01 1.000000000000000000e+00 -9.957708716392517090e-01 8.630526661872863770e-01 5.502498745918273926e-01 1.000000000000000000e+00 -9.959246516227722168e-01 8.707420229911804199e-01 5.574778914451599121e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.784313797950744629e-01 5.647059082984924316e-01 1.000000000000000000e+00 -9.962322115898132324e-01 8.831987977027893066e-01 5.719338655471801758e-01 1.000000000000000000e+00 -9.963859915733337402e-01 8.879661560058593750e-01 5.791618824005126953e-01 1.000000000000000000e+00 -9.965397715568542480e-01 8.927335739135742188e-01 5.863898396492004395e-01 1.000000000000000000e+00 -9.966935515403747559e-01 8.975009322166442871e-01 5.936178565025329590e-01 1.000000000000000000e+00 -9.968473911285400391e-01 9.022683501243591309e-01 6.008458137512207031e-01 1.000000000000000000e+00 -9.970011711120605469e-01 9.070357680320739746e-01 6.080738306045532227e-01 1.000000000000000000e+00 -9.971549510955810547e-01 9.118031263351440430e-01 6.153017878532409668e-01 1.000000000000000000e+00 -9.973087310791015625e-01 9.165705442428588867e-01 6.225298047065734863e-01 1.000000000000000000e+00 -9.974625110626220703e-01 9.213379621505737305e-01 6.297577619552612305e-01 1.000000000000000000e+00 -9.976162910461425781e-01 9.261053204536437988e-01 6.369857788085937500e-01 1.000000000000000000e+00 -9.977700710296630859e-01 9.308727383613586426e-01 6.442137360572814941e-01 1.000000000000000000e+00 -9.979238510131835938e-01 9.356401562690734863e-01 6.514417529106140137e-01 1.000000000000000000e+00 -9.980776906013488770e-01 9.404075145721435547e-01 6.586697697639465332e-01 1.000000000000000000e+00 -9.982314705848693848e-01 9.451749324798583984e-01 6.658977270126342773e-01 1.000000000000000000e+00 -9.983852505683898926e-01 9.499423503875732422e-01 6.731257438659667969e-01 1.000000000000000000e+00 -9.985390305519104004e-01 9.547097086906433105e-01 6.803537011146545410e-01 1.000000000000000000e+00 -9.986928105354309082e-01 9.594771265983581543e-01 6.875817179679870605e-01 1.000000000000000000e+00 -9.988465905189514160e-01 9.642445445060729980e-01 6.948096752166748047e-01 1.000000000000000000e+00 -9.990003705024719238e-01 9.690119028091430664e-01 7.020376920700073242e-01 1.000000000000000000e+00 -9.991541504859924316e-01 9.737793207168579102e-01 7.092656493186950684e-01 1.000000000000000000e+00 -9.993079304695129395e-01 9.785467386245727539e-01 7.164936661720275879e-01 1.000000000000000000e+00 -9.994617700576782227e-01 9.833140969276428223e-01 7.237216234207153320e-01 1.000000000000000000e+00 -9.996155500411987305e-01 9.880815148353576660e-01 7.309496402740478516e-01 1.000000000000000000e+00 -9.997693300247192383e-01 9.928489327430725098e-01 7.381775975227355957e-01 1.000000000000000000e+00 -9.999231100082397461e-01 9.976162910461425781e-01 7.454056143760681152e-01 1.000000000000000000e+00 -9.976162910461425781e-01 9.990772604942321777e-01 7.534025311470031738e-01 1.000000000000000000e+00 -9.928489327430725098e-01 9.972318410873413086e-01 7.621684074401855469e-01 1.000000000000000000e+00 -9.880815148353576660e-01 9.953863620758056641e-01 7.709342837333679199e-01 1.000000000000000000e+00 -9.833140969276428223e-01 9.935409426689147949e-01 7.797001004219055176e-01 1.000000000000000000e+00 -9.785467386245727539e-01 9.916955232620239258e-01 7.884659767150878906e-01 1.000000000000000000e+00 -9.737793207168579102e-01 9.898500442504882812e-01 7.972318530082702637e-01 1.000000000000000000e+00 -9.690119028091430664e-01 9.880046248435974121e-01 8.059976696968078613e-01 1.000000000000000000e+00 -9.642445445060729980e-01 9.861591458320617676e-01 8.147635459899902344e-01 1.000000000000000000e+00 -9.594771265983581543e-01 9.843137264251708984e-01 8.235294222831726074e-01 1.000000000000000000e+00 -9.547097086906433105e-01 9.824683070182800293e-01 8.322952985763549805e-01 1.000000000000000000e+00 -9.499423503875732422e-01 9.806228280067443848e-01 8.410611152648925781e-01 1.000000000000000000e+00 -9.451749324798583984e-01 9.787774085998535156e-01 8.498269915580749512e-01 1.000000000000000000e+00 -9.404075145721435547e-01 9.769319295883178711e-01 8.585928678512573242e-01 1.000000000000000000e+00 -9.356401562690734863e-01 9.750865101814270020e-01 8.673586845397949219e-01 1.000000000000000000e+00 -9.308727383613586426e-01 9.732410907745361328e-01 8.761245608329772949e-01 1.000000000000000000e+00 -9.261053204536437988e-01 9.713956117630004883e-01 8.848904371261596680e-01 1.000000000000000000e+00 -9.213379621505737305e-01 9.695501923561096191e-01 8.936563134193420410e-01 1.000000000000000000e+00 -9.165705442428588867e-01 9.677047133445739746e-01 9.024221301078796387e-01 1.000000000000000000e+00 -9.118031263351440430e-01 9.658592939376831055e-01 9.111880064010620117e-01 1.000000000000000000e+00 -9.070357680320739746e-01 9.640138149261474609e-01 9.199538826942443848e-01 1.000000000000000000e+00 -9.022683501243591309e-01 9.621683955192565918e-01 9.287196993827819824e-01 1.000000000000000000e+00 -8.975009322166442871e-01 9.603229761123657227e-01 9.374855756759643555e-01 1.000000000000000000e+00 -8.927335739135742188e-01 9.584774971008300781e-01 9.462514519691467285e-01 1.000000000000000000e+00 -8.879661560058593750e-01 9.566320776939392090e-01 9.550173282623291016e-01 1.000000000000000000e+00 -8.831987977027893066e-01 9.547865986824035645e-01 9.637831449508666992e-01 1.000000000000000000e+00 -8.784313797950744629e-01 9.529411792755126953e-01 9.725490212440490723e-01 1.000000000000000000e+00 -8.702806830406188965e-01 9.489427208900451660e-01 9.702422022819519043e-01 1.000000000000000000e+00 -8.621299266815185547e-01 9.449442625045776367e-01 9.679353833198547363e-01 1.000000000000000000e+00 -8.539792299270629883e-01 9.409458041191101074e-01 9.656286239624023438e-01 1.000000000000000000e+00 -8.458285331726074219e-01 9.369473457336425781e-01 9.633218050003051758e-01 1.000000000000000000e+00 -8.376778364181518555e-01 9.329488873481750488e-01 9.610149860382080078e-01 1.000000000000000000e+00 -8.295270800590515137e-01 9.289504289627075195e-01 9.587081670761108398e-01 1.000000000000000000e+00 -8.213763833045959473e-01 9.249519705772399902e-01 9.564014077186584473e-01 1.000000000000000000e+00 -8.132256865501403809e-01 9.209534525871276855e-01 9.540945887565612793e-01 1.000000000000000000e+00 -8.050749897956848145e-01 9.169549942016601562e-01 9.517877697944641113e-01 1.000000000000000000e+00 -7.969242334365844727e-01 9.129565358161926270e-01 9.494809508323669434e-01 1.000000000000000000e+00 -7.887735366821289062e-01 9.089580774307250977e-01 9.471741914749145508e-01 1.000000000000000000e+00 -7.806228399276733398e-01 9.049596190452575684e-01 9.448673725128173828e-01 1.000000000000000000e+00 -7.724721431732177734e-01 9.009611606597900391e-01 9.425605535507202148e-01 1.000000000000000000e+00 -7.643213868141174316e-01 8.969627022743225098e-01 9.402537345886230469e-01 1.000000000000000000e+00 -7.561706900596618652e-01 8.929642438888549805e-01 9.379469156265258789e-01 1.000000000000000000e+00 -7.480199933052062988e-01 8.889657855033874512e-01 9.356401562690734863e-01 1.000000000000000000e+00 -7.398692965507507324e-01 8.849673271179199219e-01 9.333333373069763184e-01 1.000000000000000000e+00 -7.317185401916503906e-01 8.809688687324523926e-01 9.310265183448791504e-01 1.000000000000000000e+00 -7.235678434371948242e-01 8.769704103469848633e-01 9.287196993827819824e-01 1.000000000000000000e+00 -7.154171466827392578e-01 8.729719519615173340e-01 9.264129400253295898e-01 1.000000000000000000e+00 -7.072664499282836914e-01 8.689734935760498047e-01 9.241061210632324219e-01 1.000000000000000000e+00 -6.991157531738281250e-01 8.649750351905822754e-01 9.217993021011352539e-01 1.000000000000000000e+00 -6.909649968147277832e-01 8.609765768051147461e-01 9.194924831390380859e-01 1.000000000000000000e+00 -6.828143000602722168e-01 8.569780588150024414e-01 9.171857237815856934e-01 1.000000000000000000e+00 -6.746636033058166504e-01 8.529796004295349121e-01 9.148789048194885254e-01 1.000000000000000000e+00 -6.663590669631958008e-01 8.475970625877380371e-01 9.118800759315490723e-01 1.000000000000000000e+00 -6.579008102416992188e-01 8.408304452896118164e-01 9.081891775131225586e-01 1.000000000000000000e+00 -6.494424939155578613e-01 8.340638279914855957e-01 9.044982790946960449e-01 1.000000000000000000e+00 -6.409842371940612793e-01 8.272972106933593750e-01 9.008073806762695312e-01 1.000000000000000000e+00 -6.325259804725646973e-01 8.205305933952331543e-01 8.971164822578430176e-01 1.000000000000000000e+00 -6.240676641464233398e-01 8.137639164924621582e-01 8.934255838394165039e-01 1.000000000000000000e+00 -6.156094074249267578e-01 8.069972991943359375e-01 8.897347450256347656e-01 1.000000000000000000e+00 -6.071510910987854004e-01 8.002306818962097168e-01 8.860438466072082520e-01 1.000000000000000000e+00 -5.986928343772888184e-01 7.934640645980834961e-01 8.823529481887817383e-01 1.000000000000000000e+00 -5.902345180511474609e-01 7.866974472999572754e-01 8.786620497703552246e-01 1.000000000000000000e+00 -5.817762613296508789e-01 7.799307703971862793e-01 8.749711513519287109e-01 1.000000000000000000e+00 -5.733179450035095215e-01 7.731641530990600586e-01 8.712802529335021973e-01 1.000000000000000000e+00 -5.648596882820129395e-01 7.663975358009338379e-01 8.675894141197204590e-01 1.000000000000000000e+00 -5.564013719558715820e-01 7.596309185028076172e-01 8.638985157012939453e-01 1.000000000000000000e+00 -5.479431152343750000e-01 7.528643012046813965e-01 8.602076172828674316e-01 1.000000000000000000e+00 -5.394847989082336426e-01 7.460976839065551758e-01 8.565167188644409180e-01 1.000000000000000000e+00 -5.310265421867370605e-01 7.393310070037841797e-01 8.528258204460144043e-01 1.000000000000000000e+00 -5.225682258605957031e-01 7.325643897056579590e-01 8.491349220275878906e-01 1.000000000000000000e+00 -5.141099691390991211e-01 7.257977724075317383e-01 8.454440832138061523e-01 1.000000000000000000e+00 -5.056516528129577637e-01 7.190311551094055176e-01 8.417531847953796387e-01 1.000000000000000000e+00 -4.971933960914611816e-01 7.122645378112792969e-01 8.380622863769531250e-01 1.000000000000000000e+00 -4.887351095676422119e-01 7.054978609085083008e-01 8.343713879585266113e-01 1.000000000000000000e+00 -4.802768230438232422e-01 6.987312436103820801e-01 8.306804895401000977e-01 1.000000000000000000e+00 -4.718185365200042725e-01 6.919646263122558594e-01 8.269895911216735840e-01 1.000000000000000000e+00 -4.633602499961853027e-01 6.851980090141296387e-01 8.232987523078918457e-01 1.000000000000000000e+00 -4.549019634723663330e-01 6.784313917160034180e-01 8.196078538894653320e-01 1.000000000000000000e+00 -4.476739764213562012e-01 6.698192954063415527e-01 8.151479959487915039e-01 1.000000000000000000e+00 -4.404459893703460693e-01 6.612071990966796875e-01 8.106881976127624512e-01 1.000000000000000000e+00 -4.332180023193359375e-01 6.525951623916625977e-01 8.062283992767333984e-01 1.000000000000000000e+00 -4.259900152683258057e-01 6.439830660820007324e-01 8.017685413360595703e-01 1.000000000000000000e+00 -4.187620282173156738e-01 6.353710293769836426e-01 7.973087430000305176e-01 1.000000000000000000e+00 -4.115340113639831543e-01 6.267589330673217773e-01 7.928488850593566895e-01 1.000000000000000000e+00 -4.043060243129730225e-01 6.181468963623046875e-01 7.883890867233276367e-01 1.000000000000000000e+00 -3.970780372619628906e-01 6.095348000526428223e-01 7.839292287826538086e-01 1.000000000000000000e+00 -3.898500502109527588e-01 6.009227037429809570e-01 7.794694304466247559e-01 1.000000000000000000e+00 -3.826220631599426270e-01 5.923106670379638672e-01 7.750096321105957031e-01 1.000000000000000000e+00 -3.753940761089324951e-01 5.836985707283020020e-01 7.705497741699218750e-01 1.000000000000000000e+00 -3.681660890579223633e-01 5.750865340232849121e-01 7.660899758338928223e-01 1.000000000000000000e+00 -3.609381020069122314e-01 5.664744377136230469e-01 7.616301178932189941e-01 1.000000000000000000e+00 -3.537101149559020996e-01 5.578623414039611816e-01 7.571703195571899414e-01 1.000000000000000000e+00 -3.464821279048919678e-01 5.492503046989440918e-01 7.527105212211608887e-01 1.000000000000000000e+00 -3.392541408538818359e-01 5.406382083892822266e-01 7.482506632804870605e-01 1.000000000000000000e+00 -3.320261538028717041e-01 5.320261716842651367e-01 7.437908649444580078e-01 1.000000000000000000e+00 -3.247981667518615723e-01 5.234140753746032715e-01 7.393310070037841797e-01 1.000000000000000000e+00 -3.175701797008514404e-01 5.148019790649414062e-01 7.348712086677551270e-01 1.000000000000000000e+00 -3.103421628475189209e-01 5.061899423599243164e-01 7.304113507270812988e-01 1.000000000000000000e+00 -3.031141757965087891e-01 4.975778460502624512e-01 7.259515523910522461e-01 1.000000000000000000e+00 -2.958861887454986572e-01 4.889657795429229736e-01 7.214917540550231934e-01 1.000000000000000000e+00 -2.886582016944885254e-01 4.803537130355834961e-01 7.170318961143493652e-01 1.000000000000000000e+00 -2.814302146434783936e-01 4.717416465282440186e-01 7.125720977783203125e-01 1.000000000000000000e+00 -2.742022275924682617e-01 4.631295800209045410e-01 7.081122398376464844e-01 1.000000000000000000e+00 -2.690503597259521484e-01 4.539792239665985107e-01 7.034986615180969238e-01 1.000000000000000000e+00 -2.659746110439300537e-01 4.442906677722930908e-01 6.987312436103820801e-01 1.000000000000000000e+00 -2.628988921642303467e-01 4.346020817756652832e-01 6.939638853073120117e-01 1.000000000000000000e+00 -2.598231434822082520e-01 4.249134957790374756e-01 6.891964673995971680e-01 1.000000000000000000e+00 -2.567473948001861572e-01 4.152249097824096680e-01 6.844290494918823242e-01 1.000000000000000000e+00 -2.536716759204864502e-01 4.055363237857818604e-01 6.796616911888122559e-01 1.000000000000000000e+00 -2.505959272384643555e-01 3.958477377891540527e-01 6.748942732810974121e-01 1.000000000000000000e+00 -2.475201785564422607e-01 3.861591815948486328e-01 6.701268553733825684e-01 1.000000000000000000e+00 -2.444444447755813599e-01 3.764705955982208252e-01 6.653594970703125000e-01 1.000000000000000000e+00 -2.413687109947204590e-01 3.667820096015930176e-01 6.605920791625976562e-01 1.000000000000000000e+00 -2.382929623126983643e-01 3.570934236049652100e-01 6.558246612548828125e-01 1.000000000000000000e+00 -2.352172285318374634e-01 3.474048376083374023e-01 6.510573029518127441e-01 1.000000000000000000e+00 -2.321414798498153687e-01 3.377162516117095947e-01 6.462898850440979004e-01 1.000000000000000000e+00 -2.290657460689544678e-01 3.280276954174041748e-01 6.415224671363830566e-01 1.000000000000000000e+00 -2.259899973869323730e-01 3.183391094207763672e-01 6.367551088333129883e-01 1.000000000000000000e+00 -2.229142636060714722e-01 3.086505234241485596e-01 6.319876909255981445e-01 1.000000000000000000e+00 -2.198385298252105713e-01 2.989619374275207520e-01 6.272202730178833008e-01 1.000000000000000000e+00 -2.167627811431884766e-01 2.892733514308929443e-01 6.224529147148132324e-01 1.000000000000000000e+00 -2.136870473623275757e-01 2.795847654342651367e-01 6.176854968070983887e-01 1.000000000000000000e+00 -2.106112986803054810e-01 2.698961794376373291e-01 6.129180788993835449e-01 1.000000000000000000e+00 -2.075355648994445801e-01 2.602076232433319092e-01 6.081507205963134766e-01 1.000000000000000000e+00 -2.044598162174224854e-01 2.505190372467041016e-01 6.033833026885986328e-01 1.000000000000000000e+00 -2.013840824365615845e-01 2.408304512500762939e-01 5.986159443855285645e-01 1.000000000000000000e+00 -1.983083486557006836e-01 2.311418652534484863e-01 5.938485264778137207e-01 1.000000000000000000e+00 -1.952325999736785889e-01 2.214532941579818726e-01 5.890811085700988770e-01 1.000000000000000000e+00 -1.921568661928176880e-01 2.117647081613540649e-01 5.843137502670288086e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/RdYlGn b/fastplotlib/utils/colormaps/RdYlGn deleted file mode 100644 index bfe5c3ef1..000000000 --- a/fastplotlib/utils/colormaps/RdYlGn +++ /dev/null @@ -1,256 +0,0 @@ -6.470588445663452148e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.547482013702392578e-01 7.381776347756385803e-03 1.491733938455581665e-01 1.000000000000000000e+00 -6.624374985694885254e-01 1.476355269551277161e-02 1.493271887302398682e-01 1.000000000000000000e+00 -6.701268553733825684e-01 2.214532904326915741e-02 1.494809687137603760e-01 1.000000000000000000e+00 -6.778162121772766113e-01 2.952710539102554321e-02 1.496347486972808838e-01 1.000000000000000000e+00 -6.855055689811706543e-01 3.690887987613677979e-02 1.497885435819625854e-01 1.000000000000000000e+00 -6.931949257850646973e-01 4.429065808653831482e-02 1.499423235654830933e-01 1.000000000000000000e+00 -7.008842825889587402e-01 5.167243257164955139e-02 1.500961184501647949e-01 1.000000000000000000e+00 -7.085736393928527832e-01 5.905421078205108643e-02 1.502498984336853027e-01 1.000000000000000000e+00 -7.162629961967468262e-01 6.643598526716232300e-02 1.504036933183670044e-01 1.000000000000000000e+00 -7.239523530006408691e-01 7.381775975227355957e-02 1.505574733018875122e-01 1.000000000000000000e+00 -7.316416501998901367e-01 8.119954168796539307e-02 1.507112681865692139e-01 1.000000000000000000e+00 -7.393310070037841797e-01 8.858131617307662964e-02 1.508650481700897217e-01 1.000000000000000000e+00 -7.470203638076782227e-01 9.596309065818786621e-02 1.510188430547714233e-01 1.000000000000000000e+00 -7.547097206115722656e-01 1.033448651432991028e-01 1.511726230382919312e-01 1.000000000000000000e+00 -7.623990774154663086e-01 1.107266470789909363e-01 1.513264179229736328e-01 1.000000000000000000e+00 -7.700884342193603516e-01 1.181084215641021729e-01 1.514801979064941406e-01 1.000000000000000000e+00 -7.777777910232543945e-01 1.254902034997940063e-01 1.516339927911758423e-01 1.000000000000000000e+00 -7.854671478271484375e-01 1.328719705343246460e-01 1.517877727746963501e-01 1.000000000000000000e+00 -7.931565046310424805e-01 1.402537524700164795e-01 1.519415676593780518e-01 1.000000000000000000e+00 -8.008458018302917480e-01 1.476355195045471191e-01 1.520953476428985596e-01 1.000000000000000000e+00 -8.085351586341857910e-01 1.550173014402389526e-01 1.522491276264190674e-01 1.000000000000000000e+00 -8.162245154380798340e-01 1.623990833759307861e-01 1.524029225111007690e-01 1.000000000000000000e+00 -8.239138722419738770e-01 1.697808504104614258e-01 1.525567024946212769e-01 1.000000000000000000e+00 -8.316032290458679199e-01 1.771626323461532593e-01 1.527104973793029785e-01 1.000000000000000000e+00 -8.392925858497619629e-01 1.845443993806838989e-01 1.528642773628234863e-01 1.000000000000000000e+00 -8.453671932220458984e-01 1.929257959127426147e-01 1.550941914319992065e-01 1.000000000000000000e+00 -8.498269915580749512e-01 2.023068070411682129e-01 1.594002246856689453e-01 1.000000000000000000e+00 -8.542867898941040039e-01 2.116878181695938110e-01 1.637062728404998779e-01 1.000000000000000000e+00 -8.587466478347778320e-01 2.210688143968582153e-01 1.680123060941696167e-01 1.000000000000000000e+00 -8.632064461708068848e-01 2.304498255252838135e-01 1.723183393478393555e-01 1.000000000000000000e+00 -8.676663041114807129e-01 2.398308366537094116e-01 1.766243726015090942e-01 1.000000000000000000e+00 -8.721261024475097656e-01 2.492118477821350098e-01 1.809304058551788330e-01 1.000000000000000000e+00 -8.765859007835388184e-01 2.585928440093994141e-01 1.852364540100097656e-01 1.000000000000000000e+00 -8.810457587242126465e-01 2.679738700389862061e-01 1.895424872636795044e-01 1.000000000000000000e+00 -8.855055570602416992e-01 2.773548662662506104e-01 1.938485205173492432e-01 1.000000000000000000e+00 -8.899654150009155273e-01 2.867358624935150146e-01 1.981545537710189819e-01 1.000000000000000000e+00 -8.944252133369445801e-01 2.961168885231018066e-01 2.024605870246887207e-01 1.000000000000000000e+00 -8.988850712776184082e-01 3.054978847503662109e-01 2.067666351795196533e-01 1.000000000000000000e+00 -9.033448696136474609e-01 3.148788809776306152e-01 2.110726684331893921e-01 1.000000000000000000e+00 -9.078046679496765137e-01 3.242599070072174072e-01 2.153787016868591309e-01 1.000000000000000000e+00 -9.122645258903503418e-01 3.336409032344818115e-01 2.196847349405288696e-01 1.000000000000000000e+00 -9.167243242263793945e-01 3.430219292640686035e-01 2.239907681941986084e-01 1.000000000000000000e+00 -9.211841821670532227e-01 3.524029254913330078e-01 2.282968163490295410e-01 1.000000000000000000e+00 -9.256439805030822754e-01 3.617839217185974121e-01 2.326028496026992798e-01 1.000000000000000000e+00 -9.301037788391113281e-01 3.711649477481842041e-01 2.369088828563690186e-01 1.000000000000000000e+00 -9.345636367797851562e-01 3.805459439754486084e-01 2.412149161100387573e-01 1.000000000000000000e+00 -9.390234351158142090e-01 3.899269402027130127e-01 2.455209493637084961e-01 1.000000000000000000e+00 -9.434832930564880371e-01 3.993079662322998047e-01 2.498269826173782349e-01 1.000000000000000000e+00 -9.479430913925170898e-01 4.086889624595642090e-01 2.541330158710479736e-01 1.000000000000000000e+00 -9.524029493331909180e-01 4.180699586868286133e-01 2.584390640258789062e-01 1.000000000000000000e+00 -9.568627476692199707e-01 4.274509847164154053e-01 2.627451121807098389e-01 1.000000000000000000e+00 -9.582468271255493164e-01 4.374471306800842285e-01 2.673587203025817871e-01 1.000000000000000000e+00 -9.596309065818786621e-01 4.474432766437530518e-01 2.719723284244537354e-01 1.000000000000000000e+00 -9.610149860382080078e-01 4.574394524097442627e-01 2.765859365463256836e-01 1.000000000000000000e+00 -9.623990654945373535e-01 4.674355983734130859e-01 2.811995446681976318e-01 1.000000000000000000e+00 -9.637831449508666992e-01 4.774317443370819092e-01 2.858131527900695801e-01 1.000000000000000000e+00 -9.651672244071960449e-01 4.874279201030731201e-01 2.904267609119415283e-01 1.000000000000000000e+00 -9.665513038635253906e-01 4.974240660667419434e-01 2.950403690338134766e-01 1.000000000000000000e+00 -9.679353833198547363e-01 5.074202418327331543e-01 2.996539771556854248e-01 1.000000000000000000e+00 -9.693194627761840820e-01 5.174163579940795898e-01 3.042675852775573730e-01 1.000000000000000000e+00 -9.707036018371582031e-01 5.274125337600708008e-01 3.088811933994293213e-01 1.000000000000000000e+00 -9.720876812934875488e-01 5.374087095260620117e-01 3.134948015213012695e-01 1.000000000000000000e+00 -9.734717607498168945e-01 5.474048256874084473e-01 3.181084096431732178e-01 1.000000000000000000e+00 -9.748558402061462402e-01 5.574010014533996582e-01 3.227220177650451660e-01 1.000000000000000000e+00 -9.762399196624755859e-01 5.673971772193908691e-01 3.273356258869171143e-01 1.000000000000000000e+00 -9.776239991188049316e-01 5.773932933807373047e-01 3.319492638111114502e-01 1.000000000000000000e+00 -9.790080785751342773e-01 5.873894691467285156e-01 3.365628719329833984e-01 1.000000000000000000e+00 -9.803921580314636230e-01 5.973856449127197266e-01 3.411764800548553467e-01 1.000000000000000000e+00 -9.817762374877929688e-01 6.073817610740661621e-01 3.457900881767272949e-01 1.000000000000000000e+00 -9.831603169441223145e-01 6.173779368400573730e-01 3.504036962985992432e-01 1.000000000000000000e+00 -9.845443964004516602e-01 6.273741126060485840e-01 3.550173044204711914e-01 1.000000000000000000e+00 -9.859284758567810059e-01 6.373702287673950195e-01 3.596309125423431396e-01 1.000000000000000000e+00 -9.873125553131103516e-01 6.473664045333862305e-01 3.642445206642150879e-01 1.000000000000000000e+00 -9.886966347694396973e-01 6.573625802993774414e-01 3.688581287860870361e-01 1.000000000000000000e+00 -9.900807142257690430e-01 6.673586964607238770e-01 3.734717369079589844e-01 1.000000000000000000e+00 -9.914647936820983887e-01 6.773548722267150879e-01 3.780853450298309326e-01 1.000000000000000000e+00 -9.922337532043457031e-01 6.861976385116577148e-01 3.836216926574707031e-01 1.000000000000000000e+00 -9.923875331878662109e-01 6.938869953155517578e-01 3.900807499885559082e-01 1.000000000000000000e+00 -9.925413131713867188e-01 7.015762925148010254e-01 3.965397775173187256e-01 1.000000000000000000e+00 -9.926950931549072266e-01 7.092656493186950684e-01 4.029988348484039307e-01 1.000000000000000000e+00 -9.928489327430725098e-01 7.169550061225891113e-01 4.094578921794891357e-01 1.000000000000000000e+00 -9.930027127265930176e-01 7.246443629264831543e-01 4.159169495105743408e-01 1.000000000000000000e+00 -9.931564927101135254e-01 7.323337197303771973e-01 4.223760068416595459e-01 1.000000000000000000e+00 -9.933102726936340332e-01 7.400230765342712402e-01 4.288350641727447510e-01 1.000000000000000000e+00 -9.934640526771545410e-01 7.477124333381652832e-01 4.352941215038299561e-01 1.000000000000000000e+00 -9.936178326606750488e-01 7.554017901420593262e-01 4.417531788349151611e-01 1.000000000000000000e+00 -9.937716126441955566e-01 7.630911469459533691e-01 4.482122361660003662e-01 1.000000000000000000e+00 -9.939253926277160645e-01 7.707804441452026367e-01 4.546712934970855713e-01 1.000000000000000000e+00 -9.940791726112365723e-01 7.784698009490966797e-01 4.611303210258483887e-01 1.000000000000000000e+00 -9.942330121994018555e-01 7.861591577529907227e-01 4.675893783569335938e-01 1.000000000000000000e+00 -9.943867921829223633e-01 7.938485145568847656e-01 4.740484356880187988e-01 1.000000000000000000e+00 -9.945405721664428711e-01 8.015378713607788086e-01 4.805074930191040039e-01 1.000000000000000000e+00 -9.946943521499633789e-01 8.092272281646728516e-01 4.869665503501892090e-01 1.000000000000000000e+00 -9.948481321334838867e-01 8.169165849685668945e-01 4.934256076812744141e-01 1.000000000000000000e+00 -9.950019121170043945e-01 8.246059417724609375e-01 4.998846650123596191e-01 1.000000000000000000e+00 -9.951556921005249023e-01 8.322952985763549805e-01 5.063437223434448242e-01 1.000000000000000000e+00 -9.953094720840454102e-01 8.399845957756042480e-01 5.128027796745300293e-01 1.000000000000000000e+00 -9.954633116722106934e-01 8.476739525794982910e-01 5.192618370056152344e-01 1.000000000000000000e+00 -9.956170916557312012e-01 8.553633093833923340e-01 5.257208943367004395e-01 1.000000000000000000e+00 -9.957708716392517090e-01 8.630526661872863770e-01 5.321799516677856445e-01 1.000000000000000000e+00 -9.959246516227722168e-01 8.707420229911804199e-01 5.386390089988708496e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.784313797950744629e-01 5.450980663299560547e-01 1.000000000000000000e+00 -9.962322115898132324e-01 8.831987977027893066e-01 5.530949831008911133e-01 1.000000000000000000e+00 -9.963859915733337402e-01 8.879661560058593750e-01 5.610918998718261719e-01 1.000000000000000000e+00 -9.965397715568542480e-01 8.927335739135742188e-01 5.690888166427612305e-01 1.000000000000000000e+00 -9.966935515403747559e-01 8.975009322166442871e-01 5.770857334136962891e-01 1.000000000000000000e+00 -9.968473911285400391e-01 9.022683501243591309e-01 5.850826501846313477e-01 1.000000000000000000e+00 -9.970011711120605469e-01 9.070357680320739746e-01 5.930795669555664062e-01 1.000000000000000000e+00 -9.971549510955810547e-01 9.118031263351440430e-01 6.010764837265014648e-01 1.000000000000000000e+00 -9.973087310791015625e-01 9.165705442428588867e-01 6.090734601020812988e-01 1.000000000000000000e+00 -9.974625110626220703e-01 9.213379621505737305e-01 6.170703768730163574e-01 1.000000000000000000e+00 -9.976162910461425781e-01 9.261053204536437988e-01 6.250672936439514160e-01 1.000000000000000000e+00 -9.977700710296630859e-01 9.308727383613586426e-01 6.330642104148864746e-01 1.000000000000000000e+00 -9.979238510131835938e-01 9.356401562690734863e-01 6.410611271858215332e-01 1.000000000000000000e+00 -9.980776906013488770e-01 9.404075145721435547e-01 6.490580439567565918e-01 1.000000000000000000e+00 -9.982314705848693848e-01 9.451749324798583984e-01 6.570549607276916504e-01 1.000000000000000000e+00 -9.983852505683898926e-01 9.499423503875732422e-01 6.650518774986267090e-01 1.000000000000000000e+00 -9.985390305519104004e-01 9.547097086906433105e-01 6.730488538742065430e-01 1.000000000000000000e+00 -9.986928105354309082e-01 9.594771265983581543e-01 6.810457706451416016e-01 1.000000000000000000e+00 -9.988465905189514160e-01 9.642445445060729980e-01 6.890426874160766602e-01 1.000000000000000000e+00 -9.990003705024719238e-01 9.690119028091430664e-01 6.970396041870117188e-01 1.000000000000000000e+00 -9.991541504859924316e-01 9.737793207168579102e-01 7.050365209579467773e-01 1.000000000000000000e+00 -9.993079304695129395e-01 9.785467386245727539e-01 7.130334377288818359e-01 1.000000000000000000e+00 -9.994617700576782227e-01 9.833140969276428223e-01 7.210303544998168945e-01 1.000000000000000000e+00 -9.996155500411987305e-01 9.880815148353576660e-01 7.290272712707519531e-01 1.000000000000000000e+00 -9.997693300247192383e-01 9.928489327430725098e-01 7.370242476463317871e-01 1.000000000000000000e+00 -9.999231100082397461e-01 9.976162910461425781e-01 7.450211644172668457e-01 1.000000000000000000e+00 -9.970780611038208008e-01 9.987697005271911621e-01 7.450211644172668457e-01 1.000000000000000000e+00 -9.912341237068176270e-01 9.963091015815734863e-01 7.370242476463317871e-01 1.000000000000000000e+00 -9.853902459144592285e-01 9.938485026359558105e-01 7.290272712707519531e-01 1.000000000000000000e+00 -9.795463085174560547e-01 9.913879036903381348e-01 7.210303544998168945e-01 1.000000000000000000e+00 -9.737024307250976562e-01 9.889273643493652344e-01 7.130334377288818359e-01 1.000000000000000000e+00 -9.678584933280944824e-01 9.864667654037475586e-01 7.050365209579467773e-01 1.000000000000000000e+00 -9.620146155357360840e-01 9.840061664581298828e-01 6.970396041870117188e-01 1.000000000000000000e+00 -9.561706781387329102e-01 9.815455675125122070e-01 6.890426874160766602e-01 1.000000000000000000e+00 -9.503268003463745117e-01 9.790849685668945312e-01 6.810457706451416016e-01 1.000000000000000000e+00 -9.444828629493713379e-01 9.766243696212768555e-01 6.730488538742065430e-01 1.000000000000000000e+00 -9.386389851570129395e-01 9.741637706756591797e-01 6.650518774986267090e-01 1.000000000000000000e+00 -9.327951073646545410e-01 9.717031717300415039e-01 6.570549607276916504e-01 1.000000000000000000e+00 -9.269511699676513672e-01 9.692425727844238281e-01 6.490580439567565918e-01 1.000000000000000000e+00 -9.211072921752929688e-01 9.667820334434509277e-01 6.410611271858215332e-01 1.000000000000000000e+00 -9.152633547782897949e-01 9.643214344978332520e-01 6.330642104148864746e-01 1.000000000000000000e+00 -9.094194769859313965e-01 9.618608355522155762e-01 6.250672936439514160e-01 1.000000000000000000e+00 -9.035755395889282227e-01 9.594002366065979004e-01 6.170703768730163574e-01 1.000000000000000000e+00 -8.977316617965698242e-01 9.569396376609802246e-01 6.090734601020812988e-01 1.000000000000000000e+00 -8.918877243995666504e-01 9.544790387153625488e-01 6.010764837265014648e-01 1.000000000000000000e+00 -8.860438466072082520e-01 9.520184397697448730e-01 5.930795669555664062e-01 1.000000000000000000e+00 -8.801999092102050781e-01 9.495578408241271973e-01 5.850826501846313477e-01 1.000000000000000000e+00 -8.743560314178466797e-01 9.470972418785095215e-01 5.770857334136962891e-01 1.000000000000000000e+00 -8.685120940208435059e-01 9.446367025375366211e-01 5.690888166427612305e-01 1.000000000000000000e+00 -8.626682162284851074e-01 9.421761035919189453e-01 5.610918998718261719e-01 1.000000000000000000e+00 -8.568242788314819336e-01 9.397155046463012695e-01 5.530949831008911133e-01 1.000000000000000000e+00 -8.509804010391235352e-01 9.372549057006835938e-01 5.450980663299560547e-01 1.000000000000000000e+00 -8.431372642517089844e-01 9.338715672492980957e-01 5.400230884552001953e-01 1.000000000000000000e+00 -8.352941274642944336e-01 9.304882884025573730e-01 5.349481105804443359e-01 1.000000000000000000e+00 -8.274509906768798828e-01 9.271049499511718750e-01 5.298731327056884766e-01 1.000000000000000000e+00 -8.196078538894653320e-01 9.237216711044311523e-01 5.247981548309326172e-01 1.000000000000000000e+00 -8.117647171020507812e-01 9.203383326530456543e-01 5.197231769561767578e-01 1.000000000000000000e+00 -8.039215803146362305e-01 9.169549942016601562e-01 5.146481990814208984e-01 1.000000000000000000e+00 -7.960784435272216797e-01 9.135717153549194336e-01 5.095732212066650391e-01 1.000000000000000000e+00 -7.882353067398071289e-01 9.101883769035339355e-01 5.044982433319091797e-01 1.000000000000000000e+00 -7.803921699523925781e-01 9.068050980567932129e-01 4.994232952594757080e-01 1.000000000000000000e+00 -7.725490331649780273e-01 9.034217596054077148e-01 4.943483173847198486e-01 1.000000000000000000e+00 -7.647058963775634766e-01 9.000384211540222168e-01 4.892733693122863770e-01 1.000000000000000000e+00 -7.568627595901489258e-01 8.966551423072814941e-01 4.841983914375305176e-01 1.000000000000000000e+00 -7.490196228027343750e-01 8.932718038558959961e-01 4.791234135627746582e-01 1.000000000000000000e+00 -7.411764860153198242e-01 8.898885250091552734e-01 4.740484356880187988e-01 1.000000000000000000e+00 -7.333333492279052734e-01 8.865051865577697754e-01 4.689734578132629395e-01 1.000000000000000000e+00 -7.254902124404907227e-01 8.831218481063842773e-01 4.638985097408294678e-01 1.000000000000000000e+00 -7.176470756530761719e-01 8.797385692596435547e-01 4.588235318660736084e-01 1.000000000000000000e+00 -7.098039388656616211e-01 8.763552308082580566e-01 4.537485539913177490e-01 1.000000000000000000e+00 -7.019608020782470703e-01 8.729719519615173340e-01 4.486735761165618896e-01 1.000000000000000000e+00 -6.941176652908325195e-01 8.695886135101318359e-01 4.435986280441284180e-01 1.000000000000000000e+00 -6.862745285034179688e-01 8.662053346633911133e-01 4.385236501693725586e-01 1.000000000000000000e+00 -6.784313917160034180e-01 8.628219962120056152e-01 4.334486722946166992e-01 1.000000000000000000e+00 -6.705882549285888672e-01 8.594386577606201172e-01 4.283736944198608398e-01 1.000000000000000000e+00 -6.627451181411743164e-01 8.560553789138793945e-01 4.232987165451049805e-01 1.000000000000000000e+00 -6.549019813537597656e-01 8.526720404624938965e-01 4.182237684726715088e-01 1.000000000000000000e+00 -6.460592150688171387e-01 8.488273620605468750e-01 4.151480197906494141e-01 1.000000000000000000e+00 -6.362168192863464355e-01 8.445213437080383301e-01 4.140715003013610840e-01 1.000000000000000000e+00 -6.263744831085205078e-01 8.402153253555297852e-01 4.129950106143951416e-01 1.000000000000000000e+00 -6.165320873260498047e-01 8.359092473983764648e-01 4.119184911251068115e-01 1.000000000000000000e+00 -6.066897511482238770e-01 8.316032290458679199e-01 4.108419716358184814e-01 1.000000000000000000e+00 -5.968473553657531738e-01 8.272972106933593750e-01 4.097654819488525391e-01 1.000000000000000000e+00 -5.870050191879272461e-01 8.229911327362060547e-01 4.086889624595642090e-01 1.000000000000000000e+00 -5.771626234054565430e-01 8.186851143836975098e-01 4.076124429702758789e-01 1.000000000000000000e+00 -5.673202872276306152e-01 8.143790960311889648e-01 4.065359532833099365e-01 1.000000000000000000e+00 -5.574778914451599121e-01 8.100730776786804199e-01 4.054594337940216064e-01 1.000000000000000000e+00 -5.476354956626892090e-01 8.057669997215270996e-01 4.043829441070556641e-01 1.000000000000000000e+00 -5.377931594848632812e-01 8.014609813690185547e-01 4.033064246177673340e-01 1.000000000000000000e+00 -5.279507637023925781e-01 7.971549630165100098e-01 4.022299051284790039e-01 1.000000000000000000e+00 -5.181084275245666504e-01 7.928488850593566895e-01 4.011534154415130615e-01 1.000000000000000000e+00 -5.082660317420959473e-01 7.885428667068481445e-01 4.000768959522247314e-01 1.000000000000000000e+00 -4.984236955642700195e-01 7.842368483543395996e-01 3.990003764629364014e-01 1.000000000000000000e+00 -4.885813295841217041e-01 7.799307703971862793e-01 3.979238867759704590e-01 1.000000000000000000e+00 -4.787389338016510010e-01 7.756247520446777344e-01 3.968473672866821289e-01 1.000000000000000000e+00 -4.688965678215026855e-01 7.713187336921691895e-01 3.957708477973937988e-01 1.000000000000000000e+00 -4.590542018413543701e-01 7.670127153396606445e-01 3.946943581104278564e-01 1.000000000000000000e+00 -4.492118358612060547e-01 7.627066373825073242e-01 3.936178386211395264e-01 1.000000000000000000e+00 -4.393694698810577393e-01 7.584006190299987793e-01 3.925413191318511963e-01 1.000000000000000000e+00 -4.295271039009094238e-01 7.540946006774902344e-01 3.914648294448852539e-01 1.000000000000000000e+00 -4.196847379207611084e-01 7.497885227203369141e-01 3.903883099555969238e-01 1.000000000000000000e+00 -4.098423719406127930e-01 7.454825043678283691e-01 3.893117904663085938e-01 1.000000000000000000e+00 -4.000000059604644775e-01 7.411764860153198242e-01 3.882353007793426514e-01 1.000000000000000000e+00 -3.883121907711029053e-01 7.354863286018371582e-01 3.853133320808410645e-01 1.000000000000000000e+00 -3.766243755817413330e-01 7.297962307929992676e-01 3.823913931846618652e-01 1.000000000000000000e+00 -3.649365603923797607e-01 7.241061329841613770e-01 3.794694244861602783e-01 1.000000000000000000e+00 -3.532487452030181885e-01 7.184159755706787109e-01 3.765474855899810791e-01 1.000000000000000000e+00 -3.415609300136566162e-01 7.127258777618408203e-01 3.736255168914794922e-01 1.000000000000000000e+00 -3.298731148242950439e-01 7.070357799530029297e-01 3.707035779953002930e-01 1.000000000000000000e+00 -3.181852996349334717e-01 7.013456225395202637e-01 3.677816092967987061e-01 1.000000000000000000e+00 -3.064975142478942871e-01 6.956555247306823730e-01 3.648596704006195068e-01 1.000000000000000000e+00 -2.948096990585327148e-01 6.899654269218444824e-01 3.619377017021179199e-01 1.000000000000000000e+00 -2.831218838691711426e-01 6.842752695083618164e-01 3.590157628059387207e-01 1.000000000000000000e+00 -2.714340686798095703e-01 6.785851716995239258e-01 3.560938239097595215e-01 1.000000000000000000e+00 -2.597462534904479980e-01 6.728950142860412598e-01 3.531718552112579346e-01 1.000000000000000000e+00 -2.480584383010864258e-01 6.672049164772033691e-01 3.502499163150787354e-01 1.000000000000000000e+00 -2.363706231117248535e-01 6.615148186683654785e-01 3.473279476165771484e-01 1.000000000000000000e+00 -2.246828079223632812e-01 6.558246612548828125e-01 3.444060087203979492e-01 1.000000000000000000e+00 -2.129950076341629028e-01 6.501345634460449219e-01 3.414840400218963623e-01 1.000000000000000000e+00 -2.013071924448013306e-01 6.444444656372070312e-01 3.385621011257171631e-01 1.000000000000000000e+00 -1.896193772554397583e-01 6.387543082237243652e-01 3.356401324272155762e-01 1.000000000000000000e+00 -1.779315620660781860e-01 6.330642104148864746e-01 3.327181935310363770e-01 1.000000000000000000e+00 -1.662437468767166138e-01 6.273741126060485840e-01 3.297962248325347900e-01 1.000000000000000000e+00 -1.545559465885162354e-01 6.216839551925659180e-01 3.268742859363555908e-01 1.000000000000000000e+00 -1.428681313991546631e-01 6.159938573837280273e-01 3.239523172378540039e-01 1.000000000000000000e+00 -1.311803162097930908e-01 6.103036999702453613e-01 3.210303783416748047e-01 1.000000000000000000e+00 -1.194925010204315186e-01 6.046136021614074707e-01 3.181084096431732178e-01 1.000000000000000000e+00 -1.078046932816505432e-01 5.989235043525695801e-01 3.151864707469940186e-01 1.000000000000000000e+00 -9.996155649423599243e-02 5.923875570297241211e-01 3.118031620979309082e-01 1.000000000000000000e+00 -9.596309065818786621e-02 5.850057601928710938e-01 3.079584836959838867e-01 1.000000000000000000e+00 -9.196463227272033691e-02 5.776239633560180664e-01 3.041138052940368652e-01 1.000000000000000000e+00 -8.796616643667221069e-02 5.702422261238098145e-01 3.002691268920898438e-01 1.000000000000000000e+00 -8.396770805120468140e-02 5.628604292869567871e-01 2.964244484901428223e-01 1.000000000000000000e+00 -7.996924221515655518e-02 5.554786324501037598e-01 2.925797700881958008e-01 1.000000000000000000e+00 -7.597078382968902588e-02 5.480968952178955078e-01 2.887350916862487793e-01 1.000000000000000000e+00 -7.197231799364089966e-02 5.407150983810424805e-01 2.848904132843017578e-01 1.000000000000000000e+00 -6.797385960817337036e-02 5.333333611488342285e-01 2.810457646846771240e-01 1.000000000000000000e+00 -6.397539377212524414e-02 5.259515643119812012e-01 2.772010862827301025e-01 1.000000000000000000e+00 -5.997693166136741638e-02 5.185697674751281738e-01 2.733564078807830811e-01 1.000000000000000000e+00 -5.597846955060958862e-02 5.111880302429199219e-01 2.695117294788360596e-01 1.000000000000000000e+00 -5.198000743985176086e-02 5.038062334060668945e-01 2.656670510768890381e-01 1.000000000000000000e+00 -4.798154532909393311e-02 4.964244663715362549e-01 2.618223726749420166e-01 1.000000000000000000e+00 -4.398308321833610535e-02 4.890426695346832275e-01 2.579776942729949951e-01 1.000000000000000000e+00 -3.998462110757827759e-02 4.816609025001525879e-01 2.541330158710479736e-01 1.000000000000000000e+00 -3.598615899682044983e-02 4.742791354656219482e-01 2.502883374691009521e-01 1.000000000000000000e+00 -3.198769688606262207e-02 4.668973386287689209e-01 2.464436739683151245e-01 1.000000000000000000e+00 -2.798923477530479431e-02 4.595155715942382812e-01 2.425989955663681030e-01 1.000000000000000000e+00 -2.399077266454696655e-02 4.521338045597076416e-01 2.387543320655822754e-01 1.000000000000000000e+00 -1.999231055378913879e-02 4.447520077228546143e-01 2.349096536636352539e-01 1.000000000000000000e+00 -1.599384844303131104e-02 4.373702406883239746e-01 2.310649752616882324e-01 1.000000000000000000e+00 -1.199538633227348328e-02 4.299884736537933350e-01 2.272202968597412109e-01 1.000000000000000000e+00 -7.996924221515655518e-03 4.226066768169403076e-01 2.233756184577941895e-01 1.000000000000000000e+00 -3.998462110757827759e-03 4.152249097824096680e-01 2.195309549570083618e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.078431427478790283e-01 2.156862765550613403e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Reds b/fastplotlib/utils/colormaps/Reds deleted file mode 100644 index daaee20b6..000000000 --- a/fastplotlib/utils/colormaps/Reds +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 9.607843160629272461e-01 9.411764740943908691e-01 1.000000000000000000e+00 -9.998769760131835938e-01 9.582006931304931641e-01 9.374855756759643555e-01 1.000000000000000000e+00 -9.997539520263671875e-01 9.556170701980590820e-01 9.337946772575378418e-01 1.000000000000000000e+00 -9.996309280395507812e-01 9.530334472656250000e-01 9.301037788391113281e-01 1.000000000000000000e+00 -9.995079040527343750e-01 9.504498243331909180e-01 9.264129400253295898e-01 1.000000000000000000e+00 -9.993848800659179688e-01 9.478662014007568359e-01 9.227220416069030762e-01 1.000000000000000000e+00 -9.992617964744567871e-01 9.452825784683227539e-01 9.190311431884765625e-01 1.000000000000000000e+00 -9.991387724876403809e-01 9.426989555358886719e-01 9.153402447700500488e-01 1.000000000000000000e+00 -9.990157485008239746e-01 9.401153326034545898e-01 9.116493463516235352e-01 1.000000000000000000e+00 -9.988927245140075684e-01 9.375317096710205078e-01 9.079584479331970215e-01 1.000000000000000000e+00 -9.987697005271911621e-01 9.349480867385864258e-01 9.042676091194152832e-01 1.000000000000000000e+00 -9.986466765403747559e-01 9.323644638061523438e-01 9.005767107009887695e-01 1.000000000000000000e+00 -9.985236525535583496e-01 9.297808408737182617e-01 8.968858122825622559e-01 1.000000000000000000e+00 -9.984006285667419434e-01 9.271972179412841797e-01 8.931949138641357422e-01 1.000000000000000000e+00 -9.982776045799255371e-01 9.246135950088500977e-01 8.895040154457092285e-01 1.000000000000000000e+00 -9.981545805931091309e-01 9.220299720764160156e-01 8.858131766319274902e-01 1.000000000000000000e+00 -9.980314970016479492e-01 9.194463491439819336e-01 8.821222782135009766e-01 1.000000000000000000e+00 -9.979084730148315430e-01 9.168627262115478516e-01 8.784313797950744629e-01 1.000000000000000000e+00 -9.977854490280151367e-01 9.142791032791137695e-01 8.747404813766479492e-01 1.000000000000000000e+00 -9.976624250411987305e-01 9.116954803466796875e-01 8.710495829582214355e-01 1.000000000000000000e+00 -9.975394010543823242e-01 9.091118574142456055e-01 8.673586845397949219e-01 1.000000000000000000e+00 -9.974163770675659180e-01 9.065282344818115234e-01 8.636678457260131836e-01 1.000000000000000000e+00 -9.972933530807495117e-01 9.039446115493774414e-01 8.599769473075866699e-01 1.000000000000000000e+00 -9.971703290939331055e-01 9.013609886169433594e-01 8.562860488891601562e-01 1.000000000000000000e+00 -9.970473051071166992e-01 8.987773656845092773e-01 8.525951504707336426e-01 1.000000000000000000e+00 -9.969242811203002930e-01 8.961937427520751953e-01 8.489042520523071289e-01 1.000000000000000000e+00 -9.968012571334838867e-01 8.936101794242858887e-01 8.452133536338806152e-01 1.000000000000000000e+00 -9.966781735420227051e-01 8.910265564918518066e-01 8.415225148200988770e-01 1.000000000000000000e+00 -9.965551495552062988e-01 8.884429335594177246e-01 8.378316164016723633e-01 1.000000000000000000e+00 -9.964321255683898926e-01 8.858593106269836426e-01 8.341407179832458496e-01 1.000000000000000000e+00 -9.963091015815734863e-01 8.832756876945495605e-01 8.304498195648193359e-01 1.000000000000000000e+00 -9.961860775947570801e-01 8.806920647621154785e-01 8.267589211463928223e-01 1.000000000000000000e+00 -9.960476756095886230e-01 8.778623342514038086e-01 8.227758407592773438e-01 1.000000000000000000e+00 -9.958016276359558105e-01 8.733102679252624512e-01 8.167474269866943359e-01 1.000000000000000000e+00 -9.955555796623229980e-01 8.687581419944763184e-01 8.107189536094665527e-01 1.000000000000000000e+00 -9.953094720840454102e-01 8.642060756683349609e-01 8.046904802322387695e-01 1.000000000000000000e+00 -9.950634241104125977e-01 8.596539497375488281e-01 7.986620664596557617e-01 1.000000000000000000e+00 -9.948173761367797852e-01 8.551018834114074707e-01 7.926335930824279785e-01 1.000000000000000000e+00 -9.945713281631469727e-01 8.505498170852661133e-01 7.866051793098449707e-01 1.000000000000000000e+00 -9.943252801895141602e-01 8.459976911544799805e-01 7.805767059326171875e-01 1.000000000000000000e+00 -9.940791726112365723e-01 8.414456248283386230e-01 7.745482325553894043e-01 1.000000000000000000e+00 -9.938331246376037598e-01 8.368934988975524902e-01 7.685198187828063965e-01 1.000000000000000000e+00 -9.935870766639709473e-01 8.323414325714111328e-01 7.624913454055786133e-01 1.000000000000000000e+00 -9.933410286903381348e-01 8.277893066406250000e-01 7.564628720283508301e-01 1.000000000000000000e+00 -9.930949807167053223e-01 8.232372403144836426e-01 7.504344582557678223e-01 1.000000000000000000e+00 -9.928489327430725098e-01 8.186851143836975098e-01 7.444059848785400391e-01 1.000000000000000000e+00 -9.926028251647949219e-01 8.141330480575561523e-01 7.383775711059570312e-01 1.000000000000000000e+00 -9.923567771911621094e-01 8.095809221267700195e-01 7.323490977287292480e-01 1.000000000000000000e+00 -9.921107292175292969e-01 8.050288558006286621e-01 7.263206243515014648e-01 1.000000000000000000e+00 -9.918646812438964844e-01 8.004767298698425293e-01 7.202922105789184570e-01 1.000000000000000000e+00 -9.916186332702636719e-01 7.959246635437011719e-01 7.142637372016906738e-01 1.000000000000000000e+00 -9.913725256919860840e-01 7.913725376129150391e-01 7.082353234291076660e-01 1.000000000000000000e+00 -9.911264777183532715e-01 7.868204712867736816e-01 7.022068500518798828e-01 1.000000000000000000e+00 -9.908804297447204590e-01 7.822683453559875488e-01 6.961783766746520996e-01 1.000000000000000000e+00 -9.906343817710876465e-01 7.777162790298461914e-01 6.901499629020690918e-01 1.000000000000000000e+00 -9.903883337974548340e-01 7.731641530990600586e-01 6.841214895248413086e-01 1.000000000000000000e+00 -9.901422262191772461e-01 7.686120867729187012e-01 6.780930161476135254e-01 1.000000000000000000e+00 -9.898961782455444336e-01 7.640599608421325684e-01 6.720646023750305176e-01 1.000000000000000000e+00 -9.896501302719116211e-01 7.595078945159912109e-01 6.660361289978027344e-01 1.000000000000000000e+00 -9.894040822982788086e-01 7.549557685852050781e-01 6.600077152252197266e-01 1.000000000000000000e+00 -9.891580343246459961e-01 7.504037022590637207e-01 6.539792418479919434e-01 1.000000000000000000e+00 -9.889119863510131836e-01 7.458515763282775879e-01 6.479507684707641602e-01 1.000000000000000000e+00 -9.886658787727355957e-01 7.412995100021362305e-01 6.419223546981811523e-01 1.000000000000000000e+00 -9.884198307991027832e-01 7.367473840713500977e-01 6.358938813209533691e-01 1.000000000000000000e+00 -9.882352948188781738e-01 7.320722937583923340e-01 6.299269795417785645e-01 1.000000000000000000e+00 -9.882352948188781738e-01 7.270280718803405762e-01 6.241445541381835938e-01 1.000000000000000000e+00 -9.882352948188781738e-01 7.219838500022888184e-01 6.183621883392333984e-01 1.000000000000000000e+00 -9.882352948188781738e-01 7.169396281242370605e-01 6.125797629356384277e-01 1.000000000000000000e+00 -9.882352948188781738e-01 7.118954062461853027e-01 6.067973971366882324e-01 1.000000000000000000e+00 -9.882352948188781738e-01 7.068511843681335449e-01 6.010149717330932617e-01 1.000000000000000000e+00 -9.882352948188781738e-01 7.018070220947265625e-01 5.952326059341430664e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.967628002166748047e-01 5.894502401351928711e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.917185783386230469e-01 5.836678147315979004e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.866743564605712891e-01 5.778854489326477051e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.816301345825195312e-01 5.721030235290527344e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.765859127044677734e-01 5.663206577301025391e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.715416908264160156e-01 5.605382323265075684e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.664975285530090332e-01 5.547558665275573730e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.614533066749572754e-01 5.489735007286071777e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.564090847969055176e-01 5.431910753250122070e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.513648629188537598e-01 5.374087095260620117e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.463206410408020020e-01 5.316262841224670410e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.412764191627502441e-01 5.258439183235168457e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.362321972846984863e-01 5.200614929199218750e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.311879754066467285e-01 5.142791271209716797e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.261438131332397461e-01 5.084967613220214844e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.210995912551879883e-01 5.027143359184265137e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.160553693771362305e-01 4.969319403171539307e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.110111474990844727e-01 4.911495447158813477e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.059669256210327148e-01 4.853671789169311523e-01 1.000000000000000000e+00 -9.882352948188781738e-01 6.009227037429809570e-01 4.795847833156585693e-01 1.000000000000000000e+00 -9.882352948188781738e-01 5.958784818649291992e-01 4.738023877143859863e-01 1.000000000000000000e+00 -9.882352948188781738e-01 5.908343195915222168e-01 4.680199921131134033e-01 1.000000000000000000e+00 -9.882352948188781738e-01 5.857900977134704590e-01 4.622375965118408203e-01 1.000000000000000000e+00 -9.882352948188781738e-01 5.807458758354187012e-01 4.564552009105682373e-01 1.000000000000000000e+00 -9.882352948188781738e-01 5.757016539573669434e-01 4.506728053092956543e-01 1.000000000000000000e+00 -9.881891608238220215e-01 5.707035660743713379e-01 4.452133774757385254e-01 1.000000000000000000e+00 -9.880661368370056152e-01 5.657823681831359863e-01 4.402922093868255615e-01 1.000000000000000000e+00 -9.879431128501892090e-01 5.608612298965454102e-01 4.353710114955902100e-01 1.000000000000000000e+00 -9.878200888633728027e-01 5.559400320053100586e-01 4.304498136043548584e-01 1.000000000000000000e+00 -9.876970648765563965e-01 5.510188341140747070e-01 4.255286455154418945e-01 1.000000000000000000e+00 -9.875739812850952148e-01 5.460976362228393555e-01 4.206074476242065430e-01 1.000000000000000000e+00 -9.874509572982788086e-01 5.411764979362487793e-01 4.156862795352935791e-01 1.000000000000000000e+00 -9.873279333114624023e-01 5.362553000450134277e-01 4.107650816440582275e-01 1.000000000000000000e+00 -9.872049093246459961e-01 5.313341021537780762e-01 4.058439135551452637e-01 1.000000000000000000e+00 -9.870818853378295898e-01 5.264129042625427246e-01 4.009227156639099121e-01 1.000000000000000000e+00 -9.869588613510131836e-01 5.214917063713073730e-01 3.960015475749969482e-01 1.000000000000000000e+00 -9.868358373641967773e-01 5.165705680847167969e-01 3.910803496837615967e-01 1.000000000000000000e+00 -9.867128133773803711e-01 5.116493701934814453e-01 3.861591815948486328e-01 1.000000000000000000e+00 -9.865897893905639648e-01 5.067281723022460938e-01 3.812379837036132812e-01 1.000000000000000000e+00 -9.864667654037475586e-01 5.018069744110107422e-01 3.763168156147003174e-01 1.000000000000000000e+00 -9.863437414169311523e-01 4.968858063220977783e-01 3.713956177234649658e-01 1.000000000000000000e+00 -9.862206578254699707e-01 4.919646382331848145e-01 3.664744198322296143e-01 1.000000000000000000e+00 -9.860976338386535645e-01 4.870434403419494629e-01 3.615532517433166504e-01 1.000000000000000000e+00 -9.859746098518371582e-01 4.821222722530364990e-01 3.566320538520812988e-01 1.000000000000000000e+00 -9.858515858650207520e-01 4.772010743618011475e-01 3.517108857631683350e-01 1.000000000000000000e+00 -9.857285618782043457e-01 4.722799062728881836e-01 3.467896878719329834e-01 1.000000000000000000e+00 -9.856055378913879395e-01 4.673587083816528320e-01 3.418685197830200195e-01 1.000000000000000000e+00 -9.854825139045715332e-01 4.624375104904174805e-01 3.369473218917846680e-01 1.000000000000000000e+00 -9.853594899177551270e-01 4.575163424015045166e-01 3.320261538028717041e-01 1.000000000000000000e+00 -9.852364659309387207e-01 4.525951445102691650e-01 3.271049559116363525e-01 1.000000000000000000e+00 -9.851134419441223145e-01 4.476739764213562012e-01 3.221837878227233887e-01 1.000000000000000000e+00 -9.849904179573059082e-01 4.427527785301208496e-01 3.172625899314880371e-01 1.000000000000000000e+00 -9.848673343658447266e-01 4.378316104412078857e-01 3.123414218425750732e-01 1.000000000000000000e+00 -9.847443103790283203e-01 4.329104125499725342e-01 3.074202239513397217e-01 1.000000000000000000e+00 -9.846212863922119141e-01 4.279892444610595703e-01 3.024990260601043701e-01 1.000000000000000000e+00 -9.844982624053955078e-01 4.230680465698242188e-01 2.975778579711914062e-01 1.000000000000000000e+00 -9.843752384185791016e-01 4.181468784809112549e-01 2.926566600799560547e-01 1.000000000000000000e+00 -9.835755228996276855e-01 4.127950668334960938e-01 2.883506417274475098e-01 1.000000000000000000e+00 -9.820991754531860352e-01 4.070127010345458984e-01 2.846597433090209961e-01 1.000000000000000000e+00 -9.806228280067443848e-01 4.012303054332733154e-01 2.809688448905944824e-01 1.000000000000000000e+00 -9.791464805603027344e-01 3.954479098320007324e-01 2.772779762744903564e-01 1.000000000000000000e+00 -9.776701331138610840e-01 3.896655142307281494e-01 2.735870778560638428e-01 1.000000000000000000e+00 -9.761937856674194336e-01 3.838831186294555664e-01 2.698961794376373291e-01 1.000000000000000000e+00 -9.747174382209777832e-01 3.781007230281829834e-01 2.662053108215332031e-01 1.000000000000000000e+00 -9.732410907745361328e-01 3.723183274269104004e-01 2.625144124031066895e-01 1.000000000000000000e+00 -9.717646837234497070e-01 3.665359616279602051e-01 2.588235437870025635e-01 1.000000000000000000e+00 -9.702883362770080566e-01 3.607535660266876221e-01 2.551326453685760498e-01 1.000000000000000000e+00 -9.688119888305664062e-01 3.549711704254150391e-01 2.514417469501495361e-01 1.000000000000000000e+00 -9.673356413841247559e-01 3.491887748241424561e-01 2.477508634328842163e-01 1.000000000000000000e+00 -9.658592939376831055e-01 3.434063792228698730e-01 2.440599799156188965e-01 1.000000000000000000e+00 -9.643829464912414551e-01 3.376239836215972900e-01 2.403690814971923828e-01 1.000000000000000000e+00 -9.629065990447998047e-01 3.318415880203247070e-01 2.366781979799270630e-01 1.000000000000000000e+00 -9.614301919937133789e-01 3.260592222213745117e-01 2.329873144626617432e-01 1.000000000000000000e+00 -9.599538445472717285e-01 3.202768266201019287e-01 2.292964309453964233e-01 1.000000000000000000e+00 -9.584774971008300781e-01 3.144944310188293457e-01 2.256055325269699097e-01 1.000000000000000000e+00 -9.570011496543884277e-01 3.087120354175567627e-01 2.219146490097045898e-01 1.000000000000000000e+00 -9.555248022079467773e-01 3.029296398162841797e-01 2.182237654924392700e-01 1.000000000000000000e+00 -9.540484547615051270e-01 2.971472442150115967e-01 2.145328670740127563e-01 1.000000000000000000e+00 -9.525721073150634766e-01 2.913648486137390137e-01 2.108419835567474365e-01 1.000000000000000000e+00 -9.510957598686218262e-01 2.855824828147888184e-01 2.071511000394821167e-01 1.000000000000000000e+00 -9.496193528175354004e-01 2.798000872135162354e-01 2.034602016210556030e-01 1.000000000000000000e+00 -9.481430053710937500e-01 2.740176916122436523e-01 1.997693181037902832e-01 1.000000000000000000e+00 -9.466666579246520996e-01 2.682352960109710693e-01 1.960784345865249634e-01 1.000000000000000000e+00 -9.451903104782104492e-01 2.624529004096984863e-01 1.923875361680984497e-01 1.000000000000000000e+00 -9.437139630317687988e-01 2.566705048084259033e-01 1.886966526508331299e-01 1.000000000000000000e+00 -9.422376155853271484e-01 2.508881092071533203e-01 1.850057691335678101e-01 1.000000000000000000e+00 -9.407612681388854980e-01 2.451057285070419312e-01 1.813148856163024902e-01 1.000000000000000000e+00 -9.392848610877990723e-01 2.393233329057693481e-01 1.776239871978759766e-01 1.000000000000000000e+00 -9.378085136413574219e-01 2.335409522056579590e-01 1.739331036806106567e-01 1.000000000000000000e+00 -9.344867467880249023e-01 2.286812812089920044e-01 1.713956147432327271e-01 1.000000000000000000e+00 -9.300576448440551758e-01 2.243752330541610718e-01 1.695501804351806641e-01 1.000000000000000000e+00 -9.256286025047302246e-01 2.200691998004913330e-01 1.677047312259674072e-01 1.000000000000000000e+00 -9.211995601654052734e-01 2.157631665468215942e-01 1.658592820167541504e-01 1.000000000000000000e+00 -9.167704582214355469e-01 2.114571332931518555e-01 1.640138477087020874e-01 1.000000000000000000e+00 -9.123414158821105957e-01 2.071511000394821167e-01 1.621683984994888306e-01 1.000000000000000000e+00 -9.079123139381408691e-01 2.028450667858123779e-01 1.603229492902755737e-01 1.000000000000000000e+00 -9.034832715988159180e-01 1.985390186309814453e-01 1.584775149822235107e-01 1.000000000000000000e+00 -8.990542292594909668e-01 1.942329853773117065e-01 1.566320657730102539e-01 1.000000000000000000e+00 -8.946251273155212402e-01 1.899269521236419678e-01 1.547866165637969971e-01 1.000000000000000000e+00 -8.901960849761962891e-01 1.856209188699722290e-01 1.529411822557449341e-01 1.000000000000000000e+00 -8.857669830322265625e-01 1.813148856163024902e-01 1.510957330465316772e-01 1.000000000000000000e+00 -8.813379406929016113e-01 1.770088374614715576e-01 1.492502838373184204e-01 1.000000000000000000e+00 -8.769088983535766602e-01 1.727028042078018188e-01 1.474048495292663574e-01 1.000000000000000000e+00 -8.724797964096069336e-01 1.683967709541320801e-01 1.455594003200531006e-01 1.000000000000000000e+00 -8.680507540702819824e-01 1.640907377004623413e-01 1.437139511108398438e-01 1.000000000000000000e+00 -8.636217117309570312e-01 1.597847044467926025e-01 1.418685168027877808e-01 1.000000000000000000e+00 -8.591926097869873047e-01 1.554786562919616699e-01 1.400230675935745239e-01 1.000000000000000000e+00 -8.547635674476623535e-01 1.511726230382919312e-01 1.381776183843612671e-01 1.000000000000000000e+00 -8.503344655036926270e-01 1.468665897846221924e-01 1.363321840763092041e-01 1.000000000000000000e+00 -8.459054231643676758e-01 1.425605565309524536e-01 1.344867348670959473e-01 1.000000000000000000e+00 -8.414763808250427246e-01 1.382545232772827148e-01 1.326412856578826904e-01 1.000000000000000000e+00 -8.370472788810729980e-01 1.339484751224517822e-01 1.307958513498306274e-01 1.000000000000000000e+00 -8.326182365417480469e-01 1.296424418687820435e-01 1.289504021406173706e-01 1.000000000000000000e+00 -8.281891345977783203e-01 1.253364086151123047e-01 1.271049529314041138e-01 1.000000000000000000e+00 -8.237600922584533691e-01 1.210303753614425659e-01 1.252595186233520508e-01 1.000000000000000000e+00 -8.193310499191284180e-01 1.167243346571922302e-01 1.234140694141387939e-01 1.000000000000000000e+00 -8.149019479751586914e-01 1.124183014035224915e-01 1.215686276555061340e-01 1.000000000000000000e+00 -8.104729056358337402e-01 1.081122681498527527e-01 1.197231858968734741e-01 1.000000000000000000e+00 -8.060438036918640137e-01 1.038062274456024170e-01 1.178777366876602173e-01 1.000000000000000000e+00 -8.016147613525390625e-01 9.950019419193267822e-02 1.160322949290275574e-01 1.000000000000000000e+00 -7.971857190132141113e-01 9.519415348768234253e-02 1.141868531703948975e-01 1.000000000000000000e+00 -7.925720810890197754e-01 9.328719973564147949e-02 1.129873096942901611e-01 1.000000000000000000e+00 -7.878969907760620117e-01 9.217993170022964478e-02 1.120030730962753296e-01 1.000000000000000000e+00 -7.832218408584594727e-01 9.107266366481781006e-02 1.110188364982604980e-01 1.000000000000000000e+00 -7.785466909408569336e-01 8.996539562940597534e-02 1.100345999002456665e-01 1.000000000000000000e+00 -7.738716006278991699e-01 8.885813504457473755e-02 1.090503633022308350e-01 1.000000000000000000e+00 -7.691964507102966309e-01 8.775086700916290283e-02 1.080661267042160034e-01 1.000000000000000000e+00 -7.645213603973388672e-01 8.664359897375106812e-02 1.070818901062011719e-01 1.000000000000000000e+00 -7.598462104797363281e-01 8.553633093833923340e-02 1.060976535081863403e-01 1.000000000000000000e+00 -7.551710605621337891e-01 8.442906290292739868e-02 1.051134169101715088e-01 1.000000000000000000e+00 -7.504959702491760254e-01 8.332180231809616089e-02 1.041291803121566772e-01 1.000000000000000000e+00 -7.458208203315734863e-01 8.221453428268432617e-02 1.031449437141418457e-01 1.000000000000000000e+00 -7.411457300186157227e-01 8.110726624727249146e-02 1.021607071161270142e-01 1.000000000000000000e+00 -7.364705801010131836e-01 7.999999821186065674e-02 1.011764705181121826e-01 1.000000000000000000e+00 -7.317954897880554199e-01 7.889273017644882202e-02 1.001922339200973511e-01 1.000000000000000000e+00 -7.271203398704528809e-01 7.778546959161758423e-02 9.920799732208251953e-02 1.000000000000000000e+00 -7.224451899528503418e-01 7.667820155620574951e-02 9.822376072406768799e-02 1.000000000000000000e+00 -7.177700996398925781e-01 7.557093352079391479e-02 9.723952412605285645e-02 1.000000000000000000e+00 -7.130949497222900391e-01 7.446366548538208008e-02 9.625528752803802490e-02 1.000000000000000000e+00 -7.084198594093322754e-01 7.335640490055084229e-02 9.527105093002319336e-02 1.000000000000000000e+00 -7.037447094917297363e-01 7.224913686513900757e-02 9.428681433200836182e-02 1.000000000000000000e+00 -6.990695595741271973e-01 7.114186882972717285e-02 9.330257773399353027e-02 1.000000000000000000e+00 -6.943944692611694336e-01 7.003460079431533813e-02 9.231834113597869873e-02 1.000000000000000000e+00 -6.897193193435668945e-01 6.892733275890350342e-02 9.133410453796386719e-02 1.000000000000000000e+00 -6.850442290306091309e-01 6.782007217407226562e-02 9.034986793994903564e-02 1.000000000000000000e+00 -6.803690791130065918e-01 6.671280413866043091e-02 8.936563134193420410e-02 1.000000000000000000e+00 -6.756939888000488281e-01 6.560553610324859619e-02 8.838139474391937256e-02 1.000000000000000000e+00 -6.710188388824462891e-01 6.449826806783676147e-02 8.739715814590454102e-02 1.000000000000000000e+00 -6.663436889648437500e-01 6.339100003242492676e-02 8.641292154788970947e-02 1.000000000000000000e+00 -6.616685986518859863e-01 6.228373572230339050e-02 8.542868494987487793e-02 1.000000000000000000e+00 -6.569934487342834473e-01 6.117647141218185425e-02 8.444444090127944946e-02 1.000000000000000000e+00 -6.523183584213256836e-01 6.006920337677001953e-02 8.346020430326461792e-02 1.000000000000000000e+00 -6.476432085037231445e-01 5.896193906664848328e-02 8.247596770524978638e-02 1.000000000000000000e+00 -6.403844952583312988e-01 5.720876529812812805e-02 8.149173110723495483e-02 1.000000000000000000e+00 -6.327566504478454590e-01 5.536332353949546814e-02 8.050749450922012329e-02 1.000000000000000000e+00 -6.251288056373596191e-01 5.351787805557250977e-02 7.952325791120529175e-02 1.000000000000000000e+00 -6.175009608268737793e-01 5.167243257164955139e-02 7.853902131319046021e-02 1.000000000000000000e+00 -6.098731160163879395e-01 4.982699081301689148e-02 7.755478471517562866e-02 1.000000000000000000e+00 -6.022452712059020996e-01 4.798154532909393311e-02 7.657054811716079712e-02 1.000000000000000000e+00 -5.946174263954162598e-01 4.613609984517097473e-02 7.558631151914596558e-02 1.000000000000000000e+00 -5.869896411895751953e-01 4.429065808653831482e-02 7.460207492113113403e-02 1.000000000000000000e+00 -5.793617963790893555e-01 4.244521260261535645e-02 7.361783832311630249e-02 1.000000000000000000e+00 -5.717339515686035156e-01 4.059977084398269653e-02 7.263360172510147095e-02 1.000000000000000000e+00 -5.641061067581176758e-01 3.875432536005973816e-02 7.164936512708663940e-02 1.000000000000000000e+00 -5.564782619476318359e-01 3.690887987613677979e-02 7.066512852907180786e-02 1.000000000000000000e+00 -5.488504171371459961e-01 3.506343811750411987e-02 6.968089193105697632e-02 1.000000000000000000e+00 -5.412226319313049316e-01 3.321799263358116150e-02 6.869665533304214478e-02 1.000000000000000000e+00 -5.335947871208190918e-01 3.137255087494850159e-02 6.771241873502731323e-02 1.000000000000000000e+00 -5.259669423103332520e-01 2.952710539102554321e-02 6.672818213701248169e-02 1.000000000000000000e+00 -5.183390974998474121e-01 2.768166176974773407e-02 6.574394553899765015e-02 1.000000000000000000e+00 -5.107112526893615723e-01 2.583621628582477570e-02 6.475970894098281860e-02 1.000000000000000000e+00 -5.030834078788757324e-01 2.399077266454696655e-02 6.377547234296798706e-02 1.000000000000000000e+00 -4.954555928707122803e-01 2.214532904326915741e-02 6.279123574495315552e-02 1.000000000000000000e+00 -4.878277480602264404e-01 2.029988542199134827e-02 6.180699914693832397e-02 1.000000000000000000e+00 -4.801999330520629883e-01 1.845443993806838989e-02 6.082275882363319397e-02 1.000000000000000000e+00 -4.725720882415771484e-01 1.660899631679058075e-02 5.983852222561836243e-02 1.000000000000000000e+00 -4.649442434310913086e-01 1.476355269551277161e-02 5.885428562760353088e-02 1.000000000000000000e+00 -4.573164284229278564e-01 1.291810814291238785e-02 5.787004902958869934e-02 1.000000000000000000e+00 -4.496885836124420166e-01 1.107266452163457870e-02 5.688581243157386780e-02 1.000000000000000000e+00 -4.420607388019561768e-01 9.227219969034194946e-03 5.590157583355903625e-02 1.000000000000000000e+00 -4.344329237937927246e-01 7.381776347756385803e-03 5.491733923554420471e-02 1.000000000000000000e+00 -4.268050789833068848e-01 5.536332260817289352e-03 5.393310263752937317e-02 1.000000000000000000e+00 -4.191772341728210449e-01 3.690888173878192902e-03 5.294886603951454163e-02 1.000000000000000000e+00 -4.115493893623352051e-01 1.845444086939096451e-03 5.196462944149971008e-02 1.000000000000000000e+00 -4.039215743541717529e-01 0.000000000000000000e+00 5.098039284348487854e-02 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Set1 b/fastplotlib/utils/colormaps/Set1 deleted file mode 100644 index 1a7435364..000000000 --- a/fastplotlib/utils/colormaps/Set1 +++ /dev/null @@ -1,9 +0,0 @@ -8.941176533699035645e-01 1.019607856869697571e-01 1.098039224743843079e-01 1.000000000000000000e+00 -2.156862765550613403e-01 4.941176474094390869e-01 7.215686440467834473e-01 1.000000000000000000e+00 -3.019607961177825928e-01 6.862745285034179688e-01 2.901960909366607666e-01 1.000000000000000000e+00 -5.960784554481506348e-01 3.058823645114898682e-01 6.392157077789306641e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.980392158031463623e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 2.000000029802322388e-01 1.000000000000000000e+00 -6.509804129600524902e-01 3.372549116611480713e-01 1.568627506494522095e-01 1.000000000000000000e+00 -9.686274528503417969e-01 5.058823823928833008e-01 7.490196228027343750e-01 1.000000000000000000e+00 -6.000000238418579102e-01 6.000000238418579102e-01 6.000000238418579102e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Set2 b/fastplotlib/utils/colormaps/Set2 deleted file mode 100644 index 5ae1478ab..000000000 --- a/fastplotlib/utils/colormaps/Set2 +++ /dev/null @@ -1,8 +0,0 @@ -4.000000059604644775e-01 7.607843279838562012e-01 6.470588445663452148e-01 1.000000000000000000e+00 -9.882352948188781738e-01 5.529412031173706055e-01 3.843137323856353760e-01 1.000000000000000000e+00 -5.529412031173706055e-01 6.274510025978088379e-01 7.960784435272216797e-01 1.000000000000000000e+00 -9.058823585510253906e-01 5.411764979362487793e-01 7.647058963775634766e-01 1.000000000000000000e+00 -6.509804129600524902e-01 8.470588326454162598e-01 3.294117748737335205e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.509804010391235352e-01 1.843137294054031372e-01 1.000000000000000000e+00 -8.980392217636108398e-01 7.686274647712707520e-01 5.803921818733215332e-01 1.000000000000000000e+00 -7.019608020782470703e-01 7.019608020782470703e-01 7.019608020782470703e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Set3 b/fastplotlib/utils/colormaps/Set3 deleted file mode 100644 index 01ea38486..000000000 --- a/fastplotlib/utils/colormaps/Set3 +++ /dev/null @@ -1,12 +0,0 @@ -5.529412031173706055e-01 8.274509906768798828e-01 7.803921699523925781e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.019608020782470703e-01 1.000000000000000000e+00 -7.450980544090270996e-01 7.294117808341979980e-01 8.549019694328308105e-01 1.000000000000000000e+00 -9.843137264251708984e-01 5.019608139991760254e-01 4.470588266849517822e-01 1.000000000000000000e+00 -5.019608139991760254e-01 6.941176652908325195e-01 8.274509906768798828e-01 1.000000000000000000e+00 -9.921568632125854492e-01 7.058823704719543457e-01 3.843137323856353760e-01 1.000000000000000000e+00 -7.019608020782470703e-01 8.705882430076599121e-01 4.117647111415863037e-01 1.000000000000000000e+00 -9.882352948188781738e-01 8.039215803146362305e-01 8.980392217636108398e-01 1.000000000000000000e+00 -8.509804010391235352e-01 8.509804010391235352e-01 8.509804010391235352e-01 1.000000000000000000e+00 -7.372549176216125488e-01 5.019608139991760254e-01 7.411764860153198242e-01 1.000000000000000000e+00 -8.000000119209289551e-01 9.215686321258544922e-01 7.725490331649780273e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.294117689132690430e-01 4.352941215038299561e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Spectral b/fastplotlib/utils/colormaps/Spectral deleted file mode 100644 index 2ce4f53d0..000000000 --- a/fastplotlib/utils/colormaps/Spectral +++ /dev/null @@ -1,256 +0,0 @@ -6.196078658103942871e-01 3.921568859368562698e-03 2.588235437870025635e-01 1.000000000000000000e+00 -6.280661225318908691e-01 1.330257579684257507e-02 2.608227729797363281e-01 1.000000000000000000e+00 -6.365244388580322266e-01 2.268358319997787476e-02 2.628220021724700928e-01 1.000000000000000000e+00 -6.449826955795288086e-01 3.206459060311317444e-02 2.648212313652038574e-01 1.000000000000000000e+00 -6.534410119056701660e-01 4.144559800624847412e-02 2.668204605579376221e-01 1.000000000000000000e+00 -6.618992686271667480e-01 5.082660540938377380e-02 2.688196897506713867e-01 1.000000000000000000e+00 -6.703575253486633301e-01 6.020761281251907349e-02 2.708189189434051514e-01 1.000000000000000000e+00 -6.788158416748046875e-01 6.958861649036407471e-02 2.728181481361389160e-01 1.000000000000000000e+00 -6.872740983963012695e-01 7.896962761878967285e-02 2.748173773288726807e-01 1.000000000000000000e+00 -6.957324147224426270e-01 8.835063129663467407e-02 2.768166065216064453e-01 1.000000000000000000e+00 -7.041906714439392090e-01 9.773164242506027222e-02 2.788158357143402100e-01 1.000000000000000000e+00 -7.126489877700805664e-01 1.071126461029052734e-01 2.808150649070739746e-01 1.000000000000000000e+00 -7.211072444915771484e-01 1.164936572313308716e-01 2.828142940998077393e-01 1.000000000000000000e+00 -7.295655608177185059e-01 1.258746683597564697e-01 2.848135232925415039e-01 1.000000000000000000e+00 -7.380238175392150879e-01 1.352556645870208740e-01 2.868127524852752686e-01 1.000000000000000000e+00 -7.464821338653564453e-01 1.446366757154464722e-01 2.888119816780090332e-01 1.000000000000000000e+00 -7.549403905868530273e-01 1.540176868438720703e-01 2.908112406730651855e-01 1.000000000000000000e+00 -7.633987069129943848e-01 1.633986979722976685e-01 2.928104698657989502e-01 1.000000000000000000e+00 -7.718569636344909668e-01 1.727796941995620728e-01 2.948096990585327148e-01 1.000000000000000000e+00 -7.803152799606323242e-01 1.821607053279876709e-01 2.968089282512664795e-01 1.000000000000000000e+00 -7.887735366821289062e-01 1.915417164564132690e-01 2.988081574440002441e-01 1.000000000000000000e+00 -7.972318530082702637e-01 2.009227275848388672e-01 3.008073866367340088e-01 1.000000000000000000e+00 -8.056901097297668457e-01 2.103037238121032715e-01 3.028066158294677734e-01 1.000000000000000000e+00 -8.141484260559082031e-01 2.196847349405288696e-01 3.048058450222015381e-01 1.000000000000000000e+00 -8.226066827774047852e-01 2.290657460689544678e-01 3.068050742149353027e-01 1.000000000000000000e+00 -8.310649991035461426e-01 2.384467571973800659e-01 3.088043034076690674e-01 1.000000000000000000e+00 -8.376778364181518555e-01 2.467512488365173340e-01 3.088811933994293213e-01 1.000000000000000000e+00 -8.424451947212219238e-01 2.539792358875274658e-01 3.070357441902160645e-01 1.000000000000000000e+00 -8.472126126289367676e-01 2.612072229385375977e-01 3.051903247833251953e-01 1.000000000000000000e+00 -8.519800305366516113e-01 2.684352099895477295e-01 3.033448755741119385e-01 1.000000000000000000e+00 -8.567473888397216797e-01 2.756631970405578613e-01 3.014994263648986816e-01 1.000000000000000000e+00 -8.615148067474365234e-01 2.828911840915679932e-01 2.996539771556854248e-01 1.000000000000000000e+00 -8.662822246551513672e-01 2.901191711425781250e-01 2.978085279464721680e-01 1.000000000000000000e+00 -8.710495829582214355e-01 2.973471879959106445e-01 2.959630787372589111e-01 1.000000000000000000e+00 -8.758170008659362793e-01 3.045751750469207764e-01 2.941176593303680420e-01 1.000000000000000000e+00 -8.805844187736511230e-01 3.118031620979309082e-01 2.922722101211547852e-01 1.000000000000000000e+00 -8.853517770767211914e-01 3.190311491489410400e-01 2.904267609119415283e-01 1.000000000000000000e+00 -8.901191949844360352e-01 3.262591361999511719e-01 2.885813117027282715e-01 1.000000000000000000e+00 -8.948865532875061035e-01 3.334871232509613037e-01 2.867358624935150146e-01 1.000000000000000000e+00 -8.996539711952209473e-01 3.407151103019714355e-01 2.848904132843017578e-01 1.000000000000000000e+00 -9.044213891029357910e-01 3.479430973529815674e-01 2.830449938774108887e-01 1.000000000000000000e+00 -9.091887474060058594e-01 3.551710844039916992e-01 2.811995446681976318e-01 1.000000000000000000e+00 -9.139561653137207031e-01 3.623990714550018311e-01 2.793540954589843750e-01 1.000000000000000000e+00 -9.187235832214355469e-01 3.696270585060119629e-01 2.775086462497711182e-01 1.000000000000000000e+00 -9.234909415245056152e-01 3.768550455570220947e-01 2.756631970405578613e-01 1.000000000000000000e+00 -9.282583594322204590e-01 3.840830326080322266e-01 2.738177478313446045e-01 1.000000000000000000e+00 -9.330257773399353027e-01 3.913110196590423584e-01 2.719723284244537354e-01 1.000000000000000000e+00 -9.377931356430053711e-01 3.985390365123748779e-01 2.701268792152404785e-01 1.000000000000000000e+00 -9.425605535507202148e-01 4.057670235633850098e-01 2.682814300060272217e-01 1.000000000000000000e+00 -9.473279714584350586e-01 4.129950106143951416e-01 2.664359807968139648e-01 1.000000000000000000e+00 -9.520953297615051270e-01 4.202229976654052734e-01 2.645905315876007080e-01 1.000000000000000000e+00 -9.568627476692199707e-01 4.274509847164154053e-01 2.627451121807098389e-01 1.000000000000000000e+00 -9.582468271255493164e-01 4.374471306800842285e-01 2.673587203025817871e-01 1.000000000000000000e+00 -9.596309065818786621e-01 4.474432766437530518e-01 2.719723284244537354e-01 1.000000000000000000e+00 -9.610149860382080078e-01 4.574394524097442627e-01 2.765859365463256836e-01 1.000000000000000000e+00 -9.623990654945373535e-01 4.674355983734130859e-01 2.811995446681976318e-01 1.000000000000000000e+00 -9.637831449508666992e-01 4.774317443370819092e-01 2.858131527900695801e-01 1.000000000000000000e+00 -9.651672244071960449e-01 4.874279201030731201e-01 2.904267609119415283e-01 1.000000000000000000e+00 -9.665513038635253906e-01 4.974240660667419434e-01 2.950403690338134766e-01 1.000000000000000000e+00 -9.679353833198547363e-01 5.074202418327331543e-01 2.996539771556854248e-01 1.000000000000000000e+00 -9.693194627761840820e-01 5.174163579940795898e-01 3.042675852775573730e-01 1.000000000000000000e+00 -9.707036018371582031e-01 5.274125337600708008e-01 3.088811933994293213e-01 1.000000000000000000e+00 -9.720876812934875488e-01 5.374087095260620117e-01 3.134948015213012695e-01 1.000000000000000000e+00 -9.734717607498168945e-01 5.474048256874084473e-01 3.181084096431732178e-01 1.000000000000000000e+00 -9.748558402061462402e-01 5.574010014533996582e-01 3.227220177650451660e-01 1.000000000000000000e+00 -9.762399196624755859e-01 5.673971772193908691e-01 3.273356258869171143e-01 1.000000000000000000e+00 -9.776239991188049316e-01 5.773932933807373047e-01 3.319492638111114502e-01 1.000000000000000000e+00 -9.790080785751342773e-01 5.873894691467285156e-01 3.365628719329833984e-01 1.000000000000000000e+00 -9.803921580314636230e-01 5.973856449127197266e-01 3.411764800548553467e-01 1.000000000000000000e+00 -9.817762374877929688e-01 6.073817610740661621e-01 3.457900881767272949e-01 1.000000000000000000e+00 -9.831603169441223145e-01 6.173779368400573730e-01 3.504036962985992432e-01 1.000000000000000000e+00 -9.845443964004516602e-01 6.273741126060485840e-01 3.550173044204711914e-01 1.000000000000000000e+00 -9.859284758567810059e-01 6.373702287673950195e-01 3.596309125423431396e-01 1.000000000000000000e+00 -9.873125553131103516e-01 6.473664045333862305e-01 3.642445206642150879e-01 1.000000000000000000e+00 -9.886966347694396973e-01 6.573625802993774414e-01 3.688581287860870361e-01 1.000000000000000000e+00 -9.900807142257690430e-01 6.673586964607238770e-01 3.734717369079589844e-01 1.000000000000000000e+00 -9.914647936820983887e-01 6.773548722267150879e-01 3.780853450298309326e-01 1.000000000000000000e+00 -9.922337532043457031e-01 6.861976385116577148e-01 3.836216926574707031e-01 1.000000000000000000e+00 -9.923875331878662109e-01 6.938869953155517578e-01 3.900807499885559082e-01 1.000000000000000000e+00 -9.925413131713867188e-01 7.015762925148010254e-01 3.965397775173187256e-01 1.000000000000000000e+00 -9.926950931549072266e-01 7.092656493186950684e-01 4.029988348484039307e-01 1.000000000000000000e+00 -9.928489327430725098e-01 7.169550061225891113e-01 4.094578921794891357e-01 1.000000000000000000e+00 -9.930027127265930176e-01 7.246443629264831543e-01 4.159169495105743408e-01 1.000000000000000000e+00 -9.931564927101135254e-01 7.323337197303771973e-01 4.223760068416595459e-01 1.000000000000000000e+00 -9.933102726936340332e-01 7.400230765342712402e-01 4.288350641727447510e-01 1.000000000000000000e+00 -9.934640526771545410e-01 7.477124333381652832e-01 4.352941215038299561e-01 1.000000000000000000e+00 -9.936178326606750488e-01 7.554017901420593262e-01 4.417531788349151611e-01 1.000000000000000000e+00 -9.937716126441955566e-01 7.630911469459533691e-01 4.482122361660003662e-01 1.000000000000000000e+00 -9.939253926277160645e-01 7.707804441452026367e-01 4.546712934970855713e-01 1.000000000000000000e+00 -9.940791726112365723e-01 7.784698009490966797e-01 4.611303210258483887e-01 1.000000000000000000e+00 -9.942330121994018555e-01 7.861591577529907227e-01 4.675893783569335938e-01 1.000000000000000000e+00 -9.943867921829223633e-01 7.938485145568847656e-01 4.740484356880187988e-01 1.000000000000000000e+00 -9.945405721664428711e-01 8.015378713607788086e-01 4.805074930191040039e-01 1.000000000000000000e+00 -9.946943521499633789e-01 8.092272281646728516e-01 4.869665503501892090e-01 1.000000000000000000e+00 -9.948481321334838867e-01 8.169165849685668945e-01 4.934256076812744141e-01 1.000000000000000000e+00 -9.950019121170043945e-01 8.246059417724609375e-01 4.998846650123596191e-01 1.000000000000000000e+00 -9.951556921005249023e-01 8.322952985763549805e-01 5.063437223434448242e-01 1.000000000000000000e+00 -9.953094720840454102e-01 8.399845957756042480e-01 5.128027796745300293e-01 1.000000000000000000e+00 -9.954633116722106934e-01 8.476739525794982910e-01 5.192618370056152344e-01 1.000000000000000000e+00 -9.956170916557312012e-01 8.553633093833923340e-01 5.257208943367004395e-01 1.000000000000000000e+00 -9.957708716392517090e-01 8.630526661872863770e-01 5.321799516677856445e-01 1.000000000000000000e+00 -9.959246516227722168e-01 8.707420229911804199e-01 5.386390089988708496e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.784313797950744629e-01 5.450980663299560547e-01 1.000000000000000000e+00 -9.962322115898132324e-01 8.831987977027893066e-01 5.530949831008911133e-01 1.000000000000000000e+00 -9.963859915733337402e-01 8.879661560058593750e-01 5.610918998718261719e-01 1.000000000000000000e+00 -9.965397715568542480e-01 8.927335739135742188e-01 5.690888166427612305e-01 1.000000000000000000e+00 -9.966935515403747559e-01 8.975009322166442871e-01 5.770857334136962891e-01 1.000000000000000000e+00 -9.968473911285400391e-01 9.022683501243591309e-01 5.850826501846313477e-01 1.000000000000000000e+00 -9.970011711120605469e-01 9.070357680320739746e-01 5.930795669555664062e-01 1.000000000000000000e+00 -9.971549510955810547e-01 9.118031263351440430e-01 6.010764837265014648e-01 1.000000000000000000e+00 -9.973087310791015625e-01 9.165705442428588867e-01 6.090734601020812988e-01 1.000000000000000000e+00 -9.974625110626220703e-01 9.213379621505737305e-01 6.170703768730163574e-01 1.000000000000000000e+00 -9.976162910461425781e-01 9.261053204536437988e-01 6.250672936439514160e-01 1.000000000000000000e+00 -9.977700710296630859e-01 9.308727383613586426e-01 6.330642104148864746e-01 1.000000000000000000e+00 -9.979238510131835938e-01 9.356401562690734863e-01 6.410611271858215332e-01 1.000000000000000000e+00 -9.980776906013488770e-01 9.404075145721435547e-01 6.490580439567565918e-01 1.000000000000000000e+00 -9.982314705848693848e-01 9.451749324798583984e-01 6.570549607276916504e-01 1.000000000000000000e+00 -9.983852505683898926e-01 9.499423503875732422e-01 6.650518774986267090e-01 1.000000000000000000e+00 -9.985390305519104004e-01 9.547097086906433105e-01 6.730488538742065430e-01 1.000000000000000000e+00 -9.986928105354309082e-01 9.594771265983581543e-01 6.810457706451416016e-01 1.000000000000000000e+00 -9.988465905189514160e-01 9.642445445060729980e-01 6.890426874160766602e-01 1.000000000000000000e+00 -9.990003705024719238e-01 9.690119028091430664e-01 6.970396041870117188e-01 1.000000000000000000e+00 -9.991541504859924316e-01 9.737793207168579102e-01 7.050365209579467773e-01 1.000000000000000000e+00 -9.993079304695129395e-01 9.785467386245727539e-01 7.130334377288818359e-01 1.000000000000000000e+00 -9.994617700576782227e-01 9.833140969276428223e-01 7.210303544998168945e-01 1.000000000000000000e+00 -9.996155500411987305e-01 9.880815148353576660e-01 7.290272712707519531e-01 1.000000000000000000e+00 -9.997693300247192383e-01 9.928489327430725098e-01 7.370242476463317871e-01 1.000000000000000000e+00 -9.999231100082397461e-01 9.976162910461425781e-01 7.450211644172668457e-01 1.000000000000000000e+00 -9.980776906013488770e-01 9.992310404777526855e-01 7.460207343101501465e-01 1.000000000000000000e+00 -9.942330121994018555e-01 9.976931810379028320e-01 7.400230765342712402e-01 1.000000000000000000e+00 -9.903883337974548340e-01 9.961553215980529785e-01 7.340253591537475586e-01 1.000000000000000000e+00 -9.865436553955078125e-01 9.946174621582031250e-01 7.280277013778686523e-01 1.000000000000000000e+00 -9.826989769935607910e-01 9.930796027183532715e-01 7.220299839973449707e-01 1.000000000000000000e+00 -9.788542985916137695e-01 9.915417432785034180e-01 7.160322666168212891e-01 1.000000000000000000e+00 -9.750096201896667480e-01 9.900038242340087891e-01 7.100346088409423828e-01 1.000000000000000000e+00 -9.711649417877197266e-01 9.884659647941589355e-01 7.040368914604187012e-01 1.000000000000000000e+00 -9.673202633857727051e-01 9.869281053543090820e-01 6.980392336845397949e-01 1.000000000000000000e+00 -9.634755849838256836e-01 9.853902459144592285e-01 6.920415163040161133e-01 1.000000000000000000e+00 -9.596309065818786621e-01 9.838523864746093750e-01 6.860438585281372070e-01 1.000000000000000000e+00 -9.557862281799316406e-01 9.823144674301147461e-01 6.800461411476135254e-01 1.000000000000000000e+00 -9.519415497779846191e-01 9.807766079902648926e-01 6.740484237670898438e-01 1.000000000000000000e+00 -9.480968713760375977e-01 9.792387485504150391e-01 6.680507659912109375e-01 1.000000000000000000e+00 -9.442521929740905762e-01 9.777008891105651855e-01 6.620530486106872559e-01 1.000000000000000000e+00 -9.404075145721435547e-01 9.761630296707153320e-01 6.560553908348083496e-01 1.000000000000000000e+00 -9.365628361701965332e-01 9.746251702308654785e-01 6.500576734542846680e-01 1.000000000000000000e+00 -9.327181577682495117e-01 9.730872511863708496e-01 6.440599560737609863e-01 1.000000000000000000e+00 -9.288735389709472656e-01 9.715493917465209961e-01 6.380622982978820801e-01 1.000000000000000000e+00 -9.250288605690002441e-01 9.700115323066711426e-01 6.320645809173583984e-01 1.000000000000000000e+00 -9.211841821670532227e-01 9.684736728668212891e-01 6.260669231414794922e-01 1.000000000000000000e+00 -9.173395037651062012e-01 9.669358134269714355e-01 6.200692057609558105e-01 1.000000000000000000e+00 -9.134948253631591797e-01 9.653978943824768066e-01 6.140714883804321289e-01 1.000000000000000000e+00 -9.096501469612121582e-01 9.638600349426269531e-01 6.080738306045532227e-01 1.000000000000000000e+00 -9.058054685592651367e-01 9.623221755027770996e-01 6.020761132240295410e-01 1.000000000000000000e+00 -9.019607901573181152e-01 9.607843160629272461e-01 5.960784554481506348e-01 1.000000000000000000e+00 -8.928873538970947266e-01 9.570934176445007324e-01 5.979238748550415039e-01 1.000000000000000000e+00 -8.838139176368713379e-01 9.534025192260742188e-01 5.997692942619323730e-01 1.000000000000000000e+00 -8.747404813766479492e-01 9.497116208076477051e-01 6.016147732734680176e-01 1.000000000000000000e+00 -8.656670451164245605e-01 9.460207819938659668e-01 6.034601926803588867e-01 1.000000000000000000e+00 -8.565936088562011719e-01 9.423298835754394531e-01 6.053056716918945312e-01 1.000000000000000000e+00 -8.475201725959777832e-01 9.386389851570129395e-01 6.071510910987854004e-01 1.000000000000000000e+00 -8.384467363357543945e-01 9.349480867385864258e-01 6.089965105056762695e-01 1.000000000000000000e+00 -8.293733000755310059e-01 9.312571883201599121e-01 6.108419895172119141e-01 1.000000000000000000e+00 -8.202998638153076172e-01 9.275663495063781738e-01 6.126874089241027832e-01 1.000000000000000000e+00 -8.112264275550842285e-01 9.238754510879516602e-01 6.145328879356384277e-01 1.000000000000000000e+00 -8.021529912948608398e-01 9.201845526695251465e-01 6.163783073425292969e-01 1.000000000000000000e+00 -7.930795550346374512e-01 9.164936542510986328e-01 6.182237863540649414e-01 1.000000000000000000e+00 -7.840061783790588379e-01 9.128027558326721191e-01 6.200692057609558105e-01 1.000000000000000000e+00 -7.749327421188354492e-01 9.091118574142456055e-01 6.219146251678466797e-01 1.000000000000000000e+00 -7.658593058586120605e-01 9.054210186004638672e-01 6.237601041793823242e-01 1.000000000000000000e+00 -7.567858695983886719e-01 9.017301201820373535e-01 6.256055235862731934e-01 1.000000000000000000e+00 -7.477124333381652832e-01 8.980392217636108398e-01 6.274510025978088379e-01 1.000000000000000000e+00 -7.386389970779418945e-01 8.943483233451843262e-01 6.292964220046997070e-01 1.000000000000000000e+00 -7.295655608177185059e-01 8.906574249267578125e-01 6.311418414115905762e-01 1.000000000000000000e+00 -7.204921245574951172e-01 8.869665265083312988e-01 6.329873204231262207e-01 1.000000000000000000e+00 -7.114186882972717285e-01 8.832756876945495605e-01 6.348327398300170898e-01 1.000000000000000000e+00 -7.023452520370483398e-01 8.795847892761230469e-01 6.366782188415527344e-01 1.000000000000000000e+00 -6.932718157768249512e-01 8.758938908576965332e-01 6.385236382484436035e-01 1.000000000000000000e+00 -6.841983795166015625e-01 8.722029924392700195e-01 6.403691172599792480e-01 1.000000000000000000e+00 -6.751249432563781738e-01 8.685120940208435059e-01 6.422145366668701172e-01 1.000000000000000000e+00 -6.652826070785522461e-01 8.645905256271362305e-01 6.432141661643981934e-01 1.000000000000000000e+00 -6.546712517738342285e-01 8.604382872581481934e-01 6.433679461479187012e-01 1.000000000000000000e+00 -6.440599560737609863e-01 8.562860488891601562e-01 6.435217261314392090e-01 1.000000000000000000e+00 -6.334486603736877441e-01 8.521338105201721191e-01 6.436755061149597168e-01 1.000000000000000000e+00 -6.228373646736145020e-01 8.479815721511840820e-01 6.438292860984802246e-01 1.000000000000000000e+00 -6.122260689735412598e-01 8.438292741775512695e-01 6.439830660820007324e-01 1.000000000000000000e+00 -6.016147732734680176e-01 8.396770358085632324e-01 6.441368460655212402e-01 1.000000000000000000e+00 -5.910034775733947754e-01 8.355247974395751953e-01 6.442906856536865234e-01 1.000000000000000000e+00 -5.803921818733215332e-01 8.313725590705871582e-01 6.444444656372070312e-01 1.000000000000000000e+00 -5.697808265686035156e-01 8.272203207015991211e-01 6.445982456207275391e-01 1.000000000000000000e+00 -5.591695308685302734e-01 8.230680227279663086e-01 6.447520256042480469e-01 1.000000000000000000e+00 -5.485582351684570312e-01 8.189157843589782715e-01 6.449058055877685547e-01 1.000000000000000000e+00 -5.379469394683837891e-01 8.147635459899902344e-01 6.450595855712890625e-01 1.000000000000000000e+00 -5.273356437683105469e-01 8.106113076210021973e-01 6.452133655548095703e-01 1.000000000000000000e+00 -5.167243480682373047e-01 8.064590692520141602e-01 6.453671455383300781e-01 1.000000000000000000e+00 -5.061130523681640625e-01 8.023068308830261230e-01 6.455209255218505859e-01 1.000000000000000000e+00 -4.955017268657684326e-01 7.981545329093933105e-01 6.456747651100158691e-01 1.000000000000000000e+00 -4.848904311656951904e-01 7.940022945404052734e-01 6.458285450935363770e-01 1.000000000000000000e+00 -4.742791354656219482e-01 7.898500561714172363e-01 6.459823250770568848e-01 1.000000000000000000e+00 -4.636678099632263184e-01 7.856978178024291992e-01 6.461361050605773926e-01 1.000000000000000000e+00 -4.530565142631530762e-01 7.815455794334411621e-01 6.462898850440979004e-01 1.000000000000000000e+00 -4.424452185630798340e-01 7.773932814598083496e-01 6.464436650276184082e-01 1.000000000000000000e+00 -4.318339228630065918e-01 7.732410430908203125e-01 6.465974450111389160e-01 1.000000000000000000e+00 -4.212225973606109619e-01 7.690888047218322754e-01 6.467512249946594238e-01 1.000000000000000000e+00 -4.106113016605377197e-01 7.649365663528442383e-01 6.469050645828247070e-01 1.000000000000000000e+00 -4.000000059604644775e-01 7.607843279838562012e-01 6.470588445663452148e-01 1.000000000000000000e+00 -3.920030891895294189e-01 7.518646717071533203e-01 6.507496833801269531e-01 1.000000000000000000e+00 -3.840061426162719727e-01 7.429450154304504395e-01 6.544405817985534668e-01 1.000000000000000000e+00 -3.760092258453369141e-01 7.340253591537475586e-01 6.581314802169799805e-01 1.000000000000000000e+00 -3.680123090744018555e-01 7.251057028770446777e-01 6.618223786354064941e-01 1.000000000000000000e+00 -3.600153923034667969e-01 7.161861062049865723e-01 6.655132770538330078e-01 1.000000000000000000e+00 -3.520184457302093506e-01 7.072664499282836914e-01 6.692041754722595215e-01 1.000000000000000000e+00 -3.440215289592742920e-01 6.983467936515808105e-01 6.728950142860412598e-01 1.000000000000000000e+00 -3.360246121883392334e-01 6.894271373748779297e-01 6.765859127044677734e-01 1.000000000000000000e+00 -3.280276954174041748e-01 6.805074810981750488e-01 6.802768111228942871e-01 1.000000000000000000e+00 -3.200307488441467285e-01 6.715878248214721680e-01 6.839677095413208008e-01 1.000000000000000000e+00 -3.120338320732116699e-01 6.626682281494140625e-01 6.876586079597473145e-01 1.000000000000000000e+00 -3.040369153022766113e-01 6.537485718727111816e-01 6.913495063781738281e-01 1.000000000000000000e+00 -2.960399985313415527e-01 6.448289155960083008e-01 6.950403451919555664e-01 1.000000000000000000e+00 -2.880430519580841064e-01 6.359092593193054199e-01 6.987312436103820801e-01 1.000000000000000000e+00 -2.800461351871490479e-01 6.269896030426025391e-01 7.024221420288085938e-01 1.000000000000000000e+00 -2.720492184162139893e-01 6.180699467658996582e-01 7.061130404472351074e-01 1.000000000000000000e+00 -2.640523016452789307e-01 6.091503500938415527e-01 7.098039388656616211e-01 1.000000000000000000e+00 -2.560553550720214844e-01 6.002306938171386719e-01 7.134948372840881348e-01 1.000000000000000000e+00 -2.480584383010864258e-01 5.913110375404357910e-01 7.171856760978698730e-01 1.000000000000000000e+00 -2.400615215301513672e-01 5.823913812637329102e-01 7.208765745162963867e-01 1.000000000000000000e+00 -2.320645898580551147e-01 5.734717249870300293e-01 7.245674729347229004e-01 1.000000000000000000e+00 -2.240676730871200562e-01 5.645520687103271484e-01 7.282583713531494141e-01 1.000000000000000000e+00 -2.160707414150238037e-01 5.556324720382690430e-01 7.319492697715759277e-01 1.000000000000000000e+00 -2.080738246440887451e-01 5.467128157615661621e-01 7.356401681900024414e-01 1.000000000000000000e+00 -2.000768929719924927e-01 5.377931594848632812e-01 7.393310070037841797e-01 1.000000000000000000e+00 -1.994617432355880737e-01 5.289503931999206543e-01 7.391003370285034180e-01 1.000000000000000000e+00 -2.062283754348754883e-01 5.201845169067382812e-01 7.349480986595153809e-01 1.000000000000000000e+00 -2.129950076341629028e-01 5.114187002182006836e-01 7.307958602905273438e-01 1.000000000000000000e+00 -2.197616249322891235e-01 5.026528239250183105e-01 7.266436219215393066e-01 1.000000000000000000e+00 -2.265282571315765381e-01 4.938869774341583252e-01 7.224913239479064941e-01 1.000000000000000000e+00 -2.332948893308639526e-01 4.851211011409759521e-01 7.183390855789184570e-01 1.000000000000000000e+00 -2.400615215301513672e-01 4.763552546501159668e-01 7.141868472099304199e-01 1.000000000000000000e+00 -2.468281388282775879e-01 4.675893783569335938e-01 7.100346088409423828e-01 1.000000000000000000e+00 -2.535947859287261963e-01 4.588235318660736084e-01 7.058823704719543457e-01 1.000000000000000000e+00 -2.603614032268524170e-01 4.500576555728912354e-01 7.017301321029663086e-01 1.000000000000000000e+00 -2.671280205249786377e-01 4.412918090820312500e-01 6.975778341293334961e-01 1.000000000000000000e+00 -2.738946676254272461e-01 4.325259625911712646e-01 6.934255957603454590e-01 1.000000000000000000e+00 -2.806612849235534668e-01 4.237600862979888916e-01 6.892733573913574219e-01 1.000000000000000000e+00 -2.874279022216796875e-01 4.149942398071289062e-01 6.851211190223693848e-01 1.000000000000000000e+00 -2.941945493221282959e-01 4.062283635139465332e-01 6.809688806533813477e-01 1.000000000000000000e+00 -3.009611666202545166e-01 3.974625170230865479e-01 6.768165826797485352e-01 1.000000000000000000e+00 -3.077277839183807373e-01 3.886966407299041748e-01 6.726643443107604980e-01 1.000000000000000000e+00 -3.144944310188293457e-01 3.799307942390441895e-01 6.685121059417724609e-01 1.000000000000000000e+00 -3.212610483169555664e-01 3.711649477481842041e-01 6.643598675727844238e-01 1.000000000000000000e+00 -3.280276954174041748e-01 3.623990714550018311e-01 6.602076292037963867e-01 1.000000000000000000e+00 -3.347943127155303955e-01 3.536332249641418457e-01 6.560553908348083496e-01 1.000000000000000000e+00 -3.415609300136566162e-01 3.448673486709594727e-01 6.519030928611755371e-01 1.000000000000000000e+00 -3.483275771141052246e-01 3.361015021800994873e-01 6.477508544921875000e-01 1.000000000000000000e+00 -3.550941944122314453e-01 3.273356258869171143e-01 6.435986161231994629e-01 1.000000000000000000e+00 -3.618608117103576660e-01 3.185697793960571289e-01 6.394463777542114258e-01 1.000000000000000000e+00 -3.686274588108062744e-01 3.098039329051971436e-01 6.352941393852233887e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/Wistia b/fastplotlib/utils/colormaps/Wistia deleted file mode 100644 index e21659ece..000000000 --- a/fastplotlib/utils/colormaps/Wistia +++ /dev/null @@ -1,256 +0,0 @@ -8.941176533699035645e-01 1.000000000000000000e+00 4.784313738346099854e-01 1.000000000000000000e+00 -8.957785367965698242e-01 9.985851645469665527e-01 4.725259542465209961e-01 1.000000000000000000e+00 -8.974394202232360840e-01 9.971703290939331055e-01 4.666205346584320068e-01 1.000000000000000000e+00 -8.991003632545471191e-01 9.957554936408996582e-01 4.607151150703430176e-01 1.000000000000000000e+00 -9.007612466812133789e-01 9.943406581878662109e-01 4.548096954822540283e-01 1.000000000000000000e+00 -9.024221301078796387e-01 9.929258227348327637e-01 4.489042758941650391e-01 1.000000000000000000e+00 -9.040830731391906738e-01 9.915109276771545410e-01 4.429988563060760498e-01 1.000000000000000000e+00 -9.057439565658569336e-01 9.900960922241210938e-01 4.370934367179870605e-01 1.000000000000000000e+00 -9.074048399925231934e-01 9.886812567710876465e-01 4.311880171298980713e-01 1.000000000000000000e+00 -9.090657234191894531e-01 9.872664213180541992e-01 4.252825975418090820e-01 1.000000000000000000e+00 -9.107266664505004883e-01 9.858515858650207520e-01 4.193771481513977051e-01 1.000000000000000000e+00 -9.123875498771667480e-01 9.844367504119873047e-01 4.134717285633087158e-01 1.000000000000000000e+00 -9.140484333038330078e-01 9.830219149589538574e-01 4.075663089752197266e-01 1.000000000000000000e+00 -9.157093167304992676e-01 9.816070795059204102e-01 4.016608893871307373e-01 1.000000000000000000e+00 -9.173702597618103027e-01 9.801922440528869629e-01 3.957554697990417480e-01 1.000000000000000000e+00 -9.190311431884765625e-01 9.787774085998535156e-01 3.898500502109527588e-01 1.000000000000000000e+00 -9.206920266151428223e-01 9.773625731468200684e-01 3.839446306228637695e-01 1.000000000000000000e+00 -9.223529696464538574e-01 9.759477376937866211e-01 3.780392110347747803e-01 1.000000000000000000e+00 -9.240138530731201172e-01 9.745328426361083984e-01 3.721337914466857910e-01 1.000000000000000000e+00 -9.256747364997863770e-01 9.731180071830749512e-01 3.662283718585968018e-01 1.000000000000000000e+00 -9.273356199264526367e-01 9.717031717300415039e-01 3.603229522705078125e-01 1.000000000000000000e+00 -9.289965629577636719e-01 9.702883362770080566e-01 3.544175326824188232e-01 1.000000000000000000e+00 -9.306574463844299316e-01 9.688735008239746094e-01 3.485121130943298340e-01 1.000000000000000000e+00 -9.323183298110961914e-01 9.674586653709411621e-01 3.426066935062408447e-01 1.000000000000000000e+00 -9.339792132377624512e-01 9.660438299179077148e-01 3.367012739181518555e-01 1.000000000000000000e+00 -9.356401562690734863e-01 9.646289944648742676e-01 3.307958543300628662e-01 1.000000000000000000e+00 -9.373010396957397461e-01 9.632141590118408203e-01 3.248904347419738770e-01 1.000000000000000000e+00 -9.389619231224060059e-01 9.617993235588073730e-01 3.189850151538848877e-01 1.000000000000000000e+00 -9.406228661537170410e-01 9.603844881057739258e-01 3.130795955657958984e-01 1.000000000000000000e+00 -9.422837495803833008e-01 9.589696526527404785e-01 3.071741759777069092e-01 1.000000000000000000e+00 -9.439446330070495605e-01 9.575547575950622559e-01 3.012687563896179199e-01 1.000000000000000000e+00 -9.456055164337158203e-01 9.561399221420288086e-01 2.953633069992065430e-01 1.000000000000000000e+00 -9.472664594650268555e-01 9.547250866889953613e-01 2.894578874111175537e-01 1.000000000000000000e+00 -9.489273428916931152e-01 9.533102512359619141e-01 2.835524678230285645e-01 1.000000000000000000e+00 -9.505882263183593750e-01 9.518954157829284668e-01 2.776470482349395752e-01 1.000000000000000000e+00 -9.522491097450256348e-01 9.504805803298950195e-01 2.717416286468505859e-01 1.000000000000000000e+00 -9.539100527763366699e-01 9.490657448768615723e-01 2.658362090587615967e-01 1.000000000000000000e+00 -9.555709362030029297e-01 9.476509094238281250e-01 2.599307894706726074e-01 1.000000000000000000e+00 -9.572318196296691895e-01 9.462360739707946777e-01 2.540253698825836182e-01 1.000000000000000000e+00 -9.588927626609802246e-01 9.448212385177612305e-01 2.481199502944946289e-01 1.000000000000000000e+00 -9.605536460876464844e-01 9.434064030647277832e-01 2.422145307064056396e-01 1.000000000000000000e+00 -9.622145295143127441e-01 9.419915676116943359e-01 2.363091111183166504e-01 1.000000000000000000e+00 -9.638754129409790039e-01 9.405766725540161133e-01 2.304036915302276611e-01 1.000000000000000000e+00 -9.655363559722900391e-01 9.391618371009826660e-01 2.244982719421386719e-01 1.000000000000000000e+00 -9.671972393989562988e-01 9.377470016479492188e-01 2.185928523540496826e-01 1.000000000000000000e+00 -9.688581228256225586e-01 9.363321661949157715e-01 2.126874327659606934e-01 1.000000000000000000e+00 -9.705190062522888184e-01 9.349173307418823242e-01 2.067820131778717041e-01 1.000000000000000000e+00 -9.721799492835998535e-01 9.335024952888488770e-01 2.008765786886215210e-01 1.000000000000000000e+00 -9.738408327102661133e-01 9.320876598358154297e-01 1.949711591005325317e-01 1.000000000000000000e+00 -9.755017161369323730e-01 9.306728243827819824e-01 1.890657395124435425e-01 1.000000000000000000e+00 -9.771626591682434082e-01 9.292579889297485352e-01 1.831603199243545532e-01 1.000000000000000000e+00 -9.788235425949096680e-01 9.278431534767150879e-01 1.772549003362655640e-01 1.000000000000000000e+00 -9.804844260215759277e-01 9.264283180236816406e-01 1.713494807481765747e-01 1.000000000000000000e+00 -9.821453094482421875e-01 9.250134825706481934e-01 1.654440611600875854e-01 1.000000000000000000e+00 -9.838062524795532227e-01 9.235985875129699707e-01 1.595386415719985962e-01 1.000000000000000000e+00 -9.854671359062194824e-01 9.221837520599365234e-01 1.536332219839096069e-01 1.000000000000000000e+00 -9.871280193328857422e-01 9.207689166069030762e-01 1.477278023958206177e-01 1.000000000000000000e+00 -9.887889027595520020e-01 9.193540811538696289e-01 1.418223828077316284e-01 1.000000000000000000e+00 -9.904498457908630371e-01 9.179392457008361816e-01 1.359169483184814453e-01 1.000000000000000000e+00 -9.921107292175292969e-01 9.165244102478027344e-01 1.300115287303924561e-01 1.000000000000000000e+00 -9.937716126441955566e-01 9.151095747947692871e-01 1.241061165928840637e-01 1.000000000000000000e+00 -9.954325556755065918e-01 9.136947393417358398e-01 1.182006895542144775e-01 1.000000000000000000e+00 -9.970934391021728516e-01 9.122799038887023926e-01 1.122952699661254883e-01 1.000000000000000000e+00 -9.987543225288391113e-01 9.108650684356689453e-01 1.063898503780364990e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.091426134109497070e-01 1.015609353780746460e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.064974784851074219e-01 9.996155649423599243e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.038523435592651367e-01 9.836217015981674194e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.012072086334228516e-01 9.676278382539749146e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.985620737075805664e-01 9.516339749097824097e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.959169387817382812e-01 9.356401115655899048e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.932718038558959961e-01 9.196463227272033691e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.906266689300537109e-01 9.036524593830108643e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.879815340042114258e-01 8.876585960388183594e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.853363990783691406e-01 8.716647326946258545e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.826912641525268555e-01 8.556708693504333496e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.800461292266845703e-01 8.396770805120468140e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.774009943008422852e-01 8.236832171678543091e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.747558593750000000e-01 8.076893538236618042e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.721107244491577148e-01 7.916954904794692993e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.694655895233154297e-01 7.757016271352767944e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.668204545974731445e-01 7.597078382968902588e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.641753196716308594e-01 7.437139749526977539e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.615301847457885742e-01 7.277201116085052490e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.588850498199462891e-01 7.117262482643127441e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.562399148941040039e-01 6.957323849201202393e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.535947799682617188e-01 6.797385960817337036e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.509496450424194336e-01 6.637447327375411987e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.483045101165771484e-01 6.477508693933486938e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.456593751907348633e-01 6.317570060491561890e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.430142402648925781e-01 6.157631799578666687e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.403691053390502930e-01 5.997693166136741638e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.377239704132080078e-01 5.837754532694816589e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.350788354873657227e-01 5.677816271781921387e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.324337005615234375e-01 5.517877638339996338e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.297885656356811523e-01 5.357939377427101135e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.271434307098388672e-01 5.198000743985176086e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.244982957839965820e-01 5.038062110543251038e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.218531608581542969e-01 4.878123849630355835e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.192080259323120117e-01 4.718185216188430786e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.165628314018249512e-01 4.558246955275535583e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.139176964759826660e-01 4.398308321833610535e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.112725615501403809e-01 4.238369688391685486e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.086274266242980957e-01 4.078431427478790283e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.059822916984558105e-01 3.918492794036865234e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.033371567726135254e-01 3.758554533123970032e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.006920218467712402e-01 3.598615899682044983e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.980468869209289551e-01 3.438677266240119934e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.954017519950866699e-01 3.278739005327224731e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.927566170692443848e-01 3.118800371885299683e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.901114821434020996e-01 2.958861924707889557e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.874663472175598145e-01 2.798923477530479431e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.848212122917175293e-01 2.638985030353069305e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.821760773658752441e-01 2.479046583175659180e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.795309424400329590e-01 2.319107949733734131e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.768858075141906738e-01 2.159169502556324005e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.742406725883483887e-01 1.999231055378913879e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.715955376625061035e-01 1.839292608201503754e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.689504027366638184e-01 1.679354161024093628e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.663052678108215332e-01 1.519415620714426041e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.636601328849792480e-01 1.359477080404758453e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.610149979591369629e-01 1.199538633227348328e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.583698630332946777e-01 1.039600186049938202e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.557247281074523926e-01 8.796616457402706146e-03 1.000000000000000000e+00 -1.000000000000000000e+00 7.530795931816101074e-01 7.197231985628604889e-03 1.000000000000000000e+00 -1.000000000000000000e+00 7.504344582557678223e-01 5.597847048193216324e-03 1.000000000000000000e+00 -1.000000000000000000e+00 7.477893233299255371e-01 3.998462110757827759e-03 1.000000000000000000e+00 -1.000000000000000000e+00 7.451441884040832520e-01 2.399077173322439194e-03 1.000000000000000000e+00 -1.000000000000000000e+00 7.424990534782409668e-01 7.996924105100333691e-04 1.000000000000000000e+00 -1.000000000000000000e+00 7.402845025062561035e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.385005950927734375e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.367166280746459961e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.349327206611633301e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.331488132476806641e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.313648462295532227e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.295809388160705566e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.277969717979431152e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.260130643844604492e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.242291569709777832e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.224451899528503418e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.206612825393676758e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.188773751258850098e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.170934081077575684e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.153095006942749023e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.135255932807922363e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.117416262626647949e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.099577188491821289e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.081737518310546875e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.063898444175720215e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.046059370040893555e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.028219699859619141e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.010380625724792480e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.992541551589965820e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.974701881408691406e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.956862807273864746e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.939023733139038086e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.921184062957763672e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.903344988822937012e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.885505318641662598e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.867666244506835938e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.849827170372009277e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.831987500190734863e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.814148426055908203e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.796309351921081543e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.778469681739807129e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.760630607604980469e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.742790937423706055e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.724951863288879395e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.707112789154052734e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.689273118972778320e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.671434044837951660e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.653594970703125000e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.635755300521850586e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.617916226387023926e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.600077152252197266e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.582237482070922852e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.564398407936096191e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.546558737754821777e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.528719663619995117e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.510880589485168457e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.493040919303894043e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.475201845169067383e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.457362771034240723e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.439523100852966309e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.421684026718139648e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.403844952583312988e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.386005282402038574e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.368166208267211914e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.350326538085937500e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.332487463951110840e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.314648389816284180e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.296808719635009766e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.278969645500183105e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.998615980148315430e-01 6.259284615516662598e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.996770620346069336e-01 6.238985061645507812e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.994925260543823242e-01 6.218684911727905273e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.993079304695129395e-01 6.198385357856750488e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.991233944892883301e-01 6.178085207939147949e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.989388585090637207e-01 6.157785654067993164e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.987543225288391113e-01 6.137485504150390625e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.985697865486145020e-01 6.117185950279235840e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.983852505683898926e-01 6.096885800361633301e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.982007145881652832e-01 6.076585650444030762e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.980161190032958984e-01 6.056286096572875977e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.978315830230712891e-01 6.035985946655273438e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.976470470428466797e-01 6.015686392784118652e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.974625110626220703e-01 5.995386242866516113e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.972779750823974609e-01 5.975086688995361328e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.970934391021728516e-01 5.954786539077758789e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.969089031219482422e-01 5.934486985206604004e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.967243075370788574e-01 5.914186835289001465e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.965397715568542480e-01 5.893886685371398926e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.963552355766296387e-01 5.873587131500244141e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.961706995964050293e-01 5.853286981582641602e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.959861636161804199e-01 5.832987427711486816e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.958016276359558105e-01 5.812687277793884277e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.956170916557312012e-01 5.792387723922729492e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.954325556755065918e-01 5.772087574005126953e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.952479600906372070e-01 5.751788020133972168e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.950634241104125977e-01 5.731487870216369629e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.948788881301879883e-01 5.711187720298767090e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.946943521499633789e-01 5.690888166427612305e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.945098161697387695e-01 5.670588016510009766e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.943252801895141602e-01 5.650288462638854980e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.941407442092895508e-01 5.629988312721252441e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.939561486244201660e-01 5.609688758850097656e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.937716126441955566e-01 5.589388608932495117e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.935870766639709473e-01 5.569089055061340332e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.934025406837463379e-01 5.548788905143737793e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.932180047035217285e-01 5.528488755226135254e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.930334687232971191e-01 5.508189201354980469e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.928489327430725098e-01 5.487889051437377930e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.926643371582031250e-01 5.467589497566223145e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.924798011779785156e-01 5.447289347648620605e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.922952651977539062e-01 5.426989793777465820e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.921107292175292969e-01 5.406689643859863281e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.919261932373046875e-01 5.386390089988708496e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.917416572570800781e-01 5.366089940071105957e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.915571212768554688e-01 5.345789790153503418e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.913725256919860840e-01 5.325490236282348633e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.911879897117614746e-01 5.305190086364746094e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.910034537315368652e-01 5.284890532493591309e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.908189177513122559e-01 5.264590382575988770e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.906343817710876465e-01 5.244290828704833984e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.904498457908630371e-01 5.223990678787231445e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.902653098106384277e-01 5.203691124916076660e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.900807142257690430e-01 5.183390974998474121e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.898961782455444336e-01 5.163090825080871582e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.897116422653198242e-01 5.142791271209716797e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.895271062850952148e-01 5.122491121292114258e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.893425703048706055e-01 5.102191567420959473e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.891580343246459961e-01 5.081891417503356934e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.889734983444213867e-01 5.061591863632202148e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.887889027595520020e-01 5.041291713714599609e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.886043667793273926e-01 5.020992159843444824e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.884198307991027832e-01 5.000692009925842285e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.882352948188781738e-01 4.980392158031463623e-01 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/YlGn b/fastplotlib/utils/colormaps/YlGn deleted file mode 100644 index 74f49a080..000000000 --- a/fastplotlib/utils/colormaps/YlGn +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 1.000000000000000000e+00 8.980392217636108398e-01 1.000000000000000000e+00 -9.990157485008239746e-01 9.996309280395507812e-01 8.926259279251098633e-01 1.000000000000000000e+00 -9.980314970016479492e-01 9.992617964744567871e-01 8.872126340866088867e-01 1.000000000000000000e+00 -9.970473051071166992e-01 9.988927245140075684e-01 8.817992806434631348e-01 1.000000000000000000e+00 -9.960630536079406738e-01 9.985236525535583496e-01 8.763859868049621582e-01 1.000000000000000000e+00 -9.950788021087646484e-01 9.981545805931091309e-01 8.709726929664611816e-01 1.000000000000000000e+00 -9.940945506095886230e-01 9.977854490280151367e-01 8.655593991279602051e-01 1.000000000000000000e+00 -9.931103587150573730e-01 9.974163770675659180e-01 8.601461052894592285e-01 1.000000000000000000e+00 -9.921261072158813477e-01 9.970473051071166992e-01 8.547328114509582520e-01 1.000000000000000000e+00 -9.911418557167053223e-01 9.966781735420227051e-01 8.493195176124572754e-01 1.000000000000000000e+00 -9.901576042175292969e-01 9.963091015815734863e-01 8.439061641693115234e-01 1.000000000000000000e+00 -9.891734123229980469e-01 9.959400296211242676e-01 8.384928703308105469e-01 1.000000000000000000e+00 -9.881891608238220215e-01 9.955709576606750488e-01 8.330795764923095703e-01 1.000000000000000000e+00 -9.872049093246459961e-01 9.952018260955810547e-01 8.276662826538085938e-01 1.000000000000000000e+00 -9.862206578254699707e-01 9.948327541351318359e-01 8.222529888153076172e-01 1.000000000000000000e+00 -9.852364659309387207e-01 9.944636821746826172e-01 8.168396949768066406e-01 1.000000000000000000e+00 -9.842522144317626953e-01 9.940945506095886230e-01 8.114264011383056641e-01 1.000000000000000000e+00 -9.832679629325866699e-01 9.937254786491394043e-01 8.060130476951599121e-01 1.000000000000000000e+00 -9.822837114334106445e-01 9.933564066886901855e-01 8.005997538566589355e-01 1.000000000000000000e+00 -9.812995195388793945e-01 9.929873347282409668e-01 7.951864600181579590e-01 1.000000000000000000e+00 -9.803152680397033691e-01 9.926182031631469727e-01 7.897731661796569824e-01 1.000000000000000000e+00 -9.793310165405273438e-01 9.922491312026977539e-01 7.843598723411560059e-01 1.000000000000000000e+00 -9.783467650413513184e-01 9.918800592422485352e-01 7.789465785026550293e-01 1.000000000000000000e+00 -9.773625731468200684e-01 9.915109276771545410e-01 7.735332846641540527e-01 1.000000000000000000e+00 -9.763783216476440430e-01 9.911418557167053223e-01 7.681199312210083008e-01 1.000000000000000000e+00 -9.753940701484680176e-01 9.907727837562561035e-01 7.627066373825073242e-01 1.000000000000000000e+00 -9.744098186492919922e-01 9.904037117958068848e-01 7.572933435440063477e-01 1.000000000000000000e+00 -9.734256267547607422e-01 9.900345802307128906e-01 7.518800497055053711e-01 1.000000000000000000e+00 -9.724413752555847168e-01 9.896655082702636719e-01 7.464667558670043945e-01 1.000000000000000000e+00 -9.714571237564086914e-01 9.892964363098144531e-01 7.410534620285034180e-01 1.000000000000000000e+00 -9.704728722572326660e-01 9.889273643493652344e-01 7.356401681900024414e-01 1.000000000000000000e+00 -9.694886803627014160e-01 9.885582327842712402e-01 7.302268147468566895e-01 1.000000000000000000e+00 -9.681661128997802734e-01 9.880507588386535645e-01 7.251518368721008301e-01 1.000000000000000000e+00 -9.644752144813537598e-01 9.865744113922119141e-01 7.224451899528503418e-01 1.000000000000000000e+00 -9.607843160629272461e-01 9.850980639457702637e-01 7.197385430335998535e-01 1.000000000000000000e+00 -9.570934176445007324e-01 9.836216568946838379e-01 7.170318961143493652e-01 1.000000000000000000e+00 -9.534025192260742188e-01 9.821453094482421875e-01 7.143252491950988770e-01 1.000000000000000000e+00 -9.497116208076477051e-01 9.806689620018005371e-01 7.116186022758483887e-01 1.000000000000000000e+00 -9.460207819938659668e-01 9.791926145553588867e-01 7.089119553565979004e-01 1.000000000000000000e+00 -9.423298835754394531e-01 9.777162671089172363e-01 7.062053084373474121e-01 1.000000000000000000e+00 -9.386389851570129395e-01 9.762399196624755859e-01 7.034986615180969238e-01 1.000000000000000000e+00 -9.349480867385864258e-01 9.747635722160339355e-01 7.007920145988464355e-01 1.000000000000000000e+00 -9.312571883201599121e-01 9.732872247695922852e-01 6.980853676795959473e-01 1.000000000000000000e+00 -9.275663495063781738e-01 9.718108177185058594e-01 6.953787207603454590e-01 1.000000000000000000e+00 -9.238754510879516602e-01 9.703344702720642090e-01 6.926720738410949707e-01 1.000000000000000000e+00 -9.201845526695251465e-01 9.688581228256225586e-01 6.899654269218444824e-01 1.000000000000000000e+00 -9.164936542510986328e-01 9.673817753791809082e-01 6.872587203979492188e-01 1.000000000000000000e+00 -9.128027558326721191e-01 9.659054279327392578e-01 6.845520734786987305e-01 1.000000000000000000e+00 -9.091118574142456055e-01 9.644290804862976074e-01 6.818454265594482422e-01 1.000000000000000000e+00 -9.054210186004638672e-01 9.629527330398559570e-01 6.791387796401977539e-01 1.000000000000000000e+00 -9.017301201820373535e-01 9.614763259887695312e-01 6.764321327209472656e-01 1.000000000000000000e+00 -8.980392217636108398e-01 9.599999785423278809e-01 6.737254858016967773e-01 1.000000000000000000e+00 -8.943483233451843262e-01 9.585236310958862305e-01 6.710188388824462891e-01 1.000000000000000000e+00 -8.906574249267578125e-01 9.570472836494445801e-01 6.683121919631958008e-01 1.000000000000000000e+00 -8.869665265083312988e-01 9.555709362030029297e-01 6.656055450439453125e-01 1.000000000000000000e+00 -8.832756876945495605e-01 9.540945887565612793e-01 6.628988981246948242e-01 1.000000000000000000e+00 -8.795847892761230469e-01 9.526182413101196289e-01 6.601922512054443359e-01 1.000000000000000000e+00 -8.758938908576965332e-01 9.511418938636779785e-01 6.574856042861938477e-01 1.000000000000000000e+00 -8.722029924392700195e-01 9.496654868125915527e-01 6.547789573669433594e-01 1.000000000000000000e+00 -8.685120940208435059e-01 9.481891393661499023e-01 6.520722508430480957e-01 1.000000000000000000e+00 -8.648211956024169922e-01 9.467127919197082520e-01 6.493656039237976074e-01 1.000000000000000000e+00 -8.611303567886352539e-01 9.452364444732666016e-01 6.466589570045471191e-01 1.000000000000000000e+00 -8.574394583702087402e-01 9.437600970268249512e-01 6.439523100852966309e-01 1.000000000000000000e+00 -8.537485599517822266e-01 9.422837495803833008e-01 6.412456631660461426e-01 1.000000000000000000e+00 -8.496270775794982910e-01 9.405920505523681641e-01 6.385697722434997559e-01 1.000000000000000000e+00 -8.442137837409973145e-01 9.382545351982116699e-01 6.359861493110656738e-01 1.000000000000000000e+00 -8.388004899024963379e-01 9.359169602394104004e-01 6.334025263786315918e-01 1.000000000000000000e+00 -8.333871364593505859e-01 9.335793852806091309e-01 6.308189034461975098e-01 1.000000000000000000e+00 -8.279738426208496094e-01 9.312418103218078613e-01 6.282352805137634277e-01 1.000000000000000000e+00 -8.225605487823486328e-01 9.289042949676513672e-01 6.256516575813293457e-01 1.000000000000000000e+00 -8.171472549438476562e-01 9.265667200088500977e-01 6.230680346488952637e-01 1.000000000000000000e+00 -8.117339611053466797e-01 9.242291450500488281e-01 6.204844117164611816e-01 1.000000000000000000e+00 -8.063206672668457031e-01 9.218915700912475586e-01 6.179007887840270996e-01 1.000000000000000000e+00 -8.009073138236999512e-01 9.195539951324462891e-01 6.153171658515930176e-01 1.000000000000000000e+00 -7.954940199851989746e-01 9.172164797782897949e-01 6.127335429191589355e-01 1.000000000000000000e+00 -7.900807261466979980e-01 9.148789048194885254e-01 6.101499199867248535e-01 1.000000000000000000e+00 -7.846674323081970215e-01 9.125413298606872559e-01 6.075662970542907715e-01 1.000000000000000000e+00 -7.792541384696960449e-01 9.102037549018859863e-01 6.049826741218566895e-01 1.000000000000000000e+00 -7.738408446311950684e-01 9.078661799430847168e-01 6.023990511894226074e-01 1.000000000000000000e+00 -7.684275507926940918e-01 9.055286645889282227e-01 5.998154282569885254e-01 1.000000000000000000e+00 -7.630141973495483398e-01 9.031910896301269531e-01 5.972318053245544434e-01 1.000000000000000000e+00 -7.576009035110473633e-01 9.008535146713256836e-01 5.946482419967651367e-01 1.000000000000000000e+00 -7.521876096725463867e-01 8.985159397125244141e-01 5.920646190643310547e-01 1.000000000000000000e+00 -7.467743158340454102e-01 8.961783647537231445e-01 5.894809961318969727e-01 1.000000000000000000e+00 -7.413610219955444336e-01 8.938408493995666504e-01 5.868973731994628906e-01 1.000000000000000000e+00 -7.359477281570434570e-01 8.915032744407653809e-01 5.843137502670288086e-01 1.000000000000000000e+00 -7.305344343185424805e-01 8.891656994819641113e-01 5.817301273345947266e-01 1.000000000000000000e+00 -7.251210808753967285e-01 8.868281245231628418e-01 5.791465044021606445e-01 1.000000000000000000e+00 -7.197077870368957520e-01 8.844906091690063477e-01 5.765628814697265625e-01 1.000000000000000000e+00 -7.142944931983947754e-01 8.821530342102050781e-01 5.739792585372924805e-01 1.000000000000000000e+00 -7.088811993598937988e-01 8.798154592514038086e-01 5.713956356048583984e-01 1.000000000000000000e+00 -7.034679055213928223e-01 8.774778842926025391e-01 5.688120126724243164e-01 1.000000000000000000e+00 -6.980546116828918457e-01 8.751403093338012695e-01 5.662283897399902344e-01 1.000000000000000000e+00 -6.926413178443908691e-01 8.728027939796447754e-01 5.636447668075561523e-01 1.000000000000000000e+00 -6.872279644012451172e-01 8.704652190208435059e-01 5.610611438751220703e-01 1.000000000000000000e+00 -6.818146705627441406e-01 8.681276440620422363e-01 5.584775209426879883e-01 1.000000000000000000e+00 -6.759861707687377930e-01 8.656055331230163574e-01 5.558938980102539062e-01 1.000000000000000000e+00 -6.694656014442443848e-01 8.627758622169494629e-01 5.533102750778198242e-01 1.000000000000000000e+00 -6.629450321197509766e-01 8.599461913108825684e-01 5.507266521453857422e-01 1.000000000000000000e+00 -6.564244627952575684e-01 8.571165204048156738e-01 5.481430292129516602e-01 1.000000000000000000e+00 -6.499038934707641602e-01 8.542867898941040039e-01 5.455594062805175781e-01 1.000000000000000000e+00 -6.433833241462707520e-01 8.514571189880371094e-01 5.429757833480834961e-01 1.000000000000000000e+00 -6.368627548217773438e-01 8.486274480819702148e-01 5.403921604156494141e-01 1.000000000000000000e+00 -6.303421854972839355e-01 8.457977771759033203e-01 5.378085374832153320e-01 1.000000000000000000e+00 -6.238216161727905273e-01 8.429681062698364258e-01 5.352249145507812500e-01 1.000000000000000000e+00 -6.173010468482971191e-01 8.401384353637695312e-01 5.326412916183471680e-01 1.000000000000000000e+00 -6.107804775238037109e-01 8.373087048530578613e-01 5.300576686859130859e-01 1.000000000000000000e+00 -6.042599081993103027e-01 8.344790339469909668e-01 5.274740457534790039e-01 1.000000000000000000e+00 -5.977393388748168945e-01 8.316493630409240723e-01 5.248904228210449219e-01 1.000000000000000000e+00 -5.912187695503234863e-01 8.288196921348571777e-01 5.223067998886108398e-01 1.000000000000000000e+00 -5.846982002258300781e-01 8.259900212287902832e-01 5.197231769561767578e-01 1.000000000000000000e+00 -5.781776309013366699e-01 8.231603503227233887e-01 5.171395540237426758e-01 1.000000000000000000e+00 -5.716570615768432617e-01 8.203306198120117188e-01 5.145559310913085938e-01 1.000000000000000000e+00 -5.651364922523498535e-01 8.175009489059448242e-01 5.119723081588745117e-01 1.000000000000000000e+00 -5.586159229278564453e-01 8.146712779998779297e-01 5.093886852264404297e-01 1.000000000000000000e+00 -5.520953536033630371e-01 8.118416070938110352e-01 5.068050622940063477e-01 1.000000000000000000e+00 -5.455747842788696289e-01 8.090119361877441406e-01 5.042214393615722656e-01 1.000000000000000000e+00 -5.390542149543762207e-01 8.061822652816772461e-01 5.016378164291381836e-01 1.000000000000000000e+00 -5.325336456298828125e-01 8.033525347709655762e-01 4.990542232990264893e-01 1.000000000000000000e+00 -5.260130763053894043e-01 8.005228638648986816e-01 4.964706003665924072e-01 1.000000000000000000e+00 -5.194925069808959961e-01 7.976931929588317871e-01 4.938869774341583252e-01 1.000000000000000000e+00 -5.129719376564025879e-01 7.948635220527648926e-01 4.913033545017242432e-01 1.000000000000000000e+00 -5.064513683319091797e-01 7.920338511466979980e-01 4.887197315692901611e-01 1.000000000000000000e+00 -4.999307990074157715e-01 7.892041802406311035e-01 4.861361086368560791e-01 1.000000000000000000e+00 -4.934102296829223633e-01 7.863744497299194336e-01 4.835524857044219971e-01 1.000000000000000000e+00 -4.868896603584289551e-01 7.835447788238525391e-01 4.809688627719879150e-01 1.000000000000000000e+00 -4.803690910339355469e-01 7.807151079177856445e-01 4.783852398395538330e-01 1.000000000000000000e+00 -4.738485217094421387e-01 7.778854370117187500e-01 4.758016169071197510e-01 1.000000000000000000e+00 -4.672049283981323242e-01 7.748097181320190430e-01 4.727873802185058594e-01 1.000000000000000000e+00 -4.604382812976837158e-01 7.714878916740417480e-01 4.693425595760345459e-01 1.000000000000000000e+00 -4.536716639995574951e-01 7.681660652160644531e-01 4.658977389335632324e-01 1.000000000000000000e+00 -4.469050467014312744e-01 7.648442983627319336e-01 4.624528884887695312e-01 1.000000000000000000e+00 -4.401383996009826660e-01 7.615224719047546387e-01 4.590080678462982178e-01 1.000000000000000000e+00 -4.333717823028564453e-01 7.582007050514221191e-01 4.555632472038269043e-01 1.000000000000000000e+00 -4.266051650047302246e-01 7.548788785934448242e-01 4.521184265613555908e-01 1.000000000000000000e+00 -4.198385179042816162e-01 7.515571117401123047e-01 4.486735761165618896e-01 1.000000000000000000e+00 -4.130719006061553955e-01 7.482352852821350098e-01 4.452287554740905762e-01 1.000000000000000000e+00 -4.063052535057067871e-01 7.449135184288024902e-01 4.417839348316192627e-01 1.000000000000000000e+00 -3.995386362075805664e-01 7.415916919708251953e-01 4.383391141891479492e-01 1.000000000000000000e+00 -3.927720189094543457e-01 7.382699251174926758e-01 4.348942637443542480e-01 1.000000000000000000e+00 -3.860053718090057373e-01 7.349480986595153809e-01 4.314494431018829346e-01 1.000000000000000000e+00 -3.792387545108795166e-01 7.316262722015380859e-01 4.280046224594116211e-01 1.000000000000000000e+00 -3.724721372127532959e-01 7.283045053482055664e-01 4.245597720146179199e-01 1.000000000000000000e+00 -3.657054901123046875e-01 7.249826788902282715e-01 4.211149513721466064e-01 1.000000000000000000e+00 -3.589388728141784668e-01 7.216609120368957520e-01 4.176701307296752930e-01 1.000000000000000000e+00 -3.521722555160522461e-01 7.183390855789184570e-01 4.142253100872039795e-01 1.000000000000000000e+00 -3.454056084156036377e-01 7.150173187255859375e-01 4.107804596424102783e-01 1.000000000000000000e+00 -3.386389911174774170e-01 7.116954922676086426e-01 4.073356389999389648e-01 1.000000000000000000e+00 -3.318723440170288086e-01 7.083737254142761230e-01 4.038908183574676514e-01 1.000000000000000000e+00 -3.251057267189025879e-01 7.050518989562988281e-01 4.004459679126739502e-01 1.000000000000000000e+00 -3.183391094207763672e-01 7.017301321029663086e-01 3.970011472702026367e-01 1.000000000000000000e+00 -3.115724623203277588e-01 6.984083056449890137e-01 3.935563266277313232e-01 1.000000000000000000e+00 -3.048058450222015381e-01 6.950864791870117188e-01 3.901115059852600098e-01 1.000000000000000000e+00 -2.980392277240753174e-01 6.917647123336791992e-01 3.866666555404663086e-01 1.000000000000000000e+00 -2.912725806236267090e-01 6.884428858757019043e-01 3.832218348979949951e-01 1.000000000000000000e+00 -2.845059633255004883e-01 6.851211190223693848e-01 3.797770142555236816e-01 1.000000000000000000e+00 -2.777393162250518799e-01 6.817992925643920898e-01 3.763321936130523682e-01 1.000000000000000000e+00 -2.709726989269256592e-01 6.784775257110595703e-01 3.728873431682586670e-01 1.000000000000000000e+00 -2.642060816287994385e-01 6.751556992530822754e-01 3.694425225257873535e-01 1.000000000000000000e+00 -2.574394345283508301e-01 6.718339323997497559e-01 3.659977018833160400e-01 1.000000000000000000e+00 -2.525951564311981201e-01 6.675893664360046387e-01 3.627066612243652344e-01 1.000000000000000000e+00 -2.489042729139328003e-01 6.627912521362304688e-01 3.595078885555267334e-01 1.000000000000000000e+00 -2.452133744955062866e-01 6.579930782318115234e-01 3.563091158866882324e-01 1.000000000000000000e+00 -2.415224909782409668e-01 6.531949043273925781e-01 3.531103432178497314e-01 1.000000000000000000e+00 -2.378316074609756470e-01 6.483967900276184082e-01 3.499115705490112305e-01 1.000000000000000000e+00 -2.341407090425491333e-01 6.435986161231994629e-01 3.467127978801727295e-01 1.000000000000000000e+00 -2.304498255252838135e-01 6.388004422187805176e-01 3.435140252113342285e-01 1.000000000000000000e+00 -2.267589420080184937e-01 6.340023279190063477e-01 3.403152525424957275e-01 1.000000000000000000e+00 -2.230680435895919800e-01 6.292041540145874023e-01 3.371164798736572266e-01 1.000000000000000000e+00 -2.193771600723266602e-01 6.244059801101684570e-01 3.339177370071411133e-01 1.000000000000000000e+00 -2.156862765550613403e-01 6.196078658103942871e-01 3.307189643383026123e-01 1.000000000000000000e+00 -2.119953930377960205e-01 6.148096919059753418e-01 3.275201916694641113e-01 1.000000000000000000e+00 -2.083044946193695068e-01 6.100115180015563965e-01 3.243214190006256104e-01 1.000000000000000000e+00 -2.046136111021041870e-01 6.052134037017822266e-01 3.211226463317871094e-01 1.000000000000000000e+00 -2.009227275848388672e-01 6.004152297973632812e-01 3.179238736629486084e-01 1.000000000000000000e+00 -1.972318291664123535e-01 5.956170558929443359e-01 3.147251009941101074e-01 1.000000000000000000e+00 -1.935409456491470337e-01 5.908189415931701660e-01 3.115263283252716064e-01 1.000000000000000000e+00 -1.898500621318817139e-01 5.860207676887512207e-01 3.083275556564331055e-01 1.000000000000000000e+00 -1.861591637134552002e-01 5.812225937843322754e-01 3.051287829875946045e-01 1.000000000000000000e+00 -1.824682801961898804e-01 5.764244794845581055e-01 3.019300401210784912e-01 1.000000000000000000e+00 -1.787773966789245605e-01 5.716263055801391602e-01 2.987312674522399902e-01 1.000000000000000000e+00 -1.750864982604980469e-01 5.668281316757202148e-01 2.955324947834014893e-01 1.000000000000000000e+00 -1.713956147432327271e-01 5.620300173759460449e-01 2.923337221145629883e-01 1.000000000000000000e+00 -1.677047312259674072e-01 5.572318434715270996e-01 2.891349494457244873e-01 1.000000000000000000e+00 -1.640138477087020874e-01 5.524336695671081543e-01 2.859361767768859863e-01 1.000000000000000000e+00 -1.603229492902755737e-01 5.476354956626892090e-01 2.827374041080474854e-01 1.000000000000000000e+00 -1.566320657730102539e-01 5.428373813629150391e-01 2.795386314392089844e-01 1.000000000000000000e+00 -1.529411822557449341e-01 5.380392074584960938e-01 2.763398587703704834e-01 1.000000000000000000e+00 -1.492502838373184204e-01 5.332410335540771484e-01 2.731410861015319824e-01 1.000000000000000000e+00 -1.455594003200531006e-01 5.284429192543029785e-01 2.699423432350158691e-01 1.000000000000000000e+00 -1.418685168027877808e-01 5.236447453498840332e-01 2.667435705661773682e-01 1.000000000000000000e+00 -1.381776183843612671e-01 5.188465714454650879e-01 2.635447978973388672e-01 1.000000000000000000e+00 -1.340253800153732300e-01 5.150634646415710449e-01 2.616378366947174072e-01 1.000000000000000000e+00 -1.297193318605422974e-01 5.116186141967773438e-01 2.601614892482757568e-01 1.000000000000000000e+00 -1.254132986068725586e-01 5.081737637519836426e-01 2.586851119995117188e-01 1.000000000000000000e+00 -1.211072653532028198e-01 5.047289729118347168e-01 2.572087645530700684e-01 1.000000000000000000e+00 -1.168012320995330811e-01 5.012841224670410156e-01 2.557324171066284180e-01 1.000000000000000000e+00 -1.124951913952827454e-01 4.978393018245697021e-01 2.542560696601867676e-01 1.000000000000000000e+00 -1.081891581416130066e-01 4.943944513797760010e-01 2.527796924114227295e-01 1.000000000000000000e+00 -1.038831248879432678e-01 4.909496307373046875e-01 2.513033449649810791e-01 1.000000000000000000e+00 -9.957708418369293213e-02 4.875048100948333740e-01 2.498269826173782349e-01 1.000000000000000000e+00 -9.527105093002319336e-02 4.840599894523620605e-01 2.483506351709365845e-01 1.000000000000000000e+00 -9.096501022577285767e-02 4.806151390075683594e-01 2.468742728233337402e-01 1.000000000000000000e+00 -8.665897697210311890e-02 4.771703183650970459e-01 2.453979253768920898e-01 1.000000000000000000e+00 -8.235294371843338013e-02 4.737254977226257324e-01 2.439215630292892456e-01 1.000000000000000000e+00 -7.804690301418304443e-02 4.702806472778320312e-01 2.424452155828475952e-01 1.000000000000000000e+00 -7.374086976051330566e-02 4.668358266353607178e-01 2.409688532352447510e-01 1.000000000000000000e+00 -6.943482905626296997e-02 4.633910059928894043e-01 2.394925057888031006e-01 1.000000000000000000e+00 -6.512879580259323120e-02 4.599461853504180908e-01 2.380161434412002563e-01 1.000000000000000000e+00 -6.082275882363319397e-02 4.565013349056243896e-01 2.365397959947586060e-01 1.000000000000000000e+00 -5.651672556996345520e-02 4.530565142631530762e-01 2.350634336471557617e-01 1.000000000000000000e+00 -5.221068859100341797e-02 4.496116936206817627e-01 2.335870862007141113e-01 1.000000000000000000e+00 -4.790465161204338074e-02 4.461668729782104492e-01 2.321107238531112671e-01 1.000000000000000000e+00 -4.359861463308334351e-02 4.427220225334167480e-01 2.306343764066696167e-01 1.000000000000000000e+00 -3.929258137941360474e-02 4.392772018909454346e-01 2.291580140590667725e-01 1.000000000000000000e+00 -3.498654440045356750e-02 4.358323812484741211e-01 2.276816666126251221e-01 1.000000000000000000e+00 -3.068050742149353027e-02 4.323875308036804199e-01 2.262053042650222778e-01 1.000000000000000000e+00 -2.637447044253349304e-02 4.289427101612091064e-01 2.247289568185806274e-01 1.000000000000000000e+00 -2.206843532621860504e-02 4.254978895187377930e-01 2.232525944709777832e-01 1.000000000000000000e+00 -1.776239834725856781e-02 4.220530688762664795e-01 2.217762470245361328e-01 1.000000000000000000e+00 -1.345636323094367981e-02 4.186082184314727783e-01 2.202998846769332886e-01 1.000000000000000000e+00 -9.150327183306217194e-03 4.151633977890014648e-01 2.188235223293304443e-01 1.000000000000000000e+00 -4.844290670007467270e-03 4.117185771465301514e-01 2.173471748828887939e-01 1.000000000000000000e+00 -5.382545059546828270e-04 4.082737267017364502e-01 2.158708125352859497e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.040753543376922607e-01 2.141791582107543945e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.997693061828613281e-01 2.124567478895187378e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.954632878303527832e-01 2.107343375682830811e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.911572396755218506e-01 2.090119123458862305e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.868512213230133057e-01 2.072895020246505737e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.825451731681823730e-01 2.055670917034149170e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.782391250133514404e-01 2.038446813821792603e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.739331066608428955e-01 2.021222561597824097e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.696270585060119629e-01 2.003998458385467529e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.653210401535034180e-01 1.986774355173110962e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.610149919986724854e-01 1.969550102949142456e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.567089438438415527e-01 1.952325999736785889e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.524029254913330078e-01 1.935101896524429321e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.480968773365020752e-01 1.917877793312072754e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.437908589839935303e-01 1.900653541088104248e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.394848108291625977e-01 1.883429437875747681e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.351787626743316650e-01 1.866205334663391113e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.308727443218231201e-01 1.848981231451034546e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.265666961669921875e-01 1.831756979227066040e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.222606778144836426e-01 1.814532876014709473e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.179546296596527100e-01 1.797308772802352905e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.136486113071441650e-01 1.780084520578384399e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.093425631523132324e-01 1.762860417366027832e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.050365149974822998e-01 1.745636314153671265e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.007304966449737549e-01 1.728412210941314697e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.964244484901428223e-01 1.711187958717346191e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.921184301376342773e-01 1.693963855504989624e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.878123819828033447e-01 1.676739752292633057e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.835063338279724121e-01 1.659515500068664551e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.792003154754638672e-01 1.642291396856307983e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.748942673206329346e-01 1.625067293643951416e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.705882489681243896e-01 1.607843190431594849e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/YlGnBu b/fastplotlib/utils/colormaps/YlGnBu deleted file mode 100644 index fc81887cc..000000000 --- a/fastplotlib/utils/colormaps/YlGnBu +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 1.000000000000000000e+00 8.509804010391235352e-01 1.000000000000000000e+00 -9.977854490280151367e-01 9.991387724876403809e-01 8.460592031478881836e-01 1.000000000000000000e+00 -9.955709576606750488e-01 9.982776045799255371e-01 8.411380052566528320e-01 1.000000000000000000e+00 -9.933564066886901855e-01 9.974163770675659180e-01 8.362168669700622559e-01 1.000000000000000000e+00 -9.911418557167053223e-01 9.965551495552062988e-01 8.312956690788269043e-01 1.000000000000000000e+00 -9.889273643493652344e-01 9.956939816474914551e-01 8.263744711875915527e-01 1.000000000000000000e+00 -9.867128133773803711e-01 9.948327541351318359e-01 8.214532732963562012e-01 1.000000000000000000e+00 -9.844982624053955078e-01 9.939715266227722168e-01 8.165320754051208496e-01 1.000000000000000000e+00 -9.822837114334106445e-01 9.931103587150573730e-01 8.116109371185302734e-01 1.000000000000000000e+00 -9.800692200660705566e-01 9.922491312026977539e-01 8.066897392272949219e-01 1.000000000000000000e+00 -9.778546690940856934e-01 9.913879036903381348e-01 8.017685413360595703e-01 1.000000000000000000e+00 -9.756401181221008301e-01 9.905267357826232910e-01 7.968473434448242188e-01 1.000000000000000000e+00 -9.734256267547607422e-01 9.896655082702636719e-01 7.919262051582336426e-01 1.000000000000000000e+00 -9.712110757827758789e-01 9.888042807579040527e-01 7.870050072669982910e-01 1.000000000000000000e+00 -9.689965248107910156e-01 9.879431128501892090e-01 7.820838093757629395e-01 1.000000000000000000e+00 -9.667820334434509277e-01 9.870818853378295898e-01 7.771626114845275879e-01 1.000000000000000000e+00 -9.645674824714660645e-01 9.862206578254699707e-01 7.722414731979370117e-01 1.000000000000000000e+00 -9.623529314994812012e-01 9.853594899177551270e-01 7.673202753067016602e-01 1.000000000000000000e+00 -9.601383805274963379e-01 9.844982624053955078e-01 7.623990774154663086e-01 1.000000000000000000e+00 -9.579238891601562500e-01 9.836370348930358887e-01 7.574778795242309570e-01 1.000000000000000000e+00 -9.557093381881713867e-01 9.827758669853210449e-01 7.525566816329956055e-01 1.000000000000000000e+00 -9.534947872161865234e-01 9.819146394729614258e-01 7.476355433464050293e-01 1.000000000000000000e+00 -9.512802958488464355e-01 9.810534119606018066e-01 7.427143454551696777e-01 1.000000000000000000e+00 -9.490657448768615723e-01 9.801922440528869629e-01 7.377931475639343262e-01 1.000000000000000000e+00 -9.468511939048767090e-01 9.793310165405273438e-01 7.328719496726989746e-01 1.000000000000000000e+00 -9.446367025375366211e-01 9.784698486328125000e-01 7.279508113861083984e-01 1.000000000000000000e+00 -9.424221515655517578e-01 9.776086211204528809e-01 7.230296134948730469e-01 1.000000000000000000e+00 -9.402076005935668945e-01 9.767473936080932617e-01 7.181084156036376953e-01 1.000000000000000000e+00 -9.379931092262268066e-01 9.758862257003784180e-01 7.131872177124023438e-01 1.000000000000000000e+00 -9.357785582542419434e-01 9.750249981880187988e-01 7.082660794258117676e-01 1.000000000000000000e+00 -9.335640072822570801e-01 9.741637706756591797e-01 7.033448815345764160e-01 1.000000000000000000e+00 -9.313494563102722168e-01 9.733026027679443359e-01 6.984236836433410645e-01 1.000000000000000000e+00 -9.288273453712463379e-01 9.723183512687683105e-01 6.941637992858886719e-01 1.000000000000000000e+00 -9.241522550582885742e-01 9.704728722572326660e-01 6.945328712463378906e-01 1.000000000000000000e+00 -9.194771051406860352e-01 9.686274528503417969e-01 6.949019432067871094e-01 1.000000000000000000e+00 -9.148020148277282715e-01 9.667820334434509277e-01 6.952710747718811035e-01 1.000000000000000000e+00 -9.101268649101257324e-01 9.649365544319152832e-01 6.956401467323303223e-01 1.000000000000000000e+00 -9.054517745971679688e-01 9.630911350250244141e-01 6.960092186927795410e-01 1.000000000000000000e+00 -9.007766246795654297e-01 9.612456560134887695e-01 6.963782906532287598e-01 1.000000000000000000e+00 -8.961014747619628906e-01 9.594002366065979004e-01 6.967474222183227539e-01 1.000000000000000000e+00 -8.914263844490051270e-01 9.575547575950622559e-01 6.971164941787719727e-01 1.000000000000000000e+00 -8.867512345314025879e-01 9.557093381881713867e-01 6.974855661392211914e-01 1.000000000000000000e+00 -8.820761442184448242e-01 9.538639187812805176e-01 6.978546977043151855e-01 1.000000000000000000e+00 -8.774009943008422852e-01 9.520184397697448730e-01 6.982237696647644043e-01 1.000000000000000000e+00 -8.727259039878845215e-01 9.501730203628540039e-01 6.985928416252136230e-01 1.000000000000000000e+00 -8.680507540702819824e-01 9.483275413513183594e-01 6.989619135856628418e-01 1.000000000000000000e+00 -8.633756041526794434e-01 9.464821219444274902e-01 6.993310451507568359e-01 1.000000000000000000e+00 -8.587005138397216797e-01 9.446367025375366211e-01 6.997001171112060547e-01 1.000000000000000000e+00 -8.540253639221191406e-01 9.427912235260009766e-01 7.000691890716552734e-01 1.000000000000000000e+00 -8.493502736091613770e-01 9.409458041191101074e-01 7.004383206367492676e-01 1.000000000000000000e+00 -8.446751236915588379e-01 9.391003251075744629e-01 7.008073925971984863e-01 1.000000000000000000e+00 -8.399999737739562988e-01 9.372549057006835938e-01 7.011764645576477051e-01 1.000000000000000000e+00 -8.353248834609985352e-01 9.354094862937927246e-01 7.015455365180969238e-01 1.000000000000000000e+00 -8.306497335433959961e-01 9.335640072822570801e-01 7.019146680831909180e-01 1.000000000000000000e+00 -8.259746432304382324e-01 9.317185878753662109e-01 7.022837400436401367e-01 1.000000000000000000e+00 -8.212994933128356934e-01 9.298731088638305664e-01 7.026528120040893555e-01 1.000000000000000000e+00 -8.166244029998779297e-01 9.280276894569396973e-01 7.030219435691833496e-01 1.000000000000000000e+00 -8.119492530822753906e-01 9.261822104454040527e-01 7.033910155296325684e-01 1.000000000000000000e+00 -8.072741031646728516e-01 9.243367910385131836e-01 7.037600874900817871e-01 1.000000000000000000e+00 -8.025990128517150879e-01 9.224913716316223145e-01 7.041291594505310059e-01 1.000000000000000000e+00 -7.979238629341125488e-01 9.206458926200866699e-01 7.044982910156250000e-01 1.000000000000000000e+00 -7.932487726211547852e-01 9.188004732131958008e-01 7.048673629760742188e-01 1.000000000000000000e+00 -7.885736227035522461e-01 9.169549942016601562e-01 7.052364349365234375e-01 1.000000000000000000e+00 -7.838984727859497070e-01 9.151095747947692871e-01 7.056055068969726562e-01 1.000000000000000000e+00 -7.781776189804077148e-01 9.128642678260803223e-01 7.060976624488830566e-01 1.000000000000000000e+00 -7.693194746971130371e-01 9.094194769859313965e-01 7.069588899612426758e-01 1.000000000000000000e+00 -7.604613900184631348e-01 9.059746265411376953e-01 7.078200578689575195e-01 1.000000000000000000e+00 -7.516032457351684570e-01 9.025297760963439941e-01 7.086812853813171387e-01 1.000000000000000000e+00 -7.427451014518737793e-01 8.990849852561950684e-01 7.095425128936767578e-01 1.000000000000000000e+00 -7.338869571685791016e-01 8.956401348114013672e-01 7.104036808013916016e-01 1.000000000000000000e+00 -7.250288128852844238e-01 8.921952843666076660e-01 7.112649083137512207e-01 1.000000000000000000e+00 -7.161707282066345215e-01 8.887504935264587402e-01 7.121260762214660645e-01 1.000000000000000000e+00 -7.073125839233398438e-01 8.853056430816650391e-01 7.129873037338256836e-01 1.000000000000000000e+00 -6.984544396400451660e-01 8.818608522415161133e-01 7.138485312461853027e-01 1.000000000000000000e+00 -6.895962953567504883e-01 8.784160017967224121e-01 7.147096991539001465e-01 1.000000000000000000e+00 -6.807381510734558105e-01 8.749711513519287109e-01 7.155709266662597656e-01 1.000000000000000000e+00 -6.718800663948059082e-01 8.715263605117797852e-01 7.164321541786193848e-01 1.000000000000000000e+00 -6.630219221115112305e-01 8.680815100669860840e-01 7.172933220863342285e-01 1.000000000000000000e+00 -6.541637778282165527e-01 8.646366596221923828e-01 7.181545495986938477e-01 1.000000000000000000e+00 -6.453056335449218750e-01 8.611918687820434570e-01 7.190157771110534668e-01 1.000000000000000000e+00 -6.364475488662719727e-01 8.577470183372497559e-01 7.198769450187683105e-01 1.000000000000000000e+00 -6.275894045829772949e-01 8.543021678924560547e-01 7.207381725311279297e-01 1.000000000000000000e+00 -6.187312602996826172e-01 8.508573770523071289e-01 7.215994000434875488e-01 1.000000000000000000e+00 -6.098731160163879395e-01 8.474125266075134277e-01 7.224605679512023926e-01 1.000000000000000000e+00 -6.010149717330932617e-01 8.439676761627197266e-01 7.233217954635620117e-01 1.000000000000000000e+00 -5.921568870544433594e-01 8.405228853225708008e-01 7.241830229759216309e-01 1.000000000000000000e+00 -5.832987427711486816e-01 8.370780348777770996e-01 7.250441908836364746e-01 1.000000000000000000e+00 -5.744405984878540039e-01 8.336332440376281738e-01 7.259054183959960938e-01 1.000000000000000000e+00 -5.655824542045593262e-01 8.301883935928344727e-01 7.267666459083557129e-01 1.000000000000000000e+00 -5.567243099212646484e-01 8.267435431480407715e-01 7.276278138160705566e-01 1.000000000000000000e+00 -5.478662252426147461e-01 8.232987523078918457e-01 7.284890413284301758e-01 1.000000000000000000e+00 -5.390080809593200684e-01 8.198539018630981445e-01 7.293502688407897949e-01 1.000000000000000000e+00 -5.301499366760253906e-01 8.164090514183044434e-01 7.302114367485046387e-01 1.000000000000000000e+00 -5.212917923927307129e-01 8.129642605781555176e-01 7.310726642608642578e-01 1.000000000000000000e+00 -5.124337077140808105e-01 8.095194101333618164e-01 7.319338917732238770e-01 1.000000000000000000e+00 -5.035755634307861328e-01 8.060745596885681152e-01 7.327950596809387207e-01 1.000000000000000000e+00 -4.951787889003753662e-01 8.028604388236999512e-01 7.337485551834106445e-01 1.000000000000000000e+00 -4.875509440898895264e-01 8.000307679176330566e-01 7.348558306694030762e-01 1.000000000000000000e+00 -4.799230992794036865e-01 7.972010970115661621e-01 7.359631061553955078e-01 1.000000000000000000e+00 -4.722952842712402344e-01 7.943713665008544922e-01 7.370703816413879395e-01 1.000000000000000000e+00 -4.646674394607543945e-01 7.915416955947875977e-01 7.381775975227355957e-01 1.000000000000000000e+00 -4.570395946502685547e-01 7.887120246887207031e-01 7.392848730087280273e-01 1.000000000000000000e+00 -4.494117498397827148e-01 7.858823537826538086e-01 7.403921484947204590e-01 1.000000000000000000e+00 -4.417839348316192627e-01 7.830526828765869141e-01 7.414994239807128906e-01 1.000000000000000000e+00 -4.341560900211334229e-01 7.802230119705200195e-01 7.426066994667053223e-01 1.000000000000000000e+00 -4.265282452106475830e-01 7.773932814598083496e-01 7.437139749526977539e-01 1.000000000000000000e+00 -4.189004302024841309e-01 7.745636105537414551e-01 7.448212504386901855e-01 1.000000000000000000e+00 -4.112725853919982910e-01 7.717339396476745605e-01 7.459284663200378418e-01 1.000000000000000000e+00 -4.036447405815124512e-01 7.689042687416076660e-01 7.470357418060302734e-01 1.000000000000000000e+00 -3.960169255733489990e-01 7.660745978355407715e-01 7.481430172920227051e-01 1.000000000000000000e+00 -3.883890807628631592e-01 7.632449269294738770e-01 7.492502927780151367e-01 1.000000000000000000e+00 -3.807612359523773193e-01 7.604151964187622070e-01 7.503575682640075684e-01 1.000000000000000000e+00 -3.731334209442138672e-01 7.575855255126953125e-01 7.514648437500000000e-01 1.000000000000000000e+00 -3.655055761337280273e-01 7.547558546066284180e-01 7.525720596313476562e-01 1.000000000000000000e+00 -3.578777313232421875e-01 7.519261837005615234e-01 7.536793351173400879e-01 1.000000000000000000e+00 -3.502499163150787354e-01 7.490965127944946289e-01 7.547866106033325195e-01 1.000000000000000000e+00 -3.426220715045928955e-01 7.462668418884277344e-01 7.558938860893249512e-01 1.000000000000000000e+00 -3.349942266941070557e-01 7.434371113777160645e-01 7.570011615753173828e-01 1.000000000000000000e+00 -3.273664116859436035e-01 7.406074404716491699e-01 7.581084370613098145e-01 1.000000000000000000e+00 -3.197385668754577637e-01 7.377777695655822754e-01 7.592157125473022461e-01 1.000000000000000000e+00 -3.121107220649719238e-01 7.349480986595153809e-01 7.603229284286499023e-01 1.000000000000000000e+00 -3.044828772544860840e-01 7.321184277534484863e-01 7.614302039146423340e-01 1.000000000000000000e+00 -2.968550622463226318e-01 7.292887568473815918e-01 7.625374794006347656e-01 1.000000000000000000e+00 -2.892272174358367920e-01 7.264590263366699219e-01 7.636447548866271973e-01 1.000000000000000000e+00 -2.815993726253509521e-01 7.236293554306030273e-01 7.647520303726196289e-01 1.000000000000000000e+00 -2.739715576171875000e-01 7.207996845245361328e-01 7.658593058586120605e-01 1.000000000000000000e+00 -2.663437128067016602e-01 7.179700136184692383e-01 7.669665217399597168e-01 1.000000000000000000e+00 -2.587158679962158203e-01 7.151403427124023438e-01 7.680737972259521484e-01 1.000000000000000000e+00 -2.526874244213104248e-01 7.114494442939758301e-01 7.683814167976379395e-01 1.000000000000000000e+00 -2.482583671808242798e-01 7.068973183631896973e-01 7.678892612457275391e-01 1.000000000000000000e+00 -2.438292950391769409e-01 7.023452520370483398e-01 7.673971652984619141e-01 1.000000000000000000e+00 -2.394002377986907959e-01 6.977931857109069824e-01 7.669050097465515137e-01 1.000000000000000000e+00 -2.349711656570434570e-01 6.932410597801208496e-01 7.664129137992858887e-01 1.000000000000000000e+00 -2.305420935153961182e-01 6.886889934539794922e-01 7.659208178520202637e-01 1.000000000000000000e+00 -2.261130362749099731e-01 6.841368675231933594e-01 7.654286623001098633e-01 1.000000000000000000e+00 -2.216839641332626343e-01 6.795848011970520020e-01 7.649365663528442383e-01 1.000000000000000000e+00 -2.172549068927764893e-01 6.750326752662658691e-01 7.644444704055786133e-01 1.000000000000000000e+00 -2.128258347511291504e-01 6.704806089401245117e-01 7.639523148536682129e-01 1.000000000000000000e+00 -2.083967775106430054e-01 6.659284830093383789e-01 7.634602189064025879e-01 1.000000000000000000e+00 -2.039677053689956665e-01 6.613764166831970215e-01 7.629680633544921875e-01 1.000000000000000000e+00 -1.995386332273483276e-01 6.568242907524108887e-01 7.624759674072265625e-01 1.000000000000000000e+00 -1.951095759868621826e-01 6.522722244262695312e-01 7.619838714599609375e-01 1.000000000000000000e+00 -1.906805038452148438e-01 6.477200984954833984e-01 7.614917159080505371e-01 1.000000000000000000e+00 -1.862514466047286987e-01 6.431680321693420410e-01 7.609996199607849121e-01 1.000000000000000000e+00 -1.818223744630813599e-01 6.386159062385559082e-01 7.605075240135192871e-01 1.000000000000000000e+00 -1.773933172225952148e-01 6.340638399124145508e-01 7.600153684616088867e-01 1.000000000000000000e+00 -1.729642450809478760e-01 6.295117139816284180e-01 7.595232725143432617e-01 1.000000000000000000e+00 -1.685351729393005371e-01 6.249596476554870605e-01 7.590311169624328613e-01 1.000000000000000000e+00 -1.641061156988143921e-01 6.204075217247009277e-01 7.585390210151672363e-01 1.000000000000000000e+00 -1.596770435571670532e-01 6.158554553985595703e-01 7.580469250679016113e-01 1.000000000000000000e+00 -1.552479863166809082e-01 6.113033294677734375e-01 7.575547695159912109e-01 1.000000000000000000e+00 -1.508189141750335693e-01 6.067512631416320801e-01 7.570626735687255859e-01 1.000000000000000000e+00 -1.463898569345474243e-01 6.021991372108459473e-01 7.565705776214599609e-01 1.000000000000000000e+00 -1.419607847929000854e-01 5.976470708847045898e-01 7.560784220695495605e-01 1.000000000000000000e+00 -1.375317126512527466e-01 5.930949449539184570e-01 7.555863261222839355e-01 1.000000000000000000e+00 -1.331026554107666016e-01 5.885428786277770996e-01 7.550941705703735352e-01 1.000000000000000000e+00 -1.286735832691192627e-01 5.839907526969909668e-01 7.546020746231079102e-01 1.000000000000000000e+00 -1.242445185780525208e-01 5.794386863708496094e-01 7.541099786758422852e-01 1.000000000000000000e+00 -1.198154538869857788e-01 5.748865604400634766e-01 7.536178231239318848e-01 1.000000000000000000e+00 -1.153863891959190369e-01 5.703344941139221191e-01 7.531257271766662598e-01 1.000000000000000000e+00 -1.141099557280540466e-01 5.647059082984924316e-01 7.510957121849060059e-01 1.000000000000000000e+00 -1.147251054644584656e-01 5.584313869476318359e-01 7.481430172920227051e-01 1.000000000000000000e+00 -1.153402552008628845e-01 5.521568655967712402e-01 7.451903223991394043e-01 1.000000000000000000e+00 -1.159554049372673035e-01 5.458823442459106445e-01 7.422376275062561035e-01 1.000000000000000000e+00 -1.165705472230911255e-01 5.396078228950500488e-01 7.392848730087280273e-01 1.000000000000000000e+00 -1.171856969594955444e-01 5.333333611488342285e-01 7.363321781158447266e-01 1.000000000000000000e+00 -1.178008466958999634e-01 5.270588397979736328e-01 7.333794832229614258e-01 1.000000000000000000e+00 -1.184159964323043823e-01 5.207843184471130371e-01 7.304267883300781250e-01 1.000000000000000000e+00 -1.190311387181282043e-01 5.145097970962524414e-01 7.274740338325500488e-01 1.000000000000000000e+00 -1.196462884545326233e-01 5.082352757453918457e-01 7.245213389396667480e-01 1.000000000000000000e+00 -1.202614381909370422e-01 5.019608139991760254e-01 7.215686440467834473e-01 1.000000000000000000e+00 -1.208765879273414612e-01 4.956862628459930420e-01 7.186158895492553711e-01 1.000000000000000000e+00 -1.214917376637458801e-01 4.894117712974548340e-01 7.156631946563720703e-01 1.000000000000000000e+00 -1.221068799495697021e-01 4.831372499465942383e-01 7.127104997634887695e-01 1.000000000000000000e+00 -1.227220296859741211e-01 4.768627583980560303e-01 7.097578048706054688e-01 1.000000000000000000e+00 -1.233371794223785400e-01 4.705882370471954346e-01 7.068050503730773926e-01 1.000000000000000000e+00 -1.239523291587829590e-01 4.643137156963348389e-01 7.038523554801940918e-01 1.000000000000000000e+00 -1.245674714446067810e-01 4.580392241477966309e-01 7.008996605873107910e-01 1.000000000000000000e+00 -1.251826286315917969e-01 4.517647027969360352e-01 6.979469656944274902e-01 1.000000000000000000e+00 -1.257977634668350220e-01 4.454901814460754395e-01 6.949942111968994141e-01 1.000000000000000000e+00 -1.264129132032394409e-01 4.392156898975372314e-01 6.920415163040161133e-01 1.000000000000000000e+00 -1.270280629396438599e-01 4.329411685466766357e-01 6.890888214111328125e-01 1.000000000000000000e+00 -1.276432126760482788e-01 4.266666769981384277e-01 6.861361265182495117e-01 1.000000000000000000e+00 -1.282583624124526978e-01 4.203921556472778320e-01 6.831833720207214355e-01 1.000000000000000000e+00 -1.288735121488571167e-01 4.141176342964172363e-01 6.802306771278381348e-01 1.000000000000000000e+00 -1.294886618852615356e-01 4.078431427478790283e-01 6.772779822349548340e-01 1.000000000000000000e+00 -1.301038116216659546e-01 4.015686213970184326e-01 6.743252873420715332e-01 1.000000000000000000e+00 -1.307189613580703735e-01 3.952941298484802246e-01 6.713725328445434570e-01 1.000000000000000000e+00 -1.313340961933135986e-01 3.890196084976196289e-01 6.684198379516601562e-01 1.000000000000000000e+00 -1.319492459297180176e-01 3.827450871467590332e-01 6.654671430587768555e-01 1.000000000000000000e+00 -1.325643956661224365e-01 3.764705955982208252e-01 6.625143885612487793e-01 1.000000000000000000e+00 -1.331795454025268555e-01 3.701960742473602295e-01 6.595616936683654785e-01 1.000000000000000000e+00 -1.336101442575454712e-01 3.647520244121551514e-01 6.569780707359313965e-01 1.000000000000000000e+00 -1.339792460203170776e-01 3.595847785472869873e-01 6.545174717903137207e-01 1.000000000000000000e+00 -1.343483328819274902e-01 3.544175326824188232e-01 6.520568728446960449e-01 1.000000000000000000e+00 -1.347174197435379028e-01 3.492502868175506592e-01 6.495963335037231445e-01 1.000000000000000000e+00 -1.350865066051483154e-01 3.440830409526824951e-01 6.471357345581054688e-01 1.000000000000000000e+00 -1.354555934667587280e-01 3.389157950878143311e-01 6.446751356124877930e-01 1.000000000000000000e+00 -1.358246803283691406e-01 3.337485492229461670e-01 6.422145366668701172e-01 1.000000000000000000e+00 -1.361937671899795532e-01 3.285813033580780029e-01 6.397539377212524414e-01 1.000000000000000000e+00 -1.365628540515899658e-01 3.234140574932098389e-01 6.372933387756347656e-01 1.000000000000000000e+00 -1.369319558143615723e-01 3.182468414306640625e-01 6.348327398300170898e-01 1.000000000000000000e+00 -1.373010426759719849e-01 3.130795955657958984e-01 6.323721408843994141e-01 1.000000000000000000e+00 -1.376701295375823975e-01 3.079123497009277344e-01 6.299116015434265137e-01 1.000000000000000000e+00 -1.380392163991928101e-01 3.027451038360595703e-01 6.274510025978088379e-01 1.000000000000000000e+00 -1.384083032608032227e-01 2.975778579711914062e-01 6.249904036521911621e-01 1.000000000000000000e+00 -1.387773901224136353e-01 2.924106121063232422e-01 6.225298047065734863e-01 1.000000000000000000e+00 -1.391464769840240479e-01 2.872433662414550781e-01 6.200692057609558105e-01 1.000000000000000000e+00 -1.395155638456344604e-01 2.820761203765869141e-01 6.176086068153381348e-01 1.000000000000000000e+00 -1.398846656084060669e-01 2.769088745117187500e-01 6.151480078697204590e-01 1.000000000000000000e+00 -1.402537524700164795e-01 2.717416286468505859e-01 6.126874089241027832e-01 1.000000000000000000e+00 -1.406228393316268921e-01 2.665743827819824219e-01 6.102268099784851074e-01 1.000000000000000000e+00 -1.409919261932373047e-01 2.614071369171142578e-01 6.077662706375122070e-01 1.000000000000000000e+00 -1.413610130548477173e-01 2.562399208545684814e-01 6.053056716918945312e-01 1.000000000000000000e+00 -1.417300999164581299e-01 2.510726749897003174e-01 6.028450727462768555e-01 1.000000000000000000e+00 -1.420991867780685425e-01 2.459054142236709595e-01 6.003844738006591797e-01 1.000000000000000000e+00 -1.424682885408401489e-01 2.407381832599639893e-01 5.979238748550415039e-01 1.000000000000000000e+00 -1.428373754024505615e-01 2.355709373950958252e-01 5.954632759094238281e-01 1.000000000000000000e+00 -1.432064622640609741e-01 2.304036915302276611e-01 5.930026769638061523e-01 1.000000000000000000e+00 -1.435755491256713867e-01 2.252364456653594971e-01 5.905420780181884766e-01 1.000000000000000000e+00 -1.439446359872817993e-01 2.200691998004913330e-01 5.880814790725708008e-01 1.000000000000000000e+00 -1.443137228488922119e-01 2.149019539356231689e-01 5.856209397315979004e-01 1.000000000000000000e+00 -1.446828097105026245e-01 2.097347229719161987e-01 5.831603407859802246e-01 1.000000000000000000e+00 -1.450518965721130371e-01 2.045674771070480347e-01 5.806997418403625488e-01 1.000000000000000000e+00 -1.419761627912521362e-01 2.014455944299697876e-01 5.739331245422363281e-01 1.000000000000000000e+00 -1.384083032608032227e-01 1.986159235239028931e-01 5.665513277053833008e-01 1.000000000000000000e+00 -1.348404437303543091e-01 1.957862377166748047e-01 5.591695308685302734e-01 1.000000000000000000e+00 -1.312725841999053955e-01 1.929565519094467163e-01 5.517877936363220215e-01 1.000000000000000000e+00 -1.277047246694564819e-01 1.901268810033798218e-01 5.444059967994689941e-01 1.000000000000000000e+00 -1.241368725895881653e-01 1.872971951961517334e-01 5.370241999626159668e-01 1.000000000000000000e+00 -1.205690130591392517e-01 1.844675093889236450e-01 5.296424627304077148e-01 1.000000000000000000e+00 -1.170011535286903381e-01 1.816378384828567505e-01 5.222606658935546875e-01 1.000000000000000000e+00 -1.134332939982414246e-01 1.788081526756286621e-01 5.148788690567016602e-01 1.000000000000000000e+00 -1.098654344677925110e-01 1.759784668684005737e-01 5.074971318244934082e-01 1.000000000000000000e+00 -1.062975749373435974e-01 1.731487959623336792e-01 5.001153349876403809e-01 1.000000000000000000e+00 -1.027297228574752808e-01 1.703191101551055908e-01 4.927335679531097412e-01 1.000000000000000000e+00 -9.916186332702636719e-02 1.674894243478775024e-01 4.853518009185791016e-01 1.000000000000000000e+00 -9.559400379657745361e-02 1.646597534418106079e-01 4.779700040817260742e-01 1.000000000000000000e+00 -9.202614426612854004e-02 1.618300676345825195e-01 4.705882370471954346e-01 1.000000000000000000e+00 -8.845828473567962646e-02 1.590003818273544312e-01 4.632064700126647949e-01 1.000000000000000000e+00 -8.489042520523071289e-02 1.561707109212875366e-01 4.558246731758117676e-01 1.000000000000000000e+00 -8.132256567478179932e-02 1.533410251140594482e-01 4.484429061412811279e-01 1.000000000000000000e+00 -7.775470614433288574e-02 1.505113393068313599e-01 4.410611391067504883e-01 1.000000000000000000e+00 -7.418685406446456909e-02 1.476816534996032715e-01 4.336793422698974609e-01 1.000000000000000000e+00 -7.061899453401565552e-02 1.448519825935363770e-01 4.262975752353668213e-01 1.000000000000000000e+00 -6.705113500356674194e-02 1.420222967863082886e-01 4.189158082008361816e-01 1.000000000000000000e+00 -6.348327547311782837e-02 1.391926109790802002e-01 4.115340113639831543e-01 1.000000000000000000e+00 -5.991541594266891479e-02 1.363629400730133057e-01 4.041522443294525146e-01 1.000000000000000000e+00 -5.634756013751029968e-02 1.335332542657852173e-01 3.967704772949218750e-01 1.000000000000000000e+00 -5.277970060706138611e-02 1.307035684585571289e-01 3.893887102603912354e-01 1.000000000000000000e+00 -4.921184107661247253e-02 1.278738975524902344e-01 3.820069134235382080e-01 1.000000000000000000e+00 -4.564398154616355896e-02 1.250442117452621460e-01 3.746251463890075684e-01 1.000000000000000000e+00 -4.207612574100494385e-02 1.222145333886146545e-01 3.672433793544769287e-01 1.000000000000000000e+00 -3.850826621055603027e-02 1.193848550319671631e-01 3.598615825176239014e-01 1.000000000000000000e+00 -3.494040668010711670e-02 1.165551692247390747e-01 3.524798154830932617e-01 1.000000000000000000e+00 -3.137255087494850159e-02 1.137254908680915833e-01 3.450980484485626221e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/YlOrBr b/fastplotlib/utils/colormaps/YlOrBr deleted file mode 100644 index f23bd5af1..000000000 --- a/fastplotlib/utils/colormaps/YlOrBr +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 1.000000000000000000e+00 8.980392217636108398e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.990157485008239746e-01 8.929949998855590820e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.980314970016479492e-01 8.879507780075073242e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.970473051071166992e-01 8.829065561294555664e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.960630536079406738e-01 8.778623342514038086e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.950788021087646484e-01 8.728181719779968262e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.940945506095886230e-01 8.677739500999450684e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.931103587150573730e-01 8.627297282218933105e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.921261072158813477e-01 8.576855063438415527e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.911418557167053223e-01 8.526412844657897949e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.901576042175292969e-01 8.475970625877380371e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.891734123229980469e-01 8.425528407096862793e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.881891608238220215e-01 8.375086784362792969e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.872049093246459961e-01 8.324644565582275391e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.862206578254699707e-01 8.274202346801757812e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.852364659309387207e-01 8.223760128021240234e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.842522144317626953e-01 8.173317909240722656e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.832679629325866699e-01 8.122875690460205078e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.822837114334106445e-01 8.072433471679687500e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.812995195388793945e-01 8.021991252899169922e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.803152680397033691e-01 7.971549630165100098e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.793310165405273438e-01 7.921107411384582520e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.783467650413513184e-01 7.870665192604064941e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.773625731468200684e-01 7.820222973823547363e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.763783216476440430e-01 7.769780755043029785e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.753940701484680176e-01 7.719338536262512207e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.744098186492919922e-01 7.668896317481994629e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.734256267547607422e-01 7.618454694747924805e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.724413752555847168e-01 7.568012475967407227e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.714571237564086914e-01 7.517570257186889648e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.704728722572326660e-01 7.467128038406372070e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.694886803627014160e-01 7.416685819625854492e-01 1.000000000000000000e+00 -9.999846220016479492e-01 9.683198928833007812e-01 7.365936040878295898e-01 1.000000000000000000e+00 -9.998615980148315430e-01 9.658592939376831055e-01 7.313033342361450195e-01 1.000000000000000000e+00 -9.997385740280151367e-01 9.633986949920654297e-01 7.260130643844604492e-01 1.000000000000000000e+00 -9.996155500411987305e-01 9.609380960464477539e-01 7.207227945327758789e-01 1.000000000000000000e+00 -9.994925260543823242e-01 9.584774971008300781e-01 7.154325246810913086e-01 1.000000000000000000e+00 -9.993695020675659180e-01 9.560168981552124023e-01 7.101422548294067383e-01 1.000000000000000000e+00 -9.992464184761047363e-01 9.535562992095947266e-01 7.048519849777221680e-01 1.000000000000000000e+00 -9.991233944892883301e-01 9.510957598686218262e-01 6.995617151260375977e-01 1.000000000000000000e+00 -9.990003705024719238e-01 9.486351609230041504e-01 6.942714452743530273e-01 1.000000000000000000e+00 -9.988773465156555176e-01 9.461745619773864746e-01 6.889811754226684570e-01 1.000000000000000000e+00 -9.987543225288391113e-01 9.437139630317687988e-01 6.836909055709838867e-01 1.000000000000000000e+00 -9.986312985420227051e-01 9.412533640861511230e-01 6.784006357192993164e-01 1.000000000000000000e+00 -9.985082745552062988e-01 9.387927651405334473e-01 6.731103658676147461e-01 1.000000000000000000e+00 -9.983852505683898926e-01 9.363321661949157715e-01 6.678200960159301758e-01 1.000000000000000000e+00 -9.982622265815734863e-01 9.338715672492980957e-01 6.625297665596008301e-01 1.000000000000000000e+00 -9.981392025947570801e-01 9.314109683036804199e-01 6.572394967079162598e-01 1.000000000000000000e+00 -9.980161190032958984e-01 9.289504289627075195e-01 6.519492268562316895e-01 1.000000000000000000e+00 -9.978930950164794922e-01 9.264898300170898438e-01 6.466589570045471191e-01 1.000000000000000000e+00 -9.977700710296630859e-01 9.240292310714721680e-01 6.413686871528625488e-01 1.000000000000000000e+00 -9.976470470428466797e-01 9.215686321258544922e-01 6.360784173011779785e-01 1.000000000000000000e+00 -9.975240230560302734e-01 9.191080331802368164e-01 6.307881474494934082e-01 1.000000000000000000e+00 -9.974009990692138672e-01 9.166474342346191406e-01 6.254978775978088379e-01 1.000000000000000000e+00 -9.972779750823974609e-01 9.141868352890014648e-01 6.202076077461242676e-01 1.000000000000000000e+00 -9.971549510955810547e-01 9.117262363433837891e-01 6.149173378944396973e-01 1.000000000000000000e+00 -9.970319271087646484e-01 9.092656373977661133e-01 6.096270680427551270e-01 1.000000000000000000e+00 -9.969089031219482422e-01 9.068050980567932129e-01 6.043367981910705566e-01 1.000000000000000000e+00 -9.967858791351318359e-01 9.043444991111755371e-01 5.990465283393859863e-01 1.000000000000000000e+00 -9.966627955436706543e-01 9.018839001655578613e-01 5.937562584877014160e-01 1.000000000000000000e+00 -9.965397715568542480e-01 8.994233012199401855e-01 5.884659886360168457e-01 1.000000000000000000e+00 -9.964167475700378418e-01 8.969627022743225098e-01 5.831757187843322754e-01 1.000000000000000000e+00 -9.962937235832214355e-01 8.945021033287048340e-01 5.778854489326477051e-01 1.000000000000000000e+00 -9.961706995964050293e-01 8.920415043830871582e-01 5.725951790809631348e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.892425894737243652e-01 5.665974617004394531e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.854286670684814453e-01 5.584775209426879883e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.816147446632385254e-01 5.503575801849365234e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.778008222579956055e-01 5.422375798225402832e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.739868998527526855e-01 5.341176390647888184e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.701730370521545410e-01 5.259976983070373535e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.663591146469116211e-01 5.178777575492858887e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.625451922416687012e-01 5.097577571868896484e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.587312698364257812e-01 5.016378164291381836e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.549173474311828613e-01 4.935178756713867188e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.511034250259399414e-01 4.853979349136352539e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.472895026206970215e-01 4.772779643535614014e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.434755802154541016e-01 4.691580235958099365e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.396616578102111816e-01 4.610380530357360840e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.358477354049682617e-01 4.529181122779846191e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.320338129997253418e-01 4.447981417179107666e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.282198905944824219e-01 4.366782009601593018e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.244059681892395020e-01 4.285582602024078369e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.205921053886413574e-01 4.204382896423339844e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.167781829833984375e-01 4.123183488845825195e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.129642605781555176e-01 4.041983783245086670e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.091503381729125977e-01 3.960784375667572021e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.053364157676696777e-01 3.879584670066833496e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.015224933624267578e-01 3.798385262489318848e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.977085709571838379e-01 3.717185556888580322e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.938946485519409180e-01 3.635986149311065674e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.900807261466979980e-01 3.554786741733551025e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.862668037414550781e-01 3.473587036132812500e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.824528813362121582e-01 3.392387628555297852e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.786389589309692383e-01 3.311187922954559326e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.748250961303710938e-01 3.229988515377044678e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.710111737251281738e-01 3.148788809776306152e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.666435837745666504e-01 3.080507516860961914e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.613533139228820801e-01 3.033756315708160400e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.560630440711975098e-01 2.987005114555358887e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.507727742195129395e-01 2.940253615379333496e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.454825043678283691e-01 2.893502414226531982e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.401922345161437988e-01 2.846751213073730469e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.349019646644592285e-01 2.800000011920928955e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.296116948127746582e-01 2.753248810768127441e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.243214249610900879e-01 2.706497609615325928e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.190311551094055176e-01 2.659746110439300537e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.137408852577209473e-01 2.612994909286499023e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.084506154060363770e-01 2.566243708133697510e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.031603455543518066e-01 2.519492506980895996e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.978700757026672363e-01 2.472741305828094482e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.925798058509826660e-01 2.425989955663681030e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.872894763946533203e-01 2.379238754510879517e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.819992065429687500e-01 2.332487553358078003e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.767089366912841797e-01 2.285736203193664551e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.714186668395996094e-01 2.238985002040863037e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.661283969879150391e-01 2.192233800888061523e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.608381271362304688e-01 2.145482450723648071e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.555478572845458984e-01 2.098731249570846558e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.502575874328613281e-01 2.051980048418045044e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.449673175811767578e-01 2.005228698253631592e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.396770477294921875e-01 1.958477497100830078e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.343867778778076172e-01 1.911726295948028564e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.290965080261230469e-01 1.864974945783615112e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.238062381744384766e-01 1.818223744630813599e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.185159683227539062e-01 1.771472543478012085e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.132256984710693359e-01 1.724721193313598633e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.079354286193847656e-01 1.677969992160797119e-01 1.000000000000000000e+00 -9.960784316062927246e-01 6.026451587677001953e-01 1.631218791007995605e-01 1.000000000000000000e+00 -9.949711561203002930e-01 5.974779129028320312e-01 1.594925075769424438e-01 1.000000000000000000e+00 -9.927566051483154297e-01 5.924336910247802734e-01 1.569088846445083618e-01 1.000000000000000000e+00 -9.905421137809753418e-01 5.873894691467285156e-01 1.543252617120742798e-01 1.000000000000000000e+00 -9.883275628089904785e-01 5.823452472686767578e-01 1.517416387796401978e-01 1.000000000000000000e+00 -9.861130118370056152e-01 5.773010253906250000e-01 1.491580158472061157e-01 1.000000000000000000e+00 -9.838985204696655273e-01 5.722568035125732422e-01 1.465743929147720337e-01 1.000000000000000000e+00 -9.816839694976806641e-01 5.672125816345214844e-01 1.439907699823379517e-01 1.000000000000000000e+00 -9.794694185256958008e-01 5.621684193611145020e-01 1.414071470499038696e-01 1.000000000000000000e+00 -9.772549271583557129e-01 5.571241974830627441e-01 1.388235241174697876e-01 1.000000000000000000e+00 -9.750403761863708496e-01 5.520799756050109863e-01 1.362399011850357056e-01 1.000000000000000000e+00 -9.728258252143859863e-01 5.470357537269592285e-01 1.336562931537628174e-01 1.000000000000000000e+00 -9.706112742424011230e-01 5.419915318489074707e-01 1.310726702213287354e-01 1.000000000000000000e+00 -9.683967828750610352e-01 5.369473099708557129e-01 1.284890472888946533e-01 1.000000000000000000e+00 -9.661822319030761719e-01 5.319030880928039551e-01 1.259054243564605713e-01 1.000000000000000000e+00 -9.639676809310913086e-01 5.268589258193969727e-01 1.233218014240264893e-01 1.000000000000000000e+00 -9.617531895637512207e-01 5.218147039413452148e-01 1.207381784915924072e-01 1.000000000000000000e+00 -9.595386385917663574e-01 5.167704820632934570e-01 1.181545555591583252e-01 1.000000000000000000e+00 -9.573240876197814941e-01 5.117262601852416992e-01 1.155709326267242432e-01 1.000000000000000000e+00 -9.551095962524414062e-01 5.066820383071899414e-01 1.129873096942901611e-01 1.000000000000000000e+00 -9.528950452804565430e-01 5.016378164291381836e-01 1.104036942124366760e-01 1.000000000000000000e+00 -9.506804943084716797e-01 4.965936243534088135e-01 1.078200712800025940e-01 1.000000000000000000e+00 -9.484660029411315918e-01 4.915494024753570557e-01 1.052364483475685120e-01 1.000000000000000000e+00 -9.462514519691467285e-01 4.865051805973052979e-01 1.026528254151344299e-01 1.000000000000000000e+00 -9.440369009971618652e-01 4.814609885215759277e-01 1.000692024827003479e-01 1.000000000000000000e+00 -9.418223500251770020e-01 4.764167666435241699e-01 9.748557955026626587e-02 1.000000000000000000e+00 -9.396078586578369141e-01 4.713725447654724121e-01 9.490196406841278076e-02 1.000000000000000000e+00 -9.373933076858520508e-01 4.663283228874206543e-01 9.231834113597869873e-02 1.000000000000000000e+00 -9.351787567138671875e-01 4.612841308116912842e-01 8.973471820354461670e-02 1.000000000000000000e+00 -9.329642653465270996e-01 4.562399089336395264e-01 8.715109527111053467e-02 1.000000000000000000e+00 -9.307497143745422363e-01 4.511956870555877686e-01 8.456747233867645264e-02 1.000000000000000000e+00 -9.285351634025573730e-01 4.461514949798583984e-01 8.198384940624237061e-02 1.000000000000000000e+00 -9.263206720352172852e-01 4.411072731018066406e-01 7.940023392438888550e-02 1.000000000000000000e+00 -9.230296015739440918e-01 4.364475309848785400e-01 7.704728841781616211e-02 1.000000000000000000e+00 -9.190926551818847656e-01 4.320184588432312012e-01 7.483275979757308960e-02 1.000000000000000000e+00 -9.151557087898254395e-01 4.275893867015838623e-01 7.261822372674942017e-02 1.000000000000000000e+00 -9.112187623977661133e-01 4.231603145599365234e-01 7.040368765592575073e-02 1.000000000000000000e+00 -9.072818160057067871e-01 4.187312424182891846e-01 6.818915903568267822e-02 1.000000000000000000e+00 -9.033448696136474609e-01 4.143022000789642334e-01 6.597462296485900879e-02 1.000000000000000000e+00 -8.994079232215881348e-01 4.098731279373168945e-01 6.376009434461593628e-02 1.000000000000000000e+00 -8.954709768295288086e-01 4.054440557956695557e-01 6.154555827379226685e-02 1.000000000000000000e+00 -8.915340304374694824e-01 4.010149836540222168e-01 5.933102592825889587e-02 1.000000000000000000e+00 -8.875970840454101562e-01 3.965859413146972656e-01 5.711649358272552490e-02 1.000000000000000000e+00 -8.836601376533508301e-01 3.921568691730499268e-01 5.490196123719215393e-02 1.000000000000000000e+00 -8.797231912612915039e-01 3.877277970314025879e-01 5.268742889165878296e-02 1.000000000000000000e+00 -8.757862448692321777e-01 3.832987248897552490e-01 5.047289654612541199e-02 1.000000000000000000e+00 -8.718492984771728516e-01 3.788696527481079102e-01 4.825836047530174255e-02 1.000000000000000000e+00 -8.679123520851135254e-01 3.744406104087829590e-01 4.604382812976837158e-02 1.000000000000000000e+00 -8.639754056930541992e-01 3.700115382671356201e-01 4.382929578423500061e-02 1.000000000000000000e+00 -8.600384593009948730e-01 3.655824661254882812e-01 4.161476343870162964e-02 1.000000000000000000e+00 -8.561015129089355469e-01 3.611533939838409424e-01 3.940023109316825867e-02 1.000000000000000000e+00 -8.521645665168762207e-01 3.567243516445159912e-01 3.718569874763488770e-02 1.000000000000000000e+00 -8.482276201248168945e-01 3.522952795028686523e-01 3.497116640210151672e-02 1.000000000000000000e+00 -8.442906737327575684e-01 3.478662073612213135e-01 3.275663033127784729e-02 1.000000000000000000e+00 -8.403537273406982422e-01 3.434371352195739746e-01 3.054209984838962555e-02 1.000000000000000000e+00 -8.364167809486389160e-01 3.390080630779266357e-01 2.832756564021110535e-02 1.000000000000000000e+00 -8.324798345565795898e-01 3.345790207386016846e-01 2.611303329467773438e-02 1.000000000000000000e+00 -8.285428881645202637e-01 3.301499485969543457e-01 2.389850094914436340e-02 1.000000000000000000e+00 -8.246059417724609375e-01 3.257208764553070068e-01 2.168396860361099243e-02 1.000000000000000000e+00 -8.206689953804016113e-01 3.212918043136596680e-01 1.946943439543247223e-02 1.000000000000000000e+00 -8.167320489883422852e-01 3.168627321720123291e-01 1.725490204989910126e-02 1.000000000000000000e+00 -8.127951025962829590e-01 3.124336898326873779e-01 1.504036877304315567e-02 1.000000000000000000e+00 -8.088581562042236328e-01 3.080046176910400391e-01 1.282583642750978470e-02 1.000000000000000000e+00 -8.049212098121643066e-01 3.035755455493927002e-01 1.061130315065383911e-02 1.000000000000000000e+00 -8.009842634201049805e-01 2.991464734077453613e-01 8.396770805120468140e-03 1.000000000000000000e+00 -7.952941060066223145e-01 2.958246767520904541e-01 8.027682080864906311e-03 1.000000000000000000e+00 -7.890195846557617188e-01 2.928719818592071533e-01 8.273741230368614197e-03 1.000000000000000000e+00 -7.827451229095458984e-01 2.899192571640014648e-01 8.519800379872322083e-03 1.000000000000000000e+00 -7.764706015586853027e-01 2.869665622711181641e-01 8.765859529376029968e-03 1.000000000000000000e+00 -7.701960802078247070e-01 2.840138375759124756e-01 9.011918678879737854e-03 1.000000000000000000e+00 -7.639215588569641113e-01 2.810611426830291748e-01 9.257977828383445740e-03 1.000000000000000000e+00 -7.576470375061035156e-01 2.781084179878234863e-01 9.504036977887153625e-03 1.000000000000000000e+00 -7.513725757598876953e-01 2.751557230949401855e-01 9.750096127390861511e-03 1.000000000000000000e+00 -7.450980544090270996e-01 2.722029983997344971e-01 9.996155276894569397e-03 1.000000000000000000e+00 -7.388235330581665039e-01 2.692502737045288086e-01 1.024221442639827728e-02 1.000000000000000000e+00 -7.325490117073059082e-01 2.662975788116455078e-01 1.048827357590198517e-02 1.000000000000000000e+00 -7.262744903564453125e-01 2.633448541164398193e-01 1.073433272540569305e-02 1.000000000000000000e+00 -7.200000286102294922e-01 2.603921592235565186e-01 1.098039187490940094e-02 1.000000000000000000e+00 -7.137255072593688965e-01 2.574394345283508301e-01 1.122645102441310883e-02 1.000000000000000000e+00 -7.074509859085083008e-01 2.544867396354675293e-01 1.147251017391681671e-02 1.000000000000000000e+00 -7.011764645576477051e-01 2.515340149402618408e-01 1.171856932342052460e-02 1.000000000000000000e+00 -6.949019432067871094e-01 2.485813200473785400e-01 1.196462940424680710e-02 1.000000000000000000e+00 -6.886274218559265137e-01 2.456286102533340454e-01 1.221068855375051498e-02 1.000000000000000000e+00 -6.823529601097106934e-01 2.426759004592895508e-01 1.245674770325422287e-02 1.000000000000000000e+00 -6.760784387588500977e-01 2.397231906652450562e-01 1.270280685275793076e-02 1.000000000000000000e+00 -6.698039174079895020e-01 2.367704659700393677e-01 1.294886600226163864e-02 1.000000000000000000e+00 -6.635293960571289062e-01 2.338177561759948730e-01 1.319492515176534653e-02 1.000000000000000000e+00 -6.572548747062683105e-01 2.308650463819503784e-01 1.344098430126905441e-02 1.000000000000000000e+00 -6.509804129600524902e-01 2.279123365879058838e-01 1.368704345077276230e-02 1.000000000000000000e+00 -6.447058916091918945e-01 2.249596267938613892e-01 1.393310260027647018e-02 1.000000000000000000e+00 -6.384313702583312988e-01 2.220069169998168945e-01 1.417916174978017807e-02 1.000000000000000000e+00 -6.321568489074707031e-01 2.190542072057723999e-01 1.442522089928388596e-02 1.000000000000000000e+00 -6.258823275566101074e-01 2.161014974117279053e-01 1.467128004878759384e-02 1.000000000000000000e+00 -6.196078658103942871e-01 2.131487876176834106e-01 1.491733919829130173e-02 1.000000000000000000e+00 -6.133333444595336914e-01 2.101960778236389160e-01 1.516339834779500961e-02 1.000000000000000000e+00 -6.070588231086730957e-01 2.072433680295944214e-01 1.540945749729871750e-02 1.000000000000000000e+00 -6.007843017578125000e-01 2.042906582355499268e-01 1.565551757812500000e-02 1.000000000000000000e+00 -5.945097804069519043e-01 2.023068070411682129e-01 1.590157672762870789e-02 1.000000000000000000e+00 -5.882353186607360840e-01 2.004613578319549561e-01 1.614763587713241577e-02 1.000000000000000000e+00 -5.819607973098754883e-01 1.986159235239028931e-01 1.639369502663612366e-02 1.000000000000000000e+00 -5.756862759590148926e-01 1.967704743146896362e-01 1.663975417613983154e-02 1.000000000000000000e+00 -5.694117546081542969e-01 1.949250251054763794e-01 1.688581332564353943e-02 1.000000000000000000e+00 -5.631372332572937012e-01 1.930795907974243164e-01 1.713187247514724731e-02 1.000000000000000000e+00 -5.568627715110778809e-01 1.912341415882110596e-01 1.737793162465095520e-02 1.000000000000000000e+00 -5.505882501602172852e-01 1.893886923789978027e-01 1.762399077415466309e-02 1.000000000000000000e+00 -5.443137288093566895e-01 1.875432580709457397e-01 1.787004992365837097e-02 1.000000000000000000e+00 -5.380392074584960938e-01 1.856978088617324829e-01 1.811610907316207886e-02 1.000000000000000000e+00 -5.317646861076354980e-01 1.838523596525192261e-01 1.836216822266578674e-02 1.000000000000000000e+00 -5.254902243614196777e-01 1.820069253444671631e-01 1.860822737216949463e-02 1.000000000000000000e+00 -5.192157030105590820e-01 1.801614761352539062e-01 1.885428652167320251e-02 1.000000000000000000e+00 -5.129411816596984863e-01 1.783160269260406494e-01 1.910034567117691040e-02 1.000000000000000000e+00 -5.066666603088378906e-01 1.764705926179885864e-01 1.934640482068061829e-02 1.000000000000000000e+00 -5.003921389579772949e-01 1.746251434087753296e-01 1.959246397018432617e-02 1.000000000000000000e+00 -4.941176474094390869e-01 1.727796941995620728e-01 1.983852311968803406e-02 1.000000000000000000e+00 -4.878431260585784912e-01 1.709342598915100098e-01 2.008458226919174194e-02 1.000000000000000000e+00 -4.815686345100402832e-01 1.690888106822967529e-01 2.033064141869544983e-02 1.000000000000000000e+00 -4.752941131591796875e-01 1.672433614730834961e-01 2.057670056819915771e-02 1.000000000000000000e+00 -4.690196216106414795e-01 1.653979271650314331e-01 2.082275971770286560e-02 1.000000000000000000e+00 -4.627451002597808838e-01 1.635524779558181763e-01 2.106881886720657349e-02 1.000000000000000000e+00 -4.564705789089202881e-01 1.617070287466049194e-01 2.131487801671028137e-02 1.000000000000000000e+00 -4.501960873603820801e-01 1.598615944385528564e-01 2.156093902885913849e-02 1.000000000000000000e+00 -4.439215660095214844e-01 1.580161452293395996e-01 2.180699817836284637e-02 1.000000000000000000e+00 -4.376470446586608887e-01 1.561707109212875366e-01 2.205305732786655426e-02 1.000000000000000000e+00 -4.313725531101226807e-01 1.543252617120742798e-01 2.229911647737026215e-02 1.000000000000000000e+00 -4.250980317592620850e-01 1.524798125028610229e-01 2.254517562687397003e-02 1.000000000000000000e+00 -4.188235402107238770e-01 1.506343781948089600e-01 2.279123477637767792e-02 1.000000000000000000e+00 -4.125490188598632812e-01 1.487889289855957031e-01 2.303729392588138580e-02 1.000000000000000000e+00 -4.062744975090026855e-01 1.469434797763824463e-01 2.328335307538509369e-02 1.000000000000000000e+00 -4.000000059604644775e-01 1.450980454683303833e-01 2.352941222488880157e-02 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/YlOrRd b/fastplotlib/utils/colormaps/YlOrRd deleted file mode 100644 index 84c507f5c..000000000 --- a/fastplotlib/utils/colormaps/YlOrRd +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 1.000000000000000000e+00 8.000000119209289551e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.977854490280151367e-01 7.945867180824279785e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.955709576606750488e-01 7.891734242439270020e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.933564066886901855e-01 7.837600708007812500e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.911418557167053223e-01 7.783467769622802734e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.889273643493652344e-01 7.729334831237792969e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.867128133773803711e-01 7.675201892852783203e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.844982624053955078e-01 7.621068954467773438e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.822837114334106445e-01 7.566936016082763672e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.800692200660705566e-01 7.512802481651306152e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.778546690940856934e-01 7.458669543266296387e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.756401181221008301e-01 7.404536604881286621e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.734256267547607422e-01 7.350403666496276855e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.712110757827758789e-01 7.296270728111267090e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.689965248107910156e-01 7.242137789726257324e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.667820334434509277e-01 7.188004851341247559e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.645674824714660645e-01 7.133871316909790039e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.623529314994812012e-01 7.079738378524780273e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.601383805274963379e-01 7.025605440139770508e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.579238891601562500e-01 6.971472501754760742e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.557093381881713867e-01 6.917339563369750977e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.534947872161865234e-01 6.863206624984741211e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.512802958488464355e-01 6.809073686599731445e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.490657448768615723e-01 6.754940152168273926e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.468511939048767090e-01 6.700807213783264160e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.446367025375366211e-01 6.646674275398254395e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.424221515655517578e-01 6.592541337013244629e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.402076005935668945e-01 6.538408398628234863e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.379931092262268066e-01 6.484275460243225098e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.357785582542419434e-01 6.430142521858215332e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.335640072822570801e-01 6.376008987426757812e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.313494563102722168e-01 6.321876049041748047e-01 1.000000000000000000e+00 -9.999846220016479492e-01 9.291042089462280273e-01 6.268050670623779297e-01 1.000000000000000000e+00 -9.998615980148315430e-01 9.266436100006103516e-01 6.216378211975097656e-01 1.000000000000000000e+00 -9.997385740280151367e-01 9.241830110549926758e-01 6.164705753326416016e-01 1.000000000000000000e+00 -9.996155500411987305e-01 9.217224121093750000e-01 6.113033294677734375e-01 1.000000000000000000e+00 -9.994925260543823242e-01 9.192618131637573242e-01 6.061360836029052734e-01 1.000000000000000000e+00 -9.993695020675659180e-01 9.168012142181396484e-01 6.009688377380371094e-01 1.000000000000000000e+00 -9.992464184761047363e-01 9.143406152725219727e-01 5.958015918731689453e-01 1.000000000000000000e+00 -9.991233944892883301e-01 9.118800759315490723e-01 5.906343460083007812e-01 1.000000000000000000e+00 -9.990003705024719238e-01 9.094194769859313965e-01 5.854671001434326172e-01 1.000000000000000000e+00 -9.988773465156555176e-01 9.069588780403137207e-01 5.802999138832092285e-01 1.000000000000000000e+00 -9.987543225288391113e-01 9.044982790946960449e-01 5.751326680183410645e-01 1.000000000000000000e+00 -9.986312985420227051e-01 9.020376801490783691e-01 5.699654221534729004e-01 1.000000000000000000e+00 -9.985082745552062988e-01 8.995770812034606934e-01 5.647981762886047363e-01 1.000000000000000000e+00 -9.983852505683898926e-01 8.971164822578430176e-01 5.596309304237365723e-01 1.000000000000000000e+00 -9.982622265815734863e-01 8.946558833122253418e-01 5.544636845588684082e-01 1.000000000000000000e+00 -9.981392025947570801e-01 8.921952843666076660e-01 5.492964386940002441e-01 1.000000000000000000e+00 -9.980161190032958984e-01 8.897347450256347656e-01 5.441291928291320801e-01 1.000000000000000000e+00 -9.978930950164794922e-01 8.872741460800170898e-01 5.389619469642639160e-01 1.000000000000000000e+00 -9.977700710296630859e-01 8.848135471343994141e-01 5.337947010993957520e-01 1.000000000000000000e+00 -9.976470470428466797e-01 8.823529481887817383e-01 5.286274552345275879e-01 1.000000000000000000e+00 -9.975240230560302734e-01 8.798923492431640625e-01 5.234602093696594238e-01 1.000000000000000000e+00 -9.974009990692138672e-01 8.774317502975463867e-01 5.182929635047912598e-01 1.000000000000000000e+00 -9.972779750823974609e-01 8.749711513519287109e-01 5.131257176399230957e-01 1.000000000000000000e+00 -9.971549510955810547e-01 8.725105524063110352e-01 5.079584717750549316e-01 1.000000000000000000e+00 -9.970319271087646484e-01 8.700499534606933594e-01 5.027912259101867676e-01 1.000000000000000000e+00 -9.969089031219482422e-01 8.675894141197204590e-01 4.976239800453186035e-01 1.000000000000000000e+00 -9.967858791351318359e-01 8.651288151741027832e-01 4.924567341804504395e-01 1.000000000000000000e+00 -9.966627955436706543e-01 8.626682162284851074e-01 4.872895181179046631e-01 1.000000000000000000e+00 -9.965397715568542480e-01 8.602076172828674316e-01 4.821222722530364990e-01 1.000000000000000000e+00 -9.964167475700378418e-01 8.577470183372497559e-01 4.769550263881683350e-01 1.000000000000000000e+00 -9.962937235832214355e-01 8.552864193916320801e-01 4.717877805233001709e-01 1.000000000000000000e+00 -9.961706995964050293e-01 8.528258204460144043e-01 4.666205346584320068e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.497808575630187988e-01 4.614532887935638428e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.449826836585998535e-01 4.562860429286956787e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.401845693588256836e-01 4.511187970638275146e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.353863954544067383e-01 4.459515511989593506e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.305882215499877930e-01 4.407843053340911865e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.257901072502136230e-01 4.356170594692230225e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.209919333457946777e-01 4.304498136043548584e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.161937594413757324e-01 4.252825975418090820e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.113956451416015625e-01 4.201153516769409180e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.065974712371826172e-01 4.149481058120727539e-01 1.000000000000000000e+00 -9.960784316062927246e-01 8.017992973327636719e-01 4.097808599472045898e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.970011830329895020e-01 4.046136140823364258e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.922030091285705566e-01 3.994463682174682617e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.874048352241516113e-01 3.942791223526000977e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.826066613197326660e-01 3.891118764877319336e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.778085470199584961e-01 3.839446306228637695e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.730103731155395508e-01 3.787773847579956055e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.682121992111206055e-01 3.736101388931274414e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.634140849113464355e-01 3.684428930282592773e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.586159110069274902e-01 3.632756769657135010e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.538177371025085449e-01 3.581084311008453369e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.490196228027343750e-01 3.529411852359771729e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.442214488983154297e-01 3.477739393711090088e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.394232749938964844e-01 3.426066935062408447e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.346251606941223145e-01 3.374394476413726807e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.298269867897033691e-01 3.322722017765045166e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.250288128852844238e-01 3.271049559116363525e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.202306985855102539e-01 3.219377100467681885e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.154325246810913086e-01 3.167704641819000244e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.106343507766723633e-01 3.116032183170318604e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.058362364768981934e-01 3.064359724521636963e-01 1.000000000000000000e+00 -9.960784316062927246e-01 7.010380625724792480e-01 3.012687563896179199e-01 1.000000000000000000e+00 -9.960322976112365723e-01 6.963321566581726074e-01 2.973010241985321045e-01 1.000000000000000000e+00 -9.959092736244201660e-01 6.917800903320312500e-01 2.953325510025024414e-01 1.000000000000000000e+00 -9.957862496376037598e-01 6.872279644012451172e-01 2.933640778064727783e-01 1.000000000000000000e+00 -9.956632256507873535e-01 6.826758980751037598e-01 2.913956046104431152e-01 1.000000000000000000e+00 -9.955402016639709473e-01 6.781237721443176270e-01 2.894271314144134521e-01 1.000000000000000000e+00 -9.954171180725097656e-01 6.735717058181762695e-01 2.874586582183837891e-01 1.000000000000000000e+00 -9.952940940856933594e-01 6.690195798873901367e-01 2.854901850223541260e-01 1.000000000000000000e+00 -9.951710700988769531e-01 6.644675135612487793e-01 2.835217118263244629e-01 1.000000000000000000e+00 -9.950480461120605469e-01 6.599153876304626465e-01 2.815532386302947998e-01 1.000000000000000000e+00 -9.949250221252441406e-01 6.553633213043212891e-01 2.795847654342651367e-01 1.000000000000000000e+00 -9.948019981384277344e-01 6.508112549781799316e-01 2.776162922382354736e-01 1.000000000000000000e+00 -9.946789741516113281e-01 6.462591290473937988e-01 2.756478190422058105e-01 1.000000000000000000e+00 -9.945559501647949219e-01 6.417070627212524414e-01 2.736793458461761475e-01 1.000000000000000000e+00 -9.944329261779785156e-01 6.371549367904663086e-01 2.717108726501464844e-01 1.000000000000000000e+00 -9.943099021911621094e-01 6.326028704643249512e-01 2.697423994541168213e-01 1.000000000000000000e+00 -9.941868782043457031e-01 6.280507445335388184e-01 2.677739262580871582e-01 1.000000000000000000e+00 -9.940637946128845215e-01 6.234986782073974609e-01 2.658054530620574951e-01 1.000000000000000000e+00 -9.939407706260681152e-01 6.189465522766113281e-01 2.638369798660278320e-01 1.000000000000000000e+00 -9.938177466392517090e-01 6.143944859504699707e-01 2.618685066699981689e-01 1.000000000000000000e+00 -9.936947226524353027e-01 6.098423600196838379e-01 2.599000334739685059e-01 1.000000000000000000e+00 -9.935716986656188965e-01 6.052902936935424805e-01 2.579315602779388428e-01 1.000000000000000000e+00 -9.934486746788024902e-01 6.007381677627563477e-01 2.559630870819091797e-01 1.000000000000000000e+00 -9.933256506919860840e-01 5.961861014366149902e-01 2.539946138858795166e-01 1.000000000000000000e+00 -9.932026267051696777e-01 5.916339755058288574e-01 2.520261406898498535e-01 1.000000000000000000e+00 -9.930796027183532715e-01 5.870819091796875000e-01 2.500576674938201904e-01 1.000000000000000000e+00 -9.929565787315368652e-01 5.825297832489013672e-01 2.480891942977905273e-01 1.000000000000000000e+00 -9.928335547447204590e-01 5.779777169227600098e-01 2.461207211017608643e-01 1.000000000000000000e+00 -9.927104711532592773e-01 5.734255909919738770e-01 2.441522479057312012e-01 1.000000000000000000e+00 -9.925874471664428711e-01 5.688735246658325195e-01 2.421837747097015381e-01 1.000000000000000000e+00 -9.924644231796264648e-01 5.643213987350463867e-01 2.402153015136718750e-01 1.000000000000000000e+00 -9.923413991928100586e-01 5.597693324089050293e-01 2.382468283176422119e-01 1.000000000000000000e+00 -9.922183752059936523e-01 5.552172064781188965e-01 2.362783551216125488e-01 1.000000000000000000e+00 -9.920953512191772461e-01 5.490657687187194824e-01 2.341868579387664795e-01 1.000000000000000000e+00 -9.919723272323608398e-01 5.413148999214172363e-01 2.319723218679428101e-01 1.000000000000000000e+00 -9.918493032455444336e-01 5.335640311241149902e-01 2.297577857971191406e-01 1.000000000000000000e+00 -9.917262792587280273e-01 5.258131623268127441e-01 2.275432497262954712e-01 1.000000000000000000e+00 -9.916032552719116211e-01 5.180622935295104980e-01 2.253287136554718018e-01 1.000000000000000000e+00 -9.914801716804504395e-01 5.103114247322082520e-01 2.231141924858093262e-01 1.000000000000000000e+00 -9.913571476936340332e-01 5.025605559349060059e-01 2.208996564149856567e-01 1.000000000000000000e+00 -9.912341237068176270e-01 4.948096871376037598e-01 2.186851203441619873e-01 1.000000000000000000e+00 -9.911110997200012207e-01 4.870588183403015137e-01 2.164705842733383179e-01 1.000000000000000000e+00 -9.909880757331848145e-01 4.793079495429992676e-01 2.142560482025146484e-01 1.000000000000000000e+00 -9.908650517463684082e-01 4.715570807456970215e-01 2.120415270328521729e-01 1.000000000000000000e+00 -9.907420277595520020e-01 4.638062417507171631e-01 2.098269909620285034e-01 1.000000000000000000e+00 -9.906190037727355957e-01 4.560553729534149170e-01 2.076124548912048340e-01 1.000000000000000000e+00 -9.904959797859191895e-01 4.483045041561126709e-01 2.053979188203811646e-01 1.000000000000000000e+00 -9.903729557991027832e-01 4.405536353588104248e-01 2.031833976507186890e-01 1.000000000000000000e+00 -9.902499318122863770e-01 4.328027665615081787e-01 2.009688615798950195e-01 1.000000000000000000e+00 -9.901268482208251953e-01 4.250518977642059326e-01 1.987543255090713501e-01 1.000000000000000000e+00 -9.900038242340087891e-01 4.173010289669036865e-01 1.965397894382476807e-01 1.000000000000000000e+00 -9.898808002471923828e-01 4.095501601696014404e-01 1.943252533674240112e-01 1.000000000000000000e+00 -9.897577762603759766e-01 4.017993211746215820e-01 1.921107321977615356e-01 1.000000000000000000e+00 -9.896347522735595703e-01 3.940484523773193359e-01 1.898961961269378662e-01 1.000000000000000000e+00 -9.895117282867431641e-01 3.862975835800170898e-01 1.876816600561141968e-01 1.000000000000000000e+00 -9.893887042999267578e-01 3.785467147827148438e-01 1.854671239852905273e-01 1.000000000000000000e+00 -9.892656803131103516e-01 3.707958459854125977e-01 1.832525879144668579e-01 1.000000000000000000e+00 -9.891426563262939453e-01 3.630449771881103516e-01 1.810380667448043823e-01 1.000000000000000000e+00 -9.890196323394775391e-01 3.552941083908081055e-01 1.788235306739807129e-01 1.000000000000000000e+00 -9.888965487480163574e-01 3.475432395935058594e-01 1.766089946031570435e-01 1.000000000000000000e+00 -9.887735247611999512e-01 3.397924005985260010e-01 1.743944585323333740e-01 1.000000000000000000e+00 -9.886505007743835449e-01 3.320415318012237549e-01 1.721799373626708984e-01 1.000000000000000000e+00 -9.885274767875671387e-01 3.242906630039215088e-01 1.699654012918472290e-01 1.000000000000000000e+00 -9.884044528007507324e-01 3.165397942066192627e-01 1.677508652210235596e-01 1.000000000000000000e+00 -9.882814288139343262e-01 3.087889254093170166e-01 1.655363291501998901e-01 1.000000000000000000e+00 -9.863129854202270508e-01 3.018838763236999512e-01 1.636293679475784302e-01 1.000000000000000000e+00 -9.832372069358825684e-01 2.954863607883453369e-01 1.619069576263427734e-01 1.000000000000000000e+00 -9.801614880561828613e-01 2.890888154506683350e-01 1.601845473051071167e-01 1.000000000000000000e+00 -9.770857095718383789e-01 2.826912701129913330e-01 1.584621369838714600e-01 1.000000000000000000e+00 -9.740099906921386719e-01 2.762937247753143311e-01 1.567397117614746094e-01 1.000000000000000000e+00 -9.709342718124389648e-01 2.698961794376373291e-01 1.550173014402389526e-01 1.000000000000000000e+00 -9.678584933280944824e-01 2.634986639022827148e-01 1.532948911190032959e-01 1.000000000000000000e+00 -9.647827744483947754e-01 2.571011185646057129e-01 1.515724658966064453e-01 1.000000000000000000e+00 -9.617070555686950684e-01 2.507035732269287109e-01 1.498500555753707886e-01 1.000000000000000000e+00 -9.586312770843505859e-01 2.443060427904129028e-01 1.481276452541351318e-01 1.000000000000000000e+00 -9.555555582046508789e-01 2.379084974527359009e-01 1.464052349328994751e-01 1.000000000000000000e+00 -9.524798393249511719e-01 2.315109521150588989e-01 1.446828097105026245e-01 1.000000000000000000e+00 -9.494040608406066895e-01 2.251134216785430908e-01 1.429603993892669678e-01 1.000000000000000000e+00 -9.463283419609069824e-01 2.187158763408660889e-01 1.412379890680313110e-01 1.000000000000000000e+00 -9.432526230812072754e-01 2.123183459043502808e-01 1.395155638456344604e-01 1.000000000000000000e+00 -9.401768445968627930e-01 2.059208005666732788e-01 1.377931535243988037e-01 1.000000000000000000e+00 -9.371011257171630859e-01 1.995232552289962769e-01 1.360707432031631470e-01 1.000000000000000000e+00 -9.340253472328186035e-01 1.931257247924804688e-01 1.343483328819274902e-01 1.000000000000000000e+00 -9.309496283531188965e-01 1.867281794548034668e-01 1.326259076595306396e-01 1.000000000000000000e+00 -9.278739094734191895e-01 1.803306490182876587e-01 1.309034973382949829e-01 1.000000000000000000e+00 -9.247981309890747070e-01 1.739331036806106567e-01 1.291810870170593262e-01 1.000000000000000000e+00 -9.217224121093750000e-01 1.675355583429336548e-01 1.274586766958236694e-01 1.000000000000000000e+00 -9.186466932296752930e-01 1.611380279064178467e-01 1.257362514734268188e-01 1.000000000000000000e+00 -9.155709147453308105e-01 1.547404825687408447e-01 1.240138411521911621e-01 1.000000000000000000e+00 -9.124951958656311035e-01 1.483429521322250366e-01 1.222914233803749084e-01 1.000000000000000000e+00 -9.094194769859313965e-01 1.419454067945480347e-01 1.205690130591392517e-01 1.000000000000000000e+00 -9.063436985015869141e-01 1.355478614568710327e-01 1.188465952873229980e-01 1.000000000000000000e+00 -9.032679796218872070e-01 1.291503310203552246e-01 1.171241849660873413e-01 1.000000000000000000e+00 -9.001922607421875000e-01 1.227527856826782227e-01 1.154017671942710876e-01 1.000000000000000000e+00 -8.971164822578430176e-01 1.163552477955818176e-01 1.136793568730354309e-01 1.000000000000000000e+00 -8.940407633781433105e-01 1.099577099084854126e-01 1.119569391012191772e-01 1.000000000000000000e+00 -8.909649848937988281e-01 1.035601720213890076e-01 1.102345287799835205e-01 1.000000000000000000e+00 -8.866897225379943848e-01 9.956170618534088135e-02 1.107266470789909363e-01 1.000000000000000000e+00 -8.820146322250366211e-01 9.636294096708297729e-02 1.119569391012191772e-01 1.000000000000000000e+00 -8.773394823074340820e-01 9.316416829824447632e-02 1.131872385740280151e-01 1.000000000000000000e+00 -8.726643323898315430e-01 8.996539562940597534e-02 1.144175305962562561e-01 1.000000000000000000e+00 -8.679892420768737793e-01 8.676663041114807129e-02 1.156478300690650940e-01 1.000000000000000000e+00 -8.633140921592712402e-01 8.356785774230957031e-02 1.168781220912933350e-01 1.000000000000000000e+00 -8.586390018463134766e-01 8.036909252405166626e-02 1.181084215641021729e-01 1.000000000000000000e+00 -8.539638519287109375e-01 7.717031985521316528e-02 1.193387135863304138e-01 1.000000000000000000e+00 -8.492887616157531738e-01 7.397154718637466431e-02 1.205690130591392517e-01 1.000000000000000000e+00 -8.446136116981506348e-01 7.077278196811676025e-02 1.217993050813674927e-01 1.000000000000000000e+00 -8.399384617805480957e-01 6.757400929927825928e-02 1.230296045541763306e-01 1.000000000000000000e+00 -8.352633714675903320e-01 6.437523663043975830e-02 1.242598965764045715e-01 1.000000000000000000e+00 -8.305882215499877930e-01 6.117647141218185425e-02 1.254902034997940063e-01 1.000000000000000000e+00 -8.259131312370300293e-01 5.797770246863365173e-02 1.267204880714416504e-01 1.000000000000000000e+00 -8.212379813194274902e-01 5.477892979979515076e-02 1.279507875442504883e-01 1.000000000000000000e+00 -8.165628314018249512e-01 5.158016085624694824e-02 1.291810870170593262e-01 1.000000000000000000e+00 -8.118877410888671875e-01 4.838139191269874573e-02 1.304113864898681641e-01 1.000000000000000000e+00 -8.072125911712646484e-01 4.518262296915054321e-02 1.316416710615158081e-01 1.000000000000000000e+00 -8.025375008583068848e-01 4.198385402560234070e-02 1.328719705343246460e-01 1.000000000000000000e+00 -7.978623509407043457e-01 3.878508135676383972e-02 1.341022700071334839e-01 1.000000000000000000e+00 -7.931872606277465820e-01 3.558631241321563721e-02 1.353325694799423218e-01 1.000000000000000000e+00 -7.885121107101440430e-01 3.238754346966743469e-02 1.365628540515899658e-01 1.000000000000000000e+00 -7.838369607925415039e-01 2.918877266347408295e-02 1.377931535243988037e-01 1.000000000000000000e+00 -7.791618704795837402e-01 2.599000371992588043e-02 1.390234529972076416e-01 1.000000000000000000e+00 -7.744867205619812012e-01 2.279123477637767792e-02 1.402537524700164795e-01 1.000000000000000000e+00 -7.698116302490234375e-01 1.959246397018432617e-02 1.414840519428253174e-01 1.000000000000000000e+00 -7.651364803314208984e-01 1.639369502663612366e-02 1.427143365144729614e-01 1.000000000000000000e+00 -7.604613900184631348e-01 1.319492515176534653e-02 1.439446359872817993e-01 1.000000000000000000e+00 -7.557862401008605957e-01 9.996155276894569397e-03 1.451749354600906372e-01 1.000000000000000000e+00 -7.511110901832580566e-01 6.797385402023792267e-03 1.464052349328994751e-01 1.000000000000000000e+00 -7.464359998703002930e-01 3.598615992814302444e-03 1.476355195045471191e-01 1.000000000000000000e+00 -7.417608499526977539e-01 3.998462052550166845e-04 1.488658189773559570e-01 1.000000000000000000e+00 -7.346097826957702637e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -7.271049618721008301e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -7.196001410484313965e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -7.120953202247619629e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -7.045905590057373047e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.970857381820678711e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.895809173583984375e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.820760965347290039e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.745713353157043457e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.670665144920349121e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.595616936683654785e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.520568728446960449e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.445521116256713867e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.370472908020019531e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.295424699783325195e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.220376491546630859e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.145328879356384277e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -6.070280671119689941e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.995232462882995605e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.920184254646301270e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.845136642456054688e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.770088434219360352e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.695040225982666016e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.619992017745971680e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.544944405555725098e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.469896197319030762e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.394847989082336426e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.319799780845642090e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.244752168655395508e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.169703960418701172e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.094655752182006836e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 -5.019608139991760254e-01 0.000000000000000000e+00 1.490196138620376587e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/__init__.py b/fastplotlib/utils/colormaps/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/fastplotlib/utils/colormaps/afmhot b/fastplotlib/utils/colormaps/afmhot deleted file mode 100644 index 41158d67c..000000000 --- a/fastplotlib/utils/colormaps/afmhot +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.843137718737125397e-03 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.568627543747425079e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.352941222488880157e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.137255087494850159e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.921568766236305237e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.705882444977760315e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.490196123719215393e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.274510174989700317e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.058823853731155396e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.843137532472610474e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.627451211214065552e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.411764889955520630e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.019607856869697571e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.098039224743843079e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.176470592617988586e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.254902034997940063e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.333333402872085571e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.411764770746231079e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.490196138620376587e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.568627506494522095e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.647058874368667603e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.725490242242813110e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.803921610116958618e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.882352977991104126e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.960784345865249634e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.039215713739395142e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.117647081613540649e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.196078449487686157e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.274509817361831665e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.352941185235977173e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.431372553110122681e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.509804069995880127e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.588235437870025635e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.666666805744171143e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.745098173618316650e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.823529541492462158e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.901960909366607666e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.980392277240753174e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.058823645114898682e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.137255012989044189e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.215686380863189697e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.294117748737335205e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.372549116611480713e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.450980484485626221e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.529411852359771729e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.607843220233917236e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.686274588108062744e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.764705955982208252e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.843137323856353760e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.921568691730499268e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.000000059604644775e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.078431427478790283e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.156862795352935791e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.235294163227081299e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.313725531101226807e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.392156898975372314e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.470588266849517822e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.549019634723663330e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.627451002597808838e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.705882370471954346e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.784313738346099854e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.862745106220245361e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.941176474094390869e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.019608139991760254e-01 1.960784429684281349e-03 0.000000000000000000e+00 1.000000000000000000e+00 -5.098039507865905762e-01 9.803921915590763092e-03 0.000000000000000000e+00 1.000000000000000000e+00 -5.176470875740051270e-01 1.764705963432788849e-02 0.000000000000000000e+00 1.000000000000000000e+00 -5.254902243614196777e-01 2.549019642174243927e-02 0.000000000000000000e+00 1.000000000000000000e+00 -5.333333611488342285e-01 3.333333507180213928e-02 0.000000000000000000e+00 1.000000000000000000e+00 -5.411764979362487793e-01 4.117647185921669006e-02 0.000000000000000000e+00 1.000000000000000000e+00 -5.490196347236633301e-01 4.901960864663124084e-02 0.000000000000000000e+00 1.000000000000000000e+00 -5.568627715110778809e-01 5.686274543404579163e-02 0.000000000000000000e+00 1.000000000000000000e+00 -5.647059082984924316e-01 6.470588594675064087e-02 0.000000000000000000e+00 1.000000000000000000e+00 -5.725490450859069824e-01 7.254902273416519165e-02 0.000000000000000000e+00 1.000000000000000000e+00 -5.803921818733215332e-01 8.039215952157974243e-02 0.000000000000000000e+00 1.000000000000000000e+00 -5.882353186607360840e-01 8.823529630899429321e-02 0.000000000000000000e+00 1.000000000000000000e+00 -5.960784554481506348e-01 9.607843309640884399e-02 0.000000000000000000e+00 1.000000000000000000e+00 -6.039215922355651855e-01 1.039215698838233948e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.117647290229797363e-01 1.117647066712379456e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.196078658103942871e-01 1.196078434586524963e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.274510025978088379e-01 1.274509876966476440e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.352941393852233887e-01 1.352941244840621948e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.431372761726379395e-01 1.431372612714767456e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.509804129600524902e-01 1.509803980588912964e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.588235497474670410e-01 1.588235348463058472e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.666666865348815918e-01 1.666666716337203979e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.745098233222961426e-01 1.745098084211349487e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.823529601097106934e-01 1.823529452085494995e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.901960968971252441e-01 1.901960819959640503e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.980392336845397949e-01 1.980392187833786011e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.058823704719543457e-01 2.058823555707931519e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.137255072593688965e-01 2.137254923582077026e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.215686440467834473e-01 2.215686291456222534e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.294117808341979980e-01 2.294117659330368042e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.372549176216125488e-01 2.372549027204513550e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.450980544090270996e-01 2.450980395078659058e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.529411911964416504e-01 2.529411911964416504e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.607843279838562012e-01 2.607843279838562012e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.686274647712707520e-01 2.686274647712707520e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.764706015586853027e-01 2.764706015586853027e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.843137383460998535e-01 2.843137383460998535e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.921568751335144043e-01 2.921568751335144043e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.000000119209289551e-01 3.000000119209289551e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.078431487083435059e-01 3.078431487083435059e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.156862854957580566e-01 3.156862854957580566e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.235294222831726074e-01 3.235294222831726074e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.313725590705871582e-01 3.313725590705871582e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.392156958580017090e-01 3.392156958580017090e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.470588326454162598e-01 3.470588326454162598e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.549019694328308105e-01 3.549019694328308105e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.627451062202453613e-01 3.627451062202453613e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.705882430076599121e-01 3.705882430076599121e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.784313797950744629e-01 3.784313797950744629e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.862745165824890137e-01 3.862745165824890137e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.941176533699035645e-01 3.941176533699035645e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.019607901573181152e-01 4.019607901573181152e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.098039269447326660e-01 4.098039269447326660e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.176470637321472168e-01 4.176470637321472168e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.254902005195617676e-01 4.254902005195617676e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.333333373069763184e-01 4.333333373069763184e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.411764740943908691e-01 4.411764740943908691e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.490196108818054199e-01 4.490196108818054199e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.568627476692199707e-01 4.568627476692199707e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.647058844566345215e-01 4.647058844566345215e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.725490212440490723e-01 4.725490212440490723e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.803921580314636230e-01 4.803921580314636230e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.882352948188781738e-01 4.882352948188781738e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.960784316062927246e-01 4.960784316062927246e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.039215683937072754e-01 3.921568859368562698e-03 1.000000000000000000e+00 -1.000000000000000000e+00 5.117647051811218262e-01 1.176470611244440079e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.196078419685363770e-01 1.960784383118152618e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.274509787559509277e-01 2.745098061859607697e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.352941155433654785e-01 3.529411926865577698e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.431372523307800293e-01 4.313725605607032776e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.509803891181945801e-01 5.098039284348487854e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.588235259056091309e-01 5.882352963089942932e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.666666626930236816e-01 6.666667014360427856e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.745097994804382324e-01 7.450980693101882935e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.823529362678527832e-01 8.235294371843338013e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.901960730552673340e-01 9.019608050584793091e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.980392098426818848e-01 9.803921729326248169e-02 1.000000000000000000e+00 -1.000000000000000000e+00 6.058823466300964355e-01 1.058823540806770325e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.137254834175109863e-01 1.137254908680915833e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.215686202049255371e-01 1.215686276555061340e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.294117569923400879e-01 1.294117718935012817e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.372548937797546387e-01 1.372549086809158325e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.450980305671691895e-01 1.450980454683303833e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.529411673545837402e-01 1.529411822557449341e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.607843041419982910e-01 1.607843190431594849e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.686274409294128418e-01 1.686274558305740356e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.764705777168273926e-01 1.764705926179885864e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.843137145042419434e-01 1.843137294054031372e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.921568512916564941e-01 1.921568661928176880e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.999999880790710449e-01 2.000000029802322388e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.078431248664855957e-01 2.078431397676467896e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.156862616539001465e-01 2.156862765550613403e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.235293984413146973e-01 2.235294133424758911e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.313725352287292480e-01 2.313725501298904419e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.392156720161437988e-01 2.392156869173049927e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.470588088035583496e-01 2.470588237047195435e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.549019455909729004e-01 2.549019753932952881e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.627450823783874512e-01 2.627451121807098389e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.705882191658020020e-01 2.705882489681243896e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.784313559532165527e-01 2.784313857555389404e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.862744927406311035e-01 2.862745225429534912e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.941176295280456543e-01 2.941176593303680420e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.019607663154602051e-01 3.019607961177825928e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.098039031028747559e-01 3.098039329051971436e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.176470398902893066e-01 3.176470696926116943e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.254901766777038574e-01 3.254902064800262451e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.333333134651184082e-01 3.333333432674407959e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.411764502525329590e-01 3.411764800548553467e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.490195870399475098e-01 3.490196168422698975e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.568627238273620605e-01 3.568627536296844482e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.647058606147766113e-01 3.647058904170989990e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.725489974021911621e-01 3.725490272045135498e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.803921341896057129e-01 3.803921639919281006e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.882352709770202637e-01 3.882353007793426514e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.960784077644348145e-01 3.960784375667572021e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.039215445518493652e-01 4.039215743541717529e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.117646813392639160e-01 4.117647111415863037e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.196078181266784668e-01 4.196078479290008545e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.274509549140930176e-01 4.274509847164154053e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.352940917015075684e-01 4.352941215038299561e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.431372284889221191e-01 4.431372582912445068e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.509803652763366699e-01 4.509803950786590576e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.588235020637512207e-01 4.588235318660736084e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.666666388511657715e-01 4.666666686534881592e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.745097756385803223e-01 4.745098054409027100e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.823529124259948730e-01 4.823529422283172607e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.901960492134094238e-01 4.901960790157318115e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.980391860008239746e-01 4.980392158031463623e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.058823823928833008e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.137255191802978516e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.215686559677124023e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.294117927551269531e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.372549295425415039e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.450980663299560547e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.529412031173706055e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.607843399047851562e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.686274766921997070e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.764706134796142578e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.843137502670288086e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.921568870544433594e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.000000238418579102e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.078431606292724609e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.156862974166870117e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.235294342041015625e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.313725709915161133e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.392157077789306641e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.470588445663452148e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.549019813537597656e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.627451181411743164e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.705882549285888672e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.784313917160034180e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.862745285034179688e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.941176652908325195e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.019608020782470703e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.098039388656616211e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.176470756530761719e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.254902124404907227e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.333333492279052734e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.411764860153198242e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.490196228027343750e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.568627595901489258e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.647058963775634766e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.725490331649780273e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.803921699523925781e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.882353067398071289e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.960784435272216797e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.039215803146362305e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.117647171020507812e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.196078538894653320e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.274509906768798828e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.352941274642944336e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.431372642517089844e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.509804010391235352e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.588235378265380859e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.666666746139526367e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.745098114013671875e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.823529481887817383e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.901960849761962891e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.980392217636108398e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.058823585510253906e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.137254953384399414e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.215686321258544922e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.294117689132690430e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.372549057006835938e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.450980424880981445e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.529411792755126953e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.607843160629272461e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.686274528503417969e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.764705896377563477e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.843137264251708984e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.921568632125854492e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/autumn b/fastplotlib/utils/colormaps/autumn deleted file mode 100644 index b6c4be628..000000000 --- a/fastplotlib/utils/colormaps/autumn +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.921568859368562698e-03 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.843137718737125397e-03 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.176470611244440079e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.568627543747425079e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.960784383118152618e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.352941222488880157e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.745098061859607697e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.137255087494850159e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.529411926865577698e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.921568766236305237e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.313725605607032776e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.705882444977760315e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.098039284348487854e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.490196123719215393e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.882352963089942932e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.274510174989700317e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.666667014360427856e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.058823853731155396e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.450980693101882935e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.843137532472610474e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.235294371843338013e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.627451211214065552e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.019608050584793091e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.411764889955520630e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.803921729326248169e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.019607856869697571e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.058823540806770325e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.098039224743843079e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.137254908680915833e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.176470592617988586e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.215686276555061340e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.254902034997940063e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.294117718935012817e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.333333402872085571e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.372549086809158325e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.411764770746231079e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.450980454683303833e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.490196138620376587e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.529411822557449341e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.568627506494522095e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.607843190431594849e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.647058874368667603e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.686274558305740356e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.725490242242813110e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.764705926179885864e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.803921610116958618e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.843137294054031372e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.882352977991104126e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.921568661928176880e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.960784345865249634e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.000000029802322388e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.039215713739395142e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.078431397676467896e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.117647081613540649e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.156862765550613403e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.196078449487686157e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.235294133424758911e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.274509817361831665e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.313725501298904419e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.352941185235977173e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.392156869173049927e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.431372553110122681e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.470588237047195435e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.509804069995880127e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.549019753932952881e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.588235437870025635e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.627451121807098389e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.666666805744171143e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.705882489681243896e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.745098173618316650e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.784313857555389404e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.823529541492462158e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.862745225429534912e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.901960909366607666e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.941176593303680420e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.980392277240753174e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.019607961177825928e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.058823645114898682e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.098039329051971436e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.137255012989044189e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.176470696926116943e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.215686380863189697e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.254902064800262451e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.294117748737335205e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.333333432674407959e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.372549116611480713e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.411764800548553467e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.450980484485626221e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.490196168422698975e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.529411852359771729e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.568627536296844482e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.607843220233917236e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.647058904170989990e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.686274588108062744e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.725490272045135498e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.764705955982208252e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.803921639919281006e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.843137323856353760e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.882353007793426514e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.921568691730499268e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.960784375667572021e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.000000059604644775e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.039215743541717529e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.078431427478790283e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.117647111415863037e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.156862795352935791e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.196078479290008545e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.235294163227081299e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.274509847164154053e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.313725531101226807e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.352941215038299561e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.392156898975372314e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.431372582912445068e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.470588266849517822e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.509803950786590576e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.549019634723663330e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.588235318660736084e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.627451002597808838e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.666666686534881592e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.705882370471954346e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.745098054409027100e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.784313738346099854e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.823529422283172607e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.862745106220245361e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.901960790157318115e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.941176474094390869e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.980392158031463623e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.019608139991760254e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.058823823928833008e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.098039507865905762e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.137255191802978516e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.176470875740051270e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.215686559677124023e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.254902243614196777e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.294117927551269531e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.333333611488342285e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.372549295425415039e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.411764979362487793e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.450980663299560547e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.490196347236633301e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.529412031173706055e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.568627715110778809e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.607843399047851562e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.647059082984924316e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.686274766921997070e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.725490450859069824e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.764706134796142578e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.803921818733215332e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.843137502670288086e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.882353186607360840e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.921568870544433594e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.960784554481506348e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.000000238418579102e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.039215922355651855e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.078431606292724609e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.117647290229797363e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.156862974166870117e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.196078658103942871e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.235294342041015625e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.274510025978088379e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.313725709915161133e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.352941393852233887e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.392157077789306641e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.431372761726379395e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.470588445663452148e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.509804129600524902e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.549019813537597656e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.588235497474670410e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.627451181411743164e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.666666865348815918e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.705882549285888672e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.745098233222961426e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.784313917160034180e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.823529601097106934e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.862745285034179688e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.901960968971252441e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.941176652908325195e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.980392336845397949e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.019608020782470703e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.058823704719543457e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.098039388656616211e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.137255072593688965e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.176470756530761719e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.215686440467834473e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.254902124404907227e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.294117808341979980e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.333333492279052734e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.372549176216125488e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.411764860153198242e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.450980544090270996e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.490196228027343750e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.529411911964416504e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.568627595901489258e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.607843279838562012e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.647058963775634766e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.686274647712707520e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.725490331649780273e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.764706015586853027e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.803921699523925781e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.843137383460998535e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.882353067398071289e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.921568751335144043e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.960784435272216797e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.000000119209289551e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.039215803146362305e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.078431487083435059e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.117647171020507812e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.156862854957580566e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.196078538894653320e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.235294222831726074e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.274509906768798828e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.313725590705871582e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.352941274642944336e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.392156958580017090e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.431372642517089844e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.470588326454162598e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.509804010391235352e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.549019694328308105e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.588235378265380859e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.627451062202453613e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.666666746139526367e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.705882430076599121e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.745098114013671875e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.784313797950744629e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.823529481887817383e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.862745165824890137e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.901960849761962891e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.941176533699035645e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.980392217636108398e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.019607901573181152e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.058823585510253906e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.098039269447326660e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.137254953384399414e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.176470637321472168e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.215686321258544922e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.254902005195617676e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.294117689132690430e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.333333373069763184e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.372549057006835938e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.411764740943908691e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.450980424880981445e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.490196108818054199e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.529411792755126953e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.568627476692199707e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.607843160629272461e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.647058844566345215e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.686274528503417969e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.725490212440490723e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.764705896377563477e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.803921580314636230e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.843137264251708984e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.882352948188781738e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.921568632125854492e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.960784316062927246e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/binary b/fastplotlib/utils/colormaps/binary deleted file mode 100644 index 19ae9bd30..000000000 --- a/fastplotlib/utils/colormaps/binary +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.960784316062927246e-01 9.960784316062927246e-01 9.960784316062927246e-01 1.000000000000000000e+00 -9.921568632125854492e-01 9.921568632125854492e-01 9.921568632125854492e-01 1.000000000000000000e+00 -9.882352948188781738e-01 9.882352948188781738e-01 9.882352948188781738e-01 1.000000000000000000e+00 -9.843137264251708984e-01 9.843137264251708984e-01 9.843137264251708984e-01 1.000000000000000000e+00 -9.803921580314636230e-01 9.803921580314636230e-01 9.803921580314636230e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.764705896377563477e-01 9.764705896377563477e-01 1.000000000000000000e+00 -9.725490212440490723e-01 9.725490212440490723e-01 9.725490212440490723e-01 1.000000000000000000e+00 -9.686274528503417969e-01 9.686274528503417969e-01 9.686274528503417969e-01 1.000000000000000000e+00 -9.647058844566345215e-01 9.647058844566345215e-01 9.647058844566345215e-01 1.000000000000000000e+00 -9.607843160629272461e-01 9.607843160629272461e-01 9.607843160629272461e-01 1.000000000000000000e+00 -9.568627476692199707e-01 9.568627476692199707e-01 9.568627476692199707e-01 1.000000000000000000e+00 -9.529411792755126953e-01 9.529411792755126953e-01 9.529411792755126953e-01 1.000000000000000000e+00 -9.490196108818054199e-01 9.490196108818054199e-01 9.490196108818054199e-01 1.000000000000000000e+00 -9.450980424880981445e-01 9.450980424880981445e-01 9.450980424880981445e-01 1.000000000000000000e+00 -9.411764740943908691e-01 9.411764740943908691e-01 9.411764740943908691e-01 1.000000000000000000e+00 -9.372549057006835938e-01 9.372549057006835938e-01 9.372549057006835938e-01 1.000000000000000000e+00 -9.333333373069763184e-01 9.333333373069763184e-01 9.333333373069763184e-01 1.000000000000000000e+00 -9.294117689132690430e-01 9.294117689132690430e-01 9.294117689132690430e-01 1.000000000000000000e+00 -9.254902005195617676e-01 9.254902005195617676e-01 9.254902005195617676e-01 1.000000000000000000e+00 -9.215686321258544922e-01 9.215686321258544922e-01 9.215686321258544922e-01 1.000000000000000000e+00 -9.176470637321472168e-01 9.176470637321472168e-01 9.176470637321472168e-01 1.000000000000000000e+00 -9.137254953384399414e-01 9.137254953384399414e-01 9.137254953384399414e-01 1.000000000000000000e+00 -9.098039269447326660e-01 9.098039269447326660e-01 9.098039269447326660e-01 1.000000000000000000e+00 -9.058823585510253906e-01 9.058823585510253906e-01 9.058823585510253906e-01 1.000000000000000000e+00 -9.019607901573181152e-01 9.019607901573181152e-01 9.019607901573181152e-01 1.000000000000000000e+00 -8.980392217636108398e-01 8.980392217636108398e-01 8.980392217636108398e-01 1.000000000000000000e+00 -8.941176533699035645e-01 8.941176533699035645e-01 8.941176533699035645e-01 1.000000000000000000e+00 -8.901960849761962891e-01 8.901960849761962891e-01 8.901960849761962891e-01 1.000000000000000000e+00 -8.862745165824890137e-01 8.862745165824890137e-01 8.862745165824890137e-01 1.000000000000000000e+00 -8.823529481887817383e-01 8.823529481887817383e-01 8.823529481887817383e-01 1.000000000000000000e+00 -8.784313797950744629e-01 8.784313797950744629e-01 8.784313797950744629e-01 1.000000000000000000e+00 -8.745098114013671875e-01 8.745098114013671875e-01 8.745098114013671875e-01 1.000000000000000000e+00 -8.705882430076599121e-01 8.705882430076599121e-01 8.705882430076599121e-01 1.000000000000000000e+00 -8.666666746139526367e-01 8.666666746139526367e-01 8.666666746139526367e-01 1.000000000000000000e+00 -8.627451062202453613e-01 8.627451062202453613e-01 8.627451062202453613e-01 1.000000000000000000e+00 -8.588235378265380859e-01 8.588235378265380859e-01 8.588235378265380859e-01 1.000000000000000000e+00 -8.549019694328308105e-01 8.549019694328308105e-01 8.549019694328308105e-01 1.000000000000000000e+00 -8.509804010391235352e-01 8.509804010391235352e-01 8.509804010391235352e-01 1.000000000000000000e+00 -8.470588326454162598e-01 8.470588326454162598e-01 8.470588326454162598e-01 1.000000000000000000e+00 -8.431372642517089844e-01 8.431372642517089844e-01 8.431372642517089844e-01 1.000000000000000000e+00 -8.392156958580017090e-01 8.392156958580017090e-01 8.392156958580017090e-01 1.000000000000000000e+00 -8.352941274642944336e-01 8.352941274642944336e-01 8.352941274642944336e-01 1.000000000000000000e+00 -8.313725590705871582e-01 8.313725590705871582e-01 8.313725590705871582e-01 1.000000000000000000e+00 -8.274509906768798828e-01 8.274509906768798828e-01 8.274509906768798828e-01 1.000000000000000000e+00 -8.235294222831726074e-01 8.235294222831726074e-01 8.235294222831726074e-01 1.000000000000000000e+00 -8.196078538894653320e-01 8.196078538894653320e-01 8.196078538894653320e-01 1.000000000000000000e+00 -8.156862854957580566e-01 8.156862854957580566e-01 8.156862854957580566e-01 1.000000000000000000e+00 -8.117647171020507812e-01 8.117647171020507812e-01 8.117647171020507812e-01 1.000000000000000000e+00 -8.078431487083435059e-01 8.078431487083435059e-01 8.078431487083435059e-01 1.000000000000000000e+00 -8.039215803146362305e-01 8.039215803146362305e-01 8.039215803146362305e-01 1.000000000000000000e+00 -8.000000119209289551e-01 8.000000119209289551e-01 8.000000119209289551e-01 1.000000000000000000e+00 -7.960784435272216797e-01 7.960784435272216797e-01 7.960784435272216797e-01 1.000000000000000000e+00 -7.921568751335144043e-01 7.921568751335144043e-01 7.921568751335144043e-01 1.000000000000000000e+00 -7.882353067398071289e-01 7.882353067398071289e-01 7.882353067398071289e-01 1.000000000000000000e+00 -7.843137383460998535e-01 7.843137383460998535e-01 7.843137383460998535e-01 1.000000000000000000e+00 -7.803921699523925781e-01 7.803921699523925781e-01 7.803921699523925781e-01 1.000000000000000000e+00 -7.764706015586853027e-01 7.764706015586853027e-01 7.764706015586853027e-01 1.000000000000000000e+00 -7.725490331649780273e-01 7.725490331649780273e-01 7.725490331649780273e-01 1.000000000000000000e+00 -7.686274647712707520e-01 7.686274647712707520e-01 7.686274647712707520e-01 1.000000000000000000e+00 -7.647058963775634766e-01 7.647058963775634766e-01 7.647058963775634766e-01 1.000000000000000000e+00 -7.607843279838562012e-01 7.607843279838562012e-01 7.607843279838562012e-01 1.000000000000000000e+00 -7.568627595901489258e-01 7.568627595901489258e-01 7.568627595901489258e-01 1.000000000000000000e+00 -7.529411911964416504e-01 7.529411911964416504e-01 7.529411911964416504e-01 1.000000000000000000e+00 -7.490196228027343750e-01 7.490196228027343750e-01 7.490196228027343750e-01 1.000000000000000000e+00 -7.450980544090270996e-01 7.450980544090270996e-01 7.450980544090270996e-01 1.000000000000000000e+00 -7.411764860153198242e-01 7.411764860153198242e-01 7.411764860153198242e-01 1.000000000000000000e+00 -7.372549176216125488e-01 7.372549176216125488e-01 7.372549176216125488e-01 1.000000000000000000e+00 -7.333333492279052734e-01 7.333333492279052734e-01 7.333333492279052734e-01 1.000000000000000000e+00 -7.294117808341979980e-01 7.294117808341979980e-01 7.294117808341979980e-01 1.000000000000000000e+00 -7.254902124404907227e-01 7.254902124404907227e-01 7.254902124404907227e-01 1.000000000000000000e+00 -7.215686440467834473e-01 7.215686440467834473e-01 7.215686440467834473e-01 1.000000000000000000e+00 -7.176470756530761719e-01 7.176470756530761719e-01 7.176470756530761719e-01 1.000000000000000000e+00 -7.137255072593688965e-01 7.137255072593688965e-01 7.137255072593688965e-01 1.000000000000000000e+00 -7.098039388656616211e-01 7.098039388656616211e-01 7.098039388656616211e-01 1.000000000000000000e+00 -7.058823704719543457e-01 7.058823704719543457e-01 7.058823704719543457e-01 1.000000000000000000e+00 -7.019608020782470703e-01 7.019608020782470703e-01 7.019608020782470703e-01 1.000000000000000000e+00 -6.980392336845397949e-01 6.980392336845397949e-01 6.980392336845397949e-01 1.000000000000000000e+00 -6.941176652908325195e-01 6.941176652908325195e-01 6.941176652908325195e-01 1.000000000000000000e+00 -6.901960968971252441e-01 6.901960968971252441e-01 6.901960968971252441e-01 1.000000000000000000e+00 -6.862745285034179688e-01 6.862745285034179688e-01 6.862745285034179688e-01 1.000000000000000000e+00 -6.823529601097106934e-01 6.823529601097106934e-01 6.823529601097106934e-01 1.000000000000000000e+00 -6.784313917160034180e-01 6.784313917160034180e-01 6.784313917160034180e-01 1.000000000000000000e+00 -6.745098233222961426e-01 6.745098233222961426e-01 6.745098233222961426e-01 1.000000000000000000e+00 -6.705882549285888672e-01 6.705882549285888672e-01 6.705882549285888672e-01 1.000000000000000000e+00 -6.666666865348815918e-01 6.666666865348815918e-01 6.666666865348815918e-01 1.000000000000000000e+00 -6.627451181411743164e-01 6.627451181411743164e-01 6.627451181411743164e-01 1.000000000000000000e+00 -6.588235497474670410e-01 6.588235497474670410e-01 6.588235497474670410e-01 1.000000000000000000e+00 -6.549019813537597656e-01 6.549019813537597656e-01 6.549019813537597656e-01 1.000000000000000000e+00 -6.509804129600524902e-01 6.509804129600524902e-01 6.509804129600524902e-01 1.000000000000000000e+00 -6.470588445663452148e-01 6.470588445663452148e-01 6.470588445663452148e-01 1.000000000000000000e+00 -6.431372761726379395e-01 6.431372761726379395e-01 6.431372761726379395e-01 1.000000000000000000e+00 -6.392157077789306641e-01 6.392157077789306641e-01 6.392157077789306641e-01 1.000000000000000000e+00 -6.352941393852233887e-01 6.352941393852233887e-01 6.352941393852233887e-01 1.000000000000000000e+00 -6.313725709915161133e-01 6.313725709915161133e-01 6.313725709915161133e-01 1.000000000000000000e+00 -6.274510025978088379e-01 6.274510025978088379e-01 6.274510025978088379e-01 1.000000000000000000e+00 -6.235294342041015625e-01 6.235294342041015625e-01 6.235294342041015625e-01 1.000000000000000000e+00 -6.196078658103942871e-01 6.196078658103942871e-01 6.196078658103942871e-01 1.000000000000000000e+00 -6.156862974166870117e-01 6.156862974166870117e-01 6.156862974166870117e-01 1.000000000000000000e+00 -6.117647290229797363e-01 6.117647290229797363e-01 6.117647290229797363e-01 1.000000000000000000e+00 -6.078431606292724609e-01 6.078431606292724609e-01 6.078431606292724609e-01 1.000000000000000000e+00 -6.039215922355651855e-01 6.039215922355651855e-01 6.039215922355651855e-01 1.000000000000000000e+00 -6.000000238418579102e-01 6.000000238418579102e-01 6.000000238418579102e-01 1.000000000000000000e+00 -5.960784554481506348e-01 5.960784554481506348e-01 5.960784554481506348e-01 1.000000000000000000e+00 -5.921568870544433594e-01 5.921568870544433594e-01 5.921568870544433594e-01 1.000000000000000000e+00 -5.882353186607360840e-01 5.882353186607360840e-01 5.882353186607360840e-01 1.000000000000000000e+00 -5.843137502670288086e-01 5.843137502670288086e-01 5.843137502670288086e-01 1.000000000000000000e+00 -5.803921818733215332e-01 5.803921818733215332e-01 5.803921818733215332e-01 1.000000000000000000e+00 -5.764706134796142578e-01 5.764706134796142578e-01 5.764706134796142578e-01 1.000000000000000000e+00 -5.725490450859069824e-01 5.725490450859069824e-01 5.725490450859069824e-01 1.000000000000000000e+00 -5.686274766921997070e-01 5.686274766921997070e-01 5.686274766921997070e-01 1.000000000000000000e+00 -5.647059082984924316e-01 5.647059082984924316e-01 5.647059082984924316e-01 1.000000000000000000e+00 -5.607843399047851562e-01 5.607843399047851562e-01 5.607843399047851562e-01 1.000000000000000000e+00 -5.568627715110778809e-01 5.568627715110778809e-01 5.568627715110778809e-01 1.000000000000000000e+00 -5.529412031173706055e-01 5.529412031173706055e-01 5.529412031173706055e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.490196347236633301e-01 5.490196347236633301e-01 1.000000000000000000e+00 -5.450980663299560547e-01 5.450980663299560547e-01 5.450980663299560547e-01 1.000000000000000000e+00 -5.411764979362487793e-01 5.411764979362487793e-01 5.411764979362487793e-01 1.000000000000000000e+00 -5.372549295425415039e-01 5.372549295425415039e-01 5.372549295425415039e-01 1.000000000000000000e+00 -5.333333611488342285e-01 5.333333611488342285e-01 5.333333611488342285e-01 1.000000000000000000e+00 -5.294117927551269531e-01 5.294117927551269531e-01 5.294117927551269531e-01 1.000000000000000000e+00 -5.254902243614196777e-01 5.254902243614196777e-01 5.254902243614196777e-01 1.000000000000000000e+00 -5.215686559677124023e-01 5.215686559677124023e-01 5.215686559677124023e-01 1.000000000000000000e+00 -5.176470875740051270e-01 5.176470875740051270e-01 5.176470875740051270e-01 1.000000000000000000e+00 -5.137255191802978516e-01 5.137255191802978516e-01 5.137255191802978516e-01 1.000000000000000000e+00 -5.098039507865905762e-01 5.098039507865905762e-01 5.098039507865905762e-01 1.000000000000000000e+00 -5.058823823928833008e-01 5.058823823928833008e-01 5.058823823928833008e-01 1.000000000000000000e+00 -5.019608139991760254e-01 5.019608139991760254e-01 5.019608139991760254e-01 1.000000000000000000e+00 -4.980392158031463623e-01 4.980392158031463623e-01 4.980392158031463623e-01 1.000000000000000000e+00 -4.941176474094390869e-01 4.941176474094390869e-01 4.941176474094390869e-01 1.000000000000000000e+00 -4.901960790157318115e-01 4.901960790157318115e-01 4.901960790157318115e-01 1.000000000000000000e+00 -4.862745106220245361e-01 4.862745106220245361e-01 4.862745106220245361e-01 1.000000000000000000e+00 -4.823529422283172607e-01 4.823529422283172607e-01 4.823529422283172607e-01 1.000000000000000000e+00 -4.784313738346099854e-01 4.784313738346099854e-01 4.784313738346099854e-01 1.000000000000000000e+00 -4.745098054409027100e-01 4.745098054409027100e-01 4.745098054409027100e-01 1.000000000000000000e+00 -4.705882370471954346e-01 4.705882370471954346e-01 4.705882370471954346e-01 1.000000000000000000e+00 -4.666666686534881592e-01 4.666666686534881592e-01 4.666666686534881592e-01 1.000000000000000000e+00 -4.627451002597808838e-01 4.627451002597808838e-01 4.627451002597808838e-01 1.000000000000000000e+00 -4.588235318660736084e-01 4.588235318660736084e-01 4.588235318660736084e-01 1.000000000000000000e+00 -4.549019634723663330e-01 4.549019634723663330e-01 4.549019634723663330e-01 1.000000000000000000e+00 -4.509803950786590576e-01 4.509803950786590576e-01 4.509803950786590576e-01 1.000000000000000000e+00 -4.470588266849517822e-01 4.470588266849517822e-01 4.470588266849517822e-01 1.000000000000000000e+00 -4.431372582912445068e-01 4.431372582912445068e-01 4.431372582912445068e-01 1.000000000000000000e+00 -4.392156898975372314e-01 4.392156898975372314e-01 4.392156898975372314e-01 1.000000000000000000e+00 -4.352941215038299561e-01 4.352941215038299561e-01 4.352941215038299561e-01 1.000000000000000000e+00 -4.313725531101226807e-01 4.313725531101226807e-01 4.313725531101226807e-01 1.000000000000000000e+00 -4.274509847164154053e-01 4.274509847164154053e-01 4.274509847164154053e-01 1.000000000000000000e+00 -4.235294163227081299e-01 4.235294163227081299e-01 4.235294163227081299e-01 1.000000000000000000e+00 -4.196078479290008545e-01 4.196078479290008545e-01 4.196078479290008545e-01 1.000000000000000000e+00 -4.156862795352935791e-01 4.156862795352935791e-01 4.156862795352935791e-01 1.000000000000000000e+00 -4.117647111415863037e-01 4.117647111415863037e-01 4.117647111415863037e-01 1.000000000000000000e+00 -4.078431427478790283e-01 4.078431427478790283e-01 4.078431427478790283e-01 1.000000000000000000e+00 -4.039215743541717529e-01 4.039215743541717529e-01 4.039215743541717529e-01 1.000000000000000000e+00 -4.000000059604644775e-01 4.000000059604644775e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.960784375667572021e-01 3.960784375667572021e-01 3.960784375667572021e-01 1.000000000000000000e+00 -3.921568691730499268e-01 3.921568691730499268e-01 3.921568691730499268e-01 1.000000000000000000e+00 -3.882353007793426514e-01 3.882353007793426514e-01 3.882353007793426514e-01 1.000000000000000000e+00 -3.843137323856353760e-01 3.843137323856353760e-01 3.843137323856353760e-01 1.000000000000000000e+00 -3.803921639919281006e-01 3.803921639919281006e-01 3.803921639919281006e-01 1.000000000000000000e+00 -3.764705955982208252e-01 3.764705955982208252e-01 3.764705955982208252e-01 1.000000000000000000e+00 -3.725490272045135498e-01 3.725490272045135498e-01 3.725490272045135498e-01 1.000000000000000000e+00 -3.686274588108062744e-01 3.686274588108062744e-01 3.686274588108062744e-01 1.000000000000000000e+00 -3.647058904170989990e-01 3.647058904170989990e-01 3.647058904170989990e-01 1.000000000000000000e+00 -3.607843220233917236e-01 3.607843220233917236e-01 3.607843220233917236e-01 1.000000000000000000e+00 -3.568627536296844482e-01 3.568627536296844482e-01 3.568627536296844482e-01 1.000000000000000000e+00 -3.529411852359771729e-01 3.529411852359771729e-01 3.529411852359771729e-01 1.000000000000000000e+00 -3.490196168422698975e-01 3.490196168422698975e-01 3.490196168422698975e-01 1.000000000000000000e+00 -3.450980484485626221e-01 3.450980484485626221e-01 3.450980484485626221e-01 1.000000000000000000e+00 -3.411764800548553467e-01 3.411764800548553467e-01 3.411764800548553467e-01 1.000000000000000000e+00 -3.372549116611480713e-01 3.372549116611480713e-01 3.372549116611480713e-01 1.000000000000000000e+00 -3.333333432674407959e-01 3.333333432674407959e-01 3.333333432674407959e-01 1.000000000000000000e+00 -3.294117748737335205e-01 3.294117748737335205e-01 3.294117748737335205e-01 1.000000000000000000e+00 -3.254902064800262451e-01 3.254902064800262451e-01 3.254902064800262451e-01 1.000000000000000000e+00 -3.215686380863189697e-01 3.215686380863189697e-01 3.215686380863189697e-01 1.000000000000000000e+00 -3.176470696926116943e-01 3.176470696926116943e-01 3.176470696926116943e-01 1.000000000000000000e+00 -3.137255012989044189e-01 3.137255012989044189e-01 3.137255012989044189e-01 1.000000000000000000e+00 -3.098039329051971436e-01 3.098039329051971436e-01 3.098039329051971436e-01 1.000000000000000000e+00 -3.058823645114898682e-01 3.058823645114898682e-01 3.058823645114898682e-01 1.000000000000000000e+00 -3.019607961177825928e-01 3.019607961177825928e-01 3.019607961177825928e-01 1.000000000000000000e+00 -2.980392277240753174e-01 2.980392277240753174e-01 2.980392277240753174e-01 1.000000000000000000e+00 -2.941176593303680420e-01 2.941176593303680420e-01 2.941176593303680420e-01 1.000000000000000000e+00 -2.901960909366607666e-01 2.901960909366607666e-01 2.901960909366607666e-01 1.000000000000000000e+00 -2.862745225429534912e-01 2.862745225429534912e-01 2.862745225429534912e-01 1.000000000000000000e+00 -2.823529541492462158e-01 2.823529541492462158e-01 2.823529541492462158e-01 1.000000000000000000e+00 -2.784313857555389404e-01 2.784313857555389404e-01 2.784313857555389404e-01 1.000000000000000000e+00 -2.745098173618316650e-01 2.745098173618316650e-01 2.745098173618316650e-01 1.000000000000000000e+00 -2.705882489681243896e-01 2.705882489681243896e-01 2.705882489681243896e-01 1.000000000000000000e+00 -2.666666805744171143e-01 2.666666805744171143e-01 2.666666805744171143e-01 1.000000000000000000e+00 -2.627451121807098389e-01 2.627451121807098389e-01 2.627451121807098389e-01 1.000000000000000000e+00 -2.588235437870025635e-01 2.588235437870025635e-01 2.588235437870025635e-01 1.000000000000000000e+00 -2.549019753932952881e-01 2.549019753932952881e-01 2.549019753932952881e-01 1.000000000000000000e+00 -2.509804069995880127e-01 2.509804069995880127e-01 2.509804069995880127e-01 1.000000000000000000e+00 -2.470588237047195435e-01 2.470588237047195435e-01 2.470588237047195435e-01 1.000000000000000000e+00 -2.431372553110122681e-01 2.431372553110122681e-01 2.431372553110122681e-01 1.000000000000000000e+00 -2.392156869173049927e-01 2.392156869173049927e-01 2.392156869173049927e-01 1.000000000000000000e+00 -2.352941185235977173e-01 2.352941185235977173e-01 2.352941185235977173e-01 1.000000000000000000e+00 -2.313725501298904419e-01 2.313725501298904419e-01 2.313725501298904419e-01 1.000000000000000000e+00 -2.274509817361831665e-01 2.274509817361831665e-01 2.274509817361831665e-01 1.000000000000000000e+00 -2.235294133424758911e-01 2.235294133424758911e-01 2.235294133424758911e-01 1.000000000000000000e+00 -2.196078449487686157e-01 2.196078449487686157e-01 2.196078449487686157e-01 1.000000000000000000e+00 -2.156862765550613403e-01 2.156862765550613403e-01 2.156862765550613403e-01 1.000000000000000000e+00 -2.117647081613540649e-01 2.117647081613540649e-01 2.117647081613540649e-01 1.000000000000000000e+00 -2.078431397676467896e-01 2.078431397676467896e-01 2.078431397676467896e-01 1.000000000000000000e+00 -2.039215713739395142e-01 2.039215713739395142e-01 2.039215713739395142e-01 1.000000000000000000e+00 -2.000000029802322388e-01 2.000000029802322388e-01 2.000000029802322388e-01 1.000000000000000000e+00 -1.960784345865249634e-01 1.960784345865249634e-01 1.960784345865249634e-01 1.000000000000000000e+00 -1.921568661928176880e-01 1.921568661928176880e-01 1.921568661928176880e-01 1.000000000000000000e+00 -1.882352977991104126e-01 1.882352977991104126e-01 1.882352977991104126e-01 1.000000000000000000e+00 -1.843137294054031372e-01 1.843137294054031372e-01 1.843137294054031372e-01 1.000000000000000000e+00 -1.803921610116958618e-01 1.803921610116958618e-01 1.803921610116958618e-01 1.000000000000000000e+00 -1.764705926179885864e-01 1.764705926179885864e-01 1.764705926179885864e-01 1.000000000000000000e+00 -1.725490242242813110e-01 1.725490242242813110e-01 1.725490242242813110e-01 1.000000000000000000e+00 -1.686274558305740356e-01 1.686274558305740356e-01 1.686274558305740356e-01 1.000000000000000000e+00 -1.647058874368667603e-01 1.647058874368667603e-01 1.647058874368667603e-01 1.000000000000000000e+00 -1.607843190431594849e-01 1.607843190431594849e-01 1.607843190431594849e-01 1.000000000000000000e+00 -1.568627506494522095e-01 1.568627506494522095e-01 1.568627506494522095e-01 1.000000000000000000e+00 -1.529411822557449341e-01 1.529411822557449341e-01 1.529411822557449341e-01 1.000000000000000000e+00 -1.490196138620376587e-01 1.490196138620376587e-01 1.490196138620376587e-01 1.000000000000000000e+00 -1.450980454683303833e-01 1.450980454683303833e-01 1.450980454683303833e-01 1.000000000000000000e+00 -1.411764770746231079e-01 1.411764770746231079e-01 1.411764770746231079e-01 1.000000000000000000e+00 -1.372549086809158325e-01 1.372549086809158325e-01 1.372549086809158325e-01 1.000000000000000000e+00 -1.333333402872085571e-01 1.333333402872085571e-01 1.333333402872085571e-01 1.000000000000000000e+00 -1.294117718935012817e-01 1.294117718935012817e-01 1.294117718935012817e-01 1.000000000000000000e+00 -1.254902034997940063e-01 1.254902034997940063e-01 1.254902034997940063e-01 1.000000000000000000e+00 -1.215686276555061340e-01 1.215686276555061340e-01 1.215686276555061340e-01 1.000000000000000000e+00 -1.176470592617988586e-01 1.176470592617988586e-01 1.176470592617988586e-01 1.000000000000000000e+00 -1.137254908680915833e-01 1.137254908680915833e-01 1.137254908680915833e-01 1.000000000000000000e+00 -1.098039224743843079e-01 1.098039224743843079e-01 1.098039224743843079e-01 1.000000000000000000e+00 -1.058823540806770325e-01 1.058823540806770325e-01 1.058823540806770325e-01 1.000000000000000000e+00 -1.019607856869697571e-01 1.019607856869697571e-01 1.019607856869697571e-01 1.000000000000000000e+00 -9.803921729326248169e-02 9.803921729326248169e-02 9.803921729326248169e-02 1.000000000000000000e+00 -9.411764889955520630e-02 9.411764889955520630e-02 9.411764889955520630e-02 1.000000000000000000e+00 -9.019608050584793091e-02 9.019608050584793091e-02 9.019608050584793091e-02 1.000000000000000000e+00 -8.627451211214065552e-02 8.627451211214065552e-02 8.627451211214065552e-02 1.000000000000000000e+00 -8.235294371843338013e-02 8.235294371843338013e-02 8.235294371843338013e-02 1.000000000000000000e+00 -7.843137532472610474e-02 7.843137532472610474e-02 7.843137532472610474e-02 1.000000000000000000e+00 -7.450980693101882935e-02 7.450980693101882935e-02 7.450980693101882935e-02 1.000000000000000000e+00 -7.058823853731155396e-02 7.058823853731155396e-02 7.058823853731155396e-02 1.000000000000000000e+00 -6.666667014360427856e-02 6.666667014360427856e-02 6.666667014360427856e-02 1.000000000000000000e+00 -6.274510174989700317e-02 6.274510174989700317e-02 6.274510174989700317e-02 1.000000000000000000e+00 -5.882352963089942932e-02 5.882352963089942932e-02 5.882352963089942932e-02 1.000000000000000000e+00 -5.490196123719215393e-02 5.490196123719215393e-02 5.490196123719215393e-02 1.000000000000000000e+00 -5.098039284348487854e-02 5.098039284348487854e-02 5.098039284348487854e-02 1.000000000000000000e+00 -4.705882444977760315e-02 4.705882444977760315e-02 4.705882444977760315e-02 1.000000000000000000e+00 -4.313725605607032776e-02 4.313725605607032776e-02 4.313725605607032776e-02 1.000000000000000000e+00 -3.921568766236305237e-02 3.921568766236305237e-02 3.921568766236305237e-02 1.000000000000000000e+00 -3.529411926865577698e-02 3.529411926865577698e-02 3.529411926865577698e-02 1.000000000000000000e+00 -3.137255087494850159e-02 3.137255087494850159e-02 3.137255087494850159e-02 1.000000000000000000e+00 -2.745098061859607697e-02 2.745098061859607697e-02 2.745098061859607697e-02 1.000000000000000000e+00 -2.352941222488880157e-02 2.352941222488880157e-02 2.352941222488880157e-02 1.000000000000000000e+00 -1.960784383118152618e-02 1.960784383118152618e-02 1.960784383118152618e-02 1.000000000000000000e+00 -1.568627543747425079e-02 1.568627543747425079e-02 1.568627543747425079e-02 1.000000000000000000e+00 -1.176470611244440079e-02 1.176470611244440079e-02 1.176470611244440079e-02 1.000000000000000000e+00 -7.843137718737125397e-03 7.843137718737125397e-03 7.843137718737125397e-03 1.000000000000000000e+00 -3.921568859368562698e-03 3.921568859368562698e-03 3.921568859368562698e-03 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/bone b/fastplotlib/utils/colormaps/bone deleted file mode 100644 index 4dea86b82..000000000 --- a/fastplotlib/utils/colormaps/bone +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.431372577324509621e-03 3.431371180340647697e-03 4.774083383381366730e-03 1.000000000000000000e+00 -6.862745154649019241e-03 6.862742360681295395e-03 9.548166766762733459e-03 1.000000000000000000e+00 -1.029411796480417252e-02 1.029411330819129944e-02 1.432225108146667480e-02 1.000000000000000000e+00 -1.372549030929803848e-02 1.372548472136259079e-02 1.909633353352546692e-02 1.000000000000000000e+00 -1.715686358511447906e-02 1.715685613453388214e-02 2.387041784822940826e-02 1.000000000000000000e+00 -2.058823592960834503e-02 2.058822661638259888e-02 2.864450216293334961e-02 1.000000000000000000e+00 -2.401960827410221100e-02 2.401959896087646484e-02 3.341858461499214172e-02 1.000000000000000000e+00 -2.745098061859607697e-02 2.745096944272518158e-02 3.819266706705093384e-02 1.000000000000000000e+00 -3.088235296308994293e-02 3.088234178721904755e-02 4.296675324440002441e-02 1.000000000000000000e+00 -3.431372717022895813e-02 3.431371226906776428e-02 4.774083569645881653e-02 1.000000000000000000e+00 -3.774509951472282410e-02 3.774508461356163025e-02 5.251491814851760864e-02 1.000000000000000000e+00 -4.117647185921669006e-02 4.117645323276519775e-02 5.728900432586669922e-02 1.000000000000000000e+00 -4.460784420371055603e-02 4.460782557725906372e-02 6.206308677792549133e-02 1.000000000000000000e+00 -4.803921654820442200e-02 4.803919792175292969e-02 6.683716922998428345e-02 1.000000000000000000e+00 -5.147058889269828796e-02 5.147056654095649719e-02 7.161125540733337402e-02 1.000000000000000000e+00 -5.490196123719215393e-02 5.490193888545036316e-02 7.638533413410186768e-02 1.000000000000000000e+00 -5.833333358168601990e-02 5.833331122994422913e-02 8.115942031145095825e-02 1.000000000000000000e+00 -6.176470592617988586e-02 6.176468357443809509e-02 8.593350648880004883e-02 1.000000000000000000e+00 -6.519608199596405029e-02 6.519605219364166260e-02 9.070758521556854248e-02 1.000000000000000000e+00 -6.862745434045791626e-02 6.862742453813552856e-02 9.548167139291763306e-02 1.000000000000000000e+00 -7.205882668495178223e-02 7.205879688262939453e-02 1.002557575702667236e-01 1.000000000000000000e+00 -7.549019902944564819e-02 7.549016922712326050e-02 1.050298362970352173e-01 1.000000000000000000e+00 -7.892157137393951416e-02 7.892153412103652954e-02 1.098039224743843079e-01 1.000000000000000000e+00 -8.235294371843338013e-02 8.235290646553039551e-02 1.145780086517333984e-01 1.000000000000000000e+00 -8.578431606292724609e-02 8.578427881002426147e-02 1.193520873785018921e-01 1.000000000000000000e+00 -8.921568840742111206e-02 8.921565115451812744e-02 1.241261735558509827e-01 1.000000000000000000e+00 -9.264706075191497803e-02 9.264702349901199341e-02 1.289002597332000732e-01 1.000000000000000000e+00 -9.607843309640884399e-02 9.607839584350585938e-02 1.336743384599685669e-01 1.000000000000000000e+00 -9.950980544090270996e-02 9.950976818799972534e-02 1.384484171867370605e-01 1.000000000000000000e+00 -1.029411777853965759e-01 1.029411330819129944e-01 1.432225108146667480e-01 1.000000000000000000e+00 -1.063725501298904419e-01 1.063725054264068604e-01 1.479965895414352417e-01 1.000000000000000000e+00 -1.098039224743843079e-01 1.098038777709007263e-01 1.527706682682037354e-01 1.000000000000000000e+00 -1.132352948188781738e-01 1.132352501153945923e-01 1.575447618961334229e-01 1.000000000000000000e+00 -1.166666671633720398e-01 1.166666224598884583e-01 1.623188406229019165e-01 1.000000000000000000e+00 -1.200980395078659058e-01 1.200979948043823242e-01 1.670929193496704102e-01 1.000000000000000000e+00 -1.235294118523597717e-01 1.235293671488761902e-01 1.718670129776000977e-01 1.000000000000000000e+00 -1.269607841968536377e-01 1.269607394933700562e-01 1.766410917043685913e-01 1.000000000000000000e+00 -1.303921639919281006e-01 1.303921043872833252e-01 1.814151704311370850e-01 1.000000000000000000e+00 -1.338235288858413696e-01 1.338234841823577881e-01 1.861892640590667725e-01 1.000000000000000000e+00 -1.372549086809158325e-01 1.372548490762710571e-01 1.909633427858352661e-01 1.000000000000000000e+00 -1.406862735748291016e-01 1.406862139701843262e-01 1.957374215126037598e-01 1.000000000000000000e+00 -1.441176533699035645e-01 1.441175937652587891e-01 2.005115151405334473e-01 1.000000000000000000e+00 -1.475490182638168335e-01 1.475489586591720581e-01 2.052855938673019409e-01 1.000000000000000000e+00 -1.509803980588912964e-01 1.509803384542465210e-01 2.100596725940704346e-01 1.000000000000000000e+00 -1.544117629528045654e-01 1.544117033481597900e-01 2.148337662220001221e-01 1.000000000000000000e+00 -1.578431427478790283e-01 1.578430682420730591e-01 2.196078449487686157e-01 1.000000000000000000e+00 -1.612745076417922974e-01 1.612744480371475220e-01 2.243819236755371094e-01 1.000000000000000000e+00 -1.647058874368667603e-01 1.647058129310607910e-01 2.291560173034667969e-01 1.000000000000000000e+00 -1.681372523307800293e-01 1.681371927261352539e-01 2.339300960302352905e-01 1.000000000000000000e+00 -1.715686321258544922e-01 1.715685576200485229e-01 2.387041747570037842e-01 1.000000000000000000e+00 -1.749999970197677612e-01 1.749999374151229858e-01 2.434782534837722778e-01 1.000000000000000000e+00 -1.784313768148422241e-01 1.784313023090362549e-01 2.482523471117019653e-01 1.000000000000000000e+00 -1.818627417087554932e-01 1.818626672029495239e-01 2.530264258384704590e-01 1.000000000000000000e+00 -1.852941215038299561e-01 1.852940469980239868e-01 2.578005194664001465e-01 1.000000000000000000e+00 -1.887254863977432251e-01 1.887254118919372559e-01 2.625745832920074463e-01 1.000000000000000000e+00 -1.921568661928176880e-01 1.921567916870117188e-01 2.673486769199371338e-01 1.000000000000000000e+00 -1.955882310867309570e-01 1.955881565809249878e-01 2.721227705478668213e-01 1.000000000000000000e+00 -1.990196108818054199e-01 1.990195363759994507e-01 2.768968343734741211e-01 1.000000000000000000e+00 -2.024509757757186890e-01 2.024509012699127197e-01 2.816709280014038086e-01 1.000000000000000000e+00 -2.058823555707931519e-01 2.058822661638259888e-01 2.864450216293334961e-01 1.000000000000000000e+00 -2.093137204647064209e-01 2.093136459589004517e-01 2.912190854549407959e-01 1.000000000000000000e+00 -2.127451002597808838e-01 2.127450108528137207e-01 2.959931790828704834e-01 1.000000000000000000e+00 -2.161764651536941528e-01 2.161763906478881836e-01 3.007672727108001709e-01 1.000000000000000000e+00 -2.196078449487686157e-01 2.196077555418014526e-01 3.055413365364074707e-01 1.000000000000000000e+00 -2.230392098426818848e-01 2.230391353368759155e-01 3.103154301643371582e-01 1.000000000000000000e+00 -2.264705896377563477e-01 2.264705002307891846e-01 3.150895237922668457e-01 1.000000000000000000e+00 -2.299019545316696167e-01 2.299018651247024536e-01 3.198635876178741455e-01 1.000000000000000000e+00 -2.333333343267440796e-01 2.333332449197769165e-01 3.246376812458038330e-01 1.000000000000000000e+00 -2.367646992206573486e-01 2.367646098136901855e-01 3.294117748737335205e-01 1.000000000000000000e+00 -2.401960790157318115e-01 2.401959896087646484e-01 3.341858386993408203e-01 1.000000000000000000e+00 -2.436274439096450806e-01 2.436273545026779175e-01 3.389599323272705078e-01 1.000000000000000000e+00 -2.470588237047195435e-01 2.470587342977523804e-01 3.437340259552001953e-01 1.000000000000000000e+00 -2.504901885986328125e-01 2.504900991916656494e-01 3.485080897808074951e-01 1.000000000000000000e+00 -2.539215683937072754e-01 2.539214789867401123e-01 3.532821834087371826e-01 1.000000000000000000e+00 -2.573529481887817383e-01 2.573528289794921875e-01 3.580562770366668701e-01 1.000000000000000000e+00 -2.607843279838562012e-01 2.607842087745666504e-01 3.628303408622741699e-01 1.000000000000000000e+00 -2.642156779766082764e-01 2.642155885696411133e-01 3.676044344902038574e-01 1.000000000000000000e+00 -2.676470577716827393e-01 2.676469683647155762e-01 3.723785281181335449e-01 1.000000000000000000e+00 -2.710784375667572021e-01 2.710783183574676514e-01 3.771525919437408447e-01 1.000000000000000000e+00 -2.745098173618316650e-01 2.745096981525421143e-01 3.819266855716705322e-01 1.000000000000000000e+00 -2.779411673545837402e-01 2.779410779476165771e-01 3.867007791996002197e-01 1.000000000000000000e+00 -2.813725471496582031e-01 2.813724279403686523e-01 3.914748430252075195e-01 1.000000000000000000e+00 -2.848039269447326660e-01 2.848038077354431152e-01 3.962489366531372070e-01 1.000000000000000000e+00 -2.882353067398071289e-01 2.882351875305175781e-01 4.010230302810668945e-01 1.000000000000000000e+00 -2.916666567325592041e-01 2.916665673255920410e-01 4.057970941066741943e-01 1.000000000000000000e+00 -2.950980365276336670e-01 2.950979173183441162e-01 4.105711877346038818e-01 1.000000000000000000e+00 -2.985294163227081299e-01 2.985292971134185791e-01 4.153452813625335693e-01 1.000000000000000000e+00 -3.019607961177825928e-01 3.019606769084930420e-01 4.201193451881408691e-01 1.000000000000000000e+00 -3.053921461105346680e-01 3.053920269012451172e-01 4.248934388160705566e-01 1.000000000000000000e+00 -3.088235259056091309e-01 3.088234066963195801e-01 4.296675324440002441e-01 1.000000000000000000e+00 -3.122549057006835938e-01 3.122547864913940430e-01 4.344415962696075439e-01 1.000000000000000000e+00 -3.156862854957580566e-01 3.156861364841461182e-01 4.392156898975372314e-01 1.000000000000000000e+00 -3.191176354885101318e-01 3.191175162792205811e-01 4.439897835254669189e-01 1.000000000000000000e+00 -3.225490152835845947e-01 3.237132430076599121e-01 4.475488960742950439e-01 1.000000000000000000e+00 -3.259803950786590576e-01 3.284313678741455078e-01 4.509802758693695068e-01 1.000000000000000000e+00 -3.294117748737335205e-01 3.331494927406311035e-01 4.544116556644439697e-01 1.000000000000000000e+00 -3.328431248664855957e-01 3.378676474094390869e-01 4.578430056571960449e-01 1.000000000000000000e+00 -3.362745046615600586e-01 3.425857722759246826e-01 4.612743854522705078e-01 1.000000000000000000e+00 -3.397058844566345215e-01 3.473038971424102783e-01 4.647057652473449707e-01 1.000000000000000000e+00 -3.431372642517089844e-01 3.520220518112182617e-01 4.681371450424194336e-01 1.000000000000000000e+00 -3.465686142444610596e-01 3.567401766777038574e-01 4.715684950351715088e-01 1.000000000000000000e+00 -3.499999940395355225e-01 3.614583313465118408e-01 4.749998748302459717e-01 1.000000000000000000e+00 -3.534313738346099854e-01 3.661764562129974365e-01 4.784312546253204346e-01 1.000000000000000000e+00 -3.568627536296844482e-01 3.708945810794830322e-01 4.818626344203948975e-01 1.000000000000000000e+00 -3.602941036224365234e-01 3.756127357482910156e-01 4.852940142154693604e-01 1.000000000000000000e+00 -3.637254834175109863e-01 3.803308606147766113e-01 4.887253642082214355e-01 1.000000000000000000e+00 -3.671568632125854492e-01 3.850490152835845947e-01 4.921567440032958984e-01 1.000000000000000000e+00 -3.705882430076599121e-01 3.897671401500701904e-01 4.955881237983703613e-01 1.000000000000000000e+00 -3.740195930004119873e-01 3.944852650165557861e-01 4.990195035934448242e-01 1.000000000000000000e+00 -3.774509727954864502e-01 3.992034196853637695e-01 5.024508833885192871e-01 1.000000000000000000e+00 -3.808823525905609131e-01 4.039215445518493652e-01 5.058822631835937500e-01 1.000000000000000000e+00 -3.843137323856353760e-01 4.086396992206573486e-01 5.093136429786682129e-01 1.000000000000000000e+00 -3.877451121807098389e-01 4.133578240871429443e-01 5.127449631690979004e-01 1.000000000000000000e+00 -3.911764621734619141e-01 4.180759489536285400e-01 5.161763429641723633e-01 1.000000000000000000e+00 -3.946078419685363770e-01 4.227941036224365234e-01 5.196077227592468262e-01 1.000000000000000000e+00 -3.980392217636108398e-01 4.275122284889221191e-01 5.230391025543212891e-01 1.000000000000000000e+00 -4.014706015586853027e-01 4.322303533554077148e-01 5.264704823493957520e-01 1.000000000000000000e+00 -4.049019515514373779e-01 4.369485080242156982e-01 5.299018621444702148e-01 1.000000000000000000e+00 -4.083333313465118408e-01 4.416666328907012939e-01 5.333332419395446777e-01 1.000000000000000000e+00 -4.117647111415863037e-01 4.463847875595092773e-01 5.367646217346191406e-01 1.000000000000000000e+00 -4.151960909366607666e-01 4.511029124259948730e-01 5.401960015296936035e-01 1.000000000000000000e+00 -4.186274409294128418e-01 4.558210372924804688e-01 5.436273217201232910e-01 1.000000000000000000e+00 -4.220588207244873047e-01 4.605391919612884521e-01 5.470587015151977539e-01 1.000000000000000000e+00 -4.254902005195617676e-01 4.652573168277740479e-01 5.504900813102722168e-01 1.000000000000000000e+00 -4.289215803146362305e-01 4.699754714965820312e-01 5.539214611053466797e-01 1.000000000000000000e+00 -4.323529303073883057e-01 4.746935963630676270e-01 5.573528409004211426e-01 1.000000000000000000e+00 -4.357843101024627686e-01 4.794117212295532227e-01 5.607842206954956055e-01 1.000000000000000000e+00 -4.392156898975372314e-01 4.841298758983612061e-01 5.642156004905700684e-01 1.000000000000000000e+00 -4.426470696926116943e-01 4.888480007648468018e-01 5.676469802856445312e-01 1.000000000000000000e+00 -4.460784196853637695e-01 4.935661554336547852e-01 5.710783600807189941e-01 1.000000000000000000e+00 -4.495097994804382324e-01 4.982842803001403809e-01 5.745096802711486816e-01 1.000000000000000000e+00 -4.529411792755126953e-01 5.030024051666259766e-01 5.779410600662231445e-01 1.000000000000000000e+00 -4.563725590705871582e-01 5.077205300331115723e-01 5.813724398612976074e-01 1.000000000000000000e+00 -4.598039090633392334e-01 5.124387145042419434e-01 5.848038196563720703e-01 1.000000000000000000e+00 -4.632352888584136963e-01 5.171568393707275391e-01 5.882351994514465332e-01 1.000000000000000000e+00 -4.666666686534881592e-01 5.218749642372131348e-01 5.916665792465209961e-01 1.000000000000000000e+00 -4.700980484485626221e-01 5.265930891036987305e-01 5.950979590415954590e-01 1.000000000000000000e+00 -4.735293984413146973e-01 5.313112139701843262e-01 5.985293388366699219e-01 1.000000000000000000e+00 -4.769607782363891602e-01 5.360293984413146973e-01 6.019607186317443848e-01 1.000000000000000000e+00 -4.803921580314636230e-01 5.407475233078002930e-01 6.053920388221740723e-01 1.000000000000000000e+00 -4.838235378265380859e-01 5.454656481742858887e-01 6.088234186172485352e-01 1.000000000000000000e+00 -4.872548878192901611e-01 5.501837730407714844e-01 6.122547984123229980e-01 1.000000000000000000e+00 -4.906862676143646240e-01 5.549018979072570801e-01 6.156861782073974609e-01 1.000000000000000000e+00 -4.941176474094390869e-01 5.596200227737426758e-01 6.191175580024719238e-01 1.000000000000000000e+00 -4.975490272045135498e-01 5.643382072448730469e-01 6.225489377975463867e-01 1.000000000000000000e+00 -5.009803771972656250e-01 5.690563321113586426e-01 6.259803175926208496e-01 1.000000000000000000e+00 -5.044117569923400879e-01 5.737744569778442383e-01 6.294116973876953125e-01 1.000000000000000000e+00 -5.078431367874145508e-01 5.784925818443298340e-01 6.328430771827697754e-01 1.000000000000000000e+00 -5.112745165824890137e-01 5.832107067108154297e-01 6.362744569778442383e-01 1.000000000000000000e+00 -5.147058963775634766e-01 5.879288911819458008e-01 6.397057771682739258e-01 1.000000000000000000e+00 -5.181372761726379395e-01 5.926470160484313965e-01 6.431371569633483887e-01 1.000000000000000000e+00 -5.215686559677124023e-01 5.973651409149169922e-01 6.465685367584228516e-01 1.000000000000000000e+00 -5.249999761581420898e-01 6.020832657814025879e-01 6.499999165534973145e-01 1.000000000000000000e+00 -5.284313559532165527e-01 6.068013906478881836e-01 6.534312963485717773e-01 1.000000000000000000e+00 -5.318627357482910156e-01 6.115195751190185547e-01 6.568626761436462402e-01 1.000000000000000000e+00 -5.352941155433654785e-01 6.162376999855041504e-01 6.602940559387207031e-01 1.000000000000000000e+00 -5.387254953384399414e-01 6.209558248519897461e-01 6.637254357337951660e-01 1.000000000000000000e+00 -5.421568751335144043e-01 6.256739497184753418e-01 6.671568155288696289e-01 1.000000000000000000e+00 -5.455882549285888672e-01 6.303920745849609375e-01 6.705881357192993164e-01 1.000000000000000000e+00 -5.490196347236633301e-01 6.351102590560913086e-01 6.740195155143737793e-01 1.000000000000000000e+00 -5.524509549140930176e-01 6.398283839225769043e-01 6.774508953094482422e-01 1.000000000000000000e+00 -5.558823347091674805e-01 6.445465087890625000e-01 6.808822751045227051e-01 1.000000000000000000e+00 -5.593137145042419434e-01 6.492646336555480957e-01 6.843136548995971680e-01 1.000000000000000000e+00 -5.627450942993164062e-01 6.539827585220336914e-01 6.877450346946716309e-01 1.000000000000000000e+00 -5.661764740943908691e-01 6.587009429931640625e-01 6.911764144897460938e-01 1.000000000000000000e+00 -5.696078538894653320e-01 6.634190678596496582e-01 6.946077942848205566e-01 1.000000000000000000e+00 -5.730392336845397949e-01 6.681371927261352539e-01 6.980391740798950195e-01 1.000000000000000000e+00 -5.764706134796142578e-01 6.728553175926208496e-01 7.014704942703247070e-01 1.000000000000000000e+00 -5.799019336700439453e-01 6.775734424591064453e-01 7.049018740653991699e-01 1.000000000000000000e+00 -5.833333134651184082e-01 6.822916269302368164e-01 7.083332538604736328e-01 1.000000000000000000e+00 -5.867646932601928711e-01 6.870097517967224121e-01 7.117646336555480957e-01 1.000000000000000000e+00 -5.901960730552673340e-01 6.917278766632080078e-01 7.151960134506225586e-01 1.000000000000000000e+00 -5.936274528503417969e-01 6.964460015296936035e-01 7.186273932456970215e-01 1.000000000000000000e+00 -5.970588326454162598e-01 7.011641263961791992e-01 7.220587730407714844e-01 1.000000000000000000e+00 -6.004902124404907227e-01 7.058823108673095703e-01 7.254901528358459473e-01 1.000000000000000000e+00 -6.039215922355651855e-01 7.106004357337951660e-01 7.289215326309204102e-01 1.000000000000000000e+00 -6.073529124259948730e-01 7.153185606002807617e-01 7.323528528213500977e-01 1.000000000000000000e+00 -6.107842922210693359e-01 7.200366854667663574e-01 7.357842326164245605e-01 1.000000000000000000e+00 -6.142156720161437988e-01 7.247548103332519531e-01 7.392156124114990234e-01 1.000000000000000000e+00 -6.176470518112182617e-01 7.294729351997375488e-01 7.426469922065734863e-01 1.000000000000000000e+00 -6.210784316062927246e-01 7.341911196708679199e-01 7.460783720016479492e-01 1.000000000000000000e+00 -6.245098114013671875e-01 7.389092445373535156e-01 7.495097517967224121e-01 1.000000000000000000e+00 -6.279411911964416504e-01 7.436273694038391113e-01 7.529411315917968750e-01 1.000000000000000000e+00 -6.313725709915161133e-01 7.483454942703247070e-01 7.563725113868713379e-01 1.000000000000000000e+00 -6.348039507865905762e-01 7.530636191368103027e-01 7.598038911819458008e-01 1.000000000000000000e+00 -6.382352709770202637e-01 7.577818036079406738e-01 7.632352113723754883e-01 1.000000000000000000e+00 -6.416666507720947266e-01 7.624999284744262695e-01 7.666665911674499512e-01 1.000000000000000000e+00 -6.450980305671691895e-01 7.672180533409118652e-01 7.700979709625244141e-01 1.000000000000000000e+00 -6.485294103622436523e-01 7.719361782073974609e-01 7.735293507575988770e-01 1.000000000000000000e+00 -6.519607901573181152e-01 7.766543030738830566e-01 7.769607305526733398e-01 1.000000000000000000e+00 -6.568626165390014648e-01 7.803921699523925781e-01 7.803921103477478027e-01 1.000000000000000000e+00 -6.622241139411926270e-01 7.838235497474670410e-01 7.838234901428222656e-01 1.000000000000000000e+00 -6.675856709480285645e-01 7.872549295425415039e-01 7.872548699378967285e-01 1.000000000000000000e+00 -6.729471683502197266e-01 7.906862497329711914e-01 7.906862497329711914e-01 1.000000000000000000e+00 -6.783087253570556641e-01 7.941176295280456543e-01 7.941176295280456543e-01 1.000000000000000000e+00 -6.836702227592468262e-01 7.975490093231201172e-01 7.975489497184753418e-01 1.000000000000000000e+00 -6.890317797660827637e-01 8.009803891181945801e-01 8.009803295135498047e-01 1.000000000000000000e+00 -6.943932771682739258e-01 8.044117689132690430e-01 8.044117093086242676e-01 1.000000000000000000e+00 -6.997547745704650879e-01 8.078431487083435059e-01 8.078430891036987305e-01 1.000000000000000000e+00 -7.051163315773010254e-01 8.112745285034179688e-01 8.112744688987731934e-01 1.000000000000000000e+00 -7.104778289794921875e-01 8.147059082984924316e-01 8.147058486938476562e-01 1.000000000000000000e+00 -7.158393859863281250e-01 8.181372284889221191e-01 8.181372284889221191e-01 1.000000000000000000e+00 -7.212008833885192871e-01 8.215686082839965820e-01 8.215686082839965820e-01 1.000000000000000000e+00 -7.265623807907104492e-01 8.249999880790710449e-01 8.249999880790710449e-01 1.000000000000000000e+00 -7.319239377975463867e-01 8.284313678741455078e-01 8.284313082695007324e-01 1.000000000000000000e+00 -7.372854351997375488e-01 8.318627476692199707e-01 8.318626880645751953e-01 1.000000000000000000e+00 -7.426469922065734863e-01 8.352941274642944336e-01 8.352940678596496582e-01 1.000000000000000000e+00 -7.480084896087646484e-01 8.387255072593688965e-01 8.387254476547241211e-01 1.000000000000000000e+00 -7.533699870109558105e-01 8.421568870544433594e-01 8.421568274497985840e-01 1.000000000000000000e+00 -7.587315440177917480e-01 8.455882072448730469e-01 8.455882072448730469e-01 1.000000000000000000e+00 -7.640930414199829102e-01 8.490195870399475098e-01 8.490195870399475098e-01 1.000000000000000000e+00 -7.694545984268188477e-01 8.524509668350219727e-01 8.524509668350219727e-01 1.000000000000000000e+00 -7.748160958290100098e-01 8.558823466300964355e-01 8.558823466300964355e-01 1.000000000000000000e+00 -7.801775932312011719e-01 8.593137264251708984e-01 8.593136668205261230e-01 1.000000000000000000e+00 -7.855391502380371094e-01 8.627451062202453613e-01 8.627450466156005859e-01 1.000000000000000000e+00 -7.909006476402282715e-01 8.661764860153198242e-01 8.661764264106750488e-01 1.000000000000000000e+00 -7.962622046470642090e-01 8.696078658103942871e-01 8.696078062057495117e-01 1.000000000000000000e+00 -8.016237020492553711e-01 8.730391860008239746e-01 8.730391860008239746e-01 1.000000000000000000e+00 -8.069851994514465332e-01 8.764705657958984375e-01 8.764705657958984375e-01 1.000000000000000000e+00 -8.123467564582824707e-01 8.799019455909729004e-01 8.799019455909729004e-01 1.000000000000000000e+00 -8.177082538604736328e-01 8.833333253860473633e-01 8.833333253860473633e-01 1.000000000000000000e+00 -8.230698108673095703e-01 8.867647051811218262e-01 8.867647051811218262e-01 1.000000000000000000e+00 -8.284313082695007324e-01 8.901960849761962891e-01 8.901960253715515137e-01 1.000000000000000000e+00 -8.337928056716918945e-01 8.936274647712707520e-01 8.936274051666259766e-01 1.000000000000000000e+00 -8.391543626785278320e-01 8.970588445663452148e-01 8.970587849617004395e-01 1.000000000000000000e+00 -8.445158600807189941e-01 9.004902243614196777e-01 9.004901647567749023e-01 1.000000000000000000e+00 -8.498774170875549316e-01 9.039215445518493652e-01 9.039215445518493652e-01 1.000000000000000000e+00 -8.552389144897460938e-01 9.073529243469238281e-01 9.073529243469238281e-01 1.000000000000000000e+00 -8.606004118919372559e-01 9.107843041419982910e-01 9.107843041419982910e-01 1.000000000000000000e+00 -8.659619688987731934e-01 9.142156839370727539e-01 9.142156839370727539e-01 1.000000000000000000e+00 -8.713234663009643555e-01 9.176470637321472168e-01 9.176470637321472168e-01 1.000000000000000000e+00 -8.766850233078002930e-01 9.210784435272216797e-01 9.210783839225769043e-01 1.000000000000000000e+00 -8.820465207099914551e-01 9.245098233222961426e-01 9.245097637176513672e-01 1.000000000000000000e+00 -8.874080181121826172e-01 9.279412031173706055e-01 9.279411435127258301e-01 1.000000000000000000e+00 -8.927695751190185547e-01 9.313725233078002930e-01 9.313725233078002930e-01 1.000000000000000000e+00 -8.981310725212097168e-01 9.348039031028747559e-01 9.348039031028747559e-01 1.000000000000000000e+00 -9.034926295280456543e-01 9.382352828979492188e-01 9.382352828979492188e-01 1.000000000000000000e+00 -9.088541269302368164e-01 9.416666626930236816e-01 9.416666626930236816e-01 1.000000000000000000e+00 -9.142156839370727539e-01 9.450980424880981445e-01 9.450980424880981445e-01 1.000000000000000000e+00 -9.195771813392639160e-01 9.485294222831726074e-01 9.485294222831726074e-01 1.000000000000000000e+00 -9.249386787414550781e-01 9.519608020782470703e-01 9.519608020782470703e-01 1.000000000000000000e+00 -9.303002357482910156e-01 9.553921818733215332e-01 9.553921222686767578e-01 1.000000000000000000e+00 -9.356617331504821777e-01 9.588235020637512207e-01 9.588235020637512207e-01 1.000000000000000000e+00 -9.410232901573181152e-01 9.622548818588256836e-01 9.622548818588256836e-01 1.000000000000000000e+00 -9.463847875595092773e-01 9.656862616539001465e-01 9.656862616539001465e-01 1.000000000000000000e+00 -9.517462849617004395e-01 9.691176414489746094e-01 9.691176414489746094e-01 1.000000000000000000e+00 -9.571078419685363770e-01 9.725490212440490723e-01 9.725490212440490723e-01 1.000000000000000000e+00 -9.624693393707275391e-01 9.759804010391235352e-01 9.759804010391235352e-01 1.000000000000000000e+00 -9.678308963775634766e-01 9.794117808341979980e-01 9.794117808341979980e-01 1.000000000000000000e+00 -9.731923937797546387e-01 9.828431606292724609e-01 9.828431606292724609e-01 1.000000000000000000e+00 -9.785538911819458008e-01 9.862744808197021484e-01 9.862744808197021484e-01 1.000000000000000000e+00 -9.839154481887817383e-01 9.897058606147766113e-01 9.897058606147766113e-01 1.000000000000000000e+00 -9.892769455909729004e-01 9.931372404098510742e-01 9.931372404098510742e-01 1.000000000000000000e+00 -9.946385025978088379e-01 9.965686202049255371e-01 9.965686202049255371e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/brg b/fastplotlib/utils/colormaps/brg deleted file mode 100644 index 8ff668122..000000000 --- a/fastplotlib/utils/colormaps/brg +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.843137718737125397e-03 0.000000000000000000e+00 9.921568632125854492e-01 1.000000000000000000e+00 -1.568627543747425079e-02 0.000000000000000000e+00 9.843137264251708984e-01 1.000000000000000000e+00 -2.352941222488880157e-02 0.000000000000000000e+00 9.764705896377563477e-01 1.000000000000000000e+00 -3.137255087494850159e-02 0.000000000000000000e+00 9.686274528503417969e-01 1.000000000000000000e+00 -3.921568766236305237e-02 0.000000000000000000e+00 9.607843160629272461e-01 1.000000000000000000e+00 -4.705882444977760315e-02 0.000000000000000000e+00 9.529411792755126953e-01 1.000000000000000000e+00 -5.490196123719215393e-02 0.000000000000000000e+00 9.450980424880981445e-01 1.000000000000000000e+00 -6.274510174989700317e-02 0.000000000000000000e+00 9.372549057006835938e-01 1.000000000000000000e+00 -7.058823853731155396e-02 0.000000000000000000e+00 9.294117689132690430e-01 1.000000000000000000e+00 -7.843137532472610474e-02 0.000000000000000000e+00 9.215686321258544922e-01 1.000000000000000000e+00 -8.627451211214065552e-02 0.000000000000000000e+00 9.137254953384399414e-01 1.000000000000000000e+00 -9.411764889955520630e-02 0.000000000000000000e+00 9.058823585510253906e-01 1.000000000000000000e+00 -1.019607856869697571e-01 0.000000000000000000e+00 8.980392217636108398e-01 1.000000000000000000e+00 -1.098039224743843079e-01 0.000000000000000000e+00 8.901960849761962891e-01 1.000000000000000000e+00 -1.176470592617988586e-01 0.000000000000000000e+00 8.823529481887817383e-01 1.000000000000000000e+00 -1.254902034997940063e-01 0.000000000000000000e+00 8.745098114013671875e-01 1.000000000000000000e+00 -1.333333402872085571e-01 0.000000000000000000e+00 8.666666746139526367e-01 1.000000000000000000e+00 -1.411764770746231079e-01 0.000000000000000000e+00 8.588235378265380859e-01 1.000000000000000000e+00 -1.490196138620376587e-01 0.000000000000000000e+00 8.509804010391235352e-01 1.000000000000000000e+00 -1.568627506494522095e-01 0.000000000000000000e+00 8.431372642517089844e-01 1.000000000000000000e+00 -1.647058874368667603e-01 0.000000000000000000e+00 8.352941274642944336e-01 1.000000000000000000e+00 -1.725490242242813110e-01 0.000000000000000000e+00 8.274509906768798828e-01 1.000000000000000000e+00 -1.803921610116958618e-01 0.000000000000000000e+00 8.196078538894653320e-01 1.000000000000000000e+00 -1.882352977991104126e-01 0.000000000000000000e+00 8.117647171020507812e-01 1.000000000000000000e+00 -1.960784345865249634e-01 0.000000000000000000e+00 8.039215803146362305e-01 1.000000000000000000e+00 -2.039215713739395142e-01 0.000000000000000000e+00 7.960784435272216797e-01 1.000000000000000000e+00 -2.117647081613540649e-01 0.000000000000000000e+00 7.882353067398071289e-01 1.000000000000000000e+00 -2.196078449487686157e-01 0.000000000000000000e+00 7.803921699523925781e-01 1.000000000000000000e+00 -2.274509817361831665e-01 0.000000000000000000e+00 7.725490331649780273e-01 1.000000000000000000e+00 -2.352941185235977173e-01 0.000000000000000000e+00 7.647058963775634766e-01 1.000000000000000000e+00 -2.431372553110122681e-01 0.000000000000000000e+00 7.568627595901489258e-01 1.000000000000000000e+00 -2.509804069995880127e-01 0.000000000000000000e+00 7.490196228027343750e-01 1.000000000000000000e+00 -2.588235437870025635e-01 0.000000000000000000e+00 7.411764860153198242e-01 1.000000000000000000e+00 -2.666666805744171143e-01 0.000000000000000000e+00 7.333333492279052734e-01 1.000000000000000000e+00 -2.745098173618316650e-01 0.000000000000000000e+00 7.254902124404907227e-01 1.000000000000000000e+00 -2.823529541492462158e-01 0.000000000000000000e+00 7.176470756530761719e-01 1.000000000000000000e+00 -2.901960909366607666e-01 0.000000000000000000e+00 7.098039388656616211e-01 1.000000000000000000e+00 -2.980392277240753174e-01 0.000000000000000000e+00 7.019608020782470703e-01 1.000000000000000000e+00 -3.058823645114898682e-01 0.000000000000000000e+00 6.941176652908325195e-01 1.000000000000000000e+00 -3.137255012989044189e-01 0.000000000000000000e+00 6.862745285034179688e-01 1.000000000000000000e+00 -3.215686380863189697e-01 0.000000000000000000e+00 6.784313917160034180e-01 1.000000000000000000e+00 -3.294117748737335205e-01 0.000000000000000000e+00 6.705882549285888672e-01 1.000000000000000000e+00 -3.372549116611480713e-01 0.000000000000000000e+00 6.627451181411743164e-01 1.000000000000000000e+00 -3.450980484485626221e-01 0.000000000000000000e+00 6.549019813537597656e-01 1.000000000000000000e+00 -3.529411852359771729e-01 0.000000000000000000e+00 6.470588445663452148e-01 1.000000000000000000e+00 -3.607843220233917236e-01 0.000000000000000000e+00 6.392157077789306641e-01 1.000000000000000000e+00 -3.686274588108062744e-01 0.000000000000000000e+00 6.313725709915161133e-01 1.000000000000000000e+00 -3.764705955982208252e-01 0.000000000000000000e+00 6.235294342041015625e-01 1.000000000000000000e+00 -3.843137323856353760e-01 0.000000000000000000e+00 6.156862974166870117e-01 1.000000000000000000e+00 -3.921568691730499268e-01 0.000000000000000000e+00 6.078431606292724609e-01 1.000000000000000000e+00 -4.000000059604644775e-01 0.000000000000000000e+00 6.000000238418579102e-01 1.000000000000000000e+00 -4.078431427478790283e-01 0.000000000000000000e+00 5.921568870544433594e-01 1.000000000000000000e+00 -4.156862795352935791e-01 0.000000000000000000e+00 5.843137502670288086e-01 1.000000000000000000e+00 -4.235294163227081299e-01 0.000000000000000000e+00 5.764706134796142578e-01 1.000000000000000000e+00 -4.313725531101226807e-01 0.000000000000000000e+00 5.686274766921997070e-01 1.000000000000000000e+00 -4.392156898975372314e-01 0.000000000000000000e+00 5.607843399047851562e-01 1.000000000000000000e+00 -4.470588266849517822e-01 0.000000000000000000e+00 5.529412031173706055e-01 1.000000000000000000e+00 -4.549019634723663330e-01 0.000000000000000000e+00 5.450980663299560547e-01 1.000000000000000000e+00 -4.627451002597808838e-01 0.000000000000000000e+00 5.372549295425415039e-01 1.000000000000000000e+00 -4.705882370471954346e-01 0.000000000000000000e+00 5.294117927551269531e-01 1.000000000000000000e+00 -4.784313738346099854e-01 0.000000000000000000e+00 5.215686559677124023e-01 1.000000000000000000e+00 -4.862745106220245361e-01 0.000000000000000000e+00 5.137255191802978516e-01 1.000000000000000000e+00 -4.941176474094390869e-01 0.000000000000000000e+00 5.058823823928833008e-01 1.000000000000000000e+00 -5.019608139991760254e-01 0.000000000000000000e+00 4.980392158031463623e-01 1.000000000000000000e+00 -5.098039507865905762e-01 0.000000000000000000e+00 4.901960790157318115e-01 1.000000000000000000e+00 -5.176470875740051270e-01 0.000000000000000000e+00 4.823529422283172607e-01 1.000000000000000000e+00 -5.254902243614196777e-01 0.000000000000000000e+00 4.745098054409027100e-01 1.000000000000000000e+00 -5.333333611488342285e-01 0.000000000000000000e+00 4.666666686534881592e-01 1.000000000000000000e+00 -5.411764979362487793e-01 0.000000000000000000e+00 4.588235318660736084e-01 1.000000000000000000e+00 -5.490196347236633301e-01 0.000000000000000000e+00 4.509803950786590576e-01 1.000000000000000000e+00 -5.568627715110778809e-01 0.000000000000000000e+00 4.431372582912445068e-01 1.000000000000000000e+00 -5.647059082984924316e-01 0.000000000000000000e+00 4.352941215038299561e-01 1.000000000000000000e+00 -5.725490450859069824e-01 0.000000000000000000e+00 4.274509847164154053e-01 1.000000000000000000e+00 -5.803921818733215332e-01 0.000000000000000000e+00 4.196078479290008545e-01 1.000000000000000000e+00 -5.882353186607360840e-01 0.000000000000000000e+00 4.117647111415863037e-01 1.000000000000000000e+00 -5.960784554481506348e-01 0.000000000000000000e+00 4.039215743541717529e-01 1.000000000000000000e+00 -6.039215922355651855e-01 0.000000000000000000e+00 3.960784375667572021e-01 1.000000000000000000e+00 -6.117647290229797363e-01 0.000000000000000000e+00 3.882353007793426514e-01 1.000000000000000000e+00 -6.196078658103942871e-01 0.000000000000000000e+00 3.803921639919281006e-01 1.000000000000000000e+00 -6.274510025978088379e-01 0.000000000000000000e+00 3.725490272045135498e-01 1.000000000000000000e+00 -6.352941393852233887e-01 0.000000000000000000e+00 3.647058904170989990e-01 1.000000000000000000e+00 -6.431372761726379395e-01 0.000000000000000000e+00 3.568627536296844482e-01 1.000000000000000000e+00 -6.509804129600524902e-01 0.000000000000000000e+00 3.490196168422698975e-01 1.000000000000000000e+00 -6.588235497474670410e-01 0.000000000000000000e+00 3.411764800548553467e-01 1.000000000000000000e+00 -6.666666865348815918e-01 0.000000000000000000e+00 3.333333432674407959e-01 1.000000000000000000e+00 -6.745098233222961426e-01 0.000000000000000000e+00 3.254902064800262451e-01 1.000000000000000000e+00 -6.823529601097106934e-01 0.000000000000000000e+00 3.176470696926116943e-01 1.000000000000000000e+00 -6.901960968971252441e-01 0.000000000000000000e+00 3.098039329051971436e-01 1.000000000000000000e+00 -6.980392336845397949e-01 0.000000000000000000e+00 3.019607961177825928e-01 1.000000000000000000e+00 -7.058823704719543457e-01 0.000000000000000000e+00 2.941176593303680420e-01 1.000000000000000000e+00 -7.137255072593688965e-01 0.000000000000000000e+00 2.862745225429534912e-01 1.000000000000000000e+00 -7.215686440467834473e-01 0.000000000000000000e+00 2.784313857555389404e-01 1.000000000000000000e+00 -7.294117808341979980e-01 0.000000000000000000e+00 2.705882489681243896e-01 1.000000000000000000e+00 -7.372549176216125488e-01 0.000000000000000000e+00 2.627451121807098389e-01 1.000000000000000000e+00 -7.450980544090270996e-01 0.000000000000000000e+00 2.549019753932952881e-01 1.000000000000000000e+00 -7.529411911964416504e-01 0.000000000000000000e+00 2.470588237047195435e-01 1.000000000000000000e+00 -7.607843279838562012e-01 0.000000000000000000e+00 2.392156869173049927e-01 1.000000000000000000e+00 -7.686274647712707520e-01 0.000000000000000000e+00 2.313725501298904419e-01 1.000000000000000000e+00 -7.764706015586853027e-01 0.000000000000000000e+00 2.235294133424758911e-01 1.000000000000000000e+00 -7.843137383460998535e-01 0.000000000000000000e+00 2.156862765550613403e-01 1.000000000000000000e+00 -7.921568751335144043e-01 0.000000000000000000e+00 2.078431397676467896e-01 1.000000000000000000e+00 -8.000000119209289551e-01 0.000000000000000000e+00 2.000000029802322388e-01 1.000000000000000000e+00 -8.078431487083435059e-01 0.000000000000000000e+00 1.921568661928176880e-01 1.000000000000000000e+00 -8.156862854957580566e-01 0.000000000000000000e+00 1.843137294054031372e-01 1.000000000000000000e+00 -8.235294222831726074e-01 0.000000000000000000e+00 1.764705926179885864e-01 1.000000000000000000e+00 -8.313725590705871582e-01 0.000000000000000000e+00 1.686274558305740356e-01 1.000000000000000000e+00 -8.392156958580017090e-01 0.000000000000000000e+00 1.607843190431594849e-01 1.000000000000000000e+00 -8.470588326454162598e-01 0.000000000000000000e+00 1.529411822557449341e-01 1.000000000000000000e+00 -8.549019694328308105e-01 0.000000000000000000e+00 1.450980454683303833e-01 1.000000000000000000e+00 -8.627451062202453613e-01 0.000000000000000000e+00 1.372549086809158325e-01 1.000000000000000000e+00 -8.705882430076599121e-01 0.000000000000000000e+00 1.294117718935012817e-01 1.000000000000000000e+00 -8.784313797950744629e-01 0.000000000000000000e+00 1.215686276555061340e-01 1.000000000000000000e+00 -8.862745165824890137e-01 0.000000000000000000e+00 1.137254908680915833e-01 1.000000000000000000e+00 -8.941176533699035645e-01 0.000000000000000000e+00 1.058823540806770325e-01 1.000000000000000000e+00 -9.019607901573181152e-01 0.000000000000000000e+00 9.803921729326248169e-02 1.000000000000000000e+00 -9.098039269447326660e-01 0.000000000000000000e+00 9.019608050584793091e-02 1.000000000000000000e+00 -9.176470637321472168e-01 0.000000000000000000e+00 8.235294371843338013e-02 1.000000000000000000e+00 -9.254902005195617676e-01 0.000000000000000000e+00 7.450980693101882935e-02 1.000000000000000000e+00 -9.333333373069763184e-01 0.000000000000000000e+00 6.666667014360427856e-02 1.000000000000000000e+00 -9.411764740943908691e-01 0.000000000000000000e+00 5.882352963089942932e-02 1.000000000000000000e+00 -9.490196108818054199e-01 0.000000000000000000e+00 5.098039284348487854e-02 1.000000000000000000e+00 -9.568627476692199707e-01 0.000000000000000000e+00 4.313725605607032776e-02 1.000000000000000000e+00 -9.647058844566345215e-01 0.000000000000000000e+00 3.529411926865577698e-02 1.000000000000000000e+00 -9.725490212440490723e-01 0.000000000000000000e+00 2.745098061859607697e-02 1.000000000000000000e+00 -9.803921580314636230e-01 0.000000000000000000e+00 1.960784383118152618e-02 1.000000000000000000e+00 -9.882352948188781738e-01 0.000000000000000000e+00 1.176470611244440079e-02 1.000000000000000000e+00 -9.960784316062927246e-01 0.000000000000000000e+00 3.921568859368562698e-03 1.000000000000000000e+00 -9.960784316062927246e-01 3.921568859368562698e-03 0.000000000000000000e+00 1.000000000000000000e+00 -9.882352948188781738e-01 1.176470611244440079e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.803921580314636230e-01 1.960784383118152618e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.725490212440490723e-01 2.745098061859607697e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.647058844566345215e-01 3.529411926865577698e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.568627476692199707e-01 4.313725605607032776e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.490196108818054199e-01 5.098039284348487854e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.411764740943908691e-01 5.882352963089942932e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.333333373069763184e-01 6.666667014360427856e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.254902005195617676e-01 7.450980693101882935e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.176470637321472168e-01 8.235294371843338013e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.098039269447326660e-01 9.019608050584793091e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.019607901573181152e-01 9.803921729326248169e-02 0.000000000000000000e+00 1.000000000000000000e+00 -8.941176533699035645e-01 1.058823540806770325e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.862745165824890137e-01 1.137254908680915833e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.784313797950744629e-01 1.215686276555061340e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.705882430076599121e-01 1.294117718935012817e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.627451062202453613e-01 1.372549086809158325e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.549019694328308105e-01 1.450980454683303833e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.470588326454162598e-01 1.529411822557449341e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.392156958580017090e-01 1.607843190431594849e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.313725590705871582e-01 1.686274558305740356e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.235294222831726074e-01 1.764705926179885864e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.156862854957580566e-01 1.843137294054031372e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.078431487083435059e-01 1.921568661928176880e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.000000119209289551e-01 2.000000029802322388e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.921568751335144043e-01 2.078431397676467896e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.843137383460998535e-01 2.156862765550613403e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.764706015586853027e-01 2.235294133424758911e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.686274647712707520e-01 2.313725501298904419e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.607843279838562012e-01 2.392156869173049927e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.529411911964416504e-01 2.470588237047195435e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.450980544090270996e-01 2.549019753932952881e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.372549176216125488e-01 2.627451121807098389e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.294117808341979980e-01 2.705882489681243896e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.215686440467834473e-01 2.784313857555389404e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.137255072593688965e-01 2.862745225429534912e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.058823704719543457e-01 2.941176593303680420e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.980392336845397949e-01 3.019607961177825928e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.901960968971252441e-01 3.098039329051971436e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.823529601097106934e-01 3.176470696926116943e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.745098233222961426e-01 3.254902064800262451e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.666666865348815918e-01 3.333333432674407959e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.588235497474670410e-01 3.411764800548553467e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.509804129600524902e-01 3.490196168422698975e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.431372761726379395e-01 3.568627536296844482e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.352941393852233887e-01 3.647058904170989990e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.274510025978088379e-01 3.725490272045135498e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.196078658103942871e-01 3.803921639919281006e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.117647290229797363e-01 3.882353007793426514e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.039215922355651855e-01 3.960784375667572021e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.960784554481506348e-01 4.039215743541717529e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.882353186607360840e-01 4.117647111415863037e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.803921818733215332e-01 4.196078479290008545e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.725490450859069824e-01 4.274509847164154053e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.647059082984924316e-01 4.352941215038299561e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.568627715110778809e-01 4.431372582912445068e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.490196347236633301e-01 4.509803950786590576e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.411764979362487793e-01 4.588235318660736084e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.333333611488342285e-01 4.666666686534881592e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.254902243614196777e-01 4.745098054409027100e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.176470875740051270e-01 4.823529422283172607e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.098039507865905762e-01 4.901960790157318115e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.019608139991760254e-01 4.980392158031463623e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.941176474094390869e-01 5.058823823928833008e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.862745106220245361e-01 5.137255191802978516e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.784313738346099854e-01 5.215686559677124023e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.705882370471954346e-01 5.294117927551269531e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.627451002597808838e-01 5.372549295425415039e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.549019634723663330e-01 5.450980663299560547e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.470588266849517822e-01 5.529412031173706055e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.392156898975372314e-01 5.607843399047851562e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.313725531101226807e-01 5.686274766921997070e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.235294163227081299e-01 5.764706134796142578e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.156862795352935791e-01 5.843137502670288086e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.078431427478790283e-01 5.921568870544433594e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.000000059604644775e-01 6.000000238418579102e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.921568691730499268e-01 6.078431606292724609e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.843137323856353760e-01 6.156862974166870117e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.764705955982208252e-01 6.235294342041015625e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.686274588108062744e-01 6.313725709915161133e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.607843220233917236e-01 6.392157077789306641e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.529411852359771729e-01 6.470588445663452148e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.450980484485626221e-01 6.549019813537597656e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.372549116611480713e-01 6.627451181411743164e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.294117748737335205e-01 6.705882549285888672e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.215686380863189697e-01 6.784313917160034180e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.137255012989044189e-01 6.862745285034179688e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.058823645114898682e-01 6.941176652908325195e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.980392277240753174e-01 7.019608020782470703e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.901960909366607666e-01 7.098039388656616211e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.823529541492462158e-01 7.176470756530761719e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.745098173618316650e-01 7.254902124404907227e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.666666805744171143e-01 7.333333492279052734e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.588235437870025635e-01 7.411764860153198242e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.509804069995880127e-01 7.490196228027343750e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.431372553110122681e-01 7.568627595901489258e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.352941185235977173e-01 7.647058963775634766e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.274509817361831665e-01 7.725490331649780273e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.196078449487686157e-01 7.803921699523925781e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.117647081613540649e-01 7.882353067398071289e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.039215713739395142e-01 7.960784435272216797e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.960784345865249634e-01 8.039215803146362305e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.882352977991104126e-01 8.117647171020507812e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.803921610116958618e-01 8.196078538894653320e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.725490242242813110e-01 8.274509906768798828e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.647058874368667603e-01 8.352941274642944336e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.568627506494522095e-01 8.431372642517089844e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.490196138620376587e-01 8.509804010391235352e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.411764770746231079e-01 8.588235378265380859e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.333333402872085571e-01 8.666666746139526367e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.254902034997940063e-01 8.745098114013671875e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.176470592617988586e-01 8.823529481887817383e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.098039224743843079e-01 8.901960849761962891e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.019607856869697571e-01 8.980392217636108398e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.411764889955520630e-02 9.058823585510253906e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.627451211214065552e-02 9.137254953384399414e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.843137532472610474e-02 9.215686321258544922e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.058823853731155396e-02 9.294117689132690430e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.274510174989700317e-02 9.372549057006835938e-01 0.000000000000000000e+00 1.000000000000000000e+00 -5.490196123719215393e-02 9.450980424880981445e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.705882444977760315e-02 9.529411792755126953e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.921568766236305237e-02 9.607843160629272461e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.137255087494850159e-02 9.686274528503417969e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.352941222488880157e-02 9.764705896377563477e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.568627543747425079e-02 9.843137264251708984e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.843137718737125397e-03 9.921568632125854492e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/bwr b/fastplotlib/utils/colormaps/bwr deleted file mode 100644 index 5cfe14afb..000000000 --- a/fastplotlib/utils/colormaps/bwr +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.843137718737125397e-03 7.843137718737125397e-03 1.000000000000000000e+00 1.000000000000000000e+00 -1.568627543747425079e-02 1.568627543747425079e-02 1.000000000000000000e+00 1.000000000000000000e+00 -2.352941222488880157e-02 2.352941222488880157e-02 1.000000000000000000e+00 1.000000000000000000e+00 -3.137255087494850159e-02 3.137255087494850159e-02 1.000000000000000000e+00 1.000000000000000000e+00 -3.921568766236305237e-02 3.921568766236305237e-02 1.000000000000000000e+00 1.000000000000000000e+00 -4.705882444977760315e-02 4.705882444977760315e-02 1.000000000000000000e+00 1.000000000000000000e+00 -5.490196123719215393e-02 5.490196123719215393e-02 1.000000000000000000e+00 1.000000000000000000e+00 -6.274510174989700317e-02 6.274510174989700317e-02 1.000000000000000000e+00 1.000000000000000000e+00 -7.058823853731155396e-02 7.058823853731155396e-02 1.000000000000000000e+00 1.000000000000000000e+00 -7.843137532472610474e-02 7.843137532472610474e-02 1.000000000000000000e+00 1.000000000000000000e+00 -8.627451211214065552e-02 8.627451211214065552e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.411764889955520630e-02 9.411764889955520630e-02 1.000000000000000000e+00 1.000000000000000000e+00 -1.019607856869697571e-01 1.019607856869697571e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.098039224743843079e-01 1.098039224743843079e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.176470592617988586e-01 1.176470592617988586e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.254902034997940063e-01 1.254902034997940063e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.333333402872085571e-01 1.333333402872085571e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.411764770746231079e-01 1.411764770746231079e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.490196138620376587e-01 1.490196138620376587e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.568627506494522095e-01 1.568627506494522095e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.647058874368667603e-01 1.647058874368667603e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.725490242242813110e-01 1.725490242242813110e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.803921610116958618e-01 1.803921610116958618e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.882352977991104126e-01 1.882352977991104126e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.960784345865249634e-01 1.960784345865249634e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.039215713739395142e-01 2.039215713739395142e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.117647081613540649e-01 2.117647081613540649e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.196078449487686157e-01 2.196078449487686157e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.274509817361831665e-01 2.274509817361831665e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.352941185235977173e-01 2.352941185235977173e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.431372553110122681e-01 2.431372553110122681e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.509804069995880127e-01 2.509804069995880127e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.588235437870025635e-01 2.588235437870025635e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.666666805744171143e-01 2.666666805744171143e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.745098173618316650e-01 2.745098173618316650e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.823529541492462158e-01 2.823529541492462158e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.901960909366607666e-01 2.901960909366607666e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.980392277240753174e-01 2.980392277240753174e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.058823645114898682e-01 3.058823645114898682e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.137255012989044189e-01 3.137255012989044189e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.215686380863189697e-01 3.215686380863189697e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.294117748737335205e-01 3.294117748737335205e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.372549116611480713e-01 3.372549116611480713e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.450980484485626221e-01 3.450980484485626221e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.529411852359771729e-01 3.529411852359771729e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.607843220233917236e-01 3.607843220233917236e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.686274588108062744e-01 3.686274588108062744e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.764705955982208252e-01 3.764705955982208252e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.843137323856353760e-01 3.843137323856353760e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.921568691730499268e-01 3.921568691730499268e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.000000059604644775e-01 4.000000059604644775e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.078431427478790283e-01 4.078431427478790283e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.156862795352935791e-01 4.156862795352935791e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.235294163227081299e-01 4.235294163227081299e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.313725531101226807e-01 4.313725531101226807e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.392156898975372314e-01 4.392156898975372314e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.470588266849517822e-01 4.470588266849517822e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.549019634723663330e-01 4.549019634723663330e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.627451002597808838e-01 4.627451002597808838e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.705882370471954346e-01 4.705882370471954346e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.784313738346099854e-01 4.784313738346099854e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.862745106220245361e-01 4.862745106220245361e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.941176474094390869e-01 4.941176474094390869e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.019608139991760254e-01 5.019608139991760254e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.098039507865905762e-01 5.098039507865905762e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.176470875740051270e-01 5.176470875740051270e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.254902243614196777e-01 5.254902243614196777e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.333333611488342285e-01 5.333333611488342285e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.411764979362487793e-01 5.411764979362487793e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.490196347236633301e-01 5.490196347236633301e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.568627715110778809e-01 5.568627715110778809e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.647059082984924316e-01 5.647059082984924316e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.725490450859069824e-01 5.725490450859069824e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.803921818733215332e-01 5.803921818733215332e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.882353186607360840e-01 5.882353186607360840e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.960784554481506348e-01 5.960784554481506348e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.039215922355651855e-01 6.039215922355651855e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.117647290229797363e-01 6.117647290229797363e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.196078658103942871e-01 6.196078658103942871e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.274510025978088379e-01 6.274510025978088379e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.352941393852233887e-01 6.352941393852233887e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.431372761726379395e-01 6.431372761726379395e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.509804129600524902e-01 6.509804129600524902e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.588235497474670410e-01 6.588235497474670410e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.666666865348815918e-01 6.666666865348815918e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.745098233222961426e-01 6.745098233222961426e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.823529601097106934e-01 6.823529601097106934e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.901960968971252441e-01 6.901960968971252441e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.980392336845397949e-01 6.980392336845397949e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.058823704719543457e-01 7.058823704719543457e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.137255072593688965e-01 7.137255072593688965e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.215686440467834473e-01 7.215686440467834473e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.294117808341979980e-01 7.294117808341979980e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.372549176216125488e-01 7.372549176216125488e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.450980544090270996e-01 7.450980544090270996e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.529411911964416504e-01 7.529411911964416504e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.607843279838562012e-01 7.607843279838562012e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.686274647712707520e-01 7.686274647712707520e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.764706015586853027e-01 7.764706015586853027e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.843137383460998535e-01 7.843137383460998535e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.921568751335144043e-01 7.921568751335144043e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.000000119209289551e-01 8.000000119209289551e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.078431487083435059e-01 8.078431487083435059e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.156862854957580566e-01 8.156862854957580566e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.235294222831726074e-01 8.235294222831726074e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.313725590705871582e-01 8.313725590705871582e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.392156958580017090e-01 8.392156958580017090e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.470588326454162598e-01 8.470588326454162598e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.549019694328308105e-01 8.549019694328308105e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.627451062202453613e-01 8.627451062202453613e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.705882430076599121e-01 8.705882430076599121e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.784313797950744629e-01 8.784313797950744629e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.862745165824890137e-01 8.862745165824890137e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.941176533699035645e-01 8.941176533699035645e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.019607901573181152e-01 9.019607901573181152e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.098039269447326660e-01 9.098039269447326660e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.176470637321472168e-01 9.176470637321472168e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.254902005195617676e-01 9.254902005195617676e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.333333373069763184e-01 9.333333373069763184e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.411764740943908691e-01 9.411764740943908691e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.490196108818054199e-01 9.490196108818054199e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.568627476692199707e-01 9.568627476692199707e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.647058844566345215e-01 9.647058844566345215e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.725490212440490723e-01 9.725490212440490723e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.803921580314636230e-01 9.803921580314636230e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.882352948188781738e-01 9.882352948188781738e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.960784316062927246e-01 9.960784316062927246e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.960784316062927246e-01 9.960784316062927246e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.882352948188781738e-01 9.882352948188781738e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.803921580314636230e-01 9.803921580314636230e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.725490212440490723e-01 9.725490212440490723e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.647058844566345215e-01 9.647058844566345215e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.568627476692199707e-01 9.568627476692199707e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.490196108818054199e-01 9.490196108818054199e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.411764740943908691e-01 9.411764740943908691e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.333333373069763184e-01 9.333333373069763184e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.254902005195617676e-01 9.254902005195617676e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.176470637321472168e-01 9.176470637321472168e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.098039269447326660e-01 9.098039269447326660e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.019607901573181152e-01 9.019607901573181152e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.941176533699035645e-01 8.941176533699035645e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.862745165824890137e-01 8.862745165824890137e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.784313797950744629e-01 8.784313797950744629e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.705882430076599121e-01 8.705882430076599121e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.627451062202453613e-01 8.627451062202453613e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.549019694328308105e-01 8.549019694328308105e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.470588326454162598e-01 8.470588326454162598e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.392156958580017090e-01 8.392156958580017090e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.313725590705871582e-01 8.313725590705871582e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.235294222831726074e-01 8.235294222831726074e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.156862854957580566e-01 8.156862854957580566e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.078431487083435059e-01 8.078431487083435059e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.000000119209289551e-01 8.000000119209289551e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.921568751335144043e-01 7.921568751335144043e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.843137383460998535e-01 7.843137383460998535e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.764706015586853027e-01 7.764706015586853027e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.686274647712707520e-01 7.686274647712707520e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.607843279838562012e-01 7.607843279838562012e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.529411911964416504e-01 7.529411911964416504e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.450980544090270996e-01 7.450980544090270996e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.372549176216125488e-01 7.372549176216125488e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.294117808341979980e-01 7.294117808341979980e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.215686440467834473e-01 7.215686440467834473e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.137255072593688965e-01 7.137255072593688965e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.058823704719543457e-01 7.058823704719543457e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.980392336845397949e-01 6.980392336845397949e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.901960968971252441e-01 6.901960968971252441e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.823529601097106934e-01 6.823529601097106934e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.745098233222961426e-01 6.745098233222961426e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.666666865348815918e-01 6.666666865348815918e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.588235497474670410e-01 6.588235497474670410e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.509804129600524902e-01 6.509804129600524902e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.431372761726379395e-01 6.431372761726379395e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.352941393852233887e-01 6.352941393852233887e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.274510025978088379e-01 6.274510025978088379e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.196078658103942871e-01 6.196078658103942871e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.117647290229797363e-01 6.117647290229797363e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.039215922355651855e-01 6.039215922355651855e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.960784554481506348e-01 5.960784554481506348e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.882353186607360840e-01 5.882353186607360840e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.803921818733215332e-01 5.803921818733215332e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.725490450859069824e-01 5.725490450859069824e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.647059082984924316e-01 5.647059082984924316e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.568627715110778809e-01 5.568627715110778809e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.490196347236633301e-01 5.490196347236633301e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.411764979362487793e-01 5.411764979362487793e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.333333611488342285e-01 5.333333611488342285e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.254902243614196777e-01 5.254902243614196777e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.176470875740051270e-01 5.176470875740051270e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.098039507865905762e-01 5.098039507865905762e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.019608139991760254e-01 5.019608139991760254e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.941176474094390869e-01 4.941176474094390869e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.862745106220245361e-01 4.862745106220245361e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.784313738346099854e-01 4.784313738346099854e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.705882370471954346e-01 4.705882370471954346e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.627451002597808838e-01 4.627451002597808838e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.549019634723663330e-01 4.549019634723663330e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.470588266849517822e-01 4.470588266849517822e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.392156898975372314e-01 4.392156898975372314e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.313725531101226807e-01 4.313725531101226807e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.235294163227081299e-01 4.235294163227081299e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.156862795352935791e-01 4.156862795352935791e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.078431427478790283e-01 4.078431427478790283e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.000000059604644775e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.921568691730499268e-01 3.921568691730499268e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.843137323856353760e-01 3.843137323856353760e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.764705955982208252e-01 3.764705955982208252e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.686274588108062744e-01 3.686274588108062744e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.607843220233917236e-01 3.607843220233917236e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.529411852359771729e-01 3.529411852359771729e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.450980484485626221e-01 3.450980484485626221e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.372549116611480713e-01 3.372549116611480713e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.294117748737335205e-01 3.294117748737335205e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.215686380863189697e-01 3.215686380863189697e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.137255012989044189e-01 3.137255012989044189e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.058823645114898682e-01 3.058823645114898682e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.980392277240753174e-01 2.980392277240753174e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.901960909366607666e-01 2.901960909366607666e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.823529541492462158e-01 2.823529541492462158e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.745098173618316650e-01 2.745098173618316650e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.666666805744171143e-01 2.666666805744171143e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.588235437870025635e-01 2.588235437870025635e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.509804069995880127e-01 2.509804069995880127e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.431372553110122681e-01 2.431372553110122681e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.352941185235977173e-01 2.352941185235977173e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.274509817361831665e-01 2.274509817361831665e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.196078449487686157e-01 2.196078449487686157e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.117647081613540649e-01 2.117647081613540649e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.039215713739395142e-01 2.039215713739395142e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.960784345865249634e-01 1.960784345865249634e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.882352977991104126e-01 1.882352977991104126e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.803921610116958618e-01 1.803921610116958618e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.725490242242813110e-01 1.725490242242813110e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.647058874368667603e-01 1.647058874368667603e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.568627506494522095e-01 1.568627506494522095e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.490196138620376587e-01 1.490196138620376587e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.411764770746231079e-01 1.411764770746231079e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.333333402872085571e-01 1.333333402872085571e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.254902034997940063e-01 1.254902034997940063e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.176470592617988586e-01 1.176470592617988586e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.098039224743843079e-01 1.098039224743843079e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.019607856869697571e-01 1.019607856869697571e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.411764889955520630e-02 9.411764889955520630e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.627451211214065552e-02 8.627451211214065552e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.843137532472610474e-02 7.843137532472610474e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.058823853731155396e-02 7.058823853731155396e-02 1.000000000000000000e+00 -1.000000000000000000e+00 6.274510174989700317e-02 6.274510174989700317e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.490196123719215393e-02 5.490196123719215393e-02 1.000000000000000000e+00 -1.000000000000000000e+00 4.705882444977760315e-02 4.705882444977760315e-02 1.000000000000000000e+00 -1.000000000000000000e+00 3.921568766236305237e-02 3.921568766236305237e-02 1.000000000000000000e+00 -1.000000000000000000e+00 3.137255087494850159e-02 3.137255087494850159e-02 1.000000000000000000e+00 -1.000000000000000000e+00 2.352941222488880157e-02 2.352941222488880157e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.568627543747425079e-02 1.568627543747425079e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.843137718737125397e-03 7.843137718737125397e-03 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/cividis b/fastplotlib/utils/colormaps/cividis deleted file mode 100644 index 30005ec22..000000000 --- a/fastplotlib/utils/colormaps/cividis +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 1.351120024919509888e-01 3.047510087490081787e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.380680054426193237e-01 3.111050128936767578e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.410129964351654053e-01 3.175790011882781982e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.439509987831115723e-01 3.239820003509521484e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.468770056962966919e-01 3.304789960384368896e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.497910022735595703e-01 3.370650112628936768e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.526730060577392578e-01 3.437039852142333984e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.553770005702972412e-01 3.504999876022338867e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.579319983720779419e-01 3.575209975242614746e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.604949980974197388e-01 3.645339906215667725e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.630579978227615356e-01 3.716079890727996826e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.656209975481033325e-01 3.787690103054046631e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.682039946317672729e-01 3.859019875526428223e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.708000004291534424e-01 3.930999934673309326e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.734199970960617065e-01 4.003530144691467285e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.760820001363754272e-01 4.075770080089569092e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.788019984960556030e-01 4.147639870643615723e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.816100031137466431e-01 4.218589961528778076e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.845500022172927856e-01 4.288020133972167969e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.869149953126907349e-01 4.355320036411285400e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.887689977884292603e-01 4.395630061626434326e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.909500062465667725e-01 4.410850107669830322e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.933660060167312622e-01 4.415610134601593018e-01 1.000000000000000000e+00 -3.601999953389167786e-03 1.959110051393508911e-01 4.415639936923980713e-01 1.000000000000000000e+00 -1.785200089216232300e-02 1.985280066728591919e-01 4.412479996681213379e-01 1.000000000000000000e+00 -3.210999816656112671e-02 2.011989951133728027e-01 4.407849907875061035e-01 1.000000000000000000e+00 -4.620499908924102783e-02 2.039030045270919800e-01 4.401960074901580811e-01 1.000000000000000000e+00 -5.837799981236457825e-02 2.066289931535720825e-01 4.395309984683990479e-01 1.000000000000000000e+00 -6.896799802780151367e-02 2.093719989061355591e-01 4.388630092144012451e-01 1.000000000000000000e+00 -7.862400263547897339e-02 2.121219933032989502e-01 4.381049871444702148e-01 1.000000000000000000e+00 -8.746500313282012939e-02 2.148790061473846436e-01 4.373419880867004395e-01 1.000000000000000000e+00 -9.564500302076339722e-02 2.176429927349090576e-01 4.365929961204528809e-01 1.000000000000000000e+00 -1.034009978175163269e-01 2.204059958457946777e-01 4.357900023460388184e-01 1.000000000000000000e+00 -1.106579974293708801e-01 2.231699973344802856e-01 4.350669980049133301e-01 1.000000000000000000e+00 -1.176119968295097351e-01 2.259349972009658813e-01 4.343079924583435059e-01 1.000000000000000000e+00 -1.242910027503967285e-01 2.286970019340515137e-01 4.335469901561737061e-01 1.000000000000000000e+00 -1.306689977645874023e-01 2.314579933881759644e-01 4.328399896621704102e-01 1.000000000000000000e+00 -1.368300020694732666e-01 2.342160046100616455e-01 4.321480095386505127e-01 1.000000000000000000e+00 -1.428519934415817261e-01 2.369720041751861572e-01 4.314039945602416992e-01 1.000000000000000000e+00 -1.486379951238632202e-01 2.397239953279495239e-01 4.307520091533660889e-01 1.000000000000000000e+00 -1.542609930038452148e-01 2.424750030040740967e-01 4.301199913024902344e-01 1.000000000000000000e+00 -1.597329974174499512e-01 2.452210038900375366e-01 4.295279979705810547e-01 1.000000000000000000e+00 -1.651130020618438721e-01 2.479649931192398071e-01 4.289079904556274414e-01 1.000000000000000000e+00 -1.703619956970214844e-01 2.507070004940032959e-01 4.283249974250793457e-01 1.000000000000000000e+00 -1.754900068044662476e-01 2.534439861774444580e-01 4.277899861335754395e-01 1.000000000000000000e+00 -1.805029958486557007e-01 2.561799883842468262e-01 4.272989928722381592e-01 1.000000000000000000e+00 -1.854529976844787598e-01 2.589139938354492188e-01 4.267880022525787354e-01 1.000000000000000000e+00 -1.903029978275299072e-01 2.616440057754516602e-01 4.263289868831634521e-01 1.000000000000000000e+00 -1.950570046901702881e-01 2.643719911575317383e-01 4.259240031242370605e-01 1.000000000000000000e+00 -1.997639983892440796e-01 2.670989930629730225e-01 4.254969954490661621e-01 1.000000000000000000e+00 -2.043849974870681763e-01 2.698230147361755371e-01 4.251259863376617432e-01 1.000000000000000000e+00 -2.089260071516036987e-01 2.725459933280944824e-01 4.248090088367462158e-01 1.000000000000000000e+00 -2.134310007095336914e-01 2.752659916877746582e-01 4.244799911975860596e-01 1.000000000000000000e+00 -2.178629934787750244e-01 2.779850065708160400e-01 4.242059886455535889e-01 1.000000000000000000e+00 -2.222640067338943481e-01 2.807019948959350586e-01 4.239139854907989502e-01 1.000000000000000000e+00 -2.265979945659637451e-01 2.834190130233764648e-01 4.236780107021331787e-01 1.000000000000000000e+00 -2.308710068464279175e-01 2.861340045928955078e-01 4.234980046749114990e-01 1.000000000000000000e+00 -2.351199984550476074e-01 2.888480126857757568e-01 4.233039915561676025e-01 1.000000000000000000e+00 -2.393119931221008301e-01 2.915619909763336182e-01 4.231669902801513672e-01 1.000000000000000000e+00 -2.434850037097930908e-01 2.942740023136138916e-01 4.230139851570129395e-01 1.000000000000000000e+00 -2.476049959659576416e-01 2.969860136508941650e-01 4.229170083999633789e-01 1.000000000000000000e+00 -2.516750097274780273e-01 2.996979951858520508e-01 4.228729903697967529e-01 1.000000000000000000e+00 -2.557309865951538086e-01 3.024089932441711426e-01 4.228140115737915039e-01 1.000000000000000000e+00 -2.597399950027465820e-01 3.051199913024902344e-01 4.228099882602691650e-01 1.000000000000000000e+00 -2.637380063533782959e-01 3.078309893608093262e-01 4.227890074253082275e-01 1.000000000000000000e+00 -2.676930129528045654e-01 3.105419874191284180e-01 4.228209853172302246e-01 1.000000000000000000e+00 -2.716389894485473633e-01 3.132529854774475098e-01 4.228369891643524170e-01 1.000000000000000000e+00 -2.755129933357238770e-01 3.159649968147277832e-01 4.229789972305297852e-01 1.000000000000000000e+00 -2.794109880924224854e-01 3.186770081520080566e-01 4.230310022830963135e-01 1.000000000000000000e+00 -2.832399904727935791e-01 3.213900029659271240e-01 4.232110083103179932e-01 1.000000000000000000e+00 -2.870649993419647217e-01 3.241029977798461914e-01 4.233730137348175049e-01 1.000000000000000000e+00 -2.908839881420135498e-01 3.268159925937652588e-01 4.235169887542724609e-01 1.000000000000000000e+00 -2.946690022945404053e-01 3.295310139656066895e-01 4.237160086631774902e-01 1.000000000000000000e+00 -2.984209954738616943e-01 3.322469890117645264e-01 4.239729940891265869e-01 1.000000000000000000e+00 -3.021689951419830322e-01 3.349629938602447510e-01 4.242129921913146973e-01 1.000000000000000000e+00 -3.058860003948211670e-01 3.376809954643249512e-01 4.245119988918304443e-01 1.000000000000000000e+00 -3.096010088920593262e-01 3.403989970684051514e-01 4.247899949550628662e-01 1.000000000000000000e+00 -3.132869899272918701e-01 3.431200087070465088e-01 4.251199960708618164e-01 1.000000000000000000e+00 -3.169409930706024170e-01 3.458420038223266602e-01 4.255119860172271729e-01 1.000000000000000000e+00 -3.205949962139129639e-01 3.485650122165679932e-01 4.258889853954315186e-01 1.000000000000000000e+00 -3.242500126361846924e-01 3.512890040874481201e-01 4.262500107288360596e-01 1.000000000000000000e+00 -3.278749883174896240e-01 3.540160059928894043e-01 4.266700148582458496e-01 1.000000000000000000e+00 -3.314740061759948730e-01 3.567439913749694824e-01 4.271439909934997559e-01 1.000000000000000000e+00 -3.350729942321777344e-01 3.594740033149719238e-01 4.276050031185150146e-01 1.000000000000000000e+00 -3.386729955673217773e-01 3.622060120105743408e-01 4.280529916286468506e-01 1.000000000000000000e+00 -3.422459959983825684e-01 3.649390041828155518e-01 4.285590052604675293e-01 1.000000000000000000e+00 -3.457930088043212891e-01 3.676759898662567139e-01 4.291270077228546143e-01 1.000000000000000000e+00 -3.493410050868988037e-01 3.704139888286590576e-01 4.296849966049194336e-01 1.000000000000000000e+00 -3.528920114040374756e-01 3.731530010700225830e-01 4.302259981632232666e-01 1.000000000000000000e+00 -3.564180135726928711e-01 3.758960068225860596e-01 4.308229982852935791e-01 1.000000000000000000e+00 -3.599160015583038330e-01 3.786410093307495117e-01 4.315010011196136475e-01 1.000000000000000000e+00 -3.634459972381591797e-01 3.813880085945129395e-01 4.320749938488006592e-01 1.000000000000000000e+00 -3.669230043888092041e-01 3.841390013694763184e-01 4.327960014343261719e-01 1.000000000000000000e+00 -3.704299926757812500e-01 3.868899941444396973e-01 4.334279894828796387e-01 1.000000000000000000e+00 -3.738839924335479736e-01 3.896459937095642090e-01 4.342089891433715820e-01 1.000000000000000000e+00 -3.773710131645202637e-01 3.924039900302886963e-01 4.348900020122528076e-01 1.000000000000000000e+00 -3.808299899101257324e-01 3.951640129089355469e-01 4.356530010700225830e-01 1.000000000000000000e+00 -3.842679858207702637e-01 3.979279994964599609e-01 4.364750087261199951e-01 1.000000000000000000e+00 -3.877049982547760010e-01 4.006940126419067383e-01 4.373050034046173096e-01 1.000000000000000000e+00 -3.911510109901428223e-01 4.034639894962310791e-01 4.380959868431091309e-01 1.000000000000000000e+00 -3.945679962635040283e-01 4.062359929084777832e-01 4.389860033988952637e-01 1.000000000000000000e+00 -3.979910016059875488e-01 4.090110063552856445e-01 4.398480057716369629e-01 1.000000000000000000e+00 -4.014180004596710205e-01 4.117900133132934570e-01 4.407080113887786865e-01 1.000000000000000000e+00 -4.048199951648712158e-01 4.145720005035400391e-01 4.416419863700866699e-01 1.000000000000000000e+00 -4.082260131835937500e-01 4.173569977283477783e-01 4.425700008869171143e-01 1.000000000000000000e+00 -4.116069972515106201e-01 4.201450049877166748e-01 4.435769915580749512e-01 1.000000000000000000e+00 -4.149920046329498291e-01 4.229370057582855225e-01 4.445779919624328613e-01 1.000000000000000000e+00 -4.183830022811889648e-01 4.257330000400543213e-01 4.455600082874298096e-01 1.000000000000000000e+00 -4.217480123043060303e-01 4.285309910774230957e-01 4.466400146484375000e-01 1.000000000000000000e+00 -4.251199960708618164e-01 4.313339889049530029e-01 4.476920068264007568e-01 1.000000000000000000e+00 -4.284619987010955811e-01 4.341399967670440674e-01 4.488640129566192627e-01 1.000000000000000000e+00 -4.318169951438903809e-01 4.369499981403350830e-01 4.499819874763488770e-01 1.000000000000000000e+00 -4.351679980754852295e-01 4.397630095481872559e-01 4.511339962482452393e-01 1.000000000000000000e+00 -4.385040104389190674e-01 4.425800144672393799e-01 4.523409903049468994e-01 1.000000000000000000e+00 -4.418100118637084961e-01 4.454019963741302490e-01 4.536589980125427246e-01 1.000000000000000000e+00 -4.451479911804199219e-01 4.482260048389434814e-01 4.548850059509277344e-01 1.000000000000000000e+00 -4.484469890594482422e-01 4.510529935359954834e-01 4.562639892101287842e-01 1.000000000000000000e+00 -4.517590105533599854e-01 4.538869857788085938e-01 4.575819969177246094e-01 1.000000000000000000e+00 -4.550719857215881348e-01 4.567179977893829346e-01 4.589760005474090576e-01 1.000000000000000000e+00 -4.583660066127777100e-01 4.595519900321960449e-01 4.604569971561431885e-01 1.000000000000000000e+00 -4.616160094738006592e-01 4.624049961566925049e-01 4.619689881801605225e-01 1.000000000000000000e+00 -4.649469852447509766e-01 4.652409851551055908e-01 4.633949995040893555e-01 1.000000000000000000e+00 -4.682539999485015869e-01 4.680829942226409912e-01 4.649080038070678711e-01 1.000000000000000000e+00 -4.715009927749633789e-01 4.709599912166595459e-01 4.663569927215576172e-01 1.000000000000000000e+00 -4.748120009899139404e-01 4.738320112228393555e-01 4.676809906959533691e-01 1.000000000000000000e+00 -4.781860113143920898e-01 4.766989946365356445e-01 4.688450098037719727e-01 1.000000000000000000e+00 -4.816220104694366455e-01 4.795730113983154297e-01 4.697670042514801025e-01 1.000000000000000000e+00 -4.851410090923309326e-01 4.824509918689727783e-01 4.703840017318725586e-01 1.000000000000000000e+00 -4.886969923973083496e-01 4.853180050849914551e-01 4.710080027580261230e-01 1.000000000000000000e+00 -4.922780096530914307e-01 4.881980121135711670e-01 4.714530110359191895e-01 1.000000000000000000e+00 -4.959129989147186279e-01 4.910759925842285156e-01 4.717510044574737549e-01 1.000000000000000000e+00 -4.995520114898681641e-01 4.939599931240081787e-01 4.720320105552673340e-01 1.000000000000000000e+00 -5.031849741935729980e-01 4.968509972095489502e-01 4.723049998283386230e-01 1.000000000000000000e+00 -5.068659782409667969e-01 4.997430145740509033e-01 4.724319875240325928e-01 1.000000000000000000e+00 -5.105400085449218750e-01 5.026429891586303711e-01 4.725500047206878662e-01 1.000000000000000000e+00 -5.142260193824768066e-01 5.055459737777709961e-01 4.726400077342987061e-01 1.000000000000000000e+00 -5.179200172424316406e-01 5.084540247917175293e-01 4.727070033550262451e-01 1.000000000000000000e+00 -5.216429829597473145e-01 5.113670229911804199e-01 4.726389944553375244e-01 1.000000000000000000e+00 -5.253480076789855957e-01 5.142850279808044434e-01 4.726600050926208496e-01 1.000000000000000000e+00 -5.290859937667846680e-01 5.172070264816284180e-01 4.725430011749267578e-01 1.000000000000000000e+00 -5.328289866447448730e-01 5.201349854469299316e-01 4.724009931087493896e-01 1.000000000000000000e+00 -5.365530252456665039e-01 5.230669975280761719e-01 4.723519980907440186e-01 1.000000000000000000e+00 -5.403069853782653809e-01 5.260050296783447266e-01 4.721629917621612549e-01 1.000000000000000000e+00 -5.440689921379089355e-01 5.289480090141296387e-01 4.719470143318176270e-01 1.000000000000000000e+00 -5.478399991989135742e-01 5.318949818611145020e-01 4.717040061950683594e-01 1.000000000000000000e+00 -5.516120195388793945e-01 5.348489880561828613e-01 4.714390039443969727e-01 1.000000000000000000e+00 -5.553929805755615234e-01 5.378069877624511719e-01 4.711470007896423340e-01 1.000000000000000000e+00 -5.591809749603271484e-01 5.407710075378417969e-01 4.708290100097656250e-01 1.000000000000000000e+00 -5.629720091819763184e-01 5.437409877777099609e-01 4.704880118370056152e-01 1.000000000000000000e+00 -5.668020248413085938e-01 5.467150211334228516e-01 4.699879884719848633e-01 1.000000000000000000e+00 -5.706070065498352051e-01 5.496950149536132812e-01 4.695929884910583496e-01 1.000000000000000000e+00 -5.744169950485229492e-01 5.526819825172424316e-01 4.691720008850097656e-01 1.000000000000000000e+00 -5.782359838485717773e-01 5.556730031967163086e-01 4.687240123748779297e-01 1.000000000000000000e+00 -5.820869803428649902e-01 5.586699843406677246e-01 4.681180119514465332e-01 1.000000000000000000e+00 -5.859159827232360840e-01 5.616739988327026367e-01 4.676179885864257812e-01 1.000000000000000000e+00 -5.897529721260070801e-01 5.646820068359375000e-01 4.670900106430053711e-01 1.000000000000000000e+00 -5.936220288276672363e-01 5.676969885826110840e-01 4.664010107517242432e-01 1.000000000000000000e+00 -5.974689722061157227e-01 5.707179903984069824e-01 4.658209979534149170e-01 1.000000000000000000e+00 -6.013540029525756836e-01 5.737429857254028320e-01 4.650740027427673340e-01 1.000000000000000000e+00 -6.052110195159912109e-01 5.767769813537597656e-01 4.644410014152526855e-01 1.000000000000000000e+00 -6.091049909591674805e-01 5.798159837722778320e-01 4.636380076408386230e-01 1.000000000000000000e+00 -6.129770278930664062e-01 5.828610062599182129e-01 4.629499912261962891e-01 1.000000000000000000e+00 -6.168519854545593262e-01 5.859130024909973145e-01 4.622370004653930664e-01 1.000000000000000000e+00 -6.207649707794189453e-01 5.889700055122375488e-01 4.613510072231292725e-01 1.000000000000000000e+00 -6.246539950370788574e-01 5.920339822769165039e-01 4.605830013751983643e-01 1.000000000000000000e+00 -6.285759806632995605e-01 5.951039791107177734e-01 4.596410095691680908e-01 1.000000000000000000e+00 -6.325060129165649414e-01 5.981799960136413574e-01 4.586679935455322266e-01 1.000000000000000000e+00 -6.364120244979858398e-01 6.012639999389648438e-01 4.578180015087127686e-01 1.000000000000000000e+00 -6.403520107269287109e-01 6.043540239334106445e-01 4.567910134792327881e-01 1.000000000000000000e+00 -6.442700028419494629e-01 6.074500083923339844e-01 4.558860063552856445e-01 1.000000000000000000e+00 -6.482220292091369629e-01 6.105530261993408203e-01 4.548009932041168213e-01 1.000000000000000000e+00 -6.521779894828796387e-01 6.136639714241027832e-01 4.536890089511871338e-01 1.000000000000000000e+00 -6.561139822006225586e-01 6.167799830436706543e-01 4.527019858360290527e-01 1.000000000000000000e+00 -6.600819826126098633e-01 6.199039816856384277e-01 4.515340030193328857e-01 1.000000000000000000e+00 -6.640549898147583008e-01 6.230340003967285156e-01 4.503380060195922852e-01 1.000000000000000000e+00 -6.680080294609069824e-01 6.261709928512573242e-01 4.492700099945068359e-01 1.000000000000000000e+00 -6.719909906387329102e-01 6.293159723281860352e-01 4.480180144309997559e-01 1.000000000000000000e+00 -6.759809851646423340e-01 6.324679851531982422e-01 4.467360079288482666e-01 1.000000000000000000e+00 -6.799790263175964355e-01 6.356260180473327637e-01 4.454239904880523682e-01 1.000000000000000000e+00 -6.839500069618225098e-01 6.387929916381835938e-01 4.442510008811950684e-01 1.000000000000000000e+00 -6.879569888114929199e-01 6.419659852981567383e-01 4.428859949111938477e-01 1.000000000000000000e+00 -6.919710040092468262e-01 6.451449990272521973e-01 4.414910078048706055e-01 1.000000000000000000e+00 -6.959850192070007324e-01 6.483340263366699219e-01 4.400720000267028809e-01 1.000000000000000000e+00 -7.000079751014709473e-01 6.515290141105651855e-01 4.386239945888519287e-01 1.000000000000000000e+00 -7.040370106697082520e-01 6.547309756278991699e-01 4.371469914913177490e-01 1.000000000000000000e+00 -7.080669999122619629e-01 6.579419970512390137e-01 4.356470108032226562e-01 1.000000000000000000e+00 -7.121049761772155762e-01 6.611599922180175781e-01 4.341169893741607666e-01 1.000000000000000000e+00 -7.161769866943359375e-01 6.643840074539184570e-01 4.323860108852386475e-01 1.000000000000000000e+00 -7.202219963073730469e-01 6.676179766654968262e-01 4.308049976825714111e-01 1.000000000000000000e+00 -7.242739796638488770e-01 6.708589792251586914e-01 4.291940033435821533e-01 1.000000000000000000e+00 -7.283340096473693848e-01 6.741070151329040527e-01 4.275540113449096680e-01 1.000000000000000000e+00 -7.324219942092895508e-01 6.773639917373657227e-01 4.257169961929321289e-01 1.000000000000000000e+00 -7.364879846572875977e-01 6.806290149688720703e-01 4.240280091762542725e-01 1.000000000000000000e+00 -7.405890226364135742e-01 6.838999986648559570e-01 4.221310019493103027e-01 1.000000000000000000e+00 -7.446640133857727051e-01 6.871809959411621094e-01 4.203929901123046875e-01 1.000000000000000000e+00 -7.487720251083374023e-01 6.904699802398681641e-01 4.184480011463165283e-01 1.000000000000000000e+00 -7.528859972953796387e-01 6.937659978866577148e-01 4.164719879627227783e-01 1.000000000000000000e+00 -7.569749951362609863e-01 6.970710158348083496e-01 4.146589934825897217e-01 1.000000000000000000e+00 -7.610960006713867188e-01 7.003840208053588867e-01 4.126380085945129395e-01 1.000000000000000000e+00 -7.652230262756347656e-01 7.037050127983093262e-01 4.105870127677917480e-01 1.000000000000000000e+00 -7.693529725074768066e-01 7.070350050926208496e-01 4.085159897804260254e-01 1.000000000000000000e+00 -7.734860181808471680e-01 7.103729844093322754e-01 4.064219892024993896e-01 1.000000000000000000e+00 -7.776510119438171387e-01 7.137190103530883789e-01 4.041120111942291260e-01 1.000000000000000000e+00 -7.817950248718261719e-01 7.170739769935607910e-01 4.019660055637359619e-01 1.000000000000000000e+00 -7.859650254249572754e-01 7.204380035400390625e-01 3.996129930019378662e-01 1.000000000000000000e+00 -7.901160120964050293e-01 7.238100171089172363e-01 3.974229991436004639e-01 1.000000000000000000e+00 -7.942979931831359863e-01 7.271900177001953125e-01 3.950160145759582520e-01 1.000000000000000000e+00 -7.984799742698669434e-01 7.305799722671508789e-01 3.925969898700714111e-01 1.000000000000000000e+00 -8.026670217514038086e-01 7.339779734611511230e-01 3.901529908180236816e-01 1.000000000000000000e+00 -8.068590164184570312e-01 7.373849749565124512e-01 3.876839876174926758e-01 1.000000000000000000e+00 -8.110539913177490234e-01 7.408009767532348633e-01 3.851979970932006836e-01 1.000000000000000000e+00 -8.152740001678466797e-01 7.442259788513183594e-01 3.825039863586425781e-01 1.000000000000000000e+00 -8.194990158081054688e-01 7.476590275764465332e-01 3.797850012779235840e-01 1.000000000000000000e+00 -8.237289786338806152e-01 7.511010169982910156e-01 3.770430088043212891e-01 1.000000000000000000e+00 -8.279590010643005371e-01 7.545530200004577637e-01 3.742919862270355225e-01 1.000000000000000000e+00 -8.321920037269592285e-01 7.580140233039855957e-01 3.715290129184722900e-01 1.000000000000000000e+00 -8.364289999008178711e-01 7.614830136299133301e-01 3.687469959259033203e-01 1.000000000000000000e+00 -8.406929969787597656e-01 7.649620175361633301e-01 3.657459914684295654e-01 1.000000000000000000e+00 -8.449569940567016602e-01 7.684500217437744141e-01 3.627409934997558594e-01 1.000000000000000000e+00 -8.492230176925659180e-01 7.719470262527465820e-01 3.597289919853210449e-01 1.000000000000000000e+00 -8.535150289535522461e-01 7.754539847373962402e-01 3.564999997615814209e-01 1.000000000000000000e+00 -8.578090071678161621e-01 7.789689898490905762e-01 3.532589972019195557e-01 1.000000000000000000e+00 -8.621050119400024414e-01 7.824940085411071777e-01 3.500109910964965820e-01 1.000000000000000000e+00 -8.664209842681884766e-01 7.860280275344848633e-01 3.465709984302520752e-01 1.000000000000000000e+00 -8.707169890403747559e-01 7.895720005035400391e-01 3.433330059051513672e-01 1.000000000000000000e+00 -8.750569820404052734e-01 7.931249737739562988e-01 3.396849930286407471e-01 1.000000000000000000e+00 -8.793780207633972168e-01 7.966870069503784180e-01 3.362410068511962891e-01 1.000000000000000000e+00 -8.837199807167053223e-01 8.002579808235168457e-01 3.325990140438079834e-01 1.000000000000000000e+00 -8.880810141563415527e-01 8.038390278816223145e-01 3.287700116634368896e-01 1.000000000000000000e+00 -8.924400210380554199e-01 8.074300289154052734e-01 3.249680101871490479e-01 1.000000000000000000e+00 -8.968179821968078613e-01 8.110299706459045410e-01 3.209820091724395752e-01 1.000000000000000000e+00 -9.011949896812438965e-01 8.146389722824096680e-01 3.170210123062133789e-01 1.000000000000000000e+00 -9.055889844894409180e-01 8.182569742202758789e-01 3.128890097141265869e-01 1.000000000000000000e+00 -9.100000262260437012e-01 8.218849897384643555e-01 3.085939884185791016e-01 1.000000000000000000e+00 -9.144070148468017578e-01 8.255220055580139160e-01 3.043479919433593750e-01 1.000000000000000000e+00 -9.188280105590820312e-01 8.291680216789245605e-01 2.999599874019622803e-01 1.000000000000000000e+00 -9.232789874076843262e-01 8.328220248222351074e-01 2.952440083026885986e-01 1.000000000000000000e+00 -9.277240037918090820e-01 8.364859819412231445e-01 2.906109988689422607e-01 1.000000000000000000e+00 -9.321799874305725098e-01 8.401589989662170410e-01 2.858799993991851807e-01 1.000000000000000000e+00 -9.366599917411804199e-01 8.438410162925720215e-01 2.808760106563568115e-01 1.000000000000000000e+00 -9.411470293998718262e-01 8.475300073623657227e-01 2.758150100708007812e-01 1.000000000000000000e+00 -9.456539750099182129e-01 8.512279987335205078e-01 2.705320119857788086e-01 1.000000000000000000e+00 -9.501780271530151367e-01 8.549330234527587891e-01 2.650850117206573486e-01 1.000000000000000000e+00 -9.547250270843505859e-01 8.586459755897521973e-01 2.593649923801422119e-01 1.000000000000000000e+00 -9.592840075492858887e-01 8.623650074005126953e-01 2.535629868507385254e-01 1.000000000000000000e+00 -9.638720154762268066e-01 8.660889863967895508e-01 2.474450021982192993e-01 1.000000000000000000e+00 -9.684690237045288086e-01 8.698189854621887207e-01 2.413100004196166992e-01 1.000000000000000000e+00 -9.731140136718750000e-01 8.735499978065490723e-01 2.346770018339157104e-01 1.000000000000000000e+00 -9.777799844741821289e-01 8.772810101509094238e-01 2.279540002346038818e-01 1.000000000000000000e+00 -9.824969768524169922e-01 8.810080289840698242e-01 2.208780050277709961e-01 1.000000000000000000e+00 -9.872930049896240234e-01 8.847180008888244629e-01 2.133360058069229126e-01 1.000000000000000000e+00 -9.922180175781250000e-01 8.883849978446960449e-01 2.054679989814758301e-01 1.000000000000000000e+00 -9.948469996452331543e-01 8.929539918899536133e-01 2.034450024366378784e-01 1.000000000000000000e+00 -9.952489733695983887e-01 8.983839750289916992e-01 2.075610011816024780e-01 1.000000000000000000e+00 -9.955030083656311035e-01 9.038659930229187012e-01 2.123699933290481567e-01 1.000000000000000000e+00 -9.957370162010192871e-01 9.093440175056457520e-01 2.177720069885253906e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/cool b/fastplotlib/utils/colormaps/cool deleted file mode 100644 index 4af027533..000000000 --- a/fastplotlib/utils/colormaps/cool +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.921568859368562698e-03 9.960784316062927246e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.843137718737125397e-03 9.921568632125854492e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.176470611244440079e-02 9.882352948188781738e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.568627543747425079e-02 9.843137264251708984e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.960784383118152618e-02 9.803921580314636230e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.352941222488880157e-02 9.764705896377563477e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.745098061859607697e-02 9.725490212440490723e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.137255087494850159e-02 9.686274528503417969e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.529411926865577698e-02 9.647058844566345215e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.921568766236305237e-02 9.607843160629272461e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.313725605607032776e-02 9.568627476692199707e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.705882444977760315e-02 9.529411792755126953e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.098039284348487854e-02 9.490196108818054199e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.490196123719215393e-02 9.450980424880981445e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.882352963089942932e-02 9.411764740943908691e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.274510174989700317e-02 9.372549057006835938e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.666667014360427856e-02 9.333333373069763184e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.058823853731155396e-02 9.294117689132690430e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.450980693101882935e-02 9.254902005195617676e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.843137532472610474e-02 9.215686321258544922e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.235294371843338013e-02 9.176470637321472168e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.627451211214065552e-02 9.137254953384399414e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.019608050584793091e-02 9.098039269447326660e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.411764889955520630e-02 9.058823585510253906e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.803921729326248169e-02 9.019607901573181152e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.019607856869697571e-01 8.980392217636108398e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.058823540806770325e-01 8.941176533699035645e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.098039224743843079e-01 8.901960849761962891e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.137254908680915833e-01 8.862745165824890137e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.176470592617988586e-01 8.823529481887817383e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.215686276555061340e-01 8.784313797950744629e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.254902034997940063e-01 8.745098114013671875e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.294117718935012817e-01 8.705882430076599121e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.333333402872085571e-01 8.666666746139526367e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.372549086809158325e-01 8.627451062202453613e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.411764770746231079e-01 8.588235378265380859e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.450980454683303833e-01 8.549019694328308105e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.490196138620376587e-01 8.509804010391235352e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.529411822557449341e-01 8.470588326454162598e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.568627506494522095e-01 8.431372642517089844e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.607843190431594849e-01 8.392156958580017090e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.647058874368667603e-01 8.352941274642944336e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.686274558305740356e-01 8.313725590705871582e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.725490242242813110e-01 8.274509906768798828e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.764705926179885864e-01 8.235294222831726074e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.803921610116958618e-01 8.196078538894653320e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.843137294054031372e-01 8.156862854957580566e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.882352977991104126e-01 8.117647171020507812e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.921568661928176880e-01 8.078431487083435059e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.960784345865249634e-01 8.039215803146362305e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.000000029802322388e-01 8.000000119209289551e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.039215713739395142e-01 7.960784435272216797e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.078431397676467896e-01 7.921568751335144043e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.117647081613540649e-01 7.882353067398071289e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.156862765550613403e-01 7.843137383460998535e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.196078449487686157e-01 7.803921699523925781e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.235294133424758911e-01 7.764706015586853027e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.274509817361831665e-01 7.725490331649780273e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.313725501298904419e-01 7.686274647712707520e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.352941185235977173e-01 7.647058963775634766e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.392156869173049927e-01 7.607843279838562012e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.431372553110122681e-01 7.568627595901489258e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.470588237047195435e-01 7.529411911964416504e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.509804069995880127e-01 7.490196228027343750e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.549019753932952881e-01 7.450980544090270996e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.588235437870025635e-01 7.411764860153198242e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.627451121807098389e-01 7.372549176216125488e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.666666805744171143e-01 7.333333492279052734e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.705882489681243896e-01 7.294117808341979980e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.745098173618316650e-01 7.254902124404907227e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.784313857555389404e-01 7.215686440467834473e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.823529541492462158e-01 7.176470756530761719e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.862745225429534912e-01 7.137255072593688965e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.901960909366607666e-01 7.098039388656616211e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.941176593303680420e-01 7.058823704719543457e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.980392277240753174e-01 7.019608020782470703e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.019607961177825928e-01 6.980392336845397949e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.058823645114898682e-01 6.941176652908325195e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.098039329051971436e-01 6.901960968971252441e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.137255012989044189e-01 6.862745285034179688e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.176470696926116943e-01 6.823529601097106934e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.215686380863189697e-01 6.784313917160034180e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.254902064800262451e-01 6.745098233222961426e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.294117748737335205e-01 6.705882549285888672e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.333333432674407959e-01 6.666666865348815918e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.372549116611480713e-01 6.627451181411743164e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.411764800548553467e-01 6.588235497474670410e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.450980484485626221e-01 6.549019813537597656e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.490196168422698975e-01 6.509804129600524902e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.529411852359771729e-01 6.470588445663452148e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.568627536296844482e-01 6.431372761726379395e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.607843220233917236e-01 6.392157077789306641e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.647058904170989990e-01 6.352941393852233887e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.686274588108062744e-01 6.313725709915161133e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.725490272045135498e-01 6.274510025978088379e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.764705955982208252e-01 6.235294342041015625e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.803921639919281006e-01 6.196078658103942871e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.843137323856353760e-01 6.156862974166870117e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.882353007793426514e-01 6.117647290229797363e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.921568691730499268e-01 6.078431606292724609e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.960784375667572021e-01 6.039215922355651855e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.000000059604644775e-01 6.000000238418579102e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.039215743541717529e-01 5.960784554481506348e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.078431427478790283e-01 5.921568870544433594e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.117647111415863037e-01 5.882353186607360840e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.156862795352935791e-01 5.843137502670288086e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.196078479290008545e-01 5.803921818733215332e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.235294163227081299e-01 5.764706134796142578e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.274509847164154053e-01 5.725490450859069824e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.313725531101226807e-01 5.686274766921997070e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.352941215038299561e-01 5.647059082984924316e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.392156898975372314e-01 5.607843399047851562e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.431372582912445068e-01 5.568627715110778809e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.470588266849517822e-01 5.529412031173706055e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.509803950786590576e-01 5.490196347236633301e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.549019634723663330e-01 5.450980663299560547e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.588235318660736084e-01 5.411764979362487793e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.627451002597808838e-01 5.372549295425415039e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.666666686534881592e-01 5.333333611488342285e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.705882370471954346e-01 5.294117927551269531e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.745098054409027100e-01 5.254902243614196777e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.784313738346099854e-01 5.215686559677124023e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.823529422283172607e-01 5.176470875740051270e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.862745106220245361e-01 5.137255191802978516e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.901960790157318115e-01 5.098039507865905762e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.941176474094390869e-01 5.058823823928833008e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.980392158031463623e-01 5.019608139991760254e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.019608139991760254e-01 4.980392158031463623e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.058823823928833008e-01 4.941176474094390869e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.098039507865905762e-01 4.901960790157318115e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.137255191802978516e-01 4.862745106220245361e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.176470875740051270e-01 4.823529422283172607e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.215686559677124023e-01 4.784313738346099854e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.254902243614196777e-01 4.745098054409027100e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.294117927551269531e-01 4.705882370471954346e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.333333611488342285e-01 4.666666686534881592e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.372549295425415039e-01 4.627451002597808838e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.411764979362487793e-01 4.588235318660736084e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.450980663299560547e-01 4.549019634723663330e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.490196347236633301e-01 4.509803950786590576e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.529412031173706055e-01 4.470588266849517822e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.568627715110778809e-01 4.431372582912445068e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.607843399047851562e-01 4.392156898975372314e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.647059082984924316e-01 4.352941215038299561e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.686274766921997070e-01 4.313725531101226807e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.725490450859069824e-01 4.274509847164154053e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.764706134796142578e-01 4.235294163227081299e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.803921818733215332e-01 4.196078479290008545e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.843137502670288086e-01 4.156862795352935791e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.882353186607360840e-01 4.117647111415863037e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.921568870544433594e-01 4.078431427478790283e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.960784554481506348e-01 4.039215743541717529e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.000000238418579102e-01 4.000000059604644775e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.039215922355651855e-01 3.960784375667572021e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.078431606292724609e-01 3.921568691730499268e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.117647290229797363e-01 3.882353007793426514e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.156862974166870117e-01 3.843137323856353760e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.196078658103942871e-01 3.803921639919281006e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.235294342041015625e-01 3.764705955982208252e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.274510025978088379e-01 3.725490272045135498e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.313725709915161133e-01 3.686274588108062744e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.352941393852233887e-01 3.647058904170989990e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.392157077789306641e-01 3.607843220233917236e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.431372761726379395e-01 3.568627536296844482e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.470588445663452148e-01 3.529411852359771729e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.509804129600524902e-01 3.490196168422698975e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.549019813537597656e-01 3.450980484485626221e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.588235497474670410e-01 3.411764800548553467e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.627451181411743164e-01 3.372549116611480713e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.666666865348815918e-01 3.333333432674407959e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.705882549285888672e-01 3.294117748737335205e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.745098233222961426e-01 3.254902064800262451e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.784313917160034180e-01 3.215686380863189697e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.823529601097106934e-01 3.176470696926116943e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.862745285034179688e-01 3.137255012989044189e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.901960968971252441e-01 3.098039329051971436e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.941176652908325195e-01 3.058823645114898682e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.980392336845397949e-01 3.019607961177825928e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.019608020782470703e-01 2.980392277240753174e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.058823704719543457e-01 2.941176593303680420e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.098039388656616211e-01 2.901960909366607666e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.137255072593688965e-01 2.862745225429534912e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.176470756530761719e-01 2.823529541492462158e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.215686440467834473e-01 2.784313857555389404e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.254902124404907227e-01 2.745098173618316650e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.294117808341979980e-01 2.705882489681243896e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.333333492279052734e-01 2.666666805744171143e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.372549176216125488e-01 2.627451121807098389e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.411764860153198242e-01 2.588235437870025635e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.450980544090270996e-01 2.549019753932952881e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.490196228027343750e-01 2.509804069995880127e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.529411911964416504e-01 2.470588237047195435e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.568627595901489258e-01 2.431372553110122681e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.607843279838562012e-01 2.392156869173049927e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.647058963775634766e-01 2.352941185235977173e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.686274647712707520e-01 2.313725501298904419e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.725490331649780273e-01 2.274509817361831665e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.764706015586853027e-01 2.235294133424758911e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.803921699523925781e-01 2.196078449487686157e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.843137383460998535e-01 2.156862765550613403e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.882353067398071289e-01 2.117647081613540649e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.921568751335144043e-01 2.078431397676467896e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.960784435272216797e-01 2.039215713739395142e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.000000119209289551e-01 2.000000029802322388e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.039215803146362305e-01 1.960784345865249634e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.078431487083435059e-01 1.921568661928176880e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.117647171020507812e-01 1.882352977991104126e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.156862854957580566e-01 1.843137294054031372e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.196078538894653320e-01 1.803921610116958618e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.235294222831726074e-01 1.764705926179885864e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.274509906768798828e-01 1.725490242242813110e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.313725590705871582e-01 1.686274558305740356e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.352941274642944336e-01 1.647058874368667603e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.392156958580017090e-01 1.607843190431594849e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.431372642517089844e-01 1.568627506494522095e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.470588326454162598e-01 1.529411822557449341e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.509804010391235352e-01 1.490196138620376587e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.549019694328308105e-01 1.450980454683303833e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.588235378265380859e-01 1.411764770746231079e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.627451062202453613e-01 1.372549086809158325e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.666666746139526367e-01 1.333333402872085571e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.705882430076599121e-01 1.294117718935012817e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.745098114013671875e-01 1.254902034997940063e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.784313797950744629e-01 1.215686276555061340e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.823529481887817383e-01 1.176470592617988586e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.862745165824890137e-01 1.137254908680915833e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.901960849761962891e-01 1.098039224743843079e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.941176533699035645e-01 1.058823540806770325e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.980392217636108398e-01 1.019607856869697571e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.019607901573181152e-01 9.803921729326248169e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.058823585510253906e-01 9.411764889955520630e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.098039269447326660e-01 9.019608050584793091e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.137254953384399414e-01 8.627451211214065552e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.176470637321472168e-01 8.235294371843338013e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.215686321258544922e-01 7.843137532472610474e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.254902005195617676e-01 7.450980693101882935e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.294117689132690430e-01 7.058823853731155396e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.333333373069763184e-01 6.666667014360427856e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.372549057006835938e-01 6.274510174989700317e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.411764740943908691e-01 5.882352963089942932e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.450980424880981445e-01 5.490196123719215393e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.490196108818054199e-01 5.098039284348487854e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.529411792755126953e-01 4.705882444977760315e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.568627476692199707e-01 4.313725605607032776e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.607843160629272461e-01 3.921568766236305237e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.647058844566345215e-01 3.529411926865577698e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.686274528503417969e-01 3.137255087494850159e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.725490212440490723e-01 2.745098061859607697e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.764705896377563477e-01 2.352941222488880157e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.803921580314636230e-01 1.960784383118152618e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.843137264251708984e-01 1.568627543747425079e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.882352948188781738e-01 1.176470611244440079e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.921568632125854492e-01 7.843137718737125397e-03 1.000000000000000000e+00 1.000000000000000000e+00 -9.960784316062927246e-01 3.921568859368562698e-03 1.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/coolwarm b/fastplotlib/utils/colormaps/coolwarm deleted file mode 100644 index fc1d170e9..000000000 --- a/fastplotlib/utils/colormaps/coolwarm +++ /dev/null @@ -1,256 +0,0 @@ -2.298056930303573608e-01 2.987179756164550781e-01 7.536831498146057129e-01 1.000000000000000000e+00 -2.343770861625671387e-01 3.055417239665985107e-01 7.596795558929443359e-01 1.000000000000000000e+00 -2.389484643936157227e-01 3.123655021190643311e-01 7.656759023666381836e-01 1.000000000000000000e+00 -2.435198426246643066e-01 3.191892504692077637e-01 7.716722488403320312e-01 1.000000000000000000e+00 -2.480912208557128906e-01 3.260130286216735840e-01 7.776686549186706543e-01 1.000000000000000000e+00 -2.526625990867614746e-01 3.328367769718170166e-01 7.836650013923645020e-01 1.000000000000000000e+00 -2.572339773178100586e-01 3.396605551242828369e-01 7.896614074707031250e-01 1.000000000000000000e+00 -2.618053555488586426e-01 3.464843034744262695e-01 7.956577539443969727e-01 1.000000000000000000e+00 -2.663814723491668701e-01 3.533044159412384033e-01 8.016372919082641602e-01 1.000000000000000000e+00 -2.711043059825897217e-01 3.600106537342071533e-01 8.070951104164123535e-01 1.000000000000000000e+00 -2.758271098136901855e-01 3.667169213294982910e-01 8.125529289245605469e-01 1.000000000000000000e+00 -2.805499434471130371e-01 3.734231591224670410e-01 8.180107474327087402e-01 1.000000000000000000e+00 -2.852727770805358887e-01 3.801294267177581787e-01 8.234685659408569336e-01 1.000000000000000000e+00 -2.899956107139587402e-01 3.868356645107269287e-01 8.289263844490051270e-01 1.000000000000000000e+00 -2.947184443473815918e-01 3.935419321060180664e-01 8.343841433525085449e-01 1.000000000000000000e+00 -2.994412481784820557e-01 4.002481698989868164e-01 8.398419618606567383e-01 1.000000000000000000e+00 -3.041742742061614990e-01 4.069448709487915039e-01 8.452627062797546387e-01 1.000000000000000000e+00 -3.090603053569793701e-01 4.134982824325561523e-01 8.501276373863220215e-01 1.000000000000000000e+00 -3.139463365077972412e-01 4.200516641139984131e-01 8.549925684928894043e-01 1.000000000000000000e+00 -3.188323974609375000e-01 4.266050457954406738e-01 8.598574399948120117e-01 1.000000000000000000e+00 -3.237184286117553711e-01 4.331584274768829346e-01 8.647223711013793945e-01 1.000000000000000000e+00 -3.286044597625732422e-01 4.397118389606475830e-01 8.695872426033020020e-01 1.000000000000000000e+00 -3.334904909133911133e-01 4.462652206420898438e-01 8.744521737098693848e-01 1.000000000000000000e+00 -3.383765220642089844e-01 4.528186023235321045e-01 8.793171048164367676e-01 1.000000000000000000e+00 -3.432775139808654785e-01 4.593536257743835449e-01 8.841218948364257812e-01 1.000000000000000000e+00 -3.483233451843261719e-01 4.657111465930938721e-01 8.883461356163024902e-01 1.000000000000000000e+00 -3.533691465854644775e-01 4.720686674118041992e-01 8.925703763961791992e-01 1.000000000000000000e+00 -3.584149777889251709e-01 4.784261584281921387e-01 8.967946171760559082e-01 1.000000000000000000e+00 -3.634608089923858643e-01 4.847836792469024658e-01 9.010188579559326172e-01 1.000000000000000000e+00 -3.685066103935241699e-01 4.911412000656127930e-01 9.052430987358093262e-01 1.000000000000000000e+00 -3.735524415969848633e-01 4.974986910820007324e-01 9.094673991203308105e-01 1.000000000000000000e+00 -3.785982429981231689e-01 5.038562417030334473e-01 9.136916399002075195e-01 1.000000000000000000e+00 -3.836620748043060303e-01 5.101833939552307129e-01 9.178306460380554199e-01 1.000000000000000000e+00 -3.888518810272216797e-01 5.162984132766723633e-01 9.213734865188598633e-01 1.000000000000000000e+00 -3.940416872501373291e-01 5.224134325981140137e-01 9.249162673950195312e-01 1.000000000000000000e+00 -3.992314934730529785e-01 5.285284519195556641e-01 9.284591078758239746e-01 1.000000000000000000e+00 -4.044212996959686279e-01 5.346434712409973145e-01 9.320018887519836426e-01 1.000000000000000000e+00 -4.096111059188842773e-01 5.407584905624389648e-01 9.355447292327880859e-01 1.000000000000000000e+00 -4.148009121417999268e-01 5.468735098838806152e-01 9.390875101089477539e-01 1.000000000000000000e+00 -4.199907183647155762e-01 5.529885292053222656e-01 9.426303505897521973e-01 1.000000000000000000e+00 -4.251989722251892090e-01 5.590581893920898438e-01 9.460614323616027832e-01 1.000000000000000000e+00 -4.305068850517272949e-01 5.648827552795410156e-01 9.488894343376159668e-01 1.000000000000000000e+00 -4.358147978782653809e-01 5.707073211669921875e-01 9.517173767089843750e-01 1.000000000000000000e+00 -4.411227107048034668e-01 5.765318870544433594e-01 9.545453190803527832e-01 1.000000000000000000e+00 -4.464306533336639404e-01 5.823564529418945312e-01 9.573733210563659668e-01 1.000000000000000000e+00 -4.517385661602020264e-01 5.881809592247009277e-01 9.602012634277343750e-01 1.000000000000000000e+00 -4.570464789867401123e-01 5.940055251121520996e-01 9.630292057991027832e-01 1.000000000000000000e+00 -4.623543918132781982e-01 5.998300909996032715e-01 9.658572077751159668e-01 1.000000000000000000e+00 -4.676780998706817627e-01 6.055912375450134277e-01 9.685462713241577148e-01 1.000000000000000000e+00 -4.730701744556427002e-01 6.110774278640747070e-01 9.706335663795471191e-01 1.000000000000000000e+00 -4.784622490406036377e-01 6.165636181831359863e-01 9.727209210395812988e-01 1.000000000000000000e+00 -4.838543236255645752e-01 6.220498681068420410e-01 9.748082160949707031e-01 1.000000000000000000e+00 -4.892463982105255127e-01 6.275360584259033203e-01 9.768955111503601074e-01 1.000000000000000000e+00 -4.946384727954864502e-01 6.330222487449645996e-01 9.789828062057495117e-01 1.000000000000000000e+00 -5.000305771827697754e-01 6.385084390640258789e-01 9.810701012611389160e-01 1.000000000000000000e+00 -5.054226517677307129e-01 6.439946889877319336e-01 9.831574559211730957e-01 1.000000000000000000e+00 -5.108243227005004883e-01 6.493965983390808105e-01 9.850787520408630371e-01 1.000000000000000000e+00 -5.162603259086608887e-01 6.544976234436035156e-01 9.864073991775512695e-01 1.000000000000000000e+00 -5.216962695121765137e-01 6.595985889434814453e-01 9.877360463142395020e-01 1.000000000000000000e+00 -5.271322727203369141e-01 6.646996140480041504e-01 9.890646338462829590e-01 1.000000000000000000e+00 -5.325682163238525391e-01 6.698005795478820801e-01 9.903932809829711914e-01 1.000000000000000000e+00 -5.380042195320129395e-01 6.749016046524047852e-01 9.917218685150146484e-01 1.000000000000000000e+00 -5.434402227401733398e-01 6.800025701522827148e-01 9.930505156517028809e-01 1.000000000000000000e+00 -5.488761663436889648e-01 6.851035952568054199e-01 9.943791627883911133e-01 1.000000000000000000e+00 -5.543118715286254883e-01 6.900970339775085449e-01 9.955155253410339355e-01 1.000000000000000000e+00 -5.597467422485351562e-01 6.947677135467529297e-01 9.960753321647644043e-01 1.000000000000000000e+00 -5.651815533638000488e-01 6.994384527206420898e-01 9.966350793838500977e-01 1.000000000000000000e+00 -5.706164240837097168e-01 7.041091322898864746e-01 9.971948266029357910e-01 1.000000000000000000e+00 -5.760512948036193848e-01 7.087798714637756348e-01 9.977545738220214844e-01 1.000000000000000000e+00 -5.814861655235290527e-01 7.134506106376647949e-01 9.983143806457519531e-01 1.000000000000000000e+00 -5.869209766387939453e-01 7.181212902069091797e-01 9.988741278648376465e-01 1.000000000000000000e+00 -5.923558473587036133e-01 7.227920293807983398e-01 9.994338750839233398e-01 1.000000000000000000e+00 -5.977767705917358398e-01 7.273297309875488281e-01 9.997767210006713867e-01 1.000000000000000000e+00 -6.031620502471923828e-01 7.315274477005004883e-01 9.995653033256530762e-01 1.000000000000000000e+00 -6.085473895072937012e-01 7.357252240180969238e-01 9.993538260459899902e-01 1.000000000000000000e+00 -6.139326691627502441e-01 7.399230003356933594e-01 9.991423487663269043e-01 1.000000000000000000e+00 -6.193179488182067871e-01 7.441207170486450195e-01 9.989309310913085938e-01 1.000000000000000000e+00 -6.247032284736633301e-01 7.483184933662414551e-01 9.987194538116455078e-01 1.000000000000000000e+00 -6.300885081291198730e-01 7.525162100791931152e-01 9.985080361366271973e-01 1.000000000000000000e+00 -6.354738473892211914e-01 7.567139863967895508e-01 9.982965588569641113e-01 1.000000000000000000e+00 -6.408277750015258789e-01 7.607514858245849609e-01 9.978457689285278320e-01 1.000000000000000000e+00 -6.461127996444702148e-01 7.644364833831787109e-01 9.968684911727905273e-01 1.000000000000000000e+00 -6.513978242874145508e-01 7.681214809417724609e-01 9.958911538124084473e-01 1.000000000000000000e+00 -6.566828489303588867e-01 7.718064785003662109e-01 9.949138164520263672e-01 1.000000000000000000e+00 -6.619678735733032227e-01 7.754914760589599609e-01 9.939365386962890625e-01 1.000000000000000000e+00 -6.672528982162475586e-01 7.791764736175537109e-01 9.929592013359069824e-01 1.000000000000000000e+00 -6.725379824638366699e-01 7.828614711761474609e-01 9.919819235801696777e-01 1.000000000000000000e+00 -6.778230071067810059e-01 7.865464091300964355e-01 9.910045862197875977e-01 1.000000000000000000e+00 -6.830556988716125488e-01 7.900426387786865234e-01 9.897684454917907715e-01 1.000000000000000000e+00 -6.881884932518005371e-01 7.931783795356750488e-01 9.880381226539611816e-01 1.000000000000000000e+00 -6.933212876319885254e-01 7.963141202926635742e-01 9.863077998161315918e-01 1.000000000000000000e+00 -6.984540820121765137e-01 7.994498610496520996e-01 9.845774769783020020e-01 1.000000000000000000e+00 -7.035868763923645020e-01 8.025856614112854004e-01 9.828471541404724121e-01 1.000000000000000000e+00 -7.087196707725524902e-01 8.057214021682739258e-01 9.811168313026428223e-01 1.000000000000000000e+00 -7.138524651527404785e-01 8.088571429252624512e-01 9.793865084648132324e-01 1.000000000000000000e+00 -7.189853191375732422e-01 8.119928836822509766e-01 9.776561856269836426e-01 1.000000000000000000e+00 -7.240413427352905273e-01 8.149104118347167969e-01 9.756509661674499512e-01 1.000000000000000000e+00 -7.289695739746093750e-01 8.174641132354736328e-01 9.731876850128173828e-01 1.000000000000000000e+00 -7.338978052139282227e-01 8.200178742408752441e-01 9.707243442535400391e-01 1.000000000000000000e+00 -7.388259768486022949e-01 8.225716352462768555e-01 9.682610630989074707e-01 1.000000000000000000e+00 -7.437542080879211426e-01 8.251253366470336914e-01 9.657977819442749023e-01 1.000000000000000000e+00 -7.486824393272399902e-01 8.276790976524353027e-01 9.633344411849975586e-01 1.000000000000000000e+00 -7.536106109619140625e-01 8.302328586578369141e-01 9.608711600303649902e-01 1.000000000000000000e+00 -7.585388422012329102e-01 8.327866196632385254e-01 9.584078788757324219e-01 1.000000000000000000e+00 -7.633627653121948242e-01 8.350922465324401855e-01 9.556576609611511230e-01 1.000000000000000000e+00 -7.680343389511108398e-01 8.370352387428283691e-01 9.524882435798645020e-01 1.000000000000000000e+00 -7.727059721946716309e-01 8.389782309532165527e-01 9.493187665939331055e-01 1.000000000000000000e+00 -7.773775458335876465e-01 8.409212231636047363e-01 9.461492896080017090e-01 1.000000000000000000e+00 -7.820491194725036621e-01 8.428642153739929199e-01 9.429798722267150879e-01 1.000000000000000000e+00 -7.867206931114196777e-01 8.448072075843811035e-01 9.398103952407836914e-01 1.000000000000000000e+00 -7.913922667503356934e-01 8.467501997947692871e-01 9.366409182548522949e-01 1.000000000000000000e+00 -7.960638403892517090e-01 8.486931920051574707e-01 9.334714412689208984e-01 1.000000000000000000e+00 -8.006008267402648926e-01 8.503583073616027832e-01 9.300075769424438477e-01 1.000000000000000000e+00 -8.049647808074951172e-01 8.516661524772644043e-01 9.261651039123535156e-01 1.000000000000000000e+00 -8.093286752700805664e-01 8.529739975929260254e-01 9.223225712776184082e-01 1.000000000000000000e+00 -8.136925697326660156e-01 8.542818427085876465e-01 9.184800982475280762e-01 1.000000000000000000e+00 -8.180564641952514648e-01 8.555896878242492676e-01 9.146376252174377441e-01 1.000000000000000000e+00 -8.224204182624816895e-01 8.568975329399108887e-01 9.107951521873474121e-01 1.000000000000000000e+00 -8.267843127250671387e-01 8.582053780555725098e-01 9.069526195526123047e-01 1.000000000000000000e+00 -8.311482071876525879e-01 8.595132231712341309e-01 9.031101465225219727e-01 1.000000000000000000e+00 -8.353447318077087402e-01 8.605139851570129395e-01 8.989704251289367676e-01 1.000000000000000000e+00 -8.393514156341552734e-01 8.611668348312377930e-01 8.944937586784362793e-01 1.000000000000000000e+00 -8.433581590652465820e-01 8.618196249008178711e-01 8.900170922279357910e-01 1.000000000000000000e+00 -8.473649024963378906e-01 8.624724745750427246e-01 8.855404853820800781e-01 1.000000000000000000e+00 -8.513716459274291992e-01 8.631253242492675781e-01 8.810638189315795898e-01 1.000000000000000000e+00 -8.553783893585205078e-01 8.637781143188476562e-01 8.765871524810791016e-01 1.000000000000000000e+00 -8.593850731849670410e-01 8.644309639930725098e-01 8.721105456352233887e-01 1.000000000000000000e+00 -8.633918166160583496e-01 8.650838136672973633e-01 8.676338791847229004e-01 1.000000000000000000e+00 -8.674276471138000488e-01 8.643766045570373535e-01 8.626024723052978516e-01 1.000000000000000000e+00 -8.714925050735473633e-01 8.623093962669372559e-01 8.570162653923034668e-01 1.000000000000000000e+00 -8.755573630332946777e-01 8.602421879768371582e-01 8.514300584793090820e-01 1.000000000000000000e+00 -8.796222805976867676e-01 8.581749200820922852e-01 8.458438515663146973e-01 1.000000000000000000e+00 -8.836871385574340820e-01 8.561077117919921875e-01 8.402576446533203125e-01 1.000000000000000000e+00 -8.877519965171813965e-01 8.540405035018920898e-01 8.346714973449707031e-01 1.000000000000000000e+00 -8.918169140815734863e-01 8.519732952117919922e-01 8.290852904319763184e-01 1.000000000000000000e+00 -8.958817720413208008e-01 8.499060273170471191e-01 8.234990835189819336e-01 1.000000000000000000e+00 -8.995432257652282715e-01 8.475002646446228027e-01 8.177890777587890625e-01 1.000000000000000000e+00 -9.028486609458923340e-01 8.447956442832946777e-01 8.119698166847229004e-01 1.000000000000000000e+00 -9.061541557312011719e-01 8.420910835266113281e-01 8.061506152153015137e-01 1.000000000000000000e+00 -9.094595909118652344e-01 8.393864631652832031e-01 8.003313541412353516e-01 1.000000000000000000e+00 -9.127650856971740723e-01 8.366819024085998535e-01 7.945120930671691895e-01 1.000000000000000000e+00 -9.160705208778381348e-01 8.339772820472717285e-01 7.886928915977478027e-01 1.000000000000000000e+00 -9.193760156631469727e-01 8.312727212905883789e-01 7.828736305236816406e-01 1.000000000000000000e+00 -9.226814508438110352e-01 8.285681605339050293e-01 7.770543694496154785e-01 1.000000000000000000e+00 -9.255633950233459473e-01 8.255172967910766602e-01 7.711362838745117188e-01 1.000000000000000000e+00 -9.281160235404968262e-01 8.221971392631530762e-01 7.651413679122924805e-01 1.000000000000000000e+00 -9.306685924530029297e-01 8.188769817352294922e-01 7.591463923454284668e-01 1.000000000000000000e+00 -9.332211613655090332e-01 8.155568242073059082e-01 7.531514167785644531e-01 1.000000000000000000e+00 -9.357737898826599121e-01 8.122367262840270996e-01 7.471565008163452148e-01 1.000000000000000000e+00 -9.383263587951660156e-01 8.089165687561035156e-01 7.411615252494812012e-01 1.000000000000000000e+00 -9.408789277076721191e-01 8.055964112281799316e-01 7.351665496826171875e-01 1.000000000000000000e+00 -9.434315562248229980e-01 8.022762537002563477e-01 7.291715741157531738e-01 1.000000000000000000e+00 -9.455403089523315430e-01 7.986057400703430176e-01 7.231054306030273438e-01 1.000000000000000000e+00 -9.473453760147094727e-01 7.946954965591430664e-01 7.169905304908752441e-01 1.000000000000000000e+00 -9.491505026817321777e-01 7.907852530479431152e-01 7.108755707740783691e-01 1.000000000000000000e+00 -9.509556293487548828e-01 7.868750095367431641e-01 7.047606706619262695e-01 1.000000000000000000e+00 -9.527606964111328125e-01 7.829648256301879883e-01 6.986457705497741699e-01 1.000000000000000000e+00 -9.545658230781555176e-01 7.790545821189880371e-01 6.925308704376220703e-01 1.000000000000000000e+00 -9.563709497451782227e-01 7.751443386077880859e-01 6.864159703254699707e-01 1.000000000000000000e+00 -9.581760168075561523e-01 7.712340950965881348e-01 6.803010106086730957e-01 1.000000000000000000e+00 -9.595176577568054199e-01 7.669728398323059082e-01 6.741446852684020996e-01 1.000000000000000000e+00 -9.605811834335327148e-01 7.625010013580322266e-01 6.679635643959045410e-01 1.000000000000000000e+00 -9.616447091102600098e-01 7.580291628837585449e-01 6.617823839187622070e-01 1.000000000000000000e+00 -9.627082943916320801e-01 7.535573244094848633e-01 6.556012034416198730e-01 1.000000000000000000e+00 -9.637718200683593750e-01 7.490854859352111816e-01 6.494200229644775391e-01 1.000000000000000000e+00 -9.648353457450866699e-01 7.446136474609375000e-01 6.432389020919799805e-01 1.000000000000000000e+00 -9.658988714218139648e-01 7.401418089866638184e-01 6.370577216148376465e-01 1.000000000000000000e+00 -9.669624567031860352e-01 7.356700301170349121e-01 6.308765411376953125e-01 1.000000000000000000e+00 -9.675443172454833984e-01 7.308497428894042969e-01 6.246854662895202637e-01 1.000000000000000000e+00 -9.678738713264465332e-01 7.258468866348266602e-01 6.184892058372497559e-01 1.000000000000000000e+00 -9.682034254074096680e-01 7.208440899848937988e-01 6.122930049896240234e-01 1.000000000000000000e+00 -9.685329198837280273e-01 7.158412933349609375e-01 6.060967445373535156e-01 1.000000000000000000e+00 -9.688624739646911621e-01 7.108384966850280762e-01 5.999004840850830078e-01 1.000000000000000000e+00 -9.691920280456542969e-01 7.058357000350952148e-01 5.937042832374572754e-01 1.000000000000000000e+00 -9.695215821266174316e-01 7.008328437805175781e-01 5.875080227851867676e-01 1.000000000000000000e+00 -9.698511362075805664e-01 6.958300471305847168e-01 5.813117623329162598e-01 1.000000000000000000e+00 -9.696829915046691895e-01 6.904839277267456055e-01 5.751383900642395020e-01 1.000000000000000000e+00 -9.692885875701904297e-01 6.849817633628845215e-01 5.689753293991088867e-01 1.000000000000000000e+00 -9.688941836357116699e-01 6.794795393943786621e-01 5.628122687339782715e-01 1.000000000000000000e+00 -9.684997200965881348e-01 6.739773750305175781e-01 5.566492676734924316e-01 1.000000000000000000e+00 -9.681053161621093750e-01 6.684752106666564941e-01 5.504862070083618164e-01 1.000000000000000000e+00 -9.677109122276306152e-01 6.629729866981506348e-01 5.443232059478759766e-01 1.000000000000000000e+00 -9.673165082931518555e-01 6.574708223342895508e-01 5.381601452827453613e-01 1.000000000000000000e+00 -9.669221043586730957e-01 6.519686579704284668e-01 5.319971442222595215e-01 1.000000000000000000e+00 -9.660167098045349121e-01 6.461297273635864258e-01 5.258903503417968750e-01 1.000000000000000000e+00 -9.649114012718200684e-01 6.401590704917907715e-01 5.198056101799011230e-01 1.000000000000000000e+00 -9.638060331344604492e-01 6.341884136199951172e-01 5.137208700180053711e-01 1.000000000000000000e+00 -9.627007246017456055e-01 6.282177567481994629e-01 5.076360702514648438e-01 1.000000000000000000e+00 -9.615954160690307617e-01 6.222470998764038086e-01 5.015513300895690918e-01 1.000000000000000000e+00 -9.604900479316711426e-01 6.162764430046081543e-01 4.954665899276733398e-01 1.000000000000000000e+00 -9.593847393989562988e-01 6.103057861328125000e-01 4.893818497657775879e-01 1.000000000000000000e+00 -9.582793712615966797e-01 6.043350696563720703e-01 4.832971096038818359e-01 1.000000000000000000e+00 -9.566532373428344727e-01 5.980338454246520996e-01 4.773022830486297607e-01 1.000000000000000000e+00 -9.548534154891967773e-01 5.916223526000976562e-01 4.713374674320220947e-01 1.000000000000000000e+00 -9.530535936355590820e-01 5.852108597755432129e-01 4.653726220130920410e-01 1.000000000000000000e+00 -9.512537717819213867e-01 5.787993669509887695e-01 4.594078063964843750e-01 1.000000000000000000e+00 -9.494540095329284668e-01 5.723879337310791016e-01 4.534429907798767090e-01 1.000000000000000000e+00 -9.476541876792907715e-01 5.659764409065246582e-01 4.474781453609466553e-01 1.000000000000000000e+00 -9.458543658256530762e-01 5.595649480819702148e-01 4.415133297443389893e-01 1.000000000000000000e+00 -9.440545439720153809e-01 5.531534552574157715e-01 4.355484843254089355e-01 1.000000000000000000e+00 -9.417279362678527832e-01 5.464134812355041504e-01 4.297070801258087158e-01 1.000000000000000000e+00 -9.392537474632263184e-01 5.395814776420593262e-01 4.239002168178558350e-01 1.000000000000000000e+00 -9.367796182632446289e-01 5.327494740486145020e-01 4.180933535099029541e-01 1.000000000000000000e+00 -9.343054294586181641e-01 5.259175300598144531e-01 4.122864603996276855e-01 1.000000000000000000e+00 -9.318313002586364746e-01 5.190855264663696289e-01 4.064795970916748047e-01 1.000000000000000000e+00 -9.293571114540100098e-01 5.122535228729248047e-01 4.006727337837219238e-01 1.000000000000000000e+00 -9.268829822540283203e-01 5.054215192794799805e-01 3.948658704757690430e-01 1.000000000000000000e+00 -9.244087934494018555e-01 4.985895454883575439e-01 3.890590071678161621e-01 1.000000000000000000e+00 -9.214062094688415527e-01 4.914204180240631104e-01 3.834084272384643555e-01 1.000000000000000000e+00 -9.182816743850708008e-01 4.841734766960144043e-01 3.777939379215240479e-01 1.000000000000000000e+00 -9.151571393013000488e-01 4.769265353679656982e-01 3.721794188022613525e-01 1.000000000000000000e+00 -9.120326042175292969e-01 4.696795940399169922e-01 3.665648996829986572e-01 1.000000000000000000e+00 -9.089080095291137695e-01 4.624326229095458984e-01 3.609503805637359619e-01 1.000000000000000000e+00 -9.057834744453430176e-01 4.551856815814971924e-01 3.553358912467956543e-01 1.000000000000000000e+00 -9.026589393615722656e-01 4.479387402534484863e-01 3.497213721275329590e-01 1.000000000000000000e+00 -8.995344042778015137e-01 4.406917989253997803e-01 3.441068530082702637e-01 1.000000000000000000e+00 -8.958845734596252441e-01 4.330745637416839600e-01 3.386806249618530273e-01 1.000000000000000000e+00 -8.921375274658203125e-01 4.253887236118316650e-01 3.332892656326293945e-01 1.000000000000000000e+00 -8.883904814720153809e-01 4.177029132843017578e-01 3.278979063034057617e-01 1.000000000000000000e+00 -8.846434354782104492e-01 4.100171029567718506e-01 3.225065469741821289e-01 1.000000000000000000e+00 -8.808963894844055176e-01 4.023312926292419434e-01 3.171151876449584961e-01 1.000000000000000000e+00 -8.771493434906005859e-01 3.946454524993896484e-01 3.117238283157348633e-01 1.000000000000000000e+00 -8.734022974967956543e-01 3.869596421718597412e-01 3.063324689865112305e-01 1.000000000000000000e+00 -8.696552515029907227e-01 3.792738318443298340e-01 3.009411096572875977e-01 1.000000000000000000e+00 -8.653913140296936035e-01 3.711276650428771973e-01 2.957689464092254639e-01 1.000000000000000000e+00 -8.610535860061645508e-01 3.629157543182373047e-01 2.906281352043151855e-01 1.000000000000000000e+00 -8.567158579826354980e-01 3.547038435935974121e-01 2.854872941970825195e-01 1.000000000000000000e+00 -8.523781299591064453e-01 3.464919328689575195e-01 2.803464829921722412e-01 1.000000000000000000e+00 -8.480404019355773926e-01 3.382800519466400146e-01 2.752056419849395752e-01 1.000000000000000000e+00 -8.437026739120483398e-01 3.300681412220001221e-01 2.700648009777069092e-01 1.000000000000000000e+00 -8.393649458885192871e-01 3.218562304973602295e-01 2.649239897727966309e-01 1.000000000000000000e+00 -8.350272178649902344e-01 3.136443197727203369e-01 2.597831487655639648e-01 1.000000000000000000e+00 -8.301865458488464355e-01 3.047327697277069092e-01 2.548914253711700439e-01 1.000000000000000000e+00 -8.252938389778137207e-01 2.957488298416137695e-01 2.500254809856414795e-01 1.000000000000000000e+00 -8.204010725021362305e-01 2.867649197578430176e-01 2.451595216989517212e-01 1.000000000000000000e+00 -8.155083656311035156e-01 2.777809798717498779e-01 2.402935624122619629e-01 1.000000000000000000e+00 -8.106156587600708008e-01 2.687970697879791260e-01 2.354276180267333984e-01 1.000000000000000000e+00 -8.057229518890380859e-01 2.598131299018859863e-01 2.305616587400436401e-01 1.000000000000000000e+00 -8.008302450180053711e-01 2.508292198181152344e-01 2.256956994533538818e-01 1.000000000000000000e+00 -7.959375381469726562e-01 2.418452799320220947e-01 2.208297550678253174e-01 1.000000000000000000e+00 -7.905615568161010742e-01 2.313970029354095459e-01 2.162420451641082764e-01 1.000000000000000000e+00 -7.851533293724060059e-01 2.208510935306549072e-01 2.116728723049163818e-01 1.000000000000000000e+00 -7.797451019287109375e-01 2.103051841259002686e-01 2.071037143468856812e-01 1.000000000000000000e+00 -7.743368744850158691e-01 1.997592747211456299e-01 2.025345563888549805e-01 1.000000000000000000e+00 -7.689286470413208008e-01 1.892133504152297974e-01 1.979653984308242798e-01 1.000000000000000000e+00 -7.635204195976257324e-01 1.786674410104751587e-01 1.933962255716323853e-01 1.000000000000000000e+00 -7.581121921539306641e-01 1.681215316057205200e-01 1.888270676136016846e-01 1.000000000000000000e+00 -7.527039647102355957e-01 1.575756222009658813e-01 1.842579096555709839e-01 1.000000000000000000e+00 -7.468380331993103027e-01 1.400210261344909668e-01 1.799961030483245850e-01 1.000000000000000000e+00 -7.409573197364807129e-01 1.222403272986412048e-01 1.757442057132720947e-01 1.000000000000000000e+00 -7.350766062736511230e-01 1.044596284627914429e-01 1.714923083782196045e-01 1.000000000000000000e+00 -7.291959524154663086e-01 8.667893707752227783e-02 1.672403961420059204e-01 1.000000000000000000e+00 -7.233152389526367188e-01 6.889824569225311279e-02 1.629884988069534302e-01 1.000000000000000000e+00 -7.174345254898071289e-01 5.111754685640335083e-02 1.587366014719009399e-01 1.000000000000000000e+00 -7.115538716316223145e-01 3.333685547113418579e-02 1.544847041368484497e-01 1.000000000000000000e+00 -7.056731581687927246e-01 1.555616036057472229e-02 1.502328068017959595e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/copper b/fastplotlib/utils/colormaps/copper deleted file mode 100644 index aad93521a..000000000 --- a/fastplotlib/utils/colormaps/copper +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.844289738684892654e-03 3.063529497012495995e-03 1.950980396941304207e-03 1.000000000000000000e+00 -9.688579477369785309e-03 6.127058994024991989e-03 3.901960793882608414e-03 1.000000000000000000e+00 -1.453286875039339066e-02 9.190588258206844330e-03 5.852940957993268967e-03 1.000000000000000000e+00 -1.937715895473957062e-02 1.225411798804998398e-02 7.803921587765216827e-03 1.000000000000000000e+00 -2.422144822776317596e-02 1.531764678657054901e-02 9.754901751875877380e-03 1.000000000000000000e+00 -2.906573750078678131e-02 1.838117651641368866e-02 1.170588191598653793e-02 1.000000000000000000e+00 -3.391002491116523743e-02 2.144470624625682831e-02 1.365686301141977310e-02 1.000000000000000000e+00 -3.875431790947914124e-02 2.450823597609996796e-02 1.560784317553043365e-02 1.000000000000000000e+00 -4.359860718250274658e-02 2.757176384329795837e-02 1.755882427096366882e-02 1.000000000000000000e+00 -4.844289645552635193e-02 3.063529357314109802e-02 1.950980350375175476e-02 1.000000000000000000e+00 -5.328718572854995728e-02 3.369882330298423767e-02 2.146078459918498993e-02 1.000000000000000000e+00 -5.813147500157356262e-02 3.676235303282737732e-02 2.341176383197307587e-02 1.000000000000000000e+00 -6.297576427459716797e-02 3.982588276267051697e-02 2.536274492740631104e-02 1.000000000000000000e+00 -6.782004982233047485e-02 4.288941249251365662e-02 2.731372602283954620e-02 1.000000000000000000e+00 -7.266434282064437866e-02 4.595294222235679626e-02 2.926470525562763214e-02 1.000000000000000000e+00 -7.750863581895828247e-02 4.901647195219993591e-02 3.121568635106086731e-02 1.000000000000000000e+00 -8.235292136669158936e-02 5.208000168204307556e-02 3.316666558384895325e-02 1.000000000000000000e+00 -8.719721436500549316e-02 5.514352768659591675e-02 3.511764854192733765e-02 1.000000000000000000e+00 -9.204149991273880005e-02 5.820705741643905640e-02 3.706862777471542358e-02 1.000000000000000000e+00 -9.688579291105270386e-02 6.127058714628219604e-02 3.901960700750350952e-02 1.000000000000000000e+00 -1.017300784587860107e-01 6.433411687612533569e-02 4.097058996558189392e-02 1.000000000000000000e+00 -1.065743714570999146e-01 6.739764660596847534e-02 4.292156919836997986e-02 1.000000000000000000e+00 -1.114186570048332214e-01 7.046117633581161499e-02 4.487254843115806580e-02 1.000000000000000000e+00 -1.162629500031471252e-01 7.352470606565475464e-02 4.682352766394615173e-02 1.000000000000000000e+00 -1.211072355508804321e-01 7.658823579549789429e-02 4.877451062202453613e-02 1.000000000000000000e+00 -1.259515285491943359e-01 7.965176552534103394e-02 5.072548985481262207e-02 1.000000000000000000e+00 -1.307958215475082397e-01 8.271529525518417358e-02 5.267646908760070801e-02 1.000000000000000000e+00 -1.356400996446609497e-01 8.577882498502731323e-02 5.462745204567909241e-02 1.000000000000000000e+00 -1.404843926429748535e-01 8.884235471487045288e-02 5.657843127846717834e-02 1.000000000000000000e+00 -1.453286856412887573e-01 9.190588444471359253e-02 5.852941051125526428e-02 1.000000000000000000e+00 -1.501729786396026611e-01 9.496941417455673218e-02 6.048039346933364868e-02 1.000000000000000000e+00 -1.550172716379165649e-01 9.803294390439987183e-02 6.243137270212173462e-02 1.000000000000000000e+00 -1.598615497350692749e-01 1.010964736342430115e-01 6.438235193490982056e-02 1.000000000000000000e+00 -1.647058427333831787e-01 1.041600033640861511e-01 6.633333116769790649e-02 1.000000000000000000e+00 -1.695501357316970825e-01 1.072235330939292908e-01 6.828431040048599243e-02 1.000000000000000000e+00 -1.743944287300109863e-01 1.102870553731918335e-01 7.023529708385467529e-02 1.000000000000000000e+00 -1.792387068271636963e-01 1.133505851030349731e-01 7.218627631664276123e-02 1.000000000000000000e+00 -1.840829998254776001e-01 1.164141148328781128e-01 7.413725554943084717e-02 1.000000000000000000e+00 -1.889272928237915039e-01 1.194776445627212524e-01 7.608823478221893311e-02 1.000000000000000000e+00 -1.937715858221054077e-01 1.225411742925643921e-01 7.803921401500701904e-02 1.000000000000000000e+00 -1.986158639192581177e-01 1.256047040224075317e-01 7.999019324779510498e-02 1.000000000000000000e+00 -2.034601569175720215e-01 1.286682337522506714e-01 8.194117993116378784e-02 1.000000000000000000e+00 -2.083044499158859253e-01 1.317317634820938110e-01 8.389215916395187378e-02 1.000000000000000000e+00 -2.131487429141998291e-01 1.347952932119369507e-01 8.584313839673995972e-02 1.000000000000000000e+00 -2.179930210113525391e-01 1.378588229417800903e-01 8.779411762952804565e-02 1.000000000000000000e+00 -2.228373140096664429e-01 1.409223526716232300e-01 8.974509686231613159e-02 1.000000000000000000e+00 -2.276816070079803467e-01 1.439858824014663696e-01 9.169607609510421753e-02 1.000000000000000000e+00 -2.325259000062942505e-01 1.470494121313095093e-01 9.364705532789230347e-02 1.000000000000000000e+00 -2.373701930046081543e-01 1.501129418611526489e-01 9.559804201126098633e-02 1.000000000000000000e+00 -2.422144711017608643e-01 1.531764715909957886e-01 9.754902124404907227e-02 1.000000000000000000e+00 -2.470587641000747681e-01 1.562400013208389282e-01 9.950000047683715820e-02 1.000000000000000000e+00 -2.519030570983886719e-01 1.593035310506820679e-01 1.014509797096252441e-01 1.000000000000000000e+00 -2.567473351955413818e-01 1.623670607805252075e-01 1.034019589424133301e-01 1.000000000000000000e+00 -2.615916430950164795e-01 1.654305905103683472e-01 1.053529381752014160e-01 1.000000000000000000e+00 -2.664359211921691895e-01 1.684941202402114868e-01 1.073039248585700989e-01 1.000000000000000000e+00 -2.712801992893218994e-01 1.715576499700546265e-01 1.092549040913581848e-01 1.000000000000000000e+00 -2.761245071887969971e-01 1.746211796998977661e-01 1.112058833241462708e-01 1.000000000000000000e+00 -2.809687852859497070e-01 1.776847094297409058e-01 1.131568625569343567e-01 1.000000000000000000e+00 -2.858130931854248047e-01 1.807482391595840454e-01 1.151078417897224426e-01 1.000000000000000000e+00 -2.906573712825775146e-01 1.838117688894271851e-01 1.170588210225105286e-01 1.000000000000000000e+00 -2.955016493797302246e-01 1.868752986192703247e-01 1.190098002552986145e-01 1.000000000000000000e+00 -3.003459572792053223e-01 1.899388283491134644e-01 1.209607869386672974e-01 1.000000000000000000e+00 -3.051902353763580322e-01 1.930023580789566040e-01 1.229117661714553833e-01 1.000000000000000000e+00 -3.100345432758331299e-01 1.960658878087997437e-01 1.248627454042434692e-01 1.000000000000000000e+00 -3.148788213729858398e-01 1.991294175386428833e-01 1.268137246370315552e-01 1.000000000000000000e+00 -3.197230994701385498e-01 2.021929472684860229e-01 1.287647038698196411e-01 1.000000000000000000e+00 -3.245674073696136475e-01 2.052564769983291626e-01 1.307156831026077271e-01 1.000000000000000000e+00 -3.294116854667663574e-01 2.083200067281723022e-01 1.326666623353958130e-01 1.000000000000000000e+00 -3.342559635639190674e-01 2.113835364580154419e-01 1.346176415681838989e-01 1.000000000000000000e+00 -3.391002714633941650e-01 2.144470661878585815e-01 1.365686208009719849e-01 1.000000000000000000e+00 -3.439445495605468750e-01 2.175105810165405273e-01 1.385196149349212646e-01 1.000000000000000000e+00 -3.487888574600219727e-01 2.205741107463836670e-01 1.404705941677093506e-01 1.000000000000000000e+00 -3.536331355571746826e-01 2.236376404762268066e-01 1.424215734004974365e-01 1.000000000000000000e+00 -3.584774136543273926e-01 2.267011702060699463e-01 1.443725526332855225e-01 1.000000000000000000e+00 -3.633217215538024902e-01 2.297646999359130859e-01 1.463235318660736084e-01 1.000000000000000000e+00 -3.681659996509552002e-01 2.328282296657562256e-01 1.482745110988616943e-01 1.000000000000000000e+00 -3.730103075504302979e-01 2.358917593955993652e-01 1.502254903316497803e-01 1.000000000000000000e+00 -3.778545856475830078e-01 2.389552891254425049e-01 1.521764695644378662e-01 1.000000000000000000e+00 -3.826988637447357178e-01 2.420188188552856445e-01 1.541274487972259521e-01 1.000000000000000000e+00 -3.875431716442108154e-01 2.450823485851287842e-01 1.560784280300140381e-01 1.000000000000000000e+00 -3.923874497413635254e-01 2.481458783149719238e-01 1.580294072628021240e-01 1.000000000000000000e+00 -3.972317278385162354e-01 2.512094080448150635e-01 1.599803864955902100e-01 1.000000000000000000e+00 -4.020760357379913330e-01 2.542729377746582031e-01 1.619313657283782959e-01 1.000000000000000000e+00 -4.069203138351440430e-01 2.573364675045013428e-01 1.638823598623275757e-01 1.000000000000000000e+00 -4.117646217346191406e-01 2.603999972343444824e-01 1.658333390951156616e-01 1.000000000000000000e+00 -4.166088998317718506e-01 2.634635269641876221e-01 1.677843183279037476e-01 1.000000000000000000e+00 -4.214531779289245605e-01 2.665270566940307617e-01 1.697352975606918335e-01 1.000000000000000000e+00 -4.262974858283996582e-01 2.695905864238739014e-01 1.716862767934799194e-01 1.000000000000000000e+00 -4.311417639255523682e-01 2.726541161537170410e-01 1.736372560262680054e-01 1.000000000000000000e+00 -4.359860420227050781e-01 2.757176458835601807e-01 1.755882352590560913e-01 1.000000000000000000e+00 -4.408303499221801758e-01 2.787811756134033203e-01 1.775392144918441772e-01 1.000000000000000000e+00 -4.456746280193328857e-01 2.818447053432464600e-01 1.794901937246322632e-01 1.000000000000000000e+00 -4.505189359188079834e-01 2.849082350730895996e-01 1.814411729574203491e-01 1.000000000000000000e+00 -4.553632140159606934e-01 2.879717648029327393e-01 1.833921521902084351e-01 1.000000000000000000e+00 -4.602074921131134033e-01 2.910352945327758789e-01 1.853431314229965210e-01 1.000000000000000000e+00 -4.650518000125885010e-01 2.940988242626190186e-01 1.872941106557846069e-01 1.000000000000000000e+00 -4.698960781097412109e-01 2.971623539924621582e-01 1.892451047897338867e-01 1.000000000000000000e+00 -4.747403860092163086e-01 3.002258837223052979e-01 1.911960840225219727e-01 1.000000000000000000e+00 -4.795846641063690186e-01 3.032894134521484375e-01 1.931470632553100586e-01 1.000000000000000000e+00 -4.844289422035217285e-01 3.063529431819915771e-01 1.950980424880981445e-01 1.000000000000000000e+00 -4.892732501029968262e-01 3.094164729118347168e-01 1.970490217208862305e-01 1.000000000000000000e+00 -4.941175282001495361e-01 3.124800026416778564e-01 1.990000009536743164e-01 1.000000000000000000e+00 -4.989618062973022461e-01 3.155435323715209961e-01 2.009509801864624023e-01 1.000000000000000000e+00 -5.038061141967773438e-01 3.186070621013641357e-01 2.029019594192504883e-01 1.000000000000000000e+00 -5.086504220962524414e-01 3.216705918312072754e-01 2.048529386520385742e-01 1.000000000000000000e+00 -5.134946703910827637e-01 3.247341215610504150e-01 2.068039178848266602e-01 1.000000000000000000e+00 -5.183389782905578613e-01 3.277976512908935547e-01 2.087548971176147461e-01 1.000000000000000000e+00 -5.231832861900329590e-01 3.308611810207366943e-01 2.107058763504028320e-01 1.000000000000000000e+00 -5.280275344848632812e-01 3.339247107505798340e-01 2.126568555831909180e-01 1.000000000000000000e+00 -5.328718423843383789e-01 3.369882404804229736e-01 2.146078497171401978e-01 1.000000000000000000e+00 -5.377161502838134766e-01 3.400517702102661133e-01 2.165588289499282837e-01 1.000000000000000000e+00 -5.425603985786437988e-01 3.431152999401092529e-01 2.185098081827163696e-01 1.000000000000000000e+00 -5.474047064781188965e-01 3.461788296699523926e-01 2.204607874155044556e-01 1.000000000000000000e+00 -5.522490143775939941e-01 3.492423593997955322e-01 2.224117666482925415e-01 1.000000000000000000e+00 -5.570933222770690918e-01 3.523058891296386719e-01 2.243627458810806274e-01 1.000000000000000000e+00 -5.619375705718994141e-01 3.553694188594818115e-01 2.263137251138687134e-01 1.000000000000000000e+00 -5.667818784713745117e-01 3.584329485893249512e-01 2.282647043466567993e-01 1.000000000000000000e+00 -5.716261863708496094e-01 3.614964783191680908e-01 2.302156835794448853e-01 1.000000000000000000e+00 -5.764704346656799316e-01 3.645600080490112305e-01 2.321666628122329712e-01 1.000000000000000000e+00 -5.813147425651550293e-01 3.676235377788543701e-01 2.341176420450210571e-01 1.000000000000000000e+00 -5.861590504646301270e-01 3.706870675086975098e-01 2.360686212778091431e-01 1.000000000000000000e+00 -5.910032987594604492e-01 3.737505972385406494e-01 2.380196005105972290e-01 1.000000000000000000e+00 -5.958476066589355469e-01 3.768141269683837891e-01 2.399705946445465088e-01 1.000000000000000000e+00 -6.006919145584106445e-01 3.798776566982269287e-01 2.419215738773345947e-01 1.000000000000000000e+00 -6.055361628532409668e-01 3.829411864280700684e-01 2.438725531101226807e-01 1.000000000000000000e+00 -6.103804707527160645e-01 3.860047161579132080e-01 2.458235323429107666e-01 1.000000000000000000e+00 -6.152247786521911621e-01 3.890682458877563477e-01 2.477745115756988525e-01 1.000000000000000000e+00 -6.200690865516662598e-01 3.921317756175994873e-01 2.497254908084869385e-01 1.000000000000000000e+00 -6.249133348464965820e-01 3.951953053474426270e-01 2.516764700412750244e-01 1.000000000000000000e+00 -6.297576427459716797e-01 3.982588350772857666e-01 2.536274492740631104e-01 1.000000000000000000e+00 -6.346019506454467773e-01 4.013223648071289062e-01 2.555784285068511963e-01 1.000000000000000000e+00 -6.394461989402770996e-01 4.043858945369720459e-01 2.575294077396392822e-01 1.000000000000000000e+00 -6.442905068397521973e-01 4.074494242668151855e-01 2.594803869724273682e-01 1.000000000000000000e+00 -6.491348147392272949e-01 4.105129539966583252e-01 2.614313662052154541e-01 1.000000000000000000e+00 -6.539790630340576172e-01 4.135764837265014648e-01 2.633823454380035400e-01 1.000000000000000000e+00 -6.588233709335327148e-01 4.166400134563446045e-01 2.653333246707916260e-01 1.000000000000000000e+00 -6.636676788330078125e-01 4.197035431861877441e-01 2.672843039035797119e-01 1.000000000000000000e+00 -6.685119271278381348e-01 4.227670729160308838e-01 2.692352831363677979e-01 1.000000000000000000e+00 -6.733562350273132324e-01 4.258306026458740234e-01 2.711862623691558838e-01 1.000000000000000000e+00 -6.782005429267883301e-01 4.288941323757171631e-01 2.731372416019439697e-01 1.000000000000000000e+00 -6.830448508262634277e-01 4.319576323032379150e-01 2.750882208347320557e-01 1.000000000000000000e+00 -6.878890991210937500e-01 4.350211620330810547e-01 2.770392298698425293e-01 1.000000000000000000e+00 -6.927334070205688477e-01 4.380846917629241943e-01 2.789902091026306152e-01 1.000000000000000000e+00 -6.975777149200439453e-01 4.411482214927673340e-01 2.809411883354187012e-01 1.000000000000000000e+00 -7.024219632148742676e-01 4.442117512226104736e-01 2.828921675682067871e-01 1.000000000000000000e+00 -7.072662711143493652e-01 4.472752809524536133e-01 2.848431468009948730e-01 1.000000000000000000e+00 -7.121105790138244629e-01 4.503388106822967529e-01 2.867941260337829590e-01 1.000000000000000000e+00 -7.169548273086547852e-01 4.534023404121398926e-01 2.887451052665710449e-01 1.000000000000000000e+00 -7.217991352081298828e-01 4.564658701419830322e-01 2.906960844993591309e-01 1.000000000000000000e+00 -7.266434431076049805e-01 4.595293998718261719e-01 2.926470637321472168e-01 1.000000000000000000e+00 -7.314876914024353027e-01 4.625929296016693115e-01 2.945980429649353027e-01 1.000000000000000000e+00 -7.363319993019104004e-01 4.656564593315124512e-01 2.965490221977233887e-01 1.000000000000000000e+00 -7.411763072013854980e-01 4.687199890613555908e-01 2.985000014305114746e-01 1.000000000000000000e+00 -7.460206151008605957e-01 4.717835187911987305e-01 3.004509806632995605e-01 1.000000000000000000e+00 -7.508648633956909180e-01 4.748470485210418701e-01 3.024019598960876465e-01 1.000000000000000000e+00 -7.557091712951660156e-01 4.779105782508850098e-01 3.043529391288757324e-01 1.000000000000000000e+00 -7.605534791946411133e-01 4.809741079807281494e-01 3.063039183616638184e-01 1.000000000000000000e+00 -7.653977274894714355e-01 4.840376377105712891e-01 3.082548975944519043e-01 1.000000000000000000e+00 -7.702420353889465332e-01 4.871011674404144287e-01 3.102058768272399902e-01 1.000000000000000000e+00 -7.750863432884216309e-01 4.901646971702575684e-01 3.121568560600280762e-01 1.000000000000000000e+00 -7.799305915832519531e-01 4.932282269001007080e-01 3.141078352928161621e-01 1.000000000000000000e+00 -7.847748994827270508e-01 4.962917566299438477e-01 3.160588145256042480e-01 1.000000000000000000e+00 -7.896192073822021484e-01 4.993552863597869873e-01 3.180097937583923340e-01 1.000000000000000000e+00 -7.944634556770324707e-01 5.024188160896301270e-01 3.199607729911804199e-01 1.000000000000000000e+00 -7.993077635765075684e-01 5.054823756217956543e-01 3.219117522239685059e-01 1.000000000000000000e+00 -8.041520714759826660e-01 5.085458755493164062e-01 3.238627314567565918e-01 1.000000000000000000e+00 -8.089963197708129883e-01 5.116094350814819336e-01 3.258137106895446777e-01 1.000000000000000000e+00 -8.138406276702880859e-01 5.146729350090026855e-01 3.277647197246551514e-01 1.000000000000000000e+00 -8.186849355697631836e-01 5.177364945411682129e-01 3.297156989574432373e-01 1.000000000000000000e+00 -8.235292434692382812e-01 5.207999944686889648e-01 3.316666781902313232e-01 1.000000000000000000e+00 -8.283734917640686035e-01 5.238635540008544922e-01 3.336176574230194092e-01 1.000000000000000000e+00 -8.332177996635437012e-01 5.269270539283752441e-01 3.355686366558074951e-01 1.000000000000000000e+00 -8.380621075630187988e-01 5.299906134605407715e-01 3.375196158885955811e-01 1.000000000000000000e+00 -8.429063558578491211e-01 5.330541133880615234e-01 3.394705951213836670e-01 1.000000000000000000e+00 -8.477506637573242188e-01 5.361176729202270508e-01 3.414215743541717529e-01 1.000000000000000000e+00 -8.525949716567993164e-01 5.391811728477478027e-01 3.433725535869598389e-01 1.000000000000000000e+00 -8.574392199516296387e-01 5.422447323799133301e-01 3.453235328197479248e-01 1.000000000000000000e+00 -8.622835278511047363e-01 5.453082323074340820e-01 3.472745120525360107e-01 1.000000000000000000e+00 -8.671278357505798340e-01 5.483717918395996094e-01 3.492254912853240967e-01 1.000000000000000000e+00 -8.719720840454101562e-01 5.514352917671203613e-01 3.511764705181121826e-01 1.000000000000000000e+00 -8.768163919448852539e-01 5.544988512992858887e-01 3.531274497509002686e-01 1.000000000000000000e+00 -8.816606998443603516e-01 5.575623512268066406e-01 3.550784289836883545e-01 1.000000000000000000e+00 -8.865050077438354492e-01 5.606259107589721680e-01 3.570294082164764404e-01 1.000000000000000000e+00 -8.913492560386657715e-01 5.636894106864929199e-01 3.589803874492645264e-01 1.000000000000000000e+00 -8.961935639381408691e-01 5.667529702186584473e-01 3.609313666820526123e-01 1.000000000000000000e+00 -9.010378718376159668e-01 5.698164701461791992e-01 3.628823459148406982e-01 1.000000000000000000e+00 -9.058821201324462891e-01 5.728800296783447266e-01 3.648333251476287842e-01 1.000000000000000000e+00 -9.107264280319213867e-01 5.759435296058654785e-01 3.667843043804168701e-01 1.000000000000000000e+00 -9.155707359313964844e-01 5.790070295333862305e-01 3.687352836132049561e-01 1.000000000000000000e+00 -9.204149842262268066e-01 5.820705890655517578e-01 3.706862628459930420e-01 1.000000000000000000e+00 -9.252592921257019043e-01 5.851340889930725098e-01 3.726372420787811279e-01 1.000000000000000000e+00 -9.301036000251770020e-01 5.881976485252380371e-01 3.745882213115692139e-01 1.000000000000000000e+00 -9.349478483200073242e-01 5.912611484527587891e-01 3.765392303466796875e-01 1.000000000000000000e+00 -9.397921562194824219e-01 5.943247079849243164e-01 3.784902095794677734e-01 1.000000000000000000e+00 -9.446364641189575195e-01 5.973882079124450684e-01 3.804411888122558594e-01 1.000000000000000000e+00 -9.494807720184326172e-01 6.004517674446105957e-01 3.823921680450439453e-01 1.000000000000000000e+00 -9.543250203132629395e-01 6.035152673721313477e-01 3.843431472778320312e-01 1.000000000000000000e+00 -9.591693282127380371e-01 6.065788269042968750e-01 3.862941265106201172e-01 1.000000000000000000e+00 -9.640136361122131348e-01 6.096423268318176270e-01 3.882451057434082031e-01 1.000000000000000000e+00 -9.688578844070434570e-01 6.127058863639831543e-01 3.901960849761962891e-01 1.000000000000000000e+00 -9.737021923065185547e-01 6.157693862915039062e-01 3.921470642089843750e-01 1.000000000000000000e+00 -9.785465002059936523e-01 6.188329458236694336e-01 3.940980434417724609e-01 1.000000000000000000e+00 -9.833907485008239746e-01 6.218964457511901855e-01 3.960490226745605469e-01 1.000000000000000000e+00 -9.882350564002990723e-01 6.249600052833557129e-01 3.980000019073486328e-01 1.000000000000000000e+00 -9.930793642997741699e-01 6.280235052108764648e-01 3.999509811401367188e-01 1.000000000000000000e+00 -9.979236125946044922e-01 6.310870647430419922e-01 4.019019603729248047e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.341505646705627441e-01 4.038529396057128906e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.372141242027282715e-01 4.058039188385009766e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.402776241302490234e-01 4.077548980712890625e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.433411836624145508e-01 4.097058773040771484e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.464046835899353027e-01 4.116568565368652344e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.494682431221008301e-01 4.136078357696533203e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.525317430496215820e-01 4.155588150024414062e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.555953025817871094e-01 4.175097942352294922e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.586588025093078613e-01 4.194607734680175781e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.617223620414733887e-01 4.214117527008056641e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.647858619689941406e-01 4.233627319335937500e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.678494215011596680e-01 4.253137111663818359e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.709129214286804199e-01 4.272647202014923096e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.739764809608459473e-01 4.292156994342803955e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.770399808883666992e-01 4.311666786670684814e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.801035404205322266e-01 4.331176578998565674e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.831670403480529785e-01 4.350686371326446533e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.862305998802185059e-01 4.370196163654327393e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.892940998077392578e-01 4.389705955982208252e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.923576593399047852e-01 4.409215748310089111e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.954211592674255371e-01 4.428725540637969971e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.984847187995910645e-01 4.448235332965850830e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.015482187271118164e-01 4.467745125293731689e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.046117782592773438e-01 4.487254917621612549e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.076752781867980957e-01 4.506764709949493408e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.107388377189636230e-01 4.526274502277374268e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.138023376464843750e-01 4.545784294605255127e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.168658971786499023e-01 4.565294086933135986e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.199293971061706543e-01 4.584803879261016846e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.229929566383361816e-01 4.604313671588897705e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.260564565658569336e-01 4.623823463916778564e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.291200160980224609e-01 4.643333256244659424e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.321835160255432129e-01 4.662843048572540283e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.352470755577087402e-01 4.682352840900421143e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.383105754852294922e-01 4.701862633228302002e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.413741350173950195e-01 4.721372425556182861e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.444376349449157715e-01 4.740882217884063721e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.475011944770812988e-01 4.760392010211944580e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.505646944046020508e-01 4.779902100563049316e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.536282539367675781e-01 4.799411892890930176e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.566917538642883301e-01 4.818921685218811035e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.597553133964538574e-01 4.838431477546691895e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.628188133239746094e-01 4.857941269874572754e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.658823728561401367e-01 4.877451062202453613e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.689458727836608887e-01 4.896960854530334473e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.720094323158264160e-01 4.916470646858215332e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.750729322433471680e-01 4.935980439186096191e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.781364917755126953e-01 4.955490231513977051e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.811999917030334473e-01 4.975000023841857910e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/cubehelix b/fastplotlib/utils/colormaps/cubehelix deleted file mode 100644 index 58103ea52..000000000 --- a/fastplotlib/utils/colormaps/cubehelix +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.716294679790735245e-03 2.118574455380439758e-03 5.970232654362916946e-03 1.000000000000000000e+00 -1.325241569429636002e-02 4.287499003112316132e-03 1.216178853064775467e-02 1.000000000000000000e+00 -1.959919743239879608e-02 6.513601168990135193e-03 1.856303960084915161e-02 1.000000000000000000e+00 -2.574810385704040527e-02 8.803482167422771454e-03 2.516186796128749847e-02 1.000000000000000000e+00 -3.169123455882072449e-02 1.116350293159484863e-02 3.194570168852806091e-02 1.000000000000000000e+00 -3.742133826017379761e-02 1.359977014362812042e-02 3.890155255794525146e-02 1.000000000000000000e+00 -4.293183609843254089e-02 1.611812412738800049e-02 4.601604491472244263e-02 1.000000000000000000e+00 -4.821681976318359375e-02 1.872412860393524170e-02 5.327545478940010071e-02 1.000000000000000000e+00 -5.327106639742851257e-02 2.142305485904216766e-02 6.066573783755302429e-02 1.000000000000000000e+00 -5.809004604816436768e-02 2.421987615525722504e-02 6.817258149385452271e-02 1.000000000000000000e+00 -6.266992539167404175e-02 2.711925655603408813e-02 7.578142732381820679e-02 1.000000000000000000e+00 -6.700757890939712524e-02 3.012553974986076355e-02 8.347751200199127197e-02 1.000000000000000000e+00 -7.110057771205902100e-02 3.324273973703384399e-02 9.124591946601867676e-02 1.000000000000000000e+00 -7.494720071554183960e-02 3.647453710436820984e-02 9.907157719135284424e-02 1.000000000000000000e+00 -7.854642719030380249e-02 3.982427716255187988e-02 1.069393530488014221e-01 1.000000000000000000e+00 -8.189795911312103271e-02 4.329494759440422058e-02 1.148340404033660889e-01 1.000000000000000000e+00 -8.500218391418457031e-02 4.688918963074684143e-02 1.227404102683067322e-01 1.000000000000000000e+00 -8.786017447710037231e-02 5.060928687453269958e-02 1.306432783603668213e-01 1.000000000000000000e+00 -9.047371149063110352e-02 5.445716157555580139e-02 1.385274827480316162e-01 1.000000000000000000e+00 -9.284523874521255493e-02 5.843437463045120239e-02 1.463779956102371216e-01 1.000000000000000000e+00 -9.497788548469543457e-02 6.254211813211441040e-02 1.541798710823059082e-01 1.000000000000000000e+00 -9.687542170286178589e-02 6.678122282028198242e-02 1.619183719158172607e-01 1.000000000000000000e+00 -9.854228049516677856e-02 7.115215808153152466e-02 1.695789247751235962e-01 1.000000000000000000e+00 -9.998352825641632080e-02 7.565501332283020020e-02 1.771471947431564331e-01 1.000000000000000000e+00 -1.012048274278640747e-01 8.028952032327651978e-02 1.846091449260711670e-01 1.000000000000000000e+00 -1.022124737501144409e-01 8.505506813526153564e-02 1.919510066509246826e-01 1.000000000000000000e+00 -1.030133217573165894e-01 8.995065093040466309e-02 1.991593539714813232e-01 1.000000000000000000e+00 -1.036147922277450562e-01 9.497494250535964966e-02 2.062211036682128906e-01 1.000000000000000000e+00 -1.040248721837997437e-01 1.001262441277503967e-01 2.131235897541046143e-01 1.000000000000000000e+00 -1.042520552873611450e-01 1.054025292396545410e-01 2.198545634746551514e-01 1.000000000000000000e+00 -1.043053343892097473e-01 1.108014136552810669e-01 2.264022082090377808e-01 1.000000000000000000e+00 -1.041941866278648376e-01 1.163201928138732910e-01 2.327551990747451782e-01 1.000000000000000000e+00 -1.039285436272621155e-01 1.219558417797088623e-01 2.389027029275894165e-01 1.000000000000000000e+00 -1.035187691450119019e-01 1.277050077915191650e-01 2.448344230651855469e-01 1.000000000000000000e+00 -1.029756292700767517e-01 1.335640400648117065e-01 2.505405843257904053e-01 1.000000000000000000e+00 -1.023102551698684692e-01 1.395289897918701172e-01 2.560120224952697754e-01 1.000000000000000000e+00 -1.015341356396675110e-01 1.455956101417541504e-01 2.612401545047760010e-01 1.000000000000000000e+00 -1.006590873003005981e-01 1.517593860626220703e-01 2.662169635295867920e-01 1.000000000000000000e+00 -9.969720989465713501e-02 1.580155491828918457e-01 2.709350883960723877e-01 1.000000000000000000e+00 -9.866087138652801514e-02 1.643590480089187622e-01 2.753878235816955566e-01 1.000000000000000000e+00 -9.756266325712203979e-02 1.707846075296401978e-01 2.795691490173339844e-01 1.000000000000000000e+00 -9.641540795564651489e-02 1.772867143154144287e-01 2.834736406803131104e-01 1.000000000000000000e+00 -9.523206204175949097e-02 1.838596761226654053e-01 2.870965898036956787e-01 1.000000000000000000e+00 -9.402576088905334473e-02 1.904975324869155884e-01 2.904340028762817383e-01 1.000000000000000000e+00 -9.280972182750701904e-02 1.971942037343978882e-01 2.934825420379638672e-01 1.000000000000000000e+00 -9.159726649522781372e-02 2.039433866739273071e-01 2.962396442890167236e-01 1.000000000000000000e+00 -9.040175378322601318e-02 2.107386440038681030e-01 2.987034320831298828e-01 1.000000000000000000e+00 -8.923655748367309570e-02 2.175733894109725952e-01 3.008726537227630615e-01 1.000000000000000000e+00 -8.811505138874053955e-02 2.244409173727035522e-01 3.027469515800476074e-01 1.000000000000000000e+00 -8.705056458711624146e-02 2.313344031572341919e-01 3.043265044689178467e-01 1.000000000000000000e+00 -8.605633676052093506e-02 2.382469177246093750e-01 3.056123554706573486e-01 1.000000000000000000e+00 -8.514551818370819092e-02 2.451714724302291870e-01 3.066062033176422119e-01 1.000000000000000000e+00 -8.433111011981964111e-02 2.521010041236877441e-01 3.073104321956634521e-01 1.000000000000000000e+00 -8.362597227096557617e-02 2.590283751487731934e-01 3.077281713485717773e-01 1.000000000000000000e+00 -8.304274082183837891e-02 2.659464776515960693e-01 3.078632354736328125e-01 1.000000000000000000e+00 -8.259385824203491211e-02 2.728480994701385498e-01 3.077201247215270996e-01 1.000000000000000000e+00 -8.229149132966995239e-02 2.797261476516723633e-01 3.073040246963500977e-01 1.000000000000000000e+00 -8.214754611253738403e-02 2.865734398365020752e-01 3.066208362579345703e-01 1.000000000000000000e+00 -8.217360824346542358e-02 2.933828532695770264e-01 3.056769967079162598e-01 1.000000000000000000e+00 -8.238093554973602295e-02 3.001473844051361084e-01 3.044796884059906006e-01 1.000000000000000000e+00 -8.278044313192367554e-02 3.068599998950958252e-01 3.030366599559783936e-01 1.000000000000000000e+00 -8.338262885808944702e-02 3.135137856006622314e-01 3.013563454151153564e-01 1.000000000000000000e+00 -8.419763296842575073e-02 3.201019465923309326e-01 2.994476556777954102e-01 1.000000000000000000e+00 -8.523511886596679688e-02 3.266177773475646973e-01 2.973201274871826172e-01 1.000000000000000000e+00 -8.650432527065277100e-02 3.330547213554382324e-01 2.949838638305664062e-01 1.000000000000000000e+00 -8.801401406526565552e-02 3.394063115119934082e-01 2.924494743347167969e-01 1.000000000000000000e+00 -8.977246284484863281e-02 3.456662893295288086e-01 2.897280752658843994e-01 1.000000000000000000e+00 -9.178742021322250366e-02 3.518285453319549561e-01 2.868312299251556396e-01 1.000000000000000000e+00 -9.406612068414688110e-02 3.578871488571166992e-01 2.837709784507751465e-01 1.000000000000000000e+00 -9.661524742841720581e-02 3.638363778591156006e-01 2.805597782135009766e-01 1.000000000000000000e+00 -9.944093972444534302e-02 3.696707487106323242e-01 2.772105336189270020e-01 1.000000000000000000e+00 -1.025487333536148071e-01 3.753849267959594727e-01 2.737364470958709717e-01 1.000000000000000000e+00 -1.059436127543449402e-01 3.809739053249359131e-01 2.701511085033416748e-01 1.000000000000000000e+00 -1.096299365162849426e-01 3.864328265190124512e-01 2.664684057235717773e-01 1.000000000000000000e+00 -1.136114671826362610e-01 3.917571604251861572e-01 2.627024948596954346e-01 1.000000000000000000e+00 -1.178913488984107971e-01 3.969425857067108154e-01 2.588678300380706787e-01 1.000000000000000000e+00 -1.224720999598503113e-01 4.019851386547088623e-01 2.549790441989898682e-01 1.000000000000000000e+00 -1.273556202650070190e-01 4.068810641765594482e-01 2.510509788990020752e-01 1.000000000000000000e+00 -1.325431615114212036e-01 4.116269350051879883e-01 2.470986098051071167e-01 1.000000000000000000e+00 -1.380353271961212158e-01 4.162196218967437744e-01 2.431370615959167480e-01 1.000000000000000000e+00 -1.438320875167846680e-01 4.206563234329223633e-01 2.391815632581710815e-01 1.000000000000000000e+00 -1.499328017234802246e-01 4.249344766139984131e-01 2.352473586797714233e-01 1.000000000000000000e+00 -1.563361436128616333e-01 4.290519356727600098e-01 2.313497662544250488e-01 1.000000000000000000e+00 -1.630401760339736938e-01 4.330068230628967285e-01 2.275040894746780396e-01 1.000000000000000000e+00 -1.700423210859298706e-01 4.367975890636444092e-01 2.237255573272705078e-01 1.000000000000000000e+00 -1.773393601179122925e-01 4.404230713844299316e-01 2.200293689966201782e-01 1.000000000000000000e+00 -1.849274486303329468e-01 4.438824057579040527e-01 2.164306044578552246e-01 1.000000000000000000e+00 -1.928021460771560669e-01 4.471750557422637939e-01 2.129441946744918823e-01 1.000000000000000000e+00 -2.009583711624145508e-01 4.503008425235748291e-01 2.095849364995956421e-01 1.000000000000000000e+00 -2.093905061483383179e-01 4.532599449157714844e-01 2.063674032688140869e-01 1.000000000000000000e+00 -2.180922627449035645e-01 4.560528099536895752e-01 2.033059448003768921e-01 1.000000000000000000e+00 -2.270568460226058960e-01 4.586803615093231201e-01 2.004146575927734375e-01 1.000000000000000000e+00 -2.362768501043319702e-01 4.611437022686004639e-01 1.977073252201080322e-01 1.000000000000000000e+00 -2.457443773746490479e-01 4.634443819522857666e-01 1.951974183320999146e-01 1.000000000000000000e+00 -2.554509639739990234e-01 4.655842483043670654e-01 1.928980797529220581e-01 1.000000000000000000e+00 -2.653876245021820068e-01 4.675654768943786621e-01 1.908220648765563965e-01 1.000000000000000000e+00 -2.755448818206787109e-01 4.693906307220458984e-01 1.889817118644714355e-01 1.000000000000000000e+00 -2.859128713607788086e-01 4.710624516010284424e-01 1.873889416456222534e-01 1.000000000000000000e+00 -2.964811027050018311e-01 4.725841879844665527e-01 1.860552132129669189e-01 1.000000000000000000e+00 -3.072388172149658203e-01 4.739592075347900391e-01 1.849915087223052979e-01 1.000000000000000000e+00 -3.181747496128082275e-01 4.751913249492645264e-01 1.842083036899566650e-01 1.000000000000000000e+00 -3.292773067951202393e-01 4.762845635414123535e-01 1.837155520915985107e-01 1.000000000000000000e+00 -3.405344486236572266e-01 4.772432744503021240e-01 1.835226714611053467e-01 1.000000000000000000e+00 -3.519338667392730713e-01 4.780721068382263184e-01 1.836384832859039307e-01 1.000000000000000000e+00 -3.634629249572753906e-01 4.787759184837341309e-01 1.840712577104568481e-01 1.000000000000000000e+00 -3.751086592674255371e-01 4.793598949909210205e-01 1.848286241292953491e-01 1.000000000000000000e+00 -3.868579268455505371e-01 4.798294007778167725e-01 1.859176158905029297e-01 1.000000000000000000e+00 -3.986972570419311523e-01 4.801900684833526611e-01 1.873446404933929443e-01 1.000000000000000000e+00 -4.106130301952362061e-01 4.804477989673614502e-01 1.891154348850250244e-01 1.000000000000000000e+00 -4.225914180278778076e-01 4.806086421012878418e-01 1.912350803613662720e-01 1.000000000000000000e+00 -4.346184432506561279e-01 4.806789159774780273e-01 1.937079876661300659e-01 1.000000000000000000e+00 -4.466800093650817871e-01 4.806650280952453613e-01 1.965378969907760620e-01 1.000000000000000000e+00 -4.587619900703430176e-01 4.805736541748046875e-01 1.997278481721878052e-01 1.000000000000000000e+00 -4.708500504493713379e-01 4.804116189479827881e-01 2.032801955938339233e-01 1.000000000000000000e+00 -4.829299449920654297e-01 4.801858663558959961e-01 2.071965634822845459e-01 1.000000000000000000e+00 -4.949873983860015869e-01 4.799034893512725830e-01 2.114778906106948853e-01 1.000000000000000000e+00 -5.070081353187561035e-01 4.795717000961303711e-01 2.161244302988052368e-01 1.000000000000000000e+00 -5.189779400825500488e-01 4.791978001594543457e-01 2.211356908082962036e-01 1.000000000000000000e+00 -5.308826565742492676e-01 4.787892103195190430e-01 2.265104800462722778e-01 1.000000000000000000e+00 -5.427082777023315430e-01 4.783534109592437744e-01 2.322469204664230347e-01 1.000000000000000000e+00 -5.544409155845642090e-01 4.778979718685150146e-01 2.383424043655395508e-01 1.000000000000000000e+00 -5.660668611526489258e-01 4.774304330348968506e-01 2.447936534881591797e-01 1.000000000000000000e+00 -5.775726437568664551e-01 4.769584238529205322e-01 2.515966892242431641e-01 1.000000000000000000e+00 -5.889448523521423340e-01 4.764896035194396973e-01 2.587468326091766357e-01 1.000000000000000000e+00 -6.001705527305603027e-01 4.760315716266632080e-01 2.662387788295745850e-01 1.000000000000000000e+00 -6.112369298934936523e-01 4.755919277667999268e-01 2.740665078163146973e-01 1.000000000000000000e+00 -6.221315264701843262e-01 4.751782715320587158e-01 2.822233736515045166e-01 1.000000000000000000e+00 -6.328422427177429199e-01 4.747981131076812744e-01 2.907021045684814453e-01 1.000000000000000000e+00 -6.433572769165039062e-01 4.744589328765869141e-01 2.994947731494903564e-01 1.000000000000000000e+00 -6.536651849746704102e-01 4.741680920124053955e-01 3.085928559303283691e-01 1.000000000000000000e+00 -6.637550592422485352e-01 4.739328920841217041e-01 3.179873228073120117e-01 1.000000000000000000e+00 -6.736162304878234863e-01 4.737605154514312744e-01 3.276684284210205078e-01 1.000000000000000000e+00 -6.832386851310729980e-01 4.736579954624176025e-01 3.376260101795196533e-01 1.000000000000000000e+00 -6.926126480102539062e-01 4.736322760581970215e-01 3.478492796421051025e-01 1.000000000000000000e+00 -7.017289996147155762e-01 4.736901223659515381e-01 3.583270013332366943e-01 1.000000000000000000e+00 -7.105790376663208008e-01 4.738381206989288330e-01 3.690474331378936768e-01 1.000000000000000000e+00 -7.191546559333801270e-01 4.740826785564422607e-01 3.799983859062194824e-01 1.000000000000000000e+00 -7.274482250213623047e-01 4.744300246238708496e-01 3.911672532558441162e-01 1.000000000000000000e+00 -7.354526519775390625e-01 4.748861789703369141e-01 4.025409519672393799e-01 1.000000000000000000e+00 -7.431614995002746582e-01 4.754569530487060547e-01 4.141060709953308105e-01 1.000000000000000000e+00 -7.505688667297363281e-01 4.761479198932647705e-01 4.258488714694976807e-01 1.000000000000000000e+00 -7.576693892478942871e-01 4.769644141197204590e-01 4.377551972866058350e-01 1.000000000000000000e+00 -7.644583582878112793e-01 4.779114723205566406e-01 4.498107135295867920e-01 1.000000000000000000e+00 -7.709317207336425781e-01 4.789939522743225098e-01 4.620007574558258057e-01 1.000000000000000000e+00 -7.770860195159912109e-01 4.802163839340209961e-01 4.743103682994842529e-01 1.000000000000000000e+00 -7.829183340072631836e-01 4.815830290317535400e-01 4.867245256900787354e-01 1.000000000000000000e+00 -7.884265184402465820e-01 4.830978810787200928e-01 4.992278814315795898e-01 1.000000000000000000e+00 -7.936089038848876953e-01 4.847646057605743408e-01 5.118050575256347656e-01 1.000000000000000000e+00 -7.984646558761596680e-01 4.865865409374237061e-01 5.244405269622802734e-01 1.000000000000000000e+00 -8.029934167861938477e-01 4.885667860507965088e-01 5.371186733245849609e-01 1.000000000000000000e+00 -8.071955442428588867e-01 4.907080829143524170e-01 5.498238801956176758e-01 1.000000000000000000e+00 -8.110720515251159668e-01 4.930128455162048340e-01 5.625403523445129395e-01 1.000000000000000000e+00 -8.146245479583740234e-01 4.954831600189208984e-01 5.752525925636291504e-01 1.000000000000000000e+00 -8.178552389144897461e-01 4.981207847595214844e-01 5.879449248313903809e-01 1.000000000000000000e+00 -8.207671046257019043e-01 5.009271502494812012e-01 6.006018519401550293e-01 1.000000000000000000e+00 -8.233636021614074707e-01 5.039033293724060059e-01 6.132079362869262695e-01 1.000000000000000000e+00 -8.256489038467407227e-01 5.070500969886779785e-01 6.257479786872863770e-01 1.000000000000000000e+00 -8.276276588439941406e-01 5.103678107261657715e-01 6.382068991661071777e-01 1.000000000000000000e+00 -8.293052315711975098e-01 5.138565897941589355e-01 6.505697965621948242e-01 1.000000000000000000e+00 -8.306875824928283691e-01 5.175161361694335938e-01 6.628221273422241211e-01 1.000000000000000000e+00 -8.317810893058776855e-01 5.213457942008972168e-01 6.749494075775146484e-01 1.000000000000000000e+00 -8.325928449630737305e-01 5.253446698188781738e-01 6.869376897811889648e-01 1.000000000000000000e+00 -8.331304192543029785e-01 5.295114517211914062e-01 6.987732052803039551e-01 1.000000000000000000e+00 -8.334019184112548828e-01 5.338444709777832031e-01 7.104426622390747070e-01 1.000000000000000000e+00 -8.334159255027770996e-01 5.383418202400207520e-01 7.219330072402954102e-01 1.000000000000000000e+00 -8.331815004348754883e-01 5.430011749267578125e-01 7.332316637039184570e-01 1.000000000000000000e+00 -8.327082395553588867e-01 5.478200316429138184e-01 7.443265318870544434e-01 1.000000000000000000e+00 -8.320061564445495605e-01 5.527953505516052246e-01 7.552060484886169434e-01 1.000000000000000000e+00 -8.310856819152832031e-01 5.579239726066589355e-01 7.658588886260986328e-01 1.000000000000000000e+00 -8.299576640129089355e-01 5.632023811340332031e-01 7.762744426727294922e-01 1.000000000000000000e+00 -8.286333084106445312e-01 5.686267614364624023e-01 7.864426374435424805e-01 1.000000000000000000e+00 -8.271241188049316406e-01 5.741930007934570312e-01 7.963538169860839844e-01 1.000000000000000000e+00 -8.254420757293701172e-01 5.798967480659484863e-01 8.059990406036376953e-01 1.000000000000000000e+00 -8.235993981361389160e-01 5.857333540916442871e-01 8.153699040412902832e-01 1.000000000000000000e+00 -8.216084837913513184e-01 5.916978716850280762e-01 8.244585394859313965e-01 1.000000000000000000e+00 -8.194820880889892578e-01 5.977852940559387207e-01 8.332578539848327637e-01 1.000000000000000000e+00 -8.172332644462585449e-01 6.039900779724121094e-01 8.417612314224243164e-01 1.000000000000000000e+00 -8.148750066757202148e-01 6.103067994117736816e-01 8.499628901481628418e-01 1.000000000000000000e+00 -8.124207854270935059e-01 6.167295575141906738e-01 8.578575849533081055e-01 1.000000000000000000e+00 -8.098839521408081055e-01 6.232523918151855469e-01 8.654407262802124023e-01 1.000000000000000000e+00 -8.072780370712280273e-01 6.298691034317016602e-01 8.727085590362548828e-01 1.000000000000000000e+00 -8.046168088912963867e-01 6.365733742713928223e-01 8.796578645706176758e-01 1.000000000000000000e+00 -8.019139170646667480e-01 6.433586478233337402e-01 8.862861394882202148e-01 1.000000000000000000e+00 -7.991830110549926758e-01 6.502183675765991211e-01 8.925917148590087891e-01 1.000000000000000000e+00 -7.964378595352172852e-01 6.571456789970397949e-01 8.985735177993774414e-01 1.000000000000000000e+00 -7.936920523643493652e-01 6.641337275505065918e-01 9.042311906814575195e-01 1.000000000000000000e+00 -7.909592390060424805e-01 6.711755394935607910e-01 9.095650911331176758e-01 1.000000000000000000e+00 -7.882528901100158691e-01 6.782640814781188965e-01 9.145763516426086426e-01 1.000000000000000000e+00 -7.855862975120544434e-01 6.853922009468078613e-01 9.192667007446289062e-01 1.000000000000000000e+00 -7.829727530479431152e-01 6.925527453422546387e-01 9.236386418342590332e-01 1.000000000000000000e+00 -7.804252505302429199e-01 6.997384428977966309e-01 9.276953339576721191e-01 1.000000000000000000e+00 -7.779565453529357910e-01 7.069422006607055664e-01 9.314405918121337891e-01 1.000000000000000000e+00 -7.755791544914245605e-01 7.141566872596740723e-01 9.348790645599365234e-01 1.000000000000000000e+00 -7.733053565025329590e-01 7.213746905326843262e-01 9.380158782005310059e-01 1.000000000000000000e+00 -7.711471915245056152e-01 7.285891175270080566e-01 9.408568739891052246e-01 1.000000000000000000e+00 -7.691162824630737305e-01 7.357927560806274414e-01 9.434086084365844727e-01 1.000000000000000000e+00 -7.672238945960998535e-01 7.429785728454589844e-01 9.456781744956970215e-01 1.000000000000000000e+00 -7.654808759689331055e-01 7.501395940780639648e-01 9.476732611656188965e-01 1.000000000000000000e+00 -7.638978362083435059e-01 7.572689056396484375e-01 9.494022727012634277e-01 1.000000000000000000e+00 -7.624848484992980957e-01 7.643596529960632324e-01 9.508740901947021484e-01 1.000000000000000000e+00 -7.612514495849609375e-01 7.714053392410278320e-01 9.520981311798095703e-01 1.000000000000000000e+00 -7.602068781852722168e-01 7.783992886543273926e-01 9.530844092369079590e-01 1.000000000000000000e+00 -7.593597769737243652e-01 7.853352427482604980e-01 9.538434147834777832e-01 1.000000000000000000e+00 -7.587183117866516113e-01 7.922069430351257324e-01 9.543861150741577148e-01 1.000000000000000000e+00 -7.582900524139404297e-01 7.990084290504455566e-01 9.547239542007446289e-01 1.000000000000000000e+00 -7.580821514129638672e-01 8.057338595390319824e-01 9.548687934875488281e-01 1.000000000000000000e+00 -7.581010460853576660e-01 8.123776316642761230e-01 9.548329114913940430e-01 1.000000000000000000e+00 -7.583526968955993652e-01 8.189343810081481934e-01 9.546289443969726562e-01 1.000000000000000000e+00 -7.588424682617187500e-01 8.253990411758422852e-01 9.542699456214904785e-01 1.000000000000000000e+00 -7.595750093460083008e-01 8.317666053771972656e-01 9.537692070007324219e-01 1.000000000000000000e+00 -7.605544924736022949e-01 8.380325436592102051e-01 9.531403183937072754e-01 1.000000000000000000e+00 -7.617843747138977051e-01 8.441924452781677246e-01 9.523972272872924805e-01 1.000000000000000000e+00 -7.632674574851989746e-01 8.502422571182250977e-01 9.515540003776550293e-01 1.000000000000000000e+00 -7.650059461593627930e-01 8.561782240867614746e-01 9.506248831748962402e-01 1.000000000000000000e+00 -7.670014500617980957e-01 8.619968295097351074e-01 9.496243596076965332e-01 1.000000000000000000e+00 -7.692547440528869629e-01 8.676949143409729004e-01 9.485669732093811035e-01 1.000000000000000000e+00 -7.717661857604980469e-01 8.732696771621704102e-01 9.474674463272094727e-01 1.000000000000000000e+00 -7.745352387428283691e-01 8.787184953689575195e-01 9.463404417037963867e-01 1.000000000000000000e+00 -7.775608301162719727e-01 8.840392231941223145e-01 9.452008008956909180e-01 1.000000000000000000e+00 -7.808412313461303711e-01 8.892300724983215332e-01 9.440631866455078125e-01 1.000000000000000000e+00 -7.843739986419677734e-01 8.942894339561462402e-01 9.429422616958618164e-01 1.000000000000000000e+00 -7.881561517715454102e-01 8.992161750793457031e-01 9.418526887893676758e-01 1.000000000000000000e+00 -7.921838164329528809e-01 9.040095210075378418e-01 9.408089518547058105e-01 1.000000000000000000e+00 -7.964528203010559082e-01 9.086689949035644531e-01 9.398253560066223145e-01 1.000000000000000000e+00 -8.009580373764038086e-01 9.131944179534912109e-01 9.389160871505737305e-01 1.000000000000000000e+00 -8.056939840316772461e-01 9.175861477851867676e-01 9.380950331687927246e-01 1.000000000000000000e+00 -8.106543421745300293e-01 9.218447208404541016e-01 9.373759031295776367e-01 1.000000000000000000e+00 -8.158323168754577637e-01 9.259710907936096191e-01 9.367721080780029297e-01 1.000000000000000000e+00 -8.212205767631530762e-01 9.299666881561279297e-01 9.362966418266296387e-01 1.000000000000000000e+00 -8.268111348152160645e-01 9.338331222534179688e-01 9.359622597694396973e-01 1.000000000000000000e+00 -8.325954675674438477e-01 9.375724196434020996e-01 9.357812404632568359e-01 1.000000000000000000e+00 -8.385645151138305664e-01 9.411869645118713379e-01 9.357655644416809082e-01 1.000000000000000000e+00 -8.447087407112121582e-01 9.446794390678405762e-01 9.359266161918640137e-01 1.000000000000000000e+00 -8.510181307792663574e-01 9.480530023574829102e-01 9.362754225730895996e-01 1.000000000000000000e+00 -8.574820756912231445e-01 9.513109922409057617e-01 9.368224740028381348e-01 1.000000000000000000e+00 -8.640896677970886230e-01 9.544571042060852051e-01 9.375776648521423340e-01 1.000000000000000000e+00 -8.708295822143554688e-01 9.574954509735107422e-01 9.385503530502319336e-01 1.000000000000000000e+00 -8.776899576187133789e-01 9.604302644729614258e-01 9.397493004798889160e-01 1.000000000000000000e+00 -8.846586346626281738e-01 9.632663726806640625e-01 9.411827921867370605e-01 1.000000000000000000e+00 -8.917231559753417969e-01 9.660085439682006836e-01 9.428583383560180664e-01 1.000000000000000000e+00 -8.988707065582275391e-01 9.686621427536010742e-01 9.447827339172363281e-01 1.000000000000000000e+00 -9.060882329940795898e-01 9.712325930595397949e-01 9.469622969627380371e-01 1.000000000000000000e+00 -9.133623242378234863e-01 9.737257361412048340e-01 9.494024515151977539e-01 1.000000000000000000e+00 -9.206793904304504395e-01 9.761474728584289551e-01 9.521080255508422852e-01 1.000000000000000000e+00 -9.280257821083068848e-01 9.785040616989135742e-01 9.550830721855163574e-01 1.000000000000000000e+00 -9.353874921798706055e-01 9.808020591735839844e-01 9.583308696746826172e-01 1.000000000000000000e+00 -9.427505135536193848e-01 9.830480217933654785e-01 9.618541002273559570e-01 1.000000000000000000e+00 -9.501006603240966797e-01 9.852488636970520020e-01 9.656543731689453125e-01 1.000000000000000000e+00 -9.574237465858459473e-01 9.874115586280822754e-01 9.697328209877014160e-01 1.000000000000000000e+00 -9.647055268287658691e-01 9.895434379577636719e-01 9.740896224975585938e-01 1.000000000000000000e+00 -9.719318151473999023e-01 9.916517138481140137e-01 9.787241816520690918e-01 1.000000000000000000e+00 -9.790884852409362793e-01 9.937438368797302246e-01 9.836350679397583008e-01 1.000000000000000000e+00 -9.861613512039184570e-01 9.958274960517883301e-01 9.888201355934143066e-01 1.000000000000000000e+00 -9.931364655494689941e-01 9.979103207588195801e-01 9.942764043807983398e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/flag b/fastplotlib/utils/colormaps/flag deleted file mode 100644 index 0b54453c0..000000000 --- a/fastplotlib/utils/colormaps/flag +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.784110546112060547e-01 2.097892612218856812e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.005430459976196289e-01 4.930701255798339844e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.184870123863220215e-01 7.773815989494323730e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.998292326927185059e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.029407262802124023e-01 9.324722290039062500e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.207872986793518066e-01 7.264335751533508301e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.355422377586364746e-01 4.123563170433044434e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.695150092244148254e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.155673146247863770e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.346375703811645508e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.485564053058624268e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.719138771295547485e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.515239298343658447e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.383435368537902832e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.897156357765197754e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.090170025825500488e-01 1.595071256160736084e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.459280848503112793e-01 4.377020001411437988e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.867737054824829102e-01 7.251621484756469727e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.957341551780700684e-01 9.791350960731506348e-01 1.000000000000000000e+00 -8.527833819389343262e-01 9.566044211387634277e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.760986208915710449e-01 7.752040028572082520e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.880961894989013672e-01 4.785115718841552734e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.160904347896575928e-02 1.106526851654052734e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.649533390998840332e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.898733139038085938e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.014268577098846436e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.251315072178840637e-02 1.000000000000000000e+00 -1.230012699961662292e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.963827192783355713e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.851746439933776855e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.464265108108520508e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.379352003335952759e-01 1.110846400260925293e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.877852439880371094e-01 3.826741576194763184e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.502171635627746582e-01 6.717129349708557129e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.862007498741149902e-01 9.352137446403503418e-01 1.000000000000000000e+00 -9.006991982460021973e-01 9.755119681358337402e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.309943795204162598e-01 8.197404742240905762e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.418074548244476318e-01 5.420533418655395508e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.614769041538238525e-02 1.837495118379592896e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.123461246490478516e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.446181535720825195e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.553818464279174805e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.765384554862976074e-02 1.000000000000000000e+00 -7.614769041538238525e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.418074548244476318e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.309943795204162598e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.006991982460021973e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.655538827180862427e-01 6.478627771139144897e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.264321565628051758e-01 3.282870948314666748e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.090170025825500488e-01 6.173258423805236816e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.712810516357421875e-01 8.889153599739074707e-01 1.000000000000000000e+00 -9.464265108108520508e-01 9.890916347503662109e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.851746439933776855e-01 8.597998619079589844e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.963827192783355713e-01 6.026346087455749512e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.230012699961662292e-01 2.558427751064300537e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.574868679046630859e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.985731124877929688e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.101267158985137939e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.350466459989547729e-01 1.000000000000000000e+00 -3.160904347896575928e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.880961894989013672e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.760986208915710449e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.527833819389343262e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.226836264133453369e-02 2.086489647626876831e-02 1.000000000000000000e+00 -1.000000000000000000e+00 4.622038900852203369e-01 2.748378515243530273e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.633982896804809570e-01 5.622979998588562012e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.510565400123596191e-01 8.404929041862487793e-01 1.000000000000000000e+00 -9.897156357765197754e-01 9.972691535949707031e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.383435368537902832e-01 8.951632976531982422e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.515239298343658447e-01 6.599245071411132812e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.719138771295547485e-01 3.265387117862701416e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.514436244964599609e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.653623998165130615e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.844326853752136230e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.355422377586364746e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.207872986793518066e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.029407262802124023e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.847890578210353851e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.954512178897857666e-01 2.226183861494064331e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.136101722717285156e-01 5.069298744201660156e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.256376624107360840e-01 7.902107238769531250e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.902107238769531250e-01 9.256376624107360840e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.069298744201660156e-01 7.136101722717285156e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.226183861494064331e-01 3.954512178897857666e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.847890578210353851e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.029407262802124023e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.207872986793518066e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.355422377586364746e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.844326853752136230e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.653623998165130615e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.514436244964599609e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.265387117862701416e-01 1.719138771295547485e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.599245071411132812e-01 4.515239298343658447e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.951632976531982422e-01 7.383435368537902832e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.972691535949707031e-01 9.897156357765197754e-01 1.000000000000000000e+00 -8.404929041862487793e-01 9.510565400123596191e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.622979998588562012e-01 7.633982896804809570e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.748378515243530273e-01 4.622038900852203369e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.086489647626876831e-02 9.226836264133453369e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.527833819389343262e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.760986208915710449e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.880961894989013672e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.160904347896575928e-02 1.000000000000000000e+00 -1.350466459989547729e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.101267158985137939e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.985731124877929688e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.574868679046630859e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.558427751064300537e-01 1.230012699961662292e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.026346087455749512e-01 3.963827192783355713e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.597998619079589844e-01 6.851746439933776855e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.890916347503662109e-01 9.464265108108520508e-01 1.000000000000000000e+00 -8.889153599739074707e-01 9.712810516357421875e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.173258423805236816e-01 8.090170025825500488e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.282870948314666748e-01 5.264321565628051758e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.478627771139144897e-02 1.655538827180862427e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.006991982460021973e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.309943795204162598e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.418074548244476318e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.614769041538238525e-02 1.000000000000000000e+00 -8.765384554862976074e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.553818464279174805e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.446181535720825195e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.123461246490478516e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.837495118379592896e-01 7.614769041538238525e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.420533418655395508e-01 3.418074548244476318e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.197404742240905762e-01 6.309943795204162598e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.755119681358337402e-01 9.006991982460021973e-01 1.000000000000000000e+00 -9.352137446403503418e-01 9.862007498741149902e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.717129349708557129e-01 8.502171635627746582e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.826741576194763184e-01 5.877852439880371094e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.110846400260925293e-01 2.379352003335952759e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.464265108108520508e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.851746439933776855e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.963827192783355713e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.230012699961662292e-01 1.000000000000000000e+00 -4.251315072178840637e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.014268577098846436e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.898733139038085938e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.649533390998840332e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.106526851654052734e-01 3.160904347896575928e-02 1.000000000000000000e+00 -1.000000000000000000e+00 4.785115718841552734e-01 2.880961894989013672e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.752040028572082520e-01 5.760986208915710449e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.566044211387634277e-01 8.527833819389343262e-01 1.000000000000000000e+00 -9.791350960731506348e-01 9.957341551780700684e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.251621484756469727e-01 8.867737054824829102e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.377020001411437988e-01 6.459280848503112793e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.595071256160736084e-01 3.090170025825500488e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.897156357765197754e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.383435368537902832e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.515239298343658447e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.719138771295547485e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.485564053058624268e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.346375703811645508e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.155673146247863770e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.695150092244148254e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.123563170433044434e-01 2.355422377586364746e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.264335751533508301e-01 5.207872986793518066e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.324722290039062500e-01 8.029407262802124023e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.998292326927185059e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.773815989494323730e-01 9.184870123863220215e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.930701255798339844e-01 7.005430459976196289e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.097892612218856812e-01 3.784110546112060547e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.902107238769531250e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.069298744201660156e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.226183861494064331e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.970592439174652100e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.792127013206481934e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.644577622413635254e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.439489305019378662e-01 1.844326853752136230e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.736956238746643066e-01 4.653623998165130615e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.032471776008605957e-01 7.514436244964599609e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.984636306762695312e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.280861377716064453e-01 9.451838135719299316e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.484760999679565430e-01 7.513318657875061035e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.616564333438873291e-01 4.457383453845977783e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.028437074273824692e-02 7.385252416133880615e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.404929041862487793e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.622979998588562012e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.748378515243530273e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.086489647626876831e-02 1.000000000000000000e+00 -1.472166478633880615e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.239013493061065674e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.119038105010986328e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.683909416198730469e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.736629843711853027e-01 1.350466459989547729e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.172782182693481445e-01 4.101267158985137939e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.690889477729797363e-01 6.985731124877929688e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.916446805000305176e-01 9.574868679046630859e-01 1.000000000000000000e+00 -8.769987225532531738e-01 9.667183756828308105e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.036172509193420410e-01 7.980172038078308105e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.148253560066223145e-01 5.106312036514282227e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.357348546385765076e-02 1.473017036914825439e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.889153599739074707e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.173258423805236816e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.282870948314666748e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.478627771139144897e-02 1.000000000000000000e+00 -9.930082410573959351e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.690056204795837402e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.581925153732299805e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.238523244857788086e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.018824070692062378e-01 8.765384554862976074e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.574894547462463379e-01 3.553818464279174805e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.301840424537658691e-01 6.446181535720825195e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.794097542762756348e-01 9.123461246490478516e-01 1.000000000000000000e+00 -9.238523244857788086e-01 9.829730987548828125e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.581925153732299805e-01 8.403440713882446289e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.690056204795837402e-01 5.727351307868957520e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.930082410573959351e-02 2.199463546276092529e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.352137446403503418e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.717129349708557129e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.826741576194763184e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.110846400260925293e-01 1.000000000000000000e+00 -5.357348546385765076e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.148253560066223145e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.036172509193420410e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.769987225532531738e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.289992183446884155e-01 4.251315072178840637e-02 1.000000000000000000e+00 -1.000000000000000000e+00 4.946558475494384766e-01 3.014268577098846436e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.867449522018432617e-01 5.898733139038085938e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.618256688117980957e-01 8.649533390998840332e-01 1.000000000000000000e+00 -9.683909416198730469e-01 9.938591122627258301e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.119038105010986328e-01 8.780812621116638184e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.239013493061065674e-01 6.317110061645507812e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.472166478633880615e-01 2.913897335529327393e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.791350960731506348e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.251621484756469727e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.377020001411437988e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.595071256160736084e-01 1.000000000000000000e+00 -1.028437074273824692e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.616564333438873291e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.484760999679565430e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.280861377716064453e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.541147664189338684e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.291206002235412598e-01 2.485564053058624268e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.390089035034179688e-01 5.346375703811645508e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.389883875846862793e-01 8.155673146247863770e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.993170499801635742e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.644577622413635254e-01 9.110226631164550781e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.792127013206481934e-01 6.872366666793823242e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.970592439174652100e-01 3.612416684627532959e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.773815989494323730e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.930701255798339844e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.097892612218856812e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/gist_earth b/fastplotlib/utils/colormaps/gist_earth deleted file mode 100644 index 86667b3f7..000000000 --- a/fastplotlib/utils/colormaps/gist_earth +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.613453427329659462e-03 0.000000000000000000e+00 1.686920076608657837e-01 1.000000000000000000e+00 -5.226906854659318924e-03 0.000000000000000000e+00 2.216635644435882568e-01 1.000000000000000000e+00 -7.840359583497047424e-03 0.000000000000000000e+00 2.638055086135864258e-01 1.000000000000000000e+00 -1.045381370931863785e-02 0.000000000000000000e+00 3.059474229812622070e-01 1.000000000000000000e+00 -1.306726690381765366e-02 0.000000000000000000e+00 3.480893671512603760e-01 1.000000000000000000e+00 -1.568071916699409485e-02 0.000000000000000000e+00 3.902312815189361572e-01 1.000000000000000000e+00 -1.829417236149311066e-02 0.000000000000000000e+00 4.323732256889343262e-01 1.000000000000000000e+00 -2.090762741863727570e-02 8.907333016395568848e-03 4.547451436519622803e-01 1.000000000000000000e+00 -2.352108061313629150e-02 1.792741753160953522e-02 4.556058943271636963e-01 1.000000000000000000e+00 -2.613453380763530731e-02 2.694750204682350159e-02 4.563167989253997803e-01 1.000000000000000000e+00 -2.874798700213432312e-02 3.596758469939231873e-02 4.570276737213134766e-01 1.000000000000000000e+00 -3.136143833398818970e-02 4.498767107725143433e-02 4.577385485172271729e-01 1.000000000000000000e+00 -3.397489339113235474e-02 5.400775372982025146e-02 4.584494233131408691e-01 1.000000000000000000e+00 -3.658834472298622131e-02 6.302783638238906860e-02 4.591603279113769531e-01 1.000000000000000000e+00 -3.920179978013038635e-02 7.204792648553848267e-02 4.598712027072906494e-01 1.000000000000000000e+00 -4.181525483727455139e-02 8.106800913810729980e-02 4.605820775032043457e-01 1.000000000000000000e+00 -4.442870616912841797e-02 9.008809179067611694e-02 4.612929522991180420e-01 1.000000000000000000e+00 -4.704216122627258301e-02 9.910817444324493408e-02 4.620038568973541260e-01 1.000000000000000000e+00 -4.965561255812644958e-02 1.081282645463943481e-01 4.627147316932678223e-01 1.000000000000000000e+00 -5.226906761527061462e-02 1.171483471989631653e-01 4.634256064891815186e-01 1.000000000000000000e+00 -5.488251894712448120e-02 1.261684298515319824e-01 4.641364812850952148e-01 1.000000000000000000e+00 -5.749597400426864624e-02 1.351885199546813965e-01 4.648473858833312988e-01 1.000000000000000000e+00 -6.010942533612251282e-02 1.442085951566696167e-01 4.655582606792449951e-01 1.000000000000000000e+00 -6.272287666797637939e-02 1.532286852598190308e-01 4.662691354751586914e-01 1.000000000000000000e+00 -6.533633172512054443e-02 1.622487604618072510e-01 4.669800102710723877e-01 1.000000000000000000e+00 -6.794978678226470947e-02 1.712688505649566650e-01 4.676908850669860840e-01 1.000000000000000000e+00 -7.056324183940887451e-02 1.802889406681060791e-01 4.684017896652221680e-01 1.000000000000000000e+00 -7.317668944597244263e-02 1.893081516027450562e-01 4.691126644611358643e-01 1.000000000000000000e+00 -7.579014450311660767e-02 1.974655985832214355e-01 4.698235392570495605e-01 1.000000000000000000e+00 -7.840359956026077271e-02 2.056230306625366211e-01 4.705344140529632568e-01 1.000000000000000000e+00 -8.101705461740493774e-02 2.137804627418518066e-01 4.712453186511993408e-01 1.000000000000000000e+00 -8.363050967454910278e-02 2.219378948211669922e-01 4.719561934471130371e-01 1.000000000000000000e+00 -8.624395728111267090e-02 2.300953269004821777e-01 4.726670682430267334e-01 1.000000000000000000e+00 -8.885741233825683594e-02 2.382527589797973633e-01 4.733779430389404297e-01 1.000000000000000000e+00 -9.147086739540100098e-02 2.464101910591125488e-01 4.740888476371765137e-01 1.000000000000000000e+00 -9.408432245254516602e-02 2.545676231384277344e-01 4.747997224330902100e-01 1.000000000000000000e+00 -9.669777005910873413e-02 2.627250552177429199e-01 4.755105972290039062e-01 1.000000000000000000e+00 -9.931122511625289917e-02 2.708824872970581055e-01 4.762214720249176025e-01 1.000000000000000000e+00 -1.019246801733970642e-01 2.790399193763732910e-01 4.769323766231536865e-01 1.000000000000000000e+00 -1.045381352305412292e-01 2.871973812580108643e-01 4.776432514190673828e-01 1.000000000000000000e+00 -1.071515828371047974e-01 2.953548133373260498e-01 4.783541262149810791e-01 1.000000000000000000e+00 -1.097650378942489624e-01 3.035109937191009521e-01 4.790650010108947754e-01 1.000000000000000000e+00 -1.123784929513931274e-01 3.108446002006530762e-01 4.797759056091308594e-01 1.000000000000000000e+00 -1.149919480085372925e-01 3.181782066822052002e-01 4.804867804050445557e-01 1.000000000000000000e+00 -1.176053956151008606e-01 3.255118131637573242e-01 4.811976552009582520e-01 1.000000000000000000e+00 -1.202188506722450256e-01 3.328454196453094482e-01 4.819085299968719482e-01 1.000000000000000000e+00 -1.228323057293891907e-01 3.401790261268615723e-01 4.826194345951080322e-01 1.000000000000000000e+00 -1.254457533359527588e-01 3.475126326084136963e-01 4.833303093910217285e-01 1.000000000000000000e+00 -1.280592083930969238e-01 3.548462390899658203e-01 4.840411841869354248e-01 1.000000000000000000e+00 -1.306726634502410889e-01 3.621798455715179443e-01 4.847520589828491211e-01 1.000000000000000000e+00 -1.332861185073852539e-01 3.695134520530700684e-01 4.854629337787628174e-01 1.000000000000000000e+00 -1.358995735645294189e-01 3.768470585346221924e-01 4.861738383769989014e-01 1.000000000000000000e+00 -1.385130286216735840e-01 3.841681778430938721e-01 4.868847131729125977e-01 1.000000000000000000e+00 -1.411264836788177490e-01 3.903659284114837646e-01 4.875955879688262939e-01 1.000000000000000000e+00 -1.437399387359619141e-01 3.965637087821960449e-01 4.883064627647399902e-01 1.000000000000000000e+00 -1.463533788919448853e-01 4.027614593505859375e-01 4.890173673629760742e-01 1.000000000000000000e+00 -1.489668339490890503e-01 4.089592099189758301e-01 4.897282421588897705e-01 1.000000000000000000e+00 -1.515802890062332153e-01 4.151569902896881104e-01 4.904391169548034668e-01 1.000000000000000000e+00 -1.541937440633773804e-01 4.213547408580780029e-01 4.911499917507171631e-01 1.000000000000000000e+00 -1.568071991205215454e-01 4.275524914264678955e-01 4.918608963489532471e-01 1.000000000000000000e+00 -1.594206541776657104e-01 4.337502717971801758e-01 4.925717711448669434e-01 1.000000000000000000e+00 -1.620341092348098755e-01 4.399480223655700684e-01 4.932826459407806396e-01 1.000000000000000000e+00 -1.646475642919540405e-01 4.461457729339599609e-01 4.939935207366943359e-01 1.000000000000000000e+00 -1.672610193490982056e-01 4.523435533046722412e-01 4.947044253349304199e-01 1.000000000000000000e+00 -1.698744595050811768e-01 4.585413038730621338e-01 4.954153001308441162e-01 1.000000000000000000e+00 -1.724879145622253418e-01 4.647390544414520264e-01 4.961261749267578125e-01 1.000000000000000000e+00 -1.751013696193695068e-01 4.709368348121643066e-01 4.968370497226715088e-01 1.000000000000000000e+00 -1.777148246765136719e-01 4.771345853805541992e-01 4.975479543209075928e-01 1.000000000000000000e+00 -1.803282797336578369e-01 4.833323359489440918e-01 4.982588291168212891e-01 1.000000000000000000e+00 -1.829417347908020020e-01 4.895301163196563721e-01 4.989697039127349854e-01 1.000000000000000000e+00 -1.855551898479461670e-01 4.957278668880462646e-01 4.996805787086486816e-01 1.000000000000000000e+00 -1.881686449050903320e-01 5.019256472587585449e-01 5.003914833068847656e-01 1.000000000000000000e+00 -1.900274306535720825e-01 5.042304396629333496e-01 4.956572353839874268e-01 1.000000000000000000e+00 -1.918770670890808105e-01 5.064879655838012695e-01 4.908568859100341797e-01 1.000000000000000000e+00 -1.937266886234283447e-01 5.087454915046691895e-01 4.860565364360809326e-01 1.000000000000000000e+00 -1.955763250589370728e-01 5.110030174255371094e-01 4.812561869621276855e-01 1.000000000000000000e+00 -1.974259465932846069e-01 5.132605433464050293e-01 4.764558076858520508e-01 1.000000000000000000e+00 -1.992755830287933350e-01 5.155180692672729492e-01 4.716554582118988037e-01 1.000000000000000000e+00 -2.011252045631408691e-01 5.177755951881408691e-01 4.668551087379455566e-01 1.000000000000000000e+00 -2.029748409986495972e-01 5.200331211090087891e-01 4.620547592639923096e-01 1.000000000000000000e+00 -2.048244625329971313e-01 5.222906470298767090e-01 4.572543799877166748e-01 1.000000000000000000e+00 -2.066740989685058594e-01 5.245481729507446289e-01 4.524540305137634277e-01 1.000000000000000000e+00 -2.085237205028533936e-01 5.268056988716125488e-01 4.476536810398101807e-01 1.000000000000000000e+00 -2.103733420372009277e-01 5.290632247924804688e-01 4.428533017635345459e-01 1.000000000000000000e+00 -2.122229784727096558e-01 5.313207507133483887e-01 4.380529522895812988e-01 1.000000000000000000e+00 -2.140726000070571899e-01 5.335782766342163086e-01 4.332526028156280518e-01 1.000000000000000000e+00 -2.159222364425659180e-01 5.358358025550842285e-01 4.284522533416748047e-01 1.000000000000000000e+00 -2.177718579769134521e-01 5.380933284759521484e-01 4.236518740653991699e-01 1.000000000000000000e+00 -2.196214944124221802e-01 5.403508543968200684e-01 4.188515245914459229e-01 1.000000000000000000e+00 -2.214711159467697144e-01 5.426083803176879883e-01 4.140511751174926758e-01 1.000000000000000000e+00 -2.233207523822784424e-01 5.448659062385559082e-01 4.092508256435394287e-01 1.000000000000000000e+00 -2.251703739166259766e-01 5.471234321594238281e-01 4.044504463672637939e-01 1.000000000000000000e+00 -2.270200103521347046e-01 5.493809580802917480e-01 3.996500968933105469e-01 1.000000000000000000e+00 -2.288696318864822388e-01 5.516384840011596680e-01 3.948497474193572998e-01 1.000000000000000000e+00 -2.307192683219909668e-01 5.538960099220275879e-01 3.900493681430816650e-01 1.000000000000000000e+00 -2.325688898563385010e-01 5.561535358428955078e-01 3.852490186691284180e-01 1.000000000000000000e+00 -2.344185262918472290e-01 5.584110617637634277e-01 3.804486691951751709e-01 1.000000000000000000e+00 -2.362681478261947632e-01 5.606685876846313477e-01 3.756483197212219238e-01 1.000000000000000000e+00 -2.381177842617034912e-01 5.629261136054992676e-01 3.708479404449462891e-01 1.000000000000000000e+00 -2.399674057960510254e-01 5.651836395263671875e-01 3.660475909709930420e-01 1.000000000000000000e+00 -2.418170422315597534e-01 5.674411654472351074e-01 3.612472414970397949e-01 1.000000000000000000e+00 -2.436666637659072876e-01 5.696986913681030273e-01 3.564468920230865479e-01 1.000000000000000000e+00 -2.455163002014160156e-01 5.719561576843261719e-01 3.516465127468109131e-01 1.000000000000000000e+00 -2.473659217357635498e-01 5.742136836051940918e-01 3.468461632728576660e-01 1.000000000000000000e+00 -2.492155581712722778e-01 5.764712095260620117e-01 3.420458137989044189e-01 1.000000000000000000e+00 -2.510651946067810059e-01 5.787287354469299316e-01 3.372454643249511719e-01 1.000000000000000000e+00 -2.529148161411285400e-01 5.809862613677978516e-01 3.324450850486755371e-01 1.000000000000000000e+00 -2.547644376754760742e-01 5.832437872886657715e-01 3.276447355747222900e-01 1.000000000000000000e+00 -2.566140592098236084e-01 5.855013132095336914e-01 3.228443861007690430e-01 1.000000000000000000e+00 -2.584637105464935303e-01 5.877588391304016113e-01 3.180440068244934082e-01 1.000000000000000000e+00 -2.603133320808410645e-01 5.900163650512695312e-01 3.132436573505401611e-01 1.000000000000000000e+00 -2.621629536151885986e-01 5.922738909721374512e-01 3.084433078765869141e-01 1.000000000000000000e+00 -2.640125751495361328e-01 5.945314168930053711e-01 3.036429584026336670e-01 1.000000000000000000e+00 -2.658621966838836670e-01 5.967889428138732910e-01 2.988425791263580322e-01 1.000000000000000000e+00 -2.677118480205535889e-01 5.990464687347412109e-01 2.940422296524047852e-01 1.000000000000000000e+00 -2.695614695549011230e-01 6.013039946556091309e-01 2.892418801784515381e-01 1.000000000000000000e+00 -2.714523077011108398e-01 6.035615205764770508e-01 2.844415307044982910e-01 1.000000000000000000e+00 -2.801693081855773926e-01 6.058190464973449707e-01 2.796411514282226562e-01 1.000000000000000000e+00 -2.888863384723663330e-01 6.080765724182128906e-01 2.748408019542694092e-01 1.000000000000000000e+00 -2.976033389568328857e-01 6.103340983390808105e-01 2.770664691925048828e-01 1.000000000000000000e+00 -3.063203394412994385e-01 6.125916242599487305e-01 2.793523967266082764e-01 1.000000000000000000e+00 -3.150373697280883789e-01 6.148491501808166504e-01 2.816383242607116699e-01 1.000000000000000000e+00 -3.237543702125549316e-01 6.171066761016845703e-01 2.839242219924926758e-01 1.000000000000000000e+00 -3.324714004993438721e-01 6.193642020225524902e-01 2.862101495265960693e-01 1.000000000000000000e+00 -3.411884009838104248e-01 6.216217279434204102e-01 2.884960472583770752e-01 1.000000000000000000e+00 -3.499054014682769775e-01 6.238792538642883301e-01 2.907819747924804688e-01 1.000000000000000000e+00 -3.586224317550659180e-01 6.261367797851562500e-01 2.930678725242614746e-01 1.000000000000000000e+00 -3.673394322395324707e-01 6.283943057060241699e-01 2.953538000583648682e-01 1.000000000000000000e+00 -3.760564625263214111e-01 6.306518316268920898e-01 2.976397275924682617e-01 1.000000000000000000e+00 -3.847734630107879639e-01 6.329093575477600098e-01 2.999256253242492676e-01 1.000000000000000000e+00 -3.934904634952545166e-01 6.351668834686279297e-01 3.022115528583526611e-01 1.000000000000000000e+00 -4.022074937820434570e-01 6.374244093894958496e-01 3.044974505901336670e-01 1.000000000000000000e+00 -4.109244942665100098e-01 6.396819353103637695e-01 3.067833781242370605e-01 1.000000000000000000e+00 -4.196415245532989502e-01 6.414068937301635742e-01 3.090692758560180664e-01 1.000000000000000000e+00 -4.283585250377655029e-01 6.431276202201843262e-01 3.113552033901214600e-01 1.000000000000000000e+00 -4.370755255222320557e-01 6.448482871055603027e-01 3.136411011219024658e-01 1.000000000000000000e+00 -4.457925558090209961e-01 6.465690135955810547e-01 3.159270286560058594e-01 1.000000000000000000e+00 -4.545095562934875488e-01 6.482896804809570312e-01 3.182129561901092529e-01 1.000000000000000000e+00 -4.632265865802764893e-01 6.500103473663330078e-01 3.204988539218902588e-01 1.000000000000000000e+00 -4.719323217868804932e-01 6.517310738563537598e-01 3.217388093471527100e-01 1.000000000000000000e+00 -4.783989787101745605e-01 6.534517407417297363e-01 3.229782283306121826e-01 1.000000000000000000e+00 -4.848656058311462402e-01 6.551724076271057129e-01 3.242176473140716553e-01 1.000000000000000000e+00 -4.913322627544403076e-01 6.568931341171264648e-01 3.254570960998535156e-01 1.000000000000000000e+00 -4.977988898754119873e-01 6.586138010025024414e-01 3.266965150833129883e-01 1.000000000000000000e+00 -5.042655467987060547e-01 6.603344678878784180e-01 3.279359340667724609e-01 1.000000000000000000e+00 -5.107321739196777344e-01 6.620551943778991699e-01 3.291753530502319336e-01 1.000000000000000000e+00 -5.171988010406494141e-01 6.637758612632751465e-01 3.304147720336914062e-01 1.000000000000000000e+00 -5.236654281616210938e-01 6.654965877532958984e-01 3.316542208194732666e-01 1.000000000000000000e+00 -5.301321148872375488e-01 6.672172546386718750e-01 3.328936398029327393e-01 1.000000000000000000e+00 -5.365987420082092285e-01 6.689379215240478516e-01 3.341330587863922119e-01 1.000000000000000000e+00 -5.430653691291809082e-01 6.706586480140686035e-01 3.353724777698516846e-01 1.000000000000000000e+00 -5.495319962501525879e-01 6.723793148994445801e-01 3.366119265556335449e-01 1.000000000000000000e+00 -5.559986829757690430e-01 6.740999817848205566e-01 3.378513455390930176e-01 1.000000000000000000e+00 -5.624653100967407227e-01 6.758207082748413086e-01 3.390907645225524902e-01 1.000000000000000000e+00 -5.689319372177124023e-01 6.775413751602172852e-01 3.403301835060119629e-01 1.000000000000000000e+00 -5.753985643386840820e-01 6.792620420455932617e-01 3.415696024894714355e-01 1.000000000000000000e+00 -5.818651914596557617e-01 6.809827685356140137e-01 3.428090512752532959e-01 1.000000000000000000e+00 -5.883318781852722168e-01 6.827034354209899902e-01 3.440484702587127686e-01 1.000000000000000000e+00 -5.947985053062438965e-01 6.844241023063659668e-01 3.452878892421722412e-01 1.000000000000000000e+00 -6.012651324272155762e-01 6.861448287963867188e-01 3.465273082256317139e-01 1.000000000000000000e+00 -6.077317595481872559e-01 6.878654956817626953e-01 3.477667272090911865e-01 1.000000000000000000e+00 -6.141984462738037109e-01 6.895862221717834473e-01 3.490061759948730469e-01 1.000000000000000000e+00 -6.206650733947753906e-01 6.913068890571594238e-01 3.502455949783325195e-01 1.000000000000000000e+00 -6.271317005157470703e-01 6.930275559425354004e-01 3.514850139617919922e-01 1.000000000000000000e+00 -6.335983276367187500e-01 6.947482824325561523e-01 3.527244329452514648e-01 1.000000000000000000e+00 -6.400649547576904297e-01 6.964689493179321289e-01 3.539638817310333252e-01 1.000000000000000000e+00 -6.465316414833068848e-01 6.981896162033081055e-01 3.552033007144927979e-01 1.000000000000000000e+00 -6.529982686042785645e-01 6.999103426933288574e-01 3.564427196979522705e-01 1.000000000000000000e+00 -6.594648957252502441e-01 7.016310095787048340e-01 3.576821386814117432e-01 1.000000000000000000e+00 -6.659315228462219238e-01 7.033516764640808105e-01 3.589215576648712158e-01 1.000000000000000000e+00 -6.723982095718383789e-01 7.050724029541015625e-01 3.601610064506530762e-01 1.000000000000000000e+00 -6.788648366928100586e-01 7.067930698394775391e-01 3.614004254341125488e-01 1.000000000000000000e+00 -6.853314638137817383e-01 7.085137367248535156e-01 3.626398444175720215e-01 1.000000000000000000e+00 -6.917980909347534180e-01 7.102344632148742676e-01 3.638792634010314941e-01 1.000000000000000000e+00 -6.982647180557250977e-01 7.119551301002502441e-01 3.651187121868133545e-01 1.000000000000000000e+00 -7.047314047813415527e-01 7.136758565902709961e-01 3.663581311702728271e-01 1.000000000000000000e+00 -7.111980319023132324e-01 7.153965234756469727e-01 3.675975501537322998e-01 1.000000000000000000e+00 -7.176163792610168457e-01 7.170661091804504395e-01 3.688369691371917725e-01 1.000000000000000000e+00 -7.192554473876953125e-01 7.136793136596679688e-01 3.700763881206512451e-01 1.000000000000000000e+00 -7.208945155143737793e-01 7.102925181388854980e-01 3.713158369064331055e-01 1.000000000000000000e+00 -7.225335836410522461e-01 7.069057226181030273e-01 3.725552558898925781e-01 1.000000000000000000e+00 -7.241726517677307129e-01 7.035188674926757812e-01 3.737946748733520508e-01 1.000000000000000000e+00 -7.258116602897644043e-01 7.001320719718933105e-01 3.750340938568115234e-01 1.000000000000000000e+00 -7.274507284164428711e-01 6.967452764511108398e-01 3.762735426425933838e-01 1.000000000000000000e+00 -7.290897965431213379e-01 6.933584809303283691e-01 3.775129616260528564e-01 1.000000000000000000e+00 -7.307288646697998047e-01 6.899716854095458984e-01 3.787523806095123291e-01 1.000000000000000000e+00 -7.323679327964782715e-01 6.865848302841186523e-01 3.799917995929718018e-01 1.000000000000000000e+00 -7.340070009231567383e-01 6.831980347633361816e-01 3.812312185764312744e-01 1.000000000000000000e+00 -7.356460690498352051e-01 6.798112392425537109e-01 3.824706673622131348e-01 1.000000000000000000e+00 -7.372850775718688965e-01 6.764244437217712402e-01 3.837100863456726074e-01 1.000000000000000000e+00 -7.389241456985473633e-01 6.730375885963439941e-01 3.849495053291320801e-01 1.000000000000000000e+00 -7.405632138252258301e-01 6.696507930755615234e-01 3.861889243125915527e-01 1.000000000000000000e+00 -7.422022819519042969e-01 6.662639975547790527e-01 3.874283730983734131e-01 1.000000000000000000e+00 -7.438413500785827637e-01 6.628772020339965820e-01 3.886677920818328857e-01 1.000000000000000000e+00 -7.454804182052612305e-01 6.594903469085693359e-01 3.899072110652923584e-01 1.000000000000000000e+00 -7.471194267272949219e-01 6.561035513877868652e-01 3.911466300487518311e-01 1.000000000000000000e+00 -7.487584948539733887e-01 6.527167558670043945e-01 3.923860490322113037e-01 1.000000000000000000e+00 -7.503975629806518555e-01 6.493299603462219238e-01 3.936254978179931641e-01 1.000000000000000000e+00 -7.520366311073303223e-01 6.459431648254394531e-01 3.948649168014526367e-01 1.000000000000000000e+00 -7.536756992340087891e-01 6.425563097000122070e-01 3.961336314678192139e-01 1.000000000000000000e+00 -7.553395032882690430e-01 6.392185091972351074e-01 4.057411253452301025e-01 1.000000000000000000e+00 -7.597258090972900391e-01 6.412773728370666504e-01 4.153485894203186035e-01 1.000000000000000000e+00 -7.641121149063110352e-01 6.429905891418457031e-01 4.249560832977294922e-01 1.000000000000000000e+00 -7.684984207153320312e-01 6.446999907493591309e-01 4.345635771751403809e-01 1.000000000000000000e+00 -7.728847265243530273e-01 6.464093923568725586e-01 4.441710412502288818e-01 1.000000000000000000e+00 -7.772710323333740234e-01 6.481371521949768066e-01 4.537785351276397705e-01 1.000000000000000000e+00 -7.816573381423950195e-01 6.515126824378967285e-01 4.633860290050506592e-01 1.000000000000000000e+00 -7.860436439514160156e-01 6.548882126808166504e-01 4.729935228824615479e-01 1.000000000000000000e+00 -7.904299497604370117e-01 6.582868099212646484e-01 4.826009869575500488e-01 1.000000000000000000e+00 -7.948162555694580078e-01 6.616854667663574219e-01 4.922084808349609375e-01 1.000000000000000000e+00 -7.992025613784790039e-01 6.650841832160949707e-01 5.018159747123718262e-01 1.000000000000000000e+00 -8.035888671875000000e-01 6.684828996658325195e-01 5.114234685897827148e-01 1.000000000000000000e+00 -8.079751729965209961e-01 6.718815565109252930e-01 5.210309624671936035e-01 1.000000000000000000e+00 -8.123614788055419922e-01 6.752802729606628418e-01 5.306384563446044922e-01 1.000000000000000000e+00 -8.167477846145629883e-01 6.786789298057556152e-01 5.402458906173706055e-01 1.000000000000000000e+00 -8.211340904235839844e-01 6.820776462554931641e-01 5.498533844947814941e-01 1.000000000000000000e+00 -8.255203962326049805e-01 6.854763627052307129e-01 5.594608783721923828e-01 1.000000000000000000e+00 -8.299067020416259766e-01 6.888750195503234863e-01 5.690683722496032715e-01 1.000000000000000000e+00 -8.342930078506469727e-01 6.922737360000610352e-01 5.786758661270141602e-01 1.000000000000000000e+00 -8.386793136596679688e-01 6.956723928451538086e-01 5.882833600044250488e-01 1.000000000000000000e+00 -8.430656194686889648e-01 6.990711092948913574e-01 5.978908538818359375e-01 1.000000000000000000e+00 -8.474519252777099609e-01 7.046831250190734863e-01 6.074982881546020508e-01 1.000000000000000000e+00 -8.518382310867309570e-01 7.103140354156494141e-01 6.171057820320129395e-01 1.000000000000000000e+00 -8.562245368957519531e-01 7.159233689308166504e-01 6.267132759094238281e-01 1.000000000000000000e+00 -8.606108427047729492e-01 7.215327024459838867e-01 6.363207697868347168e-01 1.000000000000000000e+00 -8.649971485137939453e-01 7.269150614738464355e-01 6.459282636642456055e-01 1.000000000000000000e+00 -8.693834543228149414e-01 7.322946190834045410e-01 6.555357575416564941e-01 1.000000000000000000e+00 -8.737697601318359375e-01 7.376742362976074219e-01 6.651532053947448730e-01 1.000000000000000000e+00 -8.781560659408569336e-01 7.430766820907592773e-01 6.769734621047973633e-01 1.000000000000000000e+00 -8.825423717498779297e-01 7.507473826408386230e-01 6.887937188148498535e-01 1.000000000000000000e+00 -8.869286775588989258e-01 7.584180235862731934e-01 7.006139755249023438e-01 1.000000000000000000e+00 -8.913149833679199219e-01 7.660886645317077637e-01 7.124341726303100586e-01 1.000000000000000000e+00 -8.957012891769409180e-01 7.737593650817871094e-01 7.242544293403625488e-01 1.000000000000000000e+00 -9.000875949859619141e-01 7.814300060272216797e-01 7.360746860504150391e-01 1.000000000000000000e+00 -9.044739007949829102e-01 7.891006469726562500e-01 7.478949427604675293e-01 1.000000000000000000e+00 -9.088602066040039062e-01 7.967713475227355957e-01 7.597151994705200195e-01 1.000000000000000000e+00 -9.132465124130249023e-01 8.044419884681701660e-01 7.715354561805725098e-01 1.000000000000000000e+00 -9.176328182220458984e-01 8.121126294136047363e-01 7.833557128906250000e-01 1.000000000000000000e+00 -9.220191240310668945e-01 8.197833299636840820e-01 7.951759696006774902e-01 1.000000000000000000e+00 -9.264054298400878906e-01 8.274539709091186523e-01 8.069962263107299805e-01 1.000000000000000000e+00 -9.307917356491088867e-01 8.364381790161132812e-01 8.188164830207824707e-01 1.000000000000000000e+00 -9.351780414581298828e-01 8.454303145408630371e-01 8.306367397308349609e-01 1.000000000000000000e+00 -9.395643472671508789e-01 8.544224500656127930e-01 8.424569964408874512e-01 1.000000000000000000e+00 -9.439506530761718750e-01 8.634145855903625488e-01 8.542772531509399414e-01 1.000000000000000000e+00 -9.483369588851928711e-01 8.725135922431945801e-01 8.660974502563476562e-01 1.000000000000000000e+00 -9.527232646942138672e-01 8.816171884536743164e-01 8.779177069664001465e-01 1.000000000000000000e+00 -9.571095705032348633e-01 8.930696845054626465e-01 8.897379636764526367e-01 1.000000000000000000e+00 -9.614958763122558594e-01 9.045221209526062012e-01 9.015582203865051270e-01 1.000000000000000000e+00 -9.658821821212768555e-01 9.159746170043945312e-01 9.133784770965576172e-01 1.000000000000000000e+00 -9.702684879302978516e-01 9.274271130561828613e-01 9.251987338066101074e-01 1.000000000000000000e+00 -9.746547937393188477e-01 9.388795495033264160e-01 9.370189905166625977e-01 1.000000000000000000e+00 -9.790410995483398438e-01 9.503320455551147461e-01 9.488392472267150879e-01 1.000000000000000000e+00 -9.834274053573608398e-01 9.617845416069030762e-01 9.606595039367675781e-01 1.000000000000000000e+00 -9.878137111663818359e-01 9.732370376586914062e-01 9.724797606468200684e-01 1.000000000000000000e+00 -9.922000169754028320e-01 9.843000173568725586e-01 9.843000173568725586e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/gist_gray b/fastplotlib/utils/colormaps/gist_gray deleted file mode 100644 index 42b875285..000000000 --- a/fastplotlib/utils/colormaps/gist_gray +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.921568859368562698e-03 3.921568859368562698e-03 3.921568859368562698e-03 1.000000000000000000e+00 -7.843137718737125397e-03 7.843137718737125397e-03 7.843137718737125397e-03 1.000000000000000000e+00 -1.176470611244440079e-02 1.176470611244440079e-02 1.176470611244440079e-02 1.000000000000000000e+00 -1.568627543747425079e-02 1.568627543747425079e-02 1.568627543747425079e-02 1.000000000000000000e+00 -1.960784383118152618e-02 1.960784383118152618e-02 1.960784383118152618e-02 1.000000000000000000e+00 -2.352941222488880157e-02 2.352941222488880157e-02 2.352941222488880157e-02 1.000000000000000000e+00 -2.745098061859607697e-02 2.745098061859607697e-02 2.745098061859607697e-02 1.000000000000000000e+00 -3.137255087494850159e-02 3.137255087494850159e-02 3.137255087494850159e-02 1.000000000000000000e+00 -3.529411926865577698e-02 3.529411926865577698e-02 3.529411926865577698e-02 1.000000000000000000e+00 -3.921568766236305237e-02 3.921568766236305237e-02 3.921568766236305237e-02 1.000000000000000000e+00 -4.313725605607032776e-02 4.313725605607032776e-02 4.313725605607032776e-02 1.000000000000000000e+00 -4.705882444977760315e-02 4.705882444977760315e-02 4.705882444977760315e-02 1.000000000000000000e+00 -5.098039284348487854e-02 5.098039284348487854e-02 5.098039284348487854e-02 1.000000000000000000e+00 -5.490196123719215393e-02 5.490196123719215393e-02 5.490196123719215393e-02 1.000000000000000000e+00 -5.882352963089942932e-02 5.882352963089942932e-02 5.882352963089942932e-02 1.000000000000000000e+00 -6.274510174989700317e-02 6.274510174989700317e-02 6.274510174989700317e-02 1.000000000000000000e+00 -6.666667014360427856e-02 6.666667014360427856e-02 6.666667014360427856e-02 1.000000000000000000e+00 -7.058823853731155396e-02 7.058823853731155396e-02 7.058823853731155396e-02 1.000000000000000000e+00 -7.450980693101882935e-02 7.450980693101882935e-02 7.450980693101882935e-02 1.000000000000000000e+00 -7.843137532472610474e-02 7.843137532472610474e-02 7.843137532472610474e-02 1.000000000000000000e+00 -8.235294371843338013e-02 8.235294371843338013e-02 8.235294371843338013e-02 1.000000000000000000e+00 -8.627451211214065552e-02 8.627451211214065552e-02 8.627451211214065552e-02 1.000000000000000000e+00 -9.019608050584793091e-02 9.019608050584793091e-02 9.019608050584793091e-02 1.000000000000000000e+00 -9.411764889955520630e-02 9.411764889955520630e-02 9.411764889955520630e-02 1.000000000000000000e+00 -9.803921729326248169e-02 9.803921729326248169e-02 9.803921729326248169e-02 1.000000000000000000e+00 -1.019607856869697571e-01 1.019607856869697571e-01 1.019607856869697571e-01 1.000000000000000000e+00 -1.058823540806770325e-01 1.058823540806770325e-01 1.058823540806770325e-01 1.000000000000000000e+00 -1.098039224743843079e-01 1.098039224743843079e-01 1.098039224743843079e-01 1.000000000000000000e+00 -1.137254908680915833e-01 1.137254908680915833e-01 1.137254908680915833e-01 1.000000000000000000e+00 -1.176470592617988586e-01 1.176470592617988586e-01 1.176470592617988586e-01 1.000000000000000000e+00 -1.215686276555061340e-01 1.215686276555061340e-01 1.215686276555061340e-01 1.000000000000000000e+00 -1.254902034997940063e-01 1.254902034997940063e-01 1.254902034997940063e-01 1.000000000000000000e+00 -1.294117718935012817e-01 1.294117718935012817e-01 1.294117718935012817e-01 1.000000000000000000e+00 -1.333333402872085571e-01 1.333333402872085571e-01 1.333333402872085571e-01 1.000000000000000000e+00 -1.372549086809158325e-01 1.372549086809158325e-01 1.372549086809158325e-01 1.000000000000000000e+00 -1.411764770746231079e-01 1.411764770746231079e-01 1.411764770746231079e-01 1.000000000000000000e+00 -1.450980454683303833e-01 1.450980454683303833e-01 1.450980454683303833e-01 1.000000000000000000e+00 -1.490196138620376587e-01 1.490196138620376587e-01 1.490196138620376587e-01 1.000000000000000000e+00 -1.529411822557449341e-01 1.529411822557449341e-01 1.529411822557449341e-01 1.000000000000000000e+00 -1.568627506494522095e-01 1.568627506494522095e-01 1.568627506494522095e-01 1.000000000000000000e+00 -1.607843190431594849e-01 1.607843190431594849e-01 1.607843190431594849e-01 1.000000000000000000e+00 -1.647058874368667603e-01 1.647058874368667603e-01 1.647058874368667603e-01 1.000000000000000000e+00 -1.686274558305740356e-01 1.686274558305740356e-01 1.686274558305740356e-01 1.000000000000000000e+00 -1.725490242242813110e-01 1.725490242242813110e-01 1.725490242242813110e-01 1.000000000000000000e+00 -1.764705926179885864e-01 1.764705926179885864e-01 1.764705926179885864e-01 1.000000000000000000e+00 -1.803921610116958618e-01 1.803921610116958618e-01 1.803921610116958618e-01 1.000000000000000000e+00 -1.843137294054031372e-01 1.843137294054031372e-01 1.843137294054031372e-01 1.000000000000000000e+00 -1.882352977991104126e-01 1.882352977991104126e-01 1.882352977991104126e-01 1.000000000000000000e+00 -1.921568661928176880e-01 1.921568661928176880e-01 1.921568661928176880e-01 1.000000000000000000e+00 -1.960784345865249634e-01 1.960784345865249634e-01 1.960784345865249634e-01 1.000000000000000000e+00 -2.000000029802322388e-01 2.000000029802322388e-01 2.000000029802322388e-01 1.000000000000000000e+00 -2.039215713739395142e-01 2.039215713739395142e-01 2.039215713739395142e-01 1.000000000000000000e+00 -2.078431397676467896e-01 2.078431397676467896e-01 2.078431397676467896e-01 1.000000000000000000e+00 -2.117647081613540649e-01 2.117647081613540649e-01 2.117647081613540649e-01 1.000000000000000000e+00 -2.156862765550613403e-01 2.156862765550613403e-01 2.156862765550613403e-01 1.000000000000000000e+00 -2.196078449487686157e-01 2.196078449487686157e-01 2.196078449487686157e-01 1.000000000000000000e+00 -2.235294133424758911e-01 2.235294133424758911e-01 2.235294133424758911e-01 1.000000000000000000e+00 -2.274509817361831665e-01 2.274509817361831665e-01 2.274509817361831665e-01 1.000000000000000000e+00 -2.313725501298904419e-01 2.313725501298904419e-01 2.313725501298904419e-01 1.000000000000000000e+00 -2.352941185235977173e-01 2.352941185235977173e-01 2.352941185235977173e-01 1.000000000000000000e+00 -2.392156869173049927e-01 2.392156869173049927e-01 2.392156869173049927e-01 1.000000000000000000e+00 -2.431372553110122681e-01 2.431372553110122681e-01 2.431372553110122681e-01 1.000000000000000000e+00 -2.470588237047195435e-01 2.470588237047195435e-01 2.470588237047195435e-01 1.000000000000000000e+00 -2.509804069995880127e-01 2.509804069995880127e-01 2.509804069995880127e-01 1.000000000000000000e+00 -2.549019753932952881e-01 2.549019753932952881e-01 2.549019753932952881e-01 1.000000000000000000e+00 -2.588235437870025635e-01 2.588235437870025635e-01 2.588235437870025635e-01 1.000000000000000000e+00 -2.627451121807098389e-01 2.627451121807098389e-01 2.627451121807098389e-01 1.000000000000000000e+00 -2.666666805744171143e-01 2.666666805744171143e-01 2.666666805744171143e-01 1.000000000000000000e+00 -2.705882489681243896e-01 2.705882489681243896e-01 2.705882489681243896e-01 1.000000000000000000e+00 -2.745098173618316650e-01 2.745098173618316650e-01 2.745098173618316650e-01 1.000000000000000000e+00 -2.784313857555389404e-01 2.784313857555389404e-01 2.784313857555389404e-01 1.000000000000000000e+00 -2.823529541492462158e-01 2.823529541492462158e-01 2.823529541492462158e-01 1.000000000000000000e+00 -2.862745225429534912e-01 2.862745225429534912e-01 2.862745225429534912e-01 1.000000000000000000e+00 -2.901960909366607666e-01 2.901960909366607666e-01 2.901960909366607666e-01 1.000000000000000000e+00 -2.941176593303680420e-01 2.941176593303680420e-01 2.941176593303680420e-01 1.000000000000000000e+00 -2.980392277240753174e-01 2.980392277240753174e-01 2.980392277240753174e-01 1.000000000000000000e+00 -3.019607961177825928e-01 3.019607961177825928e-01 3.019607961177825928e-01 1.000000000000000000e+00 -3.058823645114898682e-01 3.058823645114898682e-01 3.058823645114898682e-01 1.000000000000000000e+00 -3.098039329051971436e-01 3.098039329051971436e-01 3.098039329051971436e-01 1.000000000000000000e+00 -3.137255012989044189e-01 3.137255012989044189e-01 3.137255012989044189e-01 1.000000000000000000e+00 -3.176470696926116943e-01 3.176470696926116943e-01 3.176470696926116943e-01 1.000000000000000000e+00 -3.215686380863189697e-01 3.215686380863189697e-01 3.215686380863189697e-01 1.000000000000000000e+00 -3.254902064800262451e-01 3.254902064800262451e-01 3.254902064800262451e-01 1.000000000000000000e+00 -3.294117748737335205e-01 3.294117748737335205e-01 3.294117748737335205e-01 1.000000000000000000e+00 -3.333333432674407959e-01 3.333333432674407959e-01 3.333333432674407959e-01 1.000000000000000000e+00 -3.372549116611480713e-01 3.372549116611480713e-01 3.372549116611480713e-01 1.000000000000000000e+00 -3.411764800548553467e-01 3.411764800548553467e-01 3.411764800548553467e-01 1.000000000000000000e+00 -3.450980484485626221e-01 3.450980484485626221e-01 3.450980484485626221e-01 1.000000000000000000e+00 -3.490196168422698975e-01 3.490196168422698975e-01 3.490196168422698975e-01 1.000000000000000000e+00 -3.529411852359771729e-01 3.529411852359771729e-01 3.529411852359771729e-01 1.000000000000000000e+00 -3.568627536296844482e-01 3.568627536296844482e-01 3.568627536296844482e-01 1.000000000000000000e+00 -3.607843220233917236e-01 3.607843220233917236e-01 3.607843220233917236e-01 1.000000000000000000e+00 -3.647058904170989990e-01 3.647058904170989990e-01 3.647058904170989990e-01 1.000000000000000000e+00 -3.686274588108062744e-01 3.686274588108062744e-01 3.686274588108062744e-01 1.000000000000000000e+00 -3.725490272045135498e-01 3.725490272045135498e-01 3.725490272045135498e-01 1.000000000000000000e+00 -3.764705955982208252e-01 3.764705955982208252e-01 3.764705955982208252e-01 1.000000000000000000e+00 -3.803921639919281006e-01 3.803921639919281006e-01 3.803921639919281006e-01 1.000000000000000000e+00 -3.843137323856353760e-01 3.843137323856353760e-01 3.843137323856353760e-01 1.000000000000000000e+00 -3.882353007793426514e-01 3.882353007793426514e-01 3.882353007793426514e-01 1.000000000000000000e+00 -3.921568691730499268e-01 3.921568691730499268e-01 3.921568691730499268e-01 1.000000000000000000e+00 -3.960784375667572021e-01 3.960784375667572021e-01 3.960784375667572021e-01 1.000000000000000000e+00 -4.000000059604644775e-01 4.000000059604644775e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.039215743541717529e-01 4.039215743541717529e-01 4.039215743541717529e-01 1.000000000000000000e+00 -4.078431427478790283e-01 4.078431427478790283e-01 4.078431427478790283e-01 1.000000000000000000e+00 -4.117647111415863037e-01 4.117647111415863037e-01 4.117647111415863037e-01 1.000000000000000000e+00 -4.156862795352935791e-01 4.156862795352935791e-01 4.156862795352935791e-01 1.000000000000000000e+00 -4.196078479290008545e-01 4.196078479290008545e-01 4.196078479290008545e-01 1.000000000000000000e+00 -4.235294163227081299e-01 4.235294163227081299e-01 4.235294163227081299e-01 1.000000000000000000e+00 -4.274509847164154053e-01 4.274509847164154053e-01 4.274509847164154053e-01 1.000000000000000000e+00 -4.313725531101226807e-01 4.313725531101226807e-01 4.313725531101226807e-01 1.000000000000000000e+00 -4.352941215038299561e-01 4.352941215038299561e-01 4.352941215038299561e-01 1.000000000000000000e+00 -4.392156898975372314e-01 4.392156898975372314e-01 4.392156898975372314e-01 1.000000000000000000e+00 -4.431372582912445068e-01 4.431372582912445068e-01 4.431372582912445068e-01 1.000000000000000000e+00 -4.470588266849517822e-01 4.470588266849517822e-01 4.470588266849517822e-01 1.000000000000000000e+00 -4.509803950786590576e-01 4.509803950786590576e-01 4.509803950786590576e-01 1.000000000000000000e+00 -4.549019634723663330e-01 4.549019634723663330e-01 4.549019634723663330e-01 1.000000000000000000e+00 -4.588235318660736084e-01 4.588235318660736084e-01 4.588235318660736084e-01 1.000000000000000000e+00 -4.627451002597808838e-01 4.627451002597808838e-01 4.627451002597808838e-01 1.000000000000000000e+00 -4.666666686534881592e-01 4.666666686534881592e-01 4.666666686534881592e-01 1.000000000000000000e+00 -4.705882370471954346e-01 4.705882370471954346e-01 4.705882370471954346e-01 1.000000000000000000e+00 -4.745098054409027100e-01 4.745098054409027100e-01 4.745098054409027100e-01 1.000000000000000000e+00 -4.784313738346099854e-01 4.784313738346099854e-01 4.784313738346099854e-01 1.000000000000000000e+00 -4.823529422283172607e-01 4.823529422283172607e-01 4.823529422283172607e-01 1.000000000000000000e+00 -4.862745106220245361e-01 4.862745106220245361e-01 4.862745106220245361e-01 1.000000000000000000e+00 -4.901960790157318115e-01 4.901960790157318115e-01 4.901960790157318115e-01 1.000000000000000000e+00 -4.941176474094390869e-01 4.941176474094390869e-01 4.941176474094390869e-01 1.000000000000000000e+00 -4.980392158031463623e-01 4.980392158031463623e-01 4.980392158031463623e-01 1.000000000000000000e+00 -5.019608139991760254e-01 5.019608139991760254e-01 5.019608139991760254e-01 1.000000000000000000e+00 -5.058823823928833008e-01 5.058823823928833008e-01 5.058823823928833008e-01 1.000000000000000000e+00 -5.098039507865905762e-01 5.098039507865905762e-01 5.098039507865905762e-01 1.000000000000000000e+00 -5.137255191802978516e-01 5.137255191802978516e-01 5.137255191802978516e-01 1.000000000000000000e+00 -5.176470875740051270e-01 5.176470875740051270e-01 5.176470875740051270e-01 1.000000000000000000e+00 -5.215686559677124023e-01 5.215686559677124023e-01 5.215686559677124023e-01 1.000000000000000000e+00 -5.254902243614196777e-01 5.254902243614196777e-01 5.254902243614196777e-01 1.000000000000000000e+00 -5.294117927551269531e-01 5.294117927551269531e-01 5.294117927551269531e-01 1.000000000000000000e+00 -5.333333611488342285e-01 5.333333611488342285e-01 5.333333611488342285e-01 1.000000000000000000e+00 -5.372549295425415039e-01 5.372549295425415039e-01 5.372549295425415039e-01 1.000000000000000000e+00 -5.411764979362487793e-01 5.411764979362487793e-01 5.411764979362487793e-01 1.000000000000000000e+00 -5.450980663299560547e-01 5.450980663299560547e-01 5.450980663299560547e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.490196347236633301e-01 5.490196347236633301e-01 1.000000000000000000e+00 -5.529412031173706055e-01 5.529412031173706055e-01 5.529412031173706055e-01 1.000000000000000000e+00 -5.568627715110778809e-01 5.568627715110778809e-01 5.568627715110778809e-01 1.000000000000000000e+00 -5.607843399047851562e-01 5.607843399047851562e-01 5.607843399047851562e-01 1.000000000000000000e+00 -5.647059082984924316e-01 5.647059082984924316e-01 5.647059082984924316e-01 1.000000000000000000e+00 -5.686274766921997070e-01 5.686274766921997070e-01 5.686274766921997070e-01 1.000000000000000000e+00 -5.725490450859069824e-01 5.725490450859069824e-01 5.725490450859069824e-01 1.000000000000000000e+00 -5.764706134796142578e-01 5.764706134796142578e-01 5.764706134796142578e-01 1.000000000000000000e+00 -5.803921818733215332e-01 5.803921818733215332e-01 5.803921818733215332e-01 1.000000000000000000e+00 -5.843137502670288086e-01 5.843137502670288086e-01 5.843137502670288086e-01 1.000000000000000000e+00 -5.882353186607360840e-01 5.882353186607360840e-01 5.882353186607360840e-01 1.000000000000000000e+00 -5.921568870544433594e-01 5.921568870544433594e-01 5.921568870544433594e-01 1.000000000000000000e+00 -5.960784554481506348e-01 5.960784554481506348e-01 5.960784554481506348e-01 1.000000000000000000e+00 -6.000000238418579102e-01 6.000000238418579102e-01 6.000000238418579102e-01 1.000000000000000000e+00 -6.039215922355651855e-01 6.039215922355651855e-01 6.039215922355651855e-01 1.000000000000000000e+00 -6.078431606292724609e-01 6.078431606292724609e-01 6.078431606292724609e-01 1.000000000000000000e+00 -6.117647290229797363e-01 6.117647290229797363e-01 6.117647290229797363e-01 1.000000000000000000e+00 -6.156862974166870117e-01 6.156862974166870117e-01 6.156862974166870117e-01 1.000000000000000000e+00 -6.196078658103942871e-01 6.196078658103942871e-01 6.196078658103942871e-01 1.000000000000000000e+00 -6.235294342041015625e-01 6.235294342041015625e-01 6.235294342041015625e-01 1.000000000000000000e+00 -6.274510025978088379e-01 6.274510025978088379e-01 6.274510025978088379e-01 1.000000000000000000e+00 -6.313725709915161133e-01 6.313725709915161133e-01 6.313725709915161133e-01 1.000000000000000000e+00 -6.352941393852233887e-01 6.352941393852233887e-01 6.352941393852233887e-01 1.000000000000000000e+00 -6.392157077789306641e-01 6.392157077789306641e-01 6.392157077789306641e-01 1.000000000000000000e+00 -6.431372761726379395e-01 6.431372761726379395e-01 6.431372761726379395e-01 1.000000000000000000e+00 -6.470588445663452148e-01 6.470588445663452148e-01 6.470588445663452148e-01 1.000000000000000000e+00 -6.509804129600524902e-01 6.509804129600524902e-01 6.509804129600524902e-01 1.000000000000000000e+00 -6.549019813537597656e-01 6.549019813537597656e-01 6.549019813537597656e-01 1.000000000000000000e+00 -6.588235497474670410e-01 6.588235497474670410e-01 6.588235497474670410e-01 1.000000000000000000e+00 -6.627451181411743164e-01 6.627451181411743164e-01 6.627451181411743164e-01 1.000000000000000000e+00 -6.666666865348815918e-01 6.666666865348815918e-01 6.666666865348815918e-01 1.000000000000000000e+00 -6.705882549285888672e-01 6.705882549285888672e-01 6.705882549285888672e-01 1.000000000000000000e+00 -6.745098233222961426e-01 6.745098233222961426e-01 6.745098233222961426e-01 1.000000000000000000e+00 -6.784313917160034180e-01 6.784313917160034180e-01 6.784313917160034180e-01 1.000000000000000000e+00 -6.823529601097106934e-01 6.823529601097106934e-01 6.823529601097106934e-01 1.000000000000000000e+00 -6.862745285034179688e-01 6.862745285034179688e-01 6.862745285034179688e-01 1.000000000000000000e+00 -6.901960968971252441e-01 6.901960968971252441e-01 6.901960968971252441e-01 1.000000000000000000e+00 -6.941176652908325195e-01 6.941176652908325195e-01 6.941176652908325195e-01 1.000000000000000000e+00 -6.980392336845397949e-01 6.980392336845397949e-01 6.980392336845397949e-01 1.000000000000000000e+00 -7.019608020782470703e-01 7.019608020782470703e-01 7.019608020782470703e-01 1.000000000000000000e+00 -7.058823704719543457e-01 7.058823704719543457e-01 7.058823704719543457e-01 1.000000000000000000e+00 -7.098039388656616211e-01 7.098039388656616211e-01 7.098039388656616211e-01 1.000000000000000000e+00 -7.137255072593688965e-01 7.137255072593688965e-01 7.137255072593688965e-01 1.000000000000000000e+00 -7.176470756530761719e-01 7.176470756530761719e-01 7.176470756530761719e-01 1.000000000000000000e+00 -7.215686440467834473e-01 7.215686440467834473e-01 7.215686440467834473e-01 1.000000000000000000e+00 -7.254902124404907227e-01 7.254902124404907227e-01 7.254902124404907227e-01 1.000000000000000000e+00 -7.294117808341979980e-01 7.294117808341979980e-01 7.294117808341979980e-01 1.000000000000000000e+00 -7.333333492279052734e-01 7.333333492279052734e-01 7.333333492279052734e-01 1.000000000000000000e+00 -7.372549176216125488e-01 7.372549176216125488e-01 7.372549176216125488e-01 1.000000000000000000e+00 -7.411764860153198242e-01 7.411764860153198242e-01 7.411764860153198242e-01 1.000000000000000000e+00 -7.450980544090270996e-01 7.450980544090270996e-01 7.450980544090270996e-01 1.000000000000000000e+00 -7.490196228027343750e-01 7.490196228027343750e-01 7.490196228027343750e-01 1.000000000000000000e+00 -7.529411911964416504e-01 7.529411911964416504e-01 7.529411911964416504e-01 1.000000000000000000e+00 -7.568627595901489258e-01 7.568627595901489258e-01 7.568627595901489258e-01 1.000000000000000000e+00 -7.607843279838562012e-01 7.607843279838562012e-01 7.607843279838562012e-01 1.000000000000000000e+00 -7.647058963775634766e-01 7.647058963775634766e-01 7.647058963775634766e-01 1.000000000000000000e+00 -7.686274647712707520e-01 7.686274647712707520e-01 7.686274647712707520e-01 1.000000000000000000e+00 -7.725490331649780273e-01 7.725490331649780273e-01 7.725490331649780273e-01 1.000000000000000000e+00 -7.764706015586853027e-01 7.764706015586853027e-01 7.764706015586853027e-01 1.000000000000000000e+00 -7.803921699523925781e-01 7.803921699523925781e-01 7.803921699523925781e-01 1.000000000000000000e+00 -7.843137383460998535e-01 7.843137383460998535e-01 7.843137383460998535e-01 1.000000000000000000e+00 -7.882353067398071289e-01 7.882353067398071289e-01 7.882353067398071289e-01 1.000000000000000000e+00 -7.921568751335144043e-01 7.921568751335144043e-01 7.921568751335144043e-01 1.000000000000000000e+00 -7.960784435272216797e-01 7.960784435272216797e-01 7.960784435272216797e-01 1.000000000000000000e+00 -8.000000119209289551e-01 8.000000119209289551e-01 8.000000119209289551e-01 1.000000000000000000e+00 -8.039215803146362305e-01 8.039215803146362305e-01 8.039215803146362305e-01 1.000000000000000000e+00 -8.078431487083435059e-01 8.078431487083435059e-01 8.078431487083435059e-01 1.000000000000000000e+00 -8.117647171020507812e-01 8.117647171020507812e-01 8.117647171020507812e-01 1.000000000000000000e+00 -8.156862854957580566e-01 8.156862854957580566e-01 8.156862854957580566e-01 1.000000000000000000e+00 -8.196078538894653320e-01 8.196078538894653320e-01 8.196078538894653320e-01 1.000000000000000000e+00 -8.235294222831726074e-01 8.235294222831726074e-01 8.235294222831726074e-01 1.000000000000000000e+00 -8.274509906768798828e-01 8.274509906768798828e-01 8.274509906768798828e-01 1.000000000000000000e+00 -8.313725590705871582e-01 8.313725590705871582e-01 8.313725590705871582e-01 1.000000000000000000e+00 -8.352941274642944336e-01 8.352941274642944336e-01 8.352941274642944336e-01 1.000000000000000000e+00 -8.392156958580017090e-01 8.392156958580017090e-01 8.392156958580017090e-01 1.000000000000000000e+00 -8.431372642517089844e-01 8.431372642517089844e-01 8.431372642517089844e-01 1.000000000000000000e+00 -8.470588326454162598e-01 8.470588326454162598e-01 8.470588326454162598e-01 1.000000000000000000e+00 -8.509804010391235352e-01 8.509804010391235352e-01 8.509804010391235352e-01 1.000000000000000000e+00 -8.549019694328308105e-01 8.549019694328308105e-01 8.549019694328308105e-01 1.000000000000000000e+00 -8.588235378265380859e-01 8.588235378265380859e-01 8.588235378265380859e-01 1.000000000000000000e+00 -8.627451062202453613e-01 8.627451062202453613e-01 8.627451062202453613e-01 1.000000000000000000e+00 -8.666666746139526367e-01 8.666666746139526367e-01 8.666666746139526367e-01 1.000000000000000000e+00 -8.705882430076599121e-01 8.705882430076599121e-01 8.705882430076599121e-01 1.000000000000000000e+00 -8.745098114013671875e-01 8.745098114013671875e-01 8.745098114013671875e-01 1.000000000000000000e+00 -8.784313797950744629e-01 8.784313797950744629e-01 8.784313797950744629e-01 1.000000000000000000e+00 -8.823529481887817383e-01 8.823529481887817383e-01 8.823529481887817383e-01 1.000000000000000000e+00 -8.862745165824890137e-01 8.862745165824890137e-01 8.862745165824890137e-01 1.000000000000000000e+00 -8.901960849761962891e-01 8.901960849761962891e-01 8.901960849761962891e-01 1.000000000000000000e+00 -8.941176533699035645e-01 8.941176533699035645e-01 8.941176533699035645e-01 1.000000000000000000e+00 -8.980392217636108398e-01 8.980392217636108398e-01 8.980392217636108398e-01 1.000000000000000000e+00 -9.019607901573181152e-01 9.019607901573181152e-01 9.019607901573181152e-01 1.000000000000000000e+00 -9.058823585510253906e-01 9.058823585510253906e-01 9.058823585510253906e-01 1.000000000000000000e+00 -9.098039269447326660e-01 9.098039269447326660e-01 9.098039269447326660e-01 1.000000000000000000e+00 -9.137254953384399414e-01 9.137254953384399414e-01 9.137254953384399414e-01 1.000000000000000000e+00 -9.176470637321472168e-01 9.176470637321472168e-01 9.176470637321472168e-01 1.000000000000000000e+00 -9.215686321258544922e-01 9.215686321258544922e-01 9.215686321258544922e-01 1.000000000000000000e+00 -9.254902005195617676e-01 9.254902005195617676e-01 9.254902005195617676e-01 1.000000000000000000e+00 -9.294117689132690430e-01 9.294117689132690430e-01 9.294117689132690430e-01 1.000000000000000000e+00 -9.333333373069763184e-01 9.333333373069763184e-01 9.333333373069763184e-01 1.000000000000000000e+00 -9.372549057006835938e-01 9.372549057006835938e-01 9.372549057006835938e-01 1.000000000000000000e+00 -9.411764740943908691e-01 9.411764740943908691e-01 9.411764740943908691e-01 1.000000000000000000e+00 -9.450980424880981445e-01 9.450980424880981445e-01 9.450980424880981445e-01 1.000000000000000000e+00 -9.490196108818054199e-01 9.490196108818054199e-01 9.490196108818054199e-01 1.000000000000000000e+00 -9.529411792755126953e-01 9.529411792755126953e-01 9.529411792755126953e-01 1.000000000000000000e+00 -9.568627476692199707e-01 9.568627476692199707e-01 9.568627476692199707e-01 1.000000000000000000e+00 -9.607843160629272461e-01 9.607843160629272461e-01 9.607843160629272461e-01 1.000000000000000000e+00 -9.647058844566345215e-01 9.647058844566345215e-01 9.647058844566345215e-01 1.000000000000000000e+00 -9.686274528503417969e-01 9.686274528503417969e-01 9.686274528503417969e-01 1.000000000000000000e+00 -9.725490212440490723e-01 9.725490212440490723e-01 9.725490212440490723e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.764705896377563477e-01 9.764705896377563477e-01 1.000000000000000000e+00 -9.803921580314636230e-01 9.803921580314636230e-01 9.803921580314636230e-01 1.000000000000000000e+00 -9.843137264251708984e-01 9.843137264251708984e-01 9.843137264251708984e-01 1.000000000000000000e+00 -9.882352948188781738e-01 9.882352948188781738e-01 9.882352948188781738e-01 1.000000000000000000e+00 -9.921568632125854492e-01 9.921568632125854492e-01 9.921568632125854492e-01 1.000000000000000000e+00 -9.960784316062927246e-01 9.960784316062927246e-01 9.960784316062927246e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/gist_heat b/fastplotlib/utils/colormaps/gist_heat deleted file mode 100644 index 9e17b7574..000000000 --- a/fastplotlib/utils/colormaps/gist_heat +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.882353056222200394e-03 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.176470611244440079e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.764705963432788849e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.352941222488880157e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.941176481544971466e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.529411926865577698e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.117647185921669006e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.705882444977760315e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.294117704033851624e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.882352963089942932e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.470588594675064087e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.058823853731155396e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.647059112787246704e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.235294371843338013e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.823529630899429321e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.411764889955520630e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000014901161194e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.058823540806770325e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.117647066712379456e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.176470592617988586e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.235294118523597717e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.294117718935012817e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.352941244840621948e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.411764770746231079e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.470588296651840210e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.529411822557449341e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.588235348463058472e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.647058874368667603e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.705882400274276733e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.764705926179885864e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.823529452085494995e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.882352977991104126e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.941176503896713257e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.000000029802322388e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.058823555707931519e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.117647081613540649e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.176470607519149780e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.235294133424758911e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.294117659330368042e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.352941185235977173e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.411764711141586304e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.470588237047195435e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.529411911964416504e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.588235437870025635e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.647058963775634766e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.705882489681243896e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.764706015586853027e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.823529541492462158e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.882353067398071289e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.941176593303680420e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.000000119209289551e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.058823645114898682e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.117647171020507812e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.176470696926116943e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.235294222831726074e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.294117748737335205e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.352941274642944336e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.411764800548553467e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.470588326454162598e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.529411852359771729e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.588235378265380859e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.647058904170989990e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.705882430076599121e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.764705955982208252e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.823529481887817383e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.882353007793426514e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.941176533699035645e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.000000059604644775e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.058823585510253906e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.117647111415863037e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.176470637321472168e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.235294163227081299e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.294117689132690430e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.352941215038299561e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.411764740943908691e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.470588266849517822e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.529411792755126953e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.588235318660736084e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.647058844566345215e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.705882370471954346e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.764705896377563477e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.823529422283172607e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.882352948188781738e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.941176474094390869e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.000000000000000000e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.058823823928833008e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.117647051811218262e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.176470875740051270e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.235294103622436523e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.294117927551269531e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.352941155433654785e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.411764979362487793e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.470588207244873047e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.529412031173706055e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.588235259056091309e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.647059082984924316e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.705882310867309570e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.764706134796142578e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.823529362678527832e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.882353186607360840e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.941176414489746094e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.000000238418579102e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.058823466300964355e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.117647290229797363e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.176470518112182617e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.235294342041015625e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.294117569923400879e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.352941393852233887e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.411764621734619141e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.470588445663452148e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.529411673545837402e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.588235497474670410e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.647058725357055664e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.705882549285888672e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.764705777168273926e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.823529601097106934e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.882352828979492188e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.941176652908325195e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.999999880790710449e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.058823704719543457e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.117646932601928711e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.176470756530761719e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.235293984413146973e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.294117808341979980e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.352941036224365234e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.411764860153198242e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.470588088035583496e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.529411911964416504e-01 3.921568859368562698e-03 0.000000000000000000e+00 1.000000000000000000e+00 -7.588235139846801758e-01 1.176470611244440079e-02 0.000000000000000000e+00 1.000000000000000000e+00 -7.647058963775634766e-01 1.960784383118152618e-02 0.000000000000000000e+00 1.000000000000000000e+00 -7.705882191658020020e-01 2.745098061859607697e-02 0.000000000000000000e+00 1.000000000000000000e+00 -7.764706015586853027e-01 3.529411926865577698e-02 0.000000000000000000e+00 1.000000000000000000e+00 -7.823529243469238281e-01 4.313725605607032776e-02 0.000000000000000000e+00 1.000000000000000000e+00 -7.882353067398071289e-01 5.098039284348487854e-02 0.000000000000000000e+00 1.000000000000000000e+00 -7.941176295280456543e-01 5.882352963089942932e-02 0.000000000000000000e+00 1.000000000000000000e+00 -8.000000119209289551e-01 6.666667014360427856e-02 0.000000000000000000e+00 1.000000000000000000e+00 -8.058823347091674805e-01 7.450980693101882935e-02 0.000000000000000000e+00 1.000000000000000000e+00 -8.117647171020507812e-01 8.235294371843338013e-02 0.000000000000000000e+00 1.000000000000000000e+00 -8.176470398902893066e-01 9.019608050584793091e-02 0.000000000000000000e+00 1.000000000000000000e+00 -8.235294222831726074e-01 9.803921729326248169e-02 0.000000000000000000e+00 1.000000000000000000e+00 -8.294117450714111328e-01 1.058823540806770325e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.352941274642944336e-01 1.137254908680915833e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.411764502525329590e-01 1.215686276555061340e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.470588326454162598e-01 1.294117718935012817e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.529411554336547852e-01 1.372549086809158325e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.588235378265380859e-01 1.450980454683303833e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.647058606147766113e-01 1.529411822557449341e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.705882430076599121e-01 1.607843190431594849e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.764705657958984375e-01 1.686274558305740356e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.823529481887817383e-01 1.764705926179885864e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.882352709770202637e-01 1.843137294054031372e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.941176533699035645e-01 1.921568661928176880e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.999999761581420898e-01 2.000000029802322388e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.058823585510253906e-01 2.078431397676467896e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.117646813392639160e-01 2.156862765550613403e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.176470637321472168e-01 2.235294133424758911e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.235293865203857422e-01 2.313725501298904419e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.294117689132690430e-01 2.392156869173049927e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.352940917015075684e-01 2.470588237047195435e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.411764740943908691e-01 2.549019753932952881e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.470587968826293945e-01 2.627451121807098389e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.529411792755126953e-01 2.705882489681243896e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.588235020637512207e-01 2.784313857555389404e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.647058844566345215e-01 2.862745225429534912e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.705882072448730469e-01 2.941176593303680420e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.764705896377563477e-01 3.019607961177825928e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.823529124259948730e-01 3.098039329051971436e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.882352948188781738e-01 3.176470696926116943e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.941176176071166992e-01 3.254902064800262451e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.333333432674407959e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.411764800548553467e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.490196168422698975e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.568627536296844482e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.647058904170989990e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.725490272045135498e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.803921639919281006e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.882353007793426514e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.960784375667572021e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.039215743541717529e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.117647111415863037e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.196078479290008545e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.274509847164154053e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.352941215038299561e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.431372582912445068e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.509803950786590576e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.588235318660736084e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.666666686534881592e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.745098054409027100e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.823529422283172607e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.901960790157318115e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.980392158031463623e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.058823823928833008e-01 1.176470611244440079e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.137255191802978516e-01 2.745098061859607697e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.215686559677124023e-01 4.313725605607032776e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.294117927551269531e-01 5.882352963089942932e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.372549295425415039e-01 7.450980693101882935e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.450980663299560547e-01 9.019608050584793091e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.529412031173706055e-01 1.058823540806770325e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.607843399047851562e-01 1.215686276555061340e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.686274766921997070e-01 1.372549086809158325e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.764706134796142578e-01 1.529411822557449341e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.843137502670288086e-01 1.686274558305740356e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.921568870544433594e-01 1.843137294054031372e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.000000238418579102e-01 2.000000029802322388e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.078431606292724609e-01 2.156862765550613403e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.156862974166870117e-01 2.313725501298904419e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.235294342041015625e-01 2.470588237047195435e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.313725709915161133e-01 2.627451121807098389e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.392157077789306641e-01 2.784313857555389404e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.470588445663452148e-01 2.941176593303680420e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.549019813537597656e-01 3.098039329051971436e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.627451181411743164e-01 3.254902064800262451e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.705882549285888672e-01 3.411764800548553467e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.784313917160034180e-01 3.568627536296844482e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.862745285034179688e-01 3.725490272045135498e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.941176652908325195e-01 3.882353007793426514e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.019608020782470703e-01 4.039215743541717529e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.098039388656616211e-01 4.196078479290008545e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.176470756530761719e-01 4.352941215038299561e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.254902124404907227e-01 4.509803950786590576e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.333333492279052734e-01 4.666666686534881592e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.411764860153198242e-01 4.823529422283172607e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.490196228027343750e-01 4.980392158031463623e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.568627595901489258e-01 5.137255191802978516e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.647058963775634766e-01 5.294117927551269531e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.725490331649780273e-01 5.450980663299560547e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.803921699523925781e-01 5.607843399047851562e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.882353067398071289e-01 5.764706134796142578e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.960784435272216797e-01 5.921568870544433594e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.039215803146362305e-01 6.078431606292724609e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.117647171020507812e-01 6.235294342041015625e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.196078538894653320e-01 6.392157077789306641e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.274509906768798828e-01 6.549019813537597656e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.352941274642944336e-01 6.705882549285888672e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.431372642517089844e-01 6.862745285034179688e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.509804010391235352e-01 7.019608020782470703e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.588235378265380859e-01 7.176470756530761719e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.666666746139526367e-01 7.333333492279052734e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.745098114013671875e-01 7.490196228027343750e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.823529481887817383e-01 7.647058963775634766e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.901960849761962891e-01 7.803921699523925781e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.980392217636108398e-01 7.960784435272216797e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.058823585510253906e-01 8.117647171020507812e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.137254953384399414e-01 8.274509906768798828e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.215686321258544922e-01 8.431372642517089844e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.294117689132690430e-01 8.588235378265380859e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.372549057006835938e-01 8.745098114013671875e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.450980424880981445e-01 8.901960849761962891e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.529411792755126953e-01 9.058823585510253906e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.607843160629272461e-01 9.215686321258544922e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.686274528503417969e-01 9.372549057006835938e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.764705896377563477e-01 9.529411792755126953e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.843137264251708984e-01 9.686274528503417969e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.921568632125854492e-01 9.843137264251708984e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/gist_ncar b/fastplotlib/utils/colormaps/gist_ncar deleted file mode 100644 index 333046723..000000000 --- a/fastplotlib/utils/colormaps/gist_ncar +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 5.019999742507934570e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.861976251006126404e-02 4.651064872741699219e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.723952502012252808e-02 4.282130002975463867e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.585928380489349365e-02 3.913194835186004639e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.144790500402450562e-01 3.544259965419769287e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.430988013744354248e-01 3.175324797630310059e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.717185676097869873e-01 2.806389927864074707e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.003383338451385498e-01 2.437454760074615479e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.289581000804901123e-01 2.068519741296768188e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.575778663158416748e-01 1.699584722518920898e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.861976027488708496e-01 1.330649703741073608e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.148173689842224121e-01 9.617147594690322876e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.434371352195739746e-01 5.927797034382820129e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.720569014549255371e-01 2.238446660339832306e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.457462787628173828e-01 8.708668500185012817e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.191595971584320068e-01 1.522994339466094971e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.925729453563690186e-01 2.175121903419494629e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.659862637519836426e-01 2.827249467372894287e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.393996119499206543e-01 3.479377031326293945e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.128129452466964722e-01 4.131504595279693604e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.862262934446334839e-01 4.783631861209869385e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.596396267414093018e-01 5.435759425163269043e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.330529600381851196e-01 6.087887287139892578e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.064662933349609375e-01 6.740014553070068359e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.987963408231735229e-02 7.392141819000244141e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.329296737909317017e-02 8.044269680976867676e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.670630440115928650e-02 8.696396946907043457e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.196399898617528379e-04 9.348524808883666992e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.512949451804161072e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.105081960558891296e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.658868938684463501e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.212655991315841675e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.766442894935607910e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.320229947566986084e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.874017000198364258e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.427804052829742432e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.981591105461120605e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.535377860069274902e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.089165210723876953e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.642951965332031250e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.196739315986633301e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.535652518272399902e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.752259373664855957e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.925115823745727539e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.097972273826599121e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.270829319953918457e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.443685770034790039e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.616542220115661621e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.789398670196533203e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.962255716323852539e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.135112166404724121e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.307968616485595703e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.480825066566467285e-01 9.998586177825927734e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.653682112693786621e-01 9.741483330726623535e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.826538562774658203e-01 9.484380483627319336e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.999395012855529785e-01 9.227277636528015137e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.982228875160217285e-01 8.970174789428710938e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.964395165443420410e-01 8.713071942329406738e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.946561455726623535e-01 8.455969095230102539e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.928728342056274414e-01 8.198866248130798340e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.910894632339477539e-01 7.941763401031494141e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.893060922622680664e-01 7.684660553932189941e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.875227212905883789e-01 7.427557706832885742e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.857393503189086914e-01 7.170454859733581543e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.839560389518737793e-01 6.913352012634277344e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.821726679801940918e-01 6.656249165534973145e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.804000258445739746e-01 6.399146318435668945e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.804000258445739746e-01 6.140294671058654785e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.804000258445739746e-01 5.731160044670104980e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.804000258445739746e-01 5.322025418281555176e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.820304512977600098e-01 4.912890493869781494e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.836658239364624023e-01 4.503755867481231689e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.853012561798095703e-01 4.094620943069458008e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.869366288185119629e-01 3.685486316680908203e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.885720014572143555e-01 3.276351392269134521e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.902073740959167480e-01 2.867216765880584717e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.918427467346191406e-01 2.458081841468811035e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.934781193733215332e-01 2.048947066068649292e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.951134920120239258e-01 1.639812290668487549e-01 1.000000000000000000e+00 -2.497420064173638821e-05 9.967488646507263184e-01 1.230677440762519836e-01 1.000000000000000000e+00 -2.499917522072792053e-02 9.983842372894287109e-01 8.215426653623580933e-02 1.000000000000000000e+00 -4.997337609529495239e-02 9.998229146003723145e-01 4.124078527092933655e-02 1.000000000000000000e+00 -7.494757324457168579e-02 9.850670695304870605e-01 3.273078473284840584e-04 1.000000000000000000e+00 -9.992177784442901611e-02 9.703112244606018066e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.248959749937057495e-01 9.555553197860717773e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.498701721429824829e-01 9.407994747161865234e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.748443692922592163e-01 9.260436296463012695e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.998185813426971436e-01 9.112877249717712402e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.247927784919738770e-01 8.965318799018859863e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.497669756412506104e-01 8.817760348320007324e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.747411727905273438e-01 8.670201897621154785e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.997153699398040771e-01 8.522642850875854492e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.246895670890808105e-01 8.375084400177001953e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.496637642383575439e-01 8.227525949478149414e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.746379911899566650e-01 8.081894516944885254e-01 0.000000000000000000e+00 1.000000000000000000e+00 -3.993970751762390137e-01 8.209661841392517090e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.071633219718933105e-01 8.337428569793701172e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.149295687675476074e-01 8.465195894241333008e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.226958155632019043e-01 8.592963218688964844e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.304620623588562012e-01 8.720730543136596680e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.382283091545104980e-01 8.848497867584228516e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.459945261478424072e-01 8.976265192031860352e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.537607729434967041e-01 9.104032516479492188e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.615270197391510010e-01 9.231799244880676270e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.692932665348052979e-01 9.359566569328308105e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.770595133304595947e-01 9.487333893775939941e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.848257601261138916e-01 9.615101218223571777e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.925920069217681885e-01 9.742868542671203613e-01 1.556491293013095856e-02 1.000000000000000000e+00 -5.004338622093200684e-01 9.870635867118835449e-01 3.118449449539184570e-02 1.000000000000000000e+00 -5.182809233665466309e-01 9.998403191566467285e-01 4.680407419800758362e-02 1.000000000000000000e+00 -5.361279845237731934e-01 1.000000000000000000e+00 6.242365762591362000e-02 1.000000000000000000e+00 -5.539750456809997559e-01 1.000000000000000000e+00 7.804323732852935791e-02 1.000000000000000000e+00 -5.718221068382263184e-01 1.000000000000000000e+00 9.366282075643539429e-02 1.000000000000000000e+00 -5.896691679954528809e-01 1.000000000000000000e+00 1.092823967337608337e-01 1.000000000000000000e+00 -6.075162291526794434e-01 1.000000000000000000e+00 1.249019801616668701e-01 1.000000000000000000e+00 -6.253632903099060059e-01 1.000000000000000000e+00 1.405215561389923096e-01 1.000000000000000000e+00 -6.432103514671325684e-01 1.000000000000000000e+00 1.561411470174789429e-01 1.000000000000000000e+00 -6.610574722290039062e-01 1.000000000000000000e+00 1.717607229948043823e-01 1.000000000000000000e+00 -6.789045333862304688e-01 1.000000000000000000e+00 1.873802989721298218e-01 1.000000000000000000e+00 -6.967515945434570312e-01 1.000000000000000000e+00 2.029998898506164551e-01 1.000000000000000000e+00 -7.145986557006835938e-01 1.000000000000000000e+00 2.186194658279418945e-01 1.000000000000000000e+00 -7.324457168579101562e-01 1.000000000000000000e+00 2.341609448194503784e-01 1.000000000000000000e+00 -7.502927780151367188e-01 1.000000000000000000e+00 2.185413688421249390e-01 1.000000000000000000e+00 -7.681398391723632812e-01 1.000000000000000000e+00 2.029217928647994995e-01 1.000000000000000000e+00 -7.859869003295898438e-01 1.000000000000000000e+00 1.873022019863128662e-01 1.000000000000000000e+00 -8.038339614868164062e-01 1.000000000000000000e+00 1.716826260089874268e-01 1.000000000000000000e+00 -8.216810226440429688e-01 1.000000000000000000e+00 1.560630500316619873e-01 1.000000000000000000e+00 -8.395280838012695312e-01 1.000000000000000000e+00 1.404434591531753540e-01 1.000000000000000000e+00 -8.573751449584960938e-01 1.000000000000000000e+00 1.248238831758499146e-01 1.000000000000000000e+00 -8.752222657203674316e-01 1.000000000000000000e+00 1.092042997479438782e-01 1.000000000000000000e+00 -8.930693268775939941e-01 1.000000000000000000e+00 9.358472377061843872e-02 1.000000000000000000e+00 -9.109163880348205566e-01 1.000000000000000000e+00 7.796514034271240234e-02 1.000000000000000000e+00 -9.287634491920471191e-01 1.000000000000000000e+00 6.234555691480636597e-02 1.000000000000000000e+00 -9.466105103492736816e-01 1.000000000000000000e+00 4.672597721219062805e-02 1.000000000000000000e+00 -9.644575715065002441e-01 9.904056191444396973e-01 3.110639564692974091e-02 1.000000000000000000e+00 -9.823046326637268066e-01 9.807338118553161621e-01 1.548681501299142838e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.710620641708374023e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.613902568817138672e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.517185091972351074e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.420467019081115723e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.323749542236328125e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.227032065391540527e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.130313992500305176e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.033596515655517578e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.936878442764282227e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.840160965919494629e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.743442893028259277e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.646725416183471680e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.550007939338684082e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.453289866447448730e-01 4.213010426610708237e-03 1.000000000000000000e+00 -1.000000000000000000e+00 8.356572389602661133e-01 8.434463292360305786e-03 1.000000000000000000e+00 -1.000000000000000000e+00 8.259854316711425781e-01 1.265591662377119064e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.163136839866638184e-01 1.687736995518207550e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.066418766975402832e-01 2.109882421791553497e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.969701290130615234e-01 2.532027661800384521e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.872983217239379883e-01 2.954173088073730469e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.776265740394592285e-01 3.376318514347076416e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.679548263549804688e-01 3.798463568091392517e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.582830190658569336e-01 4.220608994364738464e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.486112713813781738e-01 4.642754420638084412e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.389394640922546387e-01 5.064899474382400513e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.292677164077758789e-01 5.487044900655746460e-02 1.000000000000000000e+00 -1.000000000000000000e+00 6.973093748092651367e-01 5.126416683197021484e-02 1.000000000000000000e+00 -1.000000000000000000e+00 6.651939153671264648e-01 4.760270193219184875e-02 1.000000000000000000e+00 -1.000000000000000000e+00 6.330785155296325684e-01 4.394123703241348267e-02 1.000000000000000000e+00 -1.000000000000000000e+00 6.009630560874938965e-01 4.027977213263511658e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.688476562500000000e-01 3.661830723285675049e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.367321968078613281e-01 3.295684233307838440e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.046167969703674316e-01 2.929537743330001831e-02 1.000000000000000000e+00 -1.000000000000000000e+00 4.725013375282287598e-01 2.563391439616680145e-02 1.000000000000000000e+00 -1.000000000000000000e+00 4.403859078884124756e-01 2.197244949638843536e-02 1.000000000000000000e+00 -1.000000000000000000e+00 4.082704782485961914e-01 1.831098459661006927e-02 1.000000000000000000e+00 -1.000000000000000000e+00 3.761550486087799072e-01 1.464951969683170319e-02 1.000000000000000000e+00 -1.000000000000000000e+00 3.440396189689636230e-01 1.098805479705333710e-02 1.000000000000000000e+00 -1.000000000000000000e+00 3.119241893291473389e-01 7.326590828597545624e-03 1.000000000000000000e+00 -1.000000000000000000e+00 2.798087596893310547e-01 3.665126161649823189e-03 1.000000000000000000e+00 -1.000000000000000000e+00 2.610737383365631104e-01 3.661464688775595278e-06 1.000000000000000000e+00 -1.000000000000000000e+00 2.424262911081314087e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.237788289785385132e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.051313668489456177e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.864839196205139160e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.678364574909210205e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.491889953613281250e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.305415332317352295e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.118940785527229309e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.324661642313003540e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.459916174411773682e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.595169961452484131e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.730424121022224426e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.865678280591964722e-02 6.875969469547271729e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.323729500465560704e-06 1.383193135261535645e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.078789472579956055e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.774385809898376465e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 3.469982147216796875e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 4.165578186511993408e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 4.861174523830413818e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 5.556770563125610352e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 6.252366900444030762e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 6.947963237762451172e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 7.643559575080871582e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 8.339155912399291992e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 9.034752249717712402e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 9.730348587036132812e-01 1.000000000000000000e+00 -9.732819199562072754e-01 1.335734780877828598e-02 9.868275523185729980e-01 1.000000000000000000e+00 -9.462666511535644531e-01 2.686326205730438232e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.192514419555664062e-01 4.036917537450790405e-02 1.000000000000000000e+00 1.000000000000000000e+00 -8.922361731529235840e-01 5.387508869171142578e-02 1.000000000000000000e+00 1.000000000000000000e+00 -8.652209043502807617e-01 6.738100200891494751e-02 1.000000000000000000e+00 1.000000000000000000e+00 -8.382056355476379395e-01 8.088691532611846924e-02 1.000000000000000000e+00 1.000000000000000000e+00 -8.111904263496398926e-01 9.439282864332199097e-02 1.000000000000000000e+00 1.000000000000000000e+00 -7.841751575469970703e-01 1.078987419605255127e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.571598887443542480e-01 1.214046552777290344e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.301446795463562012e-01 1.349105685949325562e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.031294107437133789e-01 1.484164744615554810e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.761141419410705566e-01 1.619223952293395996e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.490989327430725098e-01 1.755203455686569214e-01 9.999552965164184570e-01 1.000000000000000000e+00 -6.220836639404296875e-01 1.987140327692031860e-01 9.952479600906372070e-01 1.000000000000000000e+00 -6.448003053665161133e-01 2.219077050685882568e-01 9.905406832695007324e-01 1.000000000000000000e+00 -6.680446267127990723e-01 2.451013922691345215e-01 9.858333468437194824e-01 1.000000000000000000e+00 -6.912889480590820312e-01 2.682950794696807861e-01 9.811260104179382324e-01 1.000000000000000000e+00 -7.145333290100097656e-01 2.914887666702270508e-01 9.764187335968017578e-01 1.000000000000000000e+00 -7.377776503562927246e-01 3.146824538707733154e-01 9.717113971710205078e-01 1.000000000000000000e+00 -7.610220313072204590e-01 3.378761410713195801e-01 9.670041203498840332e-01 1.000000000000000000e+00 -7.842663526535034180e-01 3.610698282718658447e-01 9.622967839241027832e-01 1.000000000000000000e+00 -8.075107336044311523e-01 3.842635154724121094e-01 9.575895071029663086e-01 1.000000000000000000e+00 -8.307550549507141113e-01 4.074572026729583740e-01 9.528821706771850586e-01 1.000000000000000000e+00 -8.539993762969970703e-01 4.306508898735046387e-01 9.481748342514038086e-01 1.000000000000000000e+00 -8.772437572479248047e-01 4.538445770740509033e-01 9.434675574302673340e-01 1.000000000000000000e+00 -9.004880785942077637e-01 4.770382642745971680e-01 9.387602210044860840e-01 1.000000000000000000e+00 -9.235278964042663574e-01 5.001816749572753906e-01 9.341238141059875488e-01 1.000000000000000000e+00 -9.263191223144531250e-01 5.183477401733398438e-01 9.365075230598449707e-01 1.000000000000000000e+00 -9.291104078292846680e-01 5.365138649940490723e-01 9.388912320137023926e-01 1.000000000000000000e+00 -9.319016337394714355e-01 5.546799302101135254e-01 9.412749409675598145e-01 1.000000000000000000e+00 -9.346928596496582031e-01 5.728459954261779785e-01 9.436586499214172363e-01 1.000000000000000000e+00 -9.374840855598449707e-01 5.910121202468872070e-01 9.460423588752746582e-01 1.000000000000000000e+00 -9.402753114700317383e-01 6.091781854629516602e-01 9.484260082244873047e-01 1.000000000000000000e+00 -9.430665373802185059e-01 6.273443102836608887e-01 9.508097171783447266e-01 1.000000000000000000e+00 -9.458577632904052734e-01 6.455103754997253418e-01 9.531934261322021484e-01 1.000000000000000000e+00 -9.486490488052368164e-01 6.636765003204345703e-01 9.555771350860595703e-01 1.000000000000000000e+00 -9.514402747154235840e-01 6.818425655364990234e-01 9.579608440399169922e-01 1.000000000000000000e+00 -9.542315006256103516e-01 7.000086307525634766e-01 9.603444933891296387e-01 1.000000000000000000e+00 -9.570227265357971191e-01 7.181747555732727051e-01 9.627282023429870605e-01 1.000000000000000000e+00 -9.598139524459838867e-01 7.363408207893371582e-01 9.651119112968444824e-01 1.000000000000000000e+00 -9.626051783561706543e-01 7.545069456100463867e-01 9.674956202507019043e-01 1.000000000000000000e+00 -9.653964042663574219e-01 7.726730108261108398e-01 9.698793292045593262e-01 1.000000000000000000e+00 -9.681876301765441895e-01 7.908390760421752930e-01 9.722630381584167480e-01 1.000000000000000000e+00 -9.709789156913757324e-01 8.090052008628845215e-01 9.746466875076293945e-01 1.000000000000000000e+00 -9.737701416015625000e-01 8.271712660789489746e-01 9.770303964614868164e-01 1.000000000000000000e+00 -9.765613675117492676e-01 8.453373908996582031e-01 9.794141054153442383e-01 1.000000000000000000e+00 -9.793525934219360352e-01 8.635034561157226562e-01 9.817978143692016602e-01 1.000000000000000000e+00 -9.821438193321228027e-01 8.816695213317871094e-01 9.841815233230590820e-01 1.000000000000000000e+00 -9.849350452423095703e-01 8.998356461524963379e-01 9.865652322769165039e-01 1.000000000000000000e+00 -9.877262711524963379e-01 9.180017113685607910e-01 9.889488816261291504e-01 1.000000000000000000e+00 -9.905175566673278809e-01 9.361678361892700195e-01 9.913325905799865723e-01 1.000000000000000000e+00 -9.933087825775146484e-01 9.543339014053344727e-01 9.937162995338439941e-01 1.000000000000000000e+00 -9.961000084877014160e-01 9.725000262260437012e-01 9.961000084877014160e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/gist_rainbow b/fastplotlib/utils/colormaps/gist_rainbow deleted file mode 100644 index fb672f385..000000000 --- a/fastplotlib/utils/colormaps/gist_rainbow +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 0.000000000000000000e+00 1.599999964237213135e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.390849649906158447e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.181699335575103760e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 9.725490212440490723e-02 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 7.633987069129943848e-02 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 5.542483553290367126e-02 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 3.450980409979820251e-02 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.359477080404758453e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.419183850288391113e-03 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.861685305833816528e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.981451854109764099e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.101219147443771362e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.220985323190689087e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.134075224399566650e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.346051990985870361e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.558028608560562134e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.770005226135253906e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.981981992721557617e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.193958610296249390e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.405935376882553101e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.617911994457244873e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.829888761043548584e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.041865527629852295e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.253841996192932129e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.465818762779235840e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.677795529365539551e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.889771997928619385e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.101748764514923096e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.313725531101226807e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.525702297687530518e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.737678766250610352e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.949655532836914062e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.161632299423217773e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.373609066009521484e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.585585832595825195e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.797562003135681152e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.009538769721984863e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.221515536308288574e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.433492302894592285e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.645469069480895996e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.857445836067199707e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.069422602653503418e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.281398773193359375e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.493375539779663086e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.705352306365966797e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.917329072952270508e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.129305839538574219e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.341282606124877930e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.553259372711181641e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.765235543251037598e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.977212309837341309e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.189189076423645020e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.401165843009948730e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.613142609596252441e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.825119376182556152e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.962903857231140137e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.750927686691284180e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.538950920104980469e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.326974153518676758e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.114997386932373047e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.903020620346069336e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.691043853759765625e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.479067087173461914e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.267090916633605957e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.055114150047302246e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.843137383460998535e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.631160616874694824e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.419183850288391113e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.207207083702087402e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.995230317115783691e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.783253550529479980e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.571277379989624023e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.359300613403320312e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.147323846817016602e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.935347080230712891e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.723370313644409180e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.511393547058105469e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.299416780471801758e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.087440609931945801e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.875463843345642090e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.663487076759338379e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.451510310173034668e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.239533543586730957e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.027557075023651123e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.815580308437347412e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.603603541851043701e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.391626775264739990e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.179650306701660156e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.967673540115356445e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.755696773529052734e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.543720304965972900e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.331743538379669189e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.119766771793365479e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.907790154218673706e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.695813387632369995e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.483836770057678223e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.271860152482986450e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.059883385896682739e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.479066938161849976e-02 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.359300762414932251e-02 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.239533469080924988e-02 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.119766734540462494e-02 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.108370140194892883e-02 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 4.216740280389785767e-02 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 6.325110793113708496e-02 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.433480560779571533e-02 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 1.054185107350349426e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 1.265022158622741699e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 1.475859135389328003e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 1.686696112155914307e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 1.897533237934112549e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.108370214700698853e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.319207191467285156e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.530044317245483398e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.740881443023681641e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.951718270778656006e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 3.162555396556854248e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 3.373392224311828613e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 3.584229350090026855e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 3.795066475868225098e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 4.005903303623199463e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 4.216740429401397705e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 4.427577555179595947e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 4.638414382934570312e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 4.849251508712768555e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.060088634490966797e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.270925760269165039e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.481762886047363281e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.692599415779113770e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.903436541557312012e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 6.114273667335510254e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 6.325110793113708496e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 6.535947918891906738e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 6.746784448623657227e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 6.957621574401855469e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 7.168458700180053711e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 7.379295825958251953e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 7.590132951736450195e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 7.800970077514648438e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.011806607246398926e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.222643733024597168e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.433480858802795410e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.644317984580993652e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.855155110359191895e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 9.065992236137390137e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 9.276828765869140625e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 9.487665891647338867e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 9.698503017425537109e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 9.909340143203735352e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.878516793251037598e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.665387868881225586e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.452258944511413574e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.239130616188049316e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.026001691818237305e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.812872767448425293e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.599744439125061035e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.386615514755249023e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.173486590385437012e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.960358262062072754e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.747229337692260742e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.534100413322448730e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.320972084999084473e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.107843160629272461e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.894714236259460449e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.681585907936096191e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.468456983566284180e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.255328059196472168e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.042199730873107910e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.829070806503295898e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.615941882133483887e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.402813553810119629e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.189684629440307617e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.976555705070495605e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.763427078723907471e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.550298452377319336e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.337169528007507324e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.124040901660919189e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.910912275314331055e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.697783350944519043e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.484654724597930908e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.271526098251342773e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.058397173881530762e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.845268547534942627e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.632139921188354492e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.419011145830154419e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.205882370471954346e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.992753595113754272e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.779624819755554199e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.566496193408966064e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.353367418050765991e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.140238717198371887e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.271099418401718140e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.139812409877777100e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.008525028824806213e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.877237834036350250e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.459505461156368256e-03 1.000000000000000000e+00 1.000000000000000000e+00 -1.385336741805076599e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.516624122858047485e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.647911503911018372e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.779198884963989258e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.910485893487930298e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.204177290201187134e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.417306065559387207e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.630434840917587280e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.843563467264175415e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.056692242622375488e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.269821017980575562e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.482949644327163696e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.696078419685363770e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.909207046031951904e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.122335970401763916e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.335464596748352051e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.548593223094940186e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.761722147464752197e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.974850773811340332e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.187979400157928467e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.401108324527740479e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.614236950874328613e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.827365875244140625e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.040494203567504883e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.253623127937316895e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.466752052307128906e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.679880380630493164e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.893009305000305176e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -6.106138229370117188e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -6.319266557693481445e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -6.532395482063293457e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -6.745524406433105469e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -6.958652734756469727e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.171781659126281738e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.384910583496093750e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.598039507865905762e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.811167836189270020e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -8.024296760559082031e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -8.237425684928894043e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -8.450554013252258301e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -8.663682937622070312e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -8.876811861991882324e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.089940190315246582e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.303069114685058594e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.516198039054870605e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.729326367378234863e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.942455291748046875e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 9.844415783882141113e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 9.631287455558776855e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 9.418158531188964844e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 9.205029606819152832e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 8.991901278495788574e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 8.778772354125976562e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 8.565643429756164551e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 8.352515101432800293e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 8.139386177062988281e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 7.926257252693176270e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 7.713128924369812012e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 7.500000000000000000e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/gist_stern b/fastplotlib/utils/colormaps/gist_stern deleted file mode 100644 index 797229f41..000000000 --- a/fastplotlib/utils/colormaps/gist_stern +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.169229537248611450e-02 3.921568859368562698e-03 7.843137718737125397e-03 1.000000000000000000e+00 -1.433845907449722290e-01 7.843137718737125397e-03 1.568627543747425079e-02 1.000000000000000000e+00 -2.150768935680389404e-01 1.176470611244440079e-02 2.352941222488880157e-02 1.000000000000000000e+00 -2.867691814899444580e-01 1.568627543747425079e-02 3.137255087494850159e-02 1.000000000000000000e+00 -3.584614694118499756e-01 1.960784383118152618e-02 3.921568766236305237e-02 1.000000000000000000e+00 -4.301537871360778809e-01 2.352941222488880157e-02 4.705882444977760315e-02 1.000000000000000000e+00 -5.018460750579833984e-01 2.745098061859607697e-02 5.490196123719215393e-02 1.000000000000000000e+00 -5.735383629798889160e-01 3.137255087494850159e-02 6.274510174989700317e-02 1.000000000000000000e+00 -6.452306509017944336e-01 3.529411926865577698e-02 7.058823853731155396e-02 1.000000000000000000e+00 -7.169229388236999512e-01 3.921568766236305237e-02 7.843137532472610474e-02 1.000000000000000000e+00 -7.886152863502502441e-01 4.313725605607032776e-02 8.627451211214065552e-02 1.000000000000000000e+00 -8.603075742721557617e-01 4.705882444977760315e-02 9.411764889955520630e-02 1.000000000000000000e+00 -9.319998621940612793e-01 5.098039284348487854e-02 1.019607856869697571e-01 1.000000000000000000e+00 -9.989938139915466309e-01 5.490196123719215393e-02 1.098039224743843079e-01 1.000000000000000000e+00 -9.794562458992004395e-01 5.882352963089942932e-02 1.176470592617988586e-01 1.000000000000000000e+00 -9.599186778068542480e-01 6.274510174989700317e-02 1.254902034997940063e-01 1.000000000000000000e+00 -9.403811097145080566e-01 6.666667014360427856e-02 1.333333402872085571e-01 1.000000000000000000e+00 -9.208435416221618652e-01 7.058823853731155396e-02 1.411764770746231079e-01 1.000000000000000000e+00 -9.013059735298156738e-01 7.450980693101882935e-02 1.490196138620376587e-01 1.000000000000000000e+00 -8.817684054374694824e-01 7.843137532472610474e-02 1.568627506494522095e-01 1.000000000000000000e+00 -8.622308373451232910e-01 8.235294371843338013e-02 1.647058874368667603e-01 1.000000000000000000e+00 -8.426933288574218750e-01 8.627451211214065552e-02 1.725490242242813110e-01 1.000000000000000000e+00 -8.231557607650756836e-01 9.019608050584793091e-02 1.803921610116958618e-01 1.000000000000000000e+00 -8.036181926727294922e-01 9.411764889955520630e-02 1.882352977991104126e-01 1.000000000000000000e+00 -7.840806245803833008e-01 9.803921729326248169e-02 1.960784345865249634e-01 1.000000000000000000e+00 -7.645430564880371094e-01 1.019607856869697571e-01 2.039215713739395142e-01 1.000000000000000000e+00 -7.450054883956909180e-01 1.058823540806770325e-01 2.117647081613540649e-01 1.000000000000000000e+00 -7.254679203033447266e-01 1.098039224743843079e-01 2.196078449487686157e-01 1.000000000000000000e+00 -7.059303522109985352e-01 1.137254908680915833e-01 2.274509817361831665e-01 1.000000000000000000e+00 -6.863927841186523438e-01 1.176470592617988586e-01 2.352941185235977173e-01 1.000000000000000000e+00 -6.668552160263061523e-01 1.215686276555061340e-01 2.431372553110122681e-01 1.000000000000000000e+00 -6.473176479339599609e-01 1.254902034997940063e-01 2.509804069995880127e-01 1.000000000000000000e+00 -6.277800798416137695e-01 1.294117718935012817e-01 2.588235437870025635e-01 1.000000000000000000e+00 -6.082425117492675781e-01 1.333333402872085571e-01 2.666666805744171143e-01 1.000000000000000000e+00 -5.887049436569213867e-01 1.372549086809158325e-01 2.745098173618316650e-01 1.000000000000000000e+00 -5.691673755645751953e-01 1.411764770746231079e-01 2.823529541492462158e-01 1.000000000000000000e+00 -5.496298670768737793e-01 1.450980454683303833e-01 2.901960909366607666e-01 1.000000000000000000e+00 -5.300922989845275879e-01 1.490196138620376587e-01 2.980392277240753174e-01 1.000000000000000000e+00 -5.105547308921813965e-01 1.529411822557449341e-01 3.058823645114898682e-01 1.000000000000000000e+00 -4.910171627998352051e-01 1.568627506494522095e-01 3.137255012989044189e-01 1.000000000000000000e+00 -4.714795947074890137e-01 1.607843190431594849e-01 3.215686380863189697e-01 1.000000000000000000e+00 -4.519420266151428223e-01 1.647058874368667603e-01 3.294117748737335205e-01 1.000000000000000000e+00 -4.324044585227966309e-01 1.686274558305740356e-01 3.372549116611480713e-01 1.000000000000000000e+00 -4.128668904304504395e-01 1.725490242242813110e-01 3.450980484485626221e-01 1.000000000000000000e+00 -3.933293223381042480e-01 1.764705926179885864e-01 3.529411852359771729e-01 1.000000000000000000e+00 -3.737917542457580566e-01 1.803921610116958618e-01 3.607843220233917236e-01 1.000000000000000000e+00 -3.542541861534118652e-01 1.843137294054031372e-01 3.686274588108062744e-01 1.000000000000000000e+00 -3.347166478633880615e-01 1.882352977991104126e-01 3.764705955982208252e-01 1.000000000000000000e+00 -3.151790797710418701e-01 1.921568661928176880e-01 3.843137323856353760e-01 1.000000000000000000e+00 -2.956415116786956787e-01 1.960784345865249634e-01 3.921568691730499268e-01 1.000000000000000000e+00 -2.761039435863494873e-01 2.000000029802322388e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.565663754940032959e-01 2.039215713739395142e-01 4.078431427478790283e-01 1.000000000000000000e+00 -2.370288074016571045e-01 2.078431397676467896e-01 4.156862795352935791e-01 1.000000000000000000e+00 -2.174912542104721069e-01 2.117647081613540649e-01 4.235294163227081299e-01 1.000000000000000000e+00 -1.979536861181259155e-01 2.156862765550613403e-01 4.313725531101226807e-01 1.000000000000000000e+00 -1.784161180257797241e-01 2.196078449487686157e-01 4.392156898975372314e-01 1.000000000000000000e+00 -1.588785648345947266e-01 2.235294133424758911e-01 4.470588266849517822e-01 1.000000000000000000e+00 -1.393409967422485352e-01 2.274509817361831665e-01 4.549019634723663330e-01 1.000000000000000000e+00 -1.198034286499023438e-01 2.313725501298904419e-01 4.627451002597808838e-01 1.000000000000000000e+00 -1.002658680081367493e-01 2.352941185235977173e-01 4.705882370471954346e-01 1.000000000000000000e+00 -8.072829991579055786e-02 2.392156869173049927e-01 4.784313738346099854e-01 1.000000000000000000e+00 -6.119073554873466492e-02 2.431372553110122681e-01 4.862745106220245361e-01 1.000000000000000000e+00 -4.165317490696907043e-02 2.470588237047195435e-01 4.941176474094390869e-01 1.000000000000000000e+00 -2.509804069995880127e-01 2.509804069995880127e-01 5.019608139991760254e-01 1.000000000000000000e+00 -2.549019753932952881e-01 2.549019753932952881e-01 5.098039507865905762e-01 1.000000000000000000e+00 -2.588235437870025635e-01 2.588235437870025635e-01 5.176470875740051270e-01 1.000000000000000000e+00 -2.627451121807098389e-01 2.627451121807098389e-01 5.254902243614196777e-01 1.000000000000000000e+00 -2.666666805744171143e-01 2.666666805744171143e-01 5.333333611488342285e-01 1.000000000000000000e+00 -2.705882489681243896e-01 2.705882489681243896e-01 5.411764979362487793e-01 1.000000000000000000e+00 -2.745098173618316650e-01 2.745098173618316650e-01 5.490196347236633301e-01 1.000000000000000000e+00 -2.784313857555389404e-01 2.784313857555389404e-01 5.568627715110778809e-01 1.000000000000000000e+00 -2.823529541492462158e-01 2.823529541492462158e-01 5.647059082984924316e-01 1.000000000000000000e+00 -2.862745225429534912e-01 2.862745225429534912e-01 5.725490450859069824e-01 1.000000000000000000e+00 -2.901960909366607666e-01 2.901960909366607666e-01 5.803921818733215332e-01 1.000000000000000000e+00 -2.941176593303680420e-01 2.941176593303680420e-01 5.882353186607360840e-01 1.000000000000000000e+00 -2.980392277240753174e-01 2.980392277240753174e-01 5.960784554481506348e-01 1.000000000000000000e+00 -3.019607961177825928e-01 3.019607961177825928e-01 6.039215922355651855e-01 1.000000000000000000e+00 -3.058823645114898682e-01 3.058823645114898682e-01 6.117647290229797363e-01 1.000000000000000000e+00 -3.098039329051971436e-01 3.098039329051971436e-01 6.196078658103942871e-01 1.000000000000000000e+00 -3.137255012989044189e-01 3.137255012989044189e-01 6.274510025978088379e-01 1.000000000000000000e+00 -3.176470696926116943e-01 3.176470696926116943e-01 6.352941393852233887e-01 1.000000000000000000e+00 -3.215686380863189697e-01 3.215686380863189697e-01 6.431372761726379395e-01 1.000000000000000000e+00 -3.254902064800262451e-01 3.254902064800262451e-01 6.509804129600524902e-01 1.000000000000000000e+00 -3.294117748737335205e-01 3.294117748737335205e-01 6.588235497474670410e-01 1.000000000000000000e+00 -3.333333432674407959e-01 3.333333432674407959e-01 6.666666865348815918e-01 1.000000000000000000e+00 -3.372549116611480713e-01 3.372549116611480713e-01 6.745098233222961426e-01 1.000000000000000000e+00 -3.411764800548553467e-01 3.411764800548553467e-01 6.823529601097106934e-01 1.000000000000000000e+00 -3.450980484485626221e-01 3.450980484485626221e-01 6.901960968971252441e-01 1.000000000000000000e+00 -3.490196168422698975e-01 3.490196168422698975e-01 6.980392336845397949e-01 1.000000000000000000e+00 -3.529411852359771729e-01 3.529411852359771729e-01 7.058823704719543457e-01 1.000000000000000000e+00 -3.568627536296844482e-01 3.568627536296844482e-01 7.137255072593688965e-01 1.000000000000000000e+00 -3.607843220233917236e-01 3.607843220233917236e-01 7.215686440467834473e-01 1.000000000000000000e+00 -3.647058904170989990e-01 3.647058904170989990e-01 7.294117808341979980e-01 1.000000000000000000e+00 -3.686274588108062744e-01 3.686274588108062744e-01 7.372549176216125488e-01 1.000000000000000000e+00 -3.725490272045135498e-01 3.725490272045135498e-01 7.450980544090270996e-01 1.000000000000000000e+00 -3.764705955982208252e-01 3.764705955982208252e-01 7.529411911964416504e-01 1.000000000000000000e+00 -3.803921639919281006e-01 3.803921639919281006e-01 7.607843279838562012e-01 1.000000000000000000e+00 -3.843137323856353760e-01 3.843137323856353760e-01 7.686274647712707520e-01 1.000000000000000000e+00 -3.882353007793426514e-01 3.882353007793426514e-01 7.764706015586853027e-01 1.000000000000000000e+00 -3.921568691730499268e-01 3.921568691730499268e-01 7.843137383460998535e-01 1.000000000000000000e+00 -3.960784375667572021e-01 3.960784375667572021e-01 7.921568751335144043e-01 1.000000000000000000e+00 -4.000000059604644775e-01 4.000000059604644775e-01 8.000000119209289551e-01 1.000000000000000000e+00 -4.039215743541717529e-01 4.039215743541717529e-01 8.078431487083435059e-01 1.000000000000000000e+00 -4.078431427478790283e-01 4.078431427478790283e-01 8.156862854957580566e-01 1.000000000000000000e+00 -4.117647111415863037e-01 4.117647111415863037e-01 8.235294222831726074e-01 1.000000000000000000e+00 -4.156862795352935791e-01 4.156862795352935791e-01 8.313725590705871582e-01 1.000000000000000000e+00 -4.196078479290008545e-01 4.196078479290008545e-01 8.392156958580017090e-01 1.000000000000000000e+00 -4.235294163227081299e-01 4.235294163227081299e-01 8.470588326454162598e-01 1.000000000000000000e+00 -4.274509847164154053e-01 4.274509847164154053e-01 8.549019694328308105e-01 1.000000000000000000e+00 -4.313725531101226807e-01 4.313725531101226807e-01 8.627451062202453613e-01 1.000000000000000000e+00 -4.352941215038299561e-01 4.352941215038299561e-01 8.705882430076599121e-01 1.000000000000000000e+00 -4.392156898975372314e-01 4.392156898975372314e-01 8.784313797950744629e-01 1.000000000000000000e+00 -4.431372582912445068e-01 4.431372582912445068e-01 8.862745165824890137e-01 1.000000000000000000e+00 -4.470588266849517822e-01 4.470588266849517822e-01 8.941176533699035645e-01 1.000000000000000000e+00 -4.509803950786590576e-01 4.509803950786590576e-01 9.019607901573181152e-01 1.000000000000000000e+00 -4.549019634723663330e-01 4.549019634723663330e-01 9.098039269447326660e-01 1.000000000000000000e+00 -4.588235318660736084e-01 4.588235318660736084e-01 9.176470637321472168e-01 1.000000000000000000e+00 -4.627451002597808838e-01 4.627451002597808838e-01 9.254902005195617676e-01 1.000000000000000000e+00 -4.666666686534881592e-01 4.666666686534881592e-01 9.333333373069763184e-01 1.000000000000000000e+00 -4.705882370471954346e-01 4.705882370471954346e-01 9.411764740943908691e-01 1.000000000000000000e+00 -4.745098054409027100e-01 4.745098054409027100e-01 9.490196108818054199e-01 1.000000000000000000e+00 -4.784313738346099854e-01 4.784313738346099854e-01 9.568627476692199707e-01 1.000000000000000000e+00 -4.823529422283172607e-01 4.823529422283172607e-01 9.647058844566345215e-01 1.000000000000000000e+00 -4.862745106220245361e-01 4.862745106220245361e-01 9.725490212440490723e-01 1.000000000000000000e+00 -4.901960790157318115e-01 4.901960790157318115e-01 9.803921580314636230e-01 1.000000000000000000e+00 -4.941176474094390869e-01 4.941176474094390869e-01 9.882352948188781738e-01 1.000000000000000000e+00 -4.980392158031463623e-01 4.980392158031463623e-01 9.960784316062927246e-01 1.000000000000000000e+00 -5.019608139991760254e-01 5.019608139991760254e-01 9.916562438011169434e-01 1.000000000000000000e+00 -5.058823823928833008e-01 5.058823823928833008e-01 9.749687314033508301e-01 1.000000000000000000e+00 -5.098039507865905762e-01 5.098039507865905762e-01 9.582811594009399414e-01 1.000000000000000000e+00 -5.137255191802978516e-01 5.137255191802978516e-01 9.415936470031738281e-01 1.000000000000000000e+00 -5.176470875740051270e-01 5.176470875740051270e-01 9.249061346054077148e-01 1.000000000000000000e+00 -5.215686559677124023e-01 5.215686559677124023e-01 9.082186222076416016e-01 1.000000000000000000e+00 -5.254902243614196777e-01 5.254902243614196777e-01 8.915311098098754883e-01 1.000000000000000000e+00 -5.294117927551269531e-01 5.294117927551269531e-01 8.748435378074645996e-01 1.000000000000000000e+00 -5.333333611488342285e-01 5.333333611488342285e-01 8.581560254096984863e-01 1.000000000000000000e+00 -5.372549295425415039e-01 5.372549295425415039e-01 8.414685130119323730e-01 1.000000000000000000e+00 -5.411764979362487793e-01 5.411764979362487793e-01 8.247810006141662598e-01 1.000000000000000000e+00 -5.450980663299560547e-01 5.450980663299560547e-01 8.080934286117553711e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.490196347236633301e-01 7.914059162139892578e-01 1.000000000000000000e+00 -5.529412031173706055e-01 5.529412031173706055e-01 7.747184038162231445e-01 1.000000000000000000e+00 -5.568627715110778809e-01 5.568627715110778809e-01 7.580308914184570312e-01 1.000000000000000000e+00 -5.607843399047851562e-01 5.607843399047851562e-01 7.413433194160461426e-01 1.000000000000000000e+00 -5.647059082984924316e-01 5.647059082984924316e-01 7.246558070182800293e-01 1.000000000000000000e+00 -5.686274766921997070e-01 5.686274766921997070e-01 7.079682946205139160e-01 1.000000000000000000e+00 -5.725490450859069824e-01 5.725490450859069824e-01 6.912807822227478027e-01 1.000000000000000000e+00 -5.764706134796142578e-01 5.764706134796142578e-01 6.745932698249816895e-01 1.000000000000000000e+00 -5.803921818733215332e-01 5.803921818733215332e-01 6.579056978225708008e-01 1.000000000000000000e+00 -5.843137502670288086e-01 5.843137502670288086e-01 6.412181854248046875e-01 1.000000000000000000e+00 -5.882353186607360840e-01 5.882353186607360840e-01 6.245306730270385742e-01 1.000000000000000000e+00 -5.921568870544433594e-01 5.921568870544433594e-01 6.078431606292724609e-01 1.000000000000000000e+00 -5.960784554481506348e-01 5.960784554481506348e-01 5.911555886268615723e-01 1.000000000000000000e+00 -6.000000238418579102e-01 6.000000238418579102e-01 5.744680762290954590e-01 1.000000000000000000e+00 -6.039215922355651855e-01 6.039215922355651855e-01 5.577805638313293457e-01 1.000000000000000000e+00 -6.078431606292724609e-01 6.078431606292724609e-01 5.410930514335632324e-01 1.000000000000000000e+00 -6.117647290229797363e-01 6.117647290229797363e-01 5.244054794311523438e-01 1.000000000000000000e+00 -6.156862974166870117e-01 6.156862974166870117e-01 5.077179670333862305e-01 1.000000000000000000e+00 -6.196078658103942871e-01 6.196078658103942871e-01 4.910304546356201172e-01 1.000000000000000000e+00 -6.235294342041015625e-01 6.235294342041015625e-01 4.743429422378540039e-01 1.000000000000000000e+00 -6.274510025978088379e-01 6.274510025978088379e-01 4.576554000377655029e-01 1.000000000000000000e+00 -6.313725709915161133e-01 6.313725709915161133e-01 4.409678876399993896e-01 1.000000000000000000e+00 -6.352941393852233887e-01 6.352941393852233887e-01 4.242803454399108887e-01 1.000000000000000000e+00 -6.392157077789306641e-01 6.392157077789306641e-01 4.075928330421447754e-01 1.000000000000000000e+00 -6.431372761726379395e-01 6.431372761726379395e-01 3.909052908420562744e-01 1.000000000000000000e+00 -6.470588445663452148e-01 6.470588445663452148e-01 3.742177784442901611e-01 1.000000000000000000e+00 -6.509804129600524902e-01 6.509804129600524902e-01 3.575302362442016602e-01 1.000000000000000000e+00 -6.549019813537597656e-01 6.549019813537597656e-01 3.408427238464355469e-01 1.000000000000000000e+00 -6.588235497474670410e-01 6.588235497474670410e-01 3.241551816463470459e-01 1.000000000000000000e+00 -6.627451181411743164e-01 6.627451181411743164e-01 3.074676692485809326e-01 1.000000000000000000e+00 -6.666666865348815918e-01 6.666666865348815918e-01 2.907801270484924316e-01 1.000000000000000000e+00 -6.705882549285888672e-01 6.705882549285888672e-01 2.740926146507263184e-01 1.000000000000000000e+00 -6.745098233222961426e-01 6.745098233222961426e-01 2.574051022529602051e-01 1.000000000000000000e+00 -6.784313917160034180e-01 6.784313917160034180e-01 2.407175600528717041e-01 1.000000000000000000e+00 -6.823529601097106934e-01 6.823529601097106934e-01 2.240300327539443970e-01 1.000000000000000000e+00 -6.862745285034179688e-01 6.862745285034179688e-01 2.073425054550170898e-01 1.000000000000000000e+00 -6.901960968971252441e-01 6.901960968971252441e-01 1.906549781560897827e-01 1.000000000000000000e+00 -6.941176652908325195e-01 6.941176652908325195e-01 1.739674657583236694e-01 1.000000000000000000e+00 -6.980392336845397949e-01 6.980392336845397949e-01 1.572799384593963623e-01 1.000000000000000000e+00 -7.019608020782470703e-01 7.019608020782470703e-01 1.405924111604690552e-01 1.000000000000000000e+00 -7.058823704719543457e-01 7.058823704719543457e-01 1.239048838615417480e-01 1.000000000000000000e+00 -7.098039388656616211e-01 7.098039388656616211e-01 1.072173565626144409e-01 1.000000000000000000e+00 -7.137255072593688965e-01 7.137255072593688965e-01 9.052982926368713379e-02 1.000000000000000000e+00 -7.176470756530761719e-01 7.176470756530761719e-01 7.384230196475982666e-02 1.000000000000000000e+00 -7.215686440467834473e-01 7.215686440467834473e-01 5.715477839112281799e-02 1.000000000000000000e+00 -7.254902124404907227e-01 7.254902124404907227e-01 4.046725109219551086e-02 1.000000000000000000e+00 -7.294117808341979980e-01 7.294117808341979980e-01 2.377972379326820374e-02 1.000000000000000000e+00 -7.333333492279052734e-01 7.333333492279052734e-01 7.092198356986045837e-03 1.000000000000000000e+00 -7.372549176216125488e-01 7.372549176216125488e-01 8.509064093232154846e-03 1.000000000000000000e+00 -7.411764860153198242e-01 7.411764860153198242e-01 2.330743707716464996e-02 1.000000000000000000e+00 -7.450980544090270996e-01 7.450980544090270996e-01 3.810580819845199585e-02 1.000000000000000000e+00 -7.490196228027343750e-01 7.490196228027343750e-01 5.290418118238449097e-02 1.000000000000000000e+00 -7.529411911964416504e-01 7.529411911964416504e-01 6.770255416631698608e-02 1.000000000000000000e+00 -7.568627595901489258e-01 7.568627595901489258e-01 8.250092715024948120e-02 1.000000000000000000e+00 -7.607843279838562012e-01 7.607843279838562012e-01 9.729930013418197632e-02 1.000000000000000000e+00 -7.647058963775634766e-01 7.647058963775634766e-01 1.120976656675338745e-01 1.000000000000000000e+00 -7.686274647712707520e-01 7.686274647712707520e-01 1.268960386514663696e-01 1.000000000000000000e+00 -7.725490331649780273e-01 7.725490331649780273e-01 1.416944116353988647e-01 1.000000000000000000e+00 -7.764706015586853027e-01 7.764706015586853027e-01 1.564927846193313599e-01 1.000000000000000000e+00 -7.803921699523925781e-01 7.803921699523925781e-01 1.712911576032638550e-01 1.000000000000000000e+00 -7.843137383460998535e-01 7.843137383460998535e-01 1.860895305871963501e-01 1.000000000000000000e+00 -7.882353067398071289e-01 7.882353067398071289e-01 2.008879035711288452e-01 1.000000000000000000e+00 -7.921568751335144043e-01 7.921568751335144043e-01 2.156862765550613403e-01 1.000000000000000000e+00 -7.960784435272216797e-01 7.960784435272216797e-01 2.304846495389938354e-01 1.000000000000000000e+00 -8.000000119209289551e-01 8.000000119209289551e-01 2.452830225229263306e-01 1.000000000000000000e+00 -8.039215803146362305e-01 8.039215803146362305e-01 2.600813806056976318e-01 1.000000000000000000e+00 -8.078431487083435059e-01 8.078431487083435059e-01 2.748797535896301270e-01 1.000000000000000000e+00 -8.117647171020507812e-01 8.117647171020507812e-01 2.896781265735626221e-01 1.000000000000000000e+00 -8.156862854957580566e-01 8.156862854957580566e-01 3.044764995574951172e-01 1.000000000000000000e+00 -8.196078538894653320e-01 8.196078538894653320e-01 3.192748725414276123e-01 1.000000000000000000e+00 -8.235294222831726074e-01 8.235294222831726074e-01 3.340732455253601074e-01 1.000000000000000000e+00 -8.274509906768798828e-01 8.274509906768798828e-01 3.488716185092926025e-01 1.000000000000000000e+00 -8.313725590705871582e-01 8.313725590705871582e-01 3.636699914932250977e-01 1.000000000000000000e+00 -8.352941274642944336e-01 8.352941274642944336e-01 3.784683644771575928e-01 1.000000000000000000e+00 -8.392156958580017090e-01 8.392156958580017090e-01 3.932667374610900879e-01 1.000000000000000000e+00 -8.431372642517089844e-01 8.431372642517089844e-01 4.080651104450225830e-01 1.000000000000000000e+00 -8.470588326454162598e-01 8.470588326454162598e-01 4.228634834289550781e-01 1.000000000000000000e+00 -8.509804010391235352e-01 8.509804010391235352e-01 4.376618564128875732e-01 1.000000000000000000e+00 -8.549019694328308105e-01 8.549019694328308105e-01 4.524602293968200684e-01 1.000000000000000000e+00 -8.588235378265380859e-01 8.588235378265380859e-01 4.672586023807525635e-01 1.000000000000000000e+00 -8.627451062202453613e-01 8.627451062202453613e-01 4.820569753646850586e-01 1.000000000000000000e+00 -8.666666746139526367e-01 8.666666746139526367e-01 4.968553483486175537e-01 1.000000000000000000e+00 -8.705882430076599121e-01 8.705882430076599121e-01 5.116537213325500488e-01 1.000000000000000000e+00 -8.745098114013671875e-01 8.745098114013671875e-01 5.264520645141601562e-01 1.000000000000000000e+00 -8.784313797950744629e-01 8.784313797950744629e-01 5.412504673004150391e-01 1.000000000000000000e+00 -8.823529481887817383e-01 8.823529481887817383e-01 5.560488104820251465e-01 1.000000000000000000e+00 -8.862745165824890137e-01 8.862745165824890137e-01 5.708472132682800293e-01 1.000000000000000000e+00 -8.901960849761962891e-01 8.901960849761962891e-01 5.856455564498901367e-01 1.000000000000000000e+00 -8.941176533699035645e-01 8.941176533699035645e-01 6.004439592361450195e-01 1.000000000000000000e+00 -8.980392217636108398e-01 8.980392217636108398e-01 6.152423024177551270e-01 1.000000000000000000e+00 -9.019607901573181152e-01 9.019607901573181152e-01 6.300407052040100098e-01 1.000000000000000000e+00 -9.058823585510253906e-01 9.058823585510253906e-01 6.448390483856201172e-01 1.000000000000000000e+00 -9.098039269447326660e-01 9.098039269447326660e-01 6.596374511718750000e-01 1.000000000000000000e+00 -9.137254953384399414e-01 9.137254953384399414e-01 6.744357943534851074e-01 1.000000000000000000e+00 -9.176470637321472168e-01 9.176470637321472168e-01 6.892341971397399902e-01 1.000000000000000000e+00 -9.215686321258544922e-01 9.215686321258544922e-01 7.040325403213500977e-01 1.000000000000000000e+00 -9.254902005195617676e-01 9.254902005195617676e-01 7.188309431076049805e-01 1.000000000000000000e+00 -9.294117689132690430e-01 9.294117689132690430e-01 7.336292862892150879e-01 1.000000000000000000e+00 -9.333333373069763184e-01 9.333333373069763184e-01 7.484276890754699707e-01 1.000000000000000000e+00 -9.372549057006835938e-01 9.372549057006835938e-01 7.632260322570800781e-01 1.000000000000000000e+00 -9.411764740943908691e-01 9.411764740943908691e-01 7.780244350433349609e-01 1.000000000000000000e+00 -9.450980424880981445e-01 9.450980424880981445e-01 7.928227782249450684e-01 1.000000000000000000e+00 -9.490196108818054199e-01 9.490196108818054199e-01 8.076211810111999512e-01 1.000000000000000000e+00 -9.529411792755126953e-01 9.529411792755126953e-01 8.224195241928100586e-01 1.000000000000000000e+00 -9.568627476692199707e-01 9.568627476692199707e-01 8.372179269790649414e-01 1.000000000000000000e+00 -9.607843160629272461e-01 9.607843160629272461e-01 8.520162701606750488e-01 1.000000000000000000e+00 -9.647058844566345215e-01 9.647058844566345215e-01 8.668146729469299316e-01 1.000000000000000000e+00 -9.686274528503417969e-01 9.686274528503417969e-01 8.816130161285400391e-01 1.000000000000000000e+00 -9.725490212440490723e-01 9.725490212440490723e-01 8.964114189147949219e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.764705896377563477e-01 9.112097620964050293e-01 1.000000000000000000e+00 -9.803921580314636230e-01 9.803921580314636230e-01 9.260081648826599121e-01 1.000000000000000000e+00 -9.843137264251708984e-01 9.843137264251708984e-01 9.408065080642700195e-01 1.000000000000000000e+00 -9.882352948188781738e-01 9.882352948188781738e-01 9.556049108505249023e-01 1.000000000000000000e+00 -9.921568632125854492e-01 9.921568632125854492e-01 9.704032540321350098e-01 1.000000000000000000e+00 -9.960784316062927246e-01 9.960784316062927246e-01 9.852016568183898926e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/gist_yarg b/fastplotlib/utils/colormaps/gist_yarg deleted file mode 100644 index 19ae9bd30..000000000 --- a/fastplotlib/utils/colormaps/gist_yarg +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.960784316062927246e-01 9.960784316062927246e-01 9.960784316062927246e-01 1.000000000000000000e+00 -9.921568632125854492e-01 9.921568632125854492e-01 9.921568632125854492e-01 1.000000000000000000e+00 -9.882352948188781738e-01 9.882352948188781738e-01 9.882352948188781738e-01 1.000000000000000000e+00 -9.843137264251708984e-01 9.843137264251708984e-01 9.843137264251708984e-01 1.000000000000000000e+00 -9.803921580314636230e-01 9.803921580314636230e-01 9.803921580314636230e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.764705896377563477e-01 9.764705896377563477e-01 1.000000000000000000e+00 -9.725490212440490723e-01 9.725490212440490723e-01 9.725490212440490723e-01 1.000000000000000000e+00 -9.686274528503417969e-01 9.686274528503417969e-01 9.686274528503417969e-01 1.000000000000000000e+00 -9.647058844566345215e-01 9.647058844566345215e-01 9.647058844566345215e-01 1.000000000000000000e+00 -9.607843160629272461e-01 9.607843160629272461e-01 9.607843160629272461e-01 1.000000000000000000e+00 -9.568627476692199707e-01 9.568627476692199707e-01 9.568627476692199707e-01 1.000000000000000000e+00 -9.529411792755126953e-01 9.529411792755126953e-01 9.529411792755126953e-01 1.000000000000000000e+00 -9.490196108818054199e-01 9.490196108818054199e-01 9.490196108818054199e-01 1.000000000000000000e+00 -9.450980424880981445e-01 9.450980424880981445e-01 9.450980424880981445e-01 1.000000000000000000e+00 -9.411764740943908691e-01 9.411764740943908691e-01 9.411764740943908691e-01 1.000000000000000000e+00 -9.372549057006835938e-01 9.372549057006835938e-01 9.372549057006835938e-01 1.000000000000000000e+00 -9.333333373069763184e-01 9.333333373069763184e-01 9.333333373069763184e-01 1.000000000000000000e+00 -9.294117689132690430e-01 9.294117689132690430e-01 9.294117689132690430e-01 1.000000000000000000e+00 -9.254902005195617676e-01 9.254902005195617676e-01 9.254902005195617676e-01 1.000000000000000000e+00 -9.215686321258544922e-01 9.215686321258544922e-01 9.215686321258544922e-01 1.000000000000000000e+00 -9.176470637321472168e-01 9.176470637321472168e-01 9.176470637321472168e-01 1.000000000000000000e+00 -9.137254953384399414e-01 9.137254953384399414e-01 9.137254953384399414e-01 1.000000000000000000e+00 -9.098039269447326660e-01 9.098039269447326660e-01 9.098039269447326660e-01 1.000000000000000000e+00 -9.058823585510253906e-01 9.058823585510253906e-01 9.058823585510253906e-01 1.000000000000000000e+00 -9.019607901573181152e-01 9.019607901573181152e-01 9.019607901573181152e-01 1.000000000000000000e+00 -8.980392217636108398e-01 8.980392217636108398e-01 8.980392217636108398e-01 1.000000000000000000e+00 -8.941176533699035645e-01 8.941176533699035645e-01 8.941176533699035645e-01 1.000000000000000000e+00 -8.901960849761962891e-01 8.901960849761962891e-01 8.901960849761962891e-01 1.000000000000000000e+00 -8.862745165824890137e-01 8.862745165824890137e-01 8.862745165824890137e-01 1.000000000000000000e+00 -8.823529481887817383e-01 8.823529481887817383e-01 8.823529481887817383e-01 1.000000000000000000e+00 -8.784313797950744629e-01 8.784313797950744629e-01 8.784313797950744629e-01 1.000000000000000000e+00 -8.745098114013671875e-01 8.745098114013671875e-01 8.745098114013671875e-01 1.000000000000000000e+00 -8.705882430076599121e-01 8.705882430076599121e-01 8.705882430076599121e-01 1.000000000000000000e+00 -8.666666746139526367e-01 8.666666746139526367e-01 8.666666746139526367e-01 1.000000000000000000e+00 -8.627451062202453613e-01 8.627451062202453613e-01 8.627451062202453613e-01 1.000000000000000000e+00 -8.588235378265380859e-01 8.588235378265380859e-01 8.588235378265380859e-01 1.000000000000000000e+00 -8.549019694328308105e-01 8.549019694328308105e-01 8.549019694328308105e-01 1.000000000000000000e+00 -8.509804010391235352e-01 8.509804010391235352e-01 8.509804010391235352e-01 1.000000000000000000e+00 -8.470588326454162598e-01 8.470588326454162598e-01 8.470588326454162598e-01 1.000000000000000000e+00 -8.431372642517089844e-01 8.431372642517089844e-01 8.431372642517089844e-01 1.000000000000000000e+00 -8.392156958580017090e-01 8.392156958580017090e-01 8.392156958580017090e-01 1.000000000000000000e+00 -8.352941274642944336e-01 8.352941274642944336e-01 8.352941274642944336e-01 1.000000000000000000e+00 -8.313725590705871582e-01 8.313725590705871582e-01 8.313725590705871582e-01 1.000000000000000000e+00 -8.274509906768798828e-01 8.274509906768798828e-01 8.274509906768798828e-01 1.000000000000000000e+00 -8.235294222831726074e-01 8.235294222831726074e-01 8.235294222831726074e-01 1.000000000000000000e+00 -8.196078538894653320e-01 8.196078538894653320e-01 8.196078538894653320e-01 1.000000000000000000e+00 -8.156862854957580566e-01 8.156862854957580566e-01 8.156862854957580566e-01 1.000000000000000000e+00 -8.117647171020507812e-01 8.117647171020507812e-01 8.117647171020507812e-01 1.000000000000000000e+00 -8.078431487083435059e-01 8.078431487083435059e-01 8.078431487083435059e-01 1.000000000000000000e+00 -8.039215803146362305e-01 8.039215803146362305e-01 8.039215803146362305e-01 1.000000000000000000e+00 -8.000000119209289551e-01 8.000000119209289551e-01 8.000000119209289551e-01 1.000000000000000000e+00 -7.960784435272216797e-01 7.960784435272216797e-01 7.960784435272216797e-01 1.000000000000000000e+00 -7.921568751335144043e-01 7.921568751335144043e-01 7.921568751335144043e-01 1.000000000000000000e+00 -7.882353067398071289e-01 7.882353067398071289e-01 7.882353067398071289e-01 1.000000000000000000e+00 -7.843137383460998535e-01 7.843137383460998535e-01 7.843137383460998535e-01 1.000000000000000000e+00 -7.803921699523925781e-01 7.803921699523925781e-01 7.803921699523925781e-01 1.000000000000000000e+00 -7.764706015586853027e-01 7.764706015586853027e-01 7.764706015586853027e-01 1.000000000000000000e+00 -7.725490331649780273e-01 7.725490331649780273e-01 7.725490331649780273e-01 1.000000000000000000e+00 -7.686274647712707520e-01 7.686274647712707520e-01 7.686274647712707520e-01 1.000000000000000000e+00 -7.647058963775634766e-01 7.647058963775634766e-01 7.647058963775634766e-01 1.000000000000000000e+00 -7.607843279838562012e-01 7.607843279838562012e-01 7.607843279838562012e-01 1.000000000000000000e+00 -7.568627595901489258e-01 7.568627595901489258e-01 7.568627595901489258e-01 1.000000000000000000e+00 -7.529411911964416504e-01 7.529411911964416504e-01 7.529411911964416504e-01 1.000000000000000000e+00 -7.490196228027343750e-01 7.490196228027343750e-01 7.490196228027343750e-01 1.000000000000000000e+00 -7.450980544090270996e-01 7.450980544090270996e-01 7.450980544090270996e-01 1.000000000000000000e+00 -7.411764860153198242e-01 7.411764860153198242e-01 7.411764860153198242e-01 1.000000000000000000e+00 -7.372549176216125488e-01 7.372549176216125488e-01 7.372549176216125488e-01 1.000000000000000000e+00 -7.333333492279052734e-01 7.333333492279052734e-01 7.333333492279052734e-01 1.000000000000000000e+00 -7.294117808341979980e-01 7.294117808341979980e-01 7.294117808341979980e-01 1.000000000000000000e+00 -7.254902124404907227e-01 7.254902124404907227e-01 7.254902124404907227e-01 1.000000000000000000e+00 -7.215686440467834473e-01 7.215686440467834473e-01 7.215686440467834473e-01 1.000000000000000000e+00 -7.176470756530761719e-01 7.176470756530761719e-01 7.176470756530761719e-01 1.000000000000000000e+00 -7.137255072593688965e-01 7.137255072593688965e-01 7.137255072593688965e-01 1.000000000000000000e+00 -7.098039388656616211e-01 7.098039388656616211e-01 7.098039388656616211e-01 1.000000000000000000e+00 -7.058823704719543457e-01 7.058823704719543457e-01 7.058823704719543457e-01 1.000000000000000000e+00 -7.019608020782470703e-01 7.019608020782470703e-01 7.019608020782470703e-01 1.000000000000000000e+00 -6.980392336845397949e-01 6.980392336845397949e-01 6.980392336845397949e-01 1.000000000000000000e+00 -6.941176652908325195e-01 6.941176652908325195e-01 6.941176652908325195e-01 1.000000000000000000e+00 -6.901960968971252441e-01 6.901960968971252441e-01 6.901960968971252441e-01 1.000000000000000000e+00 -6.862745285034179688e-01 6.862745285034179688e-01 6.862745285034179688e-01 1.000000000000000000e+00 -6.823529601097106934e-01 6.823529601097106934e-01 6.823529601097106934e-01 1.000000000000000000e+00 -6.784313917160034180e-01 6.784313917160034180e-01 6.784313917160034180e-01 1.000000000000000000e+00 -6.745098233222961426e-01 6.745098233222961426e-01 6.745098233222961426e-01 1.000000000000000000e+00 -6.705882549285888672e-01 6.705882549285888672e-01 6.705882549285888672e-01 1.000000000000000000e+00 -6.666666865348815918e-01 6.666666865348815918e-01 6.666666865348815918e-01 1.000000000000000000e+00 -6.627451181411743164e-01 6.627451181411743164e-01 6.627451181411743164e-01 1.000000000000000000e+00 -6.588235497474670410e-01 6.588235497474670410e-01 6.588235497474670410e-01 1.000000000000000000e+00 -6.549019813537597656e-01 6.549019813537597656e-01 6.549019813537597656e-01 1.000000000000000000e+00 -6.509804129600524902e-01 6.509804129600524902e-01 6.509804129600524902e-01 1.000000000000000000e+00 -6.470588445663452148e-01 6.470588445663452148e-01 6.470588445663452148e-01 1.000000000000000000e+00 -6.431372761726379395e-01 6.431372761726379395e-01 6.431372761726379395e-01 1.000000000000000000e+00 -6.392157077789306641e-01 6.392157077789306641e-01 6.392157077789306641e-01 1.000000000000000000e+00 -6.352941393852233887e-01 6.352941393852233887e-01 6.352941393852233887e-01 1.000000000000000000e+00 -6.313725709915161133e-01 6.313725709915161133e-01 6.313725709915161133e-01 1.000000000000000000e+00 -6.274510025978088379e-01 6.274510025978088379e-01 6.274510025978088379e-01 1.000000000000000000e+00 -6.235294342041015625e-01 6.235294342041015625e-01 6.235294342041015625e-01 1.000000000000000000e+00 -6.196078658103942871e-01 6.196078658103942871e-01 6.196078658103942871e-01 1.000000000000000000e+00 -6.156862974166870117e-01 6.156862974166870117e-01 6.156862974166870117e-01 1.000000000000000000e+00 -6.117647290229797363e-01 6.117647290229797363e-01 6.117647290229797363e-01 1.000000000000000000e+00 -6.078431606292724609e-01 6.078431606292724609e-01 6.078431606292724609e-01 1.000000000000000000e+00 -6.039215922355651855e-01 6.039215922355651855e-01 6.039215922355651855e-01 1.000000000000000000e+00 -6.000000238418579102e-01 6.000000238418579102e-01 6.000000238418579102e-01 1.000000000000000000e+00 -5.960784554481506348e-01 5.960784554481506348e-01 5.960784554481506348e-01 1.000000000000000000e+00 -5.921568870544433594e-01 5.921568870544433594e-01 5.921568870544433594e-01 1.000000000000000000e+00 -5.882353186607360840e-01 5.882353186607360840e-01 5.882353186607360840e-01 1.000000000000000000e+00 -5.843137502670288086e-01 5.843137502670288086e-01 5.843137502670288086e-01 1.000000000000000000e+00 -5.803921818733215332e-01 5.803921818733215332e-01 5.803921818733215332e-01 1.000000000000000000e+00 -5.764706134796142578e-01 5.764706134796142578e-01 5.764706134796142578e-01 1.000000000000000000e+00 -5.725490450859069824e-01 5.725490450859069824e-01 5.725490450859069824e-01 1.000000000000000000e+00 -5.686274766921997070e-01 5.686274766921997070e-01 5.686274766921997070e-01 1.000000000000000000e+00 -5.647059082984924316e-01 5.647059082984924316e-01 5.647059082984924316e-01 1.000000000000000000e+00 -5.607843399047851562e-01 5.607843399047851562e-01 5.607843399047851562e-01 1.000000000000000000e+00 -5.568627715110778809e-01 5.568627715110778809e-01 5.568627715110778809e-01 1.000000000000000000e+00 -5.529412031173706055e-01 5.529412031173706055e-01 5.529412031173706055e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.490196347236633301e-01 5.490196347236633301e-01 1.000000000000000000e+00 -5.450980663299560547e-01 5.450980663299560547e-01 5.450980663299560547e-01 1.000000000000000000e+00 -5.411764979362487793e-01 5.411764979362487793e-01 5.411764979362487793e-01 1.000000000000000000e+00 -5.372549295425415039e-01 5.372549295425415039e-01 5.372549295425415039e-01 1.000000000000000000e+00 -5.333333611488342285e-01 5.333333611488342285e-01 5.333333611488342285e-01 1.000000000000000000e+00 -5.294117927551269531e-01 5.294117927551269531e-01 5.294117927551269531e-01 1.000000000000000000e+00 -5.254902243614196777e-01 5.254902243614196777e-01 5.254902243614196777e-01 1.000000000000000000e+00 -5.215686559677124023e-01 5.215686559677124023e-01 5.215686559677124023e-01 1.000000000000000000e+00 -5.176470875740051270e-01 5.176470875740051270e-01 5.176470875740051270e-01 1.000000000000000000e+00 -5.137255191802978516e-01 5.137255191802978516e-01 5.137255191802978516e-01 1.000000000000000000e+00 -5.098039507865905762e-01 5.098039507865905762e-01 5.098039507865905762e-01 1.000000000000000000e+00 -5.058823823928833008e-01 5.058823823928833008e-01 5.058823823928833008e-01 1.000000000000000000e+00 -5.019608139991760254e-01 5.019608139991760254e-01 5.019608139991760254e-01 1.000000000000000000e+00 -4.980392158031463623e-01 4.980392158031463623e-01 4.980392158031463623e-01 1.000000000000000000e+00 -4.941176474094390869e-01 4.941176474094390869e-01 4.941176474094390869e-01 1.000000000000000000e+00 -4.901960790157318115e-01 4.901960790157318115e-01 4.901960790157318115e-01 1.000000000000000000e+00 -4.862745106220245361e-01 4.862745106220245361e-01 4.862745106220245361e-01 1.000000000000000000e+00 -4.823529422283172607e-01 4.823529422283172607e-01 4.823529422283172607e-01 1.000000000000000000e+00 -4.784313738346099854e-01 4.784313738346099854e-01 4.784313738346099854e-01 1.000000000000000000e+00 -4.745098054409027100e-01 4.745098054409027100e-01 4.745098054409027100e-01 1.000000000000000000e+00 -4.705882370471954346e-01 4.705882370471954346e-01 4.705882370471954346e-01 1.000000000000000000e+00 -4.666666686534881592e-01 4.666666686534881592e-01 4.666666686534881592e-01 1.000000000000000000e+00 -4.627451002597808838e-01 4.627451002597808838e-01 4.627451002597808838e-01 1.000000000000000000e+00 -4.588235318660736084e-01 4.588235318660736084e-01 4.588235318660736084e-01 1.000000000000000000e+00 -4.549019634723663330e-01 4.549019634723663330e-01 4.549019634723663330e-01 1.000000000000000000e+00 -4.509803950786590576e-01 4.509803950786590576e-01 4.509803950786590576e-01 1.000000000000000000e+00 -4.470588266849517822e-01 4.470588266849517822e-01 4.470588266849517822e-01 1.000000000000000000e+00 -4.431372582912445068e-01 4.431372582912445068e-01 4.431372582912445068e-01 1.000000000000000000e+00 -4.392156898975372314e-01 4.392156898975372314e-01 4.392156898975372314e-01 1.000000000000000000e+00 -4.352941215038299561e-01 4.352941215038299561e-01 4.352941215038299561e-01 1.000000000000000000e+00 -4.313725531101226807e-01 4.313725531101226807e-01 4.313725531101226807e-01 1.000000000000000000e+00 -4.274509847164154053e-01 4.274509847164154053e-01 4.274509847164154053e-01 1.000000000000000000e+00 -4.235294163227081299e-01 4.235294163227081299e-01 4.235294163227081299e-01 1.000000000000000000e+00 -4.196078479290008545e-01 4.196078479290008545e-01 4.196078479290008545e-01 1.000000000000000000e+00 -4.156862795352935791e-01 4.156862795352935791e-01 4.156862795352935791e-01 1.000000000000000000e+00 -4.117647111415863037e-01 4.117647111415863037e-01 4.117647111415863037e-01 1.000000000000000000e+00 -4.078431427478790283e-01 4.078431427478790283e-01 4.078431427478790283e-01 1.000000000000000000e+00 -4.039215743541717529e-01 4.039215743541717529e-01 4.039215743541717529e-01 1.000000000000000000e+00 -4.000000059604644775e-01 4.000000059604644775e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.960784375667572021e-01 3.960784375667572021e-01 3.960784375667572021e-01 1.000000000000000000e+00 -3.921568691730499268e-01 3.921568691730499268e-01 3.921568691730499268e-01 1.000000000000000000e+00 -3.882353007793426514e-01 3.882353007793426514e-01 3.882353007793426514e-01 1.000000000000000000e+00 -3.843137323856353760e-01 3.843137323856353760e-01 3.843137323856353760e-01 1.000000000000000000e+00 -3.803921639919281006e-01 3.803921639919281006e-01 3.803921639919281006e-01 1.000000000000000000e+00 -3.764705955982208252e-01 3.764705955982208252e-01 3.764705955982208252e-01 1.000000000000000000e+00 -3.725490272045135498e-01 3.725490272045135498e-01 3.725490272045135498e-01 1.000000000000000000e+00 -3.686274588108062744e-01 3.686274588108062744e-01 3.686274588108062744e-01 1.000000000000000000e+00 -3.647058904170989990e-01 3.647058904170989990e-01 3.647058904170989990e-01 1.000000000000000000e+00 -3.607843220233917236e-01 3.607843220233917236e-01 3.607843220233917236e-01 1.000000000000000000e+00 -3.568627536296844482e-01 3.568627536296844482e-01 3.568627536296844482e-01 1.000000000000000000e+00 -3.529411852359771729e-01 3.529411852359771729e-01 3.529411852359771729e-01 1.000000000000000000e+00 -3.490196168422698975e-01 3.490196168422698975e-01 3.490196168422698975e-01 1.000000000000000000e+00 -3.450980484485626221e-01 3.450980484485626221e-01 3.450980484485626221e-01 1.000000000000000000e+00 -3.411764800548553467e-01 3.411764800548553467e-01 3.411764800548553467e-01 1.000000000000000000e+00 -3.372549116611480713e-01 3.372549116611480713e-01 3.372549116611480713e-01 1.000000000000000000e+00 -3.333333432674407959e-01 3.333333432674407959e-01 3.333333432674407959e-01 1.000000000000000000e+00 -3.294117748737335205e-01 3.294117748737335205e-01 3.294117748737335205e-01 1.000000000000000000e+00 -3.254902064800262451e-01 3.254902064800262451e-01 3.254902064800262451e-01 1.000000000000000000e+00 -3.215686380863189697e-01 3.215686380863189697e-01 3.215686380863189697e-01 1.000000000000000000e+00 -3.176470696926116943e-01 3.176470696926116943e-01 3.176470696926116943e-01 1.000000000000000000e+00 -3.137255012989044189e-01 3.137255012989044189e-01 3.137255012989044189e-01 1.000000000000000000e+00 -3.098039329051971436e-01 3.098039329051971436e-01 3.098039329051971436e-01 1.000000000000000000e+00 -3.058823645114898682e-01 3.058823645114898682e-01 3.058823645114898682e-01 1.000000000000000000e+00 -3.019607961177825928e-01 3.019607961177825928e-01 3.019607961177825928e-01 1.000000000000000000e+00 -2.980392277240753174e-01 2.980392277240753174e-01 2.980392277240753174e-01 1.000000000000000000e+00 -2.941176593303680420e-01 2.941176593303680420e-01 2.941176593303680420e-01 1.000000000000000000e+00 -2.901960909366607666e-01 2.901960909366607666e-01 2.901960909366607666e-01 1.000000000000000000e+00 -2.862745225429534912e-01 2.862745225429534912e-01 2.862745225429534912e-01 1.000000000000000000e+00 -2.823529541492462158e-01 2.823529541492462158e-01 2.823529541492462158e-01 1.000000000000000000e+00 -2.784313857555389404e-01 2.784313857555389404e-01 2.784313857555389404e-01 1.000000000000000000e+00 -2.745098173618316650e-01 2.745098173618316650e-01 2.745098173618316650e-01 1.000000000000000000e+00 -2.705882489681243896e-01 2.705882489681243896e-01 2.705882489681243896e-01 1.000000000000000000e+00 -2.666666805744171143e-01 2.666666805744171143e-01 2.666666805744171143e-01 1.000000000000000000e+00 -2.627451121807098389e-01 2.627451121807098389e-01 2.627451121807098389e-01 1.000000000000000000e+00 -2.588235437870025635e-01 2.588235437870025635e-01 2.588235437870025635e-01 1.000000000000000000e+00 -2.549019753932952881e-01 2.549019753932952881e-01 2.549019753932952881e-01 1.000000000000000000e+00 -2.509804069995880127e-01 2.509804069995880127e-01 2.509804069995880127e-01 1.000000000000000000e+00 -2.470588237047195435e-01 2.470588237047195435e-01 2.470588237047195435e-01 1.000000000000000000e+00 -2.431372553110122681e-01 2.431372553110122681e-01 2.431372553110122681e-01 1.000000000000000000e+00 -2.392156869173049927e-01 2.392156869173049927e-01 2.392156869173049927e-01 1.000000000000000000e+00 -2.352941185235977173e-01 2.352941185235977173e-01 2.352941185235977173e-01 1.000000000000000000e+00 -2.313725501298904419e-01 2.313725501298904419e-01 2.313725501298904419e-01 1.000000000000000000e+00 -2.274509817361831665e-01 2.274509817361831665e-01 2.274509817361831665e-01 1.000000000000000000e+00 -2.235294133424758911e-01 2.235294133424758911e-01 2.235294133424758911e-01 1.000000000000000000e+00 -2.196078449487686157e-01 2.196078449487686157e-01 2.196078449487686157e-01 1.000000000000000000e+00 -2.156862765550613403e-01 2.156862765550613403e-01 2.156862765550613403e-01 1.000000000000000000e+00 -2.117647081613540649e-01 2.117647081613540649e-01 2.117647081613540649e-01 1.000000000000000000e+00 -2.078431397676467896e-01 2.078431397676467896e-01 2.078431397676467896e-01 1.000000000000000000e+00 -2.039215713739395142e-01 2.039215713739395142e-01 2.039215713739395142e-01 1.000000000000000000e+00 -2.000000029802322388e-01 2.000000029802322388e-01 2.000000029802322388e-01 1.000000000000000000e+00 -1.960784345865249634e-01 1.960784345865249634e-01 1.960784345865249634e-01 1.000000000000000000e+00 -1.921568661928176880e-01 1.921568661928176880e-01 1.921568661928176880e-01 1.000000000000000000e+00 -1.882352977991104126e-01 1.882352977991104126e-01 1.882352977991104126e-01 1.000000000000000000e+00 -1.843137294054031372e-01 1.843137294054031372e-01 1.843137294054031372e-01 1.000000000000000000e+00 -1.803921610116958618e-01 1.803921610116958618e-01 1.803921610116958618e-01 1.000000000000000000e+00 -1.764705926179885864e-01 1.764705926179885864e-01 1.764705926179885864e-01 1.000000000000000000e+00 -1.725490242242813110e-01 1.725490242242813110e-01 1.725490242242813110e-01 1.000000000000000000e+00 -1.686274558305740356e-01 1.686274558305740356e-01 1.686274558305740356e-01 1.000000000000000000e+00 -1.647058874368667603e-01 1.647058874368667603e-01 1.647058874368667603e-01 1.000000000000000000e+00 -1.607843190431594849e-01 1.607843190431594849e-01 1.607843190431594849e-01 1.000000000000000000e+00 -1.568627506494522095e-01 1.568627506494522095e-01 1.568627506494522095e-01 1.000000000000000000e+00 -1.529411822557449341e-01 1.529411822557449341e-01 1.529411822557449341e-01 1.000000000000000000e+00 -1.490196138620376587e-01 1.490196138620376587e-01 1.490196138620376587e-01 1.000000000000000000e+00 -1.450980454683303833e-01 1.450980454683303833e-01 1.450980454683303833e-01 1.000000000000000000e+00 -1.411764770746231079e-01 1.411764770746231079e-01 1.411764770746231079e-01 1.000000000000000000e+00 -1.372549086809158325e-01 1.372549086809158325e-01 1.372549086809158325e-01 1.000000000000000000e+00 -1.333333402872085571e-01 1.333333402872085571e-01 1.333333402872085571e-01 1.000000000000000000e+00 -1.294117718935012817e-01 1.294117718935012817e-01 1.294117718935012817e-01 1.000000000000000000e+00 -1.254902034997940063e-01 1.254902034997940063e-01 1.254902034997940063e-01 1.000000000000000000e+00 -1.215686276555061340e-01 1.215686276555061340e-01 1.215686276555061340e-01 1.000000000000000000e+00 -1.176470592617988586e-01 1.176470592617988586e-01 1.176470592617988586e-01 1.000000000000000000e+00 -1.137254908680915833e-01 1.137254908680915833e-01 1.137254908680915833e-01 1.000000000000000000e+00 -1.098039224743843079e-01 1.098039224743843079e-01 1.098039224743843079e-01 1.000000000000000000e+00 -1.058823540806770325e-01 1.058823540806770325e-01 1.058823540806770325e-01 1.000000000000000000e+00 -1.019607856869697571e-01 1.019607856869697571e-01 1.019607856869697571e-01 1.000000000000000000e+00 -9.803921729326248169e-02 9.803921729326248169e-02 9.803921729326248169e-02 1.000000000000000000e+00 -9.411764889955520630e-02 9.411764889955520630e-02 9.411764889955520630e-02 1.000000000000000000e+00 -9.019608050584793091e-02 9.019608050584793091e-02 9.019608050584793091e-02 1.000000000000000000e+00 -8.627451211214065552e-02 8.627451211214065552e-02 8.627451211214065552e-02 1.000000000000000000e+00 -8.235294371843338013e-02 8.235294371843338013e-02 8.235294371843338013e-02 1.000000000000000000e+00 -7.843137532472610474e-02 7.843137532472610474e-02 7.843137532472610474e-02 1.000000000000000000e+00 -7.450980693101882935e-02 7.450980693101882935e-02 7.450980693101882935e-02 1.000000000000000000e+00 -7.058823853731155396e-02 7.058823853731155396e-02 7.058823853731155396e-02 1.000000000000000000e+00 -6.666667014360427856e-02 6.666667014360427856e-02 6.666667014360427856e-02 1.000000000000000000e+00 -6.274510174989700317e-02 6.274510174989700317e-02 6.274510174989700317e-02 1.000000000000000000e+00 -5.882352963089942932e-02 5.882352963089942932e-02 5.882352963089942932e-02 1.000000000000000000e+00 -5.490196123719215393e-02 5.490196123719215393e-02 5.490196123719215393e-02 1.000000000000000000e+00 -5.098039284348487854e-02 5.098039284348487854e-02 5.098039284348487854e-02 1.000000000000000000e+00 -4.705882444977760315e-02 4.705882444977760315e-02 4.705882444977760315e-02 1.000000000000000000e+00 -4.313725605607032776e-02 4.313725605607032776e-02 4.313725605607032776e-02 1.000000000000000000e+00 -3.921568766236305237e-02 3.921568766236305237e-02 3.921568766236305237e-02 1.000000000000000000e+00 -3.529411926865577698e-02 3.529411926865577698e-02 3.529411926865577698e-02 1.000000000000000000e+00 -3.137255087494850159e-02 3.137255087494850159e-02 3.137255087494850159e-02 1.000000000000000000e+00 -2.745098061859607697e-02 2.745098061859607697e-02 2.745098061859607697e-02 1.000000000000000000e+00 -2.352941222488880157e-02 2.352941222488880157e-02 2.352941222488880157e-02 1.000000000000000000e+00 -1.960784383118152618e-02 1.960784383118152618e-02 1.960784383118152618e-02 1.000000000000000000e+00 -1.568627543747425079e-02 1.568627543747425079e-02 1.568627543747425079e-02 1.000000000000000000e+00 -1.176470611244440079e-02 1.176470611244440079e-02 1.176470611244440079e-02 1.000000000000000000e+00 -7.843137718737125397e-03 7.843137718737125397e-03 7.843137718737125397e-03 1.000000000000000000e+00 -3.921568859368562698e-03 3.921568859368562698e-03 3.921568859368562698e-03 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/gnuplot b/fastplotlib/utils/colormaps/gnuplot deleted file mode 100644 index 481a27626..000000000 --- a/fastplotlib/utils/colormaps/gnuplot +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.262242794036865234e-02 6.030862920169965946e-08 2.463744953274726868e-02 1.000000000000000000e+00 -8.856149017810821533e-02 4.824690336135972757e-07 4.925994202494621277e-02 1.000000000000000000e+00 -1.084652319550514221e-01 1.628332938707899302e-06 7.385252416133880615e-02 1.000000000000000000e+00 -1.252448558807373047e-01 3.859752268908778206e-06 9.840027987957000732e-02 1.000000000000000000e+00 -1.400280147790908813e-01 7.538578756793867797e-06 1.228882893919944763e-01 1.000000000000000000e+00 -1.533930003643035889e-01 1.302666350966319442e-05 1.473017036914825439e-01 1.000000000000000000e+00 -1.656833738088607788e-01 2.068586036330088973e-05 1.716256737709045410e-01 1.000000000000000000e+00 -1.771229803562164307e-01 3.087801815127022564e-05 1.958454698324203491e-01 1.000000000000000000e+00 -1.878672838211059570e-01 4.396499207359738648e-05 2.199463546276092529e-01 1.000000000000000000e+00 -1.980295032262802124e-01 6.030863005435094237e-05 2.439137250185012817e-01 1.000000000000000000e+00 -2.076950967311859131e-01 8.027078729355707765e-05 2.677330076694488525e-01 1.000000000000000000e+00 -2.169304639101028442e-01 1.042133080773055553e-04 2.913897335529327393e-01 1.000000000000000000e+00 -2.257883846759796143e-01 1.324980548815801740e-04 3.148695826530456543e-01 1.000000000000000000e+00 -2.343116700649261475e-01 1.654868829064071178e-04 3.381582796573638916e-01 1.000000000000000000e+00 -2.425356209278106689e-01 2.035416255239397287e-04 3.612416684627532959e-01 1.000000000000000000e+00 -2.504897117614746094e-01 2.470241452101618052e-04 3.841057419776916504e-01 1.000000000000000000e+00 -2.581988871097564697e-01 2.962962898891419172e-04 4.067366421222686768e-01 1.000000000000000000e+00 -2.656844556331634521e-01 3.517199365887790918e-04 4.291206002235412598e-01 1.000000000000000000e+00 -2.729648351669311523e-01 4.136568750254809856e-04 4.512440562248229980e-01 1.000000000000000000e+00 -2.800560295581817627e-01 4.824690404348075390e-04 4.730935692787170410e-01 1.000000000000000000e+00 -2.869720160961151123e-01 5.585182225331664085e-04 4.946558475494384766e-01 1.000000000000000000e+00 -2.937252223491668701e-01 6.421662983484566212e-04 5.159178376197814941e-01 1.000000000000000000e+00 -3.003266155719757080e-01 7.337750867009162903e-04 5.368666052818298340e-01 1.000000000000000000e+00 -3.067860007286071777e-01 8.337064646184444427e-04 5.574894547462463379e-01 1.000000000000000000e+00 -3.131121397018432617e-01 9.423223091289401054e-04 5.777738094329833984e-01 1.000000000000000000e+00 -3.193129897117614746e-01 1.059984439052641392e-03 5.977074503898620605e-01 1.000000000000000000e+00 -3.253956735134124756e-01 1.187054789625108242e-03 6.172782182693481445e-01 1.000000000000000000e+00 -3.313667476177215576e-01 1.323895063251256943e-03 6.364742517471313477e-01 1.000000000000000000e+00 -3.372321128845214844e-01 1.470867195166647434e-03 6.552838683128356934e-01 1.000000000000000000e+00 -3.429971635341644287e-01 1.628333004191517830e-03 6.736956238746643066e-01 1.000000000000000000e+00 -3.486669361591339111e-01 1.796654425561428070e-03 6.916984319686889648e-01 1.000000000000000000e+00 -3.542459607124328613e-01 1.976193161681294441e-03 7.092813253402709961e-01 1.000000000000000000e+00 -3.597384691238403320e-01 2.167311264201998711e-03 7.264335751533508301e-01 1.000000000000000000e+00 -3.651483654975891113e-01 2.370370319113135338e-03 7.431448101997375488e-01 1.000000000000000000e+00 -3.704792857170104980e-01 2.585732378065586090e-03 7.594048976898193359e-01 1.000000000000000000e+00 -3.757345676422119141e-01 2.813759492710232735e-03 7.752040028572082520e-01 1.000000000000000000e+00 -3.809173703193664551e-01 3.054813016206026077e-03 7.905324101448059082e-01 1.000000000000000000e+00 -3.860305845737457275e-01 3.309255000203847885e-03 8.053809404373168945e-01 1.000000000000000000e+00 -3.910769522190093994e-01 3.577447496354579926e-03 8.197404742240905762e-01 1.000000000000000000e+00 -3.960590064525604248e-01 3.859752323478460312e-03 8.336023688316345215e-01 1.000000000000000000e+00 -4.009791910648345947e-01 4.156530834734439850e-03 8.469582200050354004e-01 1.000000000000000000e+00 -4.058397114276885986e-01 4.468145780265331268e-03 8.597998619079589844e-01 1.000000000000000000e+00 -4.106427431106567383e-01 4.794958047568798065e-03 8.721194863319396973e-01 1.000000000000000000e+00 -4.153901934623718262e-01 5.137330386787652969e-03 8.839097023010253906e-01 1.000000000000000000e+00 -4.200840294361114502e-01 5.495623685419559479e-03 8.951632976531982422e-01 1.000000000000000000e+00 -4.247259795665740967e-01 5.870200693607330322e-03 9.058734178543090820e-01 1.000000000000000000e+00 -4.293177425861358643e-01 6.261422764509916306e-03 9.160336256027221680e-01 1.000000000000000000e+00 -4.338609278202056885e-01 6.669651716947555542e-03 9.256376624107360840e-01 1.000000000000000000e+00 -4.383569955825805664e-01 7.095249835401773453e-03 9.346797466278076172e-01 1.000000000000000000e+00 -4.428074359893798828e-01 7.538578473031520844e-03 9.431544542312622070e-01 1.000000000000000000e+00 -4.472135901451110840e-01 8.000000379979610443e-03 9.510565400123596191e-01 1.000000000000000000e+00 -4.515767693519592285e-01 8.479875512421131134e-03 9.583812355995178223e-01 1.000000000000000000e+00 -4.558981657028198242e-01 8.978568017482757568e-03 9.651240706443786621e-01 1.000000000000000000e+00 -4.601790010929107666e-01 9.496438317000865936e-03 9.712810516357421875e-01 1.000000000000000000e+00 -4.644203782081604004e-01 1.003384776413440704e-02 9.768483042716979980e-01 1.000000000000000000e+00 -4.686233401298522949e-01 1.059116050601005554e-02 9.818225502967834473e-01 1.000000000000000000e+00 -4.727889597415924072e-01 1.116873603314161301e-02 9.862007498741149902e-01 1.000000000000000000e+00 -4.769182205200195312e-01 1.176693756133317947e-02 9.899802207946777344e-01 1.000000000000000000e+00 -4.810120165348052979e-01 1.238612644374370575e-02 9.931586384773254395e-01 1.000000000000000000e+00 -4.850712418556213379e-01 1.302666403353214264e-02 9.957341551780700684e-01 1.000000000000000000e+00 -4.890968203544616699e-01 1.368891261518001556e-02 9.977051615715026855e-01 1.000000000000000000e+00 -4.930894970893859863e-01 1.437323540449142456e-02 9.990704655647277832e-01 1.000000000000000000e+00 -4.970501363277435303e-01 1.507999189198017120e-02 9.998292326927185059e-01 1.000000000000000000e+00 -5.009794235229492188e-01 1.580954529345035553e-02 9.999810457229614258e-01 1.000000000000000000e+00 -5.048781633377075195e-01 1.656225696206092834e-02 9.995257258415222168e-01 1.000000000000000000e+00 -5.087470412254333496e-01 1.733849011361598969e-02 9.984636306762695312e-01 1.000000000000000000e+00 -5.125866532325744629e-01 1.813860423862934113e-02 9.967952966690063477e-01 1.000000000000000000e+00 -5.163977742195129395e-01 1.896296255290508270e-02 9.945219159126281738e-01 1.000000000000000000e+00 -5.201809406280517578e-01 1.981192827224731445e-02 9.916446805000305176e-01 1.000000000000000000e+00 -5.239368081092834473e-01 2.068585902452468872e-02 9.881654977798461914e-01 1.000000000000000000e+00 -5.276659727096557617e-01 2.158512175083160400e-02 9.840863347053527832e-01 1.000000000000000000e+00 -5.313689112663269043e-01 2.251007594168186188e-02 9.794097542762756348e-01 1.000000000000000000e+00 -5.350462794303894043e-01 2.346108295023441315e-02 9.741386175155639648e-01 1.000000000000000000e+00 -5.386984944343566895e-01 2.443850412964820862e-02 9.682760238647460938e-01 1.000000000000000000e+00 -5.423261523246765137e-01 2.544270269572734833e-02 9.618256688117980957e-01 1.000000000000000000e+00 -5.459296703338623047e-01 2.647404000163078308e-02 9.547913074493408203e-01 1.000000000000000000e+00 -5.495095849037170410e-01 2.753287926316261292e-02 9.471773505210876465e-01 1.000000000000000000e+00 -5.530663132667541504e-01 2.861957997083663940e-02 9.389883875846862793e-01 1.000000000000000000e+00 -5.566003322601318359e-01 2.973450720310211182e-02 9.302293062210083008e-01 1.000000000000000000e+00 -5.601120591163635254e-01 3.087801858782768250e-02 9.209055304527282715e-01 1.000000000000000000e+00 -5.636018514633178711e-01 3.205047920346260071e-02 9.110226631164550781e-01 1.000000000000000000e+00 -5.670701861381530762e-01 3.325224667787551880e-02 9.005867242813110352e-01 1.000000000000000000e+00 -5.705174803733825684e-01 3.448368981480598450e-02 8.896040320396423340e-01 1.000000000000000000e+00 -5.739440321922302246e-01 3.574516624212265015e-02 8.780812621116638184e-01 1.000000000000000000e+00 -5.773502588272094727e-01 3.703703731298446655e-02 8.660253882408142090e-01 1.000000000000000000e+00 -5.807365179061889648e-01 3.835966438055038452e-02 8.534438014030456543e-01 1.000000000000000000e+00 -5.841031074523925781e-01 3.971341252326965332e-02 8.403440713882446289e-01 1.000000000000000000e+00 -5.874504446983337402e-01 4.109864309430122375e-02 8.267341852188110352e-01 1.000000000000000000e+00 -5.907788276672363281e-01 4.251571372151374817e-02 8.126223683357238770e-01 1.000000000000000000e+00 -5.940885543823242188e-01 4.396498948335647583e-02 7.980172038078308105e-01 1.000000000000000000e+00 -5.973799228668212891e-01 4.544683545827865601e-02 7.829276323318481445e-01 1.000000000000000000e+00 -6.006532311439514160e-01 4.696160554885864258e-02 7.673626542091369629e-01 1.000000000000000000e+00 -6.039088368415832520e-01 4.850966855883598328e-02 7.513318657875061035e-01 1.000000000000000000e+00 -6.071469783782958984e-01 5.009138211607933044e-02 7.348449826240539551e-01 1.000000000000000000e+00 -6.103679537773132324e-01 5.170711129903793335e-02 7.179118990898132324e-01 1.000000000000000000e+00 -6.135720014572143555e-01 5.335721373558044434e-02 7.005430459976196289e-01 1.000000000000000000e+00 -6.167594194412231445e-01 5.504205822944641113e-02 6.827488541603088379e-01 1.000000000000000000e+00 -6.199304461479187012e-01 5.676199868321418762e-02 6.645401716232299805e-01 1.000000000000000000e+00 -6.230853199958801270e-01 5.851740390062332153e-02 6.459280848503112793e-01 1.000000000000000000e+00 -6.262242794036865234e-01 6.030862778425216675e-02 6.269237995147705078e-01 1.000000000000000000e+00 -6.293476223945617676e-01 6.213604286313056946e-02 6.075389385223388672e-01 1.000000000000000000e+00 -6.324555277824401855e-01 6.400000303983688354e-02 5.877852439880371094e-01 1.000000000000000000e+00 -6.355482339859008789e-01 6.590086966753005981e-02 5.676746964454650879e-01 1.000000000000000000e+00 -6.386259794235229492e-01 6.783900409936904907e-02 5.472195744514465332e-01 1.000000000000000000e+00 -6.416889429092407227e-01 6.981477886438369751e-02 5.264321565628051758e-01 1.000000000000000000e+00 -6.447373628616333008e-01 7.182854413986206055e-02 5.053251981735229492e-01 1.000000000000000000e+00 -6.477714180946350098e-01 7.388066500425338745e-02 4.839114248752593994e-01 1.000000000000000000e+00 -6.507913470268249512e-01 7.597150653600692749e-02 4.622038900852203369e-01 1.000000000000000000e+00 -6.537973284721374512e-01 7.810142636299133301e-02 4.402157366275787354e-01 1.000000000000000000e+00 -6.567896008491516113e-01 8.027078211307525635e-02 4.179603457450866699e-01 1.000000000000000000e+00 -6.597682237625122070e-01 8.247995376586914062e-02 3.954512178897857666e-01 1.000000000000000000e+00 -6.627334952354431152e-01 8.472928404808044434e-02 3.727020025253295898e-01 1.000000000000000000e+00 -6.656855344772338867e-01 8.701913803815841675e-02 3.497264981269836426e-01 1.000000000000000000e+00 -6.686245799064636230e-01 8.934988826513290405e-02 3.265387117862701416e-01 1.000000000000000000e+00 -6.715507507324218750e-01 9.172188490629196167e-02 3.031526803970336914e-01 1.000000000000000000e+00 -6.744642257690429688e-01 9.413550049066543579e-02 2.795825898647308350e-01 1.000000000000000000e+00 -6.773651242256164551e-01 9.659108519554138184e-02 2.558427751064300537e-01 1.000000000000000000e+00 -6.802536845207214355e-01 9.908901154994964600e-02 2.319476455450057983e-01 1.000000000000000000e+00 -6.831300258636474609e-01 1.016296297311782837e-01 2.079116851091384888e-01 1.000000000000000000e+00 -6.859943270683288574e-01 1.042133122682571411e-01 1.837495118379592896e-01 1.000000000000000000e+00 -6.888467073440551758e-01 1.068404167890548706e-01 1.594757884740829468e-01 1.000000000000000000e+00 -6.916873455047607422e-01 1.095113009214401245e-01 1.351052522659301758e-01 1.000000000000000000e+00 -6.945163607597351074e-01 1.122263371944427490e-01 1.106526851654052734e-01 1.000000000000000000e+00 -6.973338723182678223e-01 1.149858832359313965e-01 8.613293617963790894e-02 1.000000000000000000e+00 -7.001400589942932129e-01 1.177902892231941223e-01 6.156090646982192993e-02 1.000000000000000000e+00 -7.029350399971008301e-01 1.206399351358413696e-01 3.695150092244148254e-02 1.000000000000000000e+00 -7.057189345359802246e-01 1.235351711511611938e-01 1.231965981423854828e-02 1.000000000000000000e+00 -7.084919214248657227e-01 1.264763623476028442e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.112540602684020996e-01 1.294638663530349731e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.140055298805236816e-01 1.324980556964874268e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.167464494705200195e-01 1.355792880058288574e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.194769382476806641e-01 1.387079209089279175e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.221970558166503906e-01 1.418843120336532593e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.249070405960083008e-01 1.451088339090347290e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.276068925857543945e-01 1.483818441629409790e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.302967309951782227e-01 1.517037004232406616e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.329767346382141113e-01 1.550747752189636230e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.356469631195068359e-01 1.584954261779785156e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.383075356483459473e-01 1.619659960269927979e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.409585714340209961e-01 1.654868721961975098e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.436001300811767578e-01 1.690584123134613037e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.462323904037475586e-01 1.726809740066528320e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.488553524017333984e-01 1.763549149036407471e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.514691352844238281e-01 1.800806075334548950e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.540739178657531738e-01 1.838583946228027344e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.566697001457214355e-01 1.876886636018753052e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.592566013336181641e-01 1.915717422962188721e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.618347406387329102e-01 1.955080330371856689e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.644041776657104492e-01 1.994978636503219604e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.669649720191955566e-01 2.035416215658187866e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.695173025131225586e-01 2.076396495103836060e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.720611691474914551e-01 2.117923200130462646e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.745966911315917969e-01 2.160000056028366089e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.771239280700683594e-01 2.202630341053009033e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.796429395675659180e-01 2.245817929506301880e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.821539044380187988e-01 2.289566397666931152e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.846567630767822266e-01 2.333879470825195312e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.871517539024353027e-01 2.378760576248168945e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.896387577056884766e-01 2.424213290214538574e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.921180129051208496e-01 2.470241487026214600e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.945895195007324219e-01 2.516848444938659668e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.970533967018127441e-01 2.564038336277008057e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.995096445083618164e-01 2.611814141273498535e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.019583821296691895e-01 2.660179734230041504e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.043996691703796387e-01 2.709138989448547363e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.068335652351379395e-01 2.758695185184478760e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.092601299285888672e-01 2.808852195739746094e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.116794228553771973e-01 2.859613299369812012e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.140915632247924805e-01 2.910982370376586914e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.164966106414794922e-01 2.962962985038757324e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.188945055007934570e-01 3.015558719635009766e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.212854862213134766e-01 3.068773150444030762e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.236694335937500000e-01 3.122610151767730713e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.260465860366821289e-01 3.177073001861572266e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.284168839454650879e-01 3.232165575027465820e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.307803869247436523e-01 3.287891447544097900e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.331372141838073730e-01 3.344253897666931152e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.354874253273010254e-01 3.401257097721099854e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.378310203552246094e-01 3.458904325962066650e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.401680588722229004e-01 3.517199158668518066e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.424986004829406738e-01 3.576145470142364502e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.448227643966674805e-01 3.635746836662292480e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.471404910087585449e-01 3.696006536483764648e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.494519591331481934e-01 3.756928443908691406e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.517571091651916504e-01 3.818516135215759277e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.540560603141784668e-01 3.880773484706878662e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.563488125801086426e-01 3.943703770637512207e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.586354851722717285e-01 4.007310569286346436e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.609160780906677246e-01 4.071597754955291748e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.631905913352966309e-01 4.136568903923034668e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.654592037200927734e-01 4.202227592468261719e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.677218556404113770e-01 4.268577098846435547e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.699786067008972168e-01 4.335621595382690430e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.722295165061950684e-01 4.403364658355712891e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.744746446609497070e-01 4.471809566020965576e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.767139911651611328e-01 4.540959894657135010e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.789476752281188965e-01 4.610819816589355469e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.811756968498229980e-01 4.681392312049865723e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.833980560302734375e-01 4.752681255340576172e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.856148719787597656e-01 4.824690222740173340e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.878261446952819824e-01 4.897423088550567627e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.900319337844848633e-01 4.970883429050445557e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.922322988510131836e-01 5.045074224472045898e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.944271802902221680e-01 5.120000243186950684e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.966167569160461426e-01 5.195663571357727051e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.988009691238403320e-01 5.272069573402404785e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.009798765182495117e-01 5.349220633506774902e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.031535387039184570e-01 5.427120327949523926e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.053219556808471680e-01 5.505773425102233887e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.074851870536804199e-01 5.585182309150695801e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.096433520317077637e-01 5.665351152420043945e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.117963314056396484e-01 5.746283531188964844e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.139442443847656250e-01 5.827983021736145020e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.160871505737304688e-01 5.910453200340270996e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.182250499725341797e-01 5.993697643280029297e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.203580021858215332e-01 6.077720522880554199e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.224860072135925293e-01 6.162524223327636719e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.246090650558471680e-01 6.248114109039306641e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.267272949218750000e-01 6.334491968154907227e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.288407564163208008e-01 6.421662569046020508e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.309493303298950195e-01 6.509629487991333008e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.330531954765319824e-01 6.598396301269531250e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.351522922515869141e-01 6.687965989112854004e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.372466802597045898e-01 6.778342723846435547e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.393364191055297852e-01 6.869530081748962402e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.414215087890625000e-01 6.961531043052673340e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.435020089149475098e-01 7.054350376129150391e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.455779194831848145e-01 7.147991061210632324e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.476493000984191895e-01 7.242456674575805664e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.497161507606506348e-01 7.337750792503356934e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.517785310745239258e-01 7.433877587318420410e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.538364410400390625e-01 7.530840039253234863e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.558898806571960449e-01 7.628641724586486816e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.579389691352844238e-01 7.727286815643310547e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.599836468696594238e-01 7.826778292655944824e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.620240330696105957e-01 7.927120923995971680e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.640600681304931641e-01 8.028316497802734375e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.660918116569519043e-01 8.130370378494262695e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.681192636489868164e-01 8.233284950256347656e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.701424837112426758e-01 8.337064981460571289e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.721615314483642578e-01 8.441712856292724609e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.741763472557067871e-01 8.547233343124389648e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.761870503425598145e-01 8.653629422187805176e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.781936407089233398e-01 8.760904073715209961e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.801960587501525879e-01 8.869062662124633789e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.821944236755371094e-01 8.978106975555419922e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.841887354850769043e-01 9.088041782379150391e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.861789941787719727e-01 9.198870658874511719e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.881652593612670898e-01 9.310596585273742676e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.901475310325622559e-01 9.423223137855529785e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.921258687973022461e-01 9.536755084991455078e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.941002726554870605e-01 9.651194810867309570e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.960706830024719238e-01 9.766546487808227539e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.980372786521911621e-01 9.882813692092895508e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/gnuplot2 b/fastplotlib/utils/colormaps/gnuplot2 deleted file mode 100644 index 6c9146d47..000000000 --- a/fastplotlib/utils/colormaps/gnuplot2 +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.568627543747425079e-02 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.137255087494850159e-02 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.705882444977760315e-02 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.274510174989700317e-02 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.843137532472610474e-02 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.411764889955520630e-02 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.098039224743843079e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.254902034997940063e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.411764770746231079e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.568627506494522095e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.725490242242813110e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.882352977991104126e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.039215713739395142e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.196078449487686157e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.352941185235977173e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.509804069995880127e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.666666805744171143e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.823529541492462158e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 2.980392277240753174e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.137255012989044189e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.294117748737335205e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.450980484485626221e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.607843220233917236e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.764705955982208252e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.921568691730499268e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.078431427478790283e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.235294163227081299e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.392156898975372314e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.549019634723663330e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.705882370471954346e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.862745106220245361e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.019608139991760254e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.176470875740051270e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.333333611488342285e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.490196347236633301e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.647059082984924316e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.803921818733215332e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.960784554481506348e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.117647290229797363e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.274510025978088379e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.431372761726379395e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.588235497474670410e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.745098233222961426e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.901960968971252441e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.058823704719543457e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.215686440467834473e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.372549176216125488e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.529411911964416504e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.686274647712707520e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.843137383460998535e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.000000119209289551e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.156862854957580566e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.313725590705871582e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.470588326454162598e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.627451062202453613e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.784313797950744629e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.941176533699035645e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.098039269447326660e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.254902005195617676e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.411764740943908691e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.568627476692199707e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.725490212440490723e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.882352948188781738e-01 1.000000000000000000e+00 -3.063725540414452553e-03 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.531862746924161911e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.757352963089942932e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.982843086123466492e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.208333209156990051e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -6.433823704719543457e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.659313827753067017e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -8.884803950786590576e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.011029407382011414e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.133578419685363770e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.256127506494522095e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.378676444292068481e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.501225531101226807e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.623774468898773193e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.746323555707931519e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.868872493505477905e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.991421580314636230e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.113970518112182617e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.236519604921340942e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.359068691730499268e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.481617629528045654e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.604166567325592041e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.726715803146362305e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.849264740943908691e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.971813678741455078e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.094362616539001465e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.216911852359771729e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.339460790157318115e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.462009727954864502e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.584558963775634766e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.707107901573181152e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.829656839370727539e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.952205777168273926e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.074755012989044189e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.197303950786590576e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.319852888584136963e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.442401826381683350e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.564951062202453613e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.687500000000000000e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.810048937797546387e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.932598173618316650e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.055146813392639160e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.177696347236633301e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.300245285034179688e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.422794222831726074e-01 7.058823481202125549e-03 9.929412007331848145e-01 1.000000000000000000e+00 -5.545343160629272461e-01 1.490196119993925095e-02 9.850980639457702637e-01 1.000000000000000000e+00 -5.667892098426818848e-01 2.274509891867637634e-02 9.772549271583557129e-01 1.000000000000000000e+00 -5.790441036224365234e-01 3.058823570609092712e-02 9.694117903709411621e-01 1.000000000000000000e+00 -5.912989974021911621e-01 3.843137249350547791e-02 9.615686535835266113e-01 1.000000000000000000e+00 -6.035539507865905762e-01 4.627450928092002869e-02 9.537255167961120605e-01 1.000000000000000000e+00 -6.158088445663452148e-01 5.411764606833457947e-02 9.458823800086975098e-01 1.000000000000000000e+00 -6.280637383460998535e-01 6.196078285574913025e-02 9.380392432212829590e-01 1.000000000000000000e+00 -6.403186321258544922e-01 6.980392336845397949e-02 9.301961064338684082e-01 1.000000000000000000e+00 -6.525735259056091309e-01 7.764706015586853027e-02 9.223529696464538574e-01 1.000000000000000000e+00 -6.648284196853637695e-01 8.549019694328308105e-02 9.145098328590393066e-01 1.000000000000000000e+00 -6.770833134651184082e-01 9.333333373069763184e-02 9.066666960716247559e-01 1.000000000000000000e+00 -6.893382072448730469e-01 1.011764705181121826e-01 8.988234996795654297e-01 1.000000000000000000e+00 -7.015931606292724609e-01 1.090196073055267334e-01 8.909803628921508789e-01 1.000000000000000000e+00 -7.138480544090270996e-01 1.168627440929412842e-01 8.831372261047363281e-01 1.000000000000000000e+00 -7.261029481887817383e-01 1.247058808803558350e-01 8.752940893173217773e-01 1.000000000000000000e+00 -7.383578419685363770e-01 1.325490176677703857e-01 8.674509525299072266e-01 1.000000000000000000e+00 -7.506127357482910156e-01 1.403921544551849365e-01 8.596078157424926758e-01 1.000000000000000000e+00 -7.628676295280456543e-01 1.482352912425994873e-01 8.517646789550781250e-01 1.000000000000000000e+00 -7.751225233078002930e-01 1.560784280300140381e-01 8.439215421676635742e-01 1.000000000000000000e+00 -7.873774766921997070e-01 1.639215648174285889e-01 8.360784053802490234e-01 1.000000000000000000e+00 -7.996323704719543457e-01 1.717647016048431396e-01 8.282352685928344727e-01 1.000000000000000000e+00 -8.118872642517089844e-01 1.796078383922576904e-01 8.203921318054199219e-01 1.000000000000000000e+00 -8.241421580314636230e-01 1.874509751796722412e-01 8.125489950180053711e-01 1.000000000000000000e+00 -8.363970518112182617e-01 1.952941119670867920e-01 8.047058582305908203e-01 1.000000000000000000e+00 -8.486519455909729004e-01 2.031372487545013428e-01 7.968627214431762695e-01 1.000000000000000000e+00 -8.609068393707275391e-01 2.109803855419158936e-01 7.890195846557617188e-01 1.000000000000000000e+00 -8.731617927551269531e-01 2.188235223293304443e-01 7.811764478683471680e-01 1.000000000000000000e+00 -8.854166865348815918e-01 2.266666740179061890e-01 7.733333110809326172e-01 1.000000000000000000e+00 -8.976715803146362305e-01 2.345098108053207397e-01 7.654901742935180664e-01 1.000000000000000000e+00 -9.099264740943908691e-01 2.423529475927352905e-01 7.576470375061035156e-01 1.000000000000000000e+00 -9.221813678741455078e-01 2.501960694789886475e-01 7.498039007186889648e-01 1.000000000000000000e+00 -9.344362616539001465e-01 2.580392062664031982e-01 7.419607639312744141e-01 1.000000000000000000e+00 -9.466911554336547852e-01 2.658823430538177490e-01 7.341176271438598633e-01 1.000000000000000000e+00 -9.589460492134094238e-01 2.737254798412322998e-01 7.262744903564453125e-01 1.000000000000000000e+00 -9.712010025978088379e-01 2.815686166286468506e-01 7.184313535690307617e-01 1.000000000000000000e+00 -9.834558963775634766e-01 2.894117534160614014e-01 7.105882167816162109e-01 1.000000000000000000e+00 -9.957107901573181152e-01 2.972548902034759521e-01 7.027450799942016602e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.050980269908905029e-01 6.949019432067871094e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.129411637783050537e-01 6.870588064193725586e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.207843005657196045e-01 6.792156696319580078e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.286274373531341553e-01 6.713725328445434570e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.364705741405487061e-01 6.635293960571289062e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.443137109279632568e-01 6.556862592697143555e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.521568775177001953e-01 6.478431224822998047e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.600000143051147461e-01 6.399999856948852539e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.678431510925292969e-01 6.321568489074707031e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.756862878799438477e-01 6.243137121200561523e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.835294246673583984e-01 6.164705753326416016e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.913725614547729492e-01 6.086274385452270508e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.992156982421875000e-01 6.007843017578125000e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.070588350296020508e-01 5.929411649703979492e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.149019718170166016e-01 5.850980281829833984e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.227451086044311523e-01 5.772548913955688477e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.305882453918457031e-01 5.694117546081542969e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.384313821792602539e-01 5.615686178207397461e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.462745189666748047e-01 5.537254810333251953e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.541176557540893555e-01 5.458823442459106445e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.619607925415039062e-01 5.380392074584960938e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.698039293289184570e-01 5.301960706710815430e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.776470661163330078e-01 5.223529338836669922e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.854902029037475586e-01 5.145097970962524414e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.933333396911621094e-01 5.066666603088378906e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.011764764785766602e-01 4.988235235214233398e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.090196132659912109e-01 4.909803867340087891e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.168627500534057617e-01 4.831372499465942383e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.247058868408203125e-01 4.752941131591796875e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.325490236282348633e-01 4.674509763717651367e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.403921604156494141e-01 4.596078395843505859e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.482352972030639648e-01 4.517647027969360352e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.560784339904785156e-01 4.439215660095214844e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.639215707778930664e-01 4.360784292221069336e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.717647075653076172e-01 4.282352924346923828e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.796078443527221680e-01 4.203921556472778320e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.874509811401367188e-01 4.125490188598632812e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.952941179275512695e-01 4.047058820724487305e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.031372547149658203e-01 3.968627452850341797e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.109803915023803711e-01 3.890196084976196289e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.188235282897949219e-01 3.811764717102050781e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.266666650772094727e-01 3.733333349227905273e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.345098018646240234e-01 3.654901981353759766e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.423529386520385742e-01 3.576470613479614258e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.501960754394531250e-01 3.498039245605468750e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.580392122268676758e-01 3.419607877731323242e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.658823490142822266e-01 3.341176509857177734e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.737254858016967773e-01 3.262745141983032227e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.815686225891113281e-01 3.184313774108886719e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.894117593765258789e-01 3.105882406234741211e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.972548961639404297e-01 3.027451038360595703e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.050980329513549805e-01 2.949019670486450195e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.129411697387695312e-01 2.870588302612304688e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.207843065261840820e-01 2.792156934738159180e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.286274433135986328e-01 2.713725566864013672e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.364705801010131836e-01 2.635294198989868164e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.443137168884277344e-01 2.556862831115722656e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.521568536758422852e-01 2.478431314229965210e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.599999904632568359e-01 2.399999946355819702e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.678431272506713867e-01 2.321568578481674194e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.756862640380859375e-01 2.243137210607528687e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.835294008255004883e-01 2.164705842733383179e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.913725376129150391e-01 2.086274474859237671e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.992156744003295898e-01 2.007843106985092163e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.070588111877441406e-01 1.929411739110946655e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.149019479751586914e-01 1.850980371236801147e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.227450847625732422e-01 1.772549003362655640e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.305882215499877930e-01 1.694117635488510132e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.384313583374023438e-01 1.615686267614364624e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.462744951248168945e-01 1.537254899740219116e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.541176319122314453e-01 1.458823531866073608e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.619607686996459961e-01 1.380392163991928101e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.698039054870605469e-01 1.301960796117782593e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.776470422744750977e-01 1.223529428243637085e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.854901790618896484e-01 1.145098060369491577e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.933333158493041992e-01 1.066666692495346069e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.011764526367187500e-01 9.882353246212005615e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.090195894241333008e-01 9.098039567470550537e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.168627262115478516e-01 8.313725143671035767e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.247058629989624023e-01 7.529411464929580688e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.325489997863769531e-01 6.745097786188125610e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.403921365737915039e-01 5.960784479975700378e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.482352733612060547e-01 5.176470428705215454e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.560784101486206055e-01 4.392156749963760376e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.639215469360351562e-01 3.607843071222305298e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.717646837234497070e-01 2.823529392480850220e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.796078205108642578e-01 2.039215713739395142e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.874509572982788086e-01 1.254901941865682602e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.952940940856933594e-01 4.705882165580987930e-03 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.960784383118152618e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.862745434045791626e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.176470592617988586e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.666666716337203979e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 2.156862765550613403e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 2.647058963775634766e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 3.137255012989044189e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 3.627451062202453613e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.117647111415863037e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.607843160629272461e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.098039507865905762e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.588235259056091309e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.078431606292724609e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.568627357482910156e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.058823704719543457e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.549019455909729004e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.039215803146362305e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.529411554336547852e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.019607901573181152e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.509803652763366699e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/gray b/fastplotlib/utils/colormaps/gray deleted file mode 100644 index 42b875285..000000000 --- a/fastplotlib/utils/colormaps/gray +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.921568859368562698e-03 3.921568859368562698e-03 3.921568859368562698e-03 1.000000000000000000e+00 -7.843137718737125397e-03 7.843137718737125397e-03 7.843137718737125397e-03 1.000000000000000000e+00 -1.176470611244440079e-02 1.176470611244440079e-02 1.176470611244440079e-02 1.000000000000000000e+00 -1.568627543747425079e-02 1.568627543747425079e-02 1.568627543747425079e-02 1.000000000000000000e+00 -1.960784383118152618e-02 1.960784383118152618e-02 1.960784383118152618e-02 1.000000000000000000e+00 -2.352941222488880157e-02 2.352941222488880157e-02 2.352941222488880157e-02 1.000000000000000000e+00 -2.745098061859607697e-02 2.745098061859607697e-02 2.745098061859607697e-02 1.000000000000000000e+00 -3.137255087494850159e-02 3.137255087494850159e-02 3.137255087494850159e-02 1.000000000000000000e+00 -3.529411926865577698e-02 3.529411926865577698e-02 3.529411926865577698e-02 1.000000000000000000e+00 -3.921568766236305237e-02 3.921568766236305237e-02 3.921568766236305237e-02 1.000000000000000000e+00 -4.313725605607032776e-02 4.313725605607032776e-02 4.313725605607032776e-02 1.000000000000000000e+00 -4.705882444977760315e-02 4.705882444977760315e-02 4.705882444977760315e-02 1.000000000000000000e+00 -5.098039284348487854e-02 5.098039284348487854e-02 5.098039284348487854e-02 1.000000000000000000e+00 -5.490196123719215393e-02 5.490196123719215393e-02 5.490196123719215393e-02 1.000000000000000000e+00 -5.882352963089942932e-02 5.882352963089942932e-02 5.882352963089942932e-02 1.000000000000000000e+00 -6.274510174989700317e-02 6.274510174989700317e-02 6.274510174989700317e-02 1.000000000000000000e+00 -6.666667014360427856e-02 6.666667014360427856e-02 6.666667014360427856e-02 1.000000000000000000e+00 -7.058823853731155396e-02 7.058823853731155396e-02 7.058823853731155396e-02 1.000000000000000000e+00 -7.450980693101882935e-02 7.450980693101882935e-02 7.450980693101882935e-02 1.000000000000000000e+00 -7.843137532472610474e-02 7.843137532472610474e-02 7.843137532472610474e-02 1.000000000000000000e+00 -8.235294371843338013e-02 8.235294371843338013e-02 8.235294371843338013e-02 1.000000000000000000e+00 -8.627451211214065552e-02 8.627451211214065552e-02 8.627451211214065552e-02 1.000000000000000000e+00 -9.019608050584793091e-02 9.019608050584793091e-02 9.019608050584793091e-02 1.000000000000000000e+00 -9.411764889955520630e-02 9.411764889955520630e-02 9.411764889955520630e-02 1.000000000000000000e+00 -9.803921729326248169e-02 9.803921729326248169e-02 9.803921729326248169e-02 1.000000000000000000e+00 -1.019607856869697571e-01 1.019607856869697571e-01 1.019607856869697571e-01 1.000000000000000000e+00 -1.058823540806770325e-01 1.058823540806770325e-01 1.058823540806770325e-01 1.000000000000000000e+00 -1.098039224743843079e-01 1.098039224743843079e-01 1.098039224743843079e-01 1.000000000000000000e+00 -1.137254908680915833e-01 1.137254908680915833e-01 1.137254908680915833e-01 1.000000000000000000e+00 -1.176470592617988586e-01 1.176470592617988586e-01 1.176470592617988586e-01 1.000000000000000000e+00 -1.215686276555061340e-01 1.215686276555061340e-01 1.215686276555061340e-01 1.000000000000000000e+00 -1.254902034997940063e-01 1.254902034997940063e-01 1.254902034997940063e-01 1.000000000000000000e+00 -1.294117718935012817e-01 1.294117718935012817e-01 1.294117718935012817e-01 1.000000000000000000e+00 -1.333333402872085571e-01 1.333333402872085571e-01 1.333333402872085571e-01 1.000000000000000000e+00 -1.372549086809158325e-01 1.372549086809158325e-01 1.372549086809158325e-01 1.000000000000000000e+00 -1.411764770746231079e-01 1.411764770746231079e-01 1.411764770746231079e-01 1.000000000000000000e+00 -1.450980454683303833e-01 1.450980454683303833e-01 1.450980454683303833e-01 1.000000000000000000e+00 -1.490196138620376587e-01 1.490196138620376587e-01 1.490196138620376587e-01 1.000000000000000000e+00 -1.529411822557449341e-01 1.529411822557449341e-01 1.529411822557449341e-01 1.000000000000000000e+00 -1.568627506494522095e-01 1.568627506494522095e-01 1.568627506494522095e-01 1.000000000000000000e+00 -1.607843190431594849e-01 1.607843190431594849e-01 1.607843190431594849e-01 1.000000000000000000e+00 -1.647058874368667603e-01 1.647058874368667603e-01 1.647058874368667603e-01 1.000000000000000000e+00 -1.686274558305740356e-01 1.686274558305740356e-01 1.686274558305740356e-01 1.000000000000000000e+00 -1.725490242242813110e-01 1.725490242242813110e-01 1.725490242242813110e-01 1.000000000000000000e+00 -1.764705926179885864e-01 1.764705926179885864e-01 1.764705926179885864e-01 1.000000000000000000e+00 -1.803921610116958618e-01 1.803921610116958618e-01 1.803921610116958618e-01 1.000000000000000000e+00 -1.843137294054031372e-01 1.843137294054031372e-01 1.843137294054031372e-01 1.000000000000000000e+00 -1.882352977991104126e-01 1.882352977991104126e-01 1.882352977991104126e-01 1.000000000000000000e+00 -1.921568661928176880e-01 1.921568661928176880e-01 1.921568661928176880e-01 1.000000000000000000e+00 -1.960784345865249634e-01 1.960784345865249634e-01 1.960784345865249634e-01 1.000000000000000000e+00 -2.000000029802322388e-01 2.000000029802322388e-01 2.000000029802322388e-01 1.000000000000000000e+00 -2.039215713739395142e-01 2.039215713739395142e-01 2.039215713739395142e-01 1.000000000000000000e+00 -2.078431397676467896e-01 2.078431397676467896e-01 2.078431397676467896e-01 1.000000000000000000e+00 -2.117647081613540649e-01 2.117647081613540649e-01 2.117647081613540649e-01 1.000000000000000000e+00 -2.156862765550613403e-01 2.156862765550613403e-01 2.156862765550613403e-01 1.000000000000000000e+00 -2.196078449487686157e-01 2.196078449487686157e-01 2.196078449487686157e-01 1.000000000000000000e+00 -2.235294133424758911e-01 2.235294133424758911e-01 2.235294133424758911e-01 1.000000000000000000e+00 -2.274509817361831665e-01 2.274509817361831665e-01 2.274509817361831665e-01 1.000000000000000000e+00 -2.313725501298904419e-01 2.313725501298904419e-01 2.313725501298904419e-01 1.000000000000000000e+00 -2.352941185235977173e-01 2.352941185235977173e-01 2.352941185235977173e-01 1.000000000000000000e+00 -2.392156869173049927e-01 2.392156869173049927e-01 2.392156869173049927e-01 1.000000000000000000e+00 -2.431372553110122681e-01 2.431372553110122681e-01 2.431372553110122681e-01 1.000000000000000000e+00 -2.470588237047195435e-01 2.470588237047195435e-01 2.470588237047195435e-01 1.000000000000000000e+00 -2.509804069995880127e-01 2.509804069995880127e-01 2.509804069995880127e-01 1.000000000000000000e+00 -2.549019753932952881e-01 2.549019753932952881e-01 2.549019753932952881e-01 1.000000000000000000e+00 -2.588235437870025635e-01 2.588235437870025635e-01 2.588235437870025635e-01 1.000000000000000000e+00 -2.627451121807098389e-01 2.627451121807098389e-01 2.627451121807098389e-01 1.000000000000000000e+00 -2.666666805744171143e-01 2.666666805744171143e-01 2.666666805744171143e-01 1.000000000000000000e+00 -2.705882489681243896e-01 2.705882489681243896e-01 2.705882489681243896e-01 1.000000000000000000e+00 -2.745098173618316650e-01 2.745098173618316650e-01 2.745098173618316650e-01 1.000000000000000000e+00 -2.784313857555389404e-01 2.784313857555389404e-01 2.784313857555389404e-01 1.000000000000000000e+00 -2.823529541492462158e-01 2.823529541492462158e-01 2.823529541492462158e-01 1.000000000000000000e+00 -2.862745225429534912e-01 2.862745225429534912e-01 2.862745225429534912e-01 1.000000000000000000e+00 -2.901960909366607666e-01 2.901960909366607666e-01 2.901960909366607666e-01 1.000000000000000000e+00 -2.941176593303680420e-01 2.941176593303680420e-01 2.941176593303680420e-01 1.000000000000000000e+00 -2.980392277240753174e-01 2.980392277240753174e-01 2.980392277240753174e-01 1.000000000000000000e+00 -3.019607961177825928e-01 3.019607961177825928e-01 3.019607961177825928e-01 1.000000000000000000e+00 -3.058823645114898682e-01 3.058823645114898682e-01 3.058823645114898682e-01 1.000000000000000000e+00 -3.098039329051971436e-01 3.098039329051971436e-01 3.098039329051971436e-01 1.000000000000000000e+00 -3.137255012989044189e-01 3.137255012989044189e-01 3.137255012989044189e-01 1.000000000000000000e+00 -3.176470696926116943e-01 3.176470696926116943e-01 3.176470696926116943e-01 1.000000000000000000e+00 -3.215686380863189697e-01 3.215686380863189697e-01 3.215686380863189697e-01 1.000000000000000000e+00 -3.254902064800262451e-01 3.254902064800262451e-01 3.254902064800262451e-01 1.000000000000000000e+00 -3.294117748737335205e-01 3.294117748737335205e-01 3.294117748737335205e-01 1.000000000000000000e+00 -3.333333432674407959e-01 3.333333432674407959e-01 3.333333432674407959e-01 1.000000000000000000e+00 -3.372549116611480713e-01 3.372549116611480713e-01 3.372549116611480713e-01 1.000000000000000000e+00 -3.411764800548553467e-01 3.411764800548553467e-01 3.411764800548553467e-01 1.000000000000000000e+00 -3.450980484485626221e-01 3.450980484485626221e-01 3.450980484485626221e-01 1.000000000000000000e+00 -3.490196168422698975e-01 3.490196168422698975e-01 3.490196168422698975e-01 1.000000000000000000e+00 -3.529411852359771729e-01 3.529411852359771729e-01 3.529411852359771729e-01 1.000000000000000000e+00 -3.568627536296844482e-01 3.568627536296844482e-01 3.568627536296844482e-01 1.000000000000000000e+00 -3.607843220233917236e-01 3.607843220233917236e-01 3.607843220233917236e-01 1.000000000000000000e+00 -3.647058904170989990e-01 3.647058904170989990e-01 3.647058904170989990e-01 1.000000000000000000e+00 -3.686274588108062744e-01 3.686274588108062744e-01 3.686274588108062744e-01 1.000000000000000000e+00 -3.725490272045135498e-01 3.725490272045135498e-01 3.725490272045135498e-01 1.000000000000000000e+00 -3.764705955982208252e-01 3.764705955982208252e-01 3.764705955982208252e-01 1.000000000000000000e+00 -3.803921639919281006e-01 3.803921639919281006e-01 3.803921639919281006e-01 1.000000000000000000e+00 -3.843137323856353760e-01 3.843137323856353760e-01 3.843137323856353760e-01 1.000000000000000000e+00 -3.882353007793426514e-01 3.882353007793426514e-01 3.882353007793426514e-01 1.000000000000000000e+00 -3.921568691730499268e-01 3.921568691730499268e-01 3.921568691730499268e-01 1.000000000000000000e+00 -3.960784375667572021e-01 3.960784375667572021e-01 3.960784375667572021e-01 1.000000000000000000e+00 -4.000000059604644775e-01 4.000000059604644775e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.039215743541717529e-01 4.039215743541717529e-01 4.039215743541717529e-01 1.000000000000000000e+00 -4.078431427478790283e-01 4.078431427478790283e-01 4.078431427478790283e-01 1.000000000000000000e+00 -4.117647111415863037e-01 4.117647111415863037e-01 4.117647111415863037e-01 1.000000000000000000e+00 -4.156862795352935791e-01 4.156862795352935791e-01 4.156862795352935791e-01 1.000000000000000000e+00 -4.196078479290008545e-01 4.196078479290008545e-01 4.196078479290008545e-01 1.000000000000000000e+00 -4.235294163227081299e-01 4.235294163227081299e-01 4.235294163227081299e-01 1.000000000000000000e+00 -4.274509847164154053e-01 4.274509847164154053e-01 4.274509847164154053e-01 1.000000000000000000e+00 -4.313725531101226807e-01 4.313725531101226807e-01 4.313725531101226807e-01 1.000000000000000000e+00 -4.352941215038299561e-01 4.352941215038299561e-01 4.352941215038299561e-01 1.000000000000000000e+00 -4.392156898975372314e-01 4.392156898975372314e-01 4.392156898975372314e-01 1.000000000000000000e+00 -4.431372582912445068e-01 4.431372582912445068e-01 4.431372582912445068e-01 1.000000000000000000e+00 -4.470588266849517822e-01 4.470588266849517822e-01 4.470588266849517822e-01 1.000000000000000000e+00 -4.509803950786590576e-01 4.509803950786590576e-01 4.509803950786590576e-01 1.000000000000000000e+00 -4.549019634723663330e-01 4.549019634723663330e-01 4.549019634723663330e-01 1.000000000000000000e+00 -4.588235318660736084e-01 4.588235318660736084e-01 4.588235318660736084e-01 1.000000000000000000e+00 -4.627451002597808838e-01 4.627451002597808838e-01 4.627451002597808838e-01 1.000000000000000000e+00 -4.666666686534881592e-01 4.666666686534881592e-01 4.666666686534881592e-01 1.000000000000000000e+00 -4.705882370471954346e-01 4.705882370471954346e-01 4.705882370471954346e-01 1.000000000000000000e+00 -4.745098054409027100e-01 4.745098054409027100e-01 4.745098054409027100e-01 1.000000000000000000e+00 -4.784313738346099854e-01 4.784313738346099854e-01 4.784313738346099854e-01 1.000000000000000000e+00 -4.823529422283172607e-01 4.823529422283172607e-01 4.823529422283172607e-01 1.000000000000000000e+00 -4.862745106220245361e-01 4.862745106220245361e-01 4.862745106220245361e-01 1.000000000000000000e+00 -4.901960790157318115e-01 4.901960790157318115e-01 4.901960790157318115e-01 1.000000000000000000e+00 -4.941176474094390869e-01 4.941176474094390869e-01 4.941176474094390869e-01 1.000000000000000000e+00 -4.980392158031463623e-01 4.980392158031463623e-01 4.980392158031463623e-01 1.000000000000000000e+00 -5.019608139991760254e-01 5.019608139991760254e-01 5.019608139991760254e-01 1.000000000000000000e+00 -5.058823823928833008e-01 5.058823823928833008e-01 5.058823823928833008e-01 1.000000000000000000e+00 -5.098039507865905762e-01 5.098039507865905762e-01 5.098039507865905762e-01 1.000000000000000000e+00 -5.137255191802978516e-01 5.137255191802978516e-01 5.137255191802978516e-01 1.000000000000000000e+00 -5.176470875740051270e-01 5.176470875740051270e-01 5.176470875740051270e-01 1.000000000000000000e+00 -5.215686559677124023e-01 5.215686559677124023e-01 5.215686559677124023e-01 1.000000000000000000e+00 -5.254902243614196777e-01 5.254902243614196777e-01 5.254902243614196777e-01 1.000000000000000000e+00 -5.294117927551269531e-01 5.294117927551269531e-01 5.294117927551269531e-01 1.000000000000000000e+00 -5.333333611488342285e-01 5.333333611488342285e-01 5.333333611488342285e-01 1.000000000000000000e+00 -5.372549295425415039e-01 5.372549295425415039e-01 5.372549295425415039e-01 1.000000000000000000e+00 -5.411764979362487793e-01 5.411764979362487793e-01 5.411764979362487793e-01 1.000000000000000000e+00 -5.450980663299560547e-01 5.450980663299560547e-01 5.450980663299560547e-01 1.000000000000000000e+00 -5.490196347236633301e-01 5.490196347236633301e-01 5.490196347236633301e-01 1.000000000000000000e+00 -5.529412031173706055e-01 5.529412031173706055e-01 5.529412031173706055e-01 1.000000000000000000e+00 -5.568627715110778809e-01 5.568627715110778809e-01 5.568627715110778809e-01 1.000000000000000000e+00 -5.607843399047851562e-01 5.607843399047851562e-01 5.607843399047851562e-01 1.000000000000000000e+00 -5.647059082984924316e-01 5.647059082984924316e-01 5.647059082984924316e-01 1.000000000000000000e+00 -5.686274766921997070e-01 5.686274766921997070e-01 5.686274766921997070e-01 1.000000000000000000e+00 -5.725490450859069824e-01 5.725490450859069824e-01 5.725490450859069824e-01 1.000000000000000000e+00 -5.764706134796142578e-01 5.764706134796142578e-01 5.764706134796142578e-01 1.000000000000000000e+00 -5.803921818733215332e-01 5.803921818733215332e-01 5.803921818733215332e-01 1.000000000000000000e+00 -5.843137502670288086e-01 5.843137502670288086e-01 5.843137502670288086e-01 1.000000000000000000e+00 -5.882353186607360840e-01 5.882353186607360840e-01 5.882353186607360840e-01 1.000000000000000000e+00 -5.921568870544433594e-01 5.921568870544433594e-01 5.921568870544433594e-01 1.000000000000000000e+00 -5.960784554481506348e-01 5.960784554481506348e-01 5.960784554481506348e-01 1.000000000000000000e+00 -6.000000238418579102e-01 6.000000238418579102e-01 6.000000238418579102e-01 1.000000000000000000e+00 -6.039215922355651855e-01 6.039215922355651855e-01 6.039215922355651855e-01 1.000000000000000000e+00 -6.078431606292724609e-01 6.078431606292724609e-01 6.078431606292724609e-01 1.000000000000000000e+00 -6.117647290229797363e-01 6.117647290229797363e-01 6.117647290229797363e-01 1.000000000000000000e+00 -6.156862974166870117e-01 6.156862974166870117e-01 6.156862974166870117e-01 1.000000000000000000e+00 -6.196078658103942871e-01 6.196078658103942871e-01 6.196078658103942871e-01 1.000000000000000000e+00 -6.235294342041015625e-01 6.235294342041015625e-01 6.235294342041015625e-01 1.000000000000000000e+00 -6.274510025978088379e-01 6.274510025978088379e-01 6.274510025978088379e-01 1.000000000000000000e+00 -6.313725709915161133e-01 6.313725709915161133e-01 6.313725709915161133e-01 1.000000000000000000e+00 -6.352941393852233887e-01 6.352941393852233887e-01 6.352941393852233887e-01 1.000000000000000000e+00 -6.392157077789306641e-01 6.392157077789306641e-01 6.392157077789306641e-01 1.000000000000000000e+00 -6.431372761726379395e-01 6.431372761726379395e-01 6.431372761726379395e-01 1.000000000000000000e+00 -6.470588445663452148e-01 6.470588445663452148e-01 6.470588445663452148e-01 1.000000000000000000e+00 -6.509804129600524902e-01 6.509804129600524902e-01 6.509804129600524902e-01 1.000000000000000000e+00 -6.549019813537597656e-01 6.549019813537597656e-01 6.549019813537597656e-01 1.000000000000000000e+00 -6.588235497474670410e-01 6.588235497474670410e-01 6.588235497474670410e-01 1.000000000000000000e+00 -6.627451181411743164e-01 6.627451181411743164e-01 6.627451181411743164e-01 1.000000000000000000e+00 -6.666666865348815918e-01 6.666666865348815918e-01 6.666666865348815918e-01 1.000000000000000000e+00 -6.705882549285888672e-01 6.705882549285888672e-01 6.705882549285888672e-01 1.000000000000000000e+00 -6.745098233222961426e-01 6.745098233222961426e-01 6.745098233222961426e-01 1.000000000000000000e+00 -6.784313917160034180e-01 6.784313917160034180e-01 6.784313917160034180e-01 1.000000000000000000e+00 -6.823529601097106934e-01 6.823529601097106934e-01 6.823529601097106934e-01 1.000000000000000000e+00 -6.862745285034179688e-01 6.862745285034179688e-01 6.862745285034179688e-01 1.000000000000000000e+00 -6.901960968971252441e-01 6.901960968971252441e-01 6.901960968971252441e-01 1.000000000000000000e+00 -6.941176652908325195e-01 6.941176652908325195e-01 6.941176652908325195e-01 1.000000000000000000e+00 -6.980392336845397949e-01 6.980392336845397949e-01 6.980392336845397949e-01 1.000000000000000000e+00 -7.019608020782470703e-01 7.019608020782470703e-01 7.019608020782470703e-01 1.000000000000000000e+00 -7.058823704719543457e-01 7.058823704719543457e-01 7.058823704719543457e-01 1.000000000000000000e+00 -7.098039388656616211e-01 7.098039388656616211e-01 7.098039388656616211e-01 1.000000000000000000e+00 -7.137255072593688965e-01 7.137255072593688965e-01 7.137255072593688965e-01 1.000000000000000000e+00 -7.176470756530761719e-01 7.176470756530761719e-01 7.176470756530761719e-01 1.000000000000000000e+00 -7.215686440467834473e-01 7.215686440467834473e-01 7.215686440467834473e-01 1.000000000000000000e+00 -7.254902124404907227e-01 7.254902124404907227e-01 7.254902124404907227e-01 1.000000000000000000e+00 -7.294117808341979980e-01 7.294117808341979980e-01 7.294117808341979980e-01 1.000000000000000000e+00 -7.333333492279052734e-01 7.333333492279052734e-01 7.333333492279052734e-01 1.000000000000000000e+00 -7.372549176216125488e-01 7.372549176216125488e-01 7.372549176216125488e-01 1.000000000000000000e+00 -7.411764860153198242e-01 7.411764860153198242e-01 7.411764860153198242e-01 1.000000000000000000e+00 -7.450980544090270996e-01 7.450980544090270996e-01 7.450980544090270996e-01 1.000000000000000000e+00 -7.490196228027343750e-01 7.490196228027343750e-01 7.490196228027343750e-01 1.000000000000000000e+00 -7.529411911964416504e-01 7.529411911964416504e-01 7.529411911964416504e-01 1.000000000000000000e+00 -7.568627595901489258e-01 7.568627595901489258e-01 7.568627595901489258e-01 1.000000000000000000e+00 -7.607843279838562012e-01 7.607843279838562012e-01 7.607843279838562012e-01 1.000000000000000000e+00 -7.647058963775634766e-01 7.647058963775634766e-01 7.647058963775634766e-01 1.000000000000000000e+00 -7.686274647712707520e-01 7.686274647712707520e-01 7.686274647712707520e-01 1.000000000000000000e+00 -7.725490331649780273e-01 7.725490331649780273e-01 7.725490331649780273e-01 1.000000000000000000e+00 -7.764706015586853027e-01 7.764706015586853027e-01 7.764706015586853027e-01 1.000000000000000000e+00 -7.803921699523925781e-01 7.803921699523925781e-01 7.803921699523925781e-01 1.000000000000000000e+00 -7.843137383460998535e-01 7.843137383460998535e-01 7.843137383460998535e-01 1.000000000000000000e+00 -7.882353067398071289e-01 7.882353067398071289e-01 7.882353067398071289e-01 1.000000000000000000e+00 -7.921568751335144043e-01 7.921568751335144043e-01 7.921568751335144043e-01 1.000000000000000000e+00 -7.960784435272216797e-01 7.960784435272216797e-01 7.960784435272216797e-01 1.000000000000000000e+00 -8.000000119209289551e-01 8.000000119209289551e-01 8.000000119209289551e-01 1.000000000000000000e+00 -8.039215803146362305e-01 8.039215803146362305e-01 8.039215803146362305e-01 1.000000000000000000e+00 -8.078431487083435059e-01 8.078431487083435059e-01 8.078431487083435059e-01 1.000000000000000000e+00 -8.117647171020507812e-01 8.117647171020507812e-01 8.117647171020507812e-01 1.000000000000000000e+00 -8.156862854957580566e-01 8.156862854957580566e-01 8.156862854957580566e-01 1.000000000000000000e+00 -8.196078538894653320e-01 8.196078538894653320e-01 8.196078538894653320e-01 1.000000000000000000e+00 -8.235294222831726074e-01 8.235294222831726074e-01 8.235294222831726074e-01 1.000000000000000000e+00 -8.274509906768798828e-01 8.274509906768798828e-01 8.274509906768798828e-01 1.000000000000000000e+00 -8.313725590705871582e-01 8.313725590705871582e-01 8.313725590705871582e-01 1.000000000000000000e+00 -8.352941274642944336e-01 8.352941274642944336e-01 8.352941274642944336e-01 1.000000000000000000e+00 -8.392156958580017090e-01 8.392156958580017090e-01 8.392156958580017090e-01 1.000000000000000000e+00 -8.431372642517089844e-01 8.431372642517089844e-01 8.431372642517089844e-01 1.000000000000000000e+00 -8.470588326454162598e-01 8.470588326454162598e-01 8.470588326454162598e-01 1.000000000000000000e+00 -8.509804010391235352e-01 8.509804010391235352e-01 8.509804010391235352e-01 1.000000000000000000e+00 -8.549019694328308105e-01 8.549019694328308105e-01 8.549019694328308105e-01 1.000000000000000000e+00 -8.588235378265380859e-01 8.588235378265380859e-01 8.588235378265380859e-01 1.000000000000000000e+00 -8.627451062202453613e-01 8.627451062202453613e-01 8.627451062202453613e-01 1.000000000000000000e+00 -8.666666746139526367e-01 8.666666746139526367e-01 8.666666746139526367e-01 1.000000000000000000e+00 -8.705882430076599121e-01 8.705882430076599121e-01 8.705882430076599121e-01 1.000000000000000000e+00 -8.745098114013671875e-01 8.745098114013671875e-01 8.745098114013671875e-01 1.000000000000000000e+00 -8.784313797950744629e-01 8.784313797950744629e-01 8.784313797950744629e-01 1.000000000000000000e+00 -8.823529481887817383e-01 8.823529481887817383e-01 8.823529481887817383e-01 1.000000000000000000e+00 -8.862745165824890137e-01 8.862745165824890137e-01 8.862745165824890137e-01 1.000000000000000000e+00 -8.901960849761962891e-01 8.901960849761962891e-01 8.901960849761962891e-01 1.000000000000000000e+00 -8.941176533699035645e-01 8.941176533699035645e-01 8.941176533699035645e-01 1.000000000000000000e+00 -8.980392217636108398e-01 8.980392217636108398e-01 8.980392217636108398e-01 1.000000000000000000e+00 -9.019607901573181152e-01 9.019607901573181152e-01 9.019607901573181152e-01 1.000000000000000000e+00 -9.058823585510253906e-01 9.058823585510253906e-01 9.058823585510253906e-01 1.000000000000000000e+00 -9.098039269447326660e-01 9.098039269447326660e-01 9.098039269447326660e-01 1.000000000000000000e+00 -9.137254953384399414e-01 9.137254953384399414e-01 9.137254953384399414e-01 1.000000000000000000e+00 -9.176470637321472168e-01 9.176470637321472168e-01 9.176470637321472168e-01 1.000000000000000000e+00 -9.215686321258544922e-01 9.215686321258544922e-01 9.215686321258544922e-01 1.000000000000000000e+00 -9.254902005195617676e-01 9.254902005195617676e-01 9.254902005195617676e-01 1.000000000000000000e+00 -9.294117689132690430e-01 9.294117689132690430e-01 9.294117689132690430e-01 1.000000000000000000e+00 -9.333333373069763184e-01 9.333333373069763184e-01 9.333333373069763184e-01 1.000000000000000000e+00 -9.372549057006835938e-01 9.372549057006835938e-01 9.372549057006835938e-01 1.000000000000000000e+00 -9.411764740943908691e-01 9.411764740943908691e-01 9.411764740943908691e-01 1.000000000000000000e+00 -9.450980424880981445e-01 9.450980424880981445e-01 9.450980424880981445e-01 1.000000000000000000e+00 -9.490196108818054199e-01 9.490196108818054199e-01 9.490196108818054199e-01 1.000000000000000000e+00 -9.529411792755126953e-01 9.529411792755126953e-01 9.529411792755126953e-01 1.000000000000000000e+00 -9.568627476692199707e-01 9.568627476692199707e-01 9.568627476692199707e-01 1.000000000000000000e+00 -9.607843160629272461e-01 9.607843160629272461e-01 9.607843160629272461e-01 1.000000000000000000e+00 -9.647058844566345215e-01 9.647058844566345215e-01 9.647058844566345215e-01 1.000000000000000000e+00 -9.686274528503417969e-01 9.686274528503417969e-01 9.686274528503417969e-01 1.000000000000000000e+00 -9.725490212440490723e-01 9.725490212440490723e-01 9.725490212440490723e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.764705896377563477e-01 9.764705896377563477e-01 1.000000000000000000e+00 -9.803921580314636230e-01 9.803921580314636230e-01 9.803921580314636230e-01 1.000000000000000000e+00 -9.843137264251708984e-01 9.843137264251708984e-01 9.843137264251708984e-01 1.000000000000000000e+00 -9.882352948188781738e-01 9.882352948188781738e-01 9.882352948188781738e-01 1.000000000000000000e+00 -9.921568632125854492e-01 9.921568632125854492e-01 9.921568632125854492e-01 1.000000000000000000e+00 -9.960784316062927246e-01 9.960784316062927246e-01 9.960784316062927246e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/hot b/fastplotlib/utils/colormaps/hot deleted file mode 100644 index a85a40219..000000000 --- a/fastplotlib/utils/colormaps/hot +++ /dev/null @@ -1,256 +0,0 @@ -4.160000011324882507e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.189484357833862305e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.218968704342842102e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.248453050851821899e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.277937769889831543e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.307421743869781494e-02 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.033690646290779114e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.136639118194580078e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.239587515592575073e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.342535912990570068e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.445484459400177002e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.548432856798171997e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.651381254196166992e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.754329800605773926e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.857278198003768921e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.960226595401763916e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.063174992799758911e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.166123539209365845e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.269071936607360840e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.372020334005355835e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.474968880414962769e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.577917277812957764e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.680865824222564697e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.783814072608947754e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.886762619018554688e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.989710867404937744e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.092659413814544678e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.195607960224151611e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.298556208610534668e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.401504755020141602e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.504453301429748535e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.607401549816131592e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.710350096225738525e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.813298642635345459e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.916246891021728516e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.019195437431335449e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.122143983840942383e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.225092232227325439e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.328040778636932373e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.430989325046539307e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.533937573432922363e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.636886119842529297e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.739834368228912354e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.842782914638519287e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.945731461048126221e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.048679709434509277e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.151628255844116211e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.254576802253723145e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.357525348663330078e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.460473299026489258e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.563421845436096191e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.666370391845703125e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.769318938255310059e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.872267484664916992e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.975216031074523926e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.078163981437683105e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.181112527847290039e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.284061074256896973e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.387009620666503906e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.489958167076110840e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.592906713485717773e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.695854663848876953e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.798803210258483887e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.901751756668090820e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.004700303077697754e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.107648849487304688e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.210596799850463867e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.313545346260070801e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.416493892669677734e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.519442439079284668e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.622390985488891602e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.725339531898498535e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.828287482261657715e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.931236028671264648e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.034184575080871582e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.137133121490478516e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.240081667900085449e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.343030214309692383e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.445978164672851562e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.548926711082458496e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.651875257492065430e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.754823803901672363e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.857772350311279297e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.960720300674438477e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.063668847084045410e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.166617393493652344e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.269565939903259277e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.372514486312866211e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.475463032722473145e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.578410983085632324e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.681359529495239258e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.784308075904846191e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.887256622314453125e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.990205168724060059e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.314668364822864532e-03 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.960876956582069397e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.990286983549594879e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.019697010517120361e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.049107223749160767e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.078517436981201172e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.107927650213241577e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.137337863445281982e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.166747331619262695e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.019615754485130310e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.122556775808334351e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.225497797131538391e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.328438818454742432e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.431379765272140503e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.534320861101150513e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.637261807918548584e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.740202903747558594e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.843143850564956665e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.946084797382354736e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.049025893211364746e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.151966840028762817e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.254907935857772827e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.357848882675170898e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.460789829492568970e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.563730776309967041e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.666671872138977051e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.769612967967987061e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.872554063796997070e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.975494861602783203e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.078435957431793213e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.181377053260803223e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.284317851066589355e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.387258946895599365e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.490200042724609375e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.593141138553619385e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.696081936359405518e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.799023032188415527e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.901964128017425537e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.004904925823211670e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.107846021652221680e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.210787117481231689e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.313727915287017822e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.416669011116027832e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.519610106945037842e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.622551202774047852e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.725492000579833984e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.828433096408843994e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.931374192237854004e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.034314990043640137e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.137256383895874023e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.240197181701660156e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.343137979507446289e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.446079373359680176e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.549020171165466309e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.651960968971252441e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.754902362823486328e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.857843160629272461e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.960783958435058594e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.063725352287292480e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.166666150093078613e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.269606947898864746e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.372548341751098633e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.475489139556884766e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.578430533409118652e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.681371331214904785e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.784312129020690918e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.887253522872924805e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.990194320678710938e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.093135118484497070e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.196076512336730957e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.299017310142517090e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.401958107948303223e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.504899501800537109e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.607840299606323242e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.710781097412109375e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.813722491264343262e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.916663289070129395e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.019604682922363281e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.122545480728149414e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.225486278533935547e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.328427672386169434e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.431368470191955566e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.534309267997741699e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.637250661849975586e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.740191459655761719e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.843132257461547852e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.946073651313781738e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.049014449119567871e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.151955246925354004e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.254896640777587891e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.357837438583374023e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.460778236389160156e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.563719630241394043e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.666660428047180176e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.769601821899414062e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.872542619705200195e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.975483417510986328e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.176371797919273376e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 2.720491029322147369e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.264610260725021362e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.808729305863380432e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.352848351001739502e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.896967768669128418e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.044108718633651733e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.198520585894584656e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.352932602167129517e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.507344394922256470e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.661756336688995361e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.816168278455734253e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.970580220222473145e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 2.124992161989212036e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 2.279404103755950928e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 2.433815896511077881e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 2.588227987289428711e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 2.742639780044555664e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 2.897051572799682617e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 3.051463663578033447e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 3.205875456333160400e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 3.360287547111511230e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 3.514699339866638184e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 3.669111430644989014e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 3.823523223400115967e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 3.977935016155242920e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.132347106933593750e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.286758899688720703e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.441170990467071533e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.595582783222198486e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.749994874000549316e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.904406666755676270e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.058818459510803223e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.213230252265930176e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.367642641067504883e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.522054433822631836e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.676466226577758789e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.830878019332885742e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 5.985289812088012695e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.139702200889587402e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.294113993644714355e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.448525786399841309e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.602937579154968262e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.757349967956542969e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 6.911761760711669922e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.066173553466796875e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.220585346221923828e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.374997138977050781e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.529409527778625488e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.683821320533752441e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.838233113288879395e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 7.992644906044006348e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.147056698799133301e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.301469087600708008e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.455880880355834961e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.610292673110961914e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.764704465866088867e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 8.919116854667663574e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.073528647422790527e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.227940440177917480e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.382352232933044434e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.536764025688171387e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.691176414489746094e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 9.845588207244873047e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/hsv b/fastplotlib/utils/colormaps/hsv deleted file mode 100644 index 126d76f39..000000000 --- a/fastplotlib/utils/colormaps/hsv +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.316178753972053528e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.632357507944107056e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.948536634445190430e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.264715015888214111e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.158089414238929749e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.389707326889038086e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.621325165033340454e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.852943003177642822e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.084560841321945190e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.316178828477859497e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.547796666622161865e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.779414653778076172e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.011032342910766602e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.242650330066680908e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.474268317222595215e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.705886006355285645e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.937503993511199951e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.169121682643890381e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.400739669799804688e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.632357656955718994e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.863975346088409424e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.095593333244323730e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.327211022377014160e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.558829307556152344e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.790446996688842773e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.022064685821533203e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.253682971000671387e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.485300660133361816e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.716918349266052246e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.948536634445190430e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.180154323577880859e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.411772012710571289e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.643389701843261719e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.875007987022399902e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.106625676155090332e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.338243365287780762e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.569861650466918945e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.801479339599609375e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.033097028732299805e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.264715313911437988e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.959555864334106445e-01 9.455888867378234863e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.882349967956542969e-01 9.610300660133361816e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.805143475532531738e-01 9.764712452888488770e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.727937579154968262e-01 9.919124245643615723e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.577195644378662109e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.345577359199523926e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.113959670066833496e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.882341980934143066e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.650723695755004883e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.419106006622314453e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.187488317489624023e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.955870032310485840e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.724252343177795410e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.492634654045104980e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.261016964912414551e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.029398679733276367e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.797780990600585938e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.566163301467895508e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.334545016288757324e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.102927327156066895e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.871309638023376465e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.639691352844238281e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.408073663711547852e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.176455974578857422e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.944837987422943115e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.713220000267028809e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.481602013111114502e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.249984323978424072e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.018366336822509766e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.786748349666595459e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.555130660533905029e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.323512673377990723e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.091894984245300293e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.860276997089385986e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.628659009933471680e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.397041171789169312e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.165423333644866943e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.933805495500564575e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.702187657356262207e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.470569670200347900e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.238951832056045532e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.007333919405937195e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.757160812616348267e-02 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.440982058644294739e-02 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.124934434890747070e-02 1.000000000000000000e+00 1.312501353822881356e-06 1.000000000000000000e+00 -2.352874726057052612e-02 1.000000000000000000e+00 1.544250454753637314e-02 1.000000000000000000e+00 -1.580815203487873077e-02 1.000000000000000000e+00 3.088369593024253845e-02 1.000000000000000000e+00 -8.087555877864360809e-03 1.000000000000000000e+00 4.632488638162612915e-02 1.000000000000000000e+00 -3.669599245768040419e-04 1.000000000000000000e+00 6.176608055830001831e-02 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.456076681613922119e-02 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 1.077224090695381165e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 1.308840513229370117e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 1.540457010269165039e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 1.772073358297348022e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.003689855337142944e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.235306203365325928e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.466922700405120850e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.698538899421691895e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 2.930155396461486816e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 3.161771893501281738e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 3.393388390541076660e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 3.625004589557647705e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 3.856621086597442627e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 4.088237583637237549e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 4.319854080677032471e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 4.551470279693603516e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 4.783086776733398438e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.014703273773193359e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.246319770812988281e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.477936267852783203e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.709552764892578125e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.941168665885925293e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 6.172785162925720215e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 6.404401659965515137e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 6.636018157005310059e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 6.867634654045104980e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 7.099251151084899902e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 7.330867648124694824e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 7.562484145164489746e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 7.794100046157836914e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.025716543197631836e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.257333040237426758e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.488949537277221680e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.720566034317016602e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 8.952182531356811523e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 9.183799028396606445e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 9.415414929389953613e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 9.647031426429748535e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 9.878647923469543457e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.889734983444213867e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.658116698265075684e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.426499009132385254e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.194881319999694824e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.963263034820556641e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.731645345687866211e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.500027656555175781e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.268409967422485352e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.036791682243347168e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.805173993110656738e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.573556303977966309e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.341938018798828125e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.110320329666137695e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.878702640533447266e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.647084355354309082e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.415466666221618652e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.183848977088928223e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.952230691909790039e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.720613002777099609e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.488995313644409180e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.257377028465270996e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.025759339332580566e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.794141650199890137e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.562523663043975830e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.330905675888061523e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.099287986755371094e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.867669999599456787e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.636052012443542480e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.404434323310852051e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.172816336154937744e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.941198348999023438e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.709580659866333008e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.477962672710418701e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.246344834566116333e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.014726996421813965e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.783109009265899658e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.551491171121597290e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.319873332977294922e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.088255420327186584e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.566375821828842163e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.250196695327758789e-02 1.000000000000000000e+00 1.000000000000000000e+00 -7.719939574599266052e-03 4.706012085080146790e-02 1.000000000000000000e+00 1.000000000000000000e+00 -1.544053573161363602e-02 3.161893039941787720e-02 1.000000000000000000e+00 1.000000000000000000e+00 -2.316113188862800598e-02 1.617773622274398804e-02 1.000000000000000000e+00 1.000000000000000000e+00 -3.088172711431980133e-02 7.365448400378227234e-04 1.000000000000000000e+00 1.000000000000000000e+00 -5.330697074532508850e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.646875828504562378e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.963054955005645752e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.227923333644866943e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.459541171789169312e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.691159158945083618e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.922776997089385986e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.154394835233688354e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.386012673377990723e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.617630660533905029e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.849248349666595459e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.080866336822509766e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.312484323978424072e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.544102013111114502e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.775720000267028809e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.007337987422943115e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.238955676555633545e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.470573663711547852e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.702191650867462158e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.933809340000152588e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.165427327156066895e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.397045016288757324e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.628663301467895508e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.860280990600585938e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -6.091898679733276367e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -6.323516964912414551e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -6.555134654045104980e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -6.786752343177795410e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.018370032310485840e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.249988317489624023e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.481606006622314453e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.713223695755004883e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -7.944841980934143066e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -8.176459670066833496e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -8.408077359199523926e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -8.639695644378662109e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -8.871313333511352539e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.102931022644042969e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.334549307823181152e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.566166996955871582e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -9.724261760711669922e-01 0.000000000000000000e+00 9.926476478576660156e-01 1.000000000000000000e+00 -9.801467657089233398e-01 0.000000000000000000e+00 9.772064685821533203e-01 1.000000000000000000e+00 -9.878673553466796875e-01 0.000000000000000000e+00 9.617652893066406250e-01 1.000000000000000000e+00 -9.955879449844360352e-01 0.000000000000000000e+00 9.463241100311279297e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 9.275743365287780762e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 9.044125676155090332e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 8.812507987022399902e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 8.580889701843261719e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 8.349272012710571289e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 8.117654323577880859e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 7.886036634445190430e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 7.654418349266052246e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 7.422800660133361816e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 7.191182971000671387e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 6.959564685821533203e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 6.727946996688842773e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 6.496329307556152344e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 6.264711022377014160e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 6.033093333244323730e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 5.801475644111633301e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 5.569857358932495117e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 5.338239669799804688e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 5.106621980667114258e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 4.875003993511199951e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 4.643386006355285645e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 4.411768317222595215e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 4.180150330066680908e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 3.948532342910766602e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 3.716914653778076172e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 3.485296666622161865e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 3.253678679466247559e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 3.022060990333557129e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.790443003177642822e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.558825016021728516e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.327207326889038086e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.095589339733123779e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.863971501588821411e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.632353663444519043e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.400735825300216675e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.169117912650108337e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 9.375000000000000000e-02 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/inferno b/fastplotlib/utils/colormaps/inferno deleted file mode 100644 index dc84e7b0e..000000000 --- a/fastplotlib/utils/colormaps/inferno +++ /dev/null @@ -1,256 +0,0 @@ -1.461999956518411636e-03 4.659999976865947247e-04 1.386599987745285034e-02 1.000000000000000000e+00 -2.267000032588839531e-03 1.270000007934868336e-03 1.857000030577182770e-02 1.000000000000000000e+00 -3.298999974504113197e-03 2.248999895527958870e-03 2.423899993300437927e-02 1.000000000000000000e+00 -4.546999931335449219e-03 3.391999984160065651e-03 3.090899996459484100e-02 1.000000000000000000e+00 -6.006000097841024399e-03 4.691999871283769608e-03 3.855799883604049683e-02 1.000000000000000000e+00 -7.675999775528907776e-03 6.136000156402587891e-03 4.683599993586540222e-02 1.000000000000000000e+00 -9.561000391840934753e-03 7.712999824434518814e-03 5.514299869537353516e-02 1.000000000000000000e+00 -1.166300009936094284e-02 9.417000226676464081e-03 6.345999985933303833e-02 1.000000000000000000e+00 -1.399500016123056412e-02 1.122500002384185791e-02 7.186199724674224854e-02 1.000000000000000000e+00 -1.656099967658519745e-02 1.313600037246942520e-02 8.028200268745422363e-02 1.000000000000000000e+00 -1.937299966812133789e-02 1.513299997895956039e-02 8.876699954271316528e-02 1.000000000000000000e+00 -2.244699932634830475e-02 1.719900034368038177e-02 9.732700139284133911e-02 1.000000000000000000e+00 -2.579299919307231903e-02 1.933100074529647827e-02 1.059300005435943604e-01 1.000000000000000000e+00 -2.943200059235095978e-02 2.150299958884716034e-02 1.146209985017776489e-01 1.000000000000000000e+00 -3.338500112295150757e-02 2.370199933648109436e-02 1.233970001339912415e-01 1.000000000000000000e+00 -3.766800090670585632e-02 2.592100016772747040e-02 1.322319954633712769e-01 1.000000000000000000e+00 -4.225299879908561707e-02 2.813900075852870941e-02 1.411409974098205566e-01 1.000000000000000000e+00 -4.691499844193458557e-02 3.032400086522102356e-02 1.501639932394027710e-01 1.000000000000000000e+00 -5.164400115609169006e-02 3.247400000691413879e-02 1.592539995908737183e-01 1.000000000000000000e+00 -5.644899979233741760e-02 3.456899896264076233e-02 1.684139966964721680e-01 1.000000000000000000e+00 -6.134000048041343689e-02 3.658999875187873840e-02 1.776420027017593384e-01 1.000000000000000000e+00 -6.633099913597106934e-02 3.850400075316429138e-02 1.869619935750961304e-01 1.000000000000000000e+00 -7.142899930477142334e-02 4.029399901628494263e-02 1.963540017604827881e-01 1.000000000000000000e+00 -7.663699984550476074e-02 4.190500080585479736e-02 2.057989984750747681e-01 1.000000000000000000e+00 -8.196199685335159302e-02 4.332799836993217468e-02 2.152889966964721680e-01 1.000000000000000000e+00 -8.741100132465362549e-02 4.455599933862686157e-02 2.248129993677139282e-01 1.000000000000000000e+00 -9.299000352621078491e-02 4.558299854397773743e-02 2.343579977750778198e-01 1.000000000000000000e+00 -9.870199859142303467e-02 4.640199989080429077e-02 2.439039945602416992e-01 1.000000000000000000e+00 -1.045510023832321167e-01 4.700800031423568726e-02 2.534300088882446289e-01 1.000000000000000000e+00 -1.105360016226768494e-01 4.739899933338165283e-02 2.629120051860809326e-01 1.000000000000000000e+00 -1.166559979319572449e-01 4.757399857044219971e-02 2.723209857940673828e-01 1.000000000000000000e+00 -1.229080036282539368e-01 4.753600060939788818e-02 2.816239893436431885e-01 1.000000000000000000e+00 -1.292849928140640259e-01 4.729299992322921753e-02 2.907879948616027832e-01 1.000000000000000000e+00 -1.357779949903488159e-01 4.685600101947784424e-02 2.997759878635406494e-01 1.000000000000000000e+00 -1.423780024051666260e-01 4.624199867248535156e-02 3.085530102252960205e-01 1.000000000000000000e+00 -1.490730047225952148e-01 4.546799883246421814e-02 3.170849978923797607e-01 1.000000000000000000e+00 -1.558499932289123535e-01 4.455899819731712341e-02 3.253380060195922852e-01 1.000000000000000000e+00 -1.626890003681182861e-01 4.355400055646896362e-02 3.332769870758056641e-01 1.000000000000000000e+00 -1.695750057697296143e-01 4.248899966478347778e-02 3.408739864826202393e-01 1.000000000000000000e+00 -1.764930039644241333e-01 4.140200093388557434e-02 3.481110036373138428e-01 1.000000000000000000e+00 -1.834290027618408203e-01 4.032900184392929077e-02 3.549709916114807129e-01 1.000000000000000000e+00 -1.903669983148574829e-01 3.930899873375892639e-02 3.614470064640045166e-01 1.000000000000000000e+00 -1.972970068454742432e-01 3.840000182390213013e-02 3.675349950790405273e-01 1.000000000000000000e+00 -2.042089998722076416e-01 3.763199970126152039e-02 3.732379972934722900e-01 1.000000000000000000e+00 -2.110950052738189697e-01 3.703000023961067200e-02 3.785629868507385254e-01 1.000000000000000000e+00 -2.179490029811859131e-01 3.661499917507171631e-02 3.835220038890838623e-01 1.000000000000000000e+00 -2.247630059719085693e-01 3.640500083565711975e-02 3.881289958953857422e-01 1.000000000000000000e+00 -2.315379977226257324e-01 3.640500083565711975e-02 3.923999965190887451e-01 1.000000000000000000e+00 -2.382729947566986084e-01 3.662100061774253845e-02 3.963530063629150391e-01 1.000000000000000000e+00 -2.449669986963272095e-01 3.705500066280364990e-02 4.000070095062255859e-01 1.000000000000000000e+00 -2.516199946403503418e-01 3.770500048995018005e-02 4.033780097961425781e-01 1.000000000000000000e+00 -2.582339942455291748e-01 3.857100009918212891e-02 4.064849913120269775e-01 1.000000000000000000e+00 -2.648099958896636963e-01 3.964700177311897278e-02 4.093450009822845459e-01 1.000000000000000000e+00 -2.713469862937927246e-01 4.092200100421905518e-02 4.119760096073150635e-01 1.000000000000000000e+00 -2.778500020503997803e-01 4.235300049185752869e-02 4.143919944763183594e-01 1.000000000000000000e+00 -2.843210101127624512e-01 4.393300041556358337e-02 4.166080057621002197e-01 1.000000000000000000e+00 -2.907629907131195068e-01 4.564400017261505127e-02 4.186370074748992920e-01 1.000000000000000000e+00 -2.971780002117156982e-01 4.746999964118003845e-02 4.204910099506378174e-01 1.000000000000000000e+00 -3.035680055618286133e-01 4.939600080251693726e-02 4.221819937229156494e-01 1.000000000000000000e+00 -3.099350035190582275e-01 5.140699818730354309e-02 4.237209856510162354e-01 1.000000000000000000e+00 -3.162820041179656982e-01 5.349000170826911926e-02 4.251160025596618652e-01 1.000000000000000000e+00 -3.226099908351898193e-01 5.563399940729141235e-02 4.263769984245300293e-01 1.000000000000000000e+00 -3.289209902286529541e-01 5.782699957489967346e-02 4.275110065937042236e-01 1.000000000000000000e+00 -3.352169990539550781e-01 6.005999818444252014e-02 4.285239875316619873e-01 1.000000000000000000e+00 -3.415000140666961670e-01 6.232500076293945312e-02 4.294250011444091797e-01 1.000000000000000000e+00 -3.477709889411926270e-01 6.461600214242935181e-02 4.302169978618621826e-01 1.000000000000000000e+00 -3.540320098400115967e-01 6.692499667406082153e-02 4.309059977531433105e-01 1.000000000000000000e+00 -3.602840006351470947e-01 6.924699991941452026e-02 4.314970076084136963e-01 1.000000000000000000e+00 -3.665289878845214844e-01 7.157900184392929077e-02 4.319939911365509033e-01 1.000000000000000000e+00 -3.727680146694183350e-01 7.391499727964401245e-02 4.323999881744384766e-01 1.000000000000000000e+00 -3.790009915828704834e-01 7.625299692153930664e-02 4.327189922332763672e-01 1.000000000000000000e+00 -3.852280080318450928e-01 7.859099656343460083e-02 4.329549968242645264e-01 1.000000000000000000e+00 -3.914529979228973389e-01 8.092699944972991943e-02 4.331089854240417480e-01 1.000000000000000000e+00 -3.976739943027496338e-01 8.325699716806411743e-02 4.331830143928527832e-01 1.000000000000000000e+00 -4.038940072059631348e-01 8.557999879121780396e-02 4.331789910793304443e-01 1.000000000000000000e+00 -4.101130068302154541e-01 8.789599686861038208e-02 4.330979883670806885e-01 1.000000000000000000e+00 -4.163309931755065918e-01 9.020300209522247314e-02 4.329429864883422852e-01 1.000000000000000000e+00 -4.225490093231201172e-01 9.250099956989288330e-02 4.327139854431152344e-01 1.000000000000000000e+00 -4.287680089473724365e-01 9.478999674320220947e-02 4.324119985103607178e-01 1.000000000000000000e+00 -4.349870085716247559e-01 9.706900268793106079e-02 4.320389926433563232e-01 1.000000000000000000e+00 -4.412069916725158691e-01 9.933800250291824341e-02 4.315940141677856445e-01 1.000000000000000000e+00 -4.474279880523681641e-01 1.015970036387443542e-01 4.310800135135650635e-01 1.000000000000000000e+00 -4.536510109901428223e-01 1.038480028510093689e-01 4.304980039596557617e-01 1.000000000000000000e+00 -4.598749876022338867e-01 1.060890033841133118e-01 4.298459887504577637e-01 1.000000000000000000e+00 -4.661000072956085205e-01 1.083220019936561584e-01 4.291250109672546387e-01 1.000000000000000000e+00 -4.723280072212219238e-01 1.105469986796379089e-01 4.283339977264404297e-01 1.000000000000000000e+00 -4.785580039024353027e-01 1.127640008926391602e-01 4.274750053882598877e-01 1.000000000000000000e+00 -4.847890138626098633e-01 1.149739995598793030e-01 4.265480041503906250e-01 1.000000000000000000e+00 -4.910219907760620117e-01 1.171789988875389099e-01 4.255520105361938477e-01 1.000000000000000000e+00 -4.972569942474365234e-01 1.193789988756179810e-01 4.244880080223083496e-01 1.000000000000000000e+00 -5.034930109977722168e-01 1.215749979019165039e-01 4.233559966087341309e-01 1.000000000000000000e+00 -5.097299814224243164e-01 1.237690001726150513e-01 4.221560060977935791e-01 1.000000000000000000e+00 -5.159670114517211914e-01 1.259600073099136353e-01 4.208869934082031250e-01 1.000000000000000000e+00 -5.222060084342956543e-01 1.281500011682510376e-01 4.195489883422851562e-01 1.000000000000000000e+00 -5.284439921379089355e-01 1.303409934043884277e-01 4.181419909000396729e-01 1.000000000000000000e+00 -5.346829891204833984e-01 1.325339972972869873e-01 4.166670143604278564e-01 1.000000000000000000e+00 -5.409200191497802734e-01 1.347289979457855225e-01 4.151229858398437500e-01 1.000000000000000000e+00 -5.471569895744323730e-01 1.369290053844451904e-01 4.135110080242156982e-01 1.000000000000000000e+00 -5.533919930458068848e-01 1.391340047121047974e-01 4.118289947509765625e-01 1.000000000000000000e+00 -5.596240162849426270e-01 1.413459926843643188e-01 4.100779891014099121e-01 1.000000000000000000e+00 -5.658540129661560059e-01 1.435669958591461182e-01 4.082579910755157471e-01 1.000000000000000000e+00 -5.720810294151306152e-01 1.457969993352890015e-01 4.063690006732940674e-01 1.000000000000000000e+00 -5.783039927482604980e-01 1.480389982461929321e-01 4.044109880924224854e-01 1.000000000000000000e+00 -5.845209956169128418e-01 1.502940058708190918e-01 4.023849964141845703e-01 1.000000000000000000e+00 -5.907340049743652344e-01 1.525630056858062744e-01 4.002900123596191406e-01 1.000000000000000000e+00 -5.969399809837341309e-01 1.548479944467544556e-01 3.981249928474426270e-01 1.000000000000000000e+00 -6.031389832496643066e-01 1.571509987115859985e-01 3.958910107612609863e-01 1.000000000000000000e+00 -6.093299984931945801e-01 1.594740003347396851e-01 3.935889899730682373e-01 1.000000000000000000e+00 -6.155130267143249512e-01 1.618169993162155151e-01 3.912189900875091553e-01 1.000000000000000000e+00 -6.216850280761718750e-01 1.641840040683746338e-01 3.887810111045837402e-01 1.000000000000000000e+00 -6.278470158576965332e-01 1.665749996900558472e-01 3.862760066986083984e-01 1.000000000000000000e+00 -6.339979767799377441e-01 1.689919978380203247e-01 3.837040066719055176e-01 1.000000000000000000e+00 -6.401349902153015137e-01 1.714379936456680298e-01 3.810650110244750977e-01 1.000000000000000000e+00 -6.462600231170654297e-01 1.739140003919601440e-01 3.783589899539947510e-01 1.000000000000000000e+00 -6.523690223693847656e-01 1.764210015535354614e-01 3.755860030651092529e-01 1.000000000000000000e+00 -6.584630012512207031e-01 1.789620071649551392e-01 3.727479875087738037e-01 1.000000000000000000e+00 -6.645399928092956543e-01 1.815389990806579590e-01 3.698459863662719727e-01 1.000000000000000000e+00 -6.705989837646484375e-01 1.841530054807662964e-01 3.668789863586425781e-01 1.000000000000000000e+00 -6.766380071640014648e-01 1.868070065975189209e-01 3.638490140438079834e-01 1.000000000000000000e+00 -6.826559901237487793e-01 1.895010024309158325e-01 3.607569932937622070e-01 1.000000000000000000e+00 -6.886529922485351562e-01 1.922390013933181763e-01 3.576030135154724121e-01 1.000000000000000000e+00 -6.946269869804382324e-01 1.950210034847259521e-01 3.543879985809326172e-01 1.000000000000000000e+00 -7.005760073661804199e-01 1.978510022163391113e-01 3.511129915714263916e-01 1.000000000000000000e+00 -7.064999938011169434e-01 2.007279992103576660e-01 3.477770090103149414e-01 1.000000000000000000e+00 -7.123960256576538086e-01 2.036560028791427612e-01 3.443830013275146484e-01 1.000000000000000000e+00 -7.182639837265014648e-01 2.066359966993331909e-01 3.409309983253479004e-01 1.000000000000000000e+00 -7.241029739379882812e-01 2.096700072288513184e-01 3.374240100383758545e-01 1.000000000000000000e+00 -7.299090027809143066e-01 2.127590030431747437e-01 3.338609933853149414e-01 1.000000000000000000e+00 -7.356830239295959473e-01 2.159059941768646240e-01 3.302449882030487061e-01 1.000000000000000000e+00 -7.414230108261108398e-01 2.191119939088821411e-01 3.265759944915771484e-01 1.000000000000000000e+00 -7.471269965171813965e-01 2.223780006170272827e-01 3.228560090065002441e-01 1.000000000000000000e+00 -7.527940273284912109e-01 2.257059961557388306e-01 3.190850019454956055e-01 1.000000000000000000e+00 -7.584220170974731445e-01 2.290969938039779663e-01 3.152660131454467773e-01 1.000000000000000000e+00 -7.640100121498107910e-01 2.325540035963058472e-01 3.113990128040313721e-01 1.000000000000000000e+00 -7.695559859275817871e-01 2.360769957304000854e-01 3.074850142002105713e-01 1.000000000000000000e+00 -7.750589847564697266e-01 2.396669983863830566e-01 3.035260140895843506e-01 1.000000000000000000e+00 -7.805169820785522461e-01 2.433270066976547241e-01 2.995229959487915039e-01 1.000000000000000000e+00 -7.859290242195129395e-01 2.470560073852539062e-01 2.954770028591156006e-01 1.000000000000000000e+00 -7.912930250167846680e-01 2.508560121059417725e-01 2.913900017738342285e-01 1.000000000000000000e+00 -7.966070175170898438e-01 2.547279894351959229e-01 2.872639894485473633e-01 1.000000000000000000e+00 -8.018710017204284668e-01 2.586739957332611084e-01 2.830989956855773926e-01 1.000000000000000000e+00 -8.070819973945617676e-01 2.626920044422149658e-01 2.788980007171630859e-01 1.000000000000000000e+00 -8.122389912605285645e-01 2.667860090732574463e-01 2.746610045433044434e-01 1.000000000000000000e+00 -8.173410296440124512e-01 2.709540128707885742e-01 2.703900039196014404e-01 1.000000000000000000e+00 -8.223860263824462891e-01 2.751969993114471436e-01 2.660849988460540771e-01 1.000000000000000000e+00 -8.273720145225524902e-01 2.795169949531555176e-01 2.617500126361846924e-01 1.000000000000000000e+00 -8.322989940643310547e-01 2.839129865169525146e-01 2.573829889297485352e-01 1.000000000000000000e+00 -8.371649980545043945e-01 2.883850038051605225e-01 2.529880106449127197e-01 1.000000000000000000e+00 -8.419690132141113281e-01 2.929329872131347656e-01 2.485640048980712891e-01 1.000000000000000000e+00 -8.467090129852294922e-01 2.975589931011199951e-01 2.441129982471466064e-01 1.000000000000000000e+00 -8.513839840888977051e-01 3.022600114345550537e-01 2.396360039710998535e-01 1.000000000000000000e+00 -8.559920191764831543e-01 3.070380091667175293e-01 2.351330071687698364e-01 1.000000000000000000e+00 -8.605329990386962891e-01 3.118920028209686279e-01 2.306060045957565308e-01 1.000000000000000000e+00 -8.650060296058654785e-01 3.168219923973083496e-01 2.260549962520599365e-01 1.000000000000000000e+00 -8.694090247154235840e-01 3.218269944190979004e-01 2.214819937944412231e-01 1.000000000000000000e+00 -8.737409710884094238e-01 3.269059956073760986e-01 2.168859988451004028e-01 1.000000000000000000e+00 -8.780009746551513672e-01 3.320600092411041260e-01 2.122679948806762695e-01 1.000000000000000000e+00 -8.821880221366882324e-01 3.372870087623596191e-01 2.076279968023300171e-01 1.000000000000000000e+00 -8.863019943237304688e-01 3.425860106945037842e-01 2.029680013656616211e-01 1.000000000000000000e+00 -8.903409838676452637e-01 3.479569852352142334e-01 1.982859969139099121e-01 1.000000000000000000e+00 -8.943049907684326172e-01 3.533990085124969482e-01 1.935839951038360596e-01 1.000000000000000000e+00 -8.981919884681701660e-01 3.589110076427459717e-01 1.888599991798400879e-01 1.000000000000000000e+00 -9.020029902458190918e-01 3.644919991493225098e-01 1.841160058975219727e-01 1.000000000000000000e+00 -9.057350158691406250e-01 3.701399862766265869e-01 1.793500036001205444e-01 1.000000000000000000e+00 -9.093899726867675781e-01 3.758560121059417725e-01 1.745630055665969849e-01 1.000000000000000000e+00 -9.129660129547119141e-01 3.816359937191009521e-01 1.697549968957901001e-01 1.000000000000000000e+00 -9.164620041847229004e-01 3.874810039997100830e-01 1.649239957332611084e-01 1.000000000000000000e+00 -9.198790192604064941e-01 3.933889865875244141e-01 1.600700020790100098e-01 1.000000000000000000e+00 -9.232149720191955566e-01 3.993589878082275391e-01 1.551930010318756104e-01 1.000000000000000000e+00 -9.264699816703796387e-01 4.053890109062194824e-01 1.502919942140579224e-01 1.000000000000000000e+00 -9.296439886093139648e-01 4.114789962768554688e-01 1.453669965267181396e-01 1.000000000000000000e+00 -9.327369928359985352e-01 4.176270067691802979e-01 1.404169946908950806e-01 1.000000000000000000e+00 -9.357470273971557617e-01 4.238309860229492188e-01 1.354400068521499634e-01 1.000000000000000000e+00 -9.386749863624572754e-01 4.300909936428070068e-01 1.304379999637603760e-01 1.000000000000000000e+00 -9.415209889411926270e-01 4.364050030708312988e-01 1.254090070724487305e-01 1.000000000000000000e+00 -9.442849755287170410e-01 4.427720010280609131e-01 1.203539967536926270e-01 1.000000000000000000e+00 -9.469649791717529297e-01 4.491910040378570557e-01 1.152720004320144653e-01 1.000000000000000000e+00 -9.495620131492614746e-01 4.556599855422973633e-01 1.101640015840530396e-01 1.000000000000000000e+00 -9.520750045776367188e-01 4.621779918670654297e-01 1.050309985876083374e-01 1.000000000000000000e+00 -9.545059800148010254e-01 4.687440097332000732e-01 9.987399727106094360e-02 1.000000000000000000e+00 -9.568520188331604004e-01 4.753560125827789307e-01 9.469500184059143066e-02 1.000000000000000000e+00 -9.591140151023864746e-01 4.820140004158020020e-01 8.949899673461914062e-02 1.000000000000000000e+00 -9.612929821014404297e-01 4.887160062789916992e-01 8.428899943828582764e-02 1.000000000000000000e+00 -9.633870124816894531e-01 4.954620003700256348e-01 7.907299697399139404e-02 1.000000000000000000e+00 -9.653970003128051758e-01 5.022490024566650391e-01 7.385899871587753296e-02 1.000000000000000000e+00 -9.673219919204711914e-01 5.090780258178710938e-01 6.865900009870529175e-02 1.000000000000000000e+00 -9.691630005836486816e-01 5.159459710121154785e-01 6.348799914121627808e-02 1.000000000000000000e+00 -9.709190130233764648e-01 5.228530168533325195e-01 5.836699903011322021e-02 1.000000000000000000e+00 -9.725900292396545410e-01 5.297979712486267090e-01 5.332399904727935791e-02 1.000000000000000000e+00 -9.741759896278381348e-01 5.367799997329711914e-01 4.839200153946876526e-02 1.000000000000000000e+00 -9.756770133972167969e-01 5.437980294227600098e-01 4.361800104379653931e-02 1.000000000000000000e+00 -9.770920276641845703e-01 5.508499741554260254e-01 3.905000165104866028e-02 1.000000000000000000e+00 -9.784219861030578613e-01 5.579370260238647461e-01 3.493100032210350037e-02 1.000000000000000000e+00 -9.796659946441650391e-01 5.650569796562194824e-01 3.140899911522865295e-02 1.000000000000000000e+00 -9.808239936828613281e-01 5.722090005874633789e-01 2.850800007581710815e-02 1.000000000000000000e+00 -9.818950295448303223e-01 5.793920159339904785e-01 2.624999918043613434e-02 1.000000000000000000e+00 -9.828810095787048340e-01 5.866060256958007812e-01 2.466100081801414490e-02 1.000000000000000000e+00 -9.837790131568908691e-01 5.938490033149719238e-01 2.377000078558921814e-02 1.000000000000000000e+00 -9.845910072326660156e-01 6.011220216751098633e-01 2.360600046813488007e-02 1.000000000000000000e+00 -9.853150248527526855e-01 6.084219813346862793e-01 2.420200034976005554e-02 1.000000000000000000e+00 -9.859520196914672852e-01 6.157500147819519043e-01 2.559199929237365723e-02 1.000000000000000000e+00 -9.865019917488098145e-01 6.231049895286560059e-01 2.781400084495544434e-02 1.000000000000000000e+00 -9.869639873504638672e-01 6.304849982261657715e-01 3.090799972414970398e-02 1.000000000000000000e+00 -9.873369932174682617e-01 6.378899812698364258e-01 3.491599857807159424e-02 1.000000000000000000e+00 -9.876220226287841797e-01 6.453199982643127441e-01 3.988600149750709534e-02 1.000000000000000000e+00 -9.878190159797668457e-01 6.527730226516723633e-01 4.558100178837776184e-02 1.000000000000000000e+00 -9.879260063171386719e-01 6.602500081062316895e-01 5.175000056624412537e-02 1.000000000000000000e+00 -9.879450201988220215e-01 6.677479743957519531e-01 5.832900106906890869e-02 1.000000000000000000e+00 -9.878739714622497559e-01 6.752669811248779297e-01 6.525699794292449951e-02 1.000000000000000000e+00 -9.877139925956726074e-01 6.828070282936096191e-01 7.248900085687637329e-02 1.000000000000000000e+00 -9.874640107154846191e-01 6.903660297393798828e-01 7.998999953269958496e-02 1.000000000000000000e+00 -9.871240258216857910e-01 6.979439854621887207e-01 8.773099631071090698e-02 1.000000000000000000e+00 -9.866939783096313477e-01 7.055400013923645020e-01 9.569399803876876831e-02 1.000000000000000000e+00 -9.861750006675720215e-01 7.131530046463012695e-01 1.038630008697509766e-01 1.000000000000000000e+00 -9.855660200119018555e-01 7.207819819450378418e-01 1.122289970517158508e-01 1.000000000000000000e+00 -9.848650097846984863e-01 7.284269928932189941e-01 1.207849979400634766e-01 1.000000000000000000e+00 -9.840750098228454590e-01 7.360870242118835449e-01 1.295270025730133057e-01 1.000000000000000000e+00 -9.831960201263427734e-01 7.437580227851867676e-01 1.384530067443847656e-01 1.000000000000000000e+00 -9.822279810905456543e-01 7.514420151710510254e-01 1.475650072097778320e-01 1.000000000000000000e+00 -9.811729788780212402e-01 7.591350078582763672e-01 1.568630039691925049e-01 1.000000000000000000e+00 -9.800320267677307129e-01 7.668370008468627930e-01 1.663530021905899048e-01 1.000000000000000000e+00 -9.788060188293457031e-01 7.745450139045715332e-01 1.760369986295700073e-01 1.000000000000000000e+00 -9.774969816207885742e-01 7.822579741477966309e-01 1.859229952096939087e-01 1.000000000000000000e+00 -9.761080145835876465e-01 7.899739742279052734e-01 1.960179954767227173e-01 1.000000000000000000e+00 -9.746379852294921875e-01 7.976920008659362793e-01 2.063319981098175049e-01 1.000000000000000000e+00 -9.730880260467529297e-01 8.054090142250061035e-01 2.168769985437393188e-01 1.000000000000000000e+00 -9.714679718017578125e-01 8.131219744682312012e-01 2.276580035686492920e-01 1.000000000000000000e+00 -9.697830080986022949e-01 8.208249807357788086e-01 2.386859953403472900e-01 1.000000000000000000e+00 -9.680410027503967285e-01 8.285149931907653809e-01 2.499720007181167603e-01 1.000000000000000000e+00 -9.662430286407470703e-01 8.361909985542297363e-01 2.615340054035186768e-01 1.000000000000000000e+00 -9.643939733505249023e-01 8.438479900360107422e-01 2.733910083770751953e-01 1.000000000000000000e+00 -9.625170230865478516e-01 8.514760136604309082e-01 2.855460047721862793e-01 1.000000000000000000e+00 -9.606260061264038086e-01 8.590689897537231445e-01 2.980099916458129883e-01 1.000000000000000000e+00 -9.587200284004211426e-01 8.666239976882934570e-01 3.108200132846832275e-01 1.000000000000000000e+00 -9.568340182304382324e-01 8.741289973258972168e-01 3.239740133285522461e-01 1.000000000000000000e+00 -9.549970030784606934e-01 8.815690279006958008e-01 3.374750018119812012e-01 1.000000000000000000e+00 -9.532150030136108398e-01 8.889420032501220703e-01 3.513689935207366943e-01 1.000000000000000000e+00 -9.515460133552551270e-01 8.962259888648986816e-01 3.656269907951354980e-01 1.000000000000000000e+00 -9.500179886817932129e-01 9.034090042114257812e-01 3.802709877490997314e-01 1.000000000000000000e+00 -9.486830234527587891e-01 9.104729890823364258e-01 3.952890038490295410e-01 1.000000000000000000e+00 -9.475939869880676270e-01 9.173989892005920410e-01 4.106650054454803467e-01 1.000000000000000000e+00 -9.468089938163757324e-01 9.241679906845092773e-01 4.263730049133300781e-01 1.000000000000000000e+00 -9.463919997215270996e-01 9.307609796524047852e-01 4.423669874668121338e-01 1.000000000000000000e+00 -9.464030265808105469e-01 9.371590018272399902e-01 4.585919976234436035e-01 1.000000000000000000e+00 -9.469029903411865234e-01 9.433479905128479004e-01 4.749700129032135010e-01 1.000000000000000000e+00 -9.479370117187500000e-01 9.493179917335510254e-01 4.914259910583496094e-01 1.000000000000000000e+00 -9.495450258255004883e-01 9.550629854202270508e-01 5.078600049018859863e-01 1.000000000000000000e+00 -9.517400264739990234e-01 9.605870246887207031e-01 5.242030024528503418e-01 1.000000000000000000e+00 -9.545289874076843262e-01 9.658960103988647461e-01 5.403609871864318848e-01 1.000000000000000000e+00 -9.578959941864013672e-01 9.710029959678649902e-01 5.562750101089477539e-01 1.000000000000000000e+00 -9.618120193481445312e-01 9.759240150451660156e-01 5.719249844551086426e-01 1.000000000000000000e+00 -9.662489891052246094e-01 9.806780219078063965e-01 5.872060060501098633e-01 1.000000000000000000e+00 -9.711620211601257324e-01 9.852820038795471191e-01 6.021540164947509766e-01 1.000000000000000000e+00 -9.765110015869140625e-01 9.897530078887939453e-01 6.167600154876708984e-01 1.000000000000000000e+00 -9.822570085525512695e-01 9.941089749336242676e-01 6.310170292854309082e-01 1.000000000000000000e+00 -9.883620142936706543e-01 9.983639717102050781e-01 6.449239850044250488e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/jet b/fastplotlib/utils/colormaps/jet deleted file mode 100644 index 9ca10bb71..000000000 --- a/fastplotlib/utils/colormaps/jet +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.178253054618835449e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.356506109237670898e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.534759163856506348e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.713012218475341797e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.891265869140625000e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.069518923759460449e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.247771978378295898e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.426025032997131348e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.604278087615966797e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.782531142234802246e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.960784196853637695e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.139037251472473145e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.317290306091308594e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.495543956756591797e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.673797011375427246e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.852050065994262695e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.030303120613098145e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.208556175231933594e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.386809229850769043e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.565062284469604492e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.743315339088439941e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.921568393707275391e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.099822044372558594e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.278075098991394043e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.456328153610229492e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.634581208229064941e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.812834262847900391e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.991087317466735840e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.960784429684281349e-03 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.764705963432788849e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.333333507180213928e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.901960864663124084e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.470588594675064087e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.039215952157974243e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.607843309640884399e-02 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.117647066712379456e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.274509876966476440e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.431372612714767456e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.588235348463058472e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.745098084211349487e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.901960819959640503e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.058823555707931519e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.215686291456222534e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.372549027204513550e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.529411911964416504e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.686274647712707520e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 2.843137383460998535e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.000000119209289551e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.156862854957580566e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.313725590705871582e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.470588326454162598e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.627451062202453613e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.784313797950744629e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.941176533699035645e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.098039269447326660e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.254902005195617676e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.411764740943908691e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.568627476692199707e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.725490212440490723e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.882352948188781738e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.039215683937072754e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.196078419685363770e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.352941155433654785e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.509803891181945801e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.666666626930236816e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.823529362678527832e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 5.980392098426818848e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.137254834175109863e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.294117569923400879e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.450980305671691895e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.607843041419982910e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.764705777168273926e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.921568512916564941e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.078431248664855957e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.235293984413146973e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.392156720161437988e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.549019455909729004e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.705882191658020020e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.862744927406311035e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.019607663154602051e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.176470398902893066e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.333333134651184082e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.490195870399475098e-01 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.647058606147766113e-01 9.962049126625061035e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.803921341896057129e-01 9.835547208786010742e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.960784077644348145e-01 9.709044694900512695e-01 1.000000000000000000e+00 -9.487666189670562744e-03 9.117646813392639160e-01 9.582542777061462402e-01 1.000000000000000000e+00 -2.213788777589797974e-02 9.274509549140930176e-01 9.456040263175964355e-01 1.000000000000000000e+00 -3.478810936212539673e-02 9.431372284889221191e-01 9.329538345336914062e-01 1.000000000000000000e+00 -4.743833094835281372e-02 9.588235020637512207e-01 9.203035831451416016e-01 1.000000000000000000e+00 -6.008855253458023071e-02 9.745097756385803223e-01 9.076533913612365723e-01 1.000000000000000000e+00 -7.273877412080764771e-02 9.901960492134094238e-01 8.950031399726867676e-01 1.000000000000000000e+00 -8.538899570703506470e-02 1.000000000000000000e+00 8.823529481887817383e-01 1.000000000000000000e+00 -9.803921729326248169e-02 1.000000000000000000e+00 8.697026968002319336e-01 1.000000000000000000e+00 -1.106894388794898987e-01 1.000000000000000000e+00 8.570525050163269043e-01 1.000000000000000000e+00 -1.233396604657173157e-01 1.000000000000000000e+00 8.444022536277770996e-01 1.000000000000000000e+00 -1.359898746013641357e-01 1.000000000000000000e+00 8.317520618438720703e-01 1.000000000000000000e+00 -1.486400961875915527e-01 1.000000000000000000e+00 8.191018104553222656e-01 1.000000000000000000e+00 -1.612903177738189697e-01 1.000000000000000000e+00 8.064516186714172363e-01 1.000000000000000000e+00 -1.739405393600463867e-01 1.000000000000000000e+00 7.938013672828674316e-01 1.000000000000000000e+00 -1.865907609462738037e-01 1.000000000000000000e+00 7.811511754989624023e-01 1.000000000000000000e+00 -1.992409825325012207e-01 1.000000000000000000e+00 7.685009241104125977e-01 1.000000000000000000e+00 -2.118912041187286377e-01 1.000000000000000000e+00 7.558507323265075684e-01 1.000000000000000000e+00 -2.245414257049560547e-01 1.000000000000000000e+00 7.432004809379577637e-01 1.000000000000000000e+00 -2.371916472911834717e-01 1.000000000000000000e+00 7.305502891540527344e-01 1.000000000000000000e+00 -2.498418688774108887e-01 1.000000000000000000e+00 7.179000377655029297e-01 1.000000000000000000e+00 -2.624920904636383057e-01 1.000000000000000000e+00 7.052498459815979004e-01 1.000000000000000000e+00 -2.751423120498657227e-01 1.000000000000000000e+00 6.925995945930480957e-01 1.000000000000000000e+00 -2.877925336360931396e-01 1.000000000000000000e+00 6.799494028091430664e-01 1.000000000000000000e+00 -3.004427552223205566e-01 1.000000000000000000e+00 6.672991514205932617e-01 1.000000000000000000e+00 -3.130929768085479736e-01 1.000000000000000000e+00 6.546489596366882324e-01 1.000000000000000000e+00 -3.257431983947753906e-01 1.000000000000000000e+00 6.419987082481384277e-01 1.000000000000000000e+00 -3.383934199810028076e-01 1.000000000000000000e+00 6.293485164642333984e-01 1.000000000000000000e+00 -3.510436415672302246e-01 1.000000000000000000e+00 6.166982650756835938e-01 1.000000000000000000e+00 -3.636938631534576416e-01 1.000000000000000000e+00 6.040480732917785645e-01 1.000000000000000000e+00 -3.763440847396850586e-01 1.000000000000000000e+00 5.913978219032287598e-01 1.000000000000000000e+00 -3.889943063259124756e-01 1.000000000000000000e+00 5.787476301193237305e-01 1.000000000000000000e+00 -4.016445279121398926e-01 1.000000000000000000e+00 5.660973787307739258e-01 1.000000000000000000e+00 -4.142947494983673096e-01 1.000000000000000000e+00 5.534471869468688965e-01 1.000000000000000000e+00 -4.269449710845947266e-01 1.000000000000000000e+00 5.407969355583190918e-01 1.000000000000000000e+00 -4.395951926708221436e-01 1.000000000000000000e+00 5.281467437744140625e-01 1.000000000000000000e+00 -4.522454142570495605e-01 1.000000000000000000e+00 5.154964923858642578e-01 1.000000000000000000e+00 -4.648956358432769775e-01 1.000000000000000000e+00 5.028463006019592285e-01 1.000000000000000000e+00 -4.775458574295043945e-01 1.000000000000000000e+00 4.901960790157318115e-01 1.000000000000000000e+00 -4.901960790157318115e-01 1.000000000000000000e+00 4.775458574295043945e-01 1.000000000000000000e+00 -5.028463006019592285e-01 1.000000000000000000e+00 4.648956358432769775e-01 1.000000000000000000e+00 -5.154964923858642578e-01 1.000000000000000000e+00 4.522454142570495605e-01 1.000000000000000000e+00 -5.281467437744140625e-01 1.000000000000000000e+00 4.395951926708221436e-01 1.000000000000000000e+00 -5.407969355583190918e-01 1.000000000000000000e+00 4.269449710845947266e-01 1.000000000000000000e+00 -5.534471869468688965e-01 1.000000000000000000e+00 4.142947494983673096e-01 1.000000000000000000e+00 -5.660973787307739258e-01 1.000000000000000000e+00 4.016445279121398926e-01 1.000000000000000000e+00 -5.787476301193237305e-01 1.000000000000000000e+00 3.889943063259124756e-01 1.000000000000000000e+00 -5.913978219032287598e-01 1.000000000000000000e+00 3.763440847396850586e-01 1.000000000000000000e+00 -6.040480732917785645e-01 1.000000000000000000e+00 3.636938631534576416e-01 1.000000000000000000e+00 -6.166982650756835938e-01 1.000000000000000000e+00 3.510436415672302246e-01 1.000000000000000000e+00 -6.293485164642333984e-01 1.000000000000000000e+00 3.383934199810028076e-01 1.000000000000000000e+00 -6.419987082481384277e-01 1.000000000000000000e+00 3.257431983947753906e-01 1.000000000000000000e+00 -6.546489596366882324e-01 1.000000000000000000e+00 3.130929768085479736e-01 1.000000000000000000e+00 -6.672991514205932617e-01 1.000000000000000000e+00 3.004427552223205566e-01 1.000000000000000000e+00 -6.799494028091430664e-01 1.000000000000000000e+00 2.877925336360931396e-01 1.000000000000000000e+00 -6.925995945930480957e-01 1.000000000000000000e+00 2.751423120498657227e-01 1.000000000000000000e+00 -7.052498459815979004e-01 1.000000000000000000e+00 2.624920904636383057e-01 1.000000000000000000e+00 -7.179000377655029297e-01 1.000000000000000000e+00 2.498418688774108887e-01 1.000000000000000000e+00 -7.305502891540527344e-01 1.000000000000000000e+00 2.371916472911834717e-01 1.000000000000000000e+00 -7.432004809379577637e-01 1.000000000000000000e+00 2.245414257049560547e-01 1.000000000000000000e+00 -7.558507323265075684e-01 1.000000000000000000e+00 2.118912041187286377e-01 1.000000000000000000e+00 -7.685009241104125977e-01 1.000000000000000000e+00 1.992409825325012207e-01 1.000000000000000000e+00 -7.811511754989624023e-01 1.000000000000000000e+00 1.865907609462738037e-01 1.000000000000000000e+00 -7.938013672828674316e-01 1.000000000000000000e+00 1.739405393600463867e-01 1.000000000000000000e+00 -8.064516186714172363e-01 1.000000000000000000e+00 1.612903177738189697e-01 1.000000000000000000e+00 -8.191018104553222656e-01 1.000000000000000000e+00 1.486400961875915527e-01 1.000000000000000000e+00 -8.317520618438720703e-01 1.000000000000000000e+00 1.359898746013641357e-01 1.000000000000000000e+00 -8.444022536277770996e-01 1.000000000000000000e+00 1.233396604657173157e-01 1.000000000000000000e+00 -8.570525050163269043e-01 1.000000000000000000e+00 1.106894388794898987e-01 1.000000000000000000e+00 -8.697026968002319336e-01 1.000000000000000000e+00 9.803921729326248169e-02 1.000000000000000000e+00 -8.823529481887817383e-01 1.000000000000000000e+00 8.538899570703506470e-02 1.000000000000000000e+00 -8.950031399726867676e-01 1.000000000000000000e+00 7.273877412080764771e-02 1.000000000000000000e+00 -9.076533913612365723e-01 1.000000000000000000e+00 6.008855253458023071e-02 1.000000000000000000e+00 -9.203035831451416016e-01 1.000000000000000000e+00 4.743833094835281372e-02 1.000000000000000000e+00 -9.329538345336914062e-01 1.000000000000000000e+00 3.478810936212539673e-02 1.000000000000000000e+00 -9.456040263175964355e-01 9.883805513381958008e-01 2.213788777589797974e-02 1.000000000000000000e+00 -9.582542777061462402e-01 9.738562107086181641e-01 9.487666189670562744e-03 1.000000000000000000e+00 -9.709044694900512695e-01 9.593318700790405273e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.835547208786010742e-01 9.448075294494628906e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.962049126625061035e-01 9.302832484245300293e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.157589077949523926e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.012345671653747559e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.867102265357971191e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.721858859062194824e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.576616048812866211e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.431372642517089844e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.286129236221313477e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.140885829925537109e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.995642423629760742e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.850399613380432129e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.705156207084655762e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.559912800788879395e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.414669394493103027e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.269426584243774414e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.124183177947998047e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.978939771652221680e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.833696365356445312e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.688452959060668945e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.543210148811340332e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.397966742515563965e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.252723336219787598e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.107479929924011230e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.962236523628234863e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.816993713378906250e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.671750307083129883e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.526506900787353516e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.381263494491577148e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.236020088195800781e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.090777277946472168e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.945533871650695801e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.800290465354919434e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.655047059059143066e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.509803950786590576e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.364560544490814209e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.219317436218261719e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.074074029922485352e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.928830921649932861e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.783587515354156494e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.638344109058380127e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.493101000785827637e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.347857594490051270e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.202614486217498779e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.057371079921722412e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.912127673625946045e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.766884565353393555e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.621641159057617188e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.476397901773452759e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.331154644489288330e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.185911387205123901e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.040668129920959473e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.895424872636795044e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.750181615352630615e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.604938209056854248e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.459694951772689819e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.314451694488525391e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.169208437204360962e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.023965105414390564e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.787218481302261353e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.991087317466735840e-01 7.334785908460617065e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.812834262847900391e-01 5.882352963089942932e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.634581208229064941e-01 4.429920017719268799e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.456328153610229492e-01 2.977487258613109589e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.278075098991394043e-01 1.525054499506950378e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.099822044372558594e-01 7.262164144776761532e-04 0.000000000000000000e+00 1.000000000000000000e+00 -8.921568393707275391e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.743315339088439941e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.565062284469604492e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.386809229850769043e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.208556175231933594e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.030303120613098145e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.852050065994262695e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.673797011375427246e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.495543956756591797e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.317290306091308594e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.139037251472473145e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.960784196853637695e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.782531142234802246e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.604278087615966797e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.426025032997131348e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.247771978378295898e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.069518923759460449e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.891265869140625000e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.713012218475341797e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.534759163856506348e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.356506109237670898e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.178253054618835449e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.000000000000000000e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/magma b/fastplotlib/utils/colormaps/magma deleted file mode 100644 index 674bb9963..000000000 --- a/fastplotlib/utils/colormaps/magma +++ /dev/null @@ -1,256 +0,0 @@ -1.461999956518411636e-03 4.659999976865947247e-04 1.386599987745285034e-02 1.000000000000000000e+00 -2.257999964058399200e-03 1.294999965466558933e-03 1.833100058138370514e-02 1.000000000000000000e+00 -3.279000055044889450e-03 2.305000089108943939e-03 2.370800077915191650e-02 1.000000000000000000e+00 -4.511999897658824921e-03 3.490000031888484955e-03 2.996500022709369659e-02 1.000000000000000000e+00 -5.950000137090682983e-03 4.842999856919050217e-03 3.712999820709228516e-02 1.000000000000000000e+00 -7.588000036776065826e-03 6.355999968945980072e-03 4.497300088405609131e-02 1.000000000000000000e+00 -9.425999596714973450e-03 8.022000081837177277e-03 5.284399911761283875e-02 1.000000000000000000e+00 -1.146499998867511749e-02 9.828000329434871674e-03 6.075000017881393433e-02 1.000000000000000000e+00 -1.370800007134675980e-02 1.177099999040365219e-02 6.866700202226638794e-02 1.000000000000000000e+00 -1.615599915385246277e-02 1.384000014513731003e-02 7.660300284624099731e-02 1.000000000000000000e+00 -1.881499961018562317e-02 1.602599956095218658e-02 8.458399772644042969e-02 1.000000000000000000e+00 -2.169200032949447632e-02 1.831999979913234711e-02 9.261000156402587891e-02 1.000000000000000000e+00 -2.479200065135955811e-02 2.071500010788440704e-02 1.006760001182556152e-01 1.000000000000000000e+00 -2.812300063669681549e-02 2.320099994540214539e-02 1.087870001792907715e-01 1.000000000000000000e+00 -3.169599920511245728e-02 2.576499991118907928e-02 1.169650033116340637e-01 1.000000000000000000e+00 -3.551999852061271667e-02 2.839699946343898773e-02 1.252090036869049072e-01 1.000000000000000000e+00 -3.960800170898437500e-02 3.109000064432621002e-02 1.335150003433227539e-01 1.000000000000000000e+00 -4.382999986410140991e-02 3.382999822497367859e-02 1.418859958648681641e-01 1.000000000000000000e+00 -4.806200042366981506e-02 3.660700097680091858e-02 1.503269970417022705e-01 1.000000000000000000e+00 -5.231999978423118591e-02 3.940699994564056396e-02 1.588409990072250366e-01 1.000000000000000000e+00 -5.661499872803688049e-02 4.216000065207481384e-02 1.674460023641586304e-01 1.000000000000000000e+00 -6.094900146126747131e-02 4.479400068521499634e-02 1.761289983987808228e-01 1.000000000000000000e+00 -6.532999873161315918e-02 4.731800034642219543e-02 1.848919987678527832e-01 1.000000000000000000e+00 -6.976400315761566162e-02 4.972599819302558899e-02 1.937350034713745117e-01 1.000000000000000000e+00 -7.425700128078460693e-02 5.201699957251548767e-02 2.026599943637847900e-01 1.000000000000000000e+00 -7.881499826908111572e-02 5.418400093913078308e-02 2.116670012474060059e-01 1.000000000000000000e+00 -8.344600349664688110e-02 5.622500181198120117e-02 2.207549959421157837e-01 1.000000000000000000e+00 -8.815500140190124512e-02 5.813299864530563354e-02 2.299219965934753418e-01 1.000000000000000000e+00 -9.294900298118591309e-02 5.990400165319442749e-02 2.391639947891235352e-01 1.000000000000000000e+00 -9.783300012350082397e-02 6.153099983930587769e-02 2.484769970178604126e-01 1.000000000000000000e+00 -1.028150022029876709e-01 6.300999969244003296e-02 2.578540146350860596e-01 1.000000000000000000e+00 -1.078990027308464050e-01 6.433500349521636963e-02 2.672890126705169678e-01 1.000000000000000000e+00 -1.130940020084381104e-01 6.549199670553207397e-02 2.767840027809143066e-01 1.000000000000000000e+00 -1.184049993753433228e-01 6.647899746894836426e-02 2.863210141658782959e-01 1.000000000000000000e+00 -1.238330006599426270e-01 6.729499995708465576e-02 2.958790063858032227e-01 1.000000000000000000e+00 -1.293800026178359985e-01 6.793499737977981567e-02 3.054429888725280762e-01 1.000000000000000000e+00 -1.350529938936233521e-01 6.839100271463394165e-02 3.149999976158142090e-01 1.000000000000000000e+00 -1.408579945564270020e-01 6.865400075912475586e-02 3.245379924774169922e-01 1.000000000000000000e+00 -1.467850059270858765e-01 6.873799860477447510e-02 3.340109884738922119e-01 1.000000000000000000e+00 -1.528390049934387207e-01 6.863699853420257568e-02 3.434039950370788574e-01 1.000000000000000000e+00 -1.590179949998855591e-01 6.835400313138961792e-02 3.526880145072937012e-01 1.000000000000000000e+00 -1.653079986572265625e-01 6.791099905967712402e-02 3.618159890174865723e-01 1.000000000000000000e+00 -1.717129945755004883e-01 6.730499863624572754e-02 3.707709908485412598e-01 1.000000000000000000e+00 -1.782120019197463989e-01 6.657599657773971558e-02 3.794969916343688965e-01 1.000000000000000000e+00 -1.848009973764419556e-01 6.573200225830078125e-02 3.879730105400085449e-01 1.000000000000000000e+00 -1.914599984884262085e-01 6.481800228357315063e-02 3.961519896984100342e-01 1.000000000000000000e+00 -1.981769949197769165e-01 6.386200338602066040e-02 4.040090143680572510e-01 1.000000000000000000e+00 -2.049349993467330933e-01 6.290700286626815796e-02 4.115140140056610107e-01 1.000000000000000000e+00 -2.117179930210113525e-01 6.199200078845024109e-02 4.186469912528991699e-01 1.000000000000000000e+00 -2.185119986534118652e-01 6.115800142288208008e-02 4.253920018672943115e-01 1.000000000000000000e+00 -2.253019958734512329e-01 6.044499948620796204e-02 4.317420125007629395e-01 1.000000000000000000e+00 -2.320770025253295898e-01 5.988899990916252136e-02 4.376949965953826904e-01 1.000000000000000000e+00 -2.388260066509246826e-01 5.951699987053871155e-02 4.432559907436370850e-01 1.000000000000000000e+00 -2.455430030822753906e-01 5.935199931263923645e-02 4.484359920024871826e-01 1.000000000000000000e+00 -2.522200047969818115e-01 5.941500142216682434e-02 4.532479941844940186e-01 1.000000000000000000e+00 -2.588570117950439453e-01 5.970599874854087830e-02 4.577099978923797607e-01 1.000000000000000000e+00 -2.654469907283782959e-01 6.023700162768363953e-02 4.618400037288665771e-01 1.000000000000000000e+00 -2.719939947128295898e-01 6.099399924278259277e-02 4.656600058078765869e-01 1.000000000000000000e+00 -2.784929871559143066e-01 6.197800114750862122e-02 4.691900014877319336e-01 1.000000000000000000e+00 -2.849510014057159424e-01 6.316799670457839966e-02 4.724510014057159424e-01 1.000000000000000000e+00 -2.913660109043121338e-01 6.455300003290176392e-02 4.754619896411895752e-01 1.000000000000000000e+00 -2.977400124073028564e-01 6.611700356006622314e-02 4.782429933547973633e-01 1.000000000000000000e+00 -3.040809929370880127e-01 6.783500313758850098e-02 4.808120131492614746e-01 1.000000000000000000e+00 -3.103820085525512695e-01 6.970199942588806152e-02 4.831860065460205078e-01 1.000000000000000000e+00 -3.166539967060089111e-01 7.169000059366226196e-02 4.853799939155578613e-01 1.000000000000000000e+00 -3.228990137577056885e-01 7.378199696540832520e-02 4.874080121517181396e-01 1.000000000000000000e+00 -3.291139900684356689e-01 7.597199827432632446e-02 4.892869889736175537e-01 1.000000000000000000e+00 -3.353079855442047119e-01 7.823599874973297119e-02 4.910239875316619873e-01 1.000000000000000000e+00 -3.414820134639739990e-01 8.056399971246719360e-02 4.926309883594512939e-01 1.000000000000000000e+00 -3.476360142230987549e-01 8.294600248336791992e-02 4.941209852695465088e-01 1.000000000000000000e+00 -3.537729978561401367e-01 8.537299931049346924e-02 4.955010116100311279e-01 1.000000000000000000e+00 -3.598980009555816650e-01 8.783099800348281860e-02 4.967780113220214844e-01 1.000000000000000000e+00 -3.660120069980621338e-01 9.031400084495544434e-02 4.979600012302398682e-01 1.000000000000000000e+00 -3.721159994602203369e-01 9.281600266695022583e-02 4.990530014038085938e-01 1.000000000000000000e+00 -3.782109916210174561e-01 9.533199667930603027e-02 5.000669956207275391e-01 1.000000000000000000e+00 -3.842990100383758545e-01 9.785500168800354004e-02 5.010020136833190918e-01 1.000000000000000000e+00 -3.903839886188507080e-01 1.003789976239204407e-01 5.018640160560607910e-01 1.000000000000000000e+00 -3.964670002460479736e-01 1.029020026326179504e-01 5.026580095291137695e-01 1.000000000000000000e+00 -4.025479853153228760e-01 1.054200008511543274e-01 5.033860206604003906e-01 1.000000000000000000e+00 -4.086290001869201660e-01 1.079299971461296082e-01 5.040519833564758301e-01 1.000000000000000000e+00 -4.147090017795562744e-01 1.104310005903244019e-01 5.046619772911071777e-01 1.000000000000000000e+00 -4.207910001277923584e-01 1.129200011491775513e-01 5.052149891853332520e-01 1.000000000000000000e+00 -4.268769919872283936e-01 1.153950020670890808e-01 5.057139992713928223e-01 1.000000000000000000e+00 -4.329670071601867676e-01 1.178549975156784058e-01 5.061600208282470703e-01 1.000000000000000000e+00 -4.390619993209838867e-01 1.202979981899261475e-01 5.065550208091735840e-01 1.000000000000000000e+00 -4.451630115509033203e-01 1.227239966392517090e-01 5.069010257720947266e-01 1.000000000000000000e+00 -4.512709975242614746e-01 1.251319944858551025e-01 5.071979761123657227e-01 1.000000000000000000e+00 -4.573859870433807373e-01 1.275220066308975220e-01 5.074480175971984863e-01 1.000000000000000000e+00 -4.635080099105834961e-01 1.298930048942565918e-01 5.076519846916198730e-01 1.000000000000000000e+00 -4.696399867534637451e-01 1.322450041770935059e-01 5.078089833259582520e-01 1.000000000000000000e+00 -4.757800102233886719e-01 1.345770061016082764e-01 5.079209804534912109e-01 1.000000000000000000e+00 -4.819290041923522949e-01 1.368910074234008789e-01 5.079889893531799316e-01 1.000000000000000000e+00 -4.880880117416381836e-01 1.391859948635101318e-01 5.080109834671020508e-01 1.000000000000000000e+00 -4.942579865455627441e-01 1.414619982242584229e-01 5.079879760742187500e-01 1.000000000000000000e+00 -5.004379749298095703e-01 1.437190026044845581e-01 5.079200267791748047e-01 1.000000000000000000e+00 -5.066289901733398438e-01 1.459580063819885254e-01 5.078060030937194824e-01 1.000000000000000000e+00 -5.128309726715087891e-01 1.481789946556091309e-01 5.076479911804199219e-01 1.000000000000000000e+00 -5.190449953079223633e-01 1.503829956054687500e-01 5.074430108070373535e-01 1.000000000000000000e+00 -5.252699851989746094e-01 1.525689959526062012e-01 5.071920156478881836e-01 1.000000000000000000e+00 -5.315070152282714844e-01 1.547390073537826538e-01 5.068950057029724121e-01 1.000000000000000000e+00 -5.377550125122070312e-01 1.568939983844757080e-01 5.065510272979736328e-01 1.000000000000000000e+00 -5.440149903297424316e-01 1.590330004692077637e-01 5.061590075492858887e-01 1.000000000000000000e+00 -5.502870082855224609e-01 1.611579954624176025e-01 5.057190060615539551e-01 1.000000000000000000e+00 -5.565710067749023438e-01 1.632689982652664185e-01 5.052300095558166504e-01 1.000000000000000000e+00 -5.628659725189208984e-01 1.653680056333541870e-01 5.046920180320739746e-01 1.000000000000000000e+00 -5.691720247268676758e-01 1.674540042877197266e-01 5.041049718856811523e-01 1.000000000000000000e+00 -5.754899978637695312e-01 1.695300042629241943e-01 5.034660100936889648e-01 1.000000000000000000e+00 -5.818189978599548340e-01 1.715960055589675903e-01 5.027769804000854492e-01 1.000000000000000000e+00 -5.881580114364624023e-01 1.736519932746887207e-01 5.020350217819213867e-01 1.000000000000000000e+00 -5.945079922676086426e-01 1.757010072469711304e-01 5.012410283088684082e-01 1.000000000000000000e+00 -6.008679866790771484e-01 1.777430027723312378e-01 5.003939867019653320e-01 1.000000000000000000e+00 -6.072379946708679199e-01 1.797789931297302246e-01 4.994919896125793457e-01 1.000000000000000000e+00 -6.136170029640197754e-01 1.818110048770904541e-01 4.985359907150268555e-01 1.000000000000000000e+00 -6.200050115585327148e-01 1.838400065898895264e-01 4.975239932537078857e-01 1.000000000000000000e+00 -6.264010071754455566e-01 1.858669966459274292e-01 4.964559972286224365e-01 1.000000000000000000e+00 -6.328049898147583008e-01 1.878930032253265381e-01 4.953320026397705078e-01 1.000000000000000000e+00 -6.392160058021545410e-01 1.899210065603256226e-01 4.941500127315521240e-01 1.000000000000000000e+00 -6.456329822540283203e-01 1.919520050287246704e-01 4.929099977016448975e-01 1.000000000000000000e+00 -6.520559787750244141e-01 1.939859986305236816e-01 4.916110038757324219e-01 1.000000000000000000e+00 -6.584830284118652344e-01 1.960269957780838013e-01 4.902530014514923096e-01 1.000000000000000000e+00 -6.649150252342224121e-01 1.980749964714050293e-01 4.888359904289245605e-01 1.000000000000000000e+00 -6.713489890098571777e-01 2.001329958438873291e-01 4.873580038547515869e-01 1.000000000000000000e+00 -6.777859926223754883e-01 2.022030055522918701e-01 4.858190119266510010e-01 1.000000000000000000e+00 -6.842240095138549805e-01 2.042859941720962524e-01 4.842190146446228027e-01 1.000000000000000000e+00 -6.906610131263732910e-01 2.063840031623840332e-01 4.825580120086669922e-01 1.000000000000000000e+00 -6.970980167388916016e-01 2.085009962320327759e-01 4.808349907398223877e-01 1.000000000000000000e+00 -7.035319805145263672e-01 2.106380015611648560e-01 4.790489971637725830e-01 1.000000000000000000e+00 -7.099620103836059570e-01 2.127970010042190552e-01 4.772010147571563721e-01 1.000000000000000000e+00 -7.163869738578796387e-01 2.149820029735565186e-01 4.752900004386901855e-01 1.000000000000000000e+00 -7.228050231933593750e-01 2.171940058469772339e-01 4.733160138130187988e-01 1.000000000000000000e+00 -7.292159795761108398e-01 2.194370031356811523e-01 4.712789952754974365e-01 1.000000000000000000e+00 -7.356160283088684082e-01 2.217130064964294434e-01 4.691799879074096680e-01 1.000000000000000000e+00 -7.420039772987365723e-01 2.240249961614608765e-01 4.670180082321166992e-01 1.000000000000000000e+00 -7.483779788017272949e-01 2.263769954442977905e-01 4.647940099239349365e-01 1.000000000000000000e+00 -7.547370195388793945e-01 2.287719994783401489e-01 4.625090062618255615e-01 1.000000000000000000e+00 -7.610769867897033691e-01 2.312140017747879028e-01 4.601620137691497803e-01 1.000000000000000000e+00 -7.673979997634887695e-01 2.337049990892410278e-01 4.577549993991851807e-01 1.000000000000000000e+00 -7.736949920654296875e-01 2.362489998340606689e-01 4.552890062332153320e-01 1.000000000000000000e+00 -7.799680233001708984e-01 2.388509958982467651e-01 4.527649879455566406e-01 1.000000000000000000e+00 -7.862120270729064941e-01 2.415139973163604736e-01 4.501839876174926758e-01 1.000000000000000000e+00 -7.924270033836364746e-01 2.442419975996017456e-01 4.475429952144622803e-01 1.000000000000000000e+00 -7.986080050468444824e-01 2.470400035381317139e-01 4.448480010032653809e-01 1.000000000000000000e+00 -8.047519922256469727e-01 2.499109953641891479e-01 4.421019852161407471e-01 1.000000000000000000e+00 -8.108549714088439941e-01 2.528609931468963623e-01 4.393050074577331543e-01 1.000000000000000000e+00 -8.169140219688415527e-01 2.558949887752532959e-01 4.364610016345977783e-01 1.000000000000000000e+00 -8.229259848594665527e-01 2.590160071849822998e-01 4.335730075836181641e-01 1.000000000000000000e+00 -8.288859724998474121e-01 2.622289955615997314e-01 4.306440055370330811e-01 1.000000000000000000e+00 -8.347910046577453613e-01 2.655400037765502930e-01 4.276709854602813721e-01 1.000000000000000000e+00 -8.406360149383544922e-01 2.689529955387115479e-01 4.246659874916076660e-01 1.000000000000000000e+00 -8.464159965515136719e-01 2.724730074405670166e-01 4.216310083866119385e-01 1.000000000000000000e+00 -8.521260023117065430e-01 2.761059999465942383e-01 4.185729920864105225e-01 1.000000000000000000e+00 -8.577629923820495605e-01 2.798570096492767334e-01 4.154959917068481445e-01 1.000000000000000000e+00 -8.633199930191040039e-01 2.837289869785308838e-01 4.124029874801635742e-01 1.000000000000000000e+00 -8.687930107116699219e-01 2.877280116081237793e-01 4.093030095100402832e-01 1.000000000000000000e+00 -8.741760253906250000e-01 2.918590009212493896e-01 4.062049984931945801e-01 1.000000000000000000e+00 -8.794639706611633301e-01 2.961249947547912598e-01 4.031180143356323242e-01 1.000000000000000000e+00 -8.846510052680969238e-01 3.005299866199493408e-01 4.000470042228698730e-01 1.000000000000000000e+00 -8.897309899330139160e-01 3.050790131092071533e-01 3.970020115375518799e-01 1.000000000000000000e+00 -8.946999907493591309e-01 3.097729980945587158e-01 3.939949870109558105e-01 1.000000000000000000e+00 -8.995519876480102539e-01 3.146159946918487549e-01 3.910369873046875000e-01 1.000000000000000000e+00 -9.042810201644897461e-01 3.196099996566772461e-01 3.881370127201080322e-01 1.000000000000000000e+00 -9.088839888572692871e-01 3.247550129890441895e-01 3.853079974651336670e-01 1.000000000000000000e+00 -9.133539795875549316e-01 3.300519883632659912e-01 3.825629949569702148e-01 1.000000000000000000e+00 -9.176890254020690918e-01 3.355000019073486328e-01 3.799149990081787109e-01 1.000000000000000000e+00 -9.218840003013610840e-01 3.410980105400085449e-01 3.773759901523590088e-01 1.000000000000000000e+00 -9.259369969367980957e-01 3.468439877033233643e-01 3.749589920043945312e-01 1.000000000000000000e+00 -9.298449754714965820e-01 3.527339994907379150e-01 3.726769983768463135e-01 1.000000000000000000e+00 -9.336060285568237305e-01 3.587639927864074707e-01 3.705410063266754150e-01 1.000000000000000000e+00 -9.372209906578063965e-01 3.649289906024932861e-01 3.685669898986816406e-01 1.000000000000000000e+00 -9.406870007514953613e-01 3.712239861488342285e-01 3.667620122432708740e-01 1.000000000000000000e+00 -9.440060257911682129e-01 3.776429891586303711e-01 3.651359975337982178e-01 1.000000000000000000e+00 -9.471799731254577637e-01 3.841780126094818115e-01 3.637009859085083008e-01 1.000000000000000000e+00 -9.502099752426147461e-01 3.908199965953826904e-01 3.624680042266845703e-01 1.000000000000000000e+00 -9.530990123748779297e-01 3.975630104541778564e-01 3.614380061626434326e-01 1.000000000000000000e+00 -9.558489918708801270e-01 4.043999910354614258e-01 3.606190085411071777e-01 1.000000000000000000e+00 -9.584640264511108398e-01 4.113239943981170654e-01 3.600139915943145752e-01 1.000000000000000000e+00 -9.609490036964416504e-01 4.183230102062225342e-01 3.596299886703491211e-01 1.000000000000000000e+00 -9.633100032806396484e-01 4.253900051116943359e-01 3.594689965248107910e-01 1.000000000000000000e+00 -9.655489921569824219e-01 4.325189888477325439e-01 3.595289885997772217e-01 1.000000000000000000e+00 -9.676709771156311035e-01 4.397029876708984375e-01 3.598099946975708008e-01 1.000000000000000000e+00 -9.696800112724304199e-01 4.469360113143920898e-01 3.603110015392303467e-01 1.000000000000000000e+00 -9.715819954872131348e-01 4.542100131511688232e-01 3.610300123691558838e-01 1.000000000000000000e+00 -9.733809828758239746e-01 4.615199863910675049e-01 3.619650006294250488e-01 1.000000000000000000e+00 -9.750819802284240723e-01 4.688610136508941650e-01 3.631109893321990967e-01 1.000000000000000000e+00 -9.766899943351745605e-01 4.762260019779205322e-01 3.644660115242004395e-01 1.000000000000000000e+00 -9.782099723815917969e-01 4.836120009422302246e-01 3.660250008106231689e-01 1.000000000000000000e+00 -9.796450138092041016e-01 4.910140037536621094e-01 3.677830100059509277e-01 1.000000000000000000e+00 -9.810000061988830566e-01 4.984279870986938477e-01 3.697339892387390137e-01 1.000000000000000000e+00 -9.822790026664733887e-01 5.058509707450866699e-01 3.718740046024322510e-01 1.000000000000000000e+00 -9.834849834442138672e-01 5.132799744606018066e-01 3.741979897022247314e-01 1.000000000000000000e+00 -9.846220016479492188e-01 5.207129716873168945e-01 3.766979873180389404e-01 1.000000000000000000e+00 -9.856929779052734375e-01 5.281479954719543457e-01 3.793709874153137207e-01 1.000000000000000000e+00 -9.866999983787536621e-01 5.355820059776306152e-01 3.822099864482879639e-01 1.000000000000000000e+00 -9.876459836959838867e-01 5.430150032043457031e-01 3.852100074291229248e-01 1.000000000000000000e+00 -9.885330200195312500e-01 5.504459738731384277e-01 3.883650004863739014e-01 1.000000000000000000e+00 -9.893630146980285645e-01 5.578730106353759766e-01 3.916710019111633301e-01 1.000000000000000000e+00 -9.901379942893981934e-01 5.652959942817687988e-01 3.951219916343688965e-01 1.000000000000000000e+00 -9.908710122108459473e-01 5.727059841156005859e-01 3.987140059471130371e-01 1.000000000000000000e+00 -9.915580153465270996e-01 5.801069736480712891e-01 4.024409949779510498e-01 1.000000000000000000e+00 -9.921960234642028809e-01 5.875020027160644531e-01 4.062989950180053711e-01 1.000000000000000000e+00 -9.927849769592285156e-01 5.948910117149353027e-01 4.102829992771148682e-01 1.000000000000000000e+00 -9.933260083198547363e-01 6.022750139236450195e-01 4.143899977207183838e-01 1.000000000000000000e+00 -9.938340187072753906e-01 6.096439957618713379e-01 4.186129868030548096e-01 1.000000000000000000e+00 -9.943090081214904785e-01 6.169989705085754395e-01 4.229499995708465576e-01 1.000000000000000000e+00 -9.947379827499389648e-01 6.243500113487243652e-01 4.273970127105712891e-01 1.000000000000000000e+00 -9.951220154762268066e-01 6.316959857940673828e-01 4.319509863853454590e-01 1.000000000000000000e+00 -9.954800009727478027e-01 6.390269994735717773e-01 4.366070032119750977e-01 1.000000000000000000e+00 -9.958099722862243652e-01 6.463440060615539551e-01 4.413610100746154785e-01 1.000000000000000000e+00 -9.960960149765014648e-01 6.536589860916137695e-01 4.462130069732666016e-01 1.000000000000000000e+00 -9.963409900665283203e-01 6.609690189361572266e-01 4.511600136756896973e-01 1.000000000000000000e+00 -9.965800046920776367e-01 6.682559847831726074e-01 4.561919867992401123e-01 1.000000000000000000e+00 -9.967749714851379395e-01 6.755409836769104004e-01 4.613139927387237549e-01 1.000000000000000000e+00 -9.969249963760375977e-01 6.828280091285705566e-01 4.665260016918182373e-01 1.000000000000000000e+00 -9.970769882202148438e-01 6.900879740715026855e-01 4.718109965324401855e-01 1.000000000000000000e+00 -9.971860051155090332e-01 6.973490118980407715e-01 4.771820008754730225e-01 1.000000000000000000e+00 -9.972540140151977539e-01 7.046110033988952637e-01 4.826349914073944092e-01 1.000000000000000000e+00 -9.973250031471252441e-01 7.118480205535888672e-01 4.881539940834045410e-01 1.000000000000000000e+00 -9.973509907722473145e-01 7.190889716148376465e-01 4.937550127506256104e-01 1.000000000000000000e+00 -9.973509907722473145e-01 7.263240218162536621e-01 4.994280040264129639e-01 1.000000000000000000e+00 -9.973409771919250488e-01 7.335450053215026855e-01 5.051670074462890625e-01 1.000000000000000000e+00 -9.972850084304809570e-01 7.407720088958740234e-01 5.109829902648925781e-01 1.000000000000000000e+00 -9.972280263900756836e-01 7.479810118675231934e-01 5.168589949607849121e-01 1.000000000000000000e+00 -9.971380233764648438e-01 7.551900148391723633e-01 5.228059887886047363e-01 1.000000000000000000e+00 -9.970189929008483887e-01 7.623980045318603516e-01 5.288209915161132812e-01 1.000000000000000000e+00 -9.968979954719543457e-01 7.695909738540649414e-01 5.348920226097106934e-01 1.000000000000000000e+00 -9.967269897460937500e-01 7.767950296401977539e-01 5.410389900207519531e-01 1.000000000000000000e+00 -9.965710043907165527e-01 7.839769721031188965e-01 5.472329854965209961e-01 1.000000000000000000e+00 -9.963690042495727539e-01 7.911670207977294922e-01 5.534989833831787109e-01 1.000000000000000000e+00 -9.961619973182678223e-01 7.983480095863342285e-01 5.598199963569641113e-01 1.000000000000000000e+00 -9.959319829940795898e-01 8.055269718170166016e-01 5.662019848823547363e-01 1.000000000000000000e+00 -9.956799745559692383e-01 8.127059936523437500e-01 5.726450085639953613e-01 1.000000000000000000e+00 -9.954239726066589355e-01 8.198750019073486328e-01 5.791400074958801270e-01 1.000000000000000000e+00 -9.951310157775878906e-01 8.270519971847534180e-01 5.857009887695312500e-01 1.000000000000000000e+00 -9.948509931564331055e-01 8.342130184173583984e-01 5.923069715499877930e-01 1.000000000000000000e+00 -9.945240020751953125e-01 8.413869738578796387e-01 5.989829897880554199e-01 1.000000000000000000e+00 -9.942219853401184082e-01 8.485400080680847168e-01 6.056960225105285645e-01 1.000000000000000000e+00 -9.938660264015197754e-01 8.557109832763671875e-01 6.124820113182067871e-01 1.000000000000000000e+00 -9.935449957847595215e-01 8.628590106964111328e-01 6.192989945411682129e-01 1.000000000000000000e+00 -9.931700229644775391e-01 8.700240254402160645e-01 6.261889934539794922e-01 1.000000000000000000e+00 -9.928309917449951172e-01 8.771679997444152832e-01 6.331089735031127930e-01 1.000000000000000000e+00 -9.924399852752685547e-01 8.843299746513366699e-01 6.400989890098571777e-01 1.000000000000000000e+00 -9.920889735221862793e-01 8.914700150489807129e-01 6.471160054206848145e-01 1.000000000000000000e+00 -9.916880130767822266e-01 8.986269831657409668e-01 6.542019844055175781e-01 1.000000000000000000e+00 -9.913319945335388184e-01 9.057629704475402832e-01 6.613090038299560547e-01 1.000000000000000000e+00 -9.909300208091735840e-01 9.129149913787841797e-01 6.684809923171997070e-01 1.000000000000000000e+00 -9.905700087547302246e-01 9.200490117073059082e-01 6.756749749183654785e-01 1.000000000000000000e+00 -9.901750087738037109e-01 9.271960258483886719e-01 6.829259991645812988e-01 1.000000000000000000e+00 -9.898149967193603516e-01 9.343289732933044434e-01 6.901980042457580566e-01 1.000000000000000000e+00 -9.894340038299560547e-01 9.414700269699096680e-01 6.975190043449401855e-01 1.000000000000000000e+00 -9.890769720077514648e-01 9.486039876937866211e-01 7.048630118370056152e-01 1.000000000000000000e+00 -9.887170195579528809e-01 9.557420015335083008e-01 7.122420072555541992e-01 1.000000000000000000e+00 -9.883670210838317871e-01 9.628779888153076172e-01 7.196490168571472168e-01 1.000000000000000000e+00 -9.880329966545104980e-01 9.700120091438293457e-01 7.270770072937011719e-01 1.000000000000000000e+00 -9.876909852027893066e-01 9.771540164947509766e-01 7.345359921455383301e-01 1.000000000000000000e+00 -9.873870015144348145e-01 9.842879772186279297e-01 7.420020103454589844e-01 1.000000000000000000e+00 -9.870529770851135254e-01 9.914379715919494629e-01 7.495040297508239746e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/nipy_spectral b/fastplotlib/utils/colormaps/nipy_spectral deleted file mode 100644 index ff914a0fe..000000000 --- a/fastplotlib/utils/colormaps/nipy_spectral +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.660392016172409058e-02 0.000000000000000000e+00 4.182745143771171570e-02 1.000000000000000000e+00 -7.320784032344818115e-02 0.000000000000000000e+00 8.365490287542343140e-02 1.000000000000000000e+00 -1.098117679357528687e-01 0.000000000000000000e+00 1.254823505878448486e-01 1.000000000000000000e+00 -1.464156806468963623e-01 0.000000000000000000e+00 1.673098057508468628e-01 1.000000000000000000e+00 -1.830196082592010498e-01 0.000000000000000000e+00 2.091372609138488770e-01 1.000000000000000000e+00 -2.196235358715057373e-01 0.000000000000000000e+00 2.509647011756896973e-01 1.000000000000000000e+00 -2.562274634838104248e-01 0.000000000000000000e+00 2.927921712398529053e-01 1.000000000000000000e+00 -2.928313612937927246e-01 0.000000000000000000e+00 3.346196115016937256e-01 1.000000000000000000e+00 -3.294352889060974121e-01 0.000000000000000000e+00 3.764470517635345459e-01 1.000000000000000000e+00 -3.660392165184020996e-01 0.000000000000000000e+00 4.182745218276977539e-01 1.000000000000000000e+00 -4.026431441307067871e-01 0.000000000000000000e+00 4.601019620895385742e-01 1.000000000000000000e+00 -4.392470717430114746e-01 0.000000000000000000e+00 5.019294023513793945e-01 1.000000000000000000e+00 -4.680058956146240234e-01 0.000000000000000000e+00 5.346078276634216309e-01 1.000000000000000000e+00 -4.732294082641601562e-01 0.000000000000000000e+00 5.398392081260681152e-01 1.000000000000000000e+00 -4.784529507160186768e-01 0.000000000000000000e+00 5.450705885887145996e-01 1.000000000000000000e+00 -4.836764633655548096e-01 0.000000000000000000e+00 5.503019690513610840e-01 1.000000000000000000e+00 -4.889000058174133301e-01 0.000000000000000000e+00 5.555333495140075684e-01 1.000000000000000000e+00 -4.941235184669494629e-01 0.000000000000000000e+00 5.607647299766540527e-01 1.000000000000000000e+00 -4.993470609188079834e-01 0.000000000000000000e+00 5.659960508346557617e-01 1.000000000000000000e+00 -5.045706033706665039e-01 0.000000000000000000e+00 5.712274312973022461e-01 1.000000000000000000e+00 -5.097941160202026367e-01 0.000000000000000000e+00 5.764588117599487305e-01 1.000000000000000000e+00 -5.150176286697387695e-01 0.000000000000000000e+00 5.816901922225952148e-01 1.000000000000000000e+00 -5.202412009239196777e-01 0.000000000000000000e+00 5.869215726852416992e-01 1.000000000000000000e+00 -5.254647135734558105e-01 0.000000000000000000e+00 5.921529531478881836e-01 1.000000000000000000e+00 -5.306882262229919434e-01 0.000000000000000000e+00 5.973843336105346680e-01 1.000000000000000000e+00 -5.123862624168395996e-01 0.000000000000000000e+00 6.026157140731811523e-01 1.000000000000000000e+00 -4.705588221549987793e-01 0.000000000000000000e+00 6.078470349311828613e-01 1.000000000000000000e+00 -4.287313818931579590e-01 0.000000000000000000e+00 6.130784153938293457e-01 1.000000000000000000e+00 -3.869039118289947510e-01 0.000000000000000000e+00 6.183097958564758301e-01 1.000000000000000000e+00 -3.450764715671539307e-01 0.000000000000000000e+00 6.235411763191223145e-01 1.000000000000000000e+00 -3.032490313053131104e-01 0.000000000000000000e+00 6.287725567817687988e-01 1.000000000000000000e+00 -2.614215612411499023e-01 0.000000000000000000e+00 6.340039372444152832e-01 1.000000000000000000e+00 -2.195941209793090820e-01 0.000000000000000000e+00 6.392353177070617676e-01 1.000000000000000000e+00 -1.777666658163070679e-01 0.000000000000000000e+00 6.444666385650634766e-01 1.000000000000000000e+00 -1.359392106533050537e-01 0.000000000000000000e+00 6.496980190277099609e-01 1.000000000000000000e+00 -9.411176294088363647e-02 0.000000000000000000e+00 6.549293994903564453e-01 1.000000000000000000e+00 -5.228431522846221924e-02 0.000000000000000000e+00 6.601607799530029297e-01 1.000000000000000000e+00 -1.045686285942792892e-02 0.000000000000000000e+00 6.653921604156494141e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.784647107124328613e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.941509842872619629e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.098372578620910645e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.255235314369201660e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.412098050117492676e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.568960785865783691e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.725823521614074707e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.882686257362365723e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.039548993110656738e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.196411728858947754e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.353274464607238770e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.510137200355529785e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.660392016172409058e-02 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.320784032344818115e-02 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.098117679357528687e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.464156806468963623e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.830196082592010498e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.196235358715057373e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.562274634838104248e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.928313612937927246e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.294352889060974121e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.660392165184020996e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.026431441307067871e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.392470717430114746e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.693137109279632568e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.797686338424682617e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.902235269546508789e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.006784200668334961e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.111333131790161133e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.215882062911987305e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.320431590080261230e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.424980521202087402e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.529529452323913574e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.634078383445739746e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.738627314567565918e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.843176245689392090e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.947725772857666016e-01 8.666999936103820801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.026157140731811523e-01 8.588568568229675293e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.078470349311828613e-01 8.431705832481384277e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.130784153938293457e-01 8.274843096733093262e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.183097958564758301e-01 8.117980360984802246e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.235411763191223145e-01 7.961117625236511230e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.287725567817687988e-01 7.804254889488220215e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.340039372444152832e-01 7.647392153739929199e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.392353177070617676e-01 7.490529417991638184e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.444666385650634766e-01 7.333666682243347168e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.496980190277099609e-01 7.176803946495056152e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.549293994903564453e-01 7.019941210746765137e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.601607799530029297e-01 6.863078474998474121e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.653921604156494141e-01 6.706215739250183105e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 6.588529348373413086e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 6.483901739120483398e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 6.379274725914001465e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 6.274647116661071777e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 6.170019507408142090e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 6.065391898155212402e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 5.960764884948730469e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 5.856137275695800781e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 5.751509666442871094e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 5.646882057189941406e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 5.542255043983459473e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 5.437627434730529785e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.667000055313110352e-01 5.332999825477600098e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.614686250686645508e-01 4.914725422859191895e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.562372446060180664e-01 4.496451020240783691e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.510058641433715820e-01 4.078176617622375488e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.457744836807250977e-01 3.659901916980743408e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.405431628227233887e-01 3.241627514362335205e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.353117823600769043e-01 2.823352813720703125e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.300804018974304199e-01 2.405078411102294922e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.248490214347839355e-01 1.986803859472274780e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.196176409721374512e-01 1.568529456853866577e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.143862605094909668e-01 1.150254905223846436e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.091548800468444824e-01 7.319804280996322632e-02 1.000000000000000000e+00 -0.000000000000000000e+00 6.039235591888427734e-01 3.137058764696121216e-02 1.000000000000000000e+00 -0.000000000000000000e+00 6.026137471199035645e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.130686402320861816e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.235235333442687988e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.339784264564514160e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.444333195686340332e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.548882126808166504e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.653431653976440430e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.757980585098266602e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.862529516220092773e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 6.967078447341918945e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.071627378463745117e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.176176309585571289e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.280725240707397461e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.385313510894775391e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.489941120147705078e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.594568729400634766e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.699196338653564453e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.803823351860046387e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 7.908450961112976074e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.013078570365905762e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.117706179618835449e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.222333192825317383e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.326960802078247070e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.431588411331176758e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.536215424537658691e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.640843033790588379e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.745411634445190430e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.849960565567016602e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 8.954510092735290527e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.059059023857116699e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.163607954978942871e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.268156886100769043e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.372705817222595215e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.477254748344421387e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.581803679466247559e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.686353206634521484e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.790902137756347656e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 9.895451068878173828e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.751372501254081726e-02 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.150274500250816345e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.725411713123321533e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.300549000501632690e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.875686287879943848e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.450823426246643066e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.025960862636566162e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.601098001003265381e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.176235437393188477e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.751372575759887695e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.326509714126586914e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.901646852493286133e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.372215390205383301e-01 9.986921548843383789e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.529078722000122070e-01 9.934607744216918945e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.685941457748413086e-01 9.882293939590454102e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.842804193496704102e-01 9.829980134963989258e-01 0.000000000000000000e+00 1.000000000000000000e+00 -7.999666929244995117e-01 9.777666926383972168e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.156529664993286133e-01 9.725353121757507324e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.313392400741577148e-01 9.673039317131042480e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.470255136489868164e-01 9.620725512504577637e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.627117872238159180e-01 9.568411707878112793e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.783980607986450195e-01 9.516097903251647949e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.940843343734741211e-01 9.463784098625183105e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.097706079483032227e-01 9.411470293998718262e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.254568815231323242e-01 9.359157085418701172e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.359157085418701172e-01 9.280725717544555664e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.411470293998718262e-01 9.176176190376281738e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.463784098625183105e-01 9.071627259254455566e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.516097903251647949e-01 8.967078328132629395e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.568411707878112793e-01 8.862529397010803223e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.620725512504577637e-01 8.757980465888977051e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.673039317131042480e-01 8.653431534767150879e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.725353121757507324e-01 8.548882603645324707e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.777666926383972168e-01 8.444333076477050781e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.829980134963989258e-01 8.339784145355224609e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.882293939590454102e-01 8.235235214233398438e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.934607744216918945e-01 8.130686283111572266e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.986921548843383789e-01 8.026137351989746094e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.882353067398071289e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.725490331649780273e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.568627595901489258e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.411764860153198242e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.254902124404907227e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.098039388656616211e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.941176652908325195e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.784313917160034180e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.627451181411743164e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.470588445663452148e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.313725709915161133e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.156862974166870117e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.000000238418579102e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.529412031173706055e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.058823823928833008e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.588235318660736084e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.117647111415863037e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.647058904170989990e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.176470696926116943e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.705882489681243896e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.235294133424758911e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.764705926179885864e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.294117718935012817e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.235294371843338013e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.529411926865577698e-02 0.000000000000000000e+00 1.000000000000000000e+00 -9.973862767219543457e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.869313836097717285e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.764764904975891113e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.660215973854064941e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.555666446685791016e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.451117515563964844e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.346568584442138672e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.242019653320312500e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.137470722198486328e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.032921791076660156e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.928372263908386230e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.823823332786560059e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.719274401664733887e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.640843033790588379e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.588529229164123535e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.536215424537658691e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.483902215957641602e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.431588411331176758e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.379274606704711914e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.326960802078247070e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.274646997451782227e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.222333192825317383e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.170019388198852539e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.117706179618835449e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.065392374992370605e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.013078570365905762e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.000000119209289551e-01 4.705882444977760315e-02 4.705882444977760315e-02 1.000000000000000000e+00 -8.000000119209289551e-01 1.098039224743843079e-01 1.098039224743843079e-01 1.000000000000000000e+00 -8.000000119209289551e-01 1.725490242242813110e-01 1.725490242242813110e-01 1.000000000000000000e+00 -8.000000119209289551e-01 2.352941185235977173e-01 2.352941185235977173e-01 1.000000000000000000e+00 -8.000000119209289551e-01 2.980392277240753174e-01 2.980392277240753174e-01 1.000000000000000000e+00 -8.000000119209289551e-01 3.607843220233917236e-01 3.607843220233917236e-01 1.000000000000000000e+00 -8.000000119209289551e-01 4.235294163227081299e-01 4.235294163227081299e-01 1.000000000000000000e+00 -8.000000119209289551e-01 4.862745106220245361e-01 4.862745106220245361e-01 1.000000000000000000e+00 -8.000000119209289551e-01 5.490196347236633301e-01 5.490196347236633301e-01 1.000000000000000000e+00 -8.000000119209289551e-01 6.117647290229797363e-01 6.117647290229797363e-01 1.000000000000000000e+00 -8.000000119209289551e-01 6.745098233222961426e-01 6.745098233222961426e-01 1.000000000000000000e+00 -8.000000119209289551e-01 7.372549176216125488e-01 7.372549176216125488e-01 1.000000000000000000e+00 -8.000000119209289551e-01 8.000000119209289551e-01 8.000000119209289551e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/ocean b/fastplotlib/utils/colormaps/ocean deleted file mode 100644 index e42719b48..000000000 --- a/fastplotlib/utils/colormaps/ocean +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 5.000000000000000000e-01 0.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 4.941176474094390869e-01 3.921568859368562698e-03 1.000000000000000000e+00 -0.000000000000000000e+00 4.882352948188781738e-01 7.843137718737125397e-03 1.000000000000000000e+00 -0.000000000000000000e+00 4.823529422283172607e-01 1.176470611244440079e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.764705896377563477e-01 1.568627543747425079e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.705882370471954346e-01 1.960784383118152618e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.647058844566345215e-01 2.352941222488880157e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.588235318660736084e-01 2.745098061859607697e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.529411792755126953e-01 3.137255087494850159e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.470588266849517822e-01 3.529411926865577698e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.411764740943908691e-01 3.921568766236305237e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.352941215038299561e-01 4.313725605607032776e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.294117689132690430e-01 4.705882444977760315e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.235294163227081299e-01 5.098039284348487854e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.176470637321472168e-01 5.490196123719215393e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.117647111415863037e-01 5.882352963089942932e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.058823585510253906e-01 6.274510174989700317e-02 1.000000000000000000e+00 -0.000000000000000000e+00 4.000000059604644775e-01 6.666667014360427856e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.941176533699035645e-01 7.058823853731155396e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.882353007793426514e-01 7.450980693101882935e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.823529481887817383e-01 7.843137532472610474e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.764705955982208252e-01 8.235294371843338013e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.705882430076599121e-01 8.627451211214065552e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.647058904170989990e-01 9.019608050584793091e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.588235378265380859e-01 9.411764889955520630e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.529411852359771729e-01 9.803921729326248169e-02 1.000000000000000000e+00 -0.000000000000000000e+00 3.470588326454162598e-01 1.019607856869697571e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.411764800548553467e-01 1.058823540806770325e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.352941274642944336e-01 1.098039224743843079e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.294117748737335205e-01 1.137254908680915833e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.235294222831726074e-01 1.176470592617988586e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.176470696926116943e-01 1.215686276555061340e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.117647171020507812e-01 1.254902034997940063e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.058823645114898682e-01 1.294117718935012817e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.000000119209289551e-01 1.333333402872085571e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.941176593303680420e-01 1.372549086809158325e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.882353067398071289e-01 1.411764770746231079e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.823529541492462158e-01 1.450980454683303833e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.764706015586853027e-01 1.490196138620376587e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.705882489681243896e-01 1.529411822557449341e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.647058963775634766e-01 1.568627506494522095e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.588235437870025635e-01 1.607843190431594849e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.529411911964416504e-01 1.647058874368667603e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.470588237047195435e-01 1.686274558305740356e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.411764711141586304e-01 1.725490242242813110e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.352941185235977173e-01 1.764705926179885864e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.294117659330368042e-01 1.803921610116958618e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.235294133424758911e-01 1.843137294054031372e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.176470607519149780e-01 1.882352977991104126e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.117647081613540649e-01 1.921568661928176880e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.058823555707931519e-01 1.960784345865249634e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.000000029802322388e-01 2.000000029802322388e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.941176503896713257e-01 2.039215713739395142e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.882352977991104126e-01 2.078431397676467896e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.823529452085494995e-01 2.117647081613540649e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.764705926179885864e-01 2.156862765550613403e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.705882400274276733e-01 2.196078449487686157e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.647058874368667603e-01 2.235294133424758911e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.588235348463058472e-01 2.274509817361831665e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.529411822557449341e-01 2.313725501298904419e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.470588296651840210e-01 2.352941185235977173e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.411764770746231079e-01 2.392156869173049927e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.352941244840621948e-01 2.431372553110122681e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.294117718935012817e-01 2.470588237047195435e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.235294118523597717e-01 2.509804069995880127e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.176470592617988586e-01 2.549019753932952881e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.117647066712379456e-01 2.588235437870025635e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.058823540806770325e-01 2.627451121807098389e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000014901161194e-01 2.666666805744171143e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.411764889955520630e-02 2.705882489681243896e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.823529630899429321e-02 2.745098173618316650e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.235294371843338013e-02 2.784313857555389404e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.647059112787246704e-02 2.823529541492462158e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.058823853731155396e-02 2.862745225429534912e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.470588594675064087e-02 2.901960909366607666e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.882352963089942932e-02 2.941176593303680420e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.294117704033851624e-02 2.980392277240753174e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.705882444977760315e-02 3.019607961177825928e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.117647185921669006e-02 3.058823645114898682e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.529411926865577698e-02 3.098039329051971436e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.941176481544971466e-02 3.137255012989044189e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.352941222488880157e-02 3.176470696926116943e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.764705963432788849e-02 3.215686380863189697e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.176470611244440079e-02 3.254902064800262451e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.882353056222200394e-03 3.294117748737335205e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.333333432674407959e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.882353056222200394e-03 3.372549116611480713e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.176470611244440079e-02 3.411764800548553467e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.764705963432788849e-02 3.450980484485626221e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.352941222488880157e-02 3.490196168422698975e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.941176481544971466e-02 3.529411852359771729e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.529411926865577698e-02 3.568627536296844482e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.117647185921669006e-02 3.607843220233917236e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.705882444977760315e-02 3.647058904170989990e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.294117704033851624e-02 3.686274588108062744e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.882352963089942932e-02 3.725490272045135498e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.470588594675064087e-02 3.764705955982208252e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.058823853731155396e-02 3.803921639919281006e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.647059112787246704e-02 3.843137323856353760e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.235294371843338013e-02 3.882353007793426514e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.823529630899429321e-02 3.921568691730499268e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.411764889955520630e-02 3.960784375667572021e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000014901161194e-01 4.000000059604644775e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.058823540806770325e-01 4.039215743541717529e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.117647066712379456e-01 4.078431427478790283e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.176470592617988586e-01 4.117647111415863037e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.235294118523597717e-01 4.156862795352935791e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.294117718935012817e-01 4.196078479290008545e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.352941244840621948e-01 4.235294163227081299e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.411764770746231079e-01 4.274509847164154053e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.470588296651840210e-01 4.313725531101226807e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.529411822557449341e-01 4.352941215038299561e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.588235348463058472e-01 4.392156898975372314e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.647058874368667603e-01 4.431372582912445068e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.705882400274276733e-01 4.470588266849517822e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.764705926179885864e-01 4.509803950786590576e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.823529452085494995e-01 4.549019634723663330e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.882352977991104126e-01 4.588235318660736084e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.941176503896713257e-01 4.627451002597808838e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.000000029802322388e-01 4.666666686534881592e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.058823555707931519e-01 4.705882370471954346e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.117647081613540649e-01 4.745098054409027100e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.176470607519149780e-01 4.784313738346099854e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.235294133424758911e-01 4.823529422283172607e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.294117659330368042e-01 4.862745106220245361e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.352941185235977173e-01 4.901960790157318115e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.411764711141586304e-01 4.941176474094390869e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.470588237047195435e-01 4.980392158031463623e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.529411911964416504e-01 5.019608139991760254e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.588235437870025635e-01 5.058823823928833008e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.647058963775634766e-01 5.098039507865905762e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.705882489681243896e-01 5.137255191802978516e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.764706015586853027e-01 5.176470875740051270e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.823529541492462158e-01 5.215686559677124023e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.882353067398071289e-01 5.254902243614196777e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.941176593303680420e-01 5.294117927551269531e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.000000119209289551e-01 5.333333611488342285e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.058823645114898682e-01 5.372549295425415039e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.117647171020507812e-01 5.411764979362487793e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.176470696926116943e-01 5.450980663299560547e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.235294222831726074e-01 5.490196347236633301e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.294117748737335205e-01 5.529412031173706055e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.352941274642944336e-01 5.568627715110778809e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.411764800548553467e-01 5.607843399047851562e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.470588326454162598e-01 5.647059082984924316e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.529411852359771729e-01 5.686274766921997070e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.588235378265380859e-01 5.725490450859069824e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.647058904170989990e-01 5.764706134796142578e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.705882430076599121e-01 5.803921818733215332e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.764705955982208252e-01 5.843137502670288086e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.823529481887817383e-01 5.882353186607360840e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.882353007793426514e-01 5.921568870544433594e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.941176533699035645e-01 5.960784554481506348e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.000000059604644775e-01 6.000000238418579102e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.058823585510253906e-01 6.039215922355651855e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.117647111415863037e-01 6.078431606292724609e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.176470637321472168e-01 6.117647290229797363e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.235294163227081299e-01 6.156862974166870117e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.294117689132690430e-01 6.196078658103942871e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.352941215038299561e-01 6.235294342041015625e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.411764740943908691e-01 6.274510025978088379e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.470588266849517822e-01 6.313725709915161133e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.529411792755126953e-01 6.352941393852233887e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.588235318660736084e-01 6.392157077789306641e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.647058844566345215e-01 6.431372761726379395e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.705882370471954346e-01 6.470588445663452148e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.764705896377563477e-01 6.509804129600524902e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.823529422283172607e-01 6.549019813537597656e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.882352948188781738e-01 6.588235497474670410e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.941176474094390869e-01 6.627451181411743164e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.000000000000000000e-01 6.666666865348815918e-01 1.000000000000000000e+00 -1.176470611244440079e-02 5.058823823928833008e-01 6.705882549285888672e-01 1.000000000000000000e+00 -2.352941222488880157e-02 5.117647051811218262e-01 6.745098233222961426e-01 1.000000000000000000e+00 -3.529411926865577698e-02 5.176470875740051270e-01 6.784313917160034180e-01 1.000000000000000000e+00 -4.705882444977760315e-02 5.235294103622436523e-01 6.823529601097106934e-01 1.000000000000000000e+00 -5.882352963089942932e-02 5.294117927551269531e-01 6.862745285034179688e-01 1.000000000000000000e+00 -7.058823853731155396e-02 5.352941155433654785e-01 6.901960968971252441e-01 1.000000000000000000e+00 -8.235294371843338013e-02 5.411764979362487793e-01 6.941176652908325195e-01 1.000000000000000000e+00 -9.411764889955520630e-02 5.470588207244873047e-01 6.980392336845397949e-01 1.000000000000000000e+00 -1.058823540806770325e-01 5.529412031173706055e-01 7.019608020782470703e-01 1.000000000000000000e+00 -1.176470592617988586e-01 5.588235259056091309e-01 7.058823704719543457e-01 1.000000000000000000e+00 -1.294117718935012817e-01 5.647059082984924316e-01 7.098039388656616211e-01 1.000000000000000000e+00 -1.411764770746231079e-01 5.705882310867309570e-01 7.137255072593688965e-01 1.000000000000000000e+00 -1.529411822557449341e-01 5.764706134796142578e-01 7.176470756530761719e-01 1.000000000000000000e+00 -1.647058874368667603e-01 5.823529362678527832e-01 7.215686440467834473e-01 1.000000000000000000e+00 -1.764705926179885864e-01 5.882353186607360840e-01 7.254902124404907227e-01 1.000000000000000000e+00 -1.882352977991104126e-01 5.941176414489746094e-01 7.294117808341979980e-01 1.000000000000000000e+00 -2.000000029802322388e-01 6.000000238418579102e-01 7.333333492279052734e-01 1.000000000000000000e+00 -2.117647081613540649e-01 6.058823466300964355e-01 7.372549176216125488e-01 1.000000000000000000e+00 -2.235294133424758911e-01 6.117647290229797363e-01 7.411764860153198242e-01 1.000000000000000000e+00 -2.352941185235977173e-01 6.176470518112182617e-01 7.450980544090270996e-01 1.000000000000000000e+00 -2.470588237047195435e-01 6.235294342041015625e-01 7.490196228027343750e-01 1.000000000000000000e+00 -2.588235437870025635e-01 6.294117569923400879e-01 7.529411911964416504e-01 1.000000000000000000e+00 -2.705882489681243896e-01 6.352941393852233887e-01 7.568627595901489258e-01 1.000000000000000000e+00 -2.823529541492462158e-01 6.411764621734619141e-01 7.607843279838562012e-01 1.000000000000000000e+00 -2.941176593303680420e-01 6.470588445663452148e-01 7.647058963775634766e-01 1.000000000000000000e+00 -3.058823645114898682e-01 6.529411673545837402e-01 7.686274647712707520e-01 1.000000000000000000e+00 -3.176470696926116943e-01 6.588235497474670410e-01 7.725490331649780273e-01 1.000000000000000000e+00 -3.294117748737335205e-01 6.647058725357055664e-01 7.764706015586853027e-01 1.000000000000000000e+00 -3.411764800548553467e-01 6.705882549285888672e-01 7.803921699523925781e-01 1.000000000000000000e+00 -3.529411852359771729e-01 6.764705777168273926e-01 7.843137383460998535e-01 1.000000000000000000e+00 -3.647058904170989990e-01 6.823529601097106934e-01 7.882353067398071289e-01 1.000000000000000000e+00 -3.764705955982208252e-01 6.882352828979492188e-01 7.921568751335144043e-01 1.000000000000000000e+00 -3.882353007793426514e-01 6.941176652908325195e-01 7.960784435272216797e-01 1.000000000000000000e+00 -4.000000059604644775e-01 6.999999880790710449e-01 8.000000119209289551e-01 1.000000000000000000e+00 -4.117647111415863037e-01 7.058823704719543457e-01 8.039215803146362305e-01 1.000000000000000000e+00 -4.235294163227081299e-01 7.117646932601928711e-01 8.078431487083435059e-01 1.000000000000000000e+00 -4.352941215038299561e-01 7.176470756530761719e-01 8.117647171020507812e-01 1.000000000000000000e+00 -4.470588266849517822e-01 7.235293984413146973e-01 8.156862854957580566e-01 1.000000000000000000e+00 -4.588235318660736084e-01 7.294117808341979980e-01 8.196078538894653320e-01 1.000000000000000000e+00 -4.705882370471954346e-01 7.352941036224365234e-01 8.235294222831726074e-01 1.000000000000000000e+00 -4.823529422283172607e-01 7.411764860153198242e-01 8.274509906768798828e-01 1.000000000000000000e+00 -4.941176474094390869e-01 7.470588088035583496e-01 8.313725590705871582e-01 1.000000000000000000e+00 -5.058823823928833008e-01 7.529411911964416504e-01 8.352941274642944336e-01 1.000000000000000000e+00 -5.176470875740051270e-01 7.588235139846801758e-01 8.392156958580017090e-01 1.000000000000000000e+00 -5.294117927551269531e-01 7.647058963775634766e-01 8.431372642517089844e-01 1.000000000000000000e+00 -5.411764979362487793e-01 7.705882191658020020e-01 8.470588326454162598e-01 1.000000000000000000e+00 -5.529412031173706055e-01 7.764706015586853027e-01 8.509804010391235352e-01 1.000000000000000000e+00 -5.647059082984924316e-01 7.823529243469238281e-01 8.549019694328308105e-01 1.000000000000000000e+00 -5.764706134796142578e-01 7.882353067398071289e-01 8.588235378265380859e-01 1.000000000000000000e+00 -5.882353186607360840e-01 7.941176295280456543e-01 8.627451062202453613e-01 1.000000000000000000e+00 -6.000000238418579102e-01 8.000000119209289551e-01 8.666666746139526367e-01 1.000000000000000000e+00 -6.117647290229797363e-01 8.058823347091674805e-01 8.705882430076599121e-01 1.000000000000000000e+00 -6.235294342041015625e-01 8.117647171020507812e-01 8.745098114013671875e-01 1.000000000000000000e+00 -6.352941393852233887e-01 8.176470398902893066e-01 8.784313797950744629e-01 1.000000000000000000e+00 -6.470588445663452148e-01 8.235294222831726074e-01 8.823529481887817383e-01 1.000000000000000000e+00 -6.588235497474670410e-01 8.294117450714111328e-01 8.862745165824890137e-01 1.000000000000000000e+00 -6.705882549285888672e-01 8.352941274642944336e-01 8.901960849761962891e-01 1.000000000000000000e+00 -6.823529601097106934e-01 8.411764502525329590e-01 8.941176533699035645e-01 1.000000000000000000e+00 -6.941176652908325195e-01 8.470588326454162598e-01 8.980392217636108398e-01 1.000000000000000000e+00 -7.058823704719543457e-01 8.529411554336547852e-01 9.019607901573181152e-01 1.000000000000000000e+00 -7.176470756530761719e-01 8.588235378265380859e-01 9.058823585510253906e-01 1.000000000000000000e+00 -7.294117808341979980e-01 8.647058606147766113e-01 9.098039269447326660e-01 1.000000000000000000e+00 -7.411764860153198242e-01 8.705882430076599121e-01 9.137254953384399414e-01 1.000000000000000000e+00 -7.529411911964416504e-01 8.764705657958984375e-01 9.176470637321472168e-01 1.000000000000000000e+00 -7.647058963775634766e-01 8.823529481887817383e-01 9.215686321258544922e-01 1.000000000000000000e+00 -7.764706015586853027e-01 8.882352709770202637e-01 9.254902005195617676e-01 1.000000000000000000e+00 -7.882353067398071289e-01 8.941176533699035645e-01 9.294117689132690430e-01 1.000000000000000000e+00 -8.000000119209289551e-01 8.999999761581420898e-01 9.333333373069763184e-01 1.000000000000000000e+00 -8.117647171020507812e-01 9.058823585510253906e-01 9.372549057006835938e-01 1.000000000000000000e+00 -8.235294222831726074e-01 9.117646813392639160e-01 9.411764740943908691e-01 1.000000000000000000e+00 -8.352941274642944336e-01 9.176470637321472168e-01 9.450980424880981445e-01 1.000000000000000000e+00 -8.470588326454162598e-01 9.235293865203857422e-01 9.490196108818054199e-01 1.000000000000000000e+00 -8.588235378265380859e-01 9.294117689132690430e-01 9.529411792755126953e-01 1.000000000000000000e+00 -8.705882430076599121e-01 9.352940917015075684e-01 9.568627476692199707e-01 1.000000000000000000e+00 -8.823529481887817383e-01 9.411764740943908691e-01 9.607843160629272461e-01 1.000000000000000000e+00 -8.941176533699035645e-01 9.470587968826293945e-01 9.647058844566345215e-01 1.000000000000000000e+00 -9.058823585510253906e-01 9.529411792755126953e-01 9.686274528503417969e-01 1.000000000000000000e+00 -9.176470637321472168e-01 9.588235020637512207e-01 9.725490212440490723e-01 1.000000000000000000e+00 -9.294117689132690430e-01 9.647058844566345215e-01 9.764705896377563477e-01 1.000000000000000000e+00 -9.411764740943908691e-01 9.705882072448730469e-01 9.803921580314636230e-01 1.000000000000000000e+00 -9.529411792755126953e-01 9.764705896377563477e-01 9.843137264251708984e-01 1.000000000000000000e+00 -9.647058844566345215e-01 9.823529124259948730e-01 9.882352948188781738e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.882352948188781738e-01 9.921568632125854492e-01 1.000000000000000000e+00 -9.882352948188781738e-01 9.941176176071166992e-01 9.960784316062927246e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/pink b/fastplotlib/utils/colormaps/pink deleted file mode 100644 index bf4d1310f..000000000 --- a/fastplotlib/utils/colormaps/pink +++ /dev/null @@ -1,256 +0,0 @@ -1.177999973297119141e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.370846927165985107e-01 2.541472017765045166e-02 2.541472017765045166e-02 1.000000000000000000e+00 -1.563693732023239136e-01 5.082944035530090332e-02 5.082944035530090332e-02 1.000000000000000000e+00 -1.756540685892105103e-01 7.624416053295135498e-02 7.624416053295135498e-02 1.000000000000000000e+00 -1.949387639760971069e-01 1.016588807106018066e-01 1.016588807106018066e-01 1.000000000000000000e+00 -2.087521255016326904e-01 1.128949373960494995e-01 1.128949373960494995e-01 1.000000000000000000e+00 -2.222919464111328125e-01 1.234221234917640686e-01 1.234221234917640686e-01 1.000000000000000000e+00 -2.358317822217941284e-01 1.339493095874786377e-01 1.339493095874786377e-01 1.000000000000000000e+00 -2.493716031312942505e-01 1.444765031337738037e-01 1.444765031337738037e-01 1.000000000000000000e+00 -2.606767714023590088e-01 1.527873724699020386e-01 1.527873724699020386e-01 1.000000000000000000e+00 -2.717467546463012695e-01 1.608649641275405884e-01 1.608649641275405884e-01 1.000000000000000000e+00 -2.828167378902435303e-01 1.689425557851791382e-01 1.689425557851791382e-01 1.000000000000000000e+00 -2.938867211341857910e-01 1.770201623439788818e-01 1.770201623439788818e-01 1.000000000000000000e+00 -3.036964535713195801e-01 1.840111762285232544e-01 1.840111762285232544e-01 1.000000000000000000e+00 -3.132961690425872803e-01 1.908211112022399902e-01 1.908211112022399902e-01 1.000000000000000000e+00 -3.228959143161773682e-01 1.976310461759567261e-01 1.976310461759567261e-01 1.000000000000000000e+00 -3.324956297874450684e-01 2.044409811496734619e-01 2.044409811496734619e-01 1.000000000000000000e+00 -3.412817418575286865e-01 2.105949074029922485e-01 2.105949074029922485e-01 1.000000000000000000e+00 -3.498764336109161377e-01 2.165944874286651611e-01 2.165944874286651611e-01 1.000000000000000000e+00 -3.584711253643035889e-01 2.225940674543380737e-01 2.225940674543380737e-01 1.000000000000000000e+00 -3.670658171176910400e-01 2.285936474800109863e-01 2.285936474800109863e-01 1.000000000000000000e+00 -3.750942945480346680e-01 2.341546267271041870e-01 2.341546267271041870e-01 1.000000000000000000e+00 -3.829458057880401611e-01 2.395785599946975708e-01 2.395785599946975708e-01 1.000000000000000000e+00 -3.907973468303680420e-01 2.450025081634521484e-01 2.450025081634521484e-01 1.000000000000000000e+00 -3.986488878726959229e-01 2.504264414310455322e-01 2.504264414310455322e-01 1.000000000000000000e+00 -4.060873091220855713e-01 2.555390596389770508e-01 2.555390596389770508e-01 1.000000000000000000e+00 -4.133604764938354492e-01 2.605271935462951660e-01 2.605271935462951660e-01 1.000000000000000000e+00 -4.206336438655853271e-01 2.655152976512908936e-01 2.655152976512908936e-01 1.000000000000000000e+00 -4.279068112373352051e-01 2.705034315586090088e-01 2.705034315586090088e-01 1.000000000000000000e+00 -4.348690211772918701e-01 2.752611339092254639e-01 2.752611339092254639e-01 1.000000000000000000e+00 -4.416757225990295410e-01 2.799036204814910889e-01 2.799036204814910889e-01 1.000000000000000000e+00 -4.484824538230895996e-01 2.845461070537567139e-01 2.845461070537567139e-01 1.000000000000000000e+00 -4.552891850471496582e-01 2.891885936260223389e-01 2.891885936260223389e-01 1.000000000000000000e+00 -4.618563950061798096e-01 2.936565577983856201e-01 2.936565577983856201e-01 1.000000000000000000e+00 -4.682762324810028076e-01 2.980171442031860352e-01 2.980171442031860352e-01 1.000000000000000000e+00 -4.746960401535034180e-01 3.023777306079864502e-01 3.023777306079864502e-01 1.000000000000000000e+00 -4.811158776283264160e-01 3.067383468151092529e-01 3.067383468151092529e-01 1.000000000000000000e+00 -4.873483479022979736e-01 3.109638094902038574e-01 3.109638094902038574e-01 1.000000000000000000e+00 -4.934403300285339355e-01 3.150879740715026855e-01 3.150879740715026855e-01 1.000000000000000000e+00 -4.995323121547698975e-01 3.192121386528015137e-01 3.192121386528015137e-01 1.000000000000000000e+00 -5.056242942810058594e-01 3.233362734317779541e-01 3.233362734317779541e-01 1.000000000000000000e+00 -5.115686058998107910e-01 3.273549675941467285e-01 3.273549675941467285e-01 1.000000000000000000e+00 -5.173786878585815430e-01 3.312777578830718994e-01 3.312777578830718994e-01 1.000000000000000000e+00 -5.231887698173522949e-01 3.352005779743194580e-01 3.352005779743194580e-01 1.000000000000000000e+00 -5.289988517761230469e-01 3.391233682632446289e-01 3.391233682632446289e-01 1.000000000000000000e+00 -5.346917510032653809e-01 3.429628610610961914e-01 3.429628610610961914e-01 1.000000000000000000e+00 -5.402557849884033203e-01 3.467107713222503662e-01 3.467107713222503662e-01 1.000000000000000000e+00 -5.458198189735412598e-01 3.504586517810821533e-01 3.504586517810821533e-01 1.000000000000000000e+00 -5.513838529586791992e-01 3.542065322399139404e-01 3.542065322399139404e-01 1.000000000000000000e+00 -5.568546652793884277e-01 3.578888773918151855e-01 3.578888773918151855e-01 1.000000000000000000e+00 -5.622012615203857422e-01 3.614838123321533203e-01 3.614838123321533203e-01 1.000000000000000000e+00 -5.675478577613830566e-01 3.650787770748138428e-01 3.650787770748138428e-01 1.000000000000000000e+00 -5.728944540023803711e-01 3.686737418174743652e-01 3.686737418174743652e-01 1.000000000000000000e+00 -5.781672596931457520e-01 3.722169101238250732e-01 3.722169101238250732e-01 1.000000000000000000e+00 -5.833202004432678223e-01 3.756760060787200928e-01 3.756760060787200928e-01 1.000000000000000000e+00 -5.884730815887451172e-01 3.791350722312927246e-01 3.791350722312927246e-01 1.000000000000000000e+00 -5.936260223388671875e-01 3.825941383838653564e-01 3.825941383838653564e-01 1.000000000000000000e+00 -5.987208485603332520e-01 3.860127925872802734e-01 3.860127925872802734e-01 1.000000000000000000e+00 -6.036995649337768555e-01 3.893505334854125977e-01 3.893505334854125977e-01 1.000000000000000000e+00 -6.086783409118652344e-01 3.926883041858673096e-01 3.926883041858673096e-01 1.000000000000000000e+00 -6.136570572853088379e-01 3.960260748863220215e-01 3.960260748863220215e-01 1.000000000000000000e+00 -6.185908913612365723e-01 3.993324935436248779e-01 3.993324935436248779e-01 1.000000000000000000e+00 -6.234124898910522461e-01 4.025605618953704834e-01 4.025605618953704834e-01 1.000000000000000000e+00 -6.282340884208679199e-01 4.057886600494384766e-01 4.057886600494384766e-01 1.000000000000000000e+00 -6.330556869506835938e-01 4.090167284011840820e-01 4.090167284011840820e-01 1.000000000000000000e+00 -6.378430724143981934e-01 4.122210741043090820e-01 4.122210741043090820e-01 1.000000000000000000e+00 -6.425209045410156250e-01 4.153496026992797852e-01 4.153496026992797852e-01 1.000000000000000000e+00 -6.471986770629882812e-01 4.184781014919281006e-01 4.184781014919281006e-01 1.000000000000000000e+00 -6.518765091896057129e-01 4.216066002845764160e-01 4.216066002845764160e-01 1.000000000000000000e+00 -6.565293669700622559e-01 4.247179031372070312e-01 4.247179031372070312e-01 1.000000000000000000e+00 -6.610759496688842773e-01 4.277559816837310791e-01 4.277559816837310791e-01 1.000000000000000000e+00 -6.656225919723510742e-01 4.307940602302551270e-01 4.307940602302551270e-01 1.000000000000000000e+00 -6.701692342758178711e-01 4.338321387767791748e-01 4.338321387767791748e-01 1.000000000000000000e+00 -6.746985912322998047e-01 4.368582963943481445e-01 4.368582963943481445e-01 1.000000000000000000e+00 -6.791244149208068848e-01 4.398128688335418701e-01 4.398128688335418701e-01 1.000000000000000000e+00 -6.835502386093139648e-01 4.427674710750579834e-01 4.427674710750579834e-01 1.000000000000000000e+00 -6.879760026931762695e-01 4.457220435142517090e-01 4.457220435142517090e-01 1.000000000000000000e+00 -6.923911571502685547e-01 4.486693143844604492e-01 4.486693143844604492e-01 1.000000000000000000e+00 -6.967051029205322266e-01 4.515472948551177979e-01 4.515472948551177979e-01 1.000000000000000000e+00 -7.010189890861511230e-01 4.544253051280975342e-01 4.544253051280975342e-01 1.000000000000000000e+00 -7.053328752517700195e-01 4.573032855987548828e-01 4.573032855987548828e-01 1.000000000000000000e+00 -7.096418142318725586e-01 4.601778984069824219e-01 4.601778984069824219e-01 1.000000000000000000e+00 -7.138522267341613770e-01 4.629847109317779541e-01 4.629847109317779541e-01 1.000000000000000000e+00 -7.180625796318054199e-01 4.657915532588958740e-01 4.657915532588958740e-01 1.000000000000000000e+00 -7.222729921340942383e-01 4.685983955860137939e-01 4.685983955860137939e-01 1.000000000000000000e+00 -7.264833450317382812e-01 4.714052379131317139e-01 4.714052379131317139e-01 1.000000000000000000e+00 -7.305971384048461914e-01 4.741458594799041748e-01 4.741458594799041748e-01 1.000000000000000000e+00 -7.347109317779541016e-01 4.768864810466766357e-01 4.768864810466766357e-01 1.000000000000000000e+00 -7.388246655464172363e-01 4.796271026134490967e-01 4.796271026134490967e-01 1.000000000000000000e+00 -7.429384589195251465e-01 4.823677241802215576e-01 4.823677241802215576e-01 1.000000000000000000e+00 -7.469666004180908203e-01 4.850497841835021973e-01 4.850497841835021973e-01 1.000000000000000000e+00 -7.509904503822326660e-01 4.877288937568664551e-01 4.877288937568664551e-01 1.000000000000000000e+00 -7.550143003463745117e-01 4.904079735279083252e-01 4.904079735279083252e-01 1.000000000000000000e+00 -7.590381503105163574e-01 4.930870831012725830e-01 4.930870831012725830e-01 1.000000000000000000e+00 -7.609713077545166016e-01 4.987535476684570312e-01 4.957141280174255371e-01 1.000000000000000000e+00 -7.626847028732299805e-01 5.047340989112854004e-01 4.983356595039367676e-01 1.000000000000000000e+00 -7.643980383872985840e-01 5.107146501541137695e-01 5.009571909904479980e-01 1.000000000000000000e+00 -7.661113739013671875e-01 5.166952013969421387e-01 5.035787224769592285e-01 1.000000000000000000e+00 -7.678115963935852051e-01 5.224466323852539062e-01 5.061537027359008789e-01 1.000000000000000000e+00 -7.695096731185913086e-01 5.281598567962646484e-01 5.087208747863769531e-01 1.000000000000000000e+00 -7.712076902389526367e-01 5.338730812072753906e-01 5.112881064414978027e-01 1.000000000000000000e+00 -7.729057073593139648e-01 5.395863652229309082e-01 5.138552784919738770e-01 1.000000000000000000e+00 -7.745917439460754395e-01 5.451095700263977051e-01 5.163816809654235840e-01 1.000000000000000000e+00 -7.762749791145324707e-01 5.505880713462829590e-01 5.188984274864196777e-01 1.000000000000000000e+00 -7.779582142829895020e-01 5.560666322708129883e-01 5.214152336120605469e-01 1.000000000000000000e+00 -7.796413898468017578e-01 5.615451931953430176e-01 5.239320397377014160e-01 1.000000000000000000e+00 -7.813135385513305664e-01 5.668653845787048340e-01 5.264118909835815430e-01 1.000000000000000000e+00 -7.829821705818176270e-01 5.721361041069030762e-01 5.288802981376647949e-01 1.000000000000000000e+00 -7.846508026123046875e-01 5.774068832397460938e-01 5.313486456871032715e-01 1.000000000000000000e+00 -7.863194346427917480e-01 5.826776623725891113e-01 5.338169932365417480e-01 1.000000000000000000e+00 -7.879778146743774414e-01 5.878157019615173340e-01 5.362532734870910645e-01 1.000000000000000000e+00 -7.896321415901184082e-01 5.929006338119506836e-01 5.386766791343688965e-01 1.000000000000000000e+00 -7.912864685058593750e-01 5.979856252670288086e-01 5.411000847816467285e-01 1.000000000000000000e+00 -7.929407358169555664e-01 6.030705571174621582e-01 5.435234904289245605e-01 1.000000000000000000e+00 -7.945858240127563477e-01 6.080438494682312012e-01 5.459182262420654297e-01 1.000000000000000000e+00 -7.962263226509094238e-01 6.129613518714904785e-01 5.482985973358154297e-01 1.000000000000000000e+00 -7.978667616844177246e-01 6.178787946701049805e-01 5.506790280342102051e-01 1.000000000000000000e+00 -7.995072603225708008e-01 6.227962374687194824e-01 5.530594587326049805e-01 1.000000000000000000e+00 -8.011394739151000977e-01 6.276196241378784180e-01 5.554146170616149902e-01 1.000000000000000000e+00 -8.027666211128234863e-01 6.323851943016052246e-01 5.577542781829833984e-01 1.000000000000000000e+00 -8.043937087059020996e-01 6.371507048606872559e-01 5.600939393043518066e-01 1.000000000000000000e+00 -8.060208559036254883e-01 6.419162154197692871e-01 5.624336004257202148e-01 1.000000000000000000e+00 -8.076403737068176270e-01 6.466026306152343750e-01 5.647512078285217285e-01 1.000000000000000000e+00 -8.092541694641113281e-01 6.512297987937927246e-01 5.670523047447204590e-01 1.000000000000000000e+00 -8.108679652214050293e-01 6.558570265769958496e-01 5.693534016609191895e-01 1.000000000000000000e+00 -8.124817013740539551e-01 6.604841947555541992e-01 5.716544985771179199e-01 1.000000000000000000e+00 -8.140887618064880371e-01 6.650443673133850098e-01 5.739361643791198730e-01 1.000000000000000000e+00 -8.156895637512207031e-01 6.695438027381896973e-01 5.762000679969787598e-01 1.000000000000000000e+00 -8.172904253005981445e-01 6.740431785583496094e-01 5.784639716148376465e-01 1.000000000000000000e+00 -8.188912868499755859e-01 6.785426139831542969e-01 5.807278752326965332e-01 1.000000000000000000e+00 -8.204862475395202637e-01 6.829862594604492188e-01 5.829752683639526367e-01 1.000000000000000000e+00 -8.220748901367187500e-01 6.873686313629150391e-01 5.852044820785522461e-01 1.000000000000000000e+00 -8.236634731292724609e-01 6.917509436607360840e-01 5.874336957931518555e-01 1.000000000000000000e+00 -8.252520561218261719e-01 6.961332559585571289e-01 5.896629095077514648e-01 1.000000000000000000e+00 -8.268352150917053223e-01 7.004691362380981445e-01 5.918776988983154297e-01 1.000000000000000000e+00 -8.284112215042114258e-01 7.047430276870727539e-01 5.940732955932617188e-01 1.000000000000000000e+00 -8.299872279167175293e-01 7.090169191360473633e-01 5.962689518928527832e-01 1.000000000000000000e+00 -8.315631747245788574e-01 7.132907509803771973e-01 5.984645485877990723e-01 1.000000000000000000e+00 -8.331346511840820312e-01 7.175262570381164551e-01 6.006479263305664062e-01 1.000000000000000000e+00 -8.346987962722778320e-01 7.216993570327758789e-01 6.028114557266235352e-01 1.000000000000000000e+00 -8.362629413604736328e-01 7.258723974227905273e-01 6.049749255180358887e-01 1.000000000000000000e+00 -8.378270864486694336e-01 7.300454974174499512e-01 6.071383953094482422e-01 1.000000000000000000e+00 -8.393873572349548340e-01 7.341871857643127441e-01 6.092916131019592285e-01 1.000000000000000000e+00 -8.409398794174194336e-01 7.382661104202270508e-01 6.114242672920227051e-01 1.000000000000000000e+00 -8.424923419952392578e-01 7.423450946807861328e-01 6.135568618774414062e-01 1.000000000000000000e+00 -8.440448641777038574e-01 7.464240193367004395e-01 6.156894564628601074e-01 1.000000000000000000e+00 -8.455941677093505859e-01 7.504779100418090820e-01 6.178137660026550293e-01 1.000000000000000000e+00 -8.471353054046630859e-01 7.544691562652587891e-01 6.199172139167785645e-01 1.000000000000000000e+00 -8.486764430999755859e-01 7.584604024887084961e-01 6.220206618309020996e-01 1.000000000000000000e+00 -8.502176403999328613e-01 7.624516487121582031e-01 6.241241693496704102e-01 1.000000000000000000e+00 -8.517560958862304688e-01 7.664231657981872559e-01 6.262208223342895508e-01 1.000000000000000000e+00 -8.532858490943908691e-01 7.703316807746887207e-01 6.282958984375000000e-01 1.000000000000000000e+00 -8.548156619071960449e-01 7.742401361465454102e-01 6.303709149360656738e-01 1.000000000000000000e+00 -8.563454151153564453e-01 7.781485915184020996e-01 6.324459910392761230e-01 1.000000000000000000e+00 -8.578731417655944824e-01 7.820423245429992676e-01 6.345158815383911133e-01 1.000000000000000000e+00 -8.593918085098266602e-01 7.858732342720031738e-01 6.365640163421630859e-01 1.000000000000000000e+00 -8.609104752540588379e-01 7.897040843963623047e-01 6.386121511459350586e-01 1.000000000000000000e+00 -8.624291419982910156e-01 7.935349941253662109e-01 6.406602859497070312e-01 1.000000000000000000e+00 -8.639463186264038086e-01 7.973554730415344238e-01 6.427046656608581543e-01 1.000000000000000000e+00 -8.654543161392211914e-01 8.011132478713989258e-01 6.447265744209289551e-01 1.000000000000000000e+00 -8.669623732566833496e-01 8.048710227012634277e-01 6.467485427856445312e-01 1.000000000000000000e+00 -8.684704303741455078e-01 8.086287379264831543e-01 6.487704515457153320e-01 1.000000000000000000e+00 -8.699774742126464844e-01 8.123799562454223633e-01 6.507899761199951172e-01 1.000000000000000000e+00 -8.714751601219177246e-01 8.160688281059265137e-01 6.527867317199707031e-01 1.000000000000000000e+00 -8.729728460311889648e-01 8.197576403617858887e-01 6.547834277153015137e-01 1.000000000000000000e+00 -8.744705319404602051e-01 8.234465122222900391e-01 6.567801833152770996e-01 1.000000000000000000e+00 -8.759676814079284668e-01 8.271322250366210938e-01 6.587757468223571777e-01 1.000000000000000000e+00 -8.774549961090087891e-01 8.307553529739379883e-01 6.607485413551330566e-01 1.000000000000000000e+00 -8.789423108100891113e-01 8.343784213066101074e-01 6.627212762832641602e-01 1.000000000000000000e+00 -8.804295659065246582e-01 8.380015492439270020e-01 6.646940708160400391e-01 1.000000000000000000e+00 -8.819168806076049805e-01 8.416246771812438965e-01 6.666668057441711426e-01 1.000000000000000000e+00 -8.833940625190734863e-01 8.451860547065734863e-01 6.686158776283264160e-01 1.000000000000000000e+00 -8.848711848258972168e-01 8.487474322319030762e-01 6.705649495124816895e-01 1.000000000000000000e+00 -8.863483667373657227e-01 8.523087501525878906e-01 6.725139617919921875e-01 1.000000000000000000e+00 -8.878255486488342285e-01 8.558701276779174805e-01 6.744630336761474609e-01 1.000000000000000000e+00 -8.892933130264282227e-01 8.593752384185791016e-01 6.763908863067626953e-01 1.000000000000000000e+00 -8.907606005668640137e-01 8.628775477409362793e-01 6.783177256584167480e-01 1.000000000000000000e+00 -8.922278881072998047e-01 8.663798570632934570e-01 6.802445054054260254e-01 1.000000000000000000e+00 -8.936951160430908203e-01 8.698821663856506348e-01 6.821713447570800781e-01 1.000000000000000000e+00 -8.951537013053894043e-01 8.733335137367248535e-01 6.840785145759582520e-01 1.000000000000000000e+00 -8.966113328933715820e-01 8.767794966697692871e-01 6.859835386276245117e-01 1.000000000000000000e+00 -8.980690240859985352e-01 8.802254796028137207e-01 6.878886222839355469e-01 1.000000000000000000e+00 -8.995266556739807129e-01 8.836714625358581543e-01 6.897937059402465820e-01 1.000000000000000000e+00 -9.009762406349182129e-01 8.870717287063598633e-01 6.916805505752563477e-01 1.000000000000000000e+00 -9.024245142936706543e-01 8.904643058776855469e-01 6.935644149780273438e-01 1.000000000000000000e+00 -9.038727879524230957e-01 8.938569426536560059e-01 6.954482197761535645e-01 1.000000000000000000e+00 -9.053210616111755371e-01 8.972495794296264648e-01 6.973320245742797852e-01 1.000000000000000000e+00 -9.067617058753967285e-01 9.006007909774780273e-01 6.991994976997375488e-01 1.000000000000000000e+00 -9.082005620002746582e-01 9.039422273635864258e-01 7.010630369186401367e-01 1.000000000000000000e+00 -9.096394181251525879e-01 9.072837233543395996e-01 7.029266357421875000e-01 1.000000000000000000e+00 -9.110783338546752930e-01 9.106252193450927734e-01 7.047901749610900879e-01 1.000000000000000000e+00 -9.125102162361145020e-01 9.125102162361145020e-01 7.093620300292968750e-01 1.000000000000000000e+00 -9.139399528503417969e-01 9.139399528503417969e-01 7.147805094718933105e-01 1.000000000000000000e+00 -9.153696894645690918e-01 9.153696894645690918e-01 7.201990485191345215e-01 1.000000000000000000e+00 -9.167994260787963867e-01 9.167994260787963867e-01 7.256175279617309570e-01 1.000000000000000000e+00 -9.182226061820983887e-01 9.182226061820983887e-01 7.309225797653198242e-01 1.000000000000000000e+00 -9.196432232856750488e-01 9.196432232856750488e-01 7.361822128295898438e-01 1.000000000000000000e+00 -9.210637807846069336e-01 9.210637807846069336e-01 7.414418458938598633e-01 1.000000000000000000e+00 -9.224843978881835938e-01 9.224843978881835938e-01 7.467014789581298828e-01 1.000000000000000000e+00 -9.238992333412170410e-01 9.238992333412170410e-01 7.518643140792846680e-01 1.000000000000000000e+00 -9.253111481666564941e-01 9.253111481666564941e-01 7.569786310195922852e-01 1.000000000000000000e+00 -9.267231225967407227e-01 9.267231225967407227e-01 7.620930075645446777e-01 1.000000000000000000e+00 -9.281350374221801758e-01 9.281350374221801758e-01 7.672073841094970703e-01 1.000000000000000000e+00 -9.295416474342346191e-01 9.295416474342346191e-01 7.722387313842773438e-01 1.000000000000000000e+00 -9.309449195861816406e-01 9.309449195861816406e-01 7.772189378738403320e-01 1.000000000000000000e+00 -9.323482513427734375e-01 9.323482513427734375e-01 7.821991443634033203e-01 1.000000000000000000e+00 -9.337515234947204590e-01 9.337515234947204590e-01 7.871793508529663086e-01 1.000000000000000000e+00 -9.351500272750854492e-01 9.351500272750854492e-01 7.920885682106018066e-01 1.000000000000000000e+00 -9.365448951721191406e-01 9.365448951721191406e-01 7.969445586204528809e-01 1.000000000000000000e+00 -9.379398226737976074e-01 9.379398226737976074e-01 8.018004894256591797e-01 1.000000000000000000e+00 -9.393346905708312988e-01 9.393346905708312988e-01 8.066564202308654785e-01 1.000000000000000000e+00 -9.407252073287963867e-01 9.407252073287963867e-01 8.114522099494934082e-01 1.000000000000000000e+00 -9.421116709709167480e-01 9.421116709709167480e-01 8.161932826042175293e-01 1.000000000000000000e+00 -9.434981942176818848e-01 9.434981942176818848e-01 8.209343552589416504e-01 1.000000000000000000e+00 -9.448846578598022461e-01 9.448846578598022461e-01 8.256753683090209961e-01 1.000000000000000000e+00 -9.462673068046569824e-01 9.462673068046569824e-01 8.303651809692382812e-01 1.000000000000000000e+00 -9.476456642150878906e-01 9.476456642150878906e-01 8.349984884262084961e-01 1.000000000000000000e+00 -9.490239620208740234e-01 9.490239620208740234e-01 8.396318554878234863e-01 1.000000000000000000e+00 -9.504023194313049316e-01 9.504023194313049316e-01 8.442652225494384766e-01 1.000000000000000000e+00 -9.517771601676940918e-01 9.517771601676940918e-01 8.488555550575256348e-01 1.000000000000000000e+00 -9.531473517417907715e-01 9.531473517417907715e-01 8.533886075019836426e-01 1.000000000000000000e+00 -9.545175433158874512e-01 9.545175433158874512e-01 8.579216599464416504e-01 1.000000000000000000e+00 -9.558877348899841309e-01 9.558877348899841309e-01 8.624547123908996582e-01 1.000000000000000000e+00 -9.572549462318420410e-01 9.572549462318420410e-01 8.669519424438476562e-01 1.000000000000000000e+00 -9.586172103881835938e-01 9.586172103881835938e-01 8.713911175727844238e-01 1.000000000000000000e+00 -9.599794745445251465e-01 9.599794745445251465e-01 8.758302927017211914e-01 1.000000000000000000e+00 -9.613417983055114746e-01 9.613417983055114746e-01 8.802694082260131836e-01 1.000000000000000000e+00 -9.627014994621276855e-01 9.627014994621276855e-01 8.846789598464965820e-01 1.000000000000000000e+00 -9.640561342239379883e-01 9.640561342239379883e-01 8.890291452407836914e-01 1.000000000000000000e+00 -9.654107689857482910e-01 9.654107689857482910e-01 8.933793902397155762e-01 1.000000000000000000e+00 -9.667654037475585938e-01 9.667654037475585938e-01 8.977295756340026855e-01 1.000000000000000000e+00 -9.681178331375122070e-01 9.681178331375122070e-01 9.020560979843139648e-01 1.000000000000000000e+00 -9.694647789001464844e-01 9.694647789001464844e-01 9.063233137130737305e-01 1.000000000000000000e+00 -9.708117246627807617e-01 9.708117246627807617e-01 9.105905294418334961e-01 1.000000000000000000e+00 -9.721587300300598145e-01 9.721587300300598145e-01 9.148576855659484863e-01 1.000000000000000000e+00 -9.735038876533508301e-01 9.735038876533508301e-01 9.191060662269592285e-01 1.000000000000000000e+00 -9.748434424400329590e-01 9.748434424400329590e-01 9.232942461967468262e-01 1.000000000000000000e+00 -9.761829972267150879e-01 9.761829972267150879e-01 9.274823665618896484e-01 1.000000000000000000e+00 -9.775225520133972168e-01 9.775225520133972168e-01 9.316705465316772461e-01 1.000000000000000000e+00 -9.788607358932495117e-01 9.788607358932495117e-01 9.358444809913635254e-01 1.000000000000000000e+00 -9.801928400993347168e-01 9.801928400993347168e-01 9.399579763412475586e-01 1.000000000000000000e+00 -9.815250039100646973e-01 9.815250039100646973e-01 9.440715312957763672e-01 1.000000000000000000e+00 -9.828571677207946777e-01 9.828571677207946777e-01 9.481850862503051758e-01 1.000000000000000000e+00 -9.841882586479187012e-01 9.841882586479187012e-01 9.522885084152221680e-01 1.000000000000000000e+00 -9.855129718780517578e-01 9.855129718780517578e-01 9.563313722610473633e-01 1.000000000000000000e+00 -9.868376851081848145e-01 9.868376851081848145e-01 9.603742361068725586e-01 1.000000000000000000e+00 -9.881623983383178711e-01 9.881623983383178711e-01 9.644170999526977539e-01 1.000000000000000000e+00 -9.894865155220031738e-01 9.894865155220031738e-01 9.684535861015319824e-01 1.000000000000000000e+00 -9.908043146133422852e-01 9.908043146133422852e-01 9.724292755126953125e-01 1.000000000000000000e+00 -9.921221137046813965e-01 9.921221137046813965e-01 9.764049649238586426e-01 1.000000000000000000e+00 -9.934399127960205078e-01 9.934399127960205078e-01 9.803806543350219727e-01 1.000000000000000000e+00 -9.947574138641357422e-01 9.947574138641357422e-01 9.843532443046569824e-01 1.000000000000000000e+00 -9.960680603981018066e-01 9.960680603981018066e-01 9.882649183273315430e-01 1.000000000000000000e+00 -9.973787069320678711e-01 9.973787069320678711e-01 9.921766519546508789e-01 1.000000000000000000e+00 -9.986893534660339355e-01 9.986893534660339355e-01 9.960883259773254395e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/plasma b/fastplotlib/utils/colormaps/plasma deleted file mode 100644 index 3675e89ce..000000000 --- a/fastplotlib/utils/colormaps/plasma +++ /dev/null @@ -1,256 +0,0 @@ -5.038300156593322754e-02 2.980300039052963257e-02 5.279750227928161621e-01 1.000000000000000000e+00 -6.353600323200225830e-02 2.842600084841251373e-02 5.331240296363830566e-01 1.000000000000000000e+00 -7.535299658775329590e-02 2.720599994063377380e-02 5.380070209503173828e-01 1.000000000000000000e+00 -8.622200042009353638e-02 2.612500078976154327e-02 5.426579713821411133e-01 1.000000000000000000e+00 -9.637899696826934814e-02 2.516500093042850494e-02 5.471029877662658691e-01 1.000000000000000000e+00 -1.059800013899803162e-01 2.430900000035762787e-02 5.513679981231689453e-01 1.000000000000000000e+00 -1.151240020990371704e-01 2.355599962174892426e-02 5.554680228233337402e-01 1.000000000000000000e+00 -1.239029988646507263e-01 2.287800051271915436e-02 5.594230294227600098e-01 1.000000000000000000e+00 -1.323810070753097534e-01 2.225800044834613800e-02 5.632500052452087402e-01 1.000000000000000000e+00 -1.406030058860778809e-01 2.168699912726879120e-02 5.669590234756469727e-01 1.000000000000000000e+00 -1.486070007085800171e-01 2.115399949252605438e-02 5.705620050430297852e-01 1.000000000000000000e+00 -1.564210057258605957e-01 2.065099962055683136e-02 5.740650296211242676e-01 1.000000000000000000e+00 -1.640699952840805054e-01 2.017099969089031219e-02 5.774779915809631348e-01 1.000000000000000000e+00 -1.715739965438842773e-01 1.970599964261054993e-02 5.808060169219970703e-01 1.000000000000000000e+00 -1.789499968290328979e-01 1.925200037658214569e-02 5.840539932250976562e-01 1.000000000000000000e+00 -1.862130016088485718e-01 1.880300045013427734e-02 5.872280001640319824e-01 1.000000000000000000e+00 -1.933739930391311646e-01 1.835400052368640900e-02 5.903300046920776367e-01 1.000000000000000000e+00 -2.004449963569641113e-01 1.790199987590312958e-02 5.933640003204345703e-01 1.000000000000000000e+00 -2.074349969625473022e-01 1.744199916720390320e-02 5.963330268859863281e-01 1.000000000000000000e+00 -2.143500000238418579e-01 1.697300001978874207e-02 5.992389917373657227e-01 1.000000000000000000e+00 -2.211969941854476929e-01 1.649699918925762177e-02 6.020830273628234863e-01 1.000000000000000000e+00 -2.279829978942871094e-01 1.600700058043003082e-02 6.048669815063476562e-01 1.000000000000000000e+00 -2.347149997949600220e-01 1.550200022757053375e-02 6.075919866561889648e-01 1.000000000000000000e+00 -2.413959950208663940e-01 1.497900020331144333e-02 6.102589964866638184e-01 1.000000000000000000e+00 -2.480320036411285400e-01 1.443899981677532196e-02 6.128680109977722168e-01 1.000000000000000000e+00 -2.546269893646240234e-01 1.388199999928474426e-02 6.154189705848693848e-01 1.000000000000000000e+00 -2.611829936504364014e-01 1.330799981951713562e-02 6.179109811782836914e-01 1.000000000000000000e+00 -2.677029967308044434e-01 1.271599996834993362e-02 6.203460097312927246e-01 1.000000000000000000e+00 -2.741909921169281006e-01 1.210900023579597473e-02 6.227220296859741211e-01 1.000000000000000000e+00 -2.806479930877685547e-01 1.148799993097782135e-02 6.250380277633666992e-01 1.000000000000000000e+00 -2.870759963989257812e-01 1.085499953478574753e-02 6.272950172424316406e-01 1.000000000000000000e+00 -2.934780120849609375e-01 1.021299976855516434e-02 6.294900178909301758e-01 1.000000000000000000e+00 -2.998549938201904297e-01 9.561000391840934753e-03 6.316239833831787109e-01 1.000000000000000000e+00 -3.062100112438201904e-01 8.902000263333320618e-03 6.336939930915832520e-01 1.000000000000000000e+00 -3.125430047512054443e-01 8.239000104367733002e-03 6.356999874114990234e-01 1.000000000000000000e+00 -3.188560009002685547e-01 7.575999945402145386e-03 6.376399993896484375e-01 1.000000000000000000e+00 -3.251500129699707031e-01 6.914999801665544510e-03 6.395120024681091309e-01 1.000000000000000000e+00 -3.314259946346282959e-01 6.260999944061040878e-03 6.413159966468811035e-01 1.000000000000000000e+00 -3.376829922199249268e-01 5.617999937385320663e-03 6.430490016937255859e-01 1.000000000000000000e+00 -3.439249992370605469e-01 4.991000052541494370e-03 6.447100043296813965e-01 1.000000000000000000e+00 -3.501499891281127930e-01 4.381999839097261429e-03 6.462979912757873535e-01 1.000000000000000000e+00 -3.563590049743652344e-01 3.798000048846006393e-03 6.478099822998046875e-01 1.000000000000000000e+00 -3.625530004501342773e-01 3.243000013753771782e-03 6.492450237274169922e-01 1.000000000000000000e+00 -3.687329888343811035e-01 2.724000019952654839e-03 6.506010293960571289e-01 1.000000000000000000e+00 -3.748970031738281250e-01 2.245000097900629044e-03 6.518759727478027344e-01 1.000000000000000000e+00 -3.810470104217529297e-01 1.813999959267675877e-03 6.530680060386657715e-01 1.000000000000000000e+00 -3.871830105781555176e-01 1.433999976143240929e-03 6.541770100593566895e-01 1.000000000000000000e+00 -3.933039903640747070e-01 1.113999984227120876e-03 6.551989912986755371e-01 1.000000000000000000e+00 -3.994109928607940674e-01 8.590000215917825699e-04 6.561329960823059082e-01 1.000000000000000000e+00 -4.055030047893524170e-01 6.779999821446835995e-04 6.569769978523254395e-01 1.000000000000000000e+00 -4.115799963474273682e-01 5.770000279881060123e-04 6.577299833297729492e-01 1.000000000000000000e+00 -4.176419973373413086e-01 5.639999872073531151e-04 6.583899855613708496e-01 1.000000000000000000e+00 -4.236890077590942383e-01 6.459999713115394115e-04 6.589559912681579590e-01 1.000000000000000000e+00 -4.297190010547637939e-01 8.309999830089509487e-04 6.594250202178955078e-01 1.000000000000000000e+00 -4.357340037822723389e-01 1.126999966800212860e-03 6.597970128059387207e-01 1.000000000000000000e+00 -4.417319893836975098e-01 1.539999968372285366e-03 6.600689888000488281e-01 1.000000000000000000e+00 -4.477140009403228760e-01 2.080000005662441254e-03 6.602399945259094238e-01 1.000000000000000000e+00 -4.536769986152648926e-01 2.755000023171305656e-03 6.603099703788757324e-01 1.000000000000000000e+00 -4.596230089664459229e-01 3.573999973013997078e-03 6.602770090103149414e-01 1.000000000000000000e+00 -4.655500054359436035e-01 4.544999916106462479e-03 6.601390242576599121e-01 1.000000000000000000e+00 -4.714570045471191406e-01 5.677999928593635559e-03 6.598970293998718262e-01 1.000000000000000000e+00 -4.773440062999725342e-01 6.980000063776969910e-03 6.595489978790283203e-01 1.000000000000000000e+00 -4.832099974155426025e-01 8.460000157356262207e-03 6.590949892997741699e-01 1.000000000000000000e+00 -4.890550076961517334e-01 1.012699957937002182e-02 6.585339903831481934e-01 1.000000000000000000e+00 -4.948770105838775635e-01 1.198999956250190735e-02 6.578649878501892090e-01 1.000000000000000000e+00 -5.006780028343200684e-01 1.405499968677759171e-02 6.570879817008972168e-01 1.000000000000000000e+00 -5.064539909362792969e-01 1.633300073444843292e-02 6.562020182609558105e-01 1.000000000000000000e+00 -5.122060179710388184e-01 1.883300021290779114e-02 6.552090048789978027e-01 1.000000000000000000e+00 -5.179330110549926758e-01 2.156299911439418793e-02 6.541090011596679688e-01 1.000000000000000000e+00 -5.236330032348632812e-01 2.453199960291385651e-02 6.529009938240051270e-01 1.000000000000000000e+00 -5.293059945106506348e-01 2.774699963629245758e-02 6.515859961509704590e-01 1.000000000000000000e+00 -5.349519848823547363e-01 3.121699951589107513e-02 6.501650214195251465e-01 1.000000000000000000e+00 -5.405700206756591797e-01 3.494999930262565613e-02 6.486399769783020020e-01 1.000000000000000000e+00 -5.461570024490356445e-01 3.895400092005729675e-02 6.470100283622741699e-01 1.000000000000000000e+00 -5.517150163650512695e-01 4.313600063323974609e-02 6.452770233154296875e-01 1.000000000000000000e+00 -5.572429895401000977e-01 4.733100160956382751e-02 6.434429883956909180e-01 1.000000000000000000e+00 -5.627380013465881348e-01 5.154500156641006470e-02 6.415089964866638184e-01 1.000000000000000000e+00 -5.682010054588317871e-01 5.577800050377845764e-02 6.394770145416259766e-01 1.000000000000000000e+00 -5.736320018768310547e-01 6.002800166606903076e-02 6.373490095138549805e-01 1.000000000000000000e+00 -5.790290236473083496e-01 6.429599970579147339e-02 6.351259946823120117e-01 1.000000000000000000e+00 -5.843909978866577148e-01 6.857900321483612061e-02 6.328120231628417969e-01 1.000000000000000000e+00 -5.897189974784851074e-01 7.287800312042236328e-02 6.304079890251159668e-01 1.000000000000000000e+00 -5.950109958648681641e-01 7.718999683856964111e-02 6.279169917106628418e-01 1.000000000000000000e+00 -6.002659797668457031e-01 8.151599764823913574e-02 6.253420114517211914e-01 1.000000000000000000e+00 -6.054850220680236816e-01 8.585400134325027466e-02 6.226860284805297852e-01 1.000000000000000000e+00 -6.106669902801513672e-01 9.020400047302246094e-02 6.199510097503662109e-01 1.000000000000000000e+00 -6.158120036125183105e-01 9.456399828195571899e-02 6.171399950981140137e-01 1.000000000000000000e+00 -6.209189891815185547e-01 9.893400222063064575e-02 6.142569780349731445e-01 1.000000000000000000e+00 -6.259869933128356934e-01 1.033120006322860718e-01 6.113049983978271484e-01 1.000000000000000000e+00 -6.310170292854309082e-01 1.076989993453025818e-01 6.082869768142700195e-01 1.000000000000000000e+00 -6.360080242156982422e-01 1.120920032262802124e-01 6.052049994468688965e-01 1.000000000000000000e+00 -6.409590244293212891e-01 1.164920032024383545e-01 6.020650267601013184e-01 1.000000000000000000e+00 -6.458719968795776367e-01 1.208980008959770203e-01 5.988669991493225098e-01 1.000000000000000000e+00 -6.507459878921508789e-01 1.253090053796768188e-01 5.956169962882995605e-01 1.000000000000000000e+00 -6.555799841880798340e-01 1.297249943017959595e-01 5.923169851303100586e-01 1.000000000000000000e+00 -6.603739857673645020e-01 1.341439932584762573e-01 5.889710187911987305e-01 1.000000000000000000e+00 -6.651290059089660645e-01 1.385660022497177124e-01 5.855820178985595703e-01 1.000000000000000000e+00 -6.698449850082397461e-01 1.429920047521591187e-01 5.821539759635925293e-01 1.000000000000000000e+00 -6.745219826698303223e-01 1.474190056324005127e-01 5.786880254745483398e-01 1.000000000000000000e+00 -6.791599988937377930e-01 1.518480032682418823e-01 5.751889944076538086e-01 1.000000000000000000e+00 -6.837580204010009766e-01 1.562779992818832397e-01 5.716599822044372559e-01 1.000000000000000000e+00 -6.883180141448974609e-01 1.607089936733245850e-01 5.681030154228210449e-01 1.000000000000000000e+00 -6.928399801254272461e-01 1.651410013437271118e-01 5.645220279693603516e-01 1.000000000000000000e+00 -6.973239779472351074e-01 1.695729941129684448e-01 5.609189867973327637e-01 1.000000000000000000e+00 -7.017689943313598633e-01 1.740050017833709717e-01 5.572959780693054199e-01 1.000000000000000000e+00 -7.061780095100402832e-01 1.784369945526123047e-01 5.536569952964782715e-01 1.000000000000000000e+00 -7.105489969253540039e-01 1.828680038452148438e-01 5.500040054321289062e-01 1.000000000000000000e+00 -7.148830294609069824e-01 1.872989982366561890e-01 5.463380217552185059e-01 1.000000000000000000e+00 -7.191810011863708496e-01 1.917289942502975464e-01 5.426629781723022461e-01 1.000000000000000000e+00 -7.234439849853515625e-01 1.961580067873001099e-01 5.389810204505920410e-01 1.000000000000000000e+00 -7.276700139045715332e-01 2.005860060453414917e-01 5.352929830551147461e-01 1.000000000000000000e+00 -7.318620085716247559e-01 2.050130069255828857e-01 5.316010117530822754e-01 1.000000000000000000e+00 -7.360190153121948242e-01 2.094389945268630981e-01 5.279080271720886230e-01 1.000000000000000000e+00 -7.401430010795593262e-01 2.138639986515045166e-01 5.242159962654113770e-01 1.000000000000000000e+00 -7.442319989204406738e-01 2.182880043983459473e-01 5.205240249633789062e-01 1.000000000000000000e+00 -7.482889890670776367e-01 2.227109968662261963e-01 5.168340206146240234e-01 1.000000000000000000e+00 -7.523120045661926270e-01 2.271330058574676514e-01 5.131490230560302734e-01 1.000000000000000000e+00 -7.563040256500244141e-01 2.315549999475479126e-01 5.094680190086364746e-01 1.000000000000000000e+00 -7.602639794349670410e-01 2.359759956598281860e-01 5.057939887046813965e-01 1.000000000000000000e+00 -7.641929984092712402e-01 2.403959929943084717e-01 5.021259784698486328e-01 1.000000000000000000e+00 -7.680900096893310547e-01 2.448170036077499390e-01 4.984650015830993652e-01 1.000000000000000000e+00 -7.719579935073852539e-01 2.492370009422302246e-01 4.948129951953887939e-01 1.000000000000000000e+00 -7.757959961891174316e-01 2.536579966545104980e-01 4.911710023880004883e-01 1.000000000000000000e+00 -7.796040177345275879e-01 2.580780088901519775e-01 4.875389933586120605e-01 1.000000000000000000e+00 -7.833830118179321289e-01 2.624999880790710449e-01 4.839180111885070801e-01 1.000000000000000000e+00 -7.871329784393310547e-01 2.669219970703125000e-01 4.803070127964019775e-01 1.000000000000000000e+00 -7.908549904823303223e-01 2.713449895381927490e-01 4.767059981822967529e-01 1.000000000000000000e+00 -7.945489883422851562e-01 2.757700085639953613e-01 4.731169939041137695e-01 1.000000000000000000e+00 -7.982159852981567383e-01 2.801969945430755615e-01 4.695380032062530518e-01 1.000000000000000000e+00 -8.018550276756286621e-01 2.846260070800781250e-01 4.659709930419921875e-01 1.000000000000000000e+00 -8.054670095443725586e-01 2.890569865703582764e-01 4.624150097370147705e-01 1.000000000000000000e+00 -8.090519905090332031e-01 2.934910058975219727e-01 4.588699936866760254e-01 1.000000000000000000e+00 -8.126119971275329590e-01 2.979280054569244385e-01 4.553380012512207031e-01 1.000000000000000000e+00 -8.161439895629882812e-01 3.023679852485656738e-01 4.518159925937652588e-01 1.000000000000000000e+00 -8.196510076522827148e-01 3.068119883537292480e-01 4.483059942722320557e-01 1.000000000000000000e+00 -8.231319785118103027e-01 3.112609982490539551e-01 4.448060095310211182e-01 1.000000000000000000e+00 -8.265879750251770020e-01 3.157140016555786133e-01 4.413160085678100586e-01 1.000000000000000000e+00 -8.300179839134216309e-01 3.201720118522644043e-01 4.378359913825988770e-01 1.000000000000000000e+00 -8.334220051765441895e-01 3.246349990367889404e-01 4.343659877777099609e-01 1.000000000000000000e+00 -8.368009924888610840e-01 3.291049897670745850e-01 4.309050142765045166e-01 1.000000000000000000e+00 -8.401550054550170898e-01 3.335799872875213623e-01 4.274550080299377441e-01 1.000000000000000000e+00 -8.434839844703674316e-01 3.380619883537292480e-01 4.240129888057708740e-01 1.000000000000000000e+00 -8.467879891395568848e-01 3.425509929656982422e-01 4.205789864063262939e-01 1.000000000000000000e+00 -8.500660061836242676e-01 3.470480144023895264e-01 4.171530008316040039e-01 1.000000000000000000e+00 -8.533189892768859863e-01 3.515529930591583252e-01 4.137339890003204346e-01 1.000000000000000000e+00 -8.565469980239868164e-01 3.560659885406494141e-01 4.103220105171203613e-01 1.000000000000000000e+00 -8.597499728202819824e-01 3.605880141258239746e-01 4.069170057773590088e-01 1.000000000000000000e+00 -8.629270195960998535e-01 3.651190102100372314e-01 4.035190045833587646e-01 1.000000000000000000e+00 -8.660780191421508789e-01 3.696599900722503662e-01 4.001260101795196533e-01 1.000000000000000000e+00 -8.692029714584350586e-01 3.742119967937469482e-01 3.967379927635192871e-01 1.000000000000000000e+00 -8.723030090332031250e-01 3.787739872932434082e-01 3.933550119400024414e-01 1.000000000000000000e+00 -8.753759860992431641e-01 3.833470046520233154e-01 3.899759948253631592e-01 1.000000000000000000e+00 -8.784229755401611328e-01 3.879320025444030762e-01 3.865999877452850342e-01 1.000000000000000000e+00 -8.814430236816406250e-01 3.925290107727050781e-01 3.832289874553680420e-01 1.000000000000000000e+00 -8.844360113143920898e-01 3.971390128135681152e-01 3.798600137233734131e-01 1.000000000000000000e+00 -8.874019980430603027e-01 4.017620086669921875e-01 3.764939904212951660e-01 1.000000000000000000e+00 -8.903399705886840820e-01 4.063979983329772949e-01 3.731299936771392822e-01 1.000000000000000000e+00 -8.932499885559082031e-01 4.110479950904846191e-01 3.697679936885833740e-01 1.000000000000000000e+00 -8.961309790611267090e-01 4.157119989395141602e-01 3.664070069789886475e-01 1.000000000000000000e+00 -8.989840149879455566e-01 4.203920066356658936e-01 3.630470037460327148e-01 1.000000000000000000e+00 -9.018070101737976074e-01 4.250870048999786377e-01 3.596880137920379639e-01 1.000000000000000000e+00 -9.046009778976440430e-01 4.297969937324523926e-01 3.563289940357208252e-01 1.000000000000000000e+00 -9.073650240898132324e-01 4.345239996910095215e-01 3.529700040817260742e-01 1.000000000000000000e+00 -9.100980162620544434e-01 4.392679929733276367e-01 3.496100008487701416e-01 1.000000000000000000e+00 -9.128000140190124512e-01 4.440290033817291260e-01 3.462510108947753906e-01 1.000000000000000000e+00 -9.154710173606872559e-01 4.488070011138916016e-01 3.428899943828582764e-01 1.000000000000000000e+00 -9.181089997291564941e-01 4.536029994487762451e-01 3.395290076732635498e-01 1.000000000000000000e+00 -9.207140207290649414e-01 4.584169983863830566e-01 3.361659944057464600e-01 1.000000000000000000e+00 -9.232869744300842285e-01 4.632509946823120117e-01 3.328010141849517822e-01 1.000000000000000000e+00 -9.258249998092651367e-01 4.681029915809631348e-01 3.294349908828735352e-01 1.000000000000000000e+00 -9.283289909362792969e-01 4.729749858379364014e-01 3.260670006275177002e-01 1.000000000000000000e+00 -9.307979941368103027e-01 4.778670072555541992e-01 3.226970136165618896e-01 1.000000000000000000e+00 -9.332320094108581543e-01 4.827800095081329346e-01 3.193250000476837158e-01 1.000000000000000000e+00 -9.356300234794616699e-01 4.877119958400726318e-01 3.159520030021667480e-01 1.000000000000000000e+00 -9.379900097846984863e-01 4.926669895648956299e-01 3.125750124454498291e-01 1.000000000000000000e+00 -9.403129816055297852e-01 4.976420104503631592e-01 3.091970086097717285e-01 1.000000000000000000e+00 -9.425979852676391602e-01 5.026389956474304199e-01 3.058159947395324707e-01 1.000000000000000000e+00 -9.448440074920654297e-01 5.076580047607421875e-01 3.024330139160156250e-01 1.000000000000000000e+00 -9.470509886741638184e-01 5.126990079879760742e-01 2.990489900112152100e-01 1.000000000000000000e+00 -9.492170214653015137e-01 5.177630186080932617e-01 2.956619858741760254e-01 1.000000000000000000e+00 -9.513440132141113281e-01 5.228499770164489746e-01 2.922750115394592285e-01 1.000000000000000000e+00 -9.534279704093933105e-01 5.279600024223327637e-01 2.888830006122589111e-01 1.000000000000000000e+00 -9.554700255393981934e-01 5.330929756164550781e-01 2.854900062084197998e-01 1.000000000000000000e+00 -9.574689865112304688e-01 5.382500290870666504e-01 2.820959985256195068e-01 1.000000000000000000e+00 -9.594240188598632812e-01 5.434309840202331543e-01 2.787010073661804199e-01 1.000000000000000000e+00 -9.613360166549682617e-01 5.486360192298889160e-01 2.753050029277801514e-01 1.000000000000000000e+00 -9.632030129432678223e-01 5.538650155067443848e-01 2.719089984893798828e-01 1.000000000000000000e+00 -9.650239944458007812e-01 5.591179728507995605e-01 2.685129940509796143e-01 1.000000000000000000e+00 -9.667980074882507324e-01 5.643960237503051758e-01 2.651180028915405273e-01 1.000000000000000000e+00 -9.685260057449340820e-01 5.697000026702880859e-01 2.617209851741790771e-01 1.000000000000000000e+00 -9.702050089836120605e-01 5.750280022621154785e-01 2.583250105381011963e-01 1.000000000000000000e+00 -9.718350172042846680e-01 5.803819894790649414e-01 2.549310028553009033e-01 1.000000000000000000e+00 -9.734159708023071289e-01 5.857610106468200684e-01 2.515400052070617676e-01 1.000000000000000000e+00 -9.749469757080078125e-01 5.911650061607360840e-01 2.481510043144226074e-01 1.000000000000000000e+00 -9.764279723167419434e-01 5.965949892997741699e-01 2.447669953107833862e-01 1.000000000000000000e+00 -9.778559803962707520e-01 6.020510196685791016e-01 2.413869947195053101e-01 1.000000000000000000e+00 -9.792330265045166016e-01 6.075320243835449219e-01 2.380129992961883545e-01 1.000000000000000000e+00 -9.805560111999511719e-01 6.130390167236328125e-01 2.346460074186325073e-01 1.000000000000000000e+00 -9.818260073661804199e-01 6.185719966888427734e-01 2.312870025634765625e-01 1.000000000000000000e+00 -9.830409884452819824e-01 6.241310238838195801e-01 2.279369980096817017e-01 1.000000000000000000e+00 -9.841989874839782715e-01 6.297180056571960449e-01 2.245949953794479370e-01 1.000000000000000000e+00 -9.853010177612304688e-01 6.353300213813781738e-01 2.212650030851364136e-01 1.000000000000000000e+00 -9.863449931144714355e-01 6.409689784049987793e-01 2.179480046033859253e-01 1.000000000000000000e+00 -9.873319864273071289e-01 6.466330289840698242e-01 2.146479934453964233e-01 1.000000000000000000e+00 -9.882599711418151855e-01 6.523249745368957520e-01 2.113640010356903076e-01 1.000000000000000000e+00 -9.891279935836791992e-01 6.580430269241333008e-01 2.081000059843063354e-01 1.000000000000000000e+00 -9.899349808692932129e-01 6.637870073318481445e-01 2.048590034246444702e-01 1.000000000000000000e+00 -9.906809926033020020e-01 6.695579886436462402e-01 2.016420066356658936e-01 1.000000000000000000e+00 -9.913650155067443848e-01 6.753550171852111816e-01 1.984529942274093628e-01 1.000000000000000000e+00 -9.919850230216979980e-01 6.811789870262145996e-01 1.952950060367584229e-01 1.000000000000000000e+00 -9.925410151481628418e-01 6.870300173759460449e-01 1.921699941158294678e-01 1.000000000000000000e+00 -9.930319786071777344e-01 6.929069757461547852e-01 1.890839934349060059e-01 1.000000000000000000e+00 -9.934560060501098633e-01 6.988099813461303711e-01 1.860409975051879883e-01 1.000000000000000000e+00 -9.938139915466308594e-01 7.047410011291503906e-01 1.830430030822753906e-01 1.000000000000000000e+00 -9.941030144691467285e-01 7.106980085372924805e-01 1.800969988107681274e-01 1.000000000000000000e+00 -9.943240284919738770e-01 7.166810035705566406e-01 1.772080063819885254e-01 1.000000000000000000e+00 -9.944739937782287598e-01 7.226909995079040527e-01 1.743810027837753296e-01 1.000000000000000000e+00 -9.945530295372009277e-01 7.287279963493347168e-01 1.716219931840896606e-01 1.000000000000000000e+00 -9.945610165596008301e-01 7.347909808158874512e-01 1.689379960298538208e-01 1.000000000000000000e+00 -9.944949746131896973e-01 7.408800125122070312e-01 1.663350015878677368e-01 1.000000000000000000e+00 -9.943550229072570801e-01 7.469949722290039062e-01 1.638209968805313110e-01 1.000000000000000000e+00 -9.941409826278686523e-01 7.531369924545288086e-01 1.614039987325668335e-01 1.000000000000000000e+00 -9.938510060310363770e-01 7.593039870262145996e-01 1.590919941663742065e-01 1.000000000000000000e+00 -9.934819936752319336e-01 7.654989957809448242e-01 1.568910032510757446e-01 1.000000000000000000e+00 -9.930329918861389160e-01 7.717199921607971191e-01 1.548079997301101685e-01 1.000000000000000000e+00 -9.925050139427185059e-01 7.779669761657714844e-01 1.528549939393997192e-01 1.000000000000000000e+00 -9.918969869613647461e-01 7.842389941215515137e-01 1.510419994592666626e-01 1.000000000000000000e+00 -9.912089705467224121e-01 7.905369997024536133e-01 1.493770033121109009e-01 1.000000000000000000e+00 -9.904389977455139160e-01 7.968590259552001953e-01 1.478700041770935059e-01 1.000000000000000000e+00 -9.895870089530944824e-01 8.032050132751464844e-01 1.465290039777755737e-01 1.000000000000000000e+00 -9.886479973793029785e-01 8.095790147781372070e-01 1.453569978475570679e-01 1.000000000000000000e+00 -9.876210093498229980e-01 8.159779906272888184e-01 1.443630009889602661e-01 1.000000000000000000e+00 -9.865090250968933105e-01 8.224009871482849121e-01 1.435569971799850464e-01 1.000000000000000000e+00 -9.853140115737915039e-01 8.288459777832031250e-01 1.429450064897537231e-01 1.000000000000000000e+00 -9.840310215950012207e-01 8.353149890899658203e-01 1.425279974937438965e-01 1.000000000000000000e+00 -9.826530218124389648e-01 8.418120145797729492e-01 1.423030048608779907e-01 1.000000000000000000e+00 -9.811900258064270020e-01 8.483290076255798340e-01 1.422789990901947021e-01 1.000000000000000000e+00 -9.796440005302429199e-01 8.548660278320312500e-01 1.424529999494552612e-01 1.000000000000000000e+00 -9.779949784278869629e-01 8.614320158958435059e-01 1.428080052137374878e-01 1.000000000000000000e+00 -9.762650132179260254e-01 8.680160045623779297e-01 1.433510035276412964e-01 1.000000000000000000e+00 -9.744430184364318848e-01 8.746219873428344727e-01 1.440609991550445557e-01 1.000000000000000000e+00 -9.725300073623657227e-01 8.812500238418579102e-01 1.449230015277862549e-01 1.000000000000000000e+00 -9.705330133438110352e-01 8.878960013389587402e-01 1.459189951419830322e-01 1.000000000000000000e+00 -9.684429764747619629e-01 8.945639729499816895e-01 1.470140069723129272e-01 1.000000000000000000e+00 -9.662709832191467285e-01 9.012489914894104004e-01 1.481799930334091187e-01 1.000000000000000000e+00 -9.640210270881652832e-01 9.079499840736389160e-01 1.493699997663497925e-01 1.000000000000000000e+00 -9.616810083389282227e-01 9.146720170974731445e-01 1.505199968814849854e-01 1.000000000000000000e+00 -9.592760205268859863e-01 9.214069843292236328e-01 1.515659987926483154e-01 1.000000000000000000e+00 -9.568079710006713867e-01 9.281520247459411621e-01 1.524090021848678589e-01 1.000000000000000000e+00 -9.542869925498962402e-01 9.349079728126525879e-01 1.529210060834884644e-01 1.000000000000000000e+00 -9.517260193824768066e-01 9.416710138320922852e-01 1.529249995946884155e-01 1.000000000000000000e+00 -9.491509795188903809e-01 9.484350085258483887e-01 1.521780043840408325e-01 1.000000000000000000e+00 -9.466019868850708008e-01 9.551900029182434082e-01 1.503279954195022583e-01 1.000000000000000000e+00 -9.441519975662231445e-01 9.619160294532775879e-01 1.468610018491744995e-01 1.000000000000000000e+00 -9.418960213661193848e-01 9.685900211334228516e-01 1.409559994935989380e-01 1.000000000000000000e+00 -9.400150179862976074e-01 9.751579761505126953e-01 1.313260048627853394e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/prism b/fastplotlib/utils/colormaps/prism deleted file mode 100644 index 2fa55cbc4..000000000 --- a/fastplotlib/utils/colormaps/prism +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.296454221010208130e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.202982842922210693e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.115908384323120117e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.909103393554687500e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.464334607124328613e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.679059386253356934e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.889842033386230469e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.990986466407775879e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.072944164276123047e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.262181282043457031e-01 9.965688586235046387e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.678088009357452393e-01 8.870493769645690918e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.251110181212425232e-02 7.408012747764587402e-01 2.247245609760284424e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.674672722816467285e-01 4.915249347686767578e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.784760832786560059e-01 7.259169816970825195e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.862886250019073486e-01 9.124462604522705078e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.576675429940223694e-03 1.000000000000000000e+00 1.000000000000000000e+00 -1.001458391547203064e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.431036680936813354e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.142085909843444824e-01 0.000000000000000000e+00 9.964607357978820801e-01 1.000000000000000000e+00 -6.021789312362670898e-01 0.000000000000000000e+00 8.449673056602478027e-01 1.000000000000000000e+00 -7.946209907531738281e-01 0.000000000000000000e+00 6.377614736557006836e-01 1.000000000000000000e+00 -9.788463115692138672e-01 0.000000000000000000e+00 3.885053694248199463e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.136334463953971863e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.605566874146461487e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.428793311119079590e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.354472160339355469e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.210625171661376953e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.874868512153625488e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.237471222877502441e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.619138836860656738e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.763619422912597656e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.837971568107604980e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.969160318374633789e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.280405163764953613e-01 9.359470605850219727e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.830527961254119873e-02 8.034250140190124512e-01 1.122854202985763550e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.396880745887756348e-01 3.872372210025787354e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.555320739746093750e-01 6.366568207740783691e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.630991935729980469e-01 8.440989255905151367e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.507738471031188965e-02 9.958860278129577637e-01 1.000000000000000000e+00 -5.282267183065414429e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.816855221986770630e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.427450358867645264e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.253818631172180176e-01 0.000000000000000000e+00 9.132024049758911133e-01 1.000000000000000000e+00 -7.175539731979370117e-01 0.000000000000000000e+00 7.269346117973327637e-01 1.000000000000000000e+00 -9.065906405448913574e-01 0.000000000000000000e+00 4.927369356155395508e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.260510027408599854e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.663925647735595703e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.581753075122833252e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.481002926826477051e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.236450314521789551e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.732351064682006836e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.870073199272155762e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.524872064590454102e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.612222194671630859e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.705359935760498047e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.930012643337249756e-01 9.783609509468078613e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.403236836194992065e-01 8.609830737113952637e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.256991341710090637e-02 7.085951566696166992e-01 2.788060307502746582e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.312448740005493164e-01 5.405843853950500488e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.406256139278411865e-01 7.667196989059448242e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.493058055639266968e-01 9.423018693923950195e-01 1.000000000000000000e+00 -1.210340391844511032e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.254924237728118896e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.747831642627716064e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.501322209835052490e-01 0.000000000000000000e+00 9.716661572456359863e-01 1.000000000000000000e+00 -6.399781107902526855e-01 0.000000000000000000e+00 8.083294630050659180e-01 1.000000000000000000e+00 -8.318034410476684570e-01 0.000000000000000000e+00 5.916961431503295898e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 3.360497653484344482e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 5.824621021747589111e-02 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.165643900632858276e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.806018888950347900e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.728043973445892334e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.555911898612976074e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.169103860855102539e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.461254477500915527e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.266598224639892578e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.387412190437316895e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.462902188301086426e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.619959652423858643e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.980096995830535889e-01 9.128594994544982910e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.514377892017364502e-02 7.734512090682983398e-01 1.673915386199951172e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.048042774200439453e-01 4.387275278568267822e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.180383384227752686e-01 6.811363697052001953e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.254676818847656250e-01 8.786349892616271973e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.978926688432693481e-02 1.000000000000000000e+00 1.000000000000000000e+00 -7.512564957141876221e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.110501527786254883e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.772352039813995361e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.627234578132629395e-01 0.000000000000000000e+00 8.810750246047973633e-01 1.000000000000000000e+00 -7.552849054336547852e-01 0.000000000000000000e+00 6.843240857124328613e-01 1.000000000000000000e+00 -9.422231912612915039e-01 0.000000000000000000e+00 4.424527585506439209e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.714086234569549561e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.947061717510223389e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.035570740699768066e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.959804475307464600e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.840534567832946777e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.553756237030029297e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.986509442329406738e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.980860948562622070e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.155246973037719727e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.233682036399841309e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.342863559722900391e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.607460916042327881e-01 9.584991931915283203e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.141897067427635193e-01 8.335622549057006836e-01 5.418593436479568481e-02 1.000000000000000000e+00 -4.280258435755968094e-03 6.754232645034790039e-01 3.321762681007385254e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.945090413093566895e-01 5.882648229598999023e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.027480542659759521e-01 8.055665493011474609e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.127839162945747375e-01 9.697538018226623535e-01 1.000000000000000000e+00 -3.112411871552467346e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.522279977798461914e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.074707984924316406e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.866167008876800537e-01 0.000000000000000000e+00 9.443929791450500488e-01 1.000000000000000000e+00 -6.778538227081298828e-01 0.000000000000000000e+00 7.696296572685241699e-01 1.000000000000000000e+00 -8.685731291770935059e-01 0.000000000000000000e+00 5.441214442253112793e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.827369272708892822e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.710390836000442505e-03 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.278651952743530273e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.184504806995391846e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.097972750663757324e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.892892718315124512e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.450918197631835938e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.669321179389953613e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.907510042190551758e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.009451389312744141e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.090988874435424805e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.278615772724151611e-01 9.974138736724853516e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.691828966140747070e-01 8.882851004600524902e-01 0.000000000000000000e+00 1.000000000000000000e+00 -4.352521896362304688e-02 7.423461675643920898e-01 2.220706492662429810e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.692194700241088867e-01 4.890986979007720947e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.803200423717498779e-01 7.238783836364746094e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.881028115749359131e-01 9.109296798706054688e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.241449922323226929e-03 1.000000000000000000e+00 1.000000000000000000e+00 -9.894609451293945312e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.415855377912521362e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.124721586704254150e-01 0.000000000000000000e+00 9.976057410240173340e-01 1.000000000000000000e+00 -6.003386974334716797e-01 0.000000000000000000e+00 8.467000722885131836e-01 1.000000000000000000e+00 -7.927983403205871582e-01 0.000000000000000000e+00 6.399679183959960938e-01 1.000000000000000000e+00 -9.771612882614135742e-01 0.000000000000000000e+00 3.910399079322814941e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.163289919495582581e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.433619394898414612e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.410441040992736816e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.336172640323638916e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.193584799766540527e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.860211133956909180e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.226162433624267578e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.636152982711791992e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.781909704208374023e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.856331586837768555e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.986380100250244141e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.295349091291427612e-01 9.370341897010803223e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.947356045246124268e-02 8.048568964004516602e-01 1.095888465642929077e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.413702368736267090e-01 3.846991658210754395e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.573536217212677002e-01 6.344446539878845215e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.649400234222412109e-01 8.423584699630737305e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.681612670421600342e-02 9.947319626808166504e-01 1.000000000000000000e+00 -5.177454650402069092e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.802843660116195679e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.410832285881042480e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.235689878463745117e-01 0.000000000000000000e+00 9.147107005119323730e-01 1.000000000000000000e+00 -7.157095670700073242e-01 0.000000000000000000e+00 7.289666533470153809e-01 1.000000000000000000e+00 -9.048362970352172852e-01 0.000000000000000000e+00 4.951587021350860596e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.287028580904006958e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.645895838737487793e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.563285171985626221e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.463315248489379883e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.220708727836608887e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.719593286514282227e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.861140251159667969e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.542791008949279785e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.630701422691345215e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.723180234432220459e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.945999801158905029e-01 9.792879223823547363e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.416336297988891602e-01 8.622865676879882812e-01 0.000000000000000000e+00 1.000000000000000000e+00 -2.350473403930664062e-02 7.101892828941345215e-01 2.761832773685455322e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.330244898796081543e-01 5.382221937179565430e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.424733877182006836e-01 7.647738456726074219e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.510999053716659546e-01 9.409006834030151367e-01 1.000000000000000000e+00 -1.121811661869287491e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.242232397198677063e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.732137441635131836e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.483660757541656494e-01 0.000000000000000000e+00 9.729337096214294434e-01 1.000000000000000000e+00 -6.381316781044006348e-01 0.000000000000000000e+00 8.101652860641479492e-01 1.000000000000000000e+00 -8.299984931945800781e-01 0.000000000000000000e+00 5.939792394638061523e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 3.386295735836029053e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 6.095262244343757629e-02 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.990496397018432617e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.787580788135528564e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 4.709897637367248535e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.539254188537597656e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.155032992362976074e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.450698494911193848e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.283954501152038574e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.405812144279479980e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.481132864952087402e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.636818826198577881e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.994473040103912354e-01 9.140206575393676758e-01 0.000000000000000000e+00 1.000000000000000000e+00 -6.623827666044235229e-02 7.749401926994323730e-01 1.647122055292129517e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.065229177474975586e-01 4.362407326698303223e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.198732972145080566e-01 6.790060400962829590e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.272979468107223511e-01 8.770015835762023926e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.149418324232101440e-02 1.000000000000000000e+00 1.000000000000000000e+00 -7.400201261043548584e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -2.095899581909179688e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.755346834659576416e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -5.608947873115539551e-01 0.000000000000000000e+00 8.826950788497924805e-01 1.000000000000000000e+00 -7.534486651420593262e-01 0.000000000000000000e+00 6.864440441131591797e-01 1.000000000000000000e+00 -9.405003786087036133e-01 0.000000000000000000e+00 4.449328780174255371e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 1.740853786468505859e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.778940670192241669e-02 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 2.017359137535095215e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.941394090652465820e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.823139548301696777e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 7.538523077964782715e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.974443078041076660e-01 0.000000000000000000e+00 1.000000000000000000e+00 -9.997469186782836914e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.173370957374572754e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.252127885818481445e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -4.360414147377014160e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.622959613800048828e-01 9.595056772232055664e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.154321730136871338e-01 8.349302411079406738e-01 5.147866904735565186e-02 1.000000000000000000e+00 -5.133399274200201035e-03 6.770625114440917969e-01 3.295913934707641602e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.963115453720092773e-01 5.859727859497070312e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.045949339866638184e-01 8.037184476852416992e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.145533621311187744e-01 9.684715270996093750e-01 1.000000000000000000e+00 -3.015805967152118683e-02 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.508926153182983398e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -3.058541417121887207e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.848253428936004639e-01 0.000000000000000000e+00 9.457798600196838379e-01 1.000000000000000000e+00 -6.760058999061584473e-01 0.000000000000000000e+00 7.715638279914855957e-01 1.000000000000000000e+00 -8.667904734611511230e-01 0.000000000000000000e+00 5.464753508567810059e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 2.853554189205169678e-01 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 5.420765373855829239e-03 1.000000000000000000e+00 -1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 1.260861903429031372e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.166027367115020752e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 5.080026388168334961e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 6.876660585403442383e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 8.437470197677612305e-01 0.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.659544229507446289e-01 0.000000000000000000e+00 1.000000000000000000e+00 -8.925164937973022461e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.027914524078369141e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.109043717384338379e-01 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -3.295071125030517578e-01 9.982548952102661133e-01 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/rainbow b/fastplotlib/utils/colormaps/rainbow deleted file mode 100644 index f90067236..000000000 --- a/fastplotlib/utils/colormaps/rainbow +++ /dev/null @@ -1,256 +0,0 @@ -5.000000000000000000e-01 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -4.921568632125854492e-01 1.231965981423854828e-02 9.999810457229614258e-01 1.000000000000000000e+00 -4.843137264251708984e-01 2.463744953274726868e-02 9.999241232872009277e-01 1.000000000000000000e+00 -4.764705896377563477e-01 3.695150092244148254e-02 9.998292326927185059e-01 1.000000000000000000e+00 -4.686274528503417969e-01 4.925994202494621277e-02 9.996964335441589355e-01 1.000000000000000000e+00 -4.607843160629272461e-01 6.156090646982192993e-02 9.995257258415222168e-01 1.000000000000000000e+00 -4.529411792755126953e-01 7.385252416133880615e-02 9.993170499801635742e-01 1.000000000000000000e+00 -4.450980424880981445e-01 8.613293617963790894e-02 9.990704655647277832e-01 1.000000000000000000e+00 -4.372549057006835938e-01 9.840027987957000732e-02 9.987859725952148438e-01 1.000000000000000000e+00 -4.294117689132690430e-01 1.106526851654052734e-01 9.984636306762695312e-01 1.000000000000000000e+00 -4.215686321258544922e-01 1.228882893919944763e-01 9.981033205986022949e-01 1.000000000000000000e+00 -4.137254953384399414e-01 1.351052522659301758e-01 9.977051615715026855e-01 1.000000000000000000e+00 -4.058823585510253906e-01 1.473017036914825439e-01 9.972691535949707031e-01 1.000000000000000000e+00 -3.980392217636108398e-01 1.594757884740829468e-01 9.967952966690063477e-01 1.000000000000000000e+00 -3.901960849761962891e-01 1.716256737709045410e-01 9.962836503982543945e-01 1.000000000000000000e+00 -3.823529481887817383e-01 1.837495118379592896e-01 9.957341551780700684e-01 1.000000000000000000e+00 -3.745098114013671875e-01 1.958454698324203491e-01 9.951469302177429199e-01 1.000000000000000000e+00 -3.666666746139526367e-01 2.079116851091384888e-01 9.945219159126281738e-01 1.000000000000000000e+00 -3.588235378265380859e-01 2.199463546276092529e-01 9.938591122627258301e-01 1.000000000000000000e+00 -3.509804010391235352e-01 2.319476455450057983e-01 9.931586384773254395e-01 1.000000000000000000e+00 -3.431372642517089844e-01 2.439137250185012817e-01 9.924204945564270020e-01 1.000000000000000000e+00 -3.352941274642944336e-01 2.558427751064300537e-01 9.916446805000305176e-01 1.000000000000000000e+00 -3.274509906768798828e-01 2.677330076694488525e-01 9.908312559127807617e-01 1.000000000000000000e+00 -3.196078538894653320e-01 2.795825898647308350e-01 9.899802207946777344e-01 1.000000000000000000e+00 -3.117647171020507812e-01 2.913897335529327393e-01 9.890916347503662109e-01 1.000000000000000000e+00 -3.039215803146362305e-01 3.031526803970336914e-01 9.881654977798461914e-01 1.000000000000000000e+00 -2.960784435272216797e-01 3.148695826530456543e-01 9.872018098831176758e-01 1.000000000000000000e+00 -2.882353067398071289e-01 3.265387117862701416e-01 9.862007498741149902e-01 1.000000000000000000e+00 -2.803921699523925781e-01 3.381582796573638916e-01 9.851622581481933594e-01 1.000000000000000000e+00 -2.725490331649780273e-01 3.497264981269836426e-01 9.840863347053527832e-01 1.000000000000000000e+00 -2.647058963775634766e-01 3.612416684627532959e-01 9.829730987548828125e-01 1.000000000000000000e+00 -2.568627595901489258e-01 3.727020025253295898e-01 9.818225502967834473e-01 1.000000000000000000e+00 -2.490196079015731812e-01 3.841057419776916504e-01 9.806347489356994629e-01 1.000000000000000000e+00 -2.411764711141586304e-01 3.954512178897857666e-01 9.794097542762756348e-01 1.000000000000000000e+00 -2.333333343267440796e-01 4.067366421222686768e-01 9.781476259231567383e-01 1.000000000000000000e+00 -2.254901975393295288e-01 4.179603457450866699e-01 9.768483042716979980e-01 1.000000000000000000e+00 -2.176470607519149780e-01 4.291206002235412598e-01 9.755119681358337402e-01 1.000000000000000000e+00 -2.098039239645004272e-01 4.402157366275787354e-01 9.741386175155639648e-01 1.000000000000000000e+00 -2.019607871770858765e-01 4.512440562248229980e-01 9.727282524108886719e-01 1.000000000000000000e+00 -1.941176503896713257e-01 4.622038900852203369e-01 9.712810516357421875e-01 1.000000000000000000e+00 -1.862745136022567749e-01 4.730935692787170410e-01 9.697969555854797363e-01 1.000000000000000000e+00 -1.784313768148422241e-01 4.839114248752593994e-01 9.682760238647460938e-01 1.000000000000000000e+00 -1.705882400274276733e-01 4.946558475494384766e-01 9.667183756828308105e-01 1.000000000000000000e+00 -1.627451032400131226e-01 5.053251981735229492e-01 9.651240706443786621e-01 1.000000000000000000e+00 -1.549019664525985718e-01 5.159178376197814941e-01 9.634931683540344238e-01 1.000000000000000000e+00 -1.470588296651840210e-01 5.264321565628051758e-01 9.618256688117980957e-01 1.000000000000000000e+00 -1.392156928777694702e-01 5.368666052818298340e-01 9.601216316223144531e-01 1.000000000000000000e+00 -1.313725560903549194e-01 5.472195744514465332e-01 9.583812355995178223e-01 1.000000000000000000e+00 -1.235294118523597717e-01 5.574894547462463379e-01 9.566044211387634277e-01 1.000000000000000000e+00 -1.156862750649452209e-01 5.676746964454650879e-01 9.547913074493408203e-01 1.000000000000000000e+00 -1.078431382775306702e-01 5.777738094329833984e-01 9.529420137405395508e-01 1.000000000000000000e+00 -1.000000014901161194e-01 5.877852439880371094e-01 9.510565400123596191e-01 1.000000000000000000e+00 -9.215686470270156860e-02 5.977074503898620605e-01 9.491349458694458008e-01 1.000000000000000000e+00 -8.431372791528701782e-02 6.075389385223388672e-01 9.471773505210876465e-01 1.000000000000000000e+00 -7.647059112787246704e-02 6.172782182693481445e-01 9.451838135719299316e-01 1.000000000000000000e+00 -6.862745434045791626e-02 6.269237995147705078e-01 9.431544542312622070e-01 1.000000000000000000e+00 -6.078431382775306702e-02 6.364742517471313477e-01 9.410892724990844727e-01 1.000000000000000000e+00 -5.294117704033851624e-02 6.459280848503112793e-01 9.389883875846862793e-01 1.000000000000000000e+00 -4.509804025292396545e-02 6.552838683128356934e-01 9.368518590927124023e-01 1.000000000000000000e+00 -3.725490346550941467e-02 6.645401716232299805e-01 9.346797466278076172e-01 1.000000000000000000e+00 -2.941176481544971466e-02 6.736956238746643066e-01 9.324722290039062500e-01 1.000000000000000000e+00 -2.156862802803516388e-02 6.827488541603088379e-01 9.302293062210083008e-01 1.000000000000000000e+00 -1.372549030929803848e-02 6.916984319686889648e-01 9.279510974884033203e-01 1.000000000000000000e+00 -5.882353056222200394e-03 7.005430459976196289e-01 9.256376624107360840e-01 1.000000000000000000e+00 -1.960784429684281349e-03 7.092813253402709961e-01 9.232891201972961426e-01 1.000000000000000000e+00 -9.803921915590763092e-03 7.179118990898132324e-01 9.209055304527282715e-01 1.000000000000000000e+00 -1.764705963432788849e-02 7.264335751533508301e-01 9.184870123863220215e-01 1.000000000000000000e+00 -2.549019642174243927e-02 7.348449826240539551e-01 9.160336256027221680e-01 1.000000000000000000e+00 -3.333333507180213928e-02 7.431448101997375488e-01 9.135454297065734863e-01 1.000000000000000000e+00 -4.117647185921669006e-02 7.513318657875061035e-01 9.110226631164550781e-01 1.000000000000000000e+00 -4.901960864663124084e-02 7.594048976898193359e-01 9.084652662277221680e-01 1.000000000000000000e+00 -5.686274543404579163e-02 7.673626542091369629e-01 9.058734178543090820e-01 1.000000000000000000e+00 -6.470588594675064087e-02 7.752040028572082520e-01 9.032471776008605957e-01 1.000000000000000000e+00 -7.254902273416519165e-02 7.829276323318481445e-01 9.005867242813110352e-01 1.000000000000000000e+00 -8.039215952157974243e-02 7.905324101448059082e-01 8.978920578956604004e-01 1.000000000000000000e+00 -8.823529630899429321e-02 7.980172038078308105e-01 8.951632976531982422e-01 1.000000000000000000e+00 -9.607843309640884399e-02 8.053809404373168945e-01 8.924005627632141113e-01 1.000000000000000000e+00 -1.039215698838233948e-01 8.126223683357238770e-01 8.896040320396423340e-01 1.000000000000000000e+00 -1.117647066712379456e-01 8.197404742240905762e-01 8.867737054824829102e-01 1.000000000000000000e+00 -1.196078434586524963e-01 8.267341852188110352e-01 8.839097023010253906e-01 1.000000000000000000e+00 -1.274509876966476440e-01 8.336023688316345215e-01 8.810122013092041016e-01 1.000000000000000000e+00 -1.352941244840621948e-01 8.403440713882446289e-01 8.780812621116638184e-01 1.000000000000000000e+00 -1.431372612714767456e-01 8.469582200050354004e-01 8.751170039176940918e-01 1.000000000000000000e+00 -1.509803980588912964e-01 8.534438014030456543e-01 8.721194863319396973e-01 1.000000000000000000e+00 -1.588235348463058472e-01 8.597998619079589844e-01 8.690889477729797363e-01 1.000000000000000000e+00 -1.666666716337203979e-01 8.660253882408142090e-01 8.660253882408142090e-01 1.000000000000000000e+00 -1.745098084211349487e-01 8.721194863319396973e-01 8.629289865493774414e-01 1.000000000000000000e+00 -1.823529452085494995e-01 8.780812621116638184e-01 8.597998619079589844e-01 1.000000000000000000e+00 -1.901960819959640503e-01 8.839097023010253906e-01 8.566380739212036133e-01 1.000000000000000000e+00 -1.980392187833786011e-01 8.896040320396423340e-01 8.534438014030456543e-01 1.000000000000000000e+00 -2.058823555707931519e-01 8.951632976531982422e-01 8.502171635627746582e-01 1.000000000000000000e+00 -2.137254923582077026e-01 9.005867242813110352e-01 8.469582200050354004e-01 1.000000000000000000e+00 -2.215686291456222534e-01 9.058734178543090820e-01 8.436671495437622070e-01 1.000000000000000000e+00 -2.294117659330368042e-01 9.110226631164550781e-01 8.403440713882446289e-01 1.000000000000000000e+00 -2.372549027204513550e-01 9.160336256027221680e-01 8.369891047477722168e-01 1.000000000000000000e+00 -2.450980395078659058e-01 9.209055304527282715e-01 8.336023688316345215e-01 1.000000000000000000e+00 -2.529411911964416504e-01 9.256376624107360840e-01 8.301840424537658691e-01 1.000000000000000000e+00 -2.607843279838562012e-01 9.302293062210083008e-01 8.267341852188110352e-01 1.000000000000000000e+00 -2.686274647712707520e-01 9.346797466278076172e-01 8.232529759407043457e-01 1.000000000000000000e+00 -2.764706015586853027e-01 9.389883875846862793e-01 8.197404742240905762e-01 1.000000000000000000e+00 -2.843137383460998535e-01 9.431544542312622070e-01 8.161969184875488281e-01 1.000000000000000000e+00 -2.921568751335144043e-01 9.471773505210876465e-01 8.126223683357238770e-01 1.000000000000000000e+00 -3.000000119209289551e-01 9.510565400123596191e-01 8.090170025825500488e-01 1.000000000000000000e+00 -3.078431487083435059e-01 9.547913074493408203e-01 8.053809404373168945e-01 1.000000000000000000e+00 -3.156862854957580566e-01 9.583812355995178223e-01 8.017143011093139648e-01 1.000000000000000000e+00 -3.235294222831726074e-01 9.618256688117980957e-01 7.980172038078308105e-01 1.000000000000000000e+00 -3.313725590705871582e-01 9.651240706443786621e-01 7.942898869514465332e-01 1.000000000000000000e+00 -3.392156958580017090e-01 9.682760238647460938e-01 7.905324101448059082e-01 1.000000000000000000e+00 -3.470588326454162598e-01 9.712810516357421875e-01 7.867449522018432617e-01 1.000000000000000000e+00 -3.549019694328308105e-01 9.741386175155639648e-01 7.829276323318481445e-01 1.000000000000000000e+00 -3.627451062202453613e-01 9.768483042716979980e-01 7.790805697441101074e-01 1.000000000000000000e+00 -3.705882430076599121e-01 9.794097542762756348e-01 7.752040028572082520e-01 1.000000000000000000e+00 -3.784313797950744629e-01 9.818225502967834473e-01 7.712979912757873535e-01 1.000000000000000000e+00 -3.862745165824890137e-01 9.840863347053527832e-01 7.673626542091369629e-01 1.000000000000000000e+00 -3.941176533699035645e-01 9.862007498741149902e-01 7.633982896804809570e-01 1.000000000000000000e+00 -4.019607901573181152e-01 9.881654977798461914e-01 7.594048976898193359e-01 1.000000000000000000e+00 -4.098039269447326660e-01 9.899802207946777344e-01 7.553827166557312012e-01 1.000000000000000000e+00 -4.176470637321472168e-01 9.916446805000305176e-01 7.513318657875061035e-01 1.000000000000000000e+00 -4.254902005195617676e-01 9.931586384773254395e-01 7.472525238990783691e-01 1.000000000000000000e+00 -4.333333373069763184e-01 9.945219159126281738e-01 7.431448101997375488e-01 1.000000000000000000e+00 -4.411764740943908691e-01 9.957341551780700684e-01 7.390089035034179688e-01 1.000000000000000000e+00 -4.490196108818054199e-01 9.967952966690063477e-01 7.348449826240539551e-01 1.000000000000000000e+00 -4.568627476692199707e-01 9.977051615715026855e-01 7.306531071662902832e-01 1.000000000000000000e+00 -4.647058844566345215e-01 9.984636306762695312e-01 7.264335751533508301e-01 1.000000000000000000e+00 -4.725490212440490723e-01 9.990704655647277832e-01 7.221864461898803711e-01 1.000000000000000000e+00 -4.803921580314636230e-01 9.995257258415222168e-01 7.179118990898132324e-01 1.000000000000000000e+00 -4.882352948188781738e-01 9.998292326927185059e-01 7.136101722717285156e-01 1.000000000000000000e+00 -4.960784316062927246e-01 9.999810457229614258e-01 7.092813253402709961e-01 1.000000000000000000e+00 -5.039215683937072754e-01 9.999810457229614258e-01 7.049255371093750000e-01 1.000000000000000000e+00 -5.117647051811218262e-01 9.998292326927185059e-01 7.005430459976196289e-01 1.000000000000000000e+00 -5.196078419685363770e-01 9.995257258415222168e-01 6.961339712142944336e-01 1.000000000000000000e+00 -5.274509787559509277e-01 9.990704655647277832e-01 6.916984319686889648e-01 1.000000000000000000e+00 -5.352941155433654785e-01 9.984636306762695312e-01 6.872366666793823242e-01 1.000000000000000000e+00 -5.431372523307800293e-01 9.977051615715026855e-01 6.827488541603088379e-01 1.000000000000000000e+00 -5.509803891181945801e-01 9.967952966690063477e-01 6.782351136207580566e-01 1.000000000000000000e+00 -5.588235259056091309e-01 9.957341551780700684e-01 6.736956238746643066e-01 1.000000000000000000e+00 -5.666666626930236816e-01 9.945219159126281738e-01 6.691306233406066895e-01 1.000000000000000000e+00 -5.745097994804382324e-01 9.931586384773254395e-01 6.645401716232299805e-01 1.000000000000000000e+00 -5.823529362678527832e-01 9.916446805000305176e-01 6.599245071411132812e-01 1.000000000000000000e+00 -5.901960730552673340e-01 9.899802207946777344e-01 6.552838683128356934e-01 1.000000000000000000e+00 -5.980392098426818848e-01 9.881654977798461914e-01 6.506183147430419922e-01 1.000000000000000000e+00 -6.058823466300964355e-01 9.862007498741149902e-01 6.459280848503112793e-01 1.000000000000000000e+00 -6.137254834175109863e-01 9.840863347053527832e-01 6.412132978439331055e-01 1.000000000000000000e+00 -6.215686202049255371e-01 9.818225502967834473e-01 6.364742517471313477e-01 1.000000000000000000e+00 -6.294117569923400879e-01 9.794097542762756348e-01 6.317110061645507812e-01 1.000000000000000000e+00 -6.372548937797546387e-01 9.768483042716979980e-01 6.269237995147705078e-01 1.000000000000000000e+00 -6.450980305671691895e-01 9.741386175155639648e-01 6.221128106117248535e-01 1.000000000000000000e+00 -6.529411673545837402e-01 9.712810516357421875e-01 6.172782182693481445e-01 1.000000000000000000e+00 -6.607843041419982910e-01 9.682760238647460938e-01 6.124202013015747070e-01 1.000000000000000000e+00 -6.686274409294128418e-01 9.651240706443786621e-01 6.075389385223388672e-01 1.000000000000000000e+00 -6.764705777168273926e-01 9.618256688117980957e-01 6.026346087455749512e-01 1.000000000000000000e+00 -6.843137145042419434e-01 9.583812355995178223e-01 5.977074503898620605e-01 1.000000000000000000e+00 -6.921568512916564941e-01 9.547913074493408203e-01 5.927575826644897461e-01 1.000000000000000000e+00 -6.999999880790710449e-01 9.510565400123596191e-01 5.877852439880371094e-01 1.000000000000000000e+00 -7.078431248664855957e-01 9.471773505210876465e-01 5.827906131744384766e-01 1.000000000000000000e+00 -7.156862616539001465e-01 9.431544542312622070e-01 5.777738094329833984e-01 1.000000000000000000e+00 -7.235293984413146973e-01 9.389883875846862793e-01 5.727351307868957520e-01 1.000000000000000000e+00 -7.313725352287292480e-01 9.346797466278076172e-01 5.676746964454650879e-01 1.000000000000000000e+00 -7.392156720161437988e-01 9.302293062210083008e-01 5.625927448272705078e-01 1.000000000000000000e+00 -7.470588088035583496e-01 9.256376624107360840e-01 5.574894547462463379e-01 1.000000000000000000e+00 -7.549019455909729004e-01 9.209055304527282715e-01 5.523649454116821289e-01 1.000000000000000000e+00 -7.627450823783874512e-01 9.160336256027221680e-01 5.472195744514465332e-01 1.000000000000000000e+00 -7.705882191658020020e-01 9.110226631164550781e-01 5.420533418655395508e-01 1.000000000000000000e+00 -7.784313559532165527e-01 9.058734178543090820e-01 5.368666052818298340e-01 1.000000000000000000e+00 -7.862744927406311035e-01 9.005867242813110352e-01 5.316594839096069336e-01 1.000000000000000000e+00 -7.941176295280456543e-01 8.951632976531982422e-01 5.264321565628051758e-01 1.000000000000000000e+00 -8.019607663154602051e-01 8.896040320396423340e-01 5.211848616600036621e-01 1.000000000000000000e+00 -8.098039031028747559e-01 8.839097023010253906e-01 5.159178376197814941e-01 1.000000000000000000e+00 -8.176470398902893066e-01 8.780812621116638184e-01 5.106312036514282227e-01 1.000000000000000000e+00 -8.254901766777038574e-01 8.721194863319396973e-01 5.053251981735229492e-01 1.000000000000000000e+00 -8.333333134651184082e-01 8.660253882408142090e-01 5.000000000000000000e-01 1.000000000000000000e+00 -8.411764502525329590e-01 8.597998619079589844e-01 4.946558475494384766e-01 1.000000000000000000e+00 -8.490195870399475098e-01 8.534438014030456543e-01 4.892929196357727051e-01 1.000000000000000000e+00 -8.568627238273620605e-01 8.469582200050354004e-01 4.839114248752593994e-01 1.000000000000000000e+00 -8.647058606147766113e-01 8.403440713882446289e-01 4.785115718841552734e-01 1.000000000000000000e+00 -8.725489974021911621e-01 8.336023688316345215e-01 4.730935692787170410e-01 1.000000000000000000e+00 -8.803921341896057129e-01 8.267341852188110352e-01 4.676575958728790283e-01 1.000000000000000000e+00 -8.882352709770202637e-01 8.197404742240905762e-01 4.622038900852203369e-01 1.000000000000000000e+00 -8.960784077644348145e-01 8.126223683357238770e-01 4.567326307296752930e-01 1.000000000000000000e+00 -9.039215445518493652e-01 8.053809404373168945e-01 4.512440562248229980e-01 1.000000000000000000e+00 -9.117646813392639160e-01 7.980172038078308105e-01 4.457383453845977783e-01 1.000000000000000000e+00 -9.196078181266784668e-01 7.905324101448059082e-01 4.402157366275787354e-01 1.000000000000000000e+00 -9.274509549140930176e-01 7.829276323318481445e-01 4.346764087677001953e-01 1.000000000000000000e+00 -9.352940917015075684e-01 7.752040028572082520e-01 4.291206002235412598e-01 1.000000000000000000e+00 -9.431372284889221191e-01 7.673626542091369629e-01 4.235485196113586426e-01 1.000000000000000000e+00 -9.509803652763366699e-01 7.594048976898193359e-01 4.179603457450866699e-01 1.000000000000000000e+00 -9.588235020637512207e-01 7.513318657875061035e-01 4.123563170433044434e-01 1.000000000000000000e+00 -9.666666388511657715e-01 7.431448101997375488e-01 4.067366421222686768e-01 1.000000000000000000e+00 -9.745097756385803223e-01 7.348449826240539551e-01 4.011015295982360840e-01 1.000000000000000000e+00 -9.823529124259948730e-01 7.264335751533508301e-01 3.954512178897857666e-01 1.000000000000000000e+00 -9.901960492134094238e-01 7.179118990898132324e-01 3.897858858108520508e-01 1.000000000000000000e+00 -9.980391860008239746e-01 7.092813253402709961e-01 3.841057419776916504e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.005430459976196289e-01 3.784110546112060547e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.916984319686889648e-01 3.727020025253295898e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.827488541603088379e-01 3.669787943363189697e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.736956238746643066e-01 3.612416684627532959e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.645401716232299805e-01 3.554908335208892822e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.552838683128356934e-01 3.497264981269836426e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.459280848503112793e-01 3.439489305019378662e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.364742517471313477e-01 3.381582796573638916e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.269237995147705078e-01 3.323548138141632080e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.172782182693481445e-01 3.265387117862701416e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.075389385223388672e-01 3.207102417945861816e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.977074503898620605e-01 3.148695826530456543e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.877852439880371094e-01 3.090170025825500488e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.777738094329833984e-01 3.031526803970336914e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.676746964454650879e-01 2.972768545150756836e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.574894547462463379e-01 2.913897335529327393e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.472195744514465332e-01 2.854915857315063477e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.368666052818298340e-01 2.795825898647308350e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.264321565628051758e-01 2.736629843711853027e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.159178376197814941e-01 2.677330076694488525e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.053251981735229492e-01 2.617928683757781982e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.946558475494384766e-01 2.558427751064300537e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.839114248752593994e-01 2.498829960823059082e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.730935692787170410e-01 2.439137250185012817e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.622038900852203369e-01 2.379352003335952759e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.512440562248229980e-01 2.319476455450057983e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.402157366275787354e-01 2.259512841701507568e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.291206002235412598e-01 2.199463546276092529e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.179603457450866699e-01 2.139330804347991943e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.067366421222686768e-01 2.079116851091384888e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.954512178897857666e-01 2.018824070692062378e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.841057419776916504e-01 1.958454698324203491e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.727020025253295898e-01 1.898010969161987305e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.612416684627532959e-01 1.837495118379592896e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.497264981269836426e-01 1.776909679174423218e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.381582796573638916e-01 1.716256737709045410e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.265387117862701416e-01 1.655538827180862427e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.148695826530456543e-01 1.594757884740829468e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.031526803970336914e-01 1.533916592597961426e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.913897335529327393e-01 1.473017036914825439e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.795825898647308350e-01 1.412061452865600586e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.677330076694488525e-01 1.351052522659301758e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.558427751064300537e-01 1.289992183446884155e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.439137250185012817e-01 1.228882893919944763e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.319476455450057983e-01 1.167727038264274597e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.199463546276092529e-01 1.106526851654052734e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.079116851091384888e-01 1.045284643769264221e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.958454698324203491e-01 9.840027987957000732e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.837495118379592896e-01 9.226836264133453369e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.716256737709045410e-01 8.613293617963790894e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.594757884740829468e-01 7.999425381422042847e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.473017036914825439e-01 7.385252416133880615e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.351052522659301758e-01 6.770800054073333740e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.228882893919944763e-01 6.156090646982192993e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.106526851654052734e-01 5.541147664189338684e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.840027987957000732e-02 4.925994202494621277e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.613293617963790894e-02 4.310653731226921082e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.385252416133880615e-02 3.695150092244148254e-02 1.000000000000000000e+00 -1.000000000000000000e+00 6.156090646982192993e-02 3.079505823552608490e-02 1.000000000000000000e+00 -1.000000000000000000e+00 4.925994202494621277e-02 2.463744953274726868e-02 1.000000000000000000e+00 -1.000000000000000000e+00 3.695150092244148254e-02 1.847890578210353851e-02 1.000000000000000000e+00 -1.000000000000000000e+00 2.463744953274726868e-02 1.231965981423854828e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.231965981423854828e-02 6.159946788102388382e-03 1.000000000000000000e+00 -1.000000000000000000e+00 1.224646852585167854e-16 6.123234262925839272e-17 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/seismic b/fastplotlib/utils/colormaps/seismic deleted file mode 100644 index d66ad3a88..000000000 --- a/fastplotlib/utils/colormaps/seismic +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 3.000000119209289551e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.109803795814514160e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.219607770442962646e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.329411745071411133e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.439215719699859619e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.549019694328308105e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.658823668956756592e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.768627345561981201e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.878431320190429688e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 3.988235294818878174e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.098039269447326660e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.207843244075775146e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.317646920680999756e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.427450895309448242e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.537254869937896729e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.647058844566345215e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.756862819194793701e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.866666793823242188e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 4.976470470428466797e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.086274743080139160e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.196078419685363770e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.305882096290588379e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.415686368942260742e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.525490045547485352e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.635294318199157715e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.745097994804382324e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.854901671409606934e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 5.964705944061279297e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.074509620666503906e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.184313893318176270e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.294117569923400879e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.403921842575073242e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.513725519180297852e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.623529195785522461e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.733333468437194824e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.843137145042419434e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 6.952941417694091797e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.062745094299316406e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.172548770904541016e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.282353043556213379e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.392156720161437988e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.501960992813110352e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.611764669418334961e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.721568346023559570e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.831372618675231934e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 7.941176295280456543e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.050980567932128906e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.160784244537353516e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.270588517189025879e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.380392193794250488e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.490195870399475098e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.600000143051147461e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.709803819656372070e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.819608092308044434e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 8.929411768913269043e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.039215445518493652e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.149019718170166016e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.258823394775390625e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.368627667427062988e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.478431344032287598e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.588235020637512207e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.698039293289184570e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.807842969894409180e-01 1.000000000000000000e+00 -0.000000000000000000e+00 0.000000000000000000e+00 9.917647242546081543e-01 1.000000000000000000e+00 -3.921568859368562698e-03 3.921568859368562698e-03 1.000000000000000000e+00 1.000000000000000000e+00 -1.960784383118152618e-02 1.960784383118152618e-02 1.000000000000000000e+00 1.000000000000000000e+00 -3.529411926865577698e-02 3.529411926865577698e-02 1.000000000000000000e+00 1.000000000000000000e+00 -5.098039284348487854e-02 5.098039284348487854e-02 1.000000000000000000e+00 1.000000000000000000e+00 -6.666667014360427856e-02 6.666667014360427856e-02 1.000000000000000000e+00 1.000000000000000000e+00 -8.235294371843338013e-02 8.235294371843338013e-02 1.000000000000000000e+00 1.000000000000000000e+00 -9.803921729326248169e-02 9.803921729326248169e-02 1.000000000000000000e+00 1.000000000000000000e+00 -1.137254908680915833e-01 1.137254908680915833e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.294117718935012817e-01 1.294117718935012817e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.450980454683303833e-01 1.450980454683303833e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.607843190431594849e-01 1.607843190431594849e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.764705926179885864e-01 1.764705926179885864e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.921568661928176880e-01 1.921568661928176880e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.078431397676467896e-01 2.078431397676467896e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.235294133424758911e-01 2.235294133424758911e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.392156869173049927e-01 2.392156869173049927e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.549019753932952881e-01 2.549019753932952881e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.705882489681243896e-01 2.705882489681243896e-01 1.000000000000000000e+00 1.000000000000000000e+00 -2.862745225429534912e-01 2.862745225429534912e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.019607961177825928e-01 3.019607961177825928e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.176470696926116943e-01 3.176470696926116943e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.333333432674407959e-01 3.333333432674407959e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.490196168422698975e-01 3.490196168422698975e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.647058904170989990e-01 3.647058904170989990e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.803921639919281006e-01 3.803921639919281006e-01 1.000000000000000000e+00 1.000000000000000000e+00 -3.960784375667572021e-01 3.960784375667572021e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.117647111415863037e-01 4.117647111415863037e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.274509847164154053e-01 4.274509847164154053e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.431372582912445068e-01 4.431372582912445068e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.588235318660736084e-01 4.588235318660736084e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.745098054409027100e-01 4.745098054409027100e-01 1.000000000000000000e+00 1.000000000000000000e+00 -4.901960790157318115e-01 4.901960790157318115e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.058823823928833008e-01 5.058823823928833008e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.215686559677124023e-01 5.215686559677124023e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.372549295425415039e-01 5.372549295425415039e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.529412031173706055e-01 5.529412031173706055e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.686274766921997070e-01 5.686274766921997070e-01 1.000000000000000000e+00 1.000000000000000000e+00 -5.843137502670288086e-01 5.843137502670288086e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.000000238418579102e-01 6.000000238418579102e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.156862974166870117e-01 6.156862974166870117e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.313725709915161133e-01 6.313725709915161133e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.470588445663452148e-01 6.470588445663452148e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.627451181411743164e-01 6.627451181411743164e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.784313917160034180e-01 6.784313917160034180e-01 1.000000000000000000e+00 1.000000000000000000e+00 -6.941176652908325195e-01 6.941176652908325195e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.098039388656616211e-01 7.098039388656616211e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.254902124404907227e-01 7.254902124404907227e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.411764860153198242e-01 7.411764860153198242e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.568627595901489258e-01 7.568627595901489258e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.725490331649780273e-01 7.725490331649780273e-01 1.000000000000000000e+00 1.000000000000000000e+00 -7.882353067398071289e-01 7.882353067398071289e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.039215803146362305e-01 8.039215803146362305e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.196078538894653320e-01 8.196078538894653320e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.352941274642944336e-01 8.352941274642944336e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.509804010391235352e-01 8.509804010391235352e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.666666746139526367e-01 8.666666746139526367e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.823529481887817383e-01 8.823529481887817383e-01 1.000000000000000000e+00 1.000000000000000000e+00 -8.980392217636108398e-01 8.980392217636108398e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.137254953384399414e-01 9.137254953384399414e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.294117689132690430e-01 9.294117689132690430e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.450980424880981445e-01 9.450980424880981445e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.607843160629272461e-01 9.607843160629272461e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.764705896377563477e-01 9.764705896377563477e-01 1.000000000000000000e+00 1.000000000000000000e+00 -9.921568632125854492e-01 9.921568632125854492e-01 1.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 9.921568632125854492e-01 9.921568632125854492e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.764705896377563477e-01 9.764705896377563477e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.607843160629272461e-01 9.607843160629272461e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.450980424880981445e-01 9.450980424880981445e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.294117689132690430e-01 9.294117689132690430e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.137254953384399414e-01 9.137254953384399414e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.980392217636108398e-01 8.980392217636108398e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.823529481887817383e-01 8.823529481887817383e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.666666746139526367e-01 8.666666746139526367e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.509804010391235352e-01 8.509804010391235352e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.352941274642944336e-01 8.352941274642944336e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.196078538894653320e-01 8.196078538894653320e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.039215803146362305e-01 8.039215803146362305e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.882353067398071289e-01 7.882353067398071289e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.725490331649780273e-01 7.725490331649780273e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.568627595901489258e-01 7.568627595901489258e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.411764860153198242e-01 7.411764860153198242e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.254902124404907227e-01 7.254902124404907227e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.098039388656616211e-01 7.098039388656616211e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.941176652908325195e-01 6.941176652908325195e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.784313917160034180e-01 6.784313917160034180e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.627451181411743164e-01 6.627451181411743164e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.470588445663452148e-01 6.470588445663452148e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.313725709915161133e-01 6.313725709915161133e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.156862974166870117e-01 6.156862974166870117e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.000000238418579102e-01 6.000000238418579102e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.843137502670288086e-01 5.843137502670288086e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.686274766921997070e-01 5.686274766921997070e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.529412031173706055e-01 5.529412031173706055e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.372549295425415039e-01 5.372549295425415039e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.215686559677124023e-01 5.215686559677124023e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.058823823928833008e-01 5.058823823928833008e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.901960790157318115e-01 4.901960790157318115e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.745098054409027100e-01 4.745098054409027100e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.588235318660736084e-01 4.588235318660736084e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.431372582912445068e-01 4.431372582912445068e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.274509847164154053e-01 4.274509847164154053e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.117647111415863037e-01 4.117647111415863037e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.960784375667572021e-01 3.960784375667572021e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.803921639919281006e-01 3.803921639919281006e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.647058904170989990e-01 3.647058904170989990e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.490196168422698975e-01 3.490196168422698975e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.333333432674407959e-01 3.333333432674407959e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.176470696926116943e-01 3.176470696926116943e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.019607961177825928e-01 3.019607961177825928e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.862745225429534912e-01 2.862745225429534912e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.705882489681243896e-01 2.705882489681243896e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.549019753932952881e-01 2.549019753932952881e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.392156869173049927e-01 2.392156869173049927e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.235294133424758911e-01 2.235294133424758911e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.078431397676467896e-01 2.078431397676467896e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.921568661928176880e-01 1.921568661928176880e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.764705926179885864e-01 1.764705926179885864e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.607843190431594849e-01 1.607843190431594849e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.450980454683303833e-01 1.450980454683303833e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.294117718935012817e-01 1.294117718935012817e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.137254908680915833e-01 1.137254908680915833e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.803921729326248169e-02 9.803921729326248169e-02 1.000000000000000000e+00 -1.000000000000000000e+00 8.235294371843338013e-02 8.235294371843338013e-02 1.000000000000000000e+00 -1.000000000000000000e+00 6.666667014360427856e-02 6.666667014360427856e-02 1.000000000000000000e+00 -1.000000000000000000e+00 5.098039284348487854e-02 5.098039284348487854e-02 1.000000000000000000e+00 -1.000000000000000000e+00 3.529411926865577698e-02 3.529411926865577698e-02 1.000000000000000000e+00 -1.000000000000000000e+00 1.960784383118152618e-02 1.960784383118152618e-02 1.000000000000000000e+00 -1.000000000000000000e+00 3.921568859368562698e-03 3.921568859368562698e-03 1.000000000000000000e+00 -9.941176176071166992e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.862744808197021484e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.784313440322875977e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.705882072448730469e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.627450704574584961e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.549019336700439453e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.470587968826293945e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.392156600952148438e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.313725233078002930e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.235293865203857422e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.156862497329711914e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -9.078431129455566406e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.999999761581420898e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.921568393707275391e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.843137025833129883e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.764705657958984375e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.686274290084838867e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.607842922210693359e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.529411554336547852e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.450980186462402344e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.372548818588256836e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.294117450714111328e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.215686082839965820e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.137254714965820312e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -8.058823347091674805e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.980391979217529297e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.901960611343383789e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.823529243469238281e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.745097875595092773e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.666666507720947266e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.588235139846801758e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.509803771972656250e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.431372404098510742e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.352941036224365234e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.274509668350219727e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.196078300476074219e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.117646932601928711e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -7.039215564727783203e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.960784196853637695e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.882352828979492188e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.803921461105346680e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.725490093231201172e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.647058725357055664e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.568627357482910156e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.490195989608764648e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.411764621734619141e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.333333253860473633e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.254901885986328125e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.176470518112182617e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.098039150238037109e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -6.019607782363891602e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.941176414489746094e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.862745046615600586e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.784313678741455078e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.705882310867309570e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.627450942993164062e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.549019575119018555e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.470588207244873047e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.392156839370727539e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.313725471496582031e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.235294103622436523e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.156862735748291016e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.078431367874145508e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -5.000000000000000000e-01 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/spring b/fastplotlib/utils/colormaps/spring deleted file mode 100644 index fcec30dc6..000000000 --- a/fastplotlib/utils/colormaps/spring +++ /dev/null @@ -1,256 +0,0 @@ -1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -1.000000000000000000e+00 3.921568859368562698e-03 9.960784316062927246e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.843137718737125397e-03 9.921568632125854492e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.176470611244440079e-02 9.882352948188781738e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.568627543747425079e-02 9.843137264251708984e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.960784383118152618e-02 9.803921580314636230e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.352941222488880157e-02 9.764705896377563477e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.745098061859607697e-02 9.725490212440490723e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.137255087494850159e-02 9.686274528503417969e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.529411926865577698e-02 9.647058844566345215e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.921568766236305237e-02 9.607843160629272461e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.313725605607032776e-02 9.568627476692199707e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.705882444977760315e-02 9.529411792755126953e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.098039284348487854e-02 9.490196108818054199e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.490196123719215393e-02 9.450980424880981445e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.882352963089942932e-02 9.411764740943908691e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.274510174989700317e-02 9.372549057006835938e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.666667014360427856e-02 9.333333373069763184e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.058823853731155396e-02 9.294117689132690430e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.450980693101882935e-02 9.254902005195617676e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.843137532472610474e-02 9.215686321258544922e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.235294371843338013e-02 9.176470637321472168e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.627451211214065552e-02 9.137254953384399414e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.019608050584793091e-02 9.098039269447326660e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.411764889955520630e-02 9.058823585510253906e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.803921729326248169e-02 9.019607901573181152e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.019607856869697571e-01 8.980392217636108398e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.058823540806770325e-01 8.941176533699035645e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.098039224743843079e-01 8.901960849761962891e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.137254908680915833e-01 8.862745165824890137e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.176470592617988586e-01 8.823529481887817383e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.215686276555061340e-01 8.784313797950744629e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.254902034997940063e-01 8.745098114013671875e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.294117718935012817e-01 8.705882430076599121e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.333333402872085571e-01 8.666666746139526367e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.372549086809158325e-01 8.627451062202453613e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.411764770746231079e-01 8.588235378265380859e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.450980454683303833e-01 8.549019694328308105e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.490196138620376587e-01 8.509804010391235352e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.529411822557449341e-01 8.470588326454162598e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.568627506494522095e-01 8.431372642517089844e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.607843190431594849e-01 8.392156958580017090e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.647058874368667603e-01 8.352941274642944336e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.686274558305740356e-01 8.313725590705871582e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.725490242242813110e-01 8.274509906768798828e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.764705926179885864e-01 8.235294222831726074e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.803921610116958618e-01 8.196078538894653320e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.843137294054031372e-01 8.156862854957580566e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.882352977991104126e-01 8.117647171020507812e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.921568661928176880e-01 8.078431487083435059e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.960784345865249634e-01 8.039215803146362305e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.000000029802322388e-01 8.000000119209289551e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.039215713739395142e-01 7.960784435272216797e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.078431397676467896e-01 7.921568751335144043e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.117647081613540649e-01 7.882353067398071289e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.156862765550613403e-01 7.843137383460998535e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.196078449487686157e-01 7.803921699523925781e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.235294133424758911e-01 7.764706015586853027e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.274509817361831665e-01 7.725490331649780273e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.313725501298904419e-01 7.686274647712707520e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.352941185235977173e-01 7.647058963775634766e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.392156869173049927e-01 7.607843279838562012e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.431372553110122681e-01 7.568627595901489258e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.470588237047195435e-01 7.529411911964416504e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.509804069995880127e-01 7.490196228027343750e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.549019753932952881e-01 7.450980544090270996e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.588235437870025635e-01 7.411764860153198242e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.627451121807098389e-01 7.372549176216125488e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.666666805744171143e-01 7.333333492279052734e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.705882489681243896e-01 7.294117808341979980e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.745098173618316650e-01 7.254902124404907227e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.784313857555389404e-01 7.215686440467834473e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.823529541492462158e-01 7.176470756530761719e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.862745225429534912e-01 7.137255072593688965e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.901960909366607666e-01 7.098039388656616211e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.941176593303680420e-01 7.058823704719543457e-01 1.000000000000000000e+00 -1.000000000000000000e+00 2.980392277240753174e-01 7.019608020782470703e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.019607961177825928e-01 6.980392336845397949e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.058823645114898682e-01 6.941176652908325195e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.098039329051971436e-01 6.901960968971252441e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.137255012989044189e-01 6.862745285034179688e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.176470696926116943e-01 6.823529601097106934e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.215686380863189697e-01 6.784313917160034180e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.254902064800262451e-01 6.745098233222961426e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.294117748737335205e-01 6.705882549285888672e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.333333432674407959e-01 6.666666865348815918e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.372549116611480713e-01 6.627451181411743164e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.411764800548553467e-01 6.588235497474670410e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.450980484485626221e-01 6.549019813537597656e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.490196168422698975e-01 6.509804129600524902e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.529411852359771729e-01 6.470588445663452148e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.568627536296844482e-01 6.431372761726379395e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.607843220233917236e-01 6.392157077789306641e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.647058904170989990e-01 6.352941393852233887e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.686274588108062744e-01 6.313725709915161133e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.725490272045135498e-01 6.274510025978088379e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.764705955982208252e-01 6.235294342041015625e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.803921639919281006e-01 6.196078658103942871e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.843137323856353760e-01 6.156862974166870117e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.882353007793426514e-01 6.117647290229797363e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.921568691730499268e-01 6.078431606292724609e-01 1.000000000000000000e+00 -1.000000000000000000e+00 3.960784375667572021e-01 6.039215922355651855e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.000000059604644775e-01 6.000000238418579102e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.039215743541717529e-01 5.960784554481506348e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.078431427478790283e-01 5.921568870544433594e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.117647111415863037e-01 5.882353186607360840e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.156862795352935791e-01 5.843137502670288086e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.196078479290008545e-01 5.803921818733215332e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.235294163227081299e-01 5.764706134796142578e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.274509847164154053e-01 5.725490450859069824e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.313725531101226807e-01 5.686274766921997070e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.352941215038299561e-01 5.647059082984924316e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.392156898975372314e-01 5.607843399047851562e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.431372582912445068e-01 5.568627715110778809e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.470588266849517822e-01 5.529412031173706055e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.509803950786590576e-01 5.490196347236633301e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.549019634723663330e-01 5.450980663299560547e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.588235318660736084e-01 5.411764979362487793e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.627451002597808838e-01 5.372549295425415039e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.666666686534881592e-01 5.333333611488342285e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.705882370471954346e-01 5.294117927551269531e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.745098054409027100e-01 5.254902243614196777e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.784313738346099854e-01 5.215686559677124023e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.823529422283172607e-01 5.176470875740051270e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.862745106220245361e-01 5.137255191802978516e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.901960790157318115e-01 5.098039507865905762e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.941176474094390869e-01 5.058823823928833008e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.980392158031463623e-01 5.019608139991760254e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.019608139991760254e-01 4.980392158031463623e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.058823823928833008e-01 4.941176474094390869e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.098039507865905762e-01 4.901960790157318115e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.137255191802978516e-01 4.862745106220245361e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.176470875740051270e-01 4.823529422283172607e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.215686559677124023e-01 4.784313738346099854e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.254902243614196777e-01 4.745098054409027100e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.294117927551269531e-01 4.705882370471954346e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.333333611488342285e-01 4.666666686534881592e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.372549295425415039e-01 4.627451002597808838e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.411764979362487793e-01 4.588235318660736084e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.450980663299560547e-01 4.549019634723663330e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.490196347236633301e-01 4.509803950786590576e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.529412031173706055e-01 4.470588266849517822e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.568627715110778809e-01 4.431372582912445068e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.607843399047851562e-01 4.392156898975372314e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.647059082984924316e-01 4.352941215038299561e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.686274766921997070e-01 4.313725531101226807e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.725490450859069824e-01 4.274509847164154053e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.764706134796142578e-01 4.235294163227081299e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.803921818733215332e-01 4.196078479290008545e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.843137502670288086e-01 4.156862795352935791e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.882353186607360840e-01 4.117647111415863037e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.921568870544433594e-01 4.078431427478790283e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.960784554481506348e-01 4.039215743541717529e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.000000238418579102e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.039215922355651855e-01 3.960784375667572021e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.078431606292724609e-01 3.921568691730499268e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.117647290229797363e-01 3.882353007793426514e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.156862974166870117e-01 3.843137323856353760e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.196078658103942871e-01 3.803921639919281006e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.235294342041015625e-01 3.764705955982208252e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.274510025978088379e-01 3.725490272045135498e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.313725709915161133e-01 3.686274588108062744e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.352941393852233887e-01 3.647058904170989990e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.392157077789306641e-01 3.607843220233917236e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.431372761726379395e-01 3.568627536296844482e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.470588445663452148e-01 3.529411852359771729e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.509804129600524902e-01 3.490196168422698975e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.549019813537597656e-01 3.450980484485626221e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.588235497474670410e-01 3.411764800548553467e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.627451181411743164e-01 3.372549116611480713e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.666666865348815918e-01 3.333333432674407959e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.705882549285888672e-01 3.294117748737335205e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.745098233222961426e-01 3.254902064800262451e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.784313917160034180e-01 3.215686380863189697e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.823529601097106934e-01 3.176470696926116943e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.862745285034179688e-01 3.137255012989044189e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.901960968971252441e-01 3.098039329051971436e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.941176652908325195e-01 3.058823645114898682e-01 1.000000000000000000e+00 -1.000000000000000000e+00 6.980392336845397949e-01 3.019607961177825928e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.019608020782470703e-01 2.980392277240753174e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.058823704719543457e-01 2.941176593303680420e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.098039388656616211e-01 2.901960909366607666e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.137255072593688965e-01 2.862745225429534912e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.176470756530761719e-01 2.823529541492462158e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.215686440467834473e-01 2.784313857555389404e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.254902124404907227e-01 2.745098173618316650e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.294117808341979980e-01 2.705882489681243896e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.333333492279052734e-01 2.666666805744171143e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.372549176216125488e-01 2.627451121807098389e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.411764860153198242e-01 2.588235437870025635e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.450980544090270996e-01 2.549019753932952881e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.490196228027343750e-01 2.509804069995880127e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.529411911964416504e-01 2.470588237047195435e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.568627595901489258e-01 2.431372553110122681e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.607843279838562012e-01 2.392156869173049927e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.647058963775634766e-01 2.352941185235977173e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.686274647712707520e-01 2.313725501298904419e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.725490331649780273e-01 2.274509817361831665e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.764706015586853027e-01 2.235294133424758911e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.803921699523925781e-01 2.196078449487686157e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.843137383460998535e-01 2.156862765550613403e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.882353067398071289e-01 2.117647081613540649e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.921568751335144043e-01 2.078431397676467896e-01 1.000000000000000000e+00 -1.000000000000000000e+00 7.960784435272216797e-01 2.039215713739395142e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.000000119209289551e-01 2.000000029802322388e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.039215803146362305e-01 1.960784345865249634e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.078431487083435059e-01 1.921568661928176880e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.117647171020507812e-01 1.882352977991104126e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.156862854957580566e-01 1.843137294054031372e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.196078538894653320e-01 1.803921610116958618e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.235294222831726074e-01 1.764705926179885864e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.274509906768798828e-01 1.725490242242813110e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.313725590705871582e-01 1.686274558305740356e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.352941274642944336e-01 1.647058874368667603e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.392156958580017090e-01 1.607843190431594849e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.431372642517089844e-01 1.568627506494522095e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.470588326454162598e-01 1.529411822557449341e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.509804010391235352e-01 1.490196138620376587e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.549019694328308105e-01 1.450980454683303833e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.588235378265380859e-01 1.411764770746231079e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.627451062202453613e-01 1.372549086809158325e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.666666746139526367e-01 1.333333402872085571e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.705882430076599121e-01 1.294117718935012817e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.745098114013671875e-01 1.254902034997940063e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.784313797950744629e-01 1.215686276555061340e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.823529481887817383e-01 1.176470592617988586e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.862745165824890137e-01 1.137254908680915833e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.901960849761962891e-01 1.098039224743843079e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.941176533699035645e-01 1.058823540806770325e-01 1.000000000000000000e+00 -1.000000000000000000e+00 8.980392217636108398e-01 1.019607856869697571e-01 1.000000000000000000e+00 -1.000000000000000000e+00 9.019607901573181152e-01 9.803921729326248169e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.058823585510253906e-01 9.411764889955520630e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.098039269447326660e-01 9.019608050584793091e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.137254953384399414e-01 8.627451211214065552e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.176470637321472168e-01 8.235294371843338013e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.215686321258544922e-01 7.843137532472610474e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.254902005195617676e-01 7.450980693101882935e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.294117689132690430e-01 7.058823853731155396e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.333333373069763184e-01 6.666667014360427856e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.372549057006835938e-01 6.274510174989700317e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.411764740943908691e-01 5.882352963089942932e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.450980424880981445e-01 5.490196123719215393e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.490196108818054199e-01 5.098039284348487854e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.529411792755126953e-01 4.705882444977760315e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.568627476692199707e-01 4.313725605607032776e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.607843160629272461e-01 3.921568766236305237e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.647058844566345215e-01 3.529411926865577698e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.686274528503417969e-01 3.137255087494850159e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.725490212440490723e-01 2.745098061859607697e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.764705896377563477e-01 2.352941222488880157e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.803921580314636230e-01 1.960784383118152618e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.843137264251708984e-01 1.568627543747425079e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.882352948188781738e-01 1.176470611244440079e-02 1.000000000000000000e+00 -1.000000000000000000e+00 9.921568632125854492e-01 7.843137718737125397e-03 1.000000000000000000e+00 -1.000000000000000000e+00 9.960784316062927246e-01 3.921568859368562698e-03 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/summer b/fastplotlib/utils/colormaps/summer deleted file mode 100644 index 6fab4e585..000000000 --- a/fastplotlib/utils/colormaps/summer +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 5.000000000000000000e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.921568859368562698e-03 5.019608139991760254e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.843137718737125397e-03 5.039215683937072754e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.176470611244440079e-02 5.058823823928833008e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.568627543747425079e-02 5.078431367874145508e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.960784383118152618e-02 5.098039507865905762e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.352941222488880157e-02 5.117647051811218262e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.745098061859607697e-02 5.137255191802978516e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.137255087494850159e-02 5.156862735748291016e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.529411926865577698e-02 5.176470875740051270e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.921568766236305237e-02 5.196078419685363770e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.313725605607032776e-02 5.215686559677124023e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.705882444977760315e-02 5.235294103622436523e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.098039284348487854e-02 5.254902243614196777e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.490196123719215393e-02 5.274509787559509277e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.882352963089942932e-02 5.294117927551269531e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.274510174989700317e-02 5.313725471496582031e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.666667014360427856e-02 5.333333611488342285e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.058823853731155396e-02 5.352941155433654785e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.450980693101882935e-02 5.372549295425415039e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.843137532472610474e-02 5.392156839370727539e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.235294371843338013e-02 5.411764979362487793e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.627451211214065552e-02 5.431372523307800293e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.019608050584793091e-02 5.450980663299560547e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.411764889955520630e-02 5.470588207244873047e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.803921729326248169e-02 5.490196347236633301e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.019607856869697571e-01 5.509803891181945801e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.058823540806770325e-01 5.529412031173706055e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.098039224743843079e-01 5.549019575119018555e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.137254908680915833e-01 5.568627715110778809e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.176470592617988586e-01 5.588235259056091309e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.215686276555061340e-01 5.607843399047851562e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.254902034997940063e-01 5.627450942993164062e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.294117718935012817e-01 5.647059082984924316e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.333333402872085571e-01 5.666666626930236816e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.372549086809158325e-01 5.686274766921997070e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.411764770746231079e-01 5.705882310867309570e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.450980454683303833e-01 5.725490450859069824e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.490196138620376587e-01 5.745097994804382324e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.529411822557449341e-01 5.764706134796142578e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.568627506494522095e-01 5.784313678741455078e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.607843190431594849e-01 5.803921818733215332e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.647058874368667603e-01 5.823529362678527832e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.686274558305740356e-01 5.843137502670288086e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.725490242242813110e-01 5.862745046615600586e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.764705926179885864e-01 5.882353186607360840e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.803921610116958618e-01 5.901960730552673340e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.843137294054031372e-01 5.921568870544433594e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.882352977991104126e-01 5.941176414489746094e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.921568661928176880e-01 5.960784554481506348e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.960784345865249634e-01 5.980392098426818848e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.000000029802322388e-01 6.000000238418579102e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.039215713739395142e-01 6.019607782363891602e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.078431397676467896e-01 6.039215922355651855e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.117647081613540649e-01 6.058823466300964355e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.156862765550613403e-01 6.078431606292724609e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.196078449487686157e-01 6.098039150238037109e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.235294133424758911e-01 6.117647290229797363e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.274509817361831665e-01 6.137254834175109863e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.313725501298904419e-01 6.156862974166870117e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.352941185235977173e-01 6.176470518112182617e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.392156869173049927e-01 6.196078658103942871e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.431372553110122681e-01 6.215686202049255371e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.470588237047195435e-01 6.235294342041015625e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.509804069995880127e-01 6.254901885986328125e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.549019753932952881e-01 6.274510025978088379e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.588235437870025635e-01 6.294117569923400879e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.627451121807098389e-01 6.313725709915161133e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.666666805744171143e-01 6.333333253860473633e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.705882489681243896e-01 6.352941393852233887e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.745098173618316650e-01 6.372548937797546387e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.784313857555389404e-01 6.392157077789306641e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.823529541492462158e-01 6.411764621734619141e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.862745225429534912e-01 6.431372761726379395e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.901960909366607666e-01 6.450980305671691895e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.941176593303680420e-01 6.470588445663452148e-01 4.000000059604644775e-01 1.000000000000000000e+00 -2.980392277240753174e-01 6.490195989608764648e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.019607961177825928e-01 6.509804129600524902e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.058823645114898682e-01 6.529411673545837402e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.098039329051971436e-01 6.549019813537597656e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.137255012989044189e-01 6.568627357482910156e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.176470696926116943e-01 6.588235497474670410e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.215686380863189697e-01 6.607843041419982910e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.254902064800262451e-01 6.627451181411743164e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.294117748737335205e-01 6.647058725357055664e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.333333432674407959e-01 6.666666865348815918e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.372549116611480713e-01 6.686274409294128418e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.411764800548553467e-01 6.705882549285888672e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.450980484485626221e-01 6.725490093231201172e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.490196168422698975e-01 6.745098233222961426e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.529411852359771729e-01 6.764705777168273926e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.568627536296844482e-01 6.784313917160034180e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.607843220233917236e-01 6.803921461105346680e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.647058904170989990e-01 6.823529601097106934e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.686274588108062744e-01 6.843137145042419434e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.725490272045135498e-01 6.862745285034179688e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.764705955982208252e-01 6.882352828979492188e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.803921639919281006e-01 6.901960968971252441e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.843137323856353760e-01 6.921568512916564941e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.882353007793426514e-01 6.941176652908325195e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.921568691730499268e-01 6.960784196853637695e-01 4.000000059604644775e-01 1.000000000000000000e+00 -3.960784375667572021e-01 6.980392336845397949e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.000000059604644775e-01 6.999999880790710449e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.039215743541717529e-01 7.019608020782470703e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.078431427478790283e-01 7.039215564727783203e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.117647111415863037e-01 7.058823704719543457e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.156862795352935791e-01 7.078431248664855957e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.196078479290008545e-01 7.098039388656616211e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.235294163227081299e-01 7.117646932601928711e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.274509847164154053e-01 7.137255072593688965e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.313725531101226807e-01 7.156862616539001465e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.352941215038299561e-01 7.176470756530761719e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.392156898975372314e-01 7.196078300476074219e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.431372582912445068e-01 7.215686440467834473e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.470588266849517822e-01 7.235293984413146973e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.509803950786590576e-01 7.254902124404907227e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.549019634723663330e-01 7.274509668350219727e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.588235318660736084e-01 7.294117808341979980e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.627451002597808838e-01 7.313725352287292480e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.666666686534881592e-01 7.333333492279052734e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.705882370471954346e-01 7.352941036224365234e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.745098054409027100e-01 7.372549176216125488e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.784313738346099854e-01 7.392156720161437988e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.823529422283172607e-01 7.411764860153198242e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.862745106220245361e-01 7.431372404098510742e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.901960790157318115e-01 7.450980544090270996e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.941176474094390869e-01 7.470588088035583496e-01 4.000000059604644775e-01 1.000000000000000000e+00 -4.980392158031463623e-01 7.490196228027343750e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.019608139991760254e-01 7.509803771972656250e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.058823823928833008e-01 7.529411911964416504e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.098039507865905762e-01 7.549019455909729004e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.137255191802978516e-01 7.568627595901489258e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.176470875740051270e-01 7.588235139846801758e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.215686559677124023e-01 7.607843279838562012e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.254902243614196777e-01 7.627450823783874512e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.294117927551269531e-01 7.647058963775634766e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.333333611488342285e-01 7.666666507720947266e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.372549295425415039e-01 7.686274647712707520e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.411764979362487793e-01 7.705882191658020020e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.450980663299560547e-01 7.725490331649780273e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.490196347236633301e-01 7.745097875595092773e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.529412031173706055e-01 7.764706015586853027e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.568627715110778809e-01 7.784313559532165527e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.607843399047851562e-01 7.803921699523925781e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.647059082984924316e-01 7.823529243469238281e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.686274766921997070e-01 7.843137383460998535e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.725490450859069824e-01 7.862744927406311035e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.764706134796142578e-01 7.882353067398071289e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.803921818733215332e-01 7.901960611343383789e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.843137502670288086e-01 7.921568751335144043e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.882353186607360840e-01 7.941176295280456543e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.921568870544433594e-01 7.960784435272216797e-01 4.000000059604644775e-01 1.000000000000000000e+00 -5.960784554481506348e-01 7.980391979217529297e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.000000238418579102e-01 8.000000119209289551e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.039215922355651855e-01 8.019607663154602051e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.078431606292724609e-01 8.039215803146362305e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.117647290229797363e-01 8.058823347091674805e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.156862974166870117e-01 8.078431487083435059e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.196078658103942871e-01 8.098039031028747559e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.235294342041015625e-01 8.117647171020507812e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.274510025978088379e-01 8.137254714965820312e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.313725709915161133e-01 8.156862854957580566e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.352941393852233887e-01 8.176470398902893066e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.392157077789306641e-01 8.196078538894653320e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.431372761726379395e-01 8.215686082839965820e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.470588445663452148e-01 8.235294222831726074e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.509804129600524902e-01 8.254901766777038574e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.549019813537597656e-01 8.274509906768798828e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.588235497474670410e-01 8.294117450714111328e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.627451181411743164e-01 8.313725590705871582e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.666666865348815918e-01 8.333333134651184082e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.705882549285888672e-01 8.352941274642944336e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.745098233222961426e-01 8.372548818588256836e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.784313917160034180e-01 8.392156958580017090e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.823529601097106934e-01 8.411764502525329590e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.862745285034179688e-01 8.431372642517089844e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.901960968971252441e-01 8.450980186462402344e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.941176652908325195e-01 8.470588326454162598e-01 4.000000059604644775e-01 1.000000000000000000e+00 -6.980392336845397949e-01 8.490195870399475098e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.019608020782470703e-01 8.509804010391235352e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.058823704719543457e-01 8.529411554336547852e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.098039388656616211e-01 8.549019694328308105e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.137255072593688965e-01 8.568627238273620605e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.176470756530761719e-01 8.588235378265380859e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.215686440467834473e-01 8.607842922210693359e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.254902124404907227e-01 8.627451062202453613e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.294117808341979980e-01 8.647058606147766113e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.333333492279052734e-01 8.666666746139526367e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.372549176216125488e-01 8.686274290084838867e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.411764860153198242e-01 8.705882430076599121e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.450980544090270996e-01 8.725489974021911621e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.490196228027343750e-01 8.745098114013671875e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.529411911964416504e-01 8.764705657958984375e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.568627595901489258e-01 8.784313797950744629e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.607843279838562012e-01 8.803921341896057129e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.647058963775634766e-01 8.823529481887817383e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.686274647712707520e-01 8.843137025833129883e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.725490331649780273e-01 8.862745165824890137e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.764706015586853027e-01 8.882352709770202637e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.803921699523925781e-01 8.901960849761962891e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.843137383460998535e-01 8.921568393707275391e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.882353067398071289e-01 8.941176533699035645e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.921568751335144043e-01 8.960784077644348145e-01 4.000000059604644775e-01 1.000000000000000000e+00 -7.960784435272216797e-01 8.980392217636108398e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.000000119209289551e-01 8.999999761581420898e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.039215803146362305e-01 9.019607901573181152e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.078431487083435059e-01 9.039215445518493652e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.117647171020507812e-01 9.058823585510253906e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.156862854957580566e-01 9.078431129455566406e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.196078538894653320e-01 9.098039269447326660e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.235294222831726074e-01 9.117646813392639160e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.274509906768798828e-01 9.137254953384399414e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.313725590705871582e-01 9.156862497329711914e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.352941274642944336e-01 9.176470637321472168e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.392156958580017090e-01 9.196078181266784668e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.431372642517089844e-01 9.215686321258544922e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.470588326454162598e-01 9.235293865203857422e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.509804010391235352e-01 9.254902005195617676e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.549019694328308105e-01 9.274509549140930176e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.588235378265380859e-01 9.294117689132690430e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.627451062202453613e-01 9.313725233078002930e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.666666746139526367e-01 9.333333373069763184e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.705882430076599121e-01 9.352940917015075684e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.745098114013671875e-01 9.372549057006835938e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.784313797950744629e-01 9.392156600952148438e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.823529481887817383e-01 9.411764740943908691e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.862745165824890137e-01 9.431372284889221191e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.901960849761962891e-01 9.450980424880981445e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.941176533699035645e-01 9.470587968826293945e-01 4.000000059604644775e-01 1.000000000000000000e+00 -8.980392217636108398e-01 9.490196108818054199e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.019607901573181152e-01 9.509803652763366699e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.058823585510253906e-01 9.529411792755126953e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.098039269447326660e-01 9.549019336700439453e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.137254953384399414e-01 9.568627476692199707e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.176470637321472168e-01 9.588235020637512207e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.215686321258544922e-01 9.607843160629272461e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.254902005195617676e-01 9.627450704574584961e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.294117689132690430e-01 9.647058844566345215e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.333333373069763184e-01 9.666666388511657715e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.372549057006835938e-01 9.686274528503417969e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.411764740943908691e-01 9.705882072448730469e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.450980424880981445e-01 9.725490212440490723e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.490196108818054199e-01 9.745097756385803223e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.529411792755126953e-01 9.764705896377563477e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.568627476692199707e-01 9.784313440322875977e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.607843160629272461e-01 9.803921580314636230e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.647058844566345215e-01 9.823529124259948730e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.686274528503417969e-01 9.843137264251708984e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.725490212440490723e-01 9.862744808197021484e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.882352948188781738e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.803921580314636230e-01 9.901960492134094238e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.843137264251708984e-01 9.921568632125854492e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.882352948188781738e-01 9.941176176071166992e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.921568632125854492e-01 9.960784316062927246e-01 4.000000059604644775e-01 1.000000000000000000e+00 -9.960784316062927246e-01 9.980391860008239746e-01 4.000000059604644775e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 4.000000059604644775e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/tab10 b/fastplotlib/utils/colormaps/tab10 deleted file mode 100644 index a3c2ccaa5..000000000 --- a/fastplotlib/utils/colormaps/tab10 +++ /dev/null @@ -1,10 +0,0 @@ -1.215686276555061340e-01 4.666666686534881592e-01 7.058823704719543457e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.980392158031463623e-01 5.490196123719215393e-02 1.000000000000000000e+00 -1.725490242242813110e-01 6.274510025978088379e-01 1.725490242242813110e-01 1.000000000000000000e+00 -8.392156958580017090e-01 1.529411822557449341e-01 1.568627506494522095e-01 1.000000000000000000e+00 -5.803921818733215332e-01 4.039215743541717529e-01 7.411764860153198242e-01 1.000000000000000000e+00 -5.490196347236633301e-01 3.372549116611480713e-01 2.941176593303680420e-01 1.000000000000000000e+00 -8.901960849761962891e-01 4.666666686534881592e-01 7.607843279838562012e-01 1.000000000000000000e+00 -4.980392158031463623e-01 4.980392158031463623e-01 4.980392158031463623e-01 1.000000000000000000e+00 -7.372549176216125488e-01 7.411764860153198242e-01 1.333333402872085571e-01 1.000000000000000000e+00 -9.019608050584793091e-02 7.450980544090270996e-01 8.117647171020507812e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/tab20 b/fastplotlib/utils/colormaps/tab20 deleted file mode 100644 index b7a955b9e..000000000 --- a/fastplotlib/utils/colormaps/tab20 +++ /dev/null @@ -1,20 +0,0 @@ -1.215686276555061340e-01 4.666666686534881592e-01 7.058823704719543457e-01 1.000000000000000000e+00 -6.823529601097106934e-01 7.803921699523925781e-01 9.098039269447326660e-01 1.000000000000000000e+00 -1.000000000000000000e+00 4.980392158031463623e-01 5.490196123719215393e-02 1.000000000000000000e+00 -1.000000000000000000e+00 7.333333492279052734e-01 4.705882370471954346e-01 1.000000000000000000e+00 -1.725490242242813110e-01 6.274510025978088379e-01 1.725490242242813110e-01 1.000000000000000000e+00 -5.960784554481506348e-01 8.745098114013671875e-01 5.411764979362487793e-01 1.000000000000000000e+00 -8.392156958580017090e-01 1.529411822557449341e-01 1.568627506494522095e-01 1.000000000000000000e+00 -1.000000000000000000e+00 5.960784554481506348e-01 5.882353186607360840e-01 1.000000000000000000e+00 -5.803921818733215332e-01 4.039215743541717529e-01 7.411764860153198242e-01 1.000000000000000000e+00 -7.725490331649780273e-01 6.901960968971252441e-01 8.352941274642944336e-01 1.000000000000000000e+00 -5.490196347236633301e-01 3.372549116611480713e-01 2.941176593303680420e-01 1.000000000000000000e+00 -7.686274647712707520e-01 6.117647290229797363e-01 5.803921818733215332e-01 1.000000000000000000e+00 -8.901960849761962891e-01 4.666666686534881592e-01 7.607843279838562012e-01 1.000000000000000000e+00 -9.686274528503417969e-01 7.137255072593688965e-01 8.235294222831726074e-01 1.000000000000000000e+00 -4.980392158031463623e-01 4.980392158031463623e-01 4.980392158031463623e-01 1.000000000000000000e+00 -7.803921699523925781e-01 7.803921699523925781e-01 7.803921699523925781e-01 1.000000000000000000e+00 -7.372549176216125488e-01 7.411764860153198242e-01 1.333333402872085571e-01 1.000000000000000000e+00 -8.588235378265380859e-01 8.588235378265380859e-01 5.529412031173706055e-01 1.000000000000000000e+00 -9.019608050584793091e-02 7.450980544090270996e-01 8.117647171020507812e-01 1.000000000000000000e+00 -6.196078658103942871e-01 8.549019694328308105e-01 8.980392217636108398e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/tab20b b/fastplotlib/utils/colormaps/tab20b deleted file mode 100644 index f5b176e31..000000000 --- a/fastplotlib/utils/colormaps/tab20b +++ /dev/null @@ -1,20 +0,0 @@ -2.235294133424758911e-01 2.313725501298904419e-01 4.745098054409027100e-01 1.000000000000000000e+00 -3.215686380863189697e-01 3.294117748737335205e-01 6.392157077789306641e-01 1.000000000000000000e+00 -4.196078479290008545e-01 4.313725531101226807e-01 8.117647171020507812e-01 1.000000000000000000e+00 -6.117647290229797363e-01 6.196078658103942871e-01 8.705882430076599121e-01 1.000000000000000000e+00 -3.882353007793426514e-01 4.745098054409027100e-01 2.235294133424758911e-01 1.000000000000000000e+00 -5.490196347236633301e-01 6.352941393852233887e-01 3.215686380863189697e-01 1.000000000000000000e+00 -7.098039388656616211e-01 8.117647171020507812e-01 4.196078479290008545e-01 1.000000000000000000e+00 -8.078431487083435059e-01 8.588235378265380859e-01 6.117647290229797363e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.274509847164154053e-01 1.921568661928176880e-01 1.000000000000000000e+00 -7.411764860153198242e-01 6.196078658103942871e-01 2.235294133424758911e-01 1.000000000000000000e+00 -9.058823585510253906e-01 7.294117808341979980e-01 3.215686380863189697e-01 1.000000000000000000e+00 -9.058823585510253906e-01 7.960784435272216797e-01 5.803921818733215332e-01 1.000000000000000000e+00 -5.176470875740051270e-01 2.352941185235977173e-01 2.235294133424758911e-01 1.000000000000000000e+00 -6.784313917160034180e-01 2.862745225429534912e-01 2.901960909366607666e-01 1.000000000000000000e+00 -8.392156958580017090e-01 3.803921639919281006e-01 4.196078479290008545e-01 1.000000000000000000e+00 -9.058823585510253906e-01 5.882353186607360840e-01 6.117647290229797363e-01 1.000000000000000000e+00 -4.823529422283172607e-01 2.549019753932952881e-01 4.509803950786590576e-01 1.000000000000000000e+00 -6.470588445663452148e-01 3.176470696926116943e-01 5.803921818733215332e-01 1.000000000000000000e+00 -8.078431487083435059e-01 4.274509847164154053e-01 7.411764860153198242e-01 1.000000000000000000e+00 -8.705882430076599121e-01 6.196078658103942871e-01 8.392156958580017090e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/tab20c b/fastplotlib/utils/colormaps/tab20c deleted file mode 100644 index 7521c3e2a..000000000 --- a/fastplotlib/utils/colormaps/tab20c +++ /dev/null @@ -1,20 +0,0 @@ -1.921568661928176880e-01 5.098039507865905762e-01 7.411764860153198242e-01 1.000000000000000000e+00 -4.196078479290008545e-01 6.823529601097106934e-01 8.392156958580017090e-01 1.000000000000000000e+00 -6.196078658103942871e-01 7.921568751335144043e-01 8.823529481887817383e-01 1.000000000000000000e+00 -7.764706015586853027e-01 8.588235378265380859e-01 9.372549057006835938e-01 1.000000000000000000e+00 -9.019607901573181152e-01 3.333333432674407959e-01 5.098039284348487854e-02 1.000000000000000000e+00 -9.921568632125854492e-01 5.529412031173706055e-01 2.352941185235977173e-01 1.000000000000000000e+00 -9.921568632125854492e-01 6.823529601097106934e-01 4.196078479290008545e-01 1.000000000000000000e+00 -9.921568632125854492e-01 8.156862854957580566e-01 6.352941393852233887e-01 1.000000000000000000e+00 -1.921568661928176880e-01 6.392157077789306641e-01 3.294117748737335205e-01 1.000000000000000000e+00 -4.549019634723663330e-01 7.686274647712707520e-01 4.627451002597808838e-01 1.000000000000000000e+00 -6.313725709915161133e-01 8.509804010391235352e-01 6.078431606292724609e-01 1.000000000000000000e+00 -7.803921699523925781e-01 9.137254953384399414e-01 7.529411911964416504e-01 1.000000000000000000e+00 -4.588235318660736084e-01 4.196078479290008545e-01 6.941176652908325195e-01 1.000000000000000000e+00 -6.196078658103942871e-01 6.039215922355651855e-01 7.843137383460998535e-01 1.000000000000000000e+00 -7.372549176216125488e-01 7.411764860153198242e-01 8.627451062202453613e-01 1.000000000000000000e+00 -8.549019694328308105e-01 8.549019694328308105e-01 9.215686321258544922e-01 1.000000000000000000e+00 -3.882353007793426514e-01 3.882353007793426514e-01 3.882353007793426514e-01 1.000000000000000000e+00 -5.882353186607360840e-01 5.882353186607360840e-01 5.882353186607360840e-01 1.000000000000000000e+00 -7.411764860153198242e-01 7.411764860153198242e-01 7.411764860153198242e-01 1.000000000000000000e+00 -8.509804010391235352e-01 8.509804010391235352e-01 8.509804010391235352e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/terrain b/fastplotlib/utils/colormaps/terrain deleted file mode 100644 index fd79cbfa7..000000000 --- a/fastplotlib/utils/colormaps/terrain +++ /dev/null @@ -1,256 +0,0 @@ -2.000000029802322388e-01 2.000000029802322388e-01 6.000000238418579102e-01 1.000000000000000000e+00 -1.947712451219558716e-01 2.104575186967849731e-01 6.104575395584106445e-01 1.000000000000000000e+00 -1.895424872636795044e-01 2.209150344133377075e-01 6.209150552749633789e-01 1.000000000000000000e+00 -1.843137294054031372e-01 2.313725501298904419e-01 6.313725709915161133e-01 1.000000000000000000e+00 -1.790849715471267700e-01 2.418300658464431763e-01 6.418300867080688477e-01 1.000000000000000000e+00 -1.738562136888504028e-01 2.522875964641571045e-01 6.522876024246215820e-01 1.000000000000000000e+00 -1.686274558305740356e-01 2.627451121807098389e-01 6.627451181411743164e-01 1.000000000000000000e+00 -1.633986979722976685e-01 2.732026278972625732e-01 6.732026338577270508e-01 1.000000000000000000e+00 -1.581699401140213013e-01 2.836601436138153076e-01 6.836601495742797852e-01 1.000000000000000000e+00 -1.529411822557449341e-01 2.941176593303680420e-01 6.941176652908325195e-01 1.000000000000000000e+00 -1.477124243974685669e-01 3.045751750469207764e-01 7.045751810073852539e-01 1.000000000000000000e+00 -1.424836665391921997e-01 3.150326907634735107e-01 7.150326967239379883e-01 1.000000000000000000e+00 -1.372549086809158325e-01 3.254902064800262451e-01 7.254902124404907227e-01 1.000000000000000000e+00 -1.320261508226394653e-01 3.359477221965789795e-01 7.359477281570434570e-01 1.000000000000000000e+00 -1.267973929643630981e-01 3.464052379131317139e-01 7.464052438735961914e-01 1.000000000000000000e+00 -1.215686276555061340e-01 3.568627536296844482e-01 7.568627595901489258e-01 1.000000000000000000e+00 -1.163398697972297668e-01 3.673202693462371826e-01 7.673202753067016602e-01 1.000000000000000000e+00 -1.111111119389533997e-01 3.777777850627899170e-01 7.777777910232543945e-01 1.000000000000000000e+00 -1.058823540806770325e-01 3.882353007793426514e-01 7.882353067398071289e-01 1.000000000000000000e+00 -1.006535962224006653e-01 3.986928164958953857e-01 7.986928224563598633e-01 1.000000000000000000e+00 -9.542483836412429810e-02 4.091503322124481201e-01 8.091503381729125977e-01 1.000000000000000000e+00 -9.019608050584793091e-02 4.196078479290008545e-01 8.196078538894653320e-01 1.000000000000000000e+00 -8.496732264757156372e-02 4.300653636455535889e-01 8.300653696060180664e-01 1.000000000000000000e+00 -7.973856478929519653e-02 4.405228793621063232e-01 8.405228853225708008e-01 1.000000000000000000e+00 -7.450980693101882935e-02 4.509803950786590576e-01 8.509804010391235352e-01 1.000000000000000000e+00 -6.928104907274246216e-02 4.614379107952117920e-01 8.614379167556762695e-01 1.000000000000000000e+00 -6.405229121446609497e-02 4.718954265117645264e-01 8.718954324722290039e-01 1.000000000000000000e+00 -5.882352963089942932e-02 4.823529422283172607e-01 8.823529481887817383e-01 1.000000000000000000e+00 -5.359477177262306213e-02 4.928104579448699951e-01 8.928104639053344727e-01 1.000000000000000000e+00 -4.836601391434669495e-02 5.032680034637451172e-01 9.032679796218872070e-01 1.000000000000000000e+00 -4.313725605607032776e-02 5.137255191802978516e-01 9.137254953384399414e-01 1.000000000000000000e+00 -3.790849819779396057e-02 5.241830348968505859e-01 9.241830110549926758e-01 1.000000000000000000e+00 -3.267974033951759338e-02 5.346405506134033203e-01 9.346405267715454102e-01 1.000000000000000000e+00 -2.745098061859607697e-02 5.450980663299560547e-01 9.450980424880981445e-01 1.000000000000000000e+00 -2.222222276031970978e-02 5.555555820465087891e-01 9.555555582046508789e-01 1.000000000000000000e+00 -1.699346490204334259e-02 5.660130977630615234e-01 9.660130739212036133e-01 1.000000000000000000e+00 -1.176470611244440079e-02 5.764706134796142578e-01 9.764705896377563477e-01 1.000000000000000000e+00 -6.535947788506746292e-03 5.869281291961669922e-01 9.869281053543090820e-01 1.000000000000000000e+00 -1.307189580984413624e-03 5.973856449127197266e-01 9.973856210708618164e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.058823466300964355e-01 9.823529124259948730e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.137254834175109863e-01 9.588235020637512207e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.215686202049255371e-01 9.352940917015075684e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.294117569923400879e-01 9.117646813392639160e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.372548937797546387e-01 8.882352709770202637e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.450980305671691895e-01 8.647058606147766113e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.529411673545837402e-01 8.411764502525329590e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.607843041419982910e-01 8.176470398902893066e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.686274409294128418e-01 7.941176295280456543e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.764705777168273926e-01 7.705882191658020020e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.843137145042419434e-01 7.470588088035583496e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.921568512916564941e-01 7.235293984413146973e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.999999880790710449e-01 6.999999880790710449e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.078431248664855957e-01 6.764705777168273926e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.156862616539001465e-01 6.529411673545837402e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.235293984413146973e-01 6.294117569923400879e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.313725352287292480e-01 6.058823466300964355e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.392156720161437988e-01 5.823529362678527832e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.470588088035583496e-01 5.588235259056091309e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.549019455909729004e-01 5.352941155433654785e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.627450823783874512e-01 5.117647051811218262e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.705882191658020020e-01 4.882352948188781738e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.784313559532165527e-01 4.647058844566345215e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.862744927406311035e-01 4.411764740943908691e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.941176295280456543e-01 4.176470637321472168e-01 1.000000000000000000e+00 -3.921568859368562698e-03 8.007842898368835449e-01 4.007843136787414551e-01 1.000000000000000000e+00 -1.960784383118152618e-02 8.039215803146362305e-01 4.039215743541717529e-01 1.000000000000000000e+00 -3.529411926865577698e-02 8.070588111877441406e-01 4.070588350296020508e-01 1.000000000000000000e+00 -5.098039284348487854e-02 8.101961016654968262e-01 4.101960659027099609e-01 1.000000000000000000e+00 -6.666667014360427856e-02 8.133333325386047363e-01 4.133333265781402588e-01 1.000000000000000000e+00 -8.235294371843338013e-02 8.164705634117126465e-01 4.164705872535705566e-01 1.000000000000000000e+00 -9.803921729326248169e-02 8.196078538894653320e-01 4.196078479290008545e-01 1.000000000000000000e+00 -1.137254908680915833e-01 8.227450847625732422e-01 4.227451086044311523e-01 1.000000000000000000e+00 -1.294117718935012817e-01 8.258823752403259277e-01 4.258823394775390625e-01 1.000000000000000000e+00 -1.450980454683303833e-01 8.290196061134338379e-01 4.290196001529693604e-01 1.000000000000000000e+00 -1.607843190431594849e-01 8.321568369865417480e-01 4.321568608283996582e-01 1.000000000000000000e+00 -1.764705926179885864e-01 8.352941274642944336e-01 4.352941215038299561e-01 1.000000000000000000e+00 -1.921568661928176880e-01 8.384313583374023438e-01 4.384313821792602539e-01 1.000000000000000000e+00 -2.078431397676467896e-01 8.415686488151550293e-01 4.415686130523681641e-01 1.000000000000000000e+00 -2.235294133424758911e-01 8.447058796882629395e-01 4.447058737277984619e-01 1.000000000000000000e+00 -2.392156869173049927e-01 8.478431105613708496e-01 4.478431344032287598e-01 1.000000000000000000e+00 -2.549019753932952881e-01 8.509804010391235352e-01 4.509803950786590576e-01 1.000000000000000000e+00 -2.705882489681243896e-01 8.541176319122314453e-01 4.541176557540893555e-01 1.000000000000000000e+00 -2.862745225429534912e-01 8.572549223899841309e-01 4.572549164295196533e-01 1.000000000000000000e+00 -3.019607961177825928e-01 8.603921532630920410e-01 4.603921473026275635e-01 1.000000000000000000e+00 -3.176470696926116943e-01 8.635293841361999512e-01 4.635294079780578613e-01 1.000000000000000000e+00 -3.333333432674407959e-01 8.666666746139526367e-01 4.666666686534881592e-01 1.000000000000000000e+00 -3.490196168422698975e-01 8.698039054870605469e-01 4.698039293289184570e-01 1.000000000000000000e+00 -3.647058904170989990e-01 8.729411959648132324e-01 4.729411900043487549e-01 1.000000000000000000e+00 -3.803921639919281006e-01 8.760784268379211426e-01 4.760784208774566650e-01 1.000000000000000000e+00 -3.960784375667572021e-01 8.792156577110290527e-01 4.792156815528869629e-01 1.000000000000000000e+00 -4.117647111415863037e-01 8.823529481887817383e-01 4.823529422283172607e-01 1.000000000000000000e+00 -4.274509847164154053e-01 8.854901790618896484e-01 4.854902029037475586e-01 1.000000000000000000e+00 -4.431372582912445068e-01 8.886274695396423340e-01 4.886274635791778564e-01 1.000000000000000000e+00 -4.588235318660736084e-01 8.917647004127502441e-01 4.917646944522857666e-01 1.000000000000000000e+00 -4.745098054409027100e-01 8.949019312858581543e-01 4.949019551277160645e-01 1.000000000000000000e+00 -4.901960790157318115e-01 8.980392217636108398e-01 4.980392158031463623e-01 1.000000000000000000e+00 -5.058823823928833008e-01 9.011764526367187500e-01 5.011764764785766602e-01 1.000000000000000000e+00 -5.215686559677124023e-01 9.043137431144714355e-01 5.043137073516845703e-01 1.000000000000000000e+00 -5.372549295425415039e-01 9.074509739875793457e-01 5.074509978294372559e-01 1.000000000000000000e+00 -5.529412031173706055e-01 9.105882644653320312e-01 5.105882287025451660e-01 1.000000000000000000e+00 -5.686274766921997070e-01 9.137254953384399414e-01 5.137255191802978516e-01 1.000000000000000000e+00 -5.843137502670288086e-01 9.168627262115478516e-01 5.168627500534057617e-01 1.000000000000000000e+00 -6.000000238418579102e-01 9.200000166893005371e-01 5.199999809265136719e-01 1.000000000000000000e+00 -6.156862974166870117e-01 9.231372475624084473e-01 5.231372714042663574e-01 1.000000000000000000e+00 -6.313725709915161133e-01 9.262745380401611328e-01 5.262745022773742676e-01 1.000000000000000000e+00 -6.470588445663452148e-01 9.294117689132690430e-01 5.294117927551269531e-01 1.000000000000000000e+00 -6.627451181411743164e-01 9.325489997863769531e-01 5.325490236282348633e-01 1.000000000000000000e+00 -6.784313917160034180e-01 9.356862902641296387e-01 5.356862545013427734e-01 1.000000000000000000e+00 -6.941176652908325195e-01 9.388235211372375488e-01 5.388235449790954590e-01 1.000000000000000000e+00 -7.098039388656616211e-01 9.419608116149902344e-01 5.419607758522033691e-01 1.000000000000000000e+00 -7.254902124404907227e-01 9.450980424880981445e-01 5.450980663299560547e-01 1.000000000000000000e+00 -7.411764860153198242e-01 9.482352733612060547e-01 5.482352972030639648e-01 1.000000000000000000e+00 -7.568627595901489258e-01 9.513725638389587402e-01 5.513725280761718750e-01 1.000000000000000000e+00 -7.725490331649780273e-01 9.545097947120666504e-01 5.545098185539245605e-01 1.000000000000000000e+00 -7.882353067398071289e-01 9.576470851898193359e-01 5.576470494270324707e-01 1.000000000000000000e+00 -8.039215803146362305e-01 9.607843160629272461e-01 5.607843399047851562e-01 1.000000000000000000e+00 -8.196078538894653320e-01 9.639215469360351562e-01 5.639215707778930664e-01 1.000000000000000000e+00 -8.352941274642944336e-01 9.670588374137878418e-01 5.670588016510009766e-01 1.000000000000000000e+00 -8.509804010391235352e-01 9.701960682868957520e-01 5.701960921287536621e-01 1.000000000000000000e+00 -8.666666746139526367e-01 9.733333587646484375e-01 5.733333230018615723e-01 1.000000000000000000e+00 -8.823529481887817383e-01 9.764705896377563477e-01 5.764706134796142578e-01 1.000000000000000000e+00 -8.980392217636108398e-01 9.796078205108642578e-01 5.796078443527221680e-01 1.000000000000000000e+00 -9.137254953384399414e-01 9.827451109886169434e-01 5.827450752258300781e-01 1.000000000000000000e+00 -9.294117689132690430e-01 9.858823418617248535e-01 5.858823657035827637e-01 1.000000000000000000e+00 -9.450980424880981445e-01 9.890196323394775391e-01 5.890195965766906738e-01 1.000000000000000000e+00 -9.607843160629272461e-01 9.921568632125854492e-01 5.921568870544433594e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.952940940856933594e-01 5.952941179275512695e-01 1.000000000000000000e+00 -9.921568632125854492e-01 9.984313845634460449e-01 5.984313488006591797e-01 1.000000000000000000e+00 -9.960784316062927246e-01 9.949803948402404785e-01 5.978823304176330566e-01 1.000000000000000000e+00 -9.882352948188781738e-01 9.849411845207214355e-01 5.936470627784729004e-01 1.000000000000000000e+00 -9.803921580314636230e-01 9.749019742012023926e-01 5.894117355346679688e-01 1.000000000000000000e+00 -9.725490212440490723e-01 9.648627638816833496e-01 5.851764678955078125e-01 1.000000000000000000e+00 -9.647058844566345215e-01 9.548235535621643066e-01 5.809412002563476562e-01 1.000000000000000000e+00 -9.568627476692199707e-01 9.447843432426452637e-01 5.767058730125427246e-01 1.000000000000000000e+00 -9.490196108818054199e-01 9.347450733184814453e-01 5.724706053733825684e-01 1.000000000000000000e+00 -9.411764740943908691e-01 9.247058629989624023e-01 5.682352781295776367e-01 1.000000000000000000e+00 -9.333333373069763184e-01 9.146666526794433594e-01 5.640000104904174805e-01 1.000000000000000000e+00 -9.254902005195617676e-01 9.046274423599243164e-01 5.597646832466125488e-01 1.000000000000000000e+00 -9.176470637321472168e-01 8.945882320404052734e-01 5.555294156074523926e-01 1.000000000000000000e+00 -9.098039269447326660e-01 8.845490217208862305e-01 5.512940883636474609e-01 1.000000000000000000e+00 -9.019607901573181152e-01 8.745098114013671875e-01 5.470588207244873047e-01 1.000000000000000000e+00 -8.941176533699035645e-01 8.644706010818481445e-01 5.428235530853271484e-01 1.000000000000000000e+00 -8.862745165824890137e-01 8.544313907623291016e-01 5.385882258415222168e-01 1.000000000000000000e+00 -8.784313797950744629e-01 8.443921804428100586e-01 5.343529582023620605e-01 1.000000000000000000e+00 -8.705882430076599121e-01 8.343529701232910156e-01 5.301176309585571289e-01 1.000000000000000000e+00 -8.627451062202453613e-01 8.243137001991271973e-01 5.258823633193969727e-01 1.000000000000000000e+00 -8.549019694328308105e-01 8.142744898796081543e-01 5.216470360755920410e-01 1.000000000000000000e+00 -8.470588326454162598e-01 8.042352795600891113e-01 5.174117684364318848e-01 1.000000000000000000e+00 -8.392156958580017090e-01 7.941960692405700684e-01 5.131764411926269531e-01 1.000000000000000000e+00 -8.313725590705871582e-01 7.841568589210510254e-01 5.089411735534667969e-01 1.000000000000000000e+00 -8.235294222831726074e-01 7.741176486015319824e-01 5.047059059143066406e-01 1.000000000000000000e+00 -8.156862854957580566e-01 7.640784382820129395e-01 5.004705786705017090e-01 1.000000000000000000e+00 -8.078431487083435059e-01 7.540392279624938965e-01 4.962352812290191650e-01 1.000000000000000000e+00 -8.000000119209289551e-01 7.440000176429748535e-01 4.920000135898590088e-01 1.000000000000000000e+00 -7.921568751335144043e-01 7.339608073234558105e-01 4.877647161483764648e-01 1.000000000000000000e+00 -7.843137383460998535e-01 7.239215970039367676e-01 4.835294187068939209e-01 1.000000000000000000e+00 -7.764706015586853027e-01 7.138823270797729492e-01 4.792941212654113770e-01 1.000000000000000000e+00 -7.686274647712707520e-01 7.038431167602539062e-01 4.750588238239288330e-01 1.000000000000000000e+00 -7.607843279838562012e-01 6.938039064407348633e-01 4.708235263824462891e-01 1.000000000000000000e+00 -7.529411911964416504e-01 6.837646961212158203e-01 4.665882289409637451e-01 1.000000000000000000e+00 -7.450980544090270996e-01 6.737254858016967773e-01 4.623529314994812012e-01 1.000000000000000000e+00 -7.372549176216125488e-01 6.636862754821777344e-01 4.581176340579986572e-01 1.000000000000000000e+00 -7.294117808341979980e-01 6.536470651626586914e-01 4.538823664188385010e-01 1.000000000000000000e+00 -7.215686440467834473e-01 6.436078548431396484e-01 4.496470689773559570e-01 1.000000000000000000e+00 -7.137255072593688965e-01 6.335686445236206055e-01 4.454117715358734131e-01 1.000000000000000000e+00 -7.058823704719543457e-01 6.235294342041015625e-01 4.411764740943908691e-01 1.000000000000000000e+00 -6.980392336845397949e-01 6.134902238845825195e-01 4.369411766529083252e-01 1.000000000000000000e+00 -6.901960968971252441e-01 6.034509539604187012e-01 4.327058792114257812e-01 1.000000000000000000e+00 -6.823529601097106934e-01 5.934117436408996582e-01 4.284705817699432373e-01 1.000000000000000000e+00 -6.745098233222961426e-01 5.833725333213806152e-01 4.242352843284606934e-01 1.000000000000000000e+00 -6.666666865348815918e-01 5.733333230018615723e-01 4.199999868869781494e-01 1.000000000000000000e+00 -6.588235497474670410e-01 5.632941126823425293e-01 4.157647192478179932e-01 1.000000000000000000e+00 -6.509804129600524902e-01 5.532549023628234863e-01 4.115294218063354492e-01 1.000000000000000000e+00 -6.431372761726379395e-01 5.432156920433044434e-01 4.072941243648529053e-01 1.000000000000000000e+00 -6.352941393852233887e-01 5.331764817237854004e-01 4.030588269233703613e-01 1.000000000000000000e+00 -6.274510025978088379e-01 5.231372714042663574e-01 3.988235294818878174e-01 1.000000000000000000e+00 -6.196078658103942871e-01 5.130980610847473145e-01 3.945882320404052734e-01 1.000000000000000000e+00 -6.117647290229797363e-01 5.030588507652282715e-01 3.903529345989227295e-01 1.000000000000000000e+00 -6.039215922355651855e-01 4.930196106433868408e-01 3.861176371574401855e-01 1.000000000000000000e+00 -5.960784554481506348e-01 4.829804003238677979e-01 3.818823397159576416e-01 1.000000000000000000e+00 -5.882353186607360840e-01 4.729411900043487549e-01 3.776470720767974854e-01 1.000000000000000000e+00 -5.803921818733215332e-01 4.629019498825073242e-01 3.734117746353149414e-01 1.000000000000000000e+00 -5.725490450859069824e-01 4.528627395629882812e-01 3.691764771938323975e-01 1.000000000000000000e+00 -5.647059082984924316e-01 4.428235292434692383e-01 3.649411797523498535e-01 1.000000000000000000e+00 -5.568627715110778809e-01 4.327843189239501953e-01 3.607058823108673096e-01 1.000000000000000000e+00 -5.490196347236633301e-01 4.227451086044311523e-01 3.564705848693847656e-01 1.000000000000000000e+00 -5.411764979362487793e-01 4.127058684825897217e-01 3.522352874279022217e-01 1.000000000000000000e+00 -5.333333611488342285e-01 4.026666581630706787e-01 3.479999899864196777e-01 1.000000000000000000e+00 -5.254902243614196777e-01 3.926274478435516357e-01 3.437646925449371338e-01 1.000000000000000000e+00 -5.176470875740051270e-01 3.825882375240325928e-01 3.395294249057769775e-01 1.000000000000000000e+00 -5.098039507865905762e-01 3.725490272045135498e-01 3.352941274642944336e-01 1.000000000000000000e+00 -5.019608139991760254e-01 3.625098168849945068e-01 3.310588300228118896e-01 1.000000000000000000e+00 -5.058823823928833008e-01 3.675294220447540283e-01 3.378823399543762207e-01 1.000000000000000000e+00 -5.137255191802978516e-01 3.775686323642730713e-01 3.483921587467193604e-01 1.000000000000000000e+00 -5.215686559677124023e-01 3.876078426837921143e-01 3.589019477367401123e-01 1.000000000000000000e+00 -5.294117927551269531e-01 3.976470530033111572e-01 3.694117665290832520e-01 1.000000000000000000e+00 -5.372549295425415039e-01 4.076862633228302002e-01 3.799215555191040039e-01 1.000000000000000000e+00 -5.450980663299560547e-01 4.177255034446716309e-01 3.904313743114471436e-01 1.000000000000000000e+00 -5.529412031173706055e-01 4.277647137641906738e-01 4.009411633014678955e-01 1.000000000000000000e+00 -5.607843399047851562e-01 4.378039240837097168e-01 4.114509820938110352e-01 1.000000000000000000e+00 -5.686274766921997070e-01 4.478431344032287598e-01 4.219607710838317871e-01 1.000000000000000000e+00 -5.764706134796142578e-01 4.578823447227478027e-01 4.324705898761749268e-01 1.000000000000000000e+00 -5.843137502670288086e-01 4.679215550422668457e-01 4.429803788661956787e-01 1.000000000000000000e+00 -5.921568870544433594e-01 4.779607951641082764e-01 4.534901976585388184e-01 1.000000000000000000e+00 -6.000000238418579102e-01 4.880000054836273193e-01 4.639999866485595703e-01 1.000000000000000000e+00 -6.078431606292724609e-01 4.980392158031463623e-01 4.745098054409027100e-01 1.000000000000000000e+00 -6.156862974166870117e-01 5.080784559249877930e-01 4.850195944309234619e-01 1.000000000000000000e+00 -6.235294342041015625e-01 5.181176662445068359e-01 4.955294132232666016e-01 1.000000000000000000e+00 -6.313725709915161133e-01 5.281568765640258789e-01 5.060392022132873535e-01 1.000000000000000000e+00 -6.392157077789306641e-01 5.381960868835449219e-01 5.165489912033081055e-01 1.000000000000000000e+00 -6.470588445663452148e-01 5.482352972030639648e-01 5.270588397979736328e-01 1.000000000000000000e+00 -6.549019813537597656e-01 5.582745075225830078e-01 5.375686287879943848e-01 1.000000000000000000e+00 -6.627451181411743164e-01 5.683137178421020508e-01 5.480784177780151367e-01 1.000000000000000000e+00 -6.705882549285888672e-01 5.783529281616210938e-01 5.585882067680358887e-01 1.000000000000000000e+00 -6.784313917160034180e-01 5.883921384811401367e-01 5.690980553627014160e-01 1.000000000000000000e+00 -6.862745285034179688e-01 5.984313488006591797e-01 5.796078443527221680e-01 1.000000000000000000e+00 -6.941176652908325195e-01 6.084705591201782227e-01 5.901176333427429199e-01 1.000000000000000000e+00 -7.019608020782470703e-01 6.185098290443420410e-01 6.006274223327636719e-01 1.000000000000000000e+00 -7.098039388656616211e-01 6.285490393638610840e-01 6.111372709274291992e-01 1.000000000000000000e+00 -7.176470756530761719e-01 6.385882496833801270e-01 6.216470599174499512e-01 1.000000000000000000e+00 -7.254902124404907227e-01 6.486274600028991699e-01 6.321568489074707031e-01 1.000000000000000000e+00 -7.333333492279052734e-01 6.586666703224182129e-01 6.426666378974914551e-01 1.000000000000000000e+00 -7.411764860153198242e-01 6.687058806419372559e-01 6.531764864921569824e-01 1.000000000000000000e+00 -7.490196228027343750e-01 6.787450909614562988e-01 6.636862754821777344e-01 1.000000000000000000e+00 -7.568627595901489258e-01 6.887843012809753418e-01 6.741960644721984863e-01 1.000000000000000000e+00 -7.647058963775634766e-01 6.988235116004943848e-01 6.847058534622192383e-01 1.000000000000000000e+00 -7.725490331649780273e-01 7.088627219200134277e-01 6.952157020568847656e-01 1.000000000000000000e+00 -7.803921699523925781e-01 7.189019322395324707e-01 7.057254910469055176e-01 1.000000000000000000e+00 -7.882353067398071289e-01 7.289412021636962891e-01 7.162352800369262695e-01 1.000000000000000000e+00 -7.960784435272216797e-01 7.389804124832153320e-01 7.267450690269470215e-01 1.000000000000000000e+00 -8.039215803146362305e-01 7.490196228027343750e-01 7.372549176216125488e-01 1.000000000000000000e+00 -8.117647171020507812e-01 7.590588331222534180e-01 7.477647066116333008e-01 1.000000000000000000e+00 -8.196078538894653320e-01 7.690980434417724609e-01 7.582744956016540527e-01 1.000000000000000000e+00 -8.274509906768798828e-01 7.791372537612915039e-01 7.687842845916748047e-01 1.000000000000000000e+00 -8.352941274642944336e-01 7.891764640808105469e-01 7.792941331863403320e-01 1.000000000000000000e+00 -8.431372642517089844e-01 7.992156744003295898e-01 7.898039221763610840e-01 1.000000000000000000e+00 -8.509804010391235352e-01 8.092548847198486328e-01 8.003137111663818359e-01 1.000000000000000000e+00 -8.588235378265380859e-01 8.192940950393676758e-01 8.108235001564025879e-01 1.000000000000000000e+00 -8.666666746139526367e-01 8.293333053588867188e-01 8.213333487510681152e-01 1.000000000000000000e+00 -8.745098114013671875e-01 8.393725752830505371e-01 8.318431377410888672e-01 1.000000000000000000e+00 -8.823529481887817383e-01 8.494117856025695801e-01 8.423529267311096191e-01 1.000000000000000000e+00 -8.901960849761962891e-01 8.594509959220886230e-01 8.528627157211303711e-01 1.000000000000000000e+00 -8.980392217636108398e-01 8.694902062416076660e-01 8.633725643157958984e-01 1.000000000000000000e+00 -9.058823585510253906e-01 8.795294165611267090e-01 8.738823533058166504e-01 1.000000000000000000e+00 -9.137254953384399414e-01 8.895686268806457520e-01 8.843921422958374023e-01 1.000000000000000000e+00 -9.215686321258544922e-01 8.996078372001647949e-01 8.949019312858581543e-01 1.000000000000000000e+00 -9.294117689132690430e-01 9.096470475196838379e-01 9.054117798805236816e-01 1.000000000000000000e+00 -9.372549057006835938e-01 9.196862578392028809e-01 9.159215688705444336e-01 1.000000000000000000e+00 -9.450980424880981445e-01 9.297254681587219238e-01 9.264313578605651855e-01 1.000000000000000000e+00 -9.529411792755126953e-01 9.397646784782409668e-01 9.369411468505859375e-01 1.000000000000000000e+00 -9.607843160629272461e-01 9.498039484024047852e-01 9.474509954452514648e-01 1.000000000000000000e+00 -9.686274528503417969e-01 9.598431587219238281e-01 9.579607844352722168e-01 1.000000000000000000e+00 -9.764705896377563477e-01 9.698823690414428711e-01 9.684705734252929688e-01 1.000000000000000000e+00 -9.843137264251708984e-01 9.799215793609619141e-01 9.789803624153137207e-01 1.000000000000000000e+00 -9.921568632125854492e-01 9.899607896804809570e-01 9.894902110099792480e-01 1.000000000000000000e+00 -1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/turbo b/fastplotlib/utils/colormaps/turbo deleted file mode 100644 index bf6090ac4..000000000 --- a/fastplotlib/utils/colormaps/turbo +++ /dev/null @@ -1,256 +0,0 @@ -1.899500042200088501e-01 7.175999879837036133e-02 2.321700006723403931e-01 1.000000000000000000e+00 -1.948300004005432129e-01 8.338999748229980469e-02 2.614899873733520508e-01 1.000000000000000000e+00 -1.995600014925003052e-01 9.498000144958496094e-02 2.902399897575378418e-01 1.000000000000000000e+00 -2.041500061750411987e-01 1.065199971199035645e-01 3.184399902820587158e-01 1.000000000000000000e+00 -2.085999995470046997e-01 1.180199980735778809e-01 3.460699915885925293e-01 1.000000000000000000e+00 -2.129099965095520020e-01 1.294700056314468384e-01 3.731400072574615479e-01 1.000000000000000000e+00 -2.170799970626831055e-01 1.408700048923492432e-01 3.996399939060211182e-01 1.000000000000000000e+00 -2.211100012063980103e-01 1.522299945354461670e-01 4.255799949169158936e-01 1.000000000000000000e+00 -2.249999940395355225e-01 1.635400056838989258e-01 4.509600102901458740e-01 1.000000000000000000e+00 -2.287500053644180298e-01 1.748100072145462036e-01 4.757800102233886719e-01 1.000000000000000000e+00 -2.323600053787231445e-01 1.860300004482269287e-01 5.000399947166442871e-01 1.000000000000000000e+00 -2.358199954032897949e-01 1.972000002861022949e-01 5.237299799919128418e-01 1.000000000000000000e+00 -2.391500025987625122e-01 2.083300054073333740e-01 5.468599796295166016e-01 1.000000000000000000e+00 -2.423399984836578369e-01 2.194100022315979004e-01 5.694199800491333008e-01 1.000000000000000000e+00 -2.453899979591369629e-01 2.304400056600570679e-01 5.914199948310852051e-01 1.000000000000000000e+00 -2.483000010251998901e-01 2.414299994707107544e-01 6.128600239753723145e-01 1.000000000000000000e+00 -2.510699927806854248e-01 2.523699998855590820e-01 6.337400078773498535e-01 1.000000000000000000e+00 -2.536900043487548828e-01 2.632699906826019287e-01 6.540600061416625977e-01 1.000000000000000000e+00 -2.561799883842468262e-01 2.741200029850006104e-01 6.738100051879882812e-01 1.000000000000000000e+00 -2.585299909114837646e-01 2.849200069904327393e-01 6.930000185966491699e-01 1.000000000000000000e+00 -2.607400119304656982e-01 2.956799864768981934e-01 7.116199731826782227e-01 1.000000000000000000e+00 -2.628000080585479736e-01 3.063899874687194824e-01 7.296800017356872559e-01 1.000000000000000000e+00 -2.647300064563751221e-01 3.170599937438964844e-01 7.471799850463867188e-01 1.000000000000000000e+00 -2.665199935436248779e-01 3.276799917221069336e-01 7.641199827194213867e-01 1.000000000000000000e+00 -2.681599855422973633e-01 3.382500112056732178e-01 7.804999947547912598e-01 1.000000000000000000e+00 -2.696700096130371094e-01 3.487800061702728271e-01 7.963100075721740723e-01 1.000000000000000000e+00 -2.710300087928771973e-01 3.592599928379058838e-01 8.115599751472473145e-01 1.000000000000000000e+00 -2.722600102424621582e-01 3.697000145912170410e-01 8.262400031089782715e-01 1.000000000000000000e+00 -2.733399868011474609e-01 3.800800144672393799e-01 8.403699994087219238e-01 1.000000000000000000e+00 -2.742899954319000244e-01 3.904300034046173096e-01 8.539299964904785156e-01 1.000000000000000000e+00 -2.750900089740753174e-01 4.007200002670288086e-01 8.669199943542480469e-01 1.000000000000000000e+00 -2.757599949836730957e-01 4.109700024127960205e-01 8.793600201606750488e-01 1.000000000000000000e+00 -2.762799859046936035e-01 4.211800098419189453e-01 8.912299871444702148e-01 1.000000000000000000e+00 -2.766700088977813721e-01 4.313400089740753174e-01 9.025400280952453613e-01 1.000000000000000000e+00 -2.769100069999694824e-01 4.414499998092651367e-01 9.132800102233886719e-01 1.000000000000000000e+00 -2.770099937915802002e-01 4.515199959278106689e-01 9.234700202941894531e-01 1.000000000000000000e+00 -2.769800126552581787e-01 4.615299999713897705e-01 9.330899715423583984e-01 1.000000000000000000e+00 -2.768000066280364990e-01 4.715099930763244629e-01 9.421399831771850586e-01 1.000000000000000000e+00 -2.764799892902374268e-01 4.814400076866149902e-01 9.506400227546691895e-01 1.000000000000000000e+00 -2.760300040245056152e-01 4.913200139999389648e-01 9.585700035095214844e-01 1.000000000000000000e+00 -2.754299938678741455e-01 5.011500120162963867e-01 9.659399986267089844e-01 1.000000000000000000e+00 -2.746900022029876709e-01 5.109400153160095215e-01 9.727500081062316895e-01 1.000000000000000000e+00 -2.738099992275238037e-01 5.206900238990783691e-01 9.789900183677673340e-01 1.000000000000000000e+00 -2.727299928665161133e-01 5.303999781608581543e-01 9.846100211143493652e-01 1.000000000000000000e+00 -2.710599899291992188e-01 5.401499867439270020e-01 9.893000125885009766e-01 1.000000000000000000e+00 -2.687799930572509766e-01 5.499500036239624023e-01 9.930300116539001465e-01 1.000000000000000000e+00 -2.659200131893157959e-01 5.597900152206420898e-01 9.958299994468688965e-01 1.000000000000000000e+00 -2.625199854373931885e-01 5.696700215339660645e-01 9.977300167083740234e-01 1.000000000000000000e+00 -2.586199939250946045e-01 5.795800089836120605e-01 9.987599849700927734e-01 1.000000000000000000e+00 -2.542499899864196777e-01 5.895000100135803223e-01 9.989600181579589844e-01 1.000000000000000000e+00 -2.494599968194961548e-01 5.994300246238708496e-01 9.983500242233276367e-01 1.000000000000000000e+00 -2.442699968814849854e-01 6.093699932098388672e-01 9.969699978828430176e-01 1.000000000000000000e+00 -2.387399971485137939e-01 6.193100214004516602e-01 9.948499798774719238e-01 1.000000000000000000e+00 -2.328799962997436523e-01 6.292300224304199219e-01 9.920200109481811523e-01 1.000000000000000000e+00 -2.267599999904632568e-01 6.391299962997436523e-01 9.885100126266479492e-01 1.000000000000000000e+00 -2.203900068998336792e-01 6.490100026130676270e-01 9.843599796295166016e-01 1.000000000000000000e+00 -2.138199955224990845e-01 6.588600277900695801e-01 9.795899987220764160e-01 1.000000000000000000e+00 -2.070800065994262695e-01 6.686599850654602051e-01 9.742299914360046387e-01 1.000000000000000000e+00 -2.002100050449371338e-01 6.784200072288513184e-01 9.683300256729125977e-01 1.000000000000000000e+00 -1.932599991559982300e-01 6.881200075149536133e-01 9.618999958038330078e-01 1.000000000000000000e+00 -1.862500011920928955e-01 6.977499723434448242e-01 9.549800157546997070e-01 1.000000000000000000e+00 -1.792300045490264893e-01 7.073199748992919922e-01 9.476100206375122070e-01 1.000000000000000000e+00 -1.722300052642822266e-01 7.167999744415283203e-01 9.398099780082702637e-01 1.000000000000000000e+00 -1.652899980545043945e-01 7.261999845504760742e-01 9.316099882125854492e-01 1.000000000000000000e+00 -1.584399938583374023e-01 7.355099916458129883e-01 9.230499863624572754e-01 1.000000000000000000e+00 -1.517300009727478027e-01 7.447199821472167969e-01 9.141600131988525391e-01 1.000000000000000000e+00 -1.451900005340576172e-01 7.538099884986877441e-01 9.049599766731262207e-01 1.000000000000000000e+00 -1.388600021600723267e-01 7.627900242805480957e-01 8.955000042915344238e-01 1.000000000000000000e+00 -1.327800005674362183e-01 7.716500163078308105e-01 8.858000040054321289e-01 1.000000000000000000e+00 -1.269800066947937012e-01 7.803699970245361328e-01 8.758999705314636230e-01 1.000000000000000000e+00 -1.215099990367889404e-01 7.889599800109863281e-01 8.658099770545959473e-01 1.000000000000000000e+00 -1.163899973034858704e-01 7.973999977111816406e-01 8.555899858474731445e-01 1.000000000000000000e+00 -1.116700023412704468e-01 8.056899905204772949e-01 8.452500104904174805e-01 1.000000000000000000e+00 -1.073800027370452881e-01 8.138099908828735352e-01 8.348399996757507324e-01 1.000000000000000000e+00 -1.035699993371963501e-01 8.217700123786926270e-01 8.243700265884399414e-01 1.000000000000000000e+00 -1.002599969506263733e-01 8.295500278472900391e-01 8.138899803161621094e-01 1.000000000000000000e+00 -9.749999642372131348e-02 8.371400237083435059e-01 8.034200072288513184e-01 1.000000000000000000e+00 -9.532000124454498291e-02 8.445500135421752930e-01 7.929900288581848145e-01 1.000000000000000000e+00 -9.376999735832214355e-02 8.517500162124633789e-01 7.826399803161621094e-01 1.000000000000000000e+00 -9.286999702453613281e-02 8.587499856948852539e-01 7.724000215530395508e-01 1.000000000000000000e+00 -9.267000108957290649e-02 8.655400276184082031e-01 7.623000144958496094e-01 1.000000000000000000e+00 -9.319999814033508301e-02 8.721100091934204102e-01 7.523699998855590820e-01 1.000000000000000000e+00 -9.450999647378921509e-02 8.784400224685668945e-01 7.426499724388122559e-01 1.000000000000000000e+00 -9.662000089883804321e-02 8.845400214195251465e-01 7.331600189208984375e-01 1.000000000000000000e+00 -9.957999736070632935e-02 8.903999924659729004e-01 7.239300012588500977e-01 1.000000000000000000e+00 -1.034199967980384827e-01 8.960000276565551758e-01 7.149999737739562988e-01 1.000000000000000000e+00 -1.081499978899955750e-01 9.014199972152709961e-01 7.059900164604187012e-01 1.000000000000000000e+00 -1.137399971485137939e-01 9.067299962043762207e-01 6.965100169181823730e-01 1.000000000000000000e+00 -1.201400011777877808e-01 9.119300246238708496e-01 6.866000294685363770e-01 1.000000000000000000e+00 -1.273300051689147949e-01 9.170100092887878418e-01 6.762700080871582031e-01 1.000000000000000000e+00 -1.352600008249282837e-01 9.219700098037719727e-01 6.655600070953369141e-01 1.000000000000000000e+00 -1.439100056886672974e-01 9.268000125885009766e-01 6.544799804687500000e-01 1.000000000000000000e+00 -1.532299965620040894e-01 9.315099716186523438e-01 6.430799961090087891e-01 1.000000000000000000e+00 -1.631900072097778320e-01 9.360899925231933594e-01 6.313700079917907715e-01 1.000000000000000000e+00 -1.737699955701828003e-01 9.405300021171569824e-01 6.193799972534179688e-01 1.000000000000000000e+00 -1.849099993705749512e-01 9.448400139808654785e-01 6.071299910545349121e-01 1.000000000000000000e+00 -1.965900063514709473e-01 9.490100145339965820e-01 5.946599841117858887e-01 1.000000000000000000e+00 -2.087700068950653076e-01 9.530400037765502930e-01 5.819900035858154297e-01 1.000000000000000000e+00 -2.214200049638748169e-01 9.569200277328491211e-01 5.691400170326232910e-01 1.000000000000000000e+00 -2.344900071620941162e-01 9.606500267982482910e-01 5.561400055885314941e-01 1.000000000000000000e+00 -2.479699999094009399e-01 9.642300009727478027e-01 5.430300235748291016e-01 1.000000000000000000e+00 -2.617999911308288574e-01 9.676499962806701660e-01 5.298100113868713379e-01 1.000000000000000000e+00 -2.759700119495391846e-01 9.709200263023376465e-01 5.165299773216247559e-01 1.000000000000000000e+00 -2.904199957847595215e-01 9.740300178527832031e-01 5.032100081443786621e-01 1.000000000000000000e+00 -3.051300048828125000e-01 9.769700169563293457e-01 4.898700118064880371e-01 1.000000000000000000e+00 -3.200600147247314453e-01 9.797400236129760742e-01 4.765399992465972900e-01 1.000000000000000000e+00 -3.351700007915496826e-01 9.823399782180786133e-01 4.632500112056732178e-01 1.000000000000000000e+00 -3.504300117492675781e-01 9.847699999809265137e-01 4.500199854373931885e-01 1.000000000000000000e+00 -3.658100068569183350e-01 9.870200157165527344e-01 4.368799924850463867e-01 1.000000000000000000e+00 -3.812699913978576660e-01 9.890900254249572754e-01 4.238600134849548340e-01 1.000000000000000000e+00 -3.967800140380859375e-01 9.909800291061401367e-01 4.109799861907958984e-01 1.000000000000000000e+00 -4.122900068759918213e-01 9.926800131797790527e-01 3.982599973678588867e-01 1.000000000000000000e+00 -4.277800023555755615e-01 9.941899776458740234e-01 3.857499957084655762e-01 1.000000000000000000e+00 -4.432100057601928711e-01 9.955099821090698242e-01 3.734500110149383545e-01 1.000000000000000000e+00 -4.585399925708770752e-01 9.966300129890441895e-01 3.614000082015991211e-01 1.000000000000000000e+00 -4.737499952316284180e-01 9.975500106811523438e-01 3.496299982070922852e-01 1.000000000000000000e+00 -4.887900054454803467e-01 9.982799887657165527e-01 3.381600081920623779e-01 1.000000000000000000e+00 -5.036200284957885742e-01 9.987900257110595703e-01 3.270100057125091553e-01 1.000000000000000000e+00 -5.182200074195861816e-01 9.991000294685363770e-01 3.162199854850769043e-01 1.000000000000000000e+00 -5.325499773025512695e-01 9.991899728775024414e-01 3.058100044727325439e-01 1.000000000000000000e+00 -5.465800166130065918e-01 9.990699887275695801e-01 2.958100140094757080e-01 1.000000000000000000e+00 -5.602599978446960449e-01 9.987300038337707520e-01 2.862299978733062744e-01 1.000000000000000000e+00 -5.735700130462646484e-01 9.981700181961059570e-01 2.771199941635131836e-01 1.000000000000000000e+00 -5.864599943161010742e-01 9.973899722099304199e-01 2.684899866580963135e-01 1.000000000000000000e+00 -5.989099740982055664e-01 9.963799715042114258e-01 2.603799998760223389e-01 1.000000000000000000e+00 -6.108800172805786133e-01 9.951400160789489746e-01 2.527999877929687500e-01 1.000000000000000000e+00 -6.223300099372863770e-01 9.936599731445312500e-01 2.457900047302246094e-01 1.000000000000000000e+00 -6.332299709320068359e-01 9.919499754905700684e-01 2.393700033426284790e-01 1.000000000000000000e+00 -6.436200141906738281e-01 9.899899959564208984e-01 2.335599958896636963e-01 1.000000000000000000e+00 -6.539400219917297363e-01 9.877499938011169434e-01 2.283499985933303833e-01 1.000000000000000000e+00 -6.642799973487854004e-01 9.852399826049804688e-01 2.237000018358230591e-01 1.000000000000000000e+00 -6.746199727058410645e-01 9.824600219726562500e-01 2.196000069379806519e-01 1.000000000000000000e+00 -6.849399805068969727e-01 9.794099926948547363e-01 2.160200029611587524e-01 1.000000000000000000e+00 -6.952499747276306152e-01 9.761000275611877441e-01 2.129400074481964111e-01 1.000000000000000000e+00 -7.055299878120422363e-01 9.725499749183654785e-01 2.103199958801269531e-01 1.000000000000000000e+00 -7.157700061798095703e-01 9.687500000000000000e-01 2.081499993801116943e-01 1.000000000000000000e+00 -7.259600162506103516e-01 9.646999835968017578e-01 2.064000070095062256e-01 1.000000000000000000e+00 -7.361000180244445801e-01 9.604300260543823242e-01 2.050399929285049438e-01 1.000000000000000000e+00 -7.461699843406677246e-01 9.559299945831298828e-01 2.040600031614303589e-01 1.000000000000000000e+00 -7.561699748039245605e-01 9.512100219726562500e-01 2.034299969673156738e-01 1.000000000000000000e+00 -7.660800218582153320e-01 9.462699890136718750e-01 2.031099945306777954e-01 1.000000000000000000e+00 -7.759100198745727539e-01 9.411299824714660645e-01 2.030999958515167236e-01 1.000000000000000000e+00 -7.856299877166748047e-01 9.357900023460388184e-01 2.033600062131881714e-01 1.000000000000000000e+00 -7.952399849891662598e-01 9.302499890327453613e-01 2.038599997758865356e-01 1.000000000000000000e+00 -8.047299981117248535e-01 9.245200157165527344e-01 2.045899927616119385e-01 1.000000000000000000e+00 -8.141000270843505859e-01 9.186099767684936523e-01 2.055200040340423584e-01 1.000000000000000000e+00 -8.233299851417541504e-01 9.125300049781799316e-01 2.066300064325332642e-01 1.000000000000000000e+00 -8.324099779129028320e-01 9.062700271606445312e-01 2.078800052404403687e-01 1.000000000000000000e+00 -8.413299918174743652e-01 8.998600244522094727e-01 2.092600017786026001e-01 1.000000000000000000e+00 -8.500999808311462402e-01 8.932800292968750000e-01 2.107400000095367432e-01 1.000000000000000000e+00 -8.586800098419189453e-01 8.865500092506408691e-01 2.123000025749206543e-01 1.000000000000000000e+00 -8.670899868011474609e-01 8.796799778938293457e-01 2.139099985361099243e-01 1.000000000000000000e+00 -8.752999901771545410e-01 8.726699948310852051e-01 2.155500054359436035e-01 1.000000000000000000e+00 -8.833100199699401855e-01 8.655300140380859375e-01 2.171899974346160889e-01 1.000000000000000000e+00 -8.911200165748596191e-01 8.582599759101867676e-01 2.187999933958053589e-01 1.000000000000000000e+00 -8.986999988555908203e-01 8.508700132369995117e-01 2.203799933195114136e-01 1.000000000000000000e+00 -9.060500264167785645e-01 8.433700203895568848e-01 2.218800038099288940e-01 1.000000000000000000e+00 -9.131699800491333008e-01 8.357599973678588867e-01 2.232799977064132690e-01 1.000000000000000000e+00 -9.200400114059448242e-01 8.280599713325500488e-01 2.245599925518035889e-01 1.000000000000000000e+00 -9.266600012779235840e-01 8.202499747276306152e-01 2.257000058889389038e-01 1.000000000000000000e+00 -9.330099821090698242e-01 8.123599886894226074e-01 2.266699969768524170e-01 1.000000000000000000e+00 -9.390900135040283203e-01 8.043900132179260254e-01 2.274399995803833008e-01 1.000000000000000000e+00 -9.448900222778320312e-01 7.963399887084960938e-01 2.280000001192092896e-01 1.000000000000000000e+00 -9.503899812698364258e-01 7.882300019264221191e-01 2.283100038766860962e-01 1.000000000000000000e+00 -9.556000232696533203e-01 7.800499796867370605e-01 2.283599972724914551e-01 1.000000000000000000e+00 -9.604899883270263672e-01 7.718099951744079590e-01 2.281100004911422729e-01 1.000000000000000000e+00 -9.650700092315673828e-01 7.635200023651123047e-01 2.275400012731552124e-01 1.000000000000000000e+00 -9.693099856376647949e-01 7.551900148391723633e-01 2.266300022602081299e-01 1.000000000000000000e+00 -9.732300043106079102e-01 7.468199729919433594e-01 2.253600060939788818e-01 1.000000000000000000e+00 -9.767900109291076660e-01 7.384200096130371094e-01 2.236900031566619873e-01 1.000000000000000000e+00 -9.800000190734863281e-01 7.300000190734863281e-01 2.216099947690963745e-01 1.000000000000000000e+00 -9.828900098800659180e-01 7.214000225067138672e-01 2.191800028085708618e-01 1.000000000000000000e+00 -9.854900240898132324e-01 7.124999761581420898e-01 2.164999991655349731e-01 1.000000000000000000e+00 -9.878100156784057617e-01 7.032999992370605469e-01 2.135799974203109741e-01 1.000000000000000000e+00 -9.898599982261657715e-01 6.938199996948242188e-01 2.104299962520599365e-01 1.000000000000000000e+00 -9.916300177574157715e-01 6.840800046920776367e-01 2.070599943399429321e-01 1.000000000000000000e+00 -9.931399822235107422e-01 6.740800142288208008e-01 2.034800052642822266e-01 1.000000000000000000e+00 -9.943799972534179688e-01 6.638600230216979980e-01 1.997099965810775757e-01 1.000000000000000000e+00 -9.953500032424926758e-01 6.534100174903869629e-01 1.957699954509735107e-01 1.000000000000000000e+00 -9.960700273513793945e-01 6.427699923515319824e-01 1.916500031948089600e-01 1.000000000000000000e+00 -9.965400099754333496e-01 6.319299936294555664e-01 1.873800009489059448e-01 1.000000000000000000e+00 -9.967499971389770508e-01 6.209300160408020020e-01 1.829700022935867310e-01 1.000000000000000000e+00 -9.967200160026550293e-01 6.097699999809265137e-01 1.784200072288513184e-01 1.000000000000000000e+00 -9.964399933815002441e-01 5.984600186347961426e-01 1.737599968910217285e-01 1.000000000000000000e+00 -9.959300160408020020e-01 5.870299935340881348e-01 1.689900010824203491e-01 1.000000000000000000e+00 -9.951699972152709961e-01 5.754899978637695312e-01 1.641200035810470581e-01 1.000000000000000000e+00 -9.941899776458740234e-01 5.638599991798400879e-01 1.591800004243850708e-01 1.000000000000000000e+00 -9.929699897766113281e-01 5.521399974822998047e-01 1.541700065135955811e-01 1.000000000000000000e+00 -9.915300011634826660e-01 5.403599739074707031e-01 1.491000056266784668e-01 1.000000000000000000e+00 -9.898700118064880371e-01 5.285400152206420898e-01 1.439799964427947998e-01 1.000000000000000000e+00 -9.879900217056274414e-01 5.166699886322021484e-01 1.388300061225891113e-01 1.000000000000000000e+00 -9.858999848365783691e-01 5.047900080680847168e-01 1.336700022220611572e-01 1.000000000000000000e+00 -9.836000204086303711e-01 4.929099977016448975e-01 1.284900009632110596e-01 1.000000000000000000e+00 -9.810799956321716309e-01 4.810400009155273438e-01 1.233199983835220337e-01 1.000000000000000000e+00 -9.783700108528137207e-01 4.691999852657318115e-01 1.181700006127357483e-01 1.000000000000000000e+00 -9.754499793052673340e-01 4.573999941349029541e-01 1.130499988794326782e-01 1.000000000000000000e+00 -9.723399877548217773e-01 4.456500113010406494e-01 1.079699993133544922e-01 1.000000000000000000e+00 -9.690399765968322754e-01 4.339900016784667969e-01 1.029400005936622620e-01 1.000000000000000000e+00 -9.655500054359436035e-01 4.224100112915039062e-01 9.798000007867813110e-02 1.000000000000000000e+00 -9.618700146675109863e-01 4.109300076961517334e-01 9.309999644756317139e-02 1.000000000000000000e+00 -9.580100178718566895e-01 3.995800018310546875e-01 8.831000328063964844e-02 1.000000000000000000e+00 -9.539800286293029785e-01 3.883599936962127686e-01 8.361999690532684326e-02 1.000000000000000000e+00 -9.497699737548828125e-01 3.772900104522705078e-01 7.904999703168869019e-02 1.000000000000000000e+00 -9.453799724578857422e-01 3.663800060749053955e-01 7.461000233888626099e-02 1.000000000000000000e+00 -9.408400058746337891e-01 3.556599915027618408e-01 7.030999660491943359e-02 1.000000000000000000e+00 -9.361199736595153809e-01 3.451299965381622314e-01 6.616000086069107056e-02 1.000000000000000000e+00 -9.312499761581420898e-01 3.348200023174285889e-01 6.218000128865242004e-02 1.000000000000000000e+00 -9.262300133705139160e-01 3.247300088405609131e-01 5.837000161409378052e-02 1.000000000000000000e+00 -9.210500121116638184e-01 3.148899972438812256e-01 5.474999919533729553e-02 1.000000000000000000e+00 -9.157199859619140625e-01 3.052999973297119141e-01 5.133999884128570557e-02 1.000000000000000000e+00 -9.102399945259094238e-01 2.959899902343750000e-01 4.814000055193901062e-02 1.000000000000000000e+00 -9.046300053596496582e-01 2.869600057601928711e-01 4.515999928116798401e-02 1.000000000000000000e+00 -8.988800048828125000e-01 2.782399952411651611e-01 4.242999851703643799e-02 1.000000000000000000e+00 -8.929799795150756836e-01 2.698099911212921143e-01 3.993000090122222900e-02 1.000000000000000000e+00 -8.869100213050842285e-01 2.615199983119964600e-01 3.753000125288963318e-02 1.000000000000000000e+00 -8.806599974632263184e-01 2.533400058746337891e-01 3.520999848842620850e-02 1.000000000000000000e+00 -8.742200136184692383e-01 2.452600002288818359e-01 3.297000005841255188e-02 1.000000000000000000e+00 -8.676000237464904785e-01 2.372999936342239380e-01 3.082000091671943665e-02 1.000000000000000000e+00 -8.607900142669677734e-01 2.294500023126602173e-01 2.875000052154064178e-02 1.000000000000000000e+00 -8.537999987602233887e-01 2.216999977827072144e-01 2.676999941468238831e-02 1.000000000000000000e+00 -8.466200232505798340e-01 2.140700072050094604e-01 2.487000077962875366e-02 1.000000000000000000e+00 -8.392599821090698242e-01 2.065400034189224243e-01 2.305000089108943939e-02 1.000000000000000000e+00 -8.317199945449829102e-01 1.991200000047683716e-01 2.130999974906444550e-02 1.000000000000000000e+00 -8.239899873733520508e-01 1.918199956417083740e-01 1.965999975800514221e-02 1.000000000000000000e+00 -8.160799741744995117e-01 1.846199929714202881e-01 1.809000037610530853e-02 1.000000000000000000e+00 -8.079900145530700684e-01 1.775300055742263794e-01 1.659999974071979523e-02 1.000000000000000000e+00 -7.997099757194519043e-01 1.705500036478042603e-01 1.520000025629997253e-02 1.000000000000000000e+00 -7.912499904632568359e-01 1.636800020933151245e-01 1.386999990791082382e-02 1.000000000000000000e+00 -7.825999855995178223e-01 1.569299995899200439e-01 1.264000032097101212e-02 1.000000000000000000e+00 -7.737699747085571289e-01 1.502799987792968750e-01 1.147999987006187439e-02 1.000000000000000000e+00 -7.647600173950195312e-01 1.437399983406066895e-01 1.040999963879585266e-02 1.000000000000000000e+00 -7.555599808692932129e-01 1.373099982738494873e-01 9.420000016689300537e-03 1.000000000000000000e+00 -7.461699843406677246e-01 1.309799998998641968e-01 8.510000072419643402e-03 1.000000000000000000e+00 -7.366099953651428223e-01 1.247700005769729614e-01 7.689999882131814957e-03 1.000000000000000000e+00 -7.268599867820739746e-01 1.186700016260147095e-01 6.949999835342168808e-03 1.000000000000000000e+00 -7.169200181961059570e-01 1.126800030469894409e-01 6.289999932050704956e-03 1.000000000000000000e+00 -7.067999839782714844e-01 1.067999973893165588e-01 5.710000172257423401e-03 1.000000000000000000e+00 -6.965000033378601074e-01 1.010200008749961853e-01 5.220000166445970535e-03 1.000000000000000000e+00 -6.860200166702270508e-01 9.536000341176986694e-02 4.809999838471412659e-03 1.000000000000000000e+00 -6.753500103950500488e-01 8.980000019073486328e-02 4.490000195801258087e-03 1.000000000000000000e+00 -6.644899845123291016e-01 8.436000347137451172e-02 4.240000154823064804e-03 1.000000000000000000e+00 -6.534500122070312500e-01 7.902000099420547485e-02 4.079999867826700211e-03 1.000000000000000000e+00 -6.422299742698669434e-01 7.379999756813049316e-02 4.009999800473451614e-03 1.000000000000000000e+00 -6.308199763298034668e-01 6.868000328540802002e-02 4.009999800473451614e-03 1.000000000000000000e+00 -6.192299723625183105e-01 6.367000192403793335e-02 4.100000020116567612e-03 1.000000000000000000e+00 -6.074600219726562500e-01 5.877999961376190186e-02 4.269999917596578598e-03 1.000000000000000000e+00 -5.954999923706054688e-01 5.398999899625778198e-02 4.530000034719705582e-03 1.000000000000000000e+00 -5.833600163459777832e-01 4.930999875068664551e-02 4.860000219196081161e-03 1.000000000000000000e+00 -5.710300207138061523e-01 4.473999887704849243e-02 5.289999768137931824e-03 1.000000000000000000e+00 -5.585200190544128418e-01 4.027999937534332275e-02 5.789999850094318390e-03 1.000000000000000000e+00 -5.458300113677978516e-01 3.593000024557113647e-02 6.380000151693820953e-03 1.000000000000000000e+00 -5.329499840736389160e-01 3.169000148773193359e-02 7.050000131130218506e-03 1.000000000000000000e+00 -5.198900103569030762e-01 2.755999937653541565e-02 7.799999788403511047e-03 1.000000000000000000e+00 -5.066400170326232910e-01 2.353999949991703033e-02 8.630000054836273193e-03 1.000000000000000000e+00 -4.932099878787994385e-01 1.962999999523162842e-02 9.549999609589576721e-03 1.000000000000000000e+00 -4.796000123023986816e-01 1.583000086247920990e-02 1.054999977350234985e-02 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/twilight b/fastplotlib/utils/colormaps/twilight deleted file mode 100644 index c148a835c..000000000 --- a/fastplotlib/utils/colormaps/twilight +++ /dev/null @@ -1,256 +0,0 @@ -8.857501745223999023e-01 8.500092625617980957e-01 8.879736661911010742e-01 1.000000000000000000e+00 -8.837851881980895996e-01 8.507294058799743652e-01 8.872322440147399902e-01 1.000000000000000000e+00 -8.817223310470581055e-01 8.512759208679199219e-01 8.863805532455444336e-01 1.000000000000000000e+00 -8.795410394668579102e-01 8.516567349433898926e-01 8.854143619537353516e-01 1.000000000000000000e+00 -8.772488236427307129e-01 8.518702983856201172e-01 8.843411803245544434e-01 1.000000000000000000e+00 -8.748534917831420898e-01 8.519152402877807617e-01 8.831692934036254883e-01 1.000000000000000000e+00 -8.723313212394714355e-01 8.518016338348388672e-01 8.818970322608947754e-01 1.000000000000000000e+00 -8.697047233581542969e-01 8.515240550041198730e-01 8.805388212203979492e-01 1.000000000000000000e+00 -8.669601678848266602e-01 8.510895967483520508e-01 8.790976405143737793e-01 1.000000000000000000e+00 -8.640898466110229492e-01 8.505039215087890625e-01 8.775792717933654785e-01 1.000000000000000000e+00 -8.611024618148803711e-01 8.497675657272338867e-01 8.759924173355102539e-01 1.000000000000000000e+00 -8.579825758934020996e-01 8.488893508911132812e-01 8.743404150009155273e-01 1.000000000000000000e+00 -8.547259569168090820e-01 8.478748798370361328e-01 8.726282715797424316e-01 1.000000000000000000e+00 -8.513371348381042480e-01 8.467273712158203125e-01 8.708608150482177734e-01 1.000000000000000000e+00 -8.478071093559265137e-01 8.454546332359313965e-01 8.690403699874877930e-01 1.000000000000000000e+00 -8.441261649131774902e-01 8.440648317337036133e-01 8.671697378158569336e-01 1.000000000000000000e+00 -8.403041958808898926e-01 8.425605893135070801e-01 8.652508854866027832e-01 1.000000000000000000e+00 -8.363403081893920898e-01 8.409479856491088867e-01 8.632853031158447266e-01 1.000000000000000000e+00 -8.322270512580871582e-01 8.392348885536193848e-01 8.612756133079528809e-01 1.000000000000000000e+00 -8.279689550399780273e-01 8.374260067939758301e-01 8.592240214347839355e-01 1.000000000000000000e+00 -8.235743045806884766e-01 8.355248570442199707e-01 8.571318984031677246e-01 1.000000000000000000e+00 -8.190465569496154785e-01 8.335365056991577148e-01 8.550020456314086914e-01 1.000000000000000000e+00 -8.143898248672485352e-01 8.314656019210815430e-01 8.528375625610351562e-01 1.000000000000000000e+00 -8.095999956130981445e-01 8.293189406394958496e-01 8.506444096565246582e-01 1.000000000000000000e+00 -8.046916723251342773e-01 8.270983695983886719e-01 8.484244942665100098e-01 1.000000000000000000e+00 -7.996707558631896973e-01 8.248078227043151855e-01 8.461821079254150391e-01 1.000000000000000000e+00 -7.945430278778076172e-01 8.224511742591857910e-01 8.439218401908874512e-01 1.000000000000000000e+00 -7.893144488334655762e-01 8.200321197509765625e-01 8.416486382484436035e-01 1.000000000000000000e+00 -7.839910387992858887e-01 8.175542354583740234e-01 8.393674492835998535e-01 1.000000000000000000e+00 -7.785789370536804199e-01 8.150209188461303711e-01 8.370834589004516602e-01 1.000000000000000000e+00 -7.730841636657714844e-01 8.124352693557739258e-01 8.348017334938049316e-01 1.000000000000000000e+00 -7.675110697746276855e-01 8.098007440567016602e-01 8.325281739234924316e-01 1.000000000000000000e+00 -7.618690729141235352e-01 8.071194887161254883e-01 8.302664756774902344e-01 1.000000000000000000e+00 -7.561644315719604492e-01 8.043940663337707520e-01 8.280214071273803711e-01 1.000000000000000000e+00 -7.504034638404846191e-01 8.016269803047180176e-01 8.257973790168762207e-01 1.000000000000000000e+00 -7.445924878120422363e-01 7.988204956054687500e-01 8.235986828804016113e-01 1.000000000000000000e+00 -7.387377023696899414e-01 7.959766387939453125e-01 8.214292526245117188e-01 1.000000000000000000e+00 -7.328454256057739258e-01 7.930974364280700684e-01 8.192926049232482910e-01 1.000000000000000000e+00 -7.269217967987060547e-01 7.901846766471862793e-01 8.171921968460083008e-01 1.000000000000000000e+00 -7.209728360176086426e-01 7.872399687767028809e-01 8.151307106018066406e-01 1.000000000000000000e+00 -7.150040268898010254e-01 7.842648625373840332e-01 8.131111860275268555e-01 1.000000000000000000e+00 -7.090207934379577637e-01 7.812609076499938965e-01 8.111359477043151855e-01 1.000000000000000000e+00 -7.030297517776489258e-01 7.782290577888488770e-01 8.092061877250671387e-01 1.000000000000000000e+00 -6.970365643501281738e-01 7.751705050468444824e-01 8.073233366012573242e-01 1.000000000000000000e+00 -6.910464167594909668e-01 7.720863223075866699e-01 8.054884076118469238e-01 1.000000000000000000e+00 -6.850644350051879883e-01 7.689774036407470703e-01 8.037020564079284668e-01 1.000000000000000000e+00 -6.790955662727355957e-01 7.658447027206420898e-01 8.019646406173706055e-01 1.000000000000000000e+00 -6.731442213058471680e-01 7.626891136169433594e-01 8.002762794494628906e-01 1.000000000000000000e+00 -6.672148108482360840e-01 7.595112919807434082e-01 7.986367344856262207e-01 1.000000000000000000e+00 -6.613112688064575195e-01 7.563120126724243164e-01 7.970455884933471680e-01 1.000000000000000000e+00 -6.554369330406188965e-01 7.530921101570129395e-01 7.955027222633361816e-01 1.000000000000000000e+00 -6.495957374572753906e-01 7.498520016670227051e-01 7.940067648887634277e-01 1.000000000000000000e+00 -6.437910795211791992e-01 7.465924024581909180e-01 7.925565242767333984e-01 1.000000000000000000e+00 -6.380258798599243164e-01 7.433137893676757812e-01 7.911509871482849121e-01 1.000000000000000000e+00 -6.323027014732360840e-01 7.400166988372802734e-01 7.897889018058776855e-01 1.000000000000000000e+00 -6.266240477561950684e-01 7.367017269134521484e-01 7.884690165519714355e-01 1.000000000000000000e+00 -6.209919452667236328e-01 7.333693504333496094e-01 7.871899604797363281e-01 1.000000000000000000e+00 -6.154084801673889160e-01 7.300199270248413086e-01 7.859502434730529785e-01 1.000000000000000000e+00 -6.098754405975341797e-01 7.266539931297302246e-01 7.847483754158020020e-01 1.000000000000000000e+00 -6.043943166732788086e-01 7.232718467712402344e-01 7.835829854011535645e-01 1.000000000000000000e+00 -5.989665985107421875e-01 7.198739647865295410e-01 7.824525833129882812e-01 1.000000000000000000e+00 -5.935933589935302734e-01 7.164605855941772461e-01 7.813558578491210938e-01 1.000000000000000000e+00 -5.882757902145385742e-01 7.130321264266967773e-01 7.802914381027221680e-01 1.000000000000000000e+00 -5.830148458480834961e-01 7.095888853073120117e-01 7.792578339576721191e-01 1.000000000000000000e+00 -5.778116583824157715e-01 7.061310410499572754e-01 7.782534360885620117e-01 1.000000000000000000e+00 -5.726668834686279297e-01 7.026589512825012207e-01 7.772770524024963379e-01 1.000000000000000000e+00 -5.675811767578125000e-01 6.991727948188781738e-01 7.763274908065795898e-01 1.000000000000000000e+00 -5.625551342964172363e-01 6.956728100776672363e-01 7.754036188125610352e-01 1.000000000000000000e+00 -5.575894117355346680e-01 6.921591162681579590e-01 7.745041251182556152e-01 1.000000000000000000e+00 -5.526844859123229980e-01 6.886319518089294434e-01 7.736279368400573730e-01 1.000000000000000000e+00 -5.478409528732299805e-01 6.850914359092712402e-01 7.727738618850708008e-01 1.000000000000000000e+00 -5.430593490600585938e-01 6.815376877784729004e-01 7.719407677650451660e-01 1.000000000000000000e+00 -5.383401513099670410e-01 6.779708266258239746e-01 7.711273431777954102e-01 1.000000000000000000e+00 -5.336838960647583008e-01 6.743909120559692383e-01 7.703325152397155762e-01 1.000000000000000000e+00 -5.290908813476562500e-01 6.707981228828430176e-01 7.695555090904235840e-01 1.000000000000000000e+00 -5.245615243911743164e-01 6.671924591064453125e-01 7.687954306602478027e-01 1.000000000000000000e+00 -5.200963020324707031e-01 6.635739207267761230e-01 7.680512070655822754e-01 1.000000000000000000e+00 -5.156955718994140625e-01 6.599426269531250000e-01 7.673219442367553711e-01 1.000000000000000000e+00 -5.113599300384521484e-01 6.562985181808471680e-01 7.666066288948059082e-01 1.000000000000000000e+00 -5.070896744728088379e-01 6.526417136192321777e-01 7.659044861793518066e-01 1.000000000000000000e+00 -5.028853416442871094e-01 6.489721536636352539e-01 7.652144432067871094e-01 1.000000000000000000e+00 -4.987473487854003906e-01 6.452898979187011719e-01 7.645357847213745117e-01 1.000000000000000000e+00 -4.946761727333068848e-01 6.415948271751403809e-01 7.638671994209289551e-01 1.000000000000000000e+00 -4.906722605228424072e-01 6.378870606422424316e-01 7.632081508636474609e-01 1.000000000000000000e+00 -4.867359697818756104e-01 6.341664791107177734e-01 7.625578045845031738e-01 1.000000000000000000e+00 -4.828677773475646973e-01 6.304330229759216309e-01 7.619153857231140137e-01 1.000000000000000000e+00 -4.790681600570678711e-01 6.266867518424987793e-01 7.612800002098083496e-01 1.000000000000000000e+00 -4.753375351428985596e-01 6.229275465011596680e-01 7.606508731842041016e-01 1.000000000000000000e+00 -4.716762900352478027e-01 6.191554069519042969e-01 7.600271105766296387e-01 1.000000000000000000e+00 -4.680849015712738037e-01 6.153702735900878906e-01 7.594078779220581055e-01 1.000000000000000000e+00 -4.645637571811676025e-01 6.115720868110656738e-01 7.587924003601074219e-01 1.000000000000000000e+00 -4.611132740974426270e-01 6.077607870101928711e-01 7.581798434257507324e-01 1.000000000000000000e+00 -4.577337801456451416e-01 6.039363145828247070e-01 7.575693726539611816e-01 1.000000000000000000e+00 -4.544256329536437988e-01 6.000986099243164062e-01 7.569601535797119141e-01 1.000000000000000000e+00 -4.511891901493072510e-01 5.962476134300231934e-01 7.563512325286865234e-01 1.000000000000000000e+00 -4.480247199535369873e-01 5.923833250999450684e-01 7.557417750358581543e-01 1.000000000000000000e+00 -4.449324607849121094e-01 5.885056257247924805e-01 7.551311254501342773e-01 1.000000000000000000e+00 -4.419127106666564941e-01 5.846143960952758789e-01 7.545183897018432617e-01 1.000000000000000000e+00 -4.389656484127044678e-01 5.807096958160400391e-01 7.539027333259582520e-01 1.000000000000000000e+00 -4.360913932323455811e-01 5.767914056777954102e-01 7.532833814620971680e-01 1.000000000000000000e+00 -4.332900941371917725e-01 5.728594064712524414e-01 7.526594400405883789e-01 1.000000000000000000e+00 -4.305617809295654297e-01 5.689137578010559082e-01 7.520300745964050293e-01 1.000000000000000000e+00 -4.279065132141113281e-01 5.649542808532714844e-01 7.513944506645202637e-01 1.000000000000000000e+00 -4.253242313861846924e-01 5.609810352325439453e-01 7.507516741752624512e-01 1.000000000000000000e+00 -4.228148460388183594e-01 5.569939017295837402e-01 7.501008510589599609e-01 1.000000000000000000e+00 -4.203782379627227783e-01 5.529928803443908691e-01 7.494412660598754883e-01 1.000000000000000000e+00 -4.180141389369964600e-01 5.489778518676757812e-01 7.487719058990478516e-01 1.000000000000000000e+00 -4.157223403453826904e-01 5.449488162994384766e-01 7.480920553207397461e-01 1.000000000000000000e+00 -4.135024547576904297e-01 5.409057736396789551e-01 7.474007606506347656e-01 1.000000000000000000e+00 -4.113541543483734131e-01 5.368486046791076660e-01 7.466971278190612793e-01 1.000000000000000000e+00 -4.092769026756286621e-01 5.327773094177246094e-01 7.459803223609924316e-01 1.000000000000000000e+00 -4.072701930999755859e-01 5.286918878555297852e-01 7.452494502067565918e-01 1.000000000000000000e+00 -4.053334295749664307e-01 5.245922803878784180e-01 7.445036768913269043e-01 1.000000000000000000e+00 -4.034660160541534424e-01 5.204784870147705078e-01 7.437421679496765137e-01 1.000000000000000000e+00 -4.016671478748321533e-01 5.163504481315612793e-01 7.429640293121337891e-01 1.000000000000000000e+00 -3.999360799789428711e-01 5.122081637382507324e-01 7.421684265136718750e-01 1.000000000000000000e+00 -3.982719182968139648e-01 5.080516934394836426e-01 7.413545250892639160e-01 1.000000000000000000e+00 -3.966737389564514160e-01 5.038809180259704590e-01 7.405213713645935059e-01 1.000000000000000000e+00 -3.951405882835388184e-01 4.996958673000335693e-01 7.396681904792785645e-01 1.000000000000000000e+00 -3.936713635921478271e-01 4.954965710639953613e-01 7.387940883636474609e-01 1.000000000000000000e+00 -3.922649621963500977e-01 4.912829995155334473e-01 7.378982305526733398e-01 1.000000000000000000e+00 -3.909201622009277344e-01 4.870552122592926025e-01 7.369797825813293457e-01 1.000000000000000000e+00 -3.896358013153076172e-01 4.828131794929504395e-01 7.360378503799438477e-01 1.000000000000000000e+00 -3.884105384349822998e-01 4.785569012165069580e-01 7.350715994834899902e-01 1.000000000000000000e+00 -3.872430026531219482e-01 4.742864668369293213e-01 7.340801954269409180e-01 1.000000000000000000e+00 -3.861318528652191162e-01 4.700018465518951416e-01 7.330628037452697754e-01 1.000000000000000000e+00 -3.850755691528320312e-01 4.657030701637268066e-01 7.320185303688049316e-01 1.000000000000000000e+00 -3.840726912021636963e-01 4.613901972770690918e-01 7.309466600418090820e-01 1.000000000000000000e+00 -3.831216692924499512e-01 4.570632278919219971e-01 7.298462390899658203e-01 1.000000000000000000e+00 -3.822209537029266357e-01 4.527222514152526855e-01 7.287165522575378418e-01 1.000000000000000000e+00 -3.813688755035400391e-01 4.483672678470611572e-01 7.275567054748535156e-01 1.000000000000000000e+00 -3.805637955665588379e-01 4.439983665943145752e-01 7.263658642768859863e-01 1.000000000000000000e+00 -3.798040449619293213e-01 4.396155774593353271e-01 7.251432538032531738e-01 1.000000000000000000e+00 -3.790878951549530029e-01 4.352189898490905762e-01 7.238879799842834473e-01 1.000000000000000000e+00 -3.784136474132537842e-01 4.308086037635803223e-01 7.225993275642395020e-01 1.000000000000000000e+00 -3.777794837951660156e-01 4.263845086097717285e-01 7.212764024734497070e-01 1.000000000000000000e+00 -3.771837055683135986e-01 4.219467937946319580e-01 7.199184298515319824e-01 1.000000000000000000e+00 -3.766244947910308838e-01 4.174955487251281738e-01 7.185245752334594727e-01 1.000000000000000000e+00 -3.761000037193298340e-01 4.130308032035827637e-01 7.170939445495605469e-01 1.000000000000000000e+00 -3.756084740161895752e-01 4.085526764392852783e-01 7.156258225440979004e-01 1.000000000000000000e+00 -3.751480281352996826e-01 4.040612578392028809e-01 7.141193747520446777e-01 1.000000000000000000e+00 -3.747168481349945068e-01 3.995566368103027344e-01 7.125737071037292480e-01 1.000000000000000000e+00 -3.743131458759307861e-01 3.950389623641967773e-01 7.109879851341247559e-01 1.000000000000000000e+00 -3.739349842071533203e-01 3.905082643032073975e-01 7.093613147735595703e-01 1.000000000000000000e+00 -3.735806345939636230e-01 3.859647512435913086e-01 7.076929807662963867e-01 1.000000000000000000e+00 -3.732481598854064941e-01 3.814084827899932861e-01 7.059820294380187988e-01 1.000000000000000000e+00 -3.729357719421386719e-01 3.768396377563476562e-01 7.042275667190551758e-01 1.000000000000000000e+00 -3.726416528224945068e-01 3.722583353519439697e-01 7.024287581443786621e-01 1.000000000000000000e+00 -3.723639845848083496e-01 3.676647841930389404e-01 7.005846500396728516e-01 1.000000000000000000e+00 -3.721008896827697754e-01 3.630591034889221191e-01 6.986943483352661133e-01 1.000000000000000000e+00 -3.718506097793579102e-01 3.584414720535278320e-01 6.967569589614868164e-01 1.000000000000000000e+00 -3.716113269329071045e-01 3.538121283054351807e-01 6.947715282440185547e-01 1.000000000000000000e+00 -3.713812530040740967e-01 3.491712808609008789e-01 6.927370429039001465e-01 1.000000000000000000e+00 -3.711585700511932373e-01 3.445191085338592529e-01 6.906525492668151855e-01 1.000000000000000000e+00 -3.709415197372436523e-01 3.398559093475341797e-01 6.885170340538024902e-01 1.000000000000000000e+00 -3.707283437252044678e-01 3.351819515228271484e-01 6.863294839859008789e-01 1.000000000000000000e+00 -3.705173730850219727e-01 3.304974138736724854e-01 6.840888857841491699e-01 1.000000000000000000e+00 -3.703068196773529053e-01 3.258026838302612305e-01 6.817941069602966309e-01 1.000000000000000000e+00 -3.700948655605316162e-01 3.210981488227844238e-01 6.794440746307373047e-01 1.000000000000000000e+00 -3.698798120021820068e-01 3.163841068744659424e-01 6.770375370979309082e-01 1.000000000000000000e+00 -3.696598708629608154e-01 3.116609752178192139e-01 6.745734214782714844e-01 1.000000000000000000e+00 -3.694333434104919434e-01 3.069292306900024414e-01 6.720505356788635254e-01 1.000000000000000000e+00 -3.691984713077545166e-01 3.021893203258514404e-01 6.694675683975219727e-01 1.000000000000000000e+00 -3.689535558223724365e-01 2.974417507648468018e-01 6.668232083320617676e-01 1.000000000000000000e+00 -3.686968088150024414e-01 2.926870882511138916e-01 6.641162633895874023e-01 1.000000000000000000e+00 -3.684265613555908203e-01 2.879259586334228516e-01 6.613452434539794922e-01 1.000000000000000000e+00 -3.681410253047943115e-01 2.831590175628662109e-01 6.585088968276977539e-01 1.000000000000000000e+00 -3.678384423255920410e-01 2.783869802951812744e-01 6.556056737899780273e-01 1.000000000000000000e+00 -3.675170838832855225e-01 2.736106216907501221e-01 6.526341438293457031e-01 1.000000000000000000e+00 -3.671751320362091064e-01 2.688308656215667725e-01 6.495926976203918457e-01 1.000000000000000000e+00 -3.668108582496643066e-01 2.640485763549804688e-01 6.464799046516418457e-01 1.000000000000000000e+00 -3.664224445819854736e-01 2.592647969722747803e-01 6.432940959930419922e-01 1.000000000000000000e+00 -3.660085499286651611e-01 2.544804513454437256e-01 6.400336027145385742e-01 1.000000000000000000e+00 -3.655669689178466797e-01 2.496968358755111694e-01 6.366967558860778809e-01 1.000000000000000000e+00 -3.650957942008972168e-01 2.449153661727905273e-01 6.332817077636718750e-01 1.000000000000000000e+00 -3.645930886268615723e-01 2.401374727487564087e-01 6.297867894172668457e-01 1.000000000000000000e+00 -3.640569448471069336e-01 2.353647053241729736e-01 6.262101531028747559e-01 1.000000000000000000e+00 -3.634853661060333252e-01 2.305987626314163208e-01 6.225498914718627930e-01 1.000000000000000000e+00 -3.628764450550079346e-01 2.258414924144744873e-01 6.188041567802429199e-01 1.000000000000000000e+00 -3.622280955314636230e-01 2.210948914289474487e-01 6.149711012840270996e-01 1.000000000000000000e+00 -3.615382909774780273e-01 2.163611203432083130e-01 6.110488176345825195e-01 1.000000000000000000e+00 -3.608049452304840088e-01 2.116425186395645142e-01 6.070353388786315918e-01 1.000000000000000000e+00 -3.600268065929412842e-01 2.069412320852279663e-01 6.029284596443176270e-01 1.000000000000000000e+00 -3.592008948326110840e-01 2.022603750228881836e-01 5.987265110015869141e-01 1.000000000000000000e+00 -3.583248853683471680e-01 1.976029425859451294e-01 5.944277048110961914e-01 1.000000000000000000e+00 -3.573966324329376221e-01 1.929720789194107056e-01 5.900301337242126465e-01 1.000000000000000000e+00 -3.564138114452362061e-01 1.883711963891983032e-01 5.855320692062377930e-01 1.000000000000000000e+00 -3.553741574287414551e-01 1.838039308786392212e-01 5.809319019317626953e-01 1.000000000000000000e+00 -3.542753458023071289e-01 1.792741268873214722e-01 5.762280821800231934e-01 1.000000000000000000e+00 -3.531157374382019043e-01 1.747857034206390381e-01 5.714187026023864746e-01 1.000000000000000000e+00 -3.518924713134765625e-01 1.703432053327560425e-01 5.665028691291809082e-01 1.000000000000000000e+00 -3.506030440330505371e-01 1.659512966871261597e-01 5.614796280860900879e-01 1.000000000000000000e+00 -3.492451310157775879e-01 1.616147756576538086e-01 5.563483834266662598e-01 1.000000000000000000e+00 -3.478165268898010254e-01 1.573386341333389282e-01 5.511085391044616699e-01 1.000000000000000000e+00 -3.463150858879089355e-01 1.531280279159545898e-01 5.457599759101867676e-01 1.000000000000000000e+00 -3.447390198707580566e-01 1.489882022142410278e-01 5.403024554252624512e-01 1.000000000000000000e+00 -3.430860042572021484e-01 1.449246555566787720e-01 5.347370505332946777e-01 1.000000000000000000e+00 -3.413541018962860107e-01 1.409427970647811890e-01 5.290650129318237305e-01 1.000000000000000000e+00 -3.395416736602783203e-01 1.370480209589004517e-01 5.232879519462585449e-01 1.000000000000000000e+00 -3.376473188400268555e-01 1.332456171512603760e-01 5.174080729484558105e-01 1.000000000000000000e+00 -3.356697857379913330e-01 1.295407414436340332e-01 5.114280581474304199e-01 1.000000000000000000e+00 -3.336080610752105713e-01 1.259381771087646484e-01 5.053516626358032227e-01 1.000000000000000000e+00 -3.314615488052368164e-01 1.224424540996551514e-01 4.991827607154846191e-01 1.000000000000000000e+00 -3.292300403118133545e-01 1.190576404333114624e-01 4.929259419441223145e-01 1.000000000000000000e+00 -3.269137144088745117e-01 1.157873496413230896e-01 4.865864515304565430e-01 1.000000000000000000e+00 -3.245130777359008789e-01 1.126345992088317871e-01 4.801700711250305176e-01 1.000000000000000000e+00 -3.220288157463073730e-01 1.096011400222778320e-01 4.736849367618560791e-01 1.000000000000000000e+00 -3.194626271724700928e-01 1.066887974739074707e-01 4.671372771263122559e-01 1.000000000000000000e+00 -3.168164789676666260e-01 1.038986146450042725e-01 4.605341553688049316e-01 1.000000000000000000e+00 -3.140927851200103760e-01 1.012307778000831604e-01 4.538833498954772949e-01 1.000000000000000000e+00 -3.112943470478057861e-01 9.868477284908294678e-02 4.471931457519531250e-01 1.000000000000000000e+00 -3.084244430065155029e-01 9.625938534736633301e-02 4.404719471931457520e-01 1.000000000000000000e+00 -3.054867684841156006e-01 9.395276755094528198e-02 4.337284862995147705e-01 1.000000000000000000e+00 -3.024853765964508057e-01 9.176118671894073486e-02 4.269740283489227295e-01 1.000000000000000000e+00 -2.994248270988464355e-01 8.968225121498107910e-02 4.202162027359008789e-01 1.000000000000000000e+00 -2.963100075721740723e-01 8.771324902772903442e-02 4.134625792503356934e-01 1.000000000000000000e+00 -2.931459248065948486e-01 8.585065603256225586e-02 4.067217707633972168e-01 1.000000000000000000e+00 -2.899379134178161621e-01 8.409079164266586304e-02 4.000021517276763916e-01 1.000000000000000000e+00 -2.866915166378021240e-01 8.242987096309661865e-02 3.933118283748626709e-01 1.000000000000000000e+00 -2.834123969078063965e-01 8.086415380239486694e-02 3.866586983203887939e-01 1.000000000000000000e+00 -2.801063954830169678e-01 7.938999682664871216e-02 3.800502717494964600e-01 1.000000000000000000e+00 -2.767793834209442139e-01 7.800394296646118164e-02 3.734938204288482666e-01 1.000000000000000000e+00 -2.734373807907104492e-01 7.670280337333679199e-02 3.669961690902709961e-01 1.000000000000000000e+00 -2.700863778591156006e-01 7.548367232084274292e-02 3.605637550354003906e-01 1.000000000000000000e+00 -2.667323350906372070e-01 7.434401661157608032e-02 3.542027473449707031e-01 1.000000000000000000e+00 -2.633812129497528076e-01 7.328166067600250244e-02 3.479188978672027588e-01 1.000000000000000000e+00 -2.600389420986175537e-01 7.229477912187576294e-02 3.417175710201263428e-01 1.000000000000000000e+00 -2.567119300365447998e-01 7.138010859489440918e-02 3.356064856052398682e-01 1.000000000000000000e+00 -2.534068524837493896e-01 7.053358107805252075e-02 3.295945823192596436e-01 1.000000000000000000e+00 -2.501284480094909668e-01 6.975820660591125488e-02 3.236809968948364258e-01 1.000000000000000000e+00 -2.468822598457336426e-01 6.905364245176315308e-02 3.178699314594268799e-01 1.000000000000000000e+00 -2.436737269163131714e-01 6.841985881328582764e-02 3.121652305126190186e-01 1.000000000000000000e+00 -2.405081391334533691e-01 6.785710155963897705e-02 3.065705597400665283e-01 1.000000000000000000e+00 -2.373906224966049194e-01 6.736588478088378906e-02 3.010892271995544434e-01 1.000000000000000000e+00 -2.343305498361587524e-01 6.693559885025024414e-02 2.957400977611541748e-01 1.000000000000000000e+00 -2.313295453786849976e-01 6.657619029283523560e-02 2.905136048793792725e-01 1.000000000000000000e+00 -2.283917665481567383e-01 6.628997623920440674e-02 2.854107320308685303e-01 1.000000000000000000e+00 -2.255216389894485474e-01 6.607817113399505615e-02 2.804339826107025146e-01 1.000000000000000000e+00 -2.227270603179931641e-01 6.593379378318786621e-02 2.755971550941467285e-01 1.000000000000000000e+00 -2.200125157833099365e-01 6.585791707038879395e-02 2.709028124809265137e-01 1.000000000000000000e+00 -2.173784524202346802e-01 6.585966050624847412e-02 2.663421034812927246e-01 1.000000000000000000e+00 -2.148284316062927246e-01 6.594038754701614380e-02 2.619167566299438477e-01 1.000000000000000000e+00 -2.123741060495376587e-01 6.608502566814422607e-02 2.576516568660736084e-01 1.000000000000000000e+00 -2.100121378898620605e-01 6.630857288837432861e-02 2.535288929939270020e-01 1.000000000000000000e+00 -2.077442407608032227e-01 6.661453098058700562e-02 2.495464384555816650e-01 1.000000000000000000e+00 -2.055805176496505737e-01 6.699046492576599121e-02 2.457249760627746582e-01 1.000000000000000000e+00 -2.035200744867324829e-01 6.744418293237686157e-02 2.420557588338851929e-01 1.000000000000000000e+00 -2.015613317489624023e-01 6.798326969146728516e-02 2.385297417640686035e-01 1.000000000000000000e+00 -1.997157186269760132e-01 6.859271228313446045e-02 2.351709455251693726e-01 1.000000000000000000e+00 -1.979483366012573242e-01 6.931406259536743164e-02 2.319464683532714844e-01 1.000000000000000000e+00 -1.960826069116592407e-01 7.032122462987899780e-02 2.287467271089553833e-01 1.000000000000000000e+00 -1.941035091876983643e-01 7.160830497741699219e-02 2.255872786045074463e-01 1.000000000000000000e+00 -1.919944882392883301e-01 7.318282872438430786e-02 2.224338501691818237e-01 1.000000000000000000e+00 -1.897585391998291016e-01 7.501985877752304077e-02 2.193005084991455078e-01 1.000000000000000000e+00 -1.873922795057296753e-01 7.710209488868713379e-02 2.161887586116790771e-01 1.000000000000000000e+00 -1.848803609609603882e-01 7.942572981119155884e-02 2.130765169858932495e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/twilight_shifted b/fastplotlib/utils/colormaps/twilight_shifted deleted file mode 100644 index b57b2270b..000000000 --- a/fastplotlib/utils/colormaps/twilight_shifted +++ /dev/null @@ -1,256 +0,0 @@ -1.873922795057296753e-01 7.710209488868713379e-02 2.161887586116790771e-01 1.000000000000000000e+00 -1.897585391998291016e-01 7.501985877752304077e-02 2.193005084991455078e-01 1.000000000000000000e+00 -1.919944882392883301e-01 7.318282872438430786e-02 2.224338501691818237e-01 1.000000000000000000e+00 -1.941035091876983643e-01 7.160830497741699219e-02 2.255872786045074463e-01 1.000000000000000000e+00 -1.960826069116592407e-01 7.032122462987899780e-02 2.287467271089553833e-01 1.000000000000000000e+00 -1.979483366012573242e-01 6.931406259536743164e-02 2.319464683532714844e-01 1.000000000000000000e+00 -1.997157186269760132e-01 6.859271228313446045e-02 2.351709455251693726e-01 1.000000000000000000e+00 -2.015613317489624023e-01 6.798326969146728516e-02 2.385297417640686035e-01 1.000000000000000000e+00 -2.035200744867324829e-01 6.744418293237686157e-02 2.420557588338851929e-01 1.000000000000000000e+00 -2.055805176496505737e-01 6.699046492576599121e-02 2.457249760627746582e-01 1.000000000000000000e+00 -2.077442407608032227e-01 6.661453098058700562e-02 2.495464384555816650e-01 1.000000000000000000e+00 -2.100121378898620605e-01 6.630857288837432861e-02 2.535288929939270020e-01 1.000000000000000000e+00 -2.123741060495376587e-01 6.608502566814422607e-02 2.576516568660736084e-01 1.000000000000000000e+00 -2.148284316062927246e-01 6.594038754701614380e-02 2.619167566299438477e-01 1.000000000000000000e+00 -2.173784524202346802e-01 6.585966050624847412e-02 2.663421034812927246e-01 1.000000000000000000e+00 -2.200125157833099365e-01 6.585791707038879395e-02 2.709028124809265137e-01 1.000000000000000000e+00 -2.227270603179931641e-01 6.593379378318786621e-02 2.755971550941467285e-01 1.000000000000000000e+00 -2.255216389894485474e-01 6.607817113399505615e-02 2.804339826107025146e-01 1.000000000000000000e+00 -2.283917665481567383e-01 6.628997623920440674e-02 2.854107320308685303e-01 1.000000000000000000e+00 -2.313295453786849976e-01 6.657619029283523560e-02 2.905136048793792725e-01 1.000000000000000000e+00 -2.343305498361587524e-01 6.693559885025024414e-02 2.957400977611541748e-01 1.000000000000000000e+00 -2.373906224966049194e-01 6.736588478088378906e-02 3.010892271995544434e-01 1.000000000000000000e+00 -2.405081391334533691e-01 6.785710155963897705e-02 3.065705597400665283e-01 1.000000000000000000e+00 -2.436737269163131714e-01 6.841985881328582764e-02 3.121652305126190186e-01 1.000000000000000000e+00 -2.468822598457336426e-01 6.905364245176315308e-02 3.178699314594268799e-01 1.000000000000000000e+00 -2.501284480094909668e-01 6.975820660591125488e-02 3.236809968948364258e-01 1.000000000000000000e+00 -2.534068524837493896e-01 7.053358107805252075e-02 3.295945823192596436e-01 1.000000000000000000e+00 -2.567119300365447998e-01 7.138010859489440918e-02 3.356064856052398682e-01 1.000000000000000000e+00 -2.600389420986175537e-01 7.229477912187576294e-02 3.417175710201263428e-01 1.000000000000000000e+00 -2.633812129497528076e-01 7.328166067600250244e-02 3.479188978672027588e-01 1.000000000000000000e+00 -2.667323350906372070e-01 7.434401661157608032e-02 3.542027473449707031e-01 1.000000000000000000e+00 -2.700863778591156006e-01 7.548367232084274292e-02 3.605637550354003906e-01 1.000000000000000000e+00 -2.734373807907104492e-01 7.670280337333679199e-02 3.669961690902709961e-01 1.000000000000000000e+00 -2.767793834209442139e-01 7.800394296646118164e-02 3.734938204288482666e-01 1.000000000000000000e+00 -2.801063954830169678e-01 7.938999682664871216e-02 3.800502717494964600e-01 1.000000000000000000e+00 -2.834123969078063965e-01 8.086415380239486694e-02 3.866586983203887939e-01 1.000000000000000000e+00 -2.866915166378021240e-01 8.242987096309661865e-02 3.933118283748626709e-01 1.000000000000000000e+00 -2.899379134178161621e-01 8.409079164266586304e-02 4.000021517276763916e-01 1.000000000000000000e+00 -2.931459248065948486e-01 8.585065603256225586e-02 4.067217707633972168e-01 1.000000000000000000e+00 -2.963100075721740723e-01 8.771324902772903442e-02 4.134625792503356934e-01 1.000000000000000000e+00 -2.994248270988464355e-01 8.968225121498107910e-02 4.202162027359008789e-01 1.000000000000000000e+00 -3.024853765964508057e-01 9.176118671894073486e-02 4.269740283489227295e-01 1.000000000000000000e+00 -3.054867684841156006e-01 9.395276755094528198e-02 4.337284862995147705e-01 1.000000000000000000e+00 -3.084244430065155029e-01 9.625938534736633301e-02 4.404719471931457520e-01 1.000000000000000000e+00 -3.112943470478057861e-01 9.868477284908294678e-02 4.471931457519531250e-01 1.000000000000000000e+00 -3.140927851200103760e-01 1.012307778000831604e-01 4.538833498954772949e-01 1.000000000000000000e+00 -3.168164789676666260e-01 1.038986146450042725e-01 4.605341553688049316e-01 1.000000000000000000e+00 -3.194626271724700928e-01 1.066887974739074707e-01 4.671372771263122559e-01 1.000000000000000000e+00 -3.220288157463073730e-01 1.096011400222778320e-01 4.736849367618560791e-01 1.000000000000000000e+00 -3.245130777359008789e-01 1.126345992088317871e-01 4.801700711250305176e-01 1.000000000000000000e+00 -3.269137144088745117e-01 1.157873496413230896e-01 4.865864515304565430e-01 1.000000000000000000e+00 -3.292300403118133545e-01 1.190576404333114624e-01 4.929259419441223145e-01 1.000000000000000000e+00 -3.314615488052368164e-01 1.224424540996551514e-01 4.991827607154846191e-01 1.000000000000000000e+00 -3.336080610752105713e-01 1.259381771087646484e-01 5.053516626358032227e-01 1.000000000000000000e+00 -3.356697857379913330e-01 1.295407414436340332e-01 5.114280581474304199e-01 1.000000000000000000e+00 -3.376473188400268555e-01 1.332456171512603760e-01 5.174080729484558105e-01 1.000000000000000000e+00 -3.395416736602783203e-01 1.370480209589004517e-01 5.232879519462585449e-01 1.000000000000000000e+00 -3.413541018962860107e-01 1.409427970647811890e-01 5.290650129318237305e-01 1.000000000000000000e+00 -3.430860042572021484e-01 1.449246555566787720e-01 5.347370505332946777e-01 1.000000000000000000e+00 -3.447390198707580566e-01 1.489882022142410278e-01 5.403024554252624512e-01 1.000000000000000000e+00 -3.463150858879089355e-01 1.531280279159545898e-01 5.457599759101867676e-01 1.000000000000000000e+00 -3.478165268898010254e-01 1.573386341333389282e-01 5.511085391044616699e-01 1.000000000000000000e+00 -3.492451310157775879e-01 1.616147756576538086e-01 5.563483834266662598e-01 1.000000000000000000e+00 -3.506030440330505371e-01 1.659512966871261597e-01 5.614796280860900879e-01 1.000000000000000000e+00 -3.518924713134765625e-01 1.703432053327560425e-01 5.665028691291809082e-01 1.000000000000000000e+00 -3.531157374382019043e-01 1.747857034206390381e-01 5.714187026023864746e-01 1.000000000000000000e+00 -3.542753458023071289e-01 1.792741268873214722e-01 5.762280821800231934e-01 1.000000000000000000e+00 -3.553741574287414551e-01 1.838039308786392212e-01 5.809319019317626953e-01 1.000000000000000000e+00 -3.564138114452362061e-01 1.883711963891983032e-01 5.855320692062377930e-01 1.000000000000000000e+00 -3.573966324329376221e-01 1.929720789194107056e-01 5.900301337242126465e-01 1.000000000000000000e+00 -3.583248853683471680e-01 1.976029425859451294e-01 5.944277048110961914e-01 1.000000000000000000e+00 -3.592008948326110840e-01 2.022603750228881836e-01 5.987265110015869141e-01 1.000000000000000000e+00 -3.600268065929412842e-01 2.069412320852279663e-01 6.029284596443176270e-01 1.000000000000000000e+00 -3.608049452304840088e-01 2.116425186395645142e-01 6.070353388786315918e-01 1.000000000000000000e+00 -3.615382909774780273e-01 2.163611203432083130e-01 6.110488176345825195e-01 1.000000000000000000e+00 -3.622280955314636230e-01 2.210948914289474487e-01 6.149711012840270996e-01 1.000000000000000000e+00 -3.628764450550079346e-01 2.258414924144744873e-01 6.188041567802429199e-01 1.000000000000000000e+00 -3.634853661060333252e-01 2.305987626314163208e-01 6.225498914718627930e-01 1.000000000000000000e+00 -3.640569448471069336e-01 2.353647053241729736e-01 6.262101531028747559e-01 1.000000000000000000e+00 -3.645930886268615723e-01 2.401374727487564087e-01 6.297867894172668457e-01 1.000000000000000000e+00 -3.650957942008972168e-01 2.449153661727905273e-01 6.332817077636718750e-01 1.000000000000000000e+00 -3.655669689178466797e-01 2.496968358755111694e-01 6.366967558860778809e-01 1.000000000000000000e+00 -3.660085499286651611e-01 2.544804513454437256e-01 6.400336027145385742e-01 1.000000000000000000e+00 -3.664224445819854736e-01 2.592647969722747803e-01 6.432940959930419922e-01 1.000000000000000000e+00 -3.668108582496643066e-01 2.640485763549804688e-01 6.464799046516418457e-01 1.000000000000000000e+00 -3.671751320362091064e-01 2.688308656215667725e-01 6.495926976203918457e-01 1.000000000000000000e+00 -3.675170838832855225e-01 2.736106216907501221e-01 6.526341438293457031e-01 1.000000000000000000e+00 -3.678384423255920410e-01 2.783869802951812744e-01 6.556056737899780273e-01 1.000000000000000000e+00 -3.681410253047943115e-01 2.831590175628662109e-01 6.585088968276977539e-01 1.000000000000000000e+00 -3.684265613555908203e-01 2.879259586334228516e-01 6.613452434539794922e-01 1.000000000000000000e+00 -3.686968088150024414e-01 2.926870882511138916e-01 6.641162633895874023e-01 1.000000000000000000e+00 -3.689535558223724365e-01 2.974417507648468018e-01 6.668232083320617676e-01 1.000000000000000000e+00 -3.691984713077545166e-01 3.021893203258514404e-01 6.694675683975219727e-01 1.000000000000000000e+00 -3.694333434104919434e-01 3.069292306900024414e-01 6.720505356788635254e-01 1.000000000000000000e+00 -3.696598708629608154e-01 3.116609752178192139e-01 6.745734214782714844e-01 1.000000000000000000e+00 -3.698798120021820068e-01 3.163841068744659424e-01 6.770375370979309082e-01 1.000000000000000000e+00 -3.700948655605316162e-01 3.210981488227844238e-01 6.794440746307373047e-01 1.000000000000000000e+00 -3.703068196773529053e-01 3.258026838302612305e-01 6.817941069602966309e-01 1.000000000000000000e+00 -3.705173730850219727e-01 3.304974138736724854e-01 6.840888857841491699e-01 1.000000000000000000e+00 -3.707283437252044678e-01 3.351819515228271484e-01 6.863294839859008789e-01 1.000000000000000000e+00 -3.709415197372436523e-01 3.398559093475341797e-01 6.885170340538024902e-01 1.000000000000000000e+00 -3.711585700511932373e-01 3.445191085338592529e-01 6.906525492668151855e-01 1.000000000000000000e+00 -3.713812530040740967e-01 3.491712808609008789e-01 6.927370429039001465e-01 1.000000000000000000e+00 -3.716113269329071045e-01 3.538121283054351807e-01 6.947715282440185547e-01 1.000000000000000000e+00 -3.718506097793579102e-01 3.584414720535278320e-01 6.967569589614868164e-01 1.000000000000000000e+00 -3.721008896827697754e-01 3.630591034889221191e-01 6.986943483352661133e-01 1.000000000000000000e+00 -3.723639845848083496e-01 3.676647841930389404e-01 7.005846500396728516e-01 1.000000000000000000e+00 -3.726416528224945068e-01 3.722583353519439697e-01 7.024287581443786621e-01 1.000000000000000000e+00 -3.729357719421386719e-01 3.768396377563476562e-01 7.042275667190551758e-01 1.000000000000000000e+00 -3.732481598854064941e-01 3.814084827899932861e-01 7.059820294380187988e-01 1.000000000000000000e+00 -3.735806345939636230e-01 3.859647512435913086e-01 7.076929807662963867e-01 1.000000000000000000e+00 -3.739349842071533203e-01 3.905082643032073975e-01 7.093613147735595703e-01 1.000000000000000000e+00 -3.743131458759307861e-01 3.950389623641967773e-01 7.109879851341247559e-01 1.000000000000000000e+00 -3.747168481349945068e-01 3.995566368103027344e-01 7.125737071037292480e-01 1.000000000000000000e+00 -3.751480281352996826e-01 4.040612578392028809e-01 7.141193747520446777e-01 1.000000000000000000e+00 -3.756084740161895752e-01 4.085526764392852783e-01 7.156258225440979004e-01 1.000000000000000000e+00 -3.761000037193298340e-01 4.130308032035827637e-01 7.170939445495605469e-01 1.000000000000000000e+00 -3.766244947910308838e-01 4.174955487251281738e-01 7.185245752334594727e-01 1.000000000000000000e+00 -3.771837055683135986e-01 4.219467937946319580e-01 7.199184298515319824e-01 1.000000000000000000e+00 -3.777794837951660156e-01 4.263845086097717285e-01 7.212764024734497070e-01 1.000000000000000000e+00 -3.784136474132537842e-01 4.308086037635803223e-01 7.225993275642395020e-01 1.000000000000000000e+00 -3.790878951549530029e-01 4.352189898490905762e-01 7.238879799842834473e-01 1.000000000000000000e+00 -3.798040449619293213e-01 4.396155774593353271e-01 7.251432538032531738e-01 1.000000000000000000e+00 -3.805637955665588379e-01 4.439983665943145752e-01 7.263658642768859863e-01 1.000000000000000000e+00 -3.813688755035400391e-01 4.483672678470611572e-01 7.275567054748535156e-01 1.000000000000000000e+00 -3.822209537029266357e-01 4.527222514152526855e-01 7.287165522575378418e-01 1.000000000000000000e+00 -3.831216692924499512e-01 4.570632278919219971e-01 7.298462390899658203e-01 1.000000000000000000e+00 -3.840726912021636963e-01 4.613901972770690918e-01 7.309466600418090820e-01 1.000000000000000000e+00 -3.850755691528320312e-01 4.657030701637268066e-01 7.320185303688049316e-01 1.000000000000000000e+00 -3.861318528652191162e-01 4.700018465518951416e-01 7.330628037452697754e-01 1.000000000000000000e+00 -3.872430026531219482e-01 4.742864668369293213e-01 7.340801954269409180e-01 1.000000000000000000e+00 -3.884105384349822998e-01 4.785569012165069580e-01 7.350715994834899902e-01 1.000000000000000000e+00 -3.896358013153076172e-01 4.828131794929504395e-01 7.360378503799438477e-01 1.000000000000000000e+00 -3.909201622009277344e-01 4.870552122592926025e-01 7.369797825813293457e-01 1.000000000000000000e+00 -3.922649621963500977e-01 4.912829995155334473e-01 7.378982305526733398e-01 1.000000000000000000e+00 -3.936713635921478271e-01 4.954965710639953613e-01 7.387940883636474609e-01 1.000000000000000000e+00 -3.951405882835388184e-01 4.996958673000335693e-01 7.396681904792785645e-01 1.000000000000000000e+00 -3.966737389564514160e-01 5.038809180259704590e-01 7.405213713645935059e-01 1.000000000000000000e+00 -3.982719182968139648e-01 5.080516934394836426e-01 7.413545250892639160e-01 1.000000000000000000e+00 -3.999360799789428711e-01 5.122081637382507324e-01 7.421684265136718750e-01 1.000000000000000000e+00 -4.016671478748321533e-01 5.163504481315612793e-01 7.429640293121337891e-01 1.000000000000000000e+00 -4.034660160541534424e-01 5.204784870147705078e-01 7.437421679496765137e-01 1.000000000000000000e+00 -4.053334295749664307e-01 5.245922803878784180e-01 7.445036768913269043e-01 1.000000000000000000e+00 -4.072701930999755859e-01 5.286918878555297852e-01 7.452494502067565918e-01 1.000000000000000000e+00 -4.092769026756286621e-01 5.327773094177246094e-01 7.459803223609924316e-01 1.000000000000000000e+00 -4.113541543483734131e-01 5.368486046791076660e-01 7.466971278190612793e-01 1.000000000000000000e+00 -4.135024547576904297e-01 5.409057736396789551e-01 7.474007606506347656e-01 1.000000000000000000e+00 -4.157223403453826904e-01 5.449488162994384766e-01 7.480920553207397461e-01 1.000000000000000000e+00 -4.180141389369964600e-01 5.489778518676757812e-01 7.487719058990478516e-01 1.000000000000000000e+00 -4.203782379627227783e-01 5.529928803443908691e-01 7.494412660598754883e-01 1.000000000000000000e+00 -4.228148460388183594e-01 5.569939017295837402e-01 7.501008510589599609e-01 1.000000000000000000e+00 -4.253242313861846924e-01 5.609810352325439453e-01 7.507516741752624512e-01 1.000000000000000000e+00 -4.279065132141113281e-01 5.649542808532714844e-01 7.513944506645202637e-01 1.000000000000000000e+00 -4.305617809295654297e-01 5.689137578010559082e-01 7.520300745964050293e-01 1.000000000000000000e+00 -4.332900941371917725e-01 5.728594064712524414e-01 7.526594400405883789e-01 1.000000000000000000e+00 -4.360913932323455811e-01 5.767914056777954102e-01 7.532833814620971680e-01 1.000000000000000000e+00 -4.389656484127044678e-01 5.807096958160400391e-01 7.539027333259582520e-01 1.000000000000000000e+00 -4.419127106666564941e-01 5.846143960952758789e-01 7.545183897018432617e-01 1.000000000000000000e+00 -4.449324607849121094e-01 5.885056257247924805e-01 7.551311254501342773e-01 1.000000000000000000e+00 -4.480247199535369873e-01 5.923833250999450684e-01 7.557417750358581543e-01 1.000000000000000000e+00 -4.511891901493072510e-01 5.962476134300231934e-01 7.563512325286865234e-01 1.000000000000000000e+00 -4.544256329536437988e-01 6.000986099243164062e-01 7.569601535797119141e-01 1.000000000000000000e+00 -4.577337801456451416e-01 6.039363145828247070e-01 7.575693726539611816e-01 1.000000000000000000e+00 -4.611132740974426270e-01 6.077607870101928711e-01 7.581798434257507324e-01 1.000000000000000000e+00 -4.645637571811676025e-01 6.115720868110656738e-01 7.587924003601074219e-01 1.000000000000000000e+00 -4.680849015712738037e-01 6.153702735900878906e-01 7.594078779220581055e-01 1.000000000000000000e+00 -4.716762900352478027e-01 6.191554069519042969e-01 7.600271105766296387e-01 1.000000000000000000e+00 -4.753375351428985596e-01 6.229275465011596680e-01 7.606508731842041016e-01 1.000000000000000000e+00 -4.790681600570678711e-01 6.266867518424987793e-01 7.612800002098083496e-01 1.000000000000000000e+00 -4.828677773475646973e-01 6.304330229759216309e-01 7.619153857231140137e-01 1.000000000000000000e+00 -4.867359697818756104e-01 6.341664791107177734e-01 7.625578045845031738e-01 1.000000000000000000e+00 -4.906722605228424072e-01 6.378870606422424316e-01 7.632081508636474609e-01 1.000000000000000000e+00 -4.946761727333068848e-01 6.415948271751403809e-01 7.638671994209289551e-01 1.000000000000000000e+00 -4.987473487854003906e-01 6.452898979187011719e-01 7.645357847213745117e-01 1.000000000000000000e+00 -5.028853416442871094e-01 6.489721536636352539e-01 7.652144432067871094e-01 1.000000000000000000e+00 -5.070896744728088379e-01 6.526417136192321777e-01 7.659044861793518066e-01 1.000000000000000000e+00 -5.113599300384521484e-01 6.562985181808471680e-01 7.666066288948059082e-01 1.000000000000000000e+00 -5.156955718994140625e-01 6.599426269531250000e-01 7.673219442367553711e-01 1.000000000000000000e+00 -5.200963020324707031e-01 6.635739207267761230e-01 7.680512070655822754e-01 1.000000000000000000e+00 -5.245615243911743164e-01 6.671924591064453125e-01 7.687954306602478027e-01 1.000000000000000000e+00 -5.290908813476562500e-01 6.707981228828430176e-01 7.695555090904235840e-01 1.000000000000000000e+00 -5.336838960647583008e-01 6.743909120559692383e-01 7.703325152397155762e-01 1.000000000000000000e+00 -5.383401513099670410e-01 6.779708266258239746e-01 7.711273431777954102e-01 1.000000000000000000e+00 -5.430593490600585938e-01 6.815376877784729004e-01 7.719407677650451660e-01 1.000000000000000000e+00 -5.478409528732299805e-01 6.850914359092712402e-01 7.727738618850708008e-01 1.000000000000000000e+00 -5.526844859123229980e-01 6.886319518089294434e-01 7.736279368400573730e-01 1.000000000000000000e+00 -5.575894117355346680e-01 6.921591162681579590e-01 7.745041251182556152e-01 1.000000000000000000e+00 -5.625551342964172363e-01 6.956728100776672363e-01 7.754036188125610352e-01 1.000000000000000000e+00 -5.675811767578125000e-01 6.991727948188781738e-01 7.763274908065795898e-01 1.000000000000000000e+00 -5.726668834686279297e-01 7.026589512825012207e-01 7.772770524024963379e-01 1.000000000000000000e+00 -5.778116583824157715e-01 7.061310410499572754e-01 7.782534360885620117e-01 1.000000000000000000e+00 -5.830148458480834961e-01 7.095888853073120117e-01 7.792578339576721191e-01 1.000000000000000000e+00 -5.882757902145385742e-01 7.130321264266967773e-01 7.802914381027221680e-01 1.000000000000000000e+00 -5.935933589935302734e-01 7.164605855941772461e-01 7.813558578491210938e-01 1.000000000000000000e+00 -5.989665985107421875e-01 7.198739647865295410e-01 7.824525833129882812e-01 1.000000000000000000e+00 -6.043943166732788086e-01 7.232718467712402344e-01 7.835829854011535645e-01 1.000000000000000000e+00 -6.098754405975341797e-01 7.266539931297302246e-01 7.847483754158020020e-01 1.000000000000000000e+00 -6.154084801673889160e-01 7.300199270248413086e-01 7.859502434730529785e-01 1.000000000000000000e+00 -6.209919452667236328e-01 7.333693504333496094e-01 7.871899604797363281e-01 1.000000000000000000e+00 -6.266240477561950684e-01 7.367017269134521484e-01 7.884690165519714355e-01 1.000000000000000000e+00 -6.323027014732360840e-01 7.400166988372802734e-01 7.897889018058776855e-01 1.000000000000000000e+00 -6.380258798599243164e-01 7.433137893676757812e-01 7.911509871482849121e-01 1.000000000000000000e+00 -6.437910795211791992e-01 7.465924024581909180e-01 7.925565242767333984e-01 1.000000000000000000e+00 -6.495957374572753906e-01 7.498520016670227051e-01 7.940067648887634277e-01 1.000000000000000000e+00 -6.554369330406188965e-01 7.530921101570129395e-01 7.955027222633361816e-01 1.000000000000000000e+00 -6.613112688064575195e-01 7.563120126724243164e-01 7.970455884933471680e-01 1.000000000000000000e+00 -6.672148108482360840e-01 7.595112919807434082e-01 7.986367344856262207e-01 1.000000000000000000e+00 -6.731442213058471680e-01 7.626891136169433594e-01 8.002762794494628906e-01 1.000000000000000000e+00 -6.790955662727355957e-01 7.658447027206420898e-01 8.019646406173706055e-01 1.000000000000000000e+00 -6.850644350051879883e-01 7.689774036407470703e-01 8.037020564079284668e-01 1.000000000000000000e+00 -6.910464167594909668e-01 7.720863223075866699e-01 8.054884076118469238e-01 1.000000000000000000e+00 -6.970365643501281738e-01 7.751705050468444824e-01 8.073233366012573242e-01 1.000000000000000000e+00 -7.030297517776489258e-01 7.782290577888488770e-01 8.092061877250671387e-01 1.000000000000000000e+00 -7.090207934379577637e-01 7.812609076499938965e-01 8.111359477043151855e-01 1.000000000000000000e+00 -7.150040268898010254e-01 7.842648625373840332e-01 8.131111860275268555e-01 1.000000000000000000e+00 -7.209728360176086426e-01 7.872399687767028809e-01 8.151307106018066406e-01 1.000000000000000000e+00 -7.269217967987060547e-01 7.901846766471862793e-01 8.171921968460083008e-01 1.000000000000000000e+00 -7.328454256057739258e-01 7.930974364280700684e-01 8.192926049232482910e-01 1.000000000000000000e+00 -7.387377023696899414e-01 7.959766387939453125e-01 8.214292526245117188e-01 1.000000000000000000e+00 -7.445924878120422363e-01 7.988204956054687500e-01 8.235986828804016113e-01 1.000000000000000000e+00 -7.504034638404846191e-01 8.016269803047180176e-01 8.257973790168762207e-01 1.000000000000000000e+00 -7.561644315719604492e-01 8.043940663337707520e-01 8.280214071273803711e-01 1.000000000000000000e+00 -7.618690729141235352e-01 8.071194887161254883e-01 8.302664756774902344e-01 1.000000000000000000e+00 -7.675110697746276855e-01 8.098007440567016602e-01 8.325281739234924316e-01 1.000000000000000000e+00 -7.730841636657714844e-01 8.124352693557739258e-01 8.348017334938049316e-01 1.000000000000000000e+00 -7.785789370536804199e-01 8.150209188461303711e-01 8.370834589004516602e-01 1.000000000000000000e+00 -7.839910387992858887e-01 8.175542354583740234e-01 8.393674492835998535e-01 1.000000000000000000e+00 -7.893144488334655762e-01 8.200321197509765625e-01 8.416486382484436035e-01 1.000000000000000000e+00 -7.945430278778076172e-01 8.224511742591857910e-01 8.439218401908874512e-01 1.000000000000000000e+00 -7.996707558631896973e-01 8.248078227043151855e-01 8.461821079254150391e-01 1.000000000000000000e+00 -8.046916723251342773e-01 8.270983695983886719e-01 8.484244942665100098e-01 1.000000000000000000e+00 -8.095999956130981445e-01 8.293189406394958496e-01 8.506444096565246582e-01 1.000000000000000000e+00 -8.143898248672485352e-01 8.314656019210815430e-01 8.528375625610351562e-01 1.000000000000000000e+00 -8.190465569496154785e-01 8.335365056991577148e-01 8.550020456314086914e-01 1.000000000000000000e+00 -8.235743045806884766e-01 8.355248570442199707e-01 8.571318984031677246e-01 1.000000000000000000e+00 -8.279689550399780273e-01 8.374260067939758301e-01 8.592240214347839355e-01 1.000000000000000000e+00 -8.322270512580871582e-01 8.392348885536193848e-01 8.612756133079528809e-01 1.000000000000000000e+00 -8.363403081893920898e-01 8.409479856491088867e-01 8.632853031158447266e-01 1.000000000000000000e+00 -8.403041958808898926e-01 8.425605893135070801e-01 8.652508854866027832e-01 1.000000000000000000e+00 -8.441261649131774902e-01 8.440648317337036133e-01 8.671697378158569336e-01 1.000000000000000000e+00 -8.478071093559265137e-01 8.454546332359313965e-01 8.690403699874877930e-01 1.000000000000000000e+00 -8.513371348381042480e-01 8.467273712158203125e-01 8.708608150482177734e-01 1.000000000000000000e+00 -8.547259569168090820e-01 8.478748798370361328e-01 8.726282715797424316e-01 1.000000000000000000e+00 -8.579825758934020996e-01 8.488893508911132812e-01 8.743404150009155273e-01 1.000000000000000000e+00 -8.611024618148803711e-01 8.497675657272338867e-01 8.759924173355102539e-01 1.000000000000000000e+00 -8.640898466110229492e-01 8.505039215087890625e-01 8.775792717933654785e-01 1.000000000000000000e+00 -8.669601678848266602e-01 8.510895967483520508e-01 8.790976405143737793e-01 1.000000000000000000e+00 -8.697047233581542969e-01 8.515240550041198730e-01 8.805388212203979492e-01 1.000000000000000000e+00 -8.723313212394714355e-01 8.518016338348388672e-01 8.818970322608947754e-01 1.000000000000000000e+00 -8.748534917831420898e-01 8.519152402877807617e-01 8.831692934036254883e-01 1.000000000000000000e+00 -8.772488236427307129e-01 8.518702983856201172e-01 8.843411803245544434e-01 1.000000000000000000e+00 -8.795410394668579102e-01 8.516567349433898926e-01 8.854143619537353516e-01 1.000000000000000000e+00 -8.817223310470581055e-01 8.512759208679199219e-01 8.863805532455444336e-01 1.000000000000000000e+00 -8.837851881980895996e-01 8.507294058799743652e-01 8.872322440147399902e-01 1.000000000000000000e+00 -8.857501745223999023e-01 8.500092625617980957e-01 8.879736661911010742e-01 1.000000000000000000e+00 -8.857115507125854492e-01 8.500218391418457031e-01 8.857253789901733398e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/viridis b/fastplotlib/utils/colormaps/viridis deleted file mode 100644 index 4666f6e38..000000000 --- a/fastplotlib/utils/colormaps/viridis +++ /dev/null @@ -1,256 +0,0 @@ -2.670040130615234375e-01 4.873999860137701035e-03 3.294149935245513916e-01 1.000000000000000000e+00 -2.685100138187408447e-01 9.604999795556068420e-03 3.354269862174987793e-01 1.000000000000000000e+00 -2.699440121650695801e-01 1.462499983608722687e-02 3.413789868354797363e-01 1.000000000000000000e+00 -2.713049948215484619e-01 1.994200050830841064e-02 3.472689986228942871e-01 1.000000000000000000e+00 -2.725940048694610596e-01 2.556299977004528046e-02 3.530929982662200928e-01 1.000000000000000000e+00 -2.738089859485626221e-01 3.149700164794921875e-02 3.588530123233795166e-01 1.000000000000000000e+00 -2.749519944190979004e-01 3.775199875235557556e-02 3.645429909229278564e-01 1.000000000000000000e+00 -2.760219871997833252e-01 4.416700080037117004e-02 3.701640069484710693e-01 1.000000000000000000e+00 -2.770180106163024902e-01 5.034400150179862976e-02 3.757149875164031982e-01 1.000000000000000000e+00 -2.779409885406494141e-01 5.632400140166282654e-02 3.811909854412078857e-01 1.000000000000000000e+00 -2.787910103797912598e-01 6.214499846100807190e-02 3.865920007228851318e-01 1.000000000000000000e+00 -2.795659899711608887e-01 6.783600151538848877e-02 3.919169902801513672e-01 1.000000000000000000e+00 -2.802670001983642578e-01 7.341700047254562378e-02 3.971630036830902100e-01 1.000000000000000000e+00 -2.808940112590789795e-01 7.890699803829193115e-02 4.023289978504180908e-01 1.000000000000000000e+00 -2.814460098743438721e-01 8.432000130414962769e-02 4.074139893054962158e-01 1.000000000000000000e+00 -2.819240093231201172e-01 8.966600149869918823e-02 4.124149978160858154e-01 1.000000000000000000e+00 -2.823269963264465332e-01 9.495499730110168457e-02 4.173310101032257080e-01 1.000000000000000000e+00 -2.826560139656066895e-01 1.001959964632987976e-01 4.221599996089935303e-01 1.000000000000000000e+00 -2.829099893569946289e-01 1.053929999470710754e-01 4.269019961357116699e-01 1.000000000000000000e+00 -2.830910086631774902e-01 1.105529963970184326e-01 4.315539896488189697e-01 1.000000000000000000e+00 -2.831969857215881348e-01 1.156800016760826111e-01 4.361149966716766357e-01 1.000000000000000000e+00 -2.832289934158325195e-01 1.207770034670829773e-01 4.405840039253234863e-01 1.000000000000000000e+00 -2.831870019435882568e-01 1.258479952812194824e-01 4.449599981307983398e-01 1.000000000000000000e+00 -2.830719947814941406e-01 1.308950036764144897e-01 4.492410123348236084e-01 1.000000000000000000e+00 -2.828840017318725586e-01 1.359200030565261841e-01 4.534269869327545166e-01 1.000000000000000000e+00 -2.826229929924011230e-01 1.409260034561157227e-01 4.575169980525970459e-01 1.000000000000000000e+00 -2.822900116443634033e-01 1.459120064973831177e-01 4.615100026130676270e-01 1.000000000000000000e+00 -2.818869948387145996e-01 1.508810073137283325e-01 4.654049873352050781e-01 1.000000000000000000e+00 -2.814120054244995117e-01 1.558340042829513550e-01 4.692009985446929932e-01 1.000000000000000000e+00 -2.808679938316345215e-01 1.607709974050521851e-01 4.728989899158477783e-01 1.000000000000000000e+00 -2.802549898624420166e-01 1.656929999589920044e-01 4.764980077743530273e-01 1.000000000000000000e+00 -2.795740067958831787e-01 1.705989986658096313e-01 4.799970090389251709e-01 1.000000000000000000e+00 -2.788259983062744141e-01 1.754900068044662476e-01 4.833970069885253906e-01 1.000000000000000000e+00 -2.780120074748992920e-01 1.803669929504394531e-01 4.866969883441925049e-01 1.000000000000000000e+00 -2.771340012550354004e-01 1.852280050516128540e-01 4.898979961872100830e-01 1.000000000000000000e+00 -2.761940062046051025e-01 1.900739967823028564e-01 4.930010139942169189e-01 1.000000000000000000e+00 -2.751910090446472168e-01 1.949049979448318481e-01 4.960049986839294434e-01 1.000000000000000000e+00 -2.741279900074005127e-01 1.997209936380386353e-01 4.989109933376312256e-01 1.000000000000000000e+00 -2.730059921741485596e-01 2.045200020074844360e-01 5.017210245132446289e-01 1.000000000000000000e+00 -2.718279957771301270e-01 2.093030065298080444e-01 5.044339895248413086e-01 1.000000000000000000e+00 -2.705950140953063965e-01 2.140689939260482788e-01 5.070520043373107910e-01 1.000000000000000000e+00 -2.693080008029937744e-01 2.188179939985275269e-01 5.095769762992858887e-01 1.000000000000000000e+00 -2.679679989814758301e-01 2.235489934682846069e-01 5.120080113410949707e-01 1.000000000000000000e+00 -2.665799856185913086e-01 2.282620072364807129e-01 5.143489837646484375e-01 1.000000000000000000e+00 -2.651450037956237793e-01 2.329560071229934692e-01 5.165989995002746582e-01 1.000000000000000000e+00 -2.636629939079284668e-01 2.376309931278228760e-01 5.187619924545288086e-01 1.000000000000000000e+00 -2.621380090713500977e-01 2.422859966754913330e-01 5.208370089530944824e-01 1.000000000000000000e+00 -2.605710029602050781e-01 2.469220012426376343e-01 5.228279829025268555e-01 1.000000000000000000e+00 -2.589649856090545654e-01 2.515369951725006104e-01 5.247359871864318848e-01 1.000000000000000000e+00 -2.573220133781433105e-01 2.561300098896026611e-01 5.265629887580871582e-01 1.000000000000000000e+00 -2.556450068950653076e-01 2.607029974460601807e-01 5.283120274543762207e-01 1.000000000000000000e+00 -2.539350092411041260e-01 2.652539908885955811e-01 5.299829840660095215e-01 1.000000000000000000e+00 -2.521939873695373535e-01 2.697829902172088623e-01 5.315790176391601562e-01 1.000000000000000000e+00 -2.504250109195709229e-01 2.742899954319000244e-01 5.331029891967773438e-01 1.000000000000000000e+00 -2.486290037631988525e-01 2.787750065326690674e-01 5.345559716224670410e-01 1.000000000000000000e+00 -2.468110024929046631e-01 2.832370102405548096e-01 5.359410047531127930e-01 1.000000000000000000e+00 -2.449720054864883423e-01 2.876749932765960693e-01 5.372599959373474121e-01 1.000000000000000000e+00 -2.431129962205886841e-01 2.920919954776763916e-01 5.385159850120544434e-01 1.000000000000000000e+00 -2.412369996309280396e-01 2.964850068092346191e-01 5.397089719772338867e-01 1.000000000000000000e+00 -2.393459975719451904e-01 3.008550107479095459e-01 5.408440232276916504e-01 1.000000000000000000e+00 -2.374410033226013184e-01 3.052020072937011719e-01 5.419210195541381836e-01 1.000000000000000000e+00 -2.355259954929351807e-01 3.095270097255706787e-01 5.429440140724182129e-01 1.000000000000000000e+00 -2.336030006408691406e-01 3.138279914855957031e-01 5.439140200614929199e-01 1.000000000000000000e+00 -2.316740006208419800e-01 3.181059956550598145e-01 5.448340177536010742e-01 1.000000000000000000e+00 -2.297389954328536987e-01 3.223609924316406250e-01 5.457059741020202637e-01 1.000000000000000000e+00 -2.278019934892654419e-01 3.265939950942993164e-01 5.465319752693176270e-01 1.000000000000000000e+00 -2.258629947900772095e-01 3.308050036430358887e-01 5.473139882087707520e-01 1.000000000000000000e+00 -2.239249944686889648e-01 3.349939882755279541e-01 5.480530261993408203e-01 1.000000000000000000e+00 -2.219890058040618896e-01 3.391610085964202881e-01 5.487520098686218262e-01 1.000000000000000000e+00 -2.200569957494735718e-01 3.433069884777069092e-01 5.494130253791809082e-01 1.000000000000000000e+00 -2.181300073862075806e-01 3.474319875240325928e-01 5.500379800796508789e-01 1.000000000000000000e+00 -2.162099927663803101e-01 3.515349924564361572e-01 5.506269931793212891e-01 1.000000000000000000e+00 -2.142979949712753296e-01 3.556190133094787598e-01 5.511839985847473145e-01 1.000000000000000000e+00 -2.123949974775314331e-01 3.596830070018768311e-01 5.517100095748901367e-01 1.000000000000000000e+00 -2.105029970407485962e-01 3.637270033359527588e-01 5.522059798240661621e-01 1.000000000000000000e+00 -2.086230069398880005e-01 3.677519857883453369e-01 5.526750087738037109e-01 1.000000000000000000e+00 -2.067559957504272461e-01 3.717580139636993408e-01 5.531169772148132324e-01 1.000000000000000000e+00 -2.049030065536499023e-01 3.757460117340087891e-01 5.535330176353454590e-01 1.000000000000000000e+00 -2.030629962682723999e-01 3.797160089015960693e-01 5.539249777793884277e-01 1.000000000000000000e+00 -2.012390047311782837e-01 3.836700022220611572e-01 5.542939901351928711e-01 1.000000000000000000e+00 -1.994300037622451782e-01 3.876070082187652588e-01 5.546420216560363770e-01 1.000000000000000000e+00 -1.976359933614730835e-01 3.915280103683471680e-01 5.549690127372741699e-01 1.000000000000000000e+00 -1.958599984645843506e-01 3.954330086708068848e-01 5.552759766578674316e-01 1.000000000000000000e+00 -1.941000074148178101e-01 3.993229866027832031e-01 5.555649995803833008e-01 1.000000000000000000e+00 -1.923570036888122559e-01 4.031989872455596924e-01 5.558360219001770020e-01 1.000000000000000000e+00 -1.906310021877288818e-01 4.070610105991363525e-01 5.560889840126037598e-01 1.000000000000000000e+00 -1.889230012893676758e-01 4.109100103378295898e-01 5.563259720802307129e-01 1.000000000000000000e+00 -1.872310042381286621e-01 4.147459864616394043e-01 5.565469861030578613e-01 1.000000000000000000e+00 -1.855559945106506348e-01 4.185700118541717529e-01 5.567529797554016113e-01 1.000000000000000000e+00 -1.838980019092559814e-01 4.223830103874206543e-01 5.569440126419067383e-01 1.000000000000000000e+00 -1.822559982538223267e-01 4.261839985847473145e-01 5.571200251579284668e-01 1.000000000000000000e+00 -1.806290000677108765e-01 4.299750030040740967e-01 5.572819709777832031e-01 1.000000000000000000e+00 -1.790190041065216064e-01 4.337559938430786133e-01 5.574300289154052734e-01 1.000000000000000000e+00 -1.774230003356933594e-01 4.375270009040832520e-01 5.575649738311767578e-01 1.000000000000000000e+00 -1.758410036563873291e-01 4.412899911403656006e-01 5.576850175857543945e-01 1.000000000000000000e+00 -1.742739975452423096e-01 4.450440108776092529e-01 5.577920079231262207e-01 1.000000000000000000e+00 -1.727190017700195312e-01 4.487909972667694092e-01 5.578849911689758301e-01 1.000000000000000000e+00 -1.711760014295578003e-01 4.525299966335296631e-01 5.579649806022644043e-01 1.000000000000000000e+00 -1.696459949016571045e-01 4.562619924545288086e-01 5.580300092697143555e-01 1.000000000000000000e+00 -1.681260019540786743e-01 4.599879980087280273e-01 5.580819845199584961e-01 1.000000000000000000e+00 -1.666170060634613037e-01 4.637080132961273193e-01 5.581189990043640137e-01 1.000000000000000000e+00 -1.651169955730438232e-01 4.674229919910430908e-01 5.581409931182861328e-01 1.000000000000000000e+00 -1.636250019073486328e-01 4.711329936981201172e-01 5.581480264663696289e-01 1.000000000000000000e+00 -1.621419936418533325e-01 4.748379886150360107e-01 5.581399798393249512e-01 1.000000000000000000e+00 -1.606650054454803467e-01 4.785400032997131348e-01 5.581150054931640625e-01 1.000000000000000000e+00 -1.591939926147460938e-01 4.822370111942291260e-01 5.580729842185974121e-01 1.000000000000000000e+00 -1.577289998531341553e-01 4.859319925308227539e-01 5.580130219459533691e-01 1.000000000000000000e+00 -1.562699973583221436e-01 4.896239936351776123e-01 5.579360127449035645e-01 1.000000000000000000e+00 -1.548150032758712769e-01 4.933130145072937012e-01 5.578399896621704102e-01 1.000000000000000000e+00 -1.533640027046203613e-01 4.970000088214874268e-01 5.577239990234375000e-01 1.000000000000000000e+00 -1.519179940223693848e-01 5.006849765777587891e-01 5.575870275497436523e-01 1.000000000000000000e+00 -1.504759937524795532e-01 5.043690204620361328e-01 5.574300289154052734e-01 1.000000000000000000e+00 -1.490390002727508545e-01 5.080509781837463379e-01 5.572500228881835938e-01 1.000000000000000000e+00 -1.476069986820220947e-01 5.117329955101013184e-01 5.570489764213562012e-01 1.000000000000000000e+00 -1.461800038814544678e-01 5.154129862785339355e-01 5.568230152130126953e-01 1.000000000000000000e+00 -1.447589993476867676e-01 5.190929770469665527e-01 5.565720200538635254e-01 1.000000000000000000e+00 -1.433430016040802002e-01 5.227730274200439453e-01 5.562949776649475098e-01 1.000000000000000000e+00 -1.419350057840347290e-01 5.264530181884765625e-01 5.559909939765930176e-01 1.000000000000000000e+00 -1.405359953641891479e-01 5.301319956779479980e-01 5.556589961051940918e-01 1.000000000000000000e+00 -1.391469985246658325e-01 5.338119864463806152e-01 5.552979707717895508e-01 1.000000000000000000e+00 -1.377699971199035645e-01 5.374919772148132324e-01 5.549060106277465820e-01 1.000000000000000000e+00 -1.364080011844635010e-01 5.411729812622070312e-01 5.544829964637756348e-01 1.000000000000000000e+00 -1.350660026073455811e-01 5.448529720306396484e-01 5.540289878845214844e-01 1.000000000000000000e+00 -1.337430030107498169e-01 5.485349893569946289e-01 5.535410046577453613e-01 1.000000000000000000e+00 -1.324439942836761475e-01 5.522159934043884277e-01 5.530179738998413086e-01 1.000000000000000000e+00 -1.311720013618469238e-01 5.558990240097045898e-01 5.524590015411376953e-01 1.000000000000000000e+00 -1.299329996109008789e-01 5.595819950103759766e-01 5.518640279769897461e-01 1.000000000000000000e+00 -1.287290006875991821e-01 5.632650256156921387e-01 5.512290000915527344e-01 1.000000000000000000e+00 -1.275680065155029297e-01 5.669490098953247070e-01 5.505560040473937988e-01 1.000000000000000000e+00 -1.264529973268508911e-01 5.706329941749572754e-01 5.498409867286682129e-01 1.000000000000000000e+00 -1.253940016031265259e-01 5.743179917335510254e-01 5.490859746932983398e-01 1.000000000000000000e+00 -1.243949979543685913e-01 5.780019760131835938e-01 5.482869744300842285e-01 1.000000000000000000e+00 -1.234629973769187927e-01 5.816869735717773438e-01 5.474449992179870605e-01 1.000000000000000000e+00 -1.226060017943382263e-01 5.853710174560546875e-01 5.465570092201232910e-01 1.000000000000000000e+00 -1.218309998512268066e-01 5.890550017356872559e-01 5.456230044364929199e-01 1.000000000000000000e+00 -1.211479976773262024e-01 5.927389860153198242e-01 5.446410179138183594e-01 1.000000000000000000e+00 -1.205649971961975098e-01 5.964220166206359863e-01 5.436109900474548340e-01 1.000000000000000000e+00 -1.200919970870018005e-01 6.001039743423461914e-01 5.425300002098083496e-01 1.000000000000000000e+00 -1.197379976511001587e-01 6.037849783897399902e-01 5.414000153541564941e-01 1.000000000000000000e+00 -1.195119991898536682e-01 6.074640154838562012e-01 5.402179956436157227e-01 1.000000000000000000e+00 -1.194230020046234131e-01 6.111410260200500488e-01 5.389819741249084473e-01 1.000000000000000000e+00 -1.194830015301704407e-01 6.148170232772827148e-01 5.376920104026794434e-01 1.000000000000000000e+00 -1.196990013122558594e-01 6.184899806976318359e-01 5.363469719886779785e-01 1.000000000000000000e+00 -1.200810000300407410e-01 6.221609711647033691e-01 5.349460244178771973e-01 1.000000000000000000e+00 -1.206379979848861694e-01 6.258280277252197266e-01 5.334879755973815918e-01 1.000000000000000000e+00 -1.213800013065338135e-01 6.294919848442077637e-01 5.319730043411254883e-01 1.000000000000000000e+00 -1.223120018839836121e-01 6.331530213356018066e-01 5.303980112075805664e-01 1.000000000000000000e+00 -1.234439983963966370e-01 6.368089914321899414e-01 5.287629961967468262e-01 1.000000000000000000e+00 -1.247799992561340332e-01 6.404610276222229004e-01 5.270680189132690430e-01 1.000000000000000000e+00 -1.263259947299957275e-01 6.441069841384887695e-01 5.253109931945800781e-01 1.000000000000000000e+00 -1.280869990587234497e-01 6.477490067481994629e-01 5.234910249710083008e-01 1.000000000000000000e+00 -1.300670057535171509e-01 6.513839960098266602e-01 5.216079950332641602e-01 1.000000000000000000e+00 -1.322679966688156128e-01 6.550139784812927246e-01 5.196610093116760254e-01 1.000000000000000000e+00 -1.346919983625411987e-01 6.586359739303588867e-01 5.176489949226379395e-01 1.000000000000000000e+00 -1.373389959335327148e-01 6.622520089149475098e-01 5.155709981918334961e-01 1.000000000000000000e+00 -1.402100026607513428e-01 6.658589839935302734e-01 5.134270191192626953e-01 1.000000000000000000e+00 -1.433030068874359131e-01 6.694589853286743164e-01 5.112149715423583984e-01 1.000000000000000000e+00 -1.466159969568252563e-01 6.730499863624572754e-01 5.089359879493713379e-01 1.000000000000000000e+00 -1.501480042934417725e-01 6.766309738159179688e-01 5.065889954566955566e-01 1.000000000000000000e+00 -1.538940072059631348e-01 6.802030205726623535e-01 5.041720271110534668e-01 1.000000000000000000e+00 -1.578509956598281860e-01 6.837649941444396973e-01 5.016859769821166992e-01 1.000000000000000000e+00 -1.620160043239593506e-01 6.873160004615783691e-01 4.991289973258972168e-01 1.000000000000000000e+00 -1.663829982280731201e-01 6.908559799194335938e-01 4.965020120143890381e-01 1.000000000000000000e+00 -1.709479987621307373e-01 6.943839788436889648e-01 4.938029944896697998e-01 1.000000000000000000e+00 -1.757069975137710571e-01 6.978999972343444824e-01 4.910329878330230713e-01 1.000000000000000000e+00 -1.806530058383941650e-01 7.014020085334777832e-01 4.881890118122100830e-01 1.000000000000000000e+00 -1.857829988002777100e-01 7.048910260200500488e-01 4.852730035781860352e-01 1.000000000000000000e+00 -1.910900026559829712e-01 7.083659768104553223e-01 4.822840094566345215e-01 1.000000000000000000e+00 -1.965710073709487915e-01 7.118269801139831543e-01 4.792209863662719727e-01 1.000000000000000000e+00 -2.022189944982528687e-01 7.152720093727111816e-01 4.760839939117431641e-01 1.000000000000000000e+00 -2.080300003290176392e-01 7.187010049819946289e-01 4.728730022907257080e-01 1.000000000000000000e+00 -2.140000015497207642e-01 7.221140265464782715e-01 4.695880115032196045e-01 1.000000000000000000e+00 -2.201240062713623047e-01 7.255089879035949707e-01 4.662260115146636963e-01 1.000000000000000000e+00 -2.263969928026199341e-01 7.288879752159118652e-01 4.627889990806579590e-01 1.000000000000000000e+00 -2.328149974346160889e-01 7.322469949722290039e-01 4.592770040035247803e-01 1.000000000000000000e+00 -2.393739968538284302e-01 7.355880141258239746e-01 4.556879997253417969e-01 1.000000000000000000e+00 -2.460699975490570068e-01 7.389100193977355957e-01 4.520240128040313721e-01 1.000000000000000000e+00 -2.528989911079406738e-01 7.422109842300415039e-01 4.482840001583099365e-01 1.000000000000000000e+00 -2.598569989204406738e-01 7.454919815063476562e-01 4.444670081138610840e-01 1.000000000000000000e+00 -2.669410109519958496e-01 7.487509846687316895e-01 4.405730068683624268e-01 1.000000000000000000e+00 -2.741490006446838379e-01 7.519879937171936035e-01 4.366010129451751709e-01 1.000000000000000000e+00 -2.814770042896270752e-01 7.552030086517333984e-01 4.325520098209381104e-01 1.000000000000000000e+00 -2.889209985733032227e-01 7.583940029144287109e-01 4.284259974956512451e-01 1.000000000000000000e+00 -2.964789867401123047e-01 7.615609765052795410e-01 4.242230057716369629e-01 1.000000000000000000e+00 -3.041479885578155518e-01 7.647039890289306641e-01 4.199430048465728760e-01 1.000000000000000000e+00 -3.119249939918518066e-01 7.678220272064208984e-01 4.155859947204589844e-01 1.000000000000000000e+00 -3.198089897632598877e-01 7.709140181541442871e-01 4.111520051956176758e-01 1.000000000000000000e+00 -3.277960121631622314e-01 7.739800214767456055e-01 4.066399931907653809e-01 1.000000000000000000e+00 -3.358849883079528809e-01 7.770180106163024902e-01 4.020490050315856934e-01 1.000000000000000000e+00 -3.440740108489990234e-01 7.800289988517761230e-01 3.973810076713562012e-01 1.000000000000000000e+00 -3.523600101470947266e-01 7.830110192298889160e-01 3.926360011100769043e-01 1.000000000000000000e+00 -3.607409894466400146e-01 7.859640121459960938e-01 3.878139853477478027e-01 1.000000000000000000e+00 -3.692139983177185059e-01 7.888879776000976562e-01 3.829140067100524902e-01 1.000000000000000000e+00 -3.777790069580078125e-01 7.917810082435607910e-01 3.779389858245849609e-01 1.000000000000000000e+00 -3.864330053329467773e-01 7.946439981460571289e-01 3.728860020637512207e-01 1.000000000000000000e+00 -3.951739966869354248e-01 7.974749803543090820e-01 3.677569925785064697e-01 1.000000000000000000e+00 -4.040009975433349609e-01 8.002750277519226074e-01 3.625519871711730957e-01 1.000000000000000000e+00 -4.129129946231842041e-01 8.030409812927246094e-01 3.572689890861511230e-01 1.000000000000000000e+00 -4.219079911708831787e-01 8.057739734649658203e-01 3.519099950790405273e-01 1.000000000000000000e+00 -4.309830069541931152e-01 8.084729909896850586e-01 3.464759886264801025e-01 1.000000000000000000e+00 -4.401369988918304443e-01 8.111379742622375488e-01 3.409669995307922363e-01 1.000000000000000000e+00 -4.493680000305175781e-01 8.137680292129516602e-01 3.353840112686157227e-01 1.000000000000000000e+00 -4.586740136146545410e-01 8.163629770278930664e-01 3.297269940376281738e-01 1.000000000000000000e+00 -4.680530130863189697e-01 8.189210295677185059e-01 3.239980041980743408e-01 1.000000000000000000e+00 -4.775039851665496826e-01 8.214439749717712402e-01 3.181949853897094727e-01 1.000000000000000000e+00 -4.870260059833526611e-01 8.239290118217468262e-01 3.123210072517395020e-01 1.000000000000000000e+00 -4.966149926185607910e-01 8.263760209083557129e-01 3.063769936561584473e-01 1.000000000000000000e+00 -5.062710046768188477e-01 8.287860155105590820e-01 3.003619909286499023e-01 1.000000000000000000e+00 -5.159919857978820801e-01 8.311579823493957520e-01 2.942790091037750244e-01 1.000000000000000000e+00 -5.257760286331176758e-01 8.334910273551940918e-01 2.881270051002502441e-01 1.000000000000000000e+00 -5.356209874153137207e-01 8.357849717140197754e-01 2.819080054759979248e-01 1.000000000000000000e+00 -5.455240011215209961e-01 8.380389809608459473e-01 2.756260037422180176e-01 1.000000000000000000e+00 -5.554839968681335449e-01 8.402540087699890137e-01 2.692809998989105225e-01 1.000000000000000000e+00 -5.654979944229125977e-01 8.424299955368041992e-01 2.628769874572753906e-01 1.000000000000000000e+00 -5.755630135536193848e-01 8.445659875869750977e-01 2.564150094985961914e-01 1.000000000000000000e+00 -5.856779813766479492e-01 8.466609716415405273e-01 2.498970031738281250e-01 1.000000000000000000e+00 -5.958390235900878906e-01 8.487169742584228516e-01 2.433290034532546997e-01 1.000000000000000000e+00 -6.060450077056884766e-01 8.507329821586608887e-01 2.367119938135147095e-01 1.000000000000000000e+00 -6.162930130958557129e-01 8.527089953422546387e-01 2.300519943237304688e-01 1.000000000000000000e+00 -6.265789866447448730e-01 8.546450138092041016e-01 2.233529984951019287e-01 1.000000000000000000e+00 -6.369019746780395508e-01 8.565419912338256836e-01 2.166199982166290283e-01 1.000000000000000000e+00 -6.472569704055786133e-01 8.583999872207641602e-01 2.098609954118728638e-01 1.000000000000000000e+00 -6.576420068740844727e-01 8.602190017700195312e-01 2.030819952487945557e-01 1.000000000000000000e+00 -6.680539846420288086e-01 8.619989752769470215e-01 1.962929964065551758e-01 1.000000000000000000e+00 -6.784890294075012207e-01 8.637419939041137695e-01 1.895029991865158081e-01 1.000000000000000000e+00 -6.889439821243286133e-01 8.654479980468750000e-01 1.827249974012374878e-01 1.000000000000000000e+00 -6.994150280952453613e-01 8.671169877052307129e-01 1.759710013866424561e-01 1.000000000000000000e+00 -7.098979949951171875e-01 8.687509894371032715e-01 1.692570000886917114e-01 1.000000000000000000e+00 -7.203909754753112793e-01 8.703500032424926758e-01 1.626030057668685913e-01 1.000000000000000000e+00 -7.308890223503112793e-01 8.719159960746765137e-01 1.560290008783340454e-01 1.000000000000000000e+00 -7.413880228996276855e-01 8.734490275382995605e-01 1.495610028505325317e-01 1.000000000000000000e+00 -7.518839836120605469e-01 8.749510049819946289e-01 1.432279944419860840e-01 1.000000000000000000e+00 -7.623729705810546875e-01 8.764240145683288574e-01 1.370639950037002563e-01 1.000000000000000000e+00 -7.728520035743713379e-01 8.778679966926574707e-01 1.311089992523193359e-01 1.000000000000000000e+00 -7.833150029182434082e-01 8.792849779129028320e-01 1.254049986600875854e-01 1.000000000000000000e+00 -7.937600016593933105e-01 8.806779980659484863e-01 1.200049966573715210e-01 1.000000000000000000e+00 -8.041819930076599121e-01 8.820459842681884766e-01 1.149649992585182190e-01 1.000000000000000000e+00 -8.145760297775268555e-01 8.833929896354675293e-01 1.103470027446746826e-01 1.000000000000000000e+00 -8.249400258064270020e-01 8.847200274467468262e-01 1.062169969081878662e-01 1.000000000000000000e+00 -8.352699875831604004e-01 8.860290050506591797e-01 1.026460006833076477e-01 1.000000000000000000e+00 -8.455610275268554688e-01 8.873220086097717285e-01 9.970200061798095703e-02 1.000000000000000000e+00 -8.558099865913391113e-01 8.886010050773620605e-01 9.745199978351593018e-02 1.000000000000000000e+00 -8.660129904747009277e-01 8.898680210113525391e-01 9.595300257205963135e-02 1.000000000000000000e+00 -8.761680126190185547e-01 8.911250233650207520e-01 9.525000303983688354e-02 1.000000000000000000e+00 -8.862709999084472656e-01 8.923739790916442871e-01 9.537400305271148682e-02 1.000000000000000000e+00 -8.963199853897094727e-01 8.936160206794738770e-01 9.633500128984451294e-02 1.000000000000000000e+00 -9.063109755516052246e-01 8.948550224304199219e-01 9.812500327825546265e-02 1.000000000000000000e+00 -9.162420034408569336e-01 8.960909843444824219e-01 1.007170006632804871e-01 1.000000000000000000e+00 -9.261059761047363281e-01 8.973299860954284668e-01 1.040709987282752991e-01 1.000000000000000000e+00 -9.359040260314941406e-01 8.985700011253356934e-01 1.081309989094734192e-01 1.000000000000000000e+00 -9.456359744071960449e-01 8.998150229454040527e-01 1.128380000591278076e-01 1.000000000000000000e+00 -9.552999734878540039e-01 9.010649919509887695e-01 1.181280016899108887e-01 1.000000000000000000e+00 -9.648939967155456543e-01 9.023230075836181641e-01 1.239409968256950378e-01 1.000000000000000000e+00 -9.744169712066650391e-01 9.035900235176086426e-01 1.302150040864944458e-01 1.000000000000000000e+00 -9.838680028915405273e-01 9.048669934272766113e-01 1.368969976902008057e-01 1.000000000000000000e+00 -9.932479858398437500e-01 9.061570167541503906e-01 1.439359933137893677e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/colormaps/winter b/fastplotlib/utils/colormaps/winter deleted file mode 100644 index d97346bbe..000000000 --- a/fastplotlib/utils/colormaps/winter +++ /dev/null @@ -1,256 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 1.000000000000000000e+00 -0.000000000000000000e+00 3.921568859368562698e-03 9.980391860008239746e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.843137718737125397e-03 9.960784316062927246e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.176470611244440079e-02 9.941176176071166992e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.568627543747425079e-02 9.921568632125854492e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.960784383118152618e-02 9.901960492134094238e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.352941222488880157e-02 9.882352948188781738e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.745098061859607697e-02 9.862744808197021484e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.137255087494850159e-02 9.843137264251708984e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.529411926865577698e-02 9.823529124259948730e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.921568766236305237e-02 9.803921580314636230e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.313725605607032776e-02 9.784313440322875977e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.705882444977760315e-02 9.764705896377563477e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.098039284348487854e-02 9.745097756385803223e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.490196123719215393e-02 9.725490212440490723e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.882352963089942932e-02 9.705882072448730469e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.274510174989700317e-02 9.686274528503417969e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.666667014360427856e-02 9.666666388511657715e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.058823853731155396e-02 9.647058844566345215e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.450980693101882935e-02 9.627450704574584961e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.843137532472610474e-02 9.607843160629272461e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.235294371843338013e-02 9.588235020637512207e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.627451211214065552e-02 9.568627476692199707e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.019608050584793091e-02 9.549019336700439453e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.411764889955520630e-02 9.529411792755126953e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.803921729326248169e-02 9.509803652763366699e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.019607856869697571e-01 9.490196108818054199e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.058823540806770325e-01 9.470587968826293945e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.098039224743843079e-01 9.450980424880981445e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.137254908680915833e-01 9.431372284889221191e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.176470592617988586e-01 9.411764740943908691e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.215686276555061340e-01 9.392156600952148438e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.254902034997940063e-01 9.372549057006835938e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.294117718935012817e-01 9.352940917015075684e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.333333402872085571e-01 9.333333373069763184e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.372549086809158325e-01 9.313725233078002930e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.411764770746231079e-01 9.294117689132690430e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.450980454683303833e-01 9.274509549140930176e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.490196138620376587e-01 9.254902005195617676e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.529411822557449341e-01 9.235293865203857422e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.568627506494522095e-01 9.215686321258544922e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.607843190431594849e-01 9.196078181266784668e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.647058874368667603e-01 9.176470637321472168e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.686274558305740356e-01 9.156862497329711914e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.725490242242813110e-01 9.137254953384399414e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.764705926179885864e-01 9.117646813392639160e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.803921610116958618e-01 9.098039269447326660e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.843137294054031372e-01 9.078431129455566406e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.882352977991104126e-01 9.058823585510253906e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.921568661928176880e-01 9.039215445518493652e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.960784345865249634e-01 9.019607901573181152e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.000000029802322388e-01 8.999999761581420898e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.039215713739395142e-01 8.980392217636108398e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.078431397676467896e-01 8.960784077644348145e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.117647081613540649e-01 8.941176533699035645e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.156862765550613403e-01 8.921568393707275391e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.196078449487686157e-01 8.901960849761962891e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.235294133424758911e-01 8.882352709770202637e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.274509817361831665e-01 8.862745165824890137e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.313725501298904419e-01 8.843137025833129883e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.352941185235977173e-01 8.823529481887817383e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.392156869173049927e-01 8.803921341896057129e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.431372553110122681e-01 8.784313797950744629e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.470588237047195435e-01 8.764705657958984375e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.509804069995880127e-01 8.745098114013671875e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.549019753932952881e-01 8.725489974021911621e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.588235437870025635e-01 8.705882430076599121e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.627451121807098389e-01 8.686274290084838867e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.666666805744171143e-01 8.666666746139526367e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.705882489681243896e-01 8.647058606147766113e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.745098173618316650e-01 8.627451062202453613e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.784313857555389404e-01 8.607842922210693359e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.823529541492462158e-01 8.588235378265380859e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.862745225429534912e-01 8.568627238273620605e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.901960909366607666e-01 8.549019694328308105e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.941176593303680420e-01 8.529411554336547852e-01 1.000000000000000000e+00 -0.000000000000000000e+00 2.980392277240753174e-01 8.509804010391235352e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.019607961177825928e-01 8.490195870399475098e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.058823645114898682e-01 8.470588326454162598e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.098039329051971436e-01 8.450980186462402344e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.137255012989044189e-01 8.431372642517089844e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.176470696926116943e-01 8.411764502525329590e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.215686380863189697e-01 8.392156958580017090e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.254902064800262451e-01 8.372548818588256836e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.294117748737335205e-01 8.352941274642944336e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.333333432674407959e-01 8.333333134651184082e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.372549116611480713e-01 8.313725590705871582e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.411764800548553467e-01 8.294117450714111328e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.450980484485626221e-01 8.274509906768798828e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.490196168422698975e-01 8.254901766777038574e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.529411852359771729e-01 8.235294222831726074e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.568627536296844482e-01 8.215686082839965820e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.607843220233917236e-01 8.196078538894653320e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.647058904170989990e-01 8.176470398902893066e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.686274588108062744e-01 8.156862854957580566e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.725490272045135498e-01 8.137254714965820312e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.764705955982208252e-01 8.117647171020507812e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.803921639919281006e-01 8.098039031028747559e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.843137323856353760e-01 8.078431487083435059e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.882353007793426514e-01 8.058823347091674805e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.921568691730499268e-01 8.039215803146362305e-01 1.000000000000000000e+00 -0.000000000000000000e+00 3.960784375667572021e-01 8.019607663154602051e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.000000059604644775e-01 8.000000119209289551e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.039215743541717529e-01 7.980391979217529297e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.078431427478790283e-01 7.960784435272216797e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.117647111415863037e-01 7.941176295280456543e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.156862795352935791e-01 7.921568751335144043e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.196078479290008545e-01 7.901960611343383789e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.235294163227081299e-01 7.882353067398071289e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.274509847164154053e-01 7.862744927406311035e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.313725531101226807e-01 7.843137383460998535e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.352941215038299561e-01 7.823529243469238281e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.392156898975372314e-01 7.803921699523925781e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.431372582912445068e-01 7.784313559532165527e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.470588266849517822e-01 7.764706015586853027e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.509803950786590576e-01 7.745097875595092773e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.549019634723663330e-01 7.725490331649780273e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.588235318660736084e-01 7.705882191658020020e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.627451002597808838e-01 7.686274647712707520e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.666666686534881592e-01 7.666666507720947266e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.705882370471954346e-01 7.647058963775634766e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.745098054409027100e-01 7.627450823783874512e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.784313738346099854e-01 7.607843279838562012e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.823529422283172607e-01 7.588235139846801758e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.862745106220245361e-01 7.568627595901489258e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.901960790157318115e-01 7.549019455909729004e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.941176474094390869e-01 7.529411911964416504e-01 1.000000000000000000e+00 -0.000000000000000000e+00 4.980392158031463623e-01 7.509803771972656250e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.019608139991760254e-01 7.490196228027343750e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.058823823928833008e-01 7.470588088035583496e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.098039507865905762e-01 7.450980544090270996e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.137255191802978516e-01 7.431372404098510742e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.176470875740051270e-01 7.411764860153198242e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.215686559677124023e-01 7.392156720161437988e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.254902243614196777e-01 7.372549176216125488e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.294117927551269531e-01 7.352941036224365234e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.333333611488342285e-01 7.333333492279052734e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.372549295425415039e-01 7.313725352287292480e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.411764979362487793e-01 7.294117808341979980e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.450980663299560547e-01 7.274509668350219727e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.490196347236633301e-01 7.254902124404907227e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.529412031173706055e-01 7.235293984413146973e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.568627715110778809e-01 7.215686440467834473e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.607843399047851562e-01 7.196078300476074219e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.647059082984924316e-01 7.176470756530761719e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.686274766921997070e-01 7.156862616539001465e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.725490450859069824e-01 7.137255072593688965e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.764706134796142578e-01 7.117646932601928711e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.803921818733215332e-01 7.098039388656616211e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.843137502670288086e-01 7.078431248664855957e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.882353186607360840e-01 7.058823704719543457e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.921568870544433594e-01 7.039215564727783203e-01 1.000000000000000000e+00 -0.000000000000000000e+00 5.960784554481506348e-01 7.019608020782470703e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.000000238418579102e-01 6.999999880790710449e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.039215922355651855e-01 6.980392336845397949e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.078431606292724609e-01 6.960784196853637695e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.117647290229797363e-01 6.941176652908325195e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.156862974166870117e-01 6.921568512916564941e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.196078658103942871e-01 6.901960968971252441e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.235294342041015625e-01 6.882352828979492188e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.274510025978088379e-01 6.862745285034179688e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.313725709915161133e-01 6.843137145042419434e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.352941393852233887e-01 6.823529601097106934e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.392157077789306641e-01 6.803921461105346680e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.431372761726379395e-01 6.784313917160034180e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.470588445663452148e-01 6.764705777168273926e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.509804129600524902e-01 6.745098233222961426e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.549019813537597656e-01 6.725490093231201172e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.588235497474670410e-01 6.705882549285888672e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.627451181411743164e-01 6.686274409294128418e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.666666865348815918e-01 6.666666865348815918e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.705882549285888672e-01 6.647058725357055664e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.745098233222961426e-01 6.627451181411743164e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.784313917160034180e-01 6.607843041419982910e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.823529601097106934e-01 6.588235497474670410e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.862745285034179688e-01 6.568627357482910156e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.901960968971252441e-01 6.549019813537597656e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.941176652908325195e-01 6.529411673545837402e-01 1.000000000000000000e+00 -0.000000000000000000e+00 6.980392336845397949e-01 6.509804129600524902e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.019608020782470703e-01 6.490195989608764648e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.058823704719543457e-01 6.470588445663452148e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.098039388656616211e-01 6.450980305671691895e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.137255072593688965e-01 6.431372761726379395e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.176470756530761719e-01 6.411764621734619141e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.215686440467834473e-01 6.392157077789306641e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.254902124404907227e-01 6.372548937797546387e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.294117808341979980e-01 6.352941393852233887e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.333333492279052734e-01 6.333333253860473633e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.372549176216125488e-01 6.313725709915161133e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.411764860153198242e-01 6.294117569923400879e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.450980544090270996e-01 6.274510025978088379e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.490196228027343750e-01 6.254901885986328125e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.529411911964416504e-01 6.235294342041015625e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.568627595901489258e-01 6.215686202049255371e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.607843279838562012e-01 6.196078658103942871e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.647058963775634766e-01 6.176470518112182617e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.686274647712707520e-01 6.156862974166870117e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.725490331649780273e-01 6.137254834175109863e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.764706015586853027e-01 6.117647290229797363e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.803921699523925781e-01 6.098039150238037109e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.843137383460998535e-01 6.078431606292724609e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.882353067398071289e-01 6.058823466300964355e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.921568751335144043e-01 6.039215922355651855e-01 1.000000000000000000e+00 -0.000000000000000000e+00 7.960784435272216797e-01 6.019607782363891602e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.000000119209289551e-01 6.000000238418579102e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.039215803146362305e-01 5.980392098426818848e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.078431487083435059e-01 5.960784554481506348e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.117647171020507812e-01 5.941176414489746094e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.156862854957580566e-01 5.921568870544433594e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.196078538894653320e-01 5.901960730552673340e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.235294222831726074e-01 5.882353186607360840e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.274509906768798828e-01 5.862745046615600586e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.313725590705871582e-01 5.843137502670288086e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.352941274642944336e-01 5.823529362678527832e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.392156958580017090e-01 5.803921818733215332e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.431372642517089844e-01 5.784313678741455078e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.470588326454162598e-01 5.764706134796142578e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.509804010391235352e-01 5.745097994804382324e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.549019694328308105e-01 5.725490450859069824e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.588235378265380859e-01 5.705882310867309570e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.627451062202453613e-01 5.686274766921997070e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.666666746139526367e-01 5.666666626930236816e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.705882430076599121e-01 5.647059082984924316e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.745098114013671875e-01 5.627450942993164062e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.784313797950744629e-01 5.607843399047851562e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.823529481887817383e-01 5.588235259056091309e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.862745165824890137e-01 5.568627715110778809e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.901960849761962891e-01 5.549019575119018555e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.941176533699035645e-01 5.529412031173706055e-01 1.000000000000000000e+00 -0.000000000000000000e+00 8.980392217636108398e-01 5.509803891181945801e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.019607901573181152e-01 5.490196347236633301e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.058823585510253906e-01 5.470588207244873047e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.098039269447326660e-01 5.450980663299560547e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.137254953384399414e-01 5.431372523307800293e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.176470637321472168e-01 5.411764979362487793e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.215686321258544922e-01 5.392156839370727539e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.254902005195617676e-01 5.372549295425415039e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.294117689132690430e-01 5.352941155433654785e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.333333373069763184e-01 5.333333611488342285e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.372549057006835938e-01 5.313725471496582031e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.411764740943908691e-01 5.294117927551269531e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.450980424880981445e-01 5.274509787559509277e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.490196108818054199e-01 5.254902243614196777e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.529411792755126953e-01 5.235294103622436523e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.568627476692199707e-01 5.215686559677124023e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.607843160629272461e-01 5.196078419685363770e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.647058844566345215e-01 5.176470875740051270e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.686274528503417969e-01 5.156862735748291016e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.725490212440490723e-01 5.137255191802978516e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.764705896377563477e-01 5.117647051811218262e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.803921580314636230e-01 5.098039507865905762e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.843137264251708984e-01 5.078431367874145508e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.882352948188781738e-01 5.058823823928833008e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.921568632125854492e-01 5.039215683937072754e-01 1.000000000000000000e+00 -0.000000000000000000e+00 9.960784316062927246e-01 5.019608139991760254e-01 1.000000000000000000e+00 -0.000000000000000000e+00 1.000000000000000000e+00 5.000000000000000000e-01 1.000000000000000000e+00 diff --git a/fastplotlib/utils/functions.py b/fastplotlib/utils/functions.py index 8d1e8694f..a1d6d476a 100644 --- a/fastplotlib/utils/functions.py +++ b/fastplotlib/utils/functions.py @@ -1,31 +1,144 @@ from collections import OrderedDict from typing import * -from pathlib import Path import numpy as np +import cmap as cmap_lib from pygfx import Texture, Color -# some funcs adapted from mesmerize - -QUALITATIVE_CMAPS = [ - "Pastel1", - "Pastel2", - "Paired", - "Accent", - "Dark2", - "Set1", - "Set2", - "Set3", - "tab10", - "tab20", - "tab20b", - "tab20c", -] - - -def get_cmap(name: str, alpha: float = 1.0) -> np.ndarray: +cmap_catalog = cmap_lib.Catalog() + +COLORMAPS = sorted( + [ + "viridis", + "plasma", + "inferno", + "magma", + "cividis", + "Greys", + "Purples", + "Blues", + "Greens", + "Oranges", + "Reds", + "tol:YlOrBr", + "YlOrRd", + "OrRd", + "PuRd", + "RdPu", + "BuPu", + "GnBu", + "PuBu", + "YlGnBu", + "PuBuGn", + "BuGn", + "YlGn", + "binary", + "gist_yarg", + "gist_gray", + "gray", + "bone", + "pink", + "spring", + "summer", + "autumn", + "winter", + "cool", + "Wistia", + "hot", + "afmhot", + "gist_heat", + "matlab:copper", + "PiYG", + "tol:PRGn", + "BrBG", + "PuOr", + "RdGy", + "vispy:RdBu", + "RdYlBu", + "RdYlGn", + "Spectral", + "coolwarm", + "bwr", + "seismic", + "berlin", + "vanimo", + "twilight", + "twilight_shifted", + "hsv", + "Pastel1", + "Pastel2", + "Paired", + "Accent", + "Dark2", + "Set1", + "Set2", + "Set3", + "tab10", + "tab20", + "tab20b", + "tab20c", + "flag", + "prism", + "gnuplot:ocean", + "gist_earth", + "terrain", + "gist_stern", + "gnuplot", + "gnuplot2", + "CMRmap", + "cubehelix", + "brg", + "gist_rainbow", + "yorick:rainbow", + "jet", + "turbo", + "nipy_spectral", + "gist_ncar", + ] +) + +SEQUENTIAL_CMAPS = list() +QUALITATIVE_CMAPS = list() +CYCLIC_CMAPS = list() +DIVERGING_CMAPS = list() +MISC_CMAPS = list() + + +for name in COLORMAPS: + _colormap = cmap_lib.Colormap(name) + match _colormap.category: + case "sequential": + if _colormap.interpolation == "nearest": + continue + SEQUENTIAL_CMAPS.append(name) + case "cyclic": + if _colormap.interpolation == "nearest": + continue + CYCLIC_CMAPS.append(name) + case "diverging": + if _colormap.interpolation == "nearest": + continue + DIVERGING_CMAPS.append(name) + case "qualitative": + QUALITATIVE_CMAPS.append(name) + case "miscellaneous": + if _colormap.interpolation == "nearest": + continue + MISC_CMAPS.append(name) + + +COLORMAP_NAMES = { + "sequential": sorted(SEQUENTIAL_CMAPS), + "cyclic": sorted(CYCLIC_CMAPS), + "diverging": sorted(DIVERGING_CMAPS), + "qualitative": sorted(QUALITATIVE_CMAPS), + "miscellaneous": sorted(MISC_CMAPS), +} + + +def get_cmap(name: str, alpha: float = 1.0, gamma: float = 1.0) -> np.ndarray: """ Get a colormap as numpy array @@ -35,6 +148,8 @@ def get_cmap(name: str, alpha: float = 1.0) -> np.ndarray: name of colormap alpha: float alpha, 0.0 - 1.0 + gamma: float + gamma, 0.0 - 1.0 Returns ------- @@ -43,23 +158,8 @@ def get_cmap(name: str, alpha: float = 1.0) -> np.ndarray: """ - cmap_path = Path(__file__).absolute().parent.joinpath("colormaps", name) - if cmap_path.is_file(): - cmap = np.loadtxt(cmap_path) - - else: - try: - from .generate_colormaps import make_cmap - - cmap = make_cmap(name, alpha) - except (ImportError, ModuleNotFoundError): - raise ModuleNotFoundError( - "Couldn't find colormap files, matplotlib is required to generate them " - "if they aren't found. Please install `matplotlib`" - ) - + cmap = cmap_lib.Colormap(name).lut(256, gamma=gamma) cmap[:, -1] = alpha - return cmap.astype(np.float32) @@ -85,34 +185,36 @@ def make_colors(n_colors: int, cmap: str, alpha: float = 1.0) -> np.ndarray: shape is [n_colors, 4], where the last dimension is RGBA """ - name = cmap - cmap = get_cmap(name, alpha) - if name in QUALITATIVE_CMAPS: - max_colors = cmap.shape[0] - if n_colors > cmap.shape[0]: + cm = cmap_lib.Colormap(cmap) + + # can also use cm.category == "qualitative", but checking for non-interpolated + # colormaps is a bit more general. (and not all "custom" colormaps will be + # assigned a category) + if cm.interpolation == "nearest": + max_colors = len(cm.color_stops) + if n_colors > max_colors: raise ValueError( - f"You have requested <{n_colors}> but only <{max_colors} existing for the " + f"You have requested <{n_colors}> colors but only <{max_colors}> exist for the " f"chosen cmap: <{cmap}>" ) - return cmap[:n_colors] + return np.asarray(cm.color_stops, dtype=np.float32)[:n_colors, 1:] cm_ixs = np.linspace(0, 255, n_colors, dtype=int) - return np.take(cmap, cm_ixs, axis=0).astype(np.float32) + return cm(cm_ixs).astype(np.float32) def get_cmap_texture(name: str, alpha: float = 1.0) -> Texture: - cmap = get_cmap(name) - return Texture(cmap, dim=1) + return Texture(get_cmap(name, alpha), dim=1) -def make_colors_dict(labels: iter, cmap: str, **kwargs) -> OrderedDict: +def make_colors_dict(labels: Sequence, cmap: str, **kwargs) -> OrderedDict: """ Get a dict for mapping labels onto colors. Parameters ---------- - labels: Iterable[Any] + labels: Sequence[Any] labels for creating a colormap. Order is maintained if it is a list of unique elements. cmap: str @@ -165,15 +267,17 @@ def make_colors_dict(labels: iter, cmap: str, **kwargs) -> OrderedDict: return OrderedDict(zip(labels, colors)) -def quick_min_max(data: np.ndarray) -> Tuple[float, float]: +def quick_min_max(data: np.ndarray, max_size=1e6) -> tuple[float, float]: """ - Adapted from pyqtgraph.ImageView. - Estimate the min/max values of *data* by subsampling. + Estimate the min/max values of *data* by subsampling relative to the size of each dimension in the array. Parameters ---------- data: np.ndarray or array-like with `min` and `max` attributes + max_size : int, optional + largest array size allowed in the subsampled array. Default is 1e6. + Returns ------- (float, float) @@ -187,11 +291,7 @@ def quick_min_max(data: np.ndarray) -> Tuple[float, float]: ): return data.min, data.max - while data.size > 1e6: - ax = np.argmax(data.shape) - sl = [slice(None)] * data.ndim - sl[ax] = slice(None, None, 2) - data = data[tuple(sl)] + data = subsample_array(data, max_size=max_size) return float(np.nanmin(data)), float(np.nanmax(data)) @@ -220,7 +320,7 @@ def make_pygfx_colors(colors, n_colors): return colors_array -def calculate_gridshape(n_subplots: int) -> Tuple[int, int]: +def calculate_figure_shape(n_subplots: int) -> tuple[int, int]: """ Returns ``(n_rows, n_cols)`` from given number of subplots ``n_subplots`` """ @@ -240,7 +340,7 @@ def normalize_min_max(a): def parse_cmap_values( n_colors: int, cmap_name: str, - cmap_values: Union[np.ndarray, List[Union[int, float]]] = None, + transform: np.ndarray | list[int | float] = None, ) -> np.ndarray: """ @@ -252,54 +352,128 @@ def parse_cmap_values( cmap_name: str colormap name - cmap_values: np.ndarray | List[int | float], optional - cmap values + transform: np.ndarray | List[int | float], optional + cmap transform Returns ------- """ - if cmap_values is None: - # use the cmap values linearly just along the collection indices - # for example, if len(data) = 10 and the cmap is "jet", then it will - # linearly go from blue to red from data[0] to data[-1] + if transform is None: colors = make_colors(n_colors, cmap_name) return colors else: - if not isinstance(cmap_values, np.ndarray): - cmap_values = np.array(cmap_values) + if not isinstance(transform, np.ndarray): + transform = np.array(transform) - # use the values within cmap_values to set the color of the corresponding data - # each individual data[i] has its color based on the "relative cmap_value intensity" - if len(cmap_values) != n_colors: + # use the of the cmap_transform to set the color of the corresponding data + # each individual data[i] has its color based on the transform values + if len(transform) != n_colors: raise ValueError( - f"len(cmap_values) != len(data): {len(cmap_values)} != {n_colors}" + f"len(cmap_values) != len(data): {len(transform)} != {n_colors}" ) colormap = get_cmap(cmap_name) n_colors = colormap.shape[0] - 1 - if cmap_name in QUALITATIVE_CMAPS: + # can also use cm.category == "qualitative" + if cmap_lib.Colormap(cmap_name).interpolation == "nearest": + # check that cmap_values are and within the number of colors `n_colors` + # do not scale, use directly - if not np.issubdtype(cmap_values.dtype, np.integer): + if not np.issubdtype(transform.dtype, np.integer): raise TypeError( - f" cmap_values should be used with qualitative colormaps, the dtype you " - f"have passed is {cmap_values.dtype}" + f" `cmap_transform` values should be used with qualitative colormaps, " + f"the dtype you have passed is {transform.dtype}" ) - if max(cmap_values) > n_colors: + if max(transform) > n_colors: raise IndexError( f"You have chosen the qualitative colormap <'{cmap_name}'> which only has " - f"<{n_colors}> colors, which is lower than the max value of your `cmap_values`." + f"<{n_colors}> colors, which is lower than the max value of your `cmap_transform`." f"Choose a cmap with more colors, or a non-quantitative colormap." ) - norm_cmap_values = cmap_values + norm_cmap_values = transform else: # scale between 0 - n_colors so we can just index the colormap as a LUT - norm_cmap_values = (normalize_min_max(cmap_values) * n_colors).astype(int) + norm_cmap_values = (normalize_min_max(transform) * n_colors).astype(int) # use colormap as LUT to map the cmap_values to the colormap index colors = np.vstack([colormap[val] for val in norm_cmap_values]) return colors + + +def subsample_array( + arr: np.ndarray, max_size: int = 1e6, ignore_dims: Sequence[int] | None = None +): + """ + Subsamples an input array while preserving its relative dimensional proportions. + + The dimensions (shape) of the array can be represented as: + + .. math:: + + [d_1, d_2, \\dots d_n] + + The product of the dimensions can be represented as: + + .. math:: + + \\prod_{i=1}^{n} d_i + + To find the factor ``f`` by which to divide the size of each dimension in order to + get max_size ``s`` we must solve for ``f`` in the following expression: + + .. math:: + + \\prod_{i=1}^{n} \\frac{d_i}{\\mathbf{f}} = \\mathbf{s} + + The solution for ``f`` is is simply the nth root of the product of the dims divided by the max_size + where n is the number of dimensions + + .. math:: + + \\mathbf{f} = \\sqrt[n]{\\frac{\\prod_{i=1}^{n} d_i}{\\mathbf{s}}} + + Parameters + ---------- + arr: np.ndarray + input array of any dimensionality to be subsampled. + + max_size: int, default 1e6 + maximum number of elements in subsampled array + + ignore_dims: Sequence[int], optional + List of dimension indices to exclude from subsampling (i.e. retain full resolution). + For example, `ignore_dims=[0]` will avoid subsampling along the first axis. + + Returns + ------- + np.ndarray + subsample of the input array + """ + full_shape = np.array(arr.shape, dtype=np.uint64) + if np.prod(full_shape) <= max_size: + return arr[:] # no need to subsample if already below the threshold + + # get factor by which to divide all dims + f = np.power((np.prod(full_shape) / max_size), 1.0 / arr.ndim) + + # new shape for subsampled array + ns = np.floor(np.array(full_shape) / f).clip(min=1) + + # get the step size for the slices + slices = list( + slice(None, None, int(s)) for s in np.floor(full_shape / ns).astype(int) + ) + + # ignore dims e.g. RGB, which we don't want to downsample + if ignore_dims is not None: + for dim in ignore_dims: + slices[dim] = slice(None) + + slices = tuple(slices) + + return np.asarray(arr[slices]) diff --git a/fastplotlib/utils/generate_add_methods.py b/fastplotlib/utils/generate_add_methods.py deleted file mode 100644 index 3fe16260c..000000000 --- a/fastplotlib/utils/generate_add_methods.py +++ /dev/null @@ -1,73 +0,0 @@ -import inspect -import pathlib - -# if there is an existing mixin class, replace it with an empty class -# so that fastplotlib will import -# hacky but it works -current_module = pathlib.Path(__file__).parent.parent.resolve() -with open(current_module.joinpath('layouts/graphic_methods_mixin.py'), 'w') as f: - f.write( - f"class GraphicMethodsMixin:\n" - f" pass" - ) - -from fastplotlib import graphics - - -modules = list() - -for name, obj in inspect.getmembers(graphics): - if inspect.isclass(obj): - modules.append(obj) - - -def generate_add_graphics_methods(): - # clear file and regenerate from scratch - - f = open(current_module.joinpath('layouts/graphic_methods_mixin.py'), 'w') - - f.write('# This is an auto-generated file and should not be modified directly\n\n') - - f.write('from typing import *\n\n') - f.write('import numpy\n') - f.write('import weakref\n\n') - f.write('from ..graphics import *\n') - f.write('from ..graphics._base import Graphic\n\n') - - f.write("\nclass GraphicMethodsMixin:\n") - f.write(" def __init__(self):\n") - f.write(" pass\n\n") - - f.write(" def _create_graphic(self, graphic_class, *args, **kwargs) -> Graphic:\n") - f.write(" if 'center' in kwargs.keys():\n") - f.write(" center = kwargs.pop('center')\n") - f.write(" else:\n") - f.write(" center = False\n\n") - f.write(" if 'name' in kwargs.keys():\n") - f.write(" self._check_graphic_name_exists(kwargs['name'])\n\n") - f.write(" graphic = graphic_class(*args, **kwargs)\n") - f.write(" self.add_graphic(graphic, center=center)\n\n") - f.write(" # only return a proxy to the real graphic\n") - f.write(" return weakref.proxy(graphic)\n\n") - - for m in modules: - class_name = m - method_name = class_name.type - - class_args = inspect.getfullargspec(class_name)[0][1:] - class_args = [arg + ', ' for arg in class_args] - s = "" - for a in class_args: - s += a - - f.write(f" def add_{method_name}{inspect.signature(class_name.__init__)} -> {class_name.__name__}:\n") - f.write(' """\n') - f.write(f' {class_name.__init__.__doc__}\n') - f.write(' """\n') - f.write(f" return self._create_graphic({class_name.__name__}, {s}*args, **kwargs)\n\n") - - f.close() - - -if __name__ == '__main__': - generate_add_graphics_methods() diff --git a/fastplotlib/utils/generate_colormaps.py b/fastplotlib/utils/generate_colormaps.py deleted file mode 100644 index e56a9f226..000000000 --- a/fastplotlib/utils/generate_colormaps.py +++ /dev/null @@ -1,126 +0,0 @@ -import numpy as np -from matplotlib import cm - - -class ColormapNames: - perceptually_uniform = ["viridis", "plasma", "inferno", "magma", "cividis"] - sequential = [ - "Greys", - "Purples", - "Blues", - "Greens", - "Oranges", - "Reds", - "YlOrBr", - "YlOrRd", - "OrRd", - "PuRd", - "RdPu", - "BuPu", - "GnBu", - "PuBu", - "YlGnBu", - "PuBuGn", - "BuGn", - "YlGn", - ] - - sequential2 = [ - "binary", - "gist_yarg", - "gist_gray", - "gray", - "bone", - "pink", - "spring", - "summer", - "autumn", - "winter", - "cool", - "Wistia", - "hot", - "afmhot", - "gist_heat", - "copper", - ] - - diverging = [ - "PiYG", - "PRGn", - "BrBG", - "PuOr", - "RdGy", - "RdBu", - "RdYlBu", - "RdYlGn", - "Spectral", - "coolwarm", - "bwr", - "seismic", - ] - - cyclic = ["twilight", "twilight_shifted", "hsv"] - - qualitative = [ - "Pastel1", - "Pastel2", - "Paired", - "Accent", - "Dark2", - "Set1", - "Set2", - "Set3", - "tab10", - "tab20", - "tab20b", - "tab20c", - ] - - miscellaneous = [ - "flag", - "prism", - "ocean", - "gist_earth", - "terrain", - "gist_stern", - "gnuplot", - "gnuplot2", - "CMRmap", - "cubehelix", - "brg", - "gist_rainbow", - "rainbow", - "jet", - "turbo", - "nipy_spectral", - "gist_ncar", - ] - - all = ( - perceptually_uniform - + sequential - + sequential2 - + diverging - + cyclic - + qualitative - + miscellaneous - ) - - -def make_cmap(name: str, alpha: float = 1.0) -> np.ndarray: - _cm = getattr(cm, name) - - if name in ColormapNames.qualitative: - n_colors = getattr(_cm, "N") - else: - n_colors = 256 - - cmap = np.vstack([_cm(i) for i in range(n_colors)]) - cmap[:, -1] = alpha - - return cmap.astype(np.float32) - - -if __name__ == "__main__": - for name in ColormapNames().all: - np.savetxt(f"./colormaps/{name}", make_cmap(name)) diff --git a/fastplotlib/utils/gpu.py b/fastplotlib/utils/gpu.py new file mode 100644 index 000000000..912cf0935 --- /dev/null +++ b/fastplotlib/utils/gpu.py @@ -0,0 +1,24 @@ +import wgpu +from pygfx.renderers.wgpu import select_adapter as pygfx_select_adapter +from pygfx import print_wgpu_report as pygfx_print_wgpu_report + + +def enumerate_adapters() -> list[wgpu.GPUAdapter]: + return wgpu.gpu.enumerate_adapters_sync() + + +enumerate_adapters.__doc__ = wgpu.gpu.enumerate_adapters_async.__doc__ + + +def select_adapter(adapter: wgpu.GPUAdapter): + return pygfx_select_adapter(adapter) + + +select_adapter.__doc__ = pygfx_select_adapter.__doc__ + + +def print_wgpu_report(): + return pygfx_print_wgpu_report() + + +print_wgpu_report.__doc__ = pygfx_print_wgpu_report.__doc__ diff --git a/fastplotlib/utils/gui.py b/fastplotlib/utils/gui.py new file mode 100644 index 000000000..6a0d8dfdc --- /dev/null +++ b/fastplotlib/utils/gui.py @@ -0,0 +1,134 @@ +import sys +import importlib +from pathlib import Path + +import wgpu + + +# --- Prepare + + +# Ultimately, we let wgpu-py decide, but we can prime things a bit to create our +# own preferred order, by importing a Qt lib. But we only do this if no GUI has +# been imported yet. + +# Qt libs that we will try to import +qt_libs = ["PySide6", "PyQt6", "PySide2", "PyQt5"] + +# Other known libs that, if imported, we should probably not try to force qt +other_libs = ["glfw", "wx", "ipykernel"] + +already_imported = [name for name in (qt_libs + other_libs) if name in sys.modules] +if not already_imported: + for name in qt_libs: + try: + importlib.import_module(name) + except Exception: + pass + else: + break + + +# --- Triage + + +# Let wgpu do the auto gui selection +from rendercanvas import BaseRenderCanvas +from rendercanvas.auto import RenderCanvas, loop + +# Get the name of the backend ('qt', 'glfw', 'jupyter') +GUI_BACKEND = RenderCanvas.__module__.split(".")[-1] +IS_JUPYTER = GUI_BACKEND == "jupyter" + + +# --- Some backend-specific preparations + + +def _notebook_print_banner(): + from ipywidgets import Image + from IPython.display import display, HTML + + logo_path = Path(__file__).parent.parent.joinpath( + "assets", "fastplotlib_face_logo.png" + ) + + with open(logo_path, "rb") as f: + logo_data = f.read() + + # get small logo image + image = Image(value=logo_data, format="png", width=300, height=55) + + # get adapters and info + adapters = [a for a in wgpu.gpu.enumerate_adapters_sync()] + adapters_info = [a.info for a in adapters] + + default_adapter_info = wgpu.gpu.request_adapter_sync().info + default_ix = adapters_info.index(default_adapter_info) + + if len(adapters) < 1: + return + + # start HTML table + table_str = ( + "Available devices:" + "" + "" + "" + "" + "" + "" + "" + "" + ) + + # parse each adapter that WGPU found + for ix, adapter in enumerate(adapters_info): + atype = adapter["adapter_type"] + backend = adapter["backend_type"] + driver = adapter["description"] + device = adapter["device"] + + if atype in ("DiscreteGPU", "IntegratedGPU") and backend != "OpenGL": + charactor = chr(0x2705) # green checkmark + tooltip = "This adapter can be used with fastplotlib" + elif backend == "OpenGL": + charactor = chr(0x0000274C) # red x + tooltip = "This adapter cannot be used with fastplotlib" + elif device.startswith("llvmpipe") or atype == "CPU": + charactor = f"{chr(0x00002757)} limited" # red ! + tooltip = "CPU rendering support is limited and mainly for testing purposes" + else: + charactor = f"{chr(0x00002757)} unknown" # red ! + tooltip = "Unknown adapter type and backend" + + if ix == default_ix: + default = " (default) " + else: + default = "" + + # add row to HTML table + table_str += f'' + # add each element to this row + for s in [f"{charactor}{default}", device, atype, backend, driver]: + table_str += f"" + table_str += "" + + table_str += "
ValidDeviceTypeBackendDriver
{s}
" + + # display logo and adapters table + display(image) + display(HTML(table_str)) + + +if GUI_BACKEND == "jupyter": + _notebook_print_banner() + +elif GUI_BACKEND == "qt": + from rendercanvas.qt import libname + + # Import submodules of PySide6/PyQt6/PySid2/PyQt5 + # For the way that fpl uses Qt, the supported Qt libs seems compatible enough. + # If necessary we can do some qtpy-like monkey-patching here. + QtCore = importlib.import_module(".QtCore", libname) + QtGui = importlib.import_module(".QtGui", libname) + QtWidgets = importlib.import_module(".QtWidgets", libname) diff --git a/fastplotlib/utils/mesh_masks.py b/fastplotlib/utils/mesh_masks.py new file mode 100644 index 000000000..c44588b6c --- /dev/null +++ b/fastplotlib/utils/mesh_masks.py @@ -0,0 +1,128 @@ +import numpy as np + + +""" +positions for indexing the BoxGeometry to set the "width" and "size" of the box +hacky, but I don't think we can morph meshes in pygfx yet: https://github.com/pygfx/pygfx/issues/346 +""" + +x_right = np.array( + [ + True, + True, + True, + True, + False, + False, + False, + False, + False, + True, + False, + True, + True, + False, + True, + False, + False, + True, + False, + True, + True, + False, + True, + False, + ] +) + +x_left = np.array( + [ + False, + False, + False, + False, + True, + True, + True, + True, + True, + False, + True, + False, + False, + True, + False, + True, + True, + False, + True, + False, + False, + True, + False, + True, + ] +) + +y_top = np.array( + [ + False, + True, + False, + True, + False, + True, + False, + True, + True, + True, + True, + True, + False, + False, + False, + False, + False, + False, + True, + True, + False, + False, + True, + True, + ] +) + +y_bottom = np.array( + [ + True, + False, + True, + False, + True, + False, + True, + False, + False, + False, + False, + False, + True, + True, + True, + True, + True, + True, + False, + False, + True, + True, + False, + False, + ] +) + +x_right = (x_right, 0) +x_left = (x_left, 0) +y_top = (y_top, 1) +y_bottom = (y_bottom, 1) diff --git a/fastplotlib/utils/types.py b/fastplotlib/utils/types.py new file mode 100644 index 000000000..e99fce2fc --- /dev/null +++ b/fastplotlib/utils/types.py @@ -0,0 +1,4 @@ +from collections import namedtuple + + +SelectorColorStates = namedtuple("state", ["idle", "highlight", "action"]) diff --git a/fastplotlib/widgets/__init__.py b/fastplotlib/widgets/__init__.py index 30a68d672..766620ea6 100644 --- a/fastplotlib/widgets/__init__.py +++ b/fastplotlib/widgets/__init__.py @@ -1,3 +1,3 @@ -from .image import ImageWidget +from .image_widget import ImageWidget __all__ = ["ImageWidget"] diff --git a/fastplotlib/widgets/histogram_lut.py b/fastplotlib/widgets/histogram_lut.py deleted file mode 100644 index 0d8ca9f15..000000000 --- a/fastplotlib/widgets/histogram_lut.py +++ /dev/null @@ -1,293 +0,0 @@ -from typing import * -import weakref - -import numpy as np - -from pygfx import Group - -from ..graphics import LineGraphic, ImageGraphic, TextGraphic -from ..graphics._base import Graphic -from ..graphics.selectors import LinearRegionSelector - - -# TODO: This is a widget, we can think about a BaseWidget class later if necessary -class HistogramLUT(Graphic): - def __init__( - self, - data: np.ndarray, - image_graphic: ImageGraphic, - nbins: int = 100, - flank_divisor: float = 5.0, - **kwargs - ): - """ - - Parameters - ---------- - data - image_graphic - nbins - flank_divisor: float, default 5.0 - set `np.inf` for no flanks - kwargs - """ - super().__init__(**kwargs) - - self._nbins = nbins - self._flank_divisor = flank_divisor - self._image_graphic = image_graphic - - self._data = weakref.proxy(data) - - self._scale_factor: float = 1.0 - - hist, edges, hist_scaled, edges_flanked = self._calculate_histogram(data) - - line_data = np.column_stack([hist_scaled, edges_flanked]) - - self.line = LineGraphic(line_data) - - bounds = (edges[0], edges[-1]) - limits = (edges_flanked[0], edges_flanked[-1]) - size = 120 # since it's scaled to 100 - origin = (hist_scaled.max() / 2, 0) - - self.linear_region = LinearRegionSelector( - bounds=bounds, - limits=limits, - size=size, - origin=origin, - axis="y", - edge_thickness=8 - ) - - # there will be a small difference with the histogram edges so this makes them both line up exactly - self.linear_region.selection = (image_graphic.cmap.vmin, image_graphic.cmap.vmax) - - self._vmin = self.image_graphic.cmap.vmin - self._vmax = self.image_graphic.cmap.vmax - - vmin_str, vmax_str = self._get_vmin_vmax_str() - - self._text_vmin = TextGraphic( - text=vmin_str, - size=16, - position=(0, 0), - anchor="top-left", - outline_color="black", - outline_thickness=1, - ) - - self._text_vmax = TextGraphic( - text=vmax_str, - size=16, - position=(0, 0), - anchor="bottom-left", - outline_color="black", - outline_thickness=1, - ) - - widget_wo = Group() - widget_wo.add( - self.line.world_object, - self.linear_region.world_object, - self._text_vmin.world_object, - self._text_vmax.world_object, - ) - - self._set_world_object(widget_wo) - - self.world_object.local.scale_x *= -1 - - self._text_vmin.position_x = -120 - self._text_vmin.position_y = self.linear_region.selection()[0] - - self._text_vmax.position_x = -120 - self._text_vmax.position_y = self.linear_region.selection()[1] - - self.linear_region.selection.add_event_handler( - self._linear_region_handler - ) - - self.image_graphic.cmap.add_event_handler(self._image_cmap_handler) - - def _get_vmin_vmax_str(self) -> Tuple[str, str]: - if self.vmin < 0.001 or self.vmin > 99_999: - vmin_str = f"{self.vmin:.2e}" - else: - vmin_str = f"{self.vmin:.2f}" - - if self.vmax < 0.001 or self.vmax > 99_999: - vmax_str = f"{self.vmax:.2e}" - else: - vmax_str = f"{self.vmax:.2f}" - - return vmin_str, vmax_str - - def _add_plot_area_hook(self, plot_area): - self._plot_area = plot_area - self.linear_region._add_plot_area_hook(plot_area) - self.line._add_plot_area_hook(plot_area) - - self._plot_area.auto_scale() - - def _calculate_histogram(self, data): - if data.ndim > 2: - # subsample to max of 500 x 100 x 100, - # np.histogram takes ~30ms with this size on a 8 core Ryzen laptop - # dim0 is usually time, allow max of 500 timepoints - ss0 = max(1, int(data.shape[0] / 500)) # max to prevent step = 0 - # allow max of 100 for x and y if ndim > 2 - ss1 = max(1, int(data.shape[1] / 100)) - ss2 = max(1, int(data.shape[2] / 100)) - - data_ss = data[::ss0, ::ss1, ::ss2] - - hist, edges = np.histogram(data_ss, bins=self._nbins) - - else: - # allow max of 1000 x 1000 - # this takes ~4ms on a 8 core Ryzen laptop - ss0 = max(1, int(data.shape[0] / 1_000)) - ss1 = max(1, int(data.shape[1] / 1_000)) - - data_ss = data[::ss0, ::ss1] - - hist, edges = np.histogram(data_ss, bins=self._nbins) - - # used if data ptp <= 10 because event things get weird - # with tiny world objects due to floating point error - # so if ptp <= 10, scale up by a factor - self._scale_factor: int = max(1, 100 * int(10 / data_ss.ptp())) - - edges = edges * self._scale_factor - - bin_width = edges[1] - edges[0] - - flank_nbins = int(self._nbins / self._flank_divisor) - flank_size = flank_nbins * bin_width - - flank_left = np.arange(edges[0] - flank_size, edges[0], bin_width) - flank_right = np.arange(edges[-1] + bin_width, edges[-1] + flank_size, bin_width) - - edges_flanked = np.concatenate((flank_left, edges, flank_right)) - np.unique(np.diff(edges_flanked)) - - hist_flanked = np.concatenate((np.zeros(flank_nbins), hist, np.zeros(flank_nbins))) - - # scale 0-100 to make it easier to see - # float32 data can produce unnecessarily high values - hist_scaled = hist_flanked / (hist_flanked.max() / 100) - - if edges_flanked.size > hist_scaled.size: - edges_flanked = edges_flanked[:-1] - - return hist, edges, hist_scaled, edges_flanked - - def _linear_region_handler(self, ev): - # must use world coordinate values directly from selection() - # otherwise the linear region bounds jump to the closest bin edges - vmin, vmax = self.linear_region.selection() - vmin, vmax = vmin / self._scale_factor, vmax / self._scale_factor - self.vmin, self.vmax = vmin, vmax - - def _image_cmap_handler(self, ev): - self.vmin, self.vmax = ev.pick_info["vmin"], ev.pick_info["vmax"] - - def _block_events(self, b: bool): - self.image_graphic.cmap.block_events(b) - self.linear_region.selection.block_events(b) - - @property - def vmin(self) -> float: - return self._vmin - - @vmin.setter - def vmin(self, value: float): - self._block_events(True) - - # must use world coordinate values directly from selection() - # otherwise the linear region bounds jump to the closest bin edges - self.linear_region.selection = (value * self._scale_factor, self.linear_region.selection()[1]) - self.image_graphic.cmap.vmin = value - - self._block_events(False) - - self._vmin = value - - vmin_str, vmax_str = self._get_vmin_vmax_str() - self._text_vmin.position_y = self.linear_region.selection()[0] - self._text_vmin.text = vmin_str - - @property - def vmax(self) -> float: - return self._vmax - - @vmax.setter - def vmax(self, value: float): - self._block_events(True) - - # must use world coordinate values directly from selection() - # otherwise the linear region bounds jump to the closest bin edges - self.linear_region.selection = (self.linear_region.selection()[0], value * self._scale_factor) - self.image_graphic.cmap.vmax = value - - self._block_events(False) - - self._vmax = value - - vmin_str, vmax_str = self._get_vmin_vmax_str() - self._text_vmax.position_y = self.linear_region.selection()[1] - self._text_vmax.text = vmax_str - - def set_data(self, data, reset_vmin_vmax: bool = True): - hist, edges, hist_scaled, edges_flanked = self._calculate_histogram(data) - - line_data = np.column_stack([hist_scaled, edges_flanked]) - - self.line.data = line_data - - bounds = (edges[0], edges[-1]) - limits = (edges_flanked[0], edges_flanked[-11]) - origin = (hist_scaled.max() / 2, 0) - # self.linear_region.fill.world.position = (*origin, -2) - - if reset_vmin_vmax: - # reset according to the new data - self.linear_region.limits = limits - self.linear_region.selection = bounds - else: - # don't change the current selection - self._block_events(True) - self.linear_region.limits = limits - self._block_events(False) - - self._data = weakref.proxy(data) - - # reset plotarea dims - self._plot_area.auto_scale() - - @property - def image_graphic(self) -> ImageGraphic: - return self._image_graphic - - @image_graphic.setter - def image_graphic(self, graphic): - if not isinstance(graphic, ImageGraphic): - raise TypeError( - f"HistogramLUT can only use ImageGraphic types, you have passed: {type(graphic)}" - ) - - # cleanup events from current image graphic - self._image_graphic.cmap.remove_event_handler( - self._image_cmap_handler - ) - - self._image_graphic = graphic - - self.image_graphic.cmap.add_event_handler(self._image_cmap_handler) - - def _cleanup(self): - self.linear_region._cleanup() - del self.line - del self.linear_region diff --git a/fastplotlib/widgets/image.py b/fastplotlib/widgets/image.py deleted file mode 100644 index da256207f..000000000 --- a/fastplotlib/widgets/image.py +++ /dev/null @@ -1,900 +0,0 @@ -from typing import * -from warnings import warn - -import numpy as np - - -from ..layouts import GridPlot -from ..graphics import ImageGraphic -from ..utils import calculate_gridshape -from .histogram_lut import HistogramLUT -from ..layouts._utils import CANVAS_OPTIONS_AVAILABLE - - -if CANVAS_OPTIONS_AVAILABLE["jupyter"]: - from ..layouts._frame._ipywidget_toolbar import IpywidgetImageWidgetToolbar - -if CANVAS_OPTIONS_AVAILABLE["qt"]: - from ..layouts._frame._qt_toolbar import QToolbarImageWidget - - -DEFAULT_DIMS_ORDER = { - 2: "xy", - 3: "txy", - 4: "tzxy", - 5: "tzcxy", -} - - -def _is_arraylike(obj) -> bool: - """ - Checks if the object is array-like. - For now just checks if obj has `__getitem__()` - """ - for attr in ["__getitem__", "shape", "ndim"]: - if not hasattr(obj, attr): - return False - - return True - - -class _WindowFunctions: - """Stores window function and window size""" - def __init__(self, func: callable, window_size: int): - self._func = None - self.func = func - - self._window_size = 0 - self.window_size = window_size - - @property - def func(self) -> callable: - """Get or set the function""" - return self._func - - @func.setter - def func(self, func: callable): - self._func = func - - @property - def window_size(self) -> int: - """Get or set window size""" - return self._window_size - - @window_size.setter - def window_size(self, ws: int): - if ws is None: - self._window_size = None - return - - if not isinstance(ws, int): - raise TypeError("window size must be an int") - - if ws < 3: - warn( - f"Invalid 'window size' value for function: {self.func}, " - f"setting 'window size' = None for this function. " - f"Valid values are integers >= 3." - ) - self.window_size = None - return - - if ws % 2 == 0: - ws += 1 - - self._window_size = ws - - def __repr__(self): - return f"func: {self.func}, window_size: {self.window_size}" - - -class ImageWidget: - @property - def gridplot(self) -> GridPlot: - """ - ``GridPlot`` instance within the `ImageWidget`. - """ - return self._gridplot - - @property - def widget(self): - """ - Output context, either an ipywidget or QWidget - """ - return self.gridplot.widget - - @property - def managed_graphics(self) -> List[ImageGraphic]: - """List of ``ImageWidget`` managed graphics.""" - iw_managed = list() - for subplot in self.gridplot: - # empty subplots will not have any image widget data - if len(subplot.graphics) > 0: - iw_managed.append(subplot["image_widget_managed"]) - return iw_managed - - @property - def cmap(self) -> List[str]: - cmaps = list() - for g in self.managed_graphics: - cmaps.append(g.cmap.name) - - return cmaps - - @cmap.setter - def cmap(self, names: Union[str, List[str]]): - if isinstance(names, list): - if not all([isinstance(n, str) for n in names]): - raise TypeError(f"Must pass cmap name as a `str` of list of `str`, you have passed:\n{names}") - - if not len(names) == len(self.managed_graphics): - raise IndexError( - f"If passing a list of cmap names, the length of the list must be the same as the number of " - f"image widget subplots. You have passed: {len(names)} cmap names and have " - f"{len(self.managed_graphics)} image widget subplots" - ) - - for name, g in zip(names, self.managed_graphics): - g.cmap = name - - elif isinstance(names, str): - for g in self.managed_graphics: - g.cmap = names - - @property - def data(self) -> List[np.ndarray]: - """data currently displayed in the widget""" - return self._data - - @property - def ndim(self) -> int: - """number of dimensions in the image data displayed in the widget""" - return self._ndim - - @property - def dims_order(self) -> List[str]: - """dimension order of the data displayed in the widget""" - return self._dims_order - - @property - def sliders(self) -> Dict[str, Any]: - """the ipywidget IntSlider or QSlider instances used by the widget for indexing the desired dimensions""" - return self._image_widget_toolbar.sliders - - @property - def slider_dims(self) -> List[str]: - """the dimensions that the sliders index""" - return self._slider_dims - - @property - def current_index(self) -> Dict[str, int]: - """ - Get or set the current index - - Returns - ------- - index: Dict[str, int] - | ``dict`` for indexing each dimension, provide a ``dict`` with indices for all dimensions used by sliders - or only a subset of dimensions used by the sliders. - | example: if you have sliders for dims "t" and "z", you can pass either ``{"t": 10}`` to index to position - 10 on dimension "t" or ``{"t": 5, "z": 20}`` to index to position 5 on dimension "t" and position 20 on - dimension "z" simultaneously. - - """ - return self._current_index - - @current_index.setter - def current_index(self, index: Dict[str, int]): - if not set(index.keys()).issubset(set(self._current_index.keys())): - raise KeyError( - f"All dimension keys for setting `current_index` must be present in the widget sliders. " - f"The dimensions currently used for sliders are: {list(self.current_index.keys())}" - ) - - for k, val in index.items(): - if not isinstance(val, int): - raise TypeError("Indices for all dimensions must be int") - if val < 0: - raise IndexError("negative indexing is not supported for ImageWidget") - if val > self._dims_max_bounds[k]: - raise IndexError( - f"index {val} is out of bounds for dimension '{k}' " - f"which has a max bound of: {self._dims_max_bounds[k]}" - ) - - self._current_index.update(index) - - # can make a callback_block decorator later - self.block_sliders = True - for k in index.keys(): - self.sliders[k].value = index[k] - self.block_sliders = False - - for i, (ig, data) in enumerate(zip(self.managed_graphics, self.data)): - frame = self._process_indices(data, self._current_index) - frame = self._process_frame_apply(frame, i) - ig.data = frame - - def __init__( - self, - data: Union[np.ndarray, List[np.ndarray]], - dims_order: Union[str, Dict[int, str]] = None, - slider_dims: Union[str, int, List[Union[str, int]]] = None, - window_funcs: Union[int, Dict[str, int]] = None, - frame_apply: Union[callable, Dict[int, callable]] = None, - grid_shape: Tuple[int, int] = None, - names: List[str] = None, - grid_plot_kwargs: dict = None, - histogram_widget: bool = True, - **kwargs, - ): - """ - A high level widget for displaying n-dimensional image data in conjunction with automatically generated - sliders for navigating through 1-2 selected dimensions within image data. - - Can display a single n-dimensional image array or a grid of n-dimensional images. - - Default dimension orders: - - ======= ========== - n_dims dims order - ======= ========== - 2 "xy" - 3 "txy" - 4 "tzxy" - ======= ========== - - Parameters - ---------- - data: Union[np.ndarray, List[np.ndarray] - array-like or a list of array-like - - dims_order: Optional[Union[str, Dict[np.ndarray, str]]] - | ``str`` or a dict mapping to indicate dimension order - | a single ``str`` if ``data`` is a single array, or a list of arrays with the same dimension order - | examples: ``"xyt"``, ``"tzxy"`` - | ``dict`` mapping of ``{array_index: axis_order}`` if specific arrays have a non-default axes order. - | "array_index" is the position of the corresponding array in the data list. - | examples: ``{array_index: "tzxy", another_array_index: "xytz"}`` - - slider_dims: Optional[Union[str, int, List[Union[str, int]]]] - | The dimensions for which to create a slider - | can be a single ``str`` such as **"t"**, **"z"** or a numerical ``int`` that indexes the desired dimension - | can also be a list of ``str`` or ``int`` if multiple sliders are desired for multiple dimensions - | examples: ``"t"``, ``["t", "z"]`` - - window_funcs: Dict[Union[int, str], int] - | average one or more dimensions using a given window - | if a slider exists for only one dimension this can be an ``int``. - | if multiple sliders exist, then it must be a `dict`` mapping in the form of: ``{dimension: window_size}`` - | dimension/axes can be specified using ``str`` such as "t", "z" etc. or ``int`` that indexes the dimension - | if window_size is not an odd number, adds 1 - | use ``None`` to disable averaging for a dimension, example: ``{"t": 5, "z": None}`` - - frame_apply: Union[callable, Dict[int, callable]] - | apply a function to slices of the array before displaying the frame - | pass a single function or a dict of functions to apply to each array individually - | examples: ``{array_index: to_grayscale}``, ``{0: to_grayscale, 2: threshold_img}`` - | "array_index" is the position of the corresponding array in the data list. - | if `window_funcs` is used, then this function is applied after `window_funcs` - | this function must be a callable that returns a 2D array - | example use case: converting an RGB frame from video to a 2D grayscale frame - - grid_shape: Optional[Tuple[int, int]] - manually provide the shape for a gridplot, otherwise a square gridplot is approximated. - - grid_plot_kwargs: dict, optional - passed to `GridPlot` - - names: Optional[str] - gives names to the subplots - - histogram_widget: bool, default False - make histogram LUT widget for each subplot - - kwargs: Any - passed to fastplotlib.graphics.Image - - """ - - self._names = None - - if isinstance(data, list): - # verify that it's a list of np.ndarray - if all([_is_arraylike(d) for d in data]): - if grid_shape is None: - grid_shape = calculate_gridshape(len(data)) - - # verify that user-specified grid shape is large enough for the number of image arrays passed - elif grid_shape[0] * grid_shape[1] < len(data): - grid_shape = calculate_gridshape(len(data)) - warn( - f"Invalid `grid_shape` passed, setting grid shape to: {grid_shape}" - ) - - _ndim = [d.ndim for d in data] - - # verify that all image arrays have same number of dimensions - # sliders get messy otherwise - if not len(set(_ndim)) == 1: - raise ValueError( - f"Number of dimensions of all data arrays must match, your ndims are: {_ndim}" - ) - - self._data: List[np.ndarray] = data - self._ndim = self.data[0].ndim # all ndim must be same - - if names is not None: - if not all([isinstance(n, str) for n in names]): - raise TypeError( - "optional argument `names` must be a list of str" - ) - - if len(names) != len(self.data): - raise ValueError( - "number of `names` for subplots must be same as the number of data arrays" - ) - self._names = names - - else: - raise TypeError( - f"If passing a list to `data` all elements must be an " - f"array-like type representing an n-dimensional image. " - f"You have passed the following types:\n" - f"{[type(a) for a in data]}" - ) - - elif _is_arraylike(data): - self._data = [data] - self._ndim = self.data[0].ndim - - grid_shape = calculate_gridshape(len(self._data)) - else: - raise TypeError( - f"`data` must be an array-like type representing an n-dimensional image " - f"or a list of array-like representing a grid of n-dimensional images. " - f"You have passed the following type {type(data)}" - ) - - # default dims order if not passed - # updated later if passed - self._dims_order: List[str] = [DEFAULT_DIMS_ORDER[self.ndim]] * len(self.data) - - if dims_order is not None: - if isinstance(dims_order, str): - dims_order = dims_order.lower() - if len(dims_order) != self.ndim: - raise ValueError( - f"number of dims '{len(dims_order)} passed to `dims_order` " - f"does not match ndim '{self.ndim}' of data" - ) - self._dims_order: List[str] = [dims_order] * len(self.data) - elif isinstance(dims_order, dict): - self._dims_order: List[str] = [DEFAULT_DIMS_ORDER[self.ndim]] * len( - self.data - ) - - # dict of {array_ix: dims_order_str} - for data_ix in list(dims_order.keys()): - if not isinstance(data_ix, int): - raise TypeError("`dims_order` dict keys must be ") - if len(dims_order[data_ix]) != self.ndim: - raise ValueError( - f"number of dims '{len(dims_order)} passed to `dims_order` " - f"does not match ndim '{self.ndim}' of data" - ) - _do = dims_order[data_ix].lower() - # make sure the same dims are present - if not set(_do) == set(DEFAULT_DIMS_ORDER[self.ndim]): - raise ValueError( - f"Invalid `dims_order` passed for one of your arrays, " - f"valid `dims_order` for given number of dimensions " - f"can only contain the following characters: " - f"{DEFAULT_DIMS_ORDER[self.ndim]}" - ) - try: - self.dims_order[data_ix] = _do - except Exception: - raise IndexError( - f"index {data_ix} out of bounds for `dims_order`, the bounds are 0 - {len(self.data)}" - ) - else: - raise TypeError( - f"`dims_order` must be a or , you have passed a: <{type(dims_order)}>" - ) - - if not len(self.dims_order[0]) == self.ndim: - raise ValueError( - f"Number of dims specified by `dims_order`: {len(self.dims_order[0])} does not" - f" match number of dimensions in the `data`: {self.ndim}" - ) - - ao = np.array([sorted(v) for v in self.dims_order]) - - if not np.all(ao == ao[0]): - raise ValueError( - f"`dims_order` for all arrays must contain the same combination of dimensions, your `dims_order` are: " - f"{self.dims_order}" - ) - - # if slider_dims not provided - if slider_dims is None: - # by default sliders are made for all dimensions except the last 2 - default_dim_names = {0: "t", 1: "z", 2: "c"} - slider_dims = list() - for dim in range(self.ndim - 2): - if dim in default_dim_names.keys(): - slider_dims.append(default_dim_names[dim]) - else: - slider_dims.append(f"{dim}") - - # slider for only one of the dimensions - if isinstance(slider_dims, (int, str)): - # if numerical dimension is specified - if isinstance(slider_dims, int): - ao = np.array([v for v in self.dims_order]) - if not np.all(ao == ao[0]): - raise ValueError( - f"`dims_order` for all arrays must be identical if passing in a `slider_dims` argument. " - f"Pass in a argument if the `dims_order` are different for each array." - ) - self._slider_dims: List[str] = [self.dims_order[0][slider_dims]] - - # if dimension specified by str - elif isinstance(slider_dims, str): - if slider_dims not in self.dims_order[0]: - raise ValueError( - f"if `slider_dims` is a , it must be a character found in `dims_order`. " - f"Your `dims_order` characters are: {set(self.dims_order[0])}." - ) - self._slider_dims: List[str] = [slider_dims] - - # multiple sliders, one for each dimension - elif isinstance(slider_dims, list): - self._slider_dims: List[str] = list() - - # make sure window_funcs and frame_apply are dicts if multiple sliders are desired - if (not isinstance(window_funcs, dict)) and (window_funcs is not None): - raise TypeError( - f"`window_funcs` must be a if multiple `slider_dims` are provided. You must specify the " - f"window for each dimension." - ) - if (not isinstance(frame_apply, dict)) and (frame_apply is not None): - raise TypeError( - f"`frame_apply` must be a if multiple `slider_dims` are provided. You must specify a " - f"function for each dimension." - ) - - for sdm in slider_dims: - if isinstance(sdm, int): - ao = np.array([v for v in self.dims_order]) - if not np.all(ao == ao[0]): - raise ValueError( - f"`dims_order` for all arrays must be identical if passing in a `slider_dims` argument. " - f"Pass in a argument if the `dims_order` are different for each array." - ) - # parse int to a str - self.slider_dims.append(self.dims_order[0][sdm]) - - elif isinstance(sdm, str): - if sdm not in self.dims_order[0]: - raise ValueError( - f"if `slider_dims` is a , it must be a character found in `dims_order`. " - f"Your `dims_order` characters are: {set(self.dims_order[0])}." - ) - self.slider_dims.append(sdm) - - else: - raise TypeError( - "If passing a list for `slider_dims` each element must be either an or " - ) - - else: - raise TypeError( - f"`slider_dims` must a , or , you have passed a: {type(slider_dims)}" - ) - - self.frame_apply: Dict[int, callable] = dict() - - if frame_apply is not None: - if callable(frame_apply): - self.frame_apply = {0: frame_apply} - - elif isinstance(frame_apply, dict): - self.frame_apply: Dict[int, callable] = dict.fromkeys( - list(range(len(self.data))) - ) - - # dict of {array: dims_order_str} - for data_ix in list(frame_apply.keys()): - if not isinstance(data_ix, int): - raise TypeError("`frame_apply` dict keys must be ") - try: - self.frame_apply[data_ix] = frame_apply[data_ix] - except Exception: - raise IndexError( - f"key index {data_ix} out of bounds for `frame_apply`, the bounds are 0 - {len(self.data)}" - ) - else: - raise TypeError( - f"`frame_apply` must be a callable or , " - f"you have passed a: <{type(frame_apply)}>" - ) - - self._window_funcs = None - self.window_funcs = window_funcs - - self._sliders: Dict[str, Any] = dict() - - # current_index stores {dimension_index: slice_index} for every dimension - self._current_index: Dict[str, int] = {sax: 0 for sax in self.slider_dims} - - # get max bound for all data arrays for all dimensions - self._dims_max_bounds: Dict[str, int] = {k: np.inf for k in self.slider_dims} - for _dim in list(self._dims_max_bounds.keys()): - for array, order in zip(self.data, self.dims_order): - self._dims_max_bounds[_dim] = min( - self._dims_max_bounds[_dim], array.shape[order.index(_dim)] - ) - - grid_plot_kwargs_default = {"controllers": "sync"} - if grid_plot_kwargs is None: - grid_plot_kwargs = dict() - - # update the default kwargs with any user-specified kwargs - # user specified kwargs will overwrite the defaults - grid_plot_kwargs_default.update(grid_plot_kwargs) - - self._gridplot: GridPlot = GridPlot(shape=grid_shape, **grid_plot_kwargs_default) - - for data_ix, (d, subplot) in enumerate(zip(self.data, self.gridplot)): - if self._names is not None: - name = self._names[data_ix] - else: - name = None - - frame = self._process_indices(d, slice_indices=self._current_index) - frame = self._process_frame_apply(frame, data_ix) - ig = ImageGraphic(frame, name="image_widget_managed", **kwargs) - subplot.add_graphic(ig) - subplot.name = name - subplot.set_title(name) - - if histogram_widget: - hlut = HistogramLUT( - data=d, - image_graphic=ig, - name="histogram_lut" - ) - - subplot.docks["right"].add_graphic(hlut) - subplot.docks["right"].size = 80 - subplot.docks["right"].auto_scale(maintain_aspect=False) - subplot.docks["right"].controller.enabled = False - - self.block_sliders = False - self._image_widget_toolbar = None - - @property - def window_funcs(self) -> Dict[str, _WindowFunctions]: - """ - Get or set the window functions - - Returns - ------- - Dict[str, _WindowFunctions] - - """ - return self._window_funcs - - @window_funcs.setter - def window_funcs(self, sa: Union[int, Dict[str, int]]): - if sa is None: - self._window_funcs = None - return - - # for a single dim - elif isinstance(sa, tuple): - if len(self.slider_dims) > 1: - raise TypeError( - "Must pass dict argument to window_funcs if using multiple sliders. See the docstring." - ) - if not callable(sa[0]) or not isinstance(sa[1], int): - raise TypeError( - "Tuple argument to `window_funcs` must be in the form of (func, window_size). See the docstring." - ) - - dim_str = self.slider_dims[0] - self._window_funcs = dict() - self._window_funcs[dim_str] = _WindowFunctions(*sa) - - # for multiple dims - elif isinstance(sa, dict): - if not all( - [isinstance(_sa, tuple) or (_sa is None) for _sa in sa.values()] - ): - raise TypeError( - "dict argument to `window_funcs` must be in the form of: " - "`{dimension: (func, window_size)}`. " - "See the docstring." - ) - for v in sa.values(): - if v is not None: - if not callable(v[0]) or not ( - isinstance(v[1], int) or v[1] is None - ): - raise TypeError( - "dict argument to `window_funcs` must be in the form of: " - "`{dimension: (func, window_size)}`. " - "See the docstring." - ) - - if not isinstance(self._window_funcs, dict): - self._window_funcs = dict() - - for k in list(sa.keys()): - if sa[k] is None: - self._window_funcs[k] = None - else: - self._window_funcs[k] = _WindowFunctions(*sa[k]) - - else: - raise TypeError( - f"`window_funcs` must be of type `int` if using a single slider or a dict if using multiple sliders. " - f"You have passed a {type(sa)}. See the docstring." - ) - - def _process_indices( - self, array: np.ndarray, slice_indices: Dict[Union[int, str], int] - ) -> np.ndarray: - """ - Get the 2D array from the given slice indices. If not returning a 2D slice (such as due to window_funcs) - then `frame_apply` must take this output and return a 2D array - - Parameters - ---------- - array: np.ndarray - array-like to get a 2D slice from - - slice_indices: Dict[int, int] - dict in form of {dimension_index: slice_index} - For example if an array has shape [1000, 30, 512, 512] corresponding to [t, z, x, y]: - To get the 100th timepoint and 3rd z-plane pass: - {"t": 100, "z": 3}, or {0: 100, 1: 3} - - Returns - ------- - np.ndarray - array-like, 2D slice - - """ - indexer = [slice(None)] * self.ndim - - numerical_dims = list() - for dim in list(slice_indices.keys()): - if isinstance(dim, str): - data_ix = None - for i in range(len(self.data)): - if self.data[i] is array: - data_ix = i - break - if data_ix is None: - raise ValueError(f"Given `array` not found in `self.data`") - # get axes order for that specific array - numerical_dim = self.dims_order[data_ix].index(dim) - else: - numerical_dim = dim - - indices_dim = slice_indices[dim] - - # takes care of averaging if it was specified - indices_dim = self._get_window_indices(data_ix, numerical_dim, indices_dim) - - # set the indices for this dimension - indexer[numerical_dim] = indices_dim - - numerical_dims.append(numerical_dim) - - # apply indexing to the array - # use window function is given for this dimension - if self.window_funcs is not None: - a = array - for i, dim in enumerate(sorted(numerical_dims)): - dim_str = self.dims_order[data_ix][dim] - dim = dim - i # since we loose a dimension every iteration - _indexer = [slice(None)] * (self.ndim - i) - _indexer[dim] = indexer[dim + i] - - # if the indexer is an int, this dim has no window func - if isinstance(_indexer[dim], int): - a = a[tuple(_indexer)] - else: - # if the indices are from `self._get_window_indices` - func = self.window_funcs[dim_str].func - window = a[tuple(_indexer)] - a = func(window, axis=dim) - # a = np.mean(a[tuple(_indexer)], axis=dim) - return a - else: - return array[tuple(indexer)] - - def _get_window_indices(self, data_ix, dim, indices_dim): - if self.window_funcs is None: - return indices_dim - - else: - ix = indices_dim - - dim_str = self.dims_order[data_ix][dim] - - # if no window stuff specified for this dim - if dim_str not in self.window_funcs.keys(): - return indices_dim - - # if window stuff is set to None for this dim - # example: {"t": None} - if self.window_funcs[dim_str] is None: - return indices_dim - - window_size = self.window_funcs[dim_str].window_size - - if (window_size == 0) or (window_size is None): - return indices_dim - - half_window = int((window_size - 1) / 2) # half-window size - # get the max bound for that dimension - max_bound = self._dims_max_bounds[dim_str] - indices_dim = range( - max(0, ix - half_window), min(max_bound, ix + half_window) - ) - return indices_dim - - def _process_frame_apply(self, array, data_ix) -> np.ndarray: - if callable(self.frame_apply): - return self.frame_apply(array) - - if data_ix not in self.frame_apply.keys(): - return array - - elif self.frame_apply[data_ix] is not None: - return self.frame_apply[data_ix](array) - - return array - - def _slider_value_changed(self, dimension: str, change: Union[dict, int]): - if self.block_sliders: - return - if isinstance(change, dict): - value = change["new"] - else: - value = change - self.current_index = {dimension: value} - - def reset_vmin_vmax(self): - """ - Reset the vmin and vmax w.r.t. the full data - """ - for ig in self.managed_graphics: - ig.cmap.reset_vmin_vmax() - - def reset_vmin_vmax_frame(self): - """ - Resets the vmin vmax and HistogramLUT widgets w.r.t. the current data shown in the - ImageGraphic instead of the data in the full data array. For example, if a post-processing - function is used, the range of values in the ImageGraphic can be very different from the - range of values in the full data array. - """ - for subplot in self.gridplot: - hlut = subplot.docks["right"]["histogram_lut"] - # set the data using the current image graphic data - hlut.set_data(subplot["image_widget_managed"].data()) - - def set_data( - self, - new_data: Union[np.ndarray, List[np.ndarray]], - reset_vmin_vmax: bool = True, - reset_indices: bool = True, - ): - """ - Change data of widget. Note: sliders max currently update only for ``txy`` and ``tzxy`` data. - - Parameters - ---------- - new_data: array-like or list of array-like - The new data to display in the widget - - reset_vmin_vmax: bool, default ``True`` - reset the vmin vmax levels based on the new data - - reset_indices: bool, default ``True`` - reset the current index for all dimensions to 0 - - """ - - if reset_indices: - for key in self.current_index: - self.current_index[key] = 0 - for key in self.sliders: - self.sliders[key].value = 0 - - # set slider max according to new data - max_lengths = {"t": np.inf, "z": np.inf} - - if isinstance(new_data, np.ndarray): - new_data = [new_data] - - if len(self._data) != len(new_data): - raise ValueError( - f"number of new data arrays {len(new_data)} must match" - f" current number of data arrays {len(self._data)}" - ) - # check all arrays - for i, (new_array, current_array) in enumerate(zip(new_data, self._data)): - if new_array.ndim != current_array.ndim: - raise ValueError( - f"new data ndim {new_array.ndim} at index {i} " - f"does not equal current data ndim {current_array.ndim}" - ) - - # if checks pass, update with new data - for i, (new_array, current_array, subplot) in enumerate( - zip(new_data, self._data, self.gridplot) - ): - # check last two dims (x and y) to see if data shape is changing - old_data_shape = self._data[i].shape[-2:] - self._data[i] = new_array - - if old_data_shape != new_array.shape[-2:]: - # delete graphics at index zero - subplot.delete_graphic(graphic=subplot["image_widget_managed"]) - # insert new graphic at index zero - frame = self._process_indices( - new_array, slice_indices=self._current_index - ) - frame = self._process_frame_apply(frame, i) - new_graphic = ImageGraphic(data=frame, name="image_widget_managed") - subplot.insert_graphic(graphic=new_graphic) - - if new_array.ndim > 2: - # to set max of time slider, txy or tzxy - max_lengths["t"] = min(max_lengths["t"], new_array.shape[0] - 1) - - if new_array.ndim > 3: # tzxy - max_lengths["z"] = min(max_lengths["z"], new_array.shape[1] - 1) - - # set histogram widget - subplot.docks["right"]["histogram_lut"].set_data(new_array, reset_vmin_vmax=reset_vmin_vmax) - - # set slider maxes - # TODO: maybe make this stuff a property, like ndims, n_frames etc. and have it set the sliders - for key in self.sliders.keys(): - self.sliders[key].max = max_lengths[key] - self._dims_max_bounds[key] = max_lengths[key] - - # force graphics to update - self.current_index = self.current_index - - def show(self, toolbar: bool = True, sidecar: bool = False, sidecar_kwargs: dict = None): - """ - Show the widget - - Returns - ------- - OutputContext - """ - if self.gridplot.canvas.__class__.__name__ == "JupyterWgpuCanvas": - self._image_widget_toolbar = IpywidgetImageWidgetToolbar(self) - - elif self.gridplot.canvas.__class__.__name__ == "QWgpuCanvas": - self._image_widget_toolbar = QToolbarImageWidget(self) - - return self.gridplot.show( - toolbar=toolbar, - sidecar=sidecar, - sidecar_kwargs=sidecar_kwargs, - add_widgets=[self._image_widget_toolbar] - ) - - def close(self): - """Close Widget""" - self.gridplot.close() diff --git a/fastplotlib/widgets/image_widget/__init__.py b/fastplotlib/widgets/image_widget/__init__.py new file mode 100644 index 000000000..70a1aa8ae --- /dev/null +++ b/fastplotlib/widgets/image_widget/__init__.py @@ -0,0 +1,13 @@ +from ...layouts import IMGUI + +if IMGUI: + from ._widget import ImageWidget + +else: + + class ImageWidget: + def __init__(self, *args, **kwargs): + raise ModuleNotFoundError( + "ImageWidget requires `imgui-bundle` to be installed.\n" + "pip install imgui-bundle" + ) diff --git a/fastplotlib/widgets/image_widget/_sliders.py b/fastplotlib/widgets/image_widget/_sliders.py new file mode 100644 index 000000000..c8ad67f39 --- /dev/null +++ b/fastplotlib/widgets/image_widget/_sliders.py @@ -0,0 +1,177 @@ +import os +from time import perf_counter + +from imgui_bundle import imgui, icons_fontawesome_6 as fa + +from ...ui import EdgeWindow + + +class ImageWidgetSliders(EdgeWindow): + def __init__(self, figure, size, location, title, image_widget): + super().__init__(figure=figure, size=size, location=location, title=title) + self._image_widget = image_widget + + # whether or not a dimension is in play mode + self._playing: dict[str, bool] = {"t": False, "z": False} + + # approximate framerate for playing + self._fps: dict[str, int] = {"t": 20, "z": 20} + # framerate converted to frame time + self._frame_time: dict[str, float] = {"t": 1 / 20, "z": 1 / 20} + + # last timepoint that a frame was displayed from a given dimension + self._last_frame_time: dict[str, float] = {"t": 0, "z": 0} + + self._loop = False + + if "RTD_BUILD" in os.environ.keys(): + if os.environ["RTD_BUILD"] == "1": + self._playing["t"] = True + self._loop = True + + def set_index(self, dim: str, index: int): + """set the current_index of the ImageWidget""" + + # make sure the max index for this dim is not exceeded + max_index = self._image_widget._dims_max_bounds[dim] - 1 + if index > max_index: + if self._loop: + # loop back to index zero if looping is enabled + index = 0 + else: + # if looping not enabled, stop playing this dimension + self._playing[dim] = False + return + + # set current_index + self._image_widget.current_index = {dim: min(index, max_index)} + + def update(self): + """called on every render cycle to update the GUI elements""" + + # store the new index of the image widget ("t" and "z") + new_index = dict() + + # flag if the index changed + flag_index_changed = False + + # reset vmin-vmax using full orig data + imgui.push_font(self._fa_icons) + if imgui.button(label=fa.ICON_FA_CIRCLE_HALF_STROKE + fa.ICON_FA_FILM): + self._image_widget.reset_vmin_vmax() + imgui.pop_font() + if imgui.is_item_hovered(0): + imgui.set_tooltip("reset contrast limits using full movie/stack") + + # reset vmin-vmax using currently displayed ImageGraphic data + imgui.push_font(self._fa_icons) + imgui.same_line() + if imgui.button(label=fa.ICON_FA_CIRCLE_HALF_STROKE): + self._image_widget.reset_vmin_vmax_frame() + imgui.pop_font() + if imgui.is_item_hovered(0): + imgui.set_tooltip("reset contrast limits using current frame") + + # time now + now = perf_counter() + + # buttons and slider UI elements for each dim + for dim in self._image_widget.slider_dims: + imgui.push_id(f"{self._id_counter}_{dim}") + imgui.push_font(self._fa_icons) + + if self._playing[dim]: + # show pause button if playing + if imgui.button(label=fa.ICON_FA_PAUSE): + # if pause button clicked, then set playing to false + self._playing[dim] = False + + # if in play mode and enough time has elapsed w.r.t. the desired framerate, increment the index + if now - self._last_frame_time[dim] >= self._frame_time[dim]: + self.set_index(dim, self._image_widget.current_index[dim] + 1) + self._last_frame_time[dim] = now + + else: + # we are not playing, so display play button + if imgui.button(label=fa.ICON_FA_PLAY): + # if play button is clicked, set last frame time to 0 so that index increments on next render + self._last_frame_time[dim] = 0 + # set playing to True since play button was clicked + self._playing[dim] = True + + imgui.same_line() + # step back one frame button + if imgui.button(label=fa.ICON_FA_BACKWARD_STEP) and not self._playing[dim]: + self.set_index(dim, self._image_widget.current_index[dim] - 1) + + imgui.same_line() + # step forward one frame button + if imgui.button(label=fa.ICON_FA_FORWARD_STEP) and not self._playing[dim]: + self.set_index(dim, self._image_widget.current_index[dim] + 1) + + imgui.same_line() + # stop button + if imgui.button(label=fa.ICON_FA_STOP): + self._playing[dim] = False + self._last_frame_time[dim] = 0 + self.set_index(dim, 0) + + imgui.same_line() + # loop checkbox + _, self._loop = imgui.checkbox(label=fa.ICON_FA_ROTATE, v=self._loop) + imgui.pop_font() + if imgui.is_item_hovered(0): + imgui.set_tooltip("loop playback") + + imgui.same_line() + imgui.text("framerate :") + imgui.same_line() + imgui.set_next_item_width(100) + # framerate int entry + fps_changed, value = imgui.input_int( + label="fps", v=self._fps[dim], step_fast=5 + ) + if imgui.is_item_hovered(0): + imgui.set_tooltip( + "framerate is approximate and less reliable as it approaches your monitor refresh rate" + ) + if fps_changed: + if value < 1: + value = 1 + if value > 50: + value = 50 + self._fps[dim] = value + self._frame_time[dim] = 1 / value + + val = self._image_widget.current_index[dim] + vmax = self._image_widget._dims_max_bounds[dim] - 1 + + imgui.text(f"{dim}: ") + imgui.same_line() + # so that slider occupies full width + imgui.set_next_item_width(self.width * 0.85) + + if "Jupyter" in self._image_widget.figure.canvas.__class__.__name__: + # until https://github.com/pygfx/wgpu-py/issues/530 + flags = imgui.SliderFlags_.no_input + else: + # clamps to min, max if user inputs value outside these bounds + flags = imgui.SliderFlags_.always_clamp + + # slider for this dimension + changed, index = imgui.slider_int( + f"{dim}", v=val, v_min=0, v_max=vmax, flags=flags + ) + + new_index[dim] = index + + # if the slider value changed for this dimension + flag_index_changed |= changed + + imgui.pop_id() + + if flag_index_changed: + # if any slider dim changed set the new index of the image widget + self._image_widget.current_index = new_index + + self.size = int(imgui.get_window_height()) diff --git a/fastplotlib/widgets/image_widget/_widget.py b/fastplotlib/widgets/image_widget/_widget.py new file mode 100644 index 000000000..650097951 --- /dev/null +++ b/fastplotlib/widgets/image_widget/_widget.py @@ -0,0 +1,1002 @@ +from copy import deepcopy +from typing import Callable +from warnings import warn + +import numpy as np + +from rendercanvas import BaseRenderCanvas + +from ...layouts import ImguiFigure as Figure +from ...graphics import ImageGraphic +from ...utils import calculate_figure_shape, quick_min_max +from ...tools import HistogramLUTTool +from ._sliders import ImageWidgetSliders + + +# Number of dimensions that represent one image/one frame +# For grayscale shape will be [n_rows, n_cols], i.e. 2 dims +# For RGB(A) shape will be [n_rows, n_cols, c] where c is of size 3 (RGB) or 4 (RGBA) +IMAGE_DIM_COUNTS = {"gray": 2, "rgb": 3} + +# Map boolean (indicating whether we use RGB or grayscale) to the string. Used to index RGB_DIM_MAP +RGB_BOOL_MAP = {False: "gray", True: "rgb"} + +# Dimensions that can be scrolled from a given data array +SCROLLABLE_DIMS_ORDER = { + 0: "", + 1: "t", + 2: "tz", +} + +ALLOWED_SLIDER_DIMS = {0: "t", 1: "z"} + +ALLOWED_WINDOW_DIMS = {"t", "z"} + + +def _is_arraylike(obj) -> bool: + """ + Checks if the object is array-like. + For now just checks if obj has `__getitem__()` + """ + for attr in ["__getitem__", "shape", "ndim"]: + if not hasattr(obj, attr): + return False + + return True + + +class _WindowFunctions: + """Stores window function and window size""" + + def __init__(self, image_widget, func: callable, window_size: int): + self._image_widget = image_widget + self._func = None + self.func = func + + self._window_size = 0 + self.window_size = window_size + + @property + def func(self) -> callable: + """Get or set the function""" + return self._func + + @func.setter + def func(self, func: callable): + self._func = func + + # force update + self._image_widget.current_index = self._image_widget.current_index + + @property + def window_size(self) -> int: + """Get or set window size""" + return self._window_size + + @window_size.setter + def window_size(self, ws: int): + if ws is None: + self._window_size = None + return + + if not isinstance(ws, int): + raise TypeError("window size must be an int") + + if ws < 3: + warn( + f"Invalid 'window size' value for function: {self.func}, " + f"setting 'window size' = None for this function. " + f"Valid values are integers >= 3." + ) + self.window_size = None + return + + if ws % 2 == 0: + ws += 1 + + self._window_size = ws + + self._image_widget.current_index = self._image_widget.current_index + + def __repr__(self): + return f"func: {self.func}, window_size: {self.window_size}" + + +class ImageWidget: + @property + def figure(self) -> Figure: + """ + ``Figure`` used by `ImageWidget`. + """ + return self._figure + + @property + def managed_graphics(self) -> list[ImageGraphic]: + """List of ``ImageWidget`` managed graphics.""" + iw_managed = list() + for subplot in self.figure: + # empty subplots will not have any image widget data + if len(subplot.graphics) > 0: + iw_managed.append(subplot["image_widget_managed"]) + return iw_managed + + @property + def cmap(self) -> list[str]: + cmaps = list() + for g in self.managed_graphics: + cmaps.append(g.cmap) + + return cmaps + + @cmap.setter + def cmap(self, names: str | list[str]): + if isinstance(names, list): + if not all([isinstance(n, str) for n in names]): + raise TypeError( + f"Must pass cmap name as a `str` of list of `str`, you have passed:\n{names}" + ) + + if not len(names) == len(self.managed_graphics): + raise IndexError( + f"If passing a list of cmap names, the length of the list must be the same as the number of " + f"image widget subplots. You have passed: {len(names)} cmap names and have " + f"{len(self.managed_graphics)} image widget subplots" + ) + + for name, g in zip(names, self.managed_graphics): + g.cmap = name + + elif isinstance(names, str): + for g in self.managed_graphics: + g.cmap = names + + @property + def data(self) -> list[np.ndarray]: + """data currently displayed in the widget""" + return self._data + + @property + def ndim(self) -> int: + """Number of dimensions of grayscale data displayed in the widget (it will be 1 more for RGB(A) data)""" + return self._ndim + + @property + def n_scrollable_dims(self) -> list[int]: + """ + list indicating the number of dimenensions that are scrollable for each data array + All other dimensions are frame/image data, i.e. [rows, cols] or [rows, cols, rgb(a)] + """ + return self._n_scrollable_dims + + @property + def slider_dims(self) -> list[str]: + """the dimensions that the sliders index""" + return self._slider_dims + + @property + def current_index(self) -> dict[str, int]: + """ + Get or set the current index + + Returns + ------- + index: Dict[str, int] + | ``dict`` for indexing each dimension, provide a ``dict`` with indices for all dimensions used by sliders + or only a subset of dimensions used by the sliders. + | example: if you have sliders for dims "t" and "z", you can pass either ``{"t": 10}`` to index to position + 10 on dimension "t" or ``{"t": 5, "z": 20}`` to index to position 5 on dimension "t" and position 20 on + dimension "z" simultaneously. + + """ + return self._current_index + + @current_index.setter + def current_index(self, index: dict[str, int]): + if not self._initialized: + return + + if self._reentrant_block: + return + + try: + self._reentrant_block = True # block re-execution until current_index has *fully* completed execution + if not set(index.keys()).issubset(set(self._current_index.keys())): + raise KeyError( + f"All dimension keys for setting `current_index` must be present in the widget sliders. " + f"The dimensions currently used for sliders are: {list(self.current_index.keys())}" + ) + + for k, val in index.items(): + if not isinstance(val, int): + raise TypeError("Indices for all dimensions must be int") + if val < 0: + raise IndexError( + "negative indexing is not supported for ImageWidget" + ) + if val > self._dims_max_bounds[k]: + raise IndexError( + f"index {val} is out of bounds for dimension '{k}' " + f"which has a max bound of: {self._dims_max_bounds[k]}" + ) + + self._current_index.update(index) + + for i, (ig, data) in enumerate(zip(self.managed_graphics, self.data)): + frame = self._process_indices(data, self._current_index) + frame = self._process_frame_apply(frame, i) + ig.data = frame + + # call any event handlers + for handler in self._current_index_changed_handlers: + handler(self.current_index) + except Exception as exc: + # raise original exception + raise exc # current_index setter has raised. The lines above below are probably more relevant! + finally: + # set_value has finished executing, now allow future executions + self._reentrant_block = False + + @property + def n_img_dims(self) -> list[int]: + """ + list indicating the number of dimensions that contain image/single frame data for each data array. + if 2: data are grayscale, i.e. [x, y] dims, if 3: data are [x, y, c] where c is RGB or RGBA, + this is the complement of `n_scrollable_dims` + """ + return self._n_img_dims + + def _get_n_scrollable_dims(self, curr_arr: np.ndarray, rgb: bool) -> list[int]: + """ + For a given ``array`` displayed in the ImageWidget, this function infers how many of the dimensions are + supported by sliders (aka scrollable). Ex: "xy" data has 0 scrollable dims, "txy" has 1, "tzxy" has 2. + + Parameters + ---------- + curr_arr: np.ndarray + np.ndarray or a list of array-like + + rgb: bool + True if we view this as RGB(A) and False if grayscale + + Returns + ------- + int + Number of scrollable dimensions for each ``array`` in the dataset. + """ + + n_img_dims = IMAGE_DIM_COUNTS[RGB_BOOL_MAP[rgb]] + # Make sure each image stack at least ``n_img_dims`` dimensions + if len(curr_arr.shape) < n_img_dims: + raise ValueError( + f"Your array has shape {curr_arr.shape} " + f"but you specified that each image in your array is {n_img_dims}D " + ) + + # If RGB(A), last dim must be 3 or 4 + if n_img_dims == 3: + if not (curr_arr.shape[-1] == 3 or curr_arr.shape[-1] == 4): + raise ValueError( + f"Expected size 3 or 4 for last dimension of RGB(A) array, got: {curr_arr.shape[-1]}." + ) + + n_scrollable_dims = len(curr_arr.shape) - n_img_dims + + if n_scrollable_dims not in SCROLLABLE_DIMS_ORDER.keys(): + raise ValueError(f"Array had shape {curr_arr.shape} which is not supported") + + return n_scrollable_dims + + def __init__( + self, + data: np.ndarray | list[np.ndarray], + window_funcs: dict[str, tuple[Callable, int]] = None, + frame_apply: Callable | dict[int, Callable] = None, + figure_shape: tuple[int, int] = None, + names: list[str] = None, + figure_kwargs: dict = None, + histogram_widget: bool = True, + rgb: bool | list[bool] = None, + cmap: str = "plasma", + graphic_kwargs: dict = None, + ): + """ + This widget facilitates high-level navigation through image stacks, which are arrays containing one or more + images. It includes sliders for key dimensions such as "t" (time) and "z", enabling users to smoothly navigate + through one or multiple image stacks simultaneously. + + Allowed dimensions orders for each image stack: Note that each has a an optional (c) channel which refers to + RGB(A) a channel. So this channel should be either 3 or 4. + + ======= ========== + n_dims dims order + ======= ========== + 2 "xy(c)" + 3 "txy(c)" + 4 "tzxy(c)" + ======= ========== + + Parameters + ---------- + data: Union[np.ndarray, List[np.ndarray] + array-like or a list of array-like + + window_funcs: dict[str, tuple[Callable, int]], i.e. {"t" or "z": (callable, int)} + | Apply function(s) with rolling windows along "t" and/or "z" dimensions of the `data` arrays. + | Pass a dict in the form: {dimension: (func, window_size)}, `func` must take a slice of the data array as + | the first argument and must take `axis` as a kwarg. + | Ex: mean along "t" dimension: {"t": (np.mean, 11)}, if `current_index` of "t" is 50, it will pass frames + | 45 to 55 to `np.mean` with `axis=0`. + | Ex: max along z dim: {"z": (np.max, 3)}, passes current, previous & next frame to `np.max` with `axis=1` + + frame_apply: Union[callable, Dict[int, callable]] + | Apply function(s) to `data` arrays before to generate final 2D image that is displayed. + | Ex: apply a spatial gaussian filter + | Pass a single function or a dict of functions to apply to each array individually + | examples: ``{array_index: to_grayscale}``, ``{0: to_grayscale, 2: threshold_img}`` + | "array_index" is the position of the corresponding array in the data list. + | if `window_funcs` is used, then this function is applied after `window_funcs` + | this function must be a callable that returns a 2D array + | example use case: converting an RGB frame from video to a 2D grayscale frame + + figure_shape: Optional[Tuple[int, int]] + manually provide the shape for the Figure, otherwise the number of rows and columns is estimated + + figure_kwargs: dict, optional + passed to ``Figure`` + + names: Optional[str] + gives names to the subplots + + histogram_widget: bool, default False + make histogram LUT widget for each subplot + + rgb: bool | list[bool], default None + bool or list of bool for each input data array in the ImageWidget, indicating whether the corresponding + data arrays are grayscale or RGB(A). + + graphic_kwargs: Any + passed to each ImageGraphic in the ImageWidget figure subplots + + """ + self._initialized = False + + if figure_kwargs is None: + figure_kwargs = dict() + + if _is_arraylike(data): + data = [data] + + if isinstance(data, list): + # verify that it's a list of np.ndarray + if all([_is_arraylike(d) for d in data]): + # Grid computations + if figure_shape is None: + if "shape" in figure_kwargs: + figure_shape = figure_kwargs["shape"] + else: + figure_shape = calculate_figure_shape(len(data)) + + # Regardless of how figure_shape is computed, below code + # verifies that figure shape is large enough for the number of image arrays passed + if figure_shape[0] * figure_shape[1] < len(data): + original_shape = (figure_shape[0], figure_shape[1]) + figure_shape = calculate_figure_shape(len(data)) + warn( + f"Original `figure_shape` was: {original_shape} " + f" but data length is {len(data)}" + f" Resetting figure shape to: {figure_shape}" + ) + + self._data: list[np.ndarray] = data + + # Establish number of image dimensions and number of scrollable dimensions for each array + if rgb is None: + rgb = [False] * len(self.data) + if isinstance(rgb, bool): + rgb = [rgb] * len(self.data) + if not isinstance(rgb, list): + raise TypeError( + f"`rgb` parameter must be a bool or list of bool, a <{type(rgb)}> was provided" + ) + if not len(rgb) == len(self.data): + raise ValueError( + f"len(rgb) != len(data), {len(rgb)} != {len(self.data)}. These must be equal" + ) + + self._rgb = rgb + + self._n_img_dims = [ + IMAGE_DIM_COUNTS[RGB_BOOL_MAP[self._rgb[i]]] + for i in range(len(self.data)) + ] + + self._n_scrollable_dims = [ + self._get_n_scrollable_dims(self.data[i], self._rgb[i]) + for i in range(len(self.data)) + ] + + # Define ndim of ImageWidget instance as largest number of scrollable dims + 2 (grayscale dimensions) + self._ndim = ( + max( + [ + self.n_scrollable_dims[i] + for i in range(len(self.n_scrollable_dims)) + ] + ) + + IMAGE_DIM_COUNTS[RGB_BOOL_MAP[False]] + ) + + if names is not None: + if not all([isinstance(n, str) for n in names]): + raise TypeError( + "optional argument `names` must be a list of str" + ) + + if len(names) != len(self.data): + raise ValueError( + "number of `names` for subplots must be same as the number of data arrays" + ) + + else: + raise TypeError( + f"If passing a list to `data` all elements must be an " + f"array-like type representing an n-dimensional image. " + f"You have passed the following types:\n" + f"{[type(a) for a in data]}" + ) + else: + raise TypeError( + f"`data` must be an array-like type or a list of array-like." + f"You have passed the following type {type(data)}" + ) + + # Sliders are made for all dimensions except the image dimensions + self._slider_dims = list() + max_scrollable = max( + [self.n_scrollable_dims[i] for i in range(len(self.n_scrollable_dims))] + ) + for dim in range(max_scrollable): + if dim in ALLOWED_SLIDER_DIMS.keys(): + self.slider_dims.append(ALLOWED_SLIDER_DIMS[dim]) + + self._frame_apply: dict[int, callable] = dict() + + if frame_apply is not None: + if callable(frame_apply): + self._frame_apply = frame_apply + + elif isinstance(frame_apply, dict): + self._frame_apply: dict[int, callable] = dict.fromkeys( + list(range(len(self.data))) + ) + + # dict of {array: dims_order_str} + for data_ix in list(frame_apply.keys()): + if not isinstance(data_ix, int): + raise TypeError("`frame_apply` dict keys must be ") + try: + self._frame_apply[data_ix] = frame_apply[data_ix] + except Exception: + raise IndexError( + f"key index {data_ix} out of bounds for `frame_apply`, the bounds are 0 - {len(self.data)}" + ) + else: + raise TypeError( + f"`frame_apply` must be a callable or , " + f"you have passed a: <{type(frame_apply)}>" + ) + + # current_index stores {dimension_index: slice_index} for every dimension + self._current_index: dict[str, int] = {sax: 0 for sax in self.slider_dims} + + self._window_funcs = None + self.window_funcs = window_funcs + + # get max bound for all data arrays for all slider dimensions and ensure compatibility across slider dims + self._dims_max_bounds: dict[str, int] = {k: 0 for k in self.slider_dims} + for i, _dim in enumerate(list(self._dims_max_bounds.keys())): + for array, partition in zip(self.data, self.n_scrollable_dims): + if partition <= i: + continue + else: + if 0 < self._dims_max_bounds[_dim] != array.shape[i]: + raise ValueError(f"Two arrays differ along dimension {_dim}") + else: + self._dims_max_bounds[_dim] = max( + self._dims_max_bounds[_dim], array.shape[i] + ) + + figure_kwargs_default = {"controller_ids": "sync", "names": names} + + # update the default kwargs with any user-specified kwargs + # user specified kwargs will overwrite the defaults + figure_kwargs_default.update(figure_kwargs) + figure_kwargs_default["shape"] = figure_shape + + if graphic_kwargs is None: + graphic_kwargs = dict() + + graphic_kwargs.update({"cmap": cmap}) + + vmin_specified, vmax_specified = None, None + if "vmin" in graphic_kwargs.keys(): + vmin_specified = graphic_kwargs.pop("vmin") + if "vmax" in graphic_kwargs.keys(): + vmax_specified = graphic_kwargs.pop("vmax") + + self._figure: Figure = Figure(**figure_kwargs_default) + + self._histogram_widget = histogram_widget + for data_ix, (d, subplot) in enumerate(zip(self.data, self.figure)): + + frame = self._process_indices(d, slice_indices=self._current_index) + frame = self._process_frame_apply(frame, data_ix) + + if (vmin_specified is None) or (vmax_specified is None): + # if either vmin or vmax are not specified, calculate an estimate by subsampling + vmin_estimate, vmax_estimate = quick_min_max(d) + + # decide vmin, vmax passed to ImageGraphic constructor based on whether it's user specified or now + if vmin_specified is None: + # user hasn't specified vmin, use estimated value + vmin = vmin_estimate + else: + # user has provided a specific value, use that + vmin = vmin_specified + + if vmax_specified is None: + vmax = vmax_estimate + else: + vmax = vmax_specified + else: + # both vmin and vmax are specified + vmin, vmax = vmin_specified, vmax_specified + + ig = ImageGraphic( + frame, + name="image_widget_managed", + vmin=vmin, + vmax=vmax, + **graphic_kwargs, + ) + subplot.add_graphic(ig) + + if self._histogram_widget: + hlut = HistogramLUTTool(data=d, image_graphic=ig, name="histogram_lut") + + subplot.docks["right"].add_graphic(hlut) + subplot.docks["right"].size = 80 + subplot.docks["right"].auto_scale(maintain_aspect=False) + subplot.docks["right"].controller.enabled = False + + # hard code the expected height so that the first render looks right in tests, docs etc. + if len(self.slider_dims) == 0: + ui_size = 57 + if len(self.slider_dims) == 1: + ui_size = 106 + elif len(self.slider_dims) == 2: + ui_size = 155 + + self._image_widget_sliders = ImageWidgetSliders( + figure=self.figure, + size=ui_size, + location="bottom", + title="ImageWidget Controls", + image_widget=self, + ) + + self.figure.add_gui(self._image_widget_sliders) + + self._current_index_changed_handlers = set() + + self._reentrant_block = False + + self._initialized = True + + @property + def frame_apply(self) -> dict | None: + return self._frame_apply + + @frame_apply.setter + def frame_apply(self, frame_apply: dict[int, callable]): + if frame_apply is None: + frame_apply = dict() + + self._frame_apply = frame_apply + # force update image graphic + self.current_index = self.current_index + + @property + def window_funcs(self) -> dict[str, _WindowFunctions]: + """ + Get or set the window functions + + Returns + ------- + Dict[str, _WindowFunctions] + + """ + return self._window_funcs + + @window_funcs.setter + def window_funcs(self, callable_dict: dict[str, int]): + if callable_dict is None: + self._window_funcs = None + # force frame to update + self.current_index = self.current_index + return + + elif isinstance(callable_dict, dict): + if not set(callable_dict.keys()).issubset(ALLOWED_WINDOW_DIMS): + raise ValueError( + f"The only allowed keys to window funcs are {list(ALLOWED_WINDOW_DIMS)} " + f"Your window func passed in these keys: {list(callable_dict.keys())}" + ) + if not all( + [ + isinstance(_callable_dict, tuple) + for _callable_dict in callable_dict.values() + ] + ): + raise TypeError( + "dict argument to `window_funcs` must be in the form of: " + "`{dimension: (func, window_size)}`. " + "See the docstring." + ) + for v in callable_dict.values(): + if not callable(v[0]): + raise TypeError( + "dict argument to `window_funcs` must be in the form of: " + "`{dimension: (func, window_size)}`. " + "See the docstring." + ) + if not isinstance(v[1], int): + raise TypeError( + f"dict argument to `window_funcs` must be in the form of: " + "`{dimension: (func, window_size)}`. " + f"where window_size is integer. you passed in {v[1]} for window_size" + ) + + if not isinstance(self._window_funcs, dict): + self._window_funcs = dict() + + for k in list(callable_dict.keys()): + self._window_funcs[k] = _WindowFunctions(self, *callable_dict[k]) + + else: + raise TypeError( + f"`window_funcs` must be either Nonetype or dict." + f"You have passed a {type(callable_dict)}. See the docstring." + ) + + # force frame to update + self.current_index = self.current_index + + def _process_indices( + self, array: np.ndarray, slice_indices: dict[str, int] + ) -> np.ndarray: + """ + Get the 2D array from the given slice indices. If not returning a 2D slice (such as due to window_funcs) + then `frame_apply` must take this output and return a 2D array + + Parameters + ---------- + array: np.ndarray + array-like to get a 2D slice from + + slice_indices: Dict[str, int] + dict in form of {dimension_index: current_index} + For example if an array has shape [1000, 30, 512, 512] corresponding to [t, z, x, y]: + To get the 100th timepoint and 3rd z-plane pass: + {"t": 100, "z": 3} + + Returns + ------- + np.ndarray + array-like, 2D slice + + """ + + data_ix = None + for i in range(len(self.data)): + if self.data[i] is array: + data_ix = i + break + + numerical_dims = list() + + # Totally number of dimensions for this specific array + curr_ndim = self.data[data_ix].ndim + + # Initialize slices for each dimension of array + indexer = [slice(None)] * curr_ndim + + # Maps from n_scrollable_dims to one of "", "t", "tz", etc. + curr_scrollable_format = SCROLLABLE_DIMS_ORDER[self.n_scrollable_dims[data_ix]] + for dim in list(slice_indices.keys()): + if dim not in curr_scrollable_format: + continue + # get axes order for that specific array + numerical_dim = curr_scrollable_format.index(dim) + + indices_dim = slice_indices[dim] + + # takes care of index selection (window slicing) for this specific axis + indices_dim = self._get_window_indices(data_ix, numerical_dim, indices_dim) + + # set the indices for this dimension + indexer[numerical_dim] = indices_dim + + numerical_dims.append(numerical_dim) + + # apply indexing to the array + # use window function is given for this dimension + if self.window_funcs is not None: + a = array + for i, dim in enumerate(sorted(numerical_dims)): + dim_str = curr_scrollable_format[dim] + dim = dim - i # since we loose a dimension every iteration + _indexer = [slice(None)] * (curr_ndim - i) + _indexer[dim] = indexer[dim + i] + + # if the indexer is an int, this dim has no window func + if isinstance(_indexer[dim], int): + a = a[tuple(_indexer)] + else: + # if the indices are from `self._get_window_indices` + func = self.window_funcs[dim_str].func + window = a[tuple(_indexer)] + a = func(window, axis=dim) + return a + else: + return array[tuple(indexer)] + + def _get_window_indices(self, data_ix, dim, indices_dim): + if self.window_funcs is None: + return indices_dim + + else: + ix = indices_dim + + dim_str = SCROLLABLE_DIMS_ORDER[self.n_scrollable_dims[data_ix]][dim] + + # if no window stuff specified for this dim + if dim_str not in self.window_funcs.keys(): + return indices_dim + + # if window stuff is set to None for this dim + # example: {"t": None} + if self.window_funcs[dim_str] is None: + return indices_dim + + window_size = self.window_funcs[dim_str].window_size + + if (window_size == 0) or (window_size is None): + return indices_dim + + half_window = int((window_size - 1) / 2) # half-window size + # get the max bound for that dimension + max_bound = self._dims_max_bounds[dim_str] + indices_dim = range( + max(0, ix - half_window), min(max_bound, ix + half_window) + ) + return indices_dim + + def _process_frame_apply(self, array, data_ix) -> np.ndarray: + if callable(self._frame_apply): + return self._frame_apply(array) + + if data_ix not in self._frame_apply.keys(): + return array + + elif self._frame_apply[data_ix] is not None: + return self._frame_apply[data_ix](array) + + return array + + def add_event_handler(self, handler: callable, event: str = "current_index"): + """ + Register an event handler. + + Currently the only event that ImageWidget supports is "current_index". This event is + emitted whenever the index of the ImageWidget changes. + + Parameters + ---------- + handler: callable + callback function, must take a dict as the only argument. This dict will be the `current_index` + + event: str, "current_index" + the only supported event is "current_index" + + Example + ------- + + .. code-block:: py + + def my_handler(index): + print(index) + # example prints: {"t": 100} if data has only time dimension + # "z" index will be another key if present in the data, ex: {"t": 100, "z": 5} + + # create an image widget + iw = ImageWidget(...) + + # add event handler + iw.add_event_handler(my_handler) + + """ + if event != "current_index": + raise ValueError( + "`current_index` is the only event supported by `ImageWidget`" + ) + + self._current_index_changed_handlers.add(handler) + + def remove_event_handler(self, handler: callable): + """Remove a registered event handler""" + self._current_index_changed_handlers.remove(handler) + + def clear_event_handlers(self): + """Clear all registered event handlers""" + self._current_index_changed_handlers.clear() + + def reset_vmin_vmax(self): + """ + Reset the vmin and vmax w.r.t. the full data + """ + for data, subplot in zip(self.data, self.figure): + if "histogram_lut" not in subplot.docks["right"]: + continue + hlut = subplot.docks["right"]["histogram_lut"] + hlut.set_data(data, reset_vmin_vmax=True) + + def reset_vmin_vmax_frame(self): + """ + Resets the vmin vmax and HistogramLUT widgets w.r.t. the current data shown in the + ImageGraphic instead of the data in the full data array. For example, if a post-processing + function is used, the range of values in the ImageGraphic can be very different from the + range of values in the full data array. + + TODO: We could think of applying the frame_apply funcs to a subsample of the entire array to get a better estimate of vmin vmax? + """ + + for subplot in self.figure: + if "histogram_lut" not in subplot.docks["right"]: + continue + + hlut = subplot.docks["right"]["histogram_lut"] + # set the data using the current image graphic data + hlut.set_data(subplot["image_widget_managed"].data.value) + + def set_data( + self, + new_data: np.ndarray | list[np.ndarray], + reset_vmin_vmax: bool = True, + reset_indices: bool = True, + ): + """ + Change data of widget. Note: sliders max currently update only for ``txy`` and ``tzxy`` data. + + Parameters + ---------- + new_data: array-like or list of array-like + The new data to display in the widget + + reset_vmin_vmax: bool, default ``True`` + reset the vmin vmax levels based on the new data + + reset_indices: bool, default ``True`` + reset the current index for all dimensions to 0 + + """ + + if reset_indices: + for key in self.current_index: + self.current_index[key] = 0 + + # set slider max according to new data + max_lengths = dict() + for scroll_dim in self.slider_dims: + max_lengths[scroll_dim] = np.inf + + if _is_arraylike(new_data): + new_data = [new_data] + + if len(self._data) != len(new_data): + raise ValueError( + f"number of new data arrays {len(new_data)} must match" + f" current number of data arrays {len(self._data)}" + ) + # check all arrays + for i, (new_array, current_array) in enumerate(zip(new_data, self._data)): + if new_array.ndim != current_array.ndim: + raise ValueError( + f"new data ndim {new_array.ndim} at index {i} " + f"does not equal current data ndim {current_array.ndim}" + ) + + # Computes the number of scrollable dims and also validates new_array + new_scrollable_dims = self._get_n_scrollable_dims(new_array, self._rgb[i]) + + if self.n_scrollable_dims[i] != new_scrollable_dims: + raise ValueError( + f"number of dimensions of data arrays must match number of dimensions of " + f"existing data arrays" + ) + + # if checks pass, update with new data + for i, (new_array, current_array, subplot) in enumerate( + zip(new_data, self._data, self.figure) + ): + # check last two dims (x and y) to see if data shape is changing + old_data_shape = self._data[i].shape[-self.n_img_dims[i] :] + self._data[i] = new_array + + if old_data_shape != new_array.shape[-self.n_img_dims[i] :]: + frame = self._process_indices( + new_array, slice_indices=self._current_index + ) + frame = self._process_frame_apply(frame, i) + + # make new graphic first + new_graphic = ImageGraphic(data=frame, name="image_widget_managed") + + if self._histogram_widget: + # set hlut tool to use new graphic + subplot.docks["right"]["histogram_lut"].image_graphic = new_graphic + + # delete old graphic after setting hlut tool to new graphic + # this ensures gc + subplot.delete_graphic(graphic=subplot["image_widget_managed"]) + subplot.insert_graphic(graphic=new_graphic) + + # Returns "", "t", or "tz" + curr_scrollable_format = SCROLLABLE_DIMS_ORDER[self.n_scrollable_dims[i]] + + for scroll_dim in self.slider_dims: + if scroll_dim in curr_scrollable_format: + new_length = new_array.shape[ + curr_scrollable_format.index(scroll_dim) + ] + if max_lengths[scroll_dim] == np.inf: + max_lengths[scroll_dim] = new_length + elif max_lengths[scroll_dim] != new_length: + raise ValueError( + f"New arrays have differing values along dim {scroll_dim}" + ) + + self._dims_max_bounds[scroll_dim] = max_lengths[scroll_dim] + + # set histogram widget + if self._histogram_widget: + subplot.docks["right"]["histogram_lut"].set_data( + new_array, reset_vmin_vmax=reset_vmin_vmax + ) + + # force graphics to update + self.current_index = self.current_index + + def show(self, **kwargs): + """ + Show the widget. + + Parameters + ---------- + + kwargs: Any + passed to `Figure.show()` + + Returns + ------- + BaseRenderCanvas + In Qt or GLFW, the canvas window containing the Figure will be shown. + In jupyter, it will display the plot in the output cell or sidecar. + + """ + + return self.figure.show(**kwargs) + + def close(self): + """Close Widget""" + self.figure.close() diff --git a/pyproject.toml b/pyproject.toml index 4d957aee3..216b4ab46 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,84 @@ +# ===== Project info + +[project] +dynamic = ["version"] +name = "fastplotlib" +description = "Next-gen fast plotting library running on WGPU using the Pygfx rendering engine " +readme = "README.md" +license = { file = "LICENSE" } +authors = [{ name = "Kushal Kolar" }, { name = "Caitlin Lewis" }] +keywords = [ + "visualization", + "science", + "interactive", + "pygfx", + "webgpu", + "wgpu", + "vulkan", + "gpu", +] +requires-python = ">= 3.10" +dependencies = [ + "numpy>=1.23.0", + "pygfx==0.10.0", + "wgpu>=0.20.0", + "cmap>=0.1.3", + # (this comment keeps this list multiline in VSCode) +] + +[project.optional-dependencies] +docs = [ + "sphinx", + "sphinx-gallery", + "pydata-sphinx-theme", + "glfw", + "ipywidgets>=8.0.0,<9", + "sphinx-copybutton", + "sphinx-design", + "pandoc", + "imageio[ffmpeg]", + "matplotlib", + "scikit-learn", +] +notebook = [ + "jupyterlab", + "jupyter-rfb>=0.5.1", + "ipywidgets>=8.0.0,<9", + "sidecar", +] +tests = [ + "pytest", + "nbmake", + "black", + "scipy", + "imageio[ffmpeg]", + "scikit-learn", + "tqdm", +] +imgui = ["imgui-bundle"] +dev = ["fastplotlib[docs,notebook,tests,imgui]"] + +[project.urls] +Homepage = "https://www.fastplotlib.org/" +Documentation = "https://www.fastplotlib.org/" +Repository = "https://github.com/fastplotlib/fastplotlib" + +# ===== Building + [build-system] -requires = ["setuptools", "wheel"] +requires = ["flit_core >=3.2,<4"] +build-backend = "flit_core.buildapi" + +# ===== Tooling + +# [tool.ruff] +# line-length = 88 +# [tool.ruff.lint] +# select = ["F", "E", "W", "N", "B", "RUF", "TC"] +# ignore = [ +# "E501", # Line too long +# "E731", # Do not assign a `lambda` expression, use a `def` +# "B019", # Use of `functools.lru_cache` or `functools.cache` on methods can lead to memory leaks +# "RUF012", # Mutable class attributes should be annotated with `typing.ClassVar`" +# ] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index d0bc814f2..000000000 --- a/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -numpy -jupyterlab -jupyter_rfb -pygfx>=0.1.10 -imageio \ No newline at end of file diff --git a/scripts/generate_add_graphic_methods.py b/scripts/generate_add_graphic_methods.py new file mode 100644 index 000000000..85e0be669 --- /dev/null +++ b/scripts/generate_add_graphic_methods.py @@ -0,0 +1,90 @@ +import inspect +import pathlib + +import black + +root = pathlib.Path(__file__).parent.parent.resolve() +filename = root.joinpath("fastplotlib", "layouts", "_graphic_methods_mixin.py") + +# if there is an existing mixin class, replace it with an empty class +# so that fastplotlib will import +# hacky but it works +with open(filename, "w") as f: + f.write(f"class GraphicMethodsMixin:\n" f" pass") + +from fastplotlib import graphics + + +modules = list() + +for name, obj in inspect.getmembers(graphics): + if inspect.isclass(obj): + modules.append(obj) + + +def generate_add_graphics_methods(): + # clear file and regenerate from scratch + f = open(filename, "w", encoding="utf-8") + + f.write("# This is an auto-generated file and should not be modified directly\n\n") + + f.write("from typing import *\n\n") + f.write("import numpy\n\n") + f.write("from ..graphics import *\n") + f.write("from ..graphics._base import Graphic\n\n") + + f.write("\nclass GraphicMethodsMixin:\n") + + f.write( + " def _create_graphic(self, graphic_class, *args, **kwargs) -> Graphic:\n" + ) + f.write(" if 'center' in kwargs.keys():\n") + f.write(" center = kwargs.pop('center')\n") + f.write(" else:\n") + f.write(" center = False\n\n") + f.write(" if 'name' in kwargs.keys():\n") + f.write(" self._check_graphic_name_exists(kwargs['name'])\n\n") + f.write(" graphic = graphic_class(*args, **kwargs)\n") + f.write(" self.add_graphic(graphic, center=center)\n\n") + f.write(" return graphic\n\n") + + for m in modules: + cls = m + if cls.__name__ == "Graphic": + # skip base class + continue + method_name = cls.type + + class_args = inspect.getfullargspec(cls)[0][1:] + class_args = [arg + ", " for arg in class_args] + s = "" + for a in class_args: + s += a + + f.write( + f" def add_{method_name}{inspect.signature(cls.__init__)} -> {cls.__name__}:\n" + ) + f.write(' """\n') + f.write(f" {cls.__init__.__doc__}\n") + f.write(' """\n') + f.write( + f" return self._create_graphic({cls.__name__}, {s} **kwargs)\n\n" + ) + + f.close() + + +def blacken(): + with open(filename, "r", encoding="utf-8") as f: + text = f.read() + + mode = black.FileMode(line_length=88) + text = black.format_str(text, mode=mode) + + with open(filename, "w", encoding="utf-8") as f: + f.write(text) + + +if __name__ == "__main__": + generate_add_graphics_methods() + blacken() diff --git a/setup.py b/setup.py deleted file mode 100644 index f7195461c..000000000 --- a/setup.py +++ /dev/null @@ -1,90 +0,0 @@ -from setuptools import setup, find_packages -from pathlib import Path - - -install_requires = [ - "numpy>=1.23.0", - "pygfx>=0.1.14", -] - - -extras_require = { - "docs": [ - "sphinx", - "furo", - "glfw", - "jupyter-rfb>=0.4.1", # required so ImageWidget docs show up - "ipywidgets>=8.0.0,<9", - "sphinx-copybutton", - "sphinx-design", - "nbsphinx", - "pandoc", - "jupyterlab", - "sidecar" - ], - - "notebook": - [ - "jupyterlab", - "jupyter-rfb>=0.4.1", - "ipywidgets>=8.0.0,<9", - "sidecar" - ], - - "tests": - [ - "pytest", - "nbmake", - "scipy", - "imageio", - "jupyterlab", - "jupyter-rfb>=0.4.1", - "ipywidgets>=8.0.0,<9", - "scikit-learn", - "tqdm", - "sidecar" - ], - - "tests-desktop": - [ - "pytest", - "scipy", - "imageio", - "scikit-learn", - "tqdm", - ] -} - - -with open(Path(__file__).parent.joinpath("README.md")) as f: - readme = f.read() - -with open(Path(__file__).parent.joinpath("fastplotlib", "VERSION"), "r") as f: - ver = f.read().split("\n")[0] - - -classifiers = [ - "Programming Language :: Python :: 3", - "Topic :: Scientific/Engineering :: Visualization", - "License :: OSI Approved :: Apache Software License", - "Intended Audience :: Science/Research", -] - - -setup( - name='fastplotlib', - version=ver, - long_description=readme, - long_description_content_type='text/markdown', - packages=find_packages(), - url='https://github.com/fastplotlib/fastplotlib', - license='Apache 2.0', - author='Kushal Kolar, Caitlin Lewis', - author_email='', - python_requires='>=3.9', - install_requires=install_requires, - extras_require=extras_require, - include_package_data=True, - description='A fast plotting library built using the pygfx render engine' -) - diff --git a/examples/desktop/gridplot/__init__.py b/tests/__init__.py similarity index 100% rename from examples/desktop/gridplot/__init__.py rename to tests/__init__.py diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 000000000..3f5414a71 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,8 @@ +import pygfx + + +MAX_TEXTURE_SIZE = 1024 + + +def pytest_sessionstart(session): + pygfx.renderers.wgpu.set_wgpu_limits(**{"max-texture-dimension-2d": MAX_TEXTURE_SIZE}) diff --git a/tests/events.py b/tests/events.py new file mode 100644 index 000000000..e9b212adb --- /dev/null +++ b/tests/events.py @@ -0,0 +1,91 @@ +from functools import partial +import pytest +import numpy as np +from numpy import testing as npt +import pygfx + +import fastplotlib as fpl +from fastplotlib.graphics.features import GraphicFeatureEvent + + +def make_positions_data() -> np.ndarray: + xs = np.linspace(0, 10 * np.pi, 10) + ys = np.sin(xs) + return np.column_stack([xs, ys]) + + +def make_line_graphic() -> fpl.LineGraphic: + return fpl.LineGraphic(make_positions_data()) + + +def make_scatter_graphic() -> fpl.ScatterGraphic: + return fpl.ScatterGraphic(make_positions_data()) + + +event_instance: GraphicFeatureEvent = None + + +def event_handler(event): + global event_instance + event_instance = event + + +decorated_event_instance: GraphicFeatureEvent = None + + +@pytest.mark.parametrize("graphic", [make_line_graphic(), make_scatter_graphic()]) +def test_positions_data_event(graphic: fpl.LineGraphic | fpl.ScatterGraphic): + global decorated_event_instance + global event_instance + + value = np.cos(np.linspace(0, 10 * np.pi, 10))[3:8] + + info = {"key": (slice(3, 8, None), 1), "value": value} + + expected = GraphicFeatureEvent(type="data", info=info) + + def validate(graphic, handler, expected_feature_event, event_to_test): + assert expected_feature_event.type == event_to_test.type + assert expected_feature_event.info["key"] == event_to_test.info["key"] + + npt.assert_almost_equal( + expected_feature_event.info["value"], event_to_test.info["value"] + ) + + # should only have one event handler + assert graphic._event_handlers["data"] == {handler} + + # make sure wrappers are correct + wrapper_map = tuple(graphic._event_handler_wrappers["data"])[0] + assert wrapper_map[0] is handler + assert isinstance(wrapper_map[1], partial) + assert wrapper_map[1].func == graphic._handle_event + assert wrapper_map[1].args[0] is handler + + # test remove handler + graphic.remove_event_handler(handler, "data") + assert len(graphic._event_handlers["click"]) == 0 + assert len(graphic._event_handler_wrappers["click"]) == 0 + assert len(graphic.world_object._event_handlers["click"]) == 0 + + # reset data + graphic.data[:, :-1] = make_positions_data() + event_to_test = None + + # test decorated function + @graphic.add_event_handler("data") + def decorated_handler(event): + global decorated_event_instance + decorated_event_instance = event + + # test decorated + graphic.data[3:8, 1] = value + validate(graphic, decorated_handler, expected, decorated_event_instance) + + # test regular + graphic.add_event_handler(event_handler, "data") + graphic.data[3:8, 1] = value + + validate(graphic, event_handler, expected, event_instance) + + event_instance = None diff --git a/tests/test_colors_buffer_manager.py b/tests/test_colors_buffer_manager.py new file mode 100644 index 000000000..7b1aef16a --- /dev/null +++ b/tests/test_colors_buffer_manager.py @@ -0,0 +1,240 @@ +import numpy as np +from numpy import testing as npt +import pytest + +import pygfx + +import fastplotlib as fpl +from fastplotlib.graphics.features import VertexColors, GraphicFeatureEvent +from .utils import ( + generate_slice_indices, + generate_color_inputs, + generate_positions_spiral_data, +) + + +def make_colors_buffer() -> VertexColors: + colors = VertexColors(colors="w", n_colors=10) + return colors + + +EVENT_RETURN_VALUE: GraphicFeatureEvent = None + + +def event_handler(ev): + global EVENT_RETURN_VALUE + EVENT_RETURN_VALUE = ev + + +@pytest.mark.parametrize( + "color_input", + [ + *generate_color_inputs("r"), + *generate_color_inputs("g"), + *generate_color_inputs("b"), + ], +) +def test_create_buffer(color_input): + colors = VertexColors(colors=color_input, n_colors=10) + truth = np.repeat([pygfx.Color(color_input)], 10, axis=0) + npt.assert_almost_equal(colors[:], truth) + + +@pytest.mark.parametrize("test_graphic", [False, "line", "scatter"]) +def test_int(test_graphic): + # setting single points + if test_graphic: + fig = fpl.Figure() + + data = generate_positions_spiral_data("xyz") + if test_graphic == "line": + graphic = fig[0, 0].add_line(data=data) + + elif test_graphic == "scatter": + graphic = fig[0, 0].add_scatter(data=data) + + colors = graphic.colors + global EVENT_RETURN_VALUE + graphic.add_event_handler(event_handler, "colors") + else: + colors = make_colors_buffer() + + # TODO: placeholder until I make a testing figure where we draw frames only on call + colors[3] = "r" + npt.assert_almost_equal(colors[3], [1.0, 0.0, 0.0, 1.0]) + + if test_graphic: + # test event + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target is graphic.world_object + assert EVENT_RETURN_VALUE.info["key"] == 3 + npt.assert_almost_equal( + EVENT_RETURN_VALUE.info["value"], np.array([[1, 0, 0, 1]]) + ) + assert EVENT_RETURN_VALUE.info["user_value"] == "r" + + colors[6] = [0.0, 1.0, 1.0, 1.0] + npt.assert_almost_equal(colors[6], [0.0, 1.0, 1.0, 1.0]) + + colors[7] = (0.0, 1.0, 1.0, 1.0) + npt.assert_almost_equal(colors[6], [0.0, 1.0, 1.0, 1.0]) + + colors[8] = np.array([1, 0, 1, 1]) + npt.assert_almost_equal(colors[8], [1.0, 0.0, 1.0, 1.0]) + + colors[2] = [1, 0, 1, 0.5] + npt.assert_almost_equal(colors[2], [1.0, 0.0, 1.0, 0.5]) + + +@pytest.mark.parametrize("test_graphic", [False, "line", "scatter"]) +@pytest.mark.parametrize( + "slice_method", [generate_slice_indices(i) for i in range(0, 16)] +) +def test_tuple(test_graphic, slice_method): + # setting entire array manually + if test_graphic: + fig = fpl.Figure() + + data = generate_positions_spiral_data("xyz") + if test_graphic == "line": + graphic = fig[0, 0].add_line(data=data) + + elif test_graphic == "scatter": + graphic = fig[0, 0].add_scatter(data=data) + + colors = graphic.colors + global EVENT_RETURN_VALUE + graphic.add_event_handler(event_handler, "colors") + else: + colors = make_colors_buffer() + + s = slice_method["slice"] + indices = slice_method["indices"] + others = slice_method["others"] + + # set all RGBA vals + colors[s, :] = 0.5 + truth = np.repeat([[0.5, 0.5, 0.5, 0.5]], repeats=len(indices), axis=0) + npt.assert_almost_equal(colors[indices], truth) + + if test_graphic: + # test event + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target is graphic.world_object + assert EVENT_RETURN_VALUE.info["key"] == (s, slice(None)) + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], truth) + assert EVENT_RETURN_VALUE.info["user_value"] == 0.5 + + # check others are not modified + others_truth = np.repeat([[1.0, 1.0, 1.0, 1.0]], repeats=len(others), axis=0) + npt.assert_almost_equal(colors[others], others_truth) + + # reset + if test_graphic: + # test setter + graphic.colors = "w" + else: + colors[:] = [1, 1, 1, 1] + truth = np.repeat([[1.0, 1.0, 1.0, 1.0]], 10, axis=0) + npt.assert_almost_equal(colors[:], truth) + + if test_graphic: + # test event + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target is graphic.world_object + assert EVENT_RETURN_VALUE.info["key"] == slice(None) + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], truth) + assert EVENT_RETURN_VALUE.info["user_value"] == "w" + + # set just R values + colors[s, 0] = 0.5 + truth = np.repeat([[0.5, 1.0, 1.0, 1.0]], repeats=len(indices), axis=0) + # check others not modified + npt.assert_almost_equal(colors[indices], truth) + npt.assert_almost_equal(colors[others], others_truth) + + # reset + colors[:] = (1, 1, 1, 1) + npt.assert_almost_equal(colors[:], np.repeat([[1.0, 1.0, 1.0, 1.0]], 10, axis=0)) + + # set green and blue + colors[s, 1:-1] = 0.7 + truth = np.repeat([[1.0, 0.7, 0.7, 1.0]], repeats=len(indices), axis=0) + npt.assert_almost_equal(colors[indices], truth) + npt.assert_almost_equal(colors[others], others_truth) + + # reset + colors[:] = (1, 1, 1, 1) + npt.assert_almost_equal(colors[:], np.repeat([[1.0, 1.0, 1.0, 1.0]], 10, axis=0)) + + # set only alpha + colors[s, -1] = 0.2 + truth = np.repeat([[1.0, 1.0, 1.0, 0.2]], repeats=len(indices), axis=0) + npt.assert_almost_equal(colors[indices], truth) + npt.assert_almost_equal(colors[others], others_truth) + + +@pytest.mark.parametrize("color_input", generate_color_inputs("red")) +# skip testing with int since that results in shape [1, 4] with np.repeat, int tested in independent unit test +@pytest.mark.parametrize( + "slice_method", [generate_slice_indices(i) for i in range(1, 16)] +) +@pytest.mark.parametrize("test_graphic", [False, "line", "scatter"]) +def test_slice(color_input, slice_method: dict, test_graphic: bool): + # slicing only first dim + if test_graphic: + fig = fpl.Figure() + + data = generate_positions_spiral_data("xyz") + if test_graphic == "line": + graphic = fig[0, 0].add_line(data=data) + + elif test_graphic == "scatter": + graphic = fig[0, 0].add_scatter(data=data) + + colors = graphic.colors + + global EVENT_RETURN_VALUE + graphic.add_event_handler(event_handler, "colors") + else: + colors = make_colors_buffer() + + s = slice_method["slice"] + indices = slice_method["indices"] + offset = slice_method["offset"] + size = slice_method["size"] + others = slice_method["others"] + + colors[s] = color_input + truth = np.repeat([pygfx.Color(color_input)], repeats=len(indices), axis=0) + # check that correct indices are modified + npt.assert_almost_equal(colors[s], truth) + npt.assert_almost_equal(colors[indices], truth) + + # check event + if test_graphic: + global EVENT_RETURN_VALUE + + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target is graphic.world_object + if isinstance(s, slice): + assert EVENT_RETURN_VALUE.info["key"] == s + else: + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["key"], s) + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], truth) + if isinstance(color_input, str): + assert EVENT_RETURN_VALUE.info["user_value"] == color_input + else: + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["user_value"], color_input) + + # check that others are not touched + others_truth = np.repeat([[1.0, 1.0, 1.0, 1.0]], repeats=len(others), axis=0) + npt.assert_almost_equal(colors[others], others_truth) + + # reset + colors[:] = (1, 1, 1, 1) + npt.assert_almost_equal(colors[:], np.repeat([[1.0, 1.0, 1.0, 1.0]], 10, axis=0)) diff --git a/tests/test_common_features.py b/tests/test_common_features.py new file mode 100644 index 000000000..5671478a7 --- /dev/null +++ b/tests/test_common_features.py @@ -0,0 +1,282 @@ +import numpy +import numpy as np +from numpy import testing as npt +import pytest + +import fastplotlib as fpl +from fastplotlib.graphics.features import GraphicFeatureEvent, Name, Offset, Rotation, Visible + + +def make_graphic(kind: str, **kwargs): + match kind: + case "image": + return fpl.ImageGraphic(np.random.rand(10, 10), **kwargs) + case "line": + return fpl.LineGraphic(np.random.rand(10), **kwargs) + case "scatter": + return fpl.ScatterGraphic( + np.column_stack([np.random.rand(10), np.random.rand(10)]), **kwargs + ) + case "text": + return fpl.TextGraphic("bah", **kwargs) + + +graphic_kinds = [ + "image", + "line", + "scatter", + "text", +] + + +RETURN_EVENT_VALUE: GraphicFeatureEvent = None +DECORATED_EVENT_VALUE: GraphicFeatureEvent = None + + +def return_event(ev: GraphicFeatureEvent): + global RETURN_EVENT_VALUE + RETURN_EVENT_VALUE = ev + + +@pytest.mark.parametrize("graphic", [make_graphic(k) for k in graphic_kinds]) +def test_name(graphic): + assert graphic.name is None + + graphic.add_event_handler(return_event, "name") + + graphic.name = "new_name" + + assert graphic.name == "new_name" + + global RETURN_EVENT_VALUE + + assert RETURN_EVENT_VALUE.type == "name" + assert RETURN_EVENT_VALUE.graphic is graphic + assert RETURN_EVENT_VALUE.target is graphic.world_object + assert RETURN_EVENT_VALUE.info["value"] == "new_name" + + # check removing event handler + RETURN_EVENT_VALUE = None + graphic.remove_event_handler(return_event, "name") + assert len(graphic._event_handlers["name"]) == 0 + + graphic.name = "new_name2" + + assert RETURN_EVENT_VALUE is None + assert graphic.name == "new_name2" + + # check adding event with decorator + global DECORATED_EVENT_VALUE + DECORATED_EVENT_VALUE = None + + @graphic.add_event_handler("name") + def decorated_handler(ev): + global DECORATED_EVENT_VALUE + DECORATED_EVENT_VALUE = ev + + graphic.name = "test_dec" + assert graphic.name == "test_dec" + + assert DECORATED_EVENT_VALUE.type == "name" + assert DECORATED_EVENT_VALUE.graphic is graphic + assert DECORATED_EVENT_VALUE.target is graphic.world_object + assert DECORATED_EVENT_VALUE.info["value"] == "test_dec" + + +@pytest.mark.parametrize( + "graphic", [make_graphic(k, name="init_name") for k in graphic_kinds] +) +def test_name_init(graphic): + assert graphic.name == "init_name" + + graphic.name = "new_name" + + assert graphic.name == "new_name" + + +@pytest.mark.parametrize("graphic", [make_graphic(k) for k in graphic_kinds]) +def test_offset(graphic): + npt.assert_almost_equal(graphic.offset, (0.0, 0.0, 0.0)) + npt.assert_almost_equal(graphic.world_object.world.position, (0.0, 0.0, 0.0)) + + graphic.add_event_handler(return_event, "offset") + + graphic.offset = (1.0, 2.0, 3.0) + + npt.assert_almost_equal(graphic.offset, (1.0, 2.0, 3.0)) + npt.assert_almost_equal(graphic.world_object.world.position, (1.0, 2.0, 3.0)) + + global RETURN_EVENT_VALUE + + assert RETURN_EVENT_VALUE.type == "offset" + assert RETURN_EVENT_VALUE.graphic is graphic + assert RETURN_EVENT_VALUE.target is graphic.world_object + npt.assert_almost_equal(RETURN_EVENT_VALUE.info["value"], (1.0, 2.0, 3.0)) + + # check removing event handler + RETURN_EVENT_VALUE = None + graphic.remove_event_handler(return_event, "offset") + assert len(graphic._event_handlers["offset"]) == 0 + + graphic.offset = (4, 5, 6) + + assert RETURN_EVENT_VALUE is None + npt.assert_almost_equal(graphic.offset, (4.0, 5.0, 6.0)) + + # check adding event with decorator + global DECORATED_EVENT_VALUE + DECORATED_EVENT_VALUE = None + + @graphic.add_event_handler("offset") + def decorated_handler(ev): + global DECORATED_EVENT_VALUE + DECORATED_EVENT_VALUE = ev + + graphic.offset = (7, 8, 9) + npt.assert_almost_equal(graphic.offset, (7.0, 8.0, 9.0)) + + assert DECORATED_EVENT_VALUE.type == "offset" + assert DECORATED_EVENT_VALUE.graphic is graphic + assert DECORATED_EVENT_VALUE.target is graphic.world_object + npt.assert_almost_equal(DECORATED_EVENT_VALUE.info["value"], (7.0, 8.0, 9.0)) + + +@pytest.mark.parametrize( + "graphic", [make_graphic(k, offset=(3.0, 4.0, 5.0)) for k in graphic_kinds] +) +def test_offset_init(graphic): + npt.assert_almost_equal(graphic.offset, (3.0, 4.0, 5.0)) + npt.assert_almost_equal(graphic.world_object.world.position, (3.0, 4.0, 5.0)) + + graphic.offset = (6.0, 7.0, 8.0) + + npt.assert_almost_equal(graphic.offset, (6.0, 7.0, 8.0)) + npt.assert_almost_equal(graphic.world_object.world.position, (6.0, 7.0, 8.0)) + + +@pytest.mark.parametrize("graphic", [make_graphic(k) for k in graphic_kinds]) +def test_rotation(graphic): + npt.assert_almost_equal(graphic.rotation, (0, 0, 0, 1)) + npt.assert_almost_equal(graphic.world_object.world.rotation, (0, 0, 0, 1)) + + graphic.add_event_handler(return_event, "rotation") + + graphic.rotation = (0.0, 0.0, 0.30001427, 0.95393471) + + npt.assert_almost_equal(graphic.rotation, (0.0, 0.0, 0.30001427, 0.95393471)) + npt.assert_almost_equal( + graphic.world_object.world.rotation, (0.0, 0.0, 0.30001427, 0.95393471) + ) + + global RETURN_EVENT_VALUE + + assert RETURN_EVENT_VALUE.type == "rotation" + assert RETURN_EVENT_VALUE.graphic is graphic + assert RETURN_EVENT_VALUE.target is graphic.world_object + npt.assert_almost_equal( + RETURN_EVENT_VALUE.info["value"], (0.0, 0.0, 0.30001427, 0.95393471) + ) + + # check removing event handler + RETURN_EVENT_VALUE = None + graphic.remove_event_handler(return_event, "rotation") + assert len(graphic._event_handlers["rotation"]) == 0 + + graphic.rotation = (0, 0, 0, 1) + + assert RETURN_EVENT_VALUE is None + npt.assert_almost_equal(graphic.rotation, (0, 0, 0, 1)) + + # check adding event with decorator + global DECORATED_EVENT_VALUE + DECORATED_EVENT_VALUE = None + + @graphic.add_event_handler("rotation") + def decorated_handler(ev): + global DECORATED_EVENT_VALUE + DECORATED_EVENT_VALUE = ev + + graphic.rotation = (0, 0, 0.6, 0.8) + npt.assert_almost_equal(graphic.rotation, (0, 0, 0.6, 0.8)) + + assert DECORATED_EVENT_VALUE.type == "rotation" + assert DECORATED_EVENT_VALUE.graphic is graphic + assert DECORATED_EVENT_VALUE.target is graphic.world_object + npt.assert_almost_equal(DECORATED_EVENT_VALUE.info["value"], (0, 0, 0.6, 0.8)) + + +@pytest.mark.parametrize( + "graphic", + [ + make_graphic(k, rotation=(0.0, 0.0, 0.30001427, 0.95393471)) + for k in graphic_kinds + ], +) +def test_rotation(graphic): + npt.assert_almost_equal(graphic.rotation, (0.0, 0.0, 0.30001427, 0.95393471)) + npt.assert_almost_equal( + graphic.world_object.world.rotation, (0.0, 0.0, 0.30001427, 0.95393471) + ) + + graphic.rotation = (0, 0.0, 0.6, 0.8) + + npt.assert_almost_equal(graphic.rotation, (0, 0.0, 0.6, 0.8)) + npt.assert_almost_equal(graphic.world_object.world.rotation, (0, 0.0, 0.6, 0.8)) + + +@pytest.mark.parametrize("graphic", [make_graphic(k) for k in graphic_kinds]) +def test_visible(graphic): + assert graphic.visible is True + assert graphic.world_object.visible is True + + graphic.add_event_handler(return_event, "rotation") + + graphic.visible = False + assert graphic.visible is False + assert graphic.world_object.visible is False + + global RETURN_EVENT_VALUE + + assert RETURN_EVENT_VALUE.type == "visible" + assert RETURN_EVENT_VALUE.graphic is graphic + assert RETURN_EVENT_VALUE.target is graphic.world_object + assert RETURN_EVENT_VALUE.info["value"] is False + + # check removing event handler + RETURN_EVENT_VALUE = None + graphic.remove_event_handler(return_event, "visible") + assert len(graphic._event_handlers["visible"]) == 0 + + graphic.visible = True + + assert RETURN_EVENT_VALUE is None + assert graphic.visible is True + + # check adding event with decorator + global DECORATED_EVENT_VALUE + DECORATED_EVENT_VALUE = None + + @graphic.add_event_handler("visible") + def decorated_handler(ev): + global DECORATED_EVENT_VALUE + DECORATED_EVENT_VALUE = ev + + graphic.visible = False + assert graphic.visible is False + + assert DECORATED_EVENT_VALUE.type == "visible" + assert DECORATED_EVENT_VALUE.graphic is graphic + assert DECORATED_EVENT_VALUE.target is graphic.world_object + assert DECORATED_EVENT_VALUE.info["value"] is False + + +@pytest.mark.parametrize( + "graphic", [make_graphic(k, visible=False) for k in graphic_kinds] +) +def test_visible(graphic): + assert graphic.visible is False + assert graphic.world_object.visible is False + + graphic.visible = True + assert graphic.visible is True + assert graphic.world_object.visible is True diff --git a/tests/test_figure.py b/tests/test_figure.py new file mode 100644 index 000000000..520091009 --- /dev/null +++ b/tests/test_figure.py @@ -0,0 +1,262 @@ +import numpy as np +import pytest + +import fastplotlib as fpl +import pygfx + + +def test_cameras_controller_properties(): + cameras = [["2d", "3d", "3d"], ["3d", "3d", "3d"]] + + controller_types = [ + ["panzoom", "panzoom", "fly"], + ["orbit", "trackball", "panzoom"], + ] + + fig = fpl.Figure( + shape=(2, 3), + cameras=cameras, + controller_types=controller_types, + canvas="offscreen", + ) + + print(fig.canvas) + + subplot_cameras = [subplot.camera for subplot in fig] + subplot_controllers = [subplot.controller for subplot in fig] + + for c1, c2 in zip(subplot_cameras, fig.cameras.ravel()): + assert c1 is c2 + + for c1, c2 in zip(subplot_controllers, fig.controllers.ravel()): + assert c1 is c2 + + for camera_type, subplot_camera in zip( + np.asarray(cameras).ravel(), fig.cameras.ravel() + ): + if camera_type == "2d": + assert subplot_camera.fov == 0 + else: + assert subplot_camera.fov == 50 + + for controller_type, subplot_controller in zip( + np.asarray(controller_types).ravel(), fig.controllers.ravel() + ): + match controller_type: + case "panzoom": + assert isinstance(subplot_controller, pygfx.PanZoomController) + case "fly": + assert isinstance(subplot_controller, pygfx.FlyController) + case "orbit": + assert isinstance(subplot_controller, pygfx.OrbitController) + case "trackball": + assert isinstance(subplot_controller, pygfx.TrackballController) + + # check changing cameras + fig[0, 0].camera = "3d" + assert fig[0, 0].camera.fov == 50 + fig[1, 0].camera = "2d" + assert fig[1, 0].camera.fov == 0 + + # test changing controller + fig[1, 1].controller = "fly" + assert isinstance(fig[1, 1].controller, pygfx.FlyController) + assert fig[1, 1].controller is fig.controllers[1, 1] + fig[0, 2].controller = "panzoom" + assert isinstance(fig[0, 2].controller, pygfx.PanZoomController) + assert fig[0, 2].controller is fig.controllers[0, 2] + + +def test_controller_ids_int(): + ids = [[0, 1, 1], [0, 2, 3], [4, 1, 2]] + + fig = fpl.Figure(shape=(3, 3), controller_ids=ids, canvas="offscreen") + + assert fig[0, 0].controller is fig[1, 0].controller + assert fig[0, 1].controller is fig[0, 2].controller is fig[2, 1].controller + assert fig[1, 1].controller is fig[2, 2].controller + + +def test_controller_ids_int_change_controllers(): + ids = [[0, 1, 1], [0, 2, 3], [4, 1, 2]] + + cameras = [["2d", "3d", "3d"], ["2d", "3d", "2d"], ["3d", "3d", "3d"]] + + fig = fpl.Figure( + shape=(3, 3), cameras=cameras, controller_ids=ids, canvas="offscreen" + ) + + assert isinstance(fig[0, 1].controller, pygfx.FlyController) + + # changing controller when id matches should change the others too + fig[0, 1].controller = "panzoom" + assert isinstance(fig[0, 1].controller, pygfx.PanZoomController) + assert fig[0, 1].controller is fig[0, 2].controller is fig[2, 1].controller + assert set(fig[0, 1].controller.cameras) == { + fig[0, 1].camera, + fig[0, 2].camera, + fig[2, 1].camera, + } + + # change to orbit + fig[0, 1].controller = "orbit" + assert isinstance(fig[0, 1].controller, pygfx.OrbitController) + assert fig[0, 1].controller is fig[0, 2].controller is fig[2, 1].controller + assert set(fig[0, 1].controller.cameras) == { + fig[0, 1].camera, + fig[0, 2].camera, + fig[2, 1].camera, + } + + +def test_controller_ids_str(): + names = [["a", "b", "c"], ["d", "e", "f"]] + + controller_ids = [["a", "f"], ["b", "d", "e"]] + + fig = fpl.Figure( + shape=(2, 3), controller_ids=controller_ids, names=names, canvas="offscreen" + ) + + assert ( + fig[0, 0].controller + is fig[1, 2].controller + is fig["a"].controller + is fig["f"].controller + ) + assert ( + fig[0, 1].controller + is fig[1, 0].controller + is fig[1, 1].controller + is fig["b"].controller + is fig["d"].controller + is fig["e"].controller + ) + + # make sure subplot c is unique + exclude_c = [fig[n].controller for n in ["a", "b", "d", "e", "f"]] + assert fig["c"] not in exclude_c + + +def test_set_controllers_from_existing_controllers(): + fig = fpl.Figure(shape=(3, 3), canvas="offscreen") + fig2 = fpl.Figure(shape=fig.shape, controllers=fig.controllers, canvas="offscreen") + + assert fig.controllers[:-1].size == 6 + with pytest.raises(ValueError): + fig3 = fpl.Figure( + shape=fig.shape, controllers=fig.controllers[:-1], canvas="offscreen" + ) + + for fig1_subplot, fig2_subplot in zip(fig, fig2): + assert fig1_subplot.controller is fig2_subplot.controller + + cameras = [[pygfx.PerspectiveCamera(), "3d"], ["3d", "2d"]] + + controllers = [ + [pygfx.FlyController(cameras[0][0]), pygfx.TrackballController()], + [pygfx.OrbitController(), pygfx.PanZoomController()], + ] + + fig = fpl.Figure( + shape=(2, 2), cameras=cameras, controllers=controllers, canvas="offscreen" + ) + + assert fig[0, 0].controller is controllers[0][0] + assert fig[0, 1].controller is controllers[0][1] + assert fig[1, 0].controller is controllers[1][0] + assert fig[1, 1].controller is controllers[1][1] + + assert fig[0, 0].camera is cameras[0][0] + + assert fig[0, 1].camera.fov == 50 + + +def test_subplot_names(): + # names must be unique + with pytest.raises(ValueError): + fpl.Figure( + shape=(2, 3), + names=["1", "2", "3", "4", "4", "5"] + ) + + with pytest.raises(ValueError): + fpl.Figure( + shape=(2, 3), + names=["1", "2", None, "4", "4", "5"] + ) + + with pytest.raises(ValueError): + fpl.Figure( + shape=(2, 3), + names=[None, "2", None, "4", "4", "5"] + ) + + # len(names) <= n_subplots + fig = fpl.Figure( + shape=(2, 3), + names=["1", "2", "3", "4", "5", "6"] + ) + + assert fig[0, 0].name == "1" + assert fig[0, 1].name == "2" + assert fig[0, 2].name == "3" + assert fig[1, 0].name == "4" + assert fig[1, 1].name == "5" + assert fig[1, 2].name == "6" + + fig = fpl.Figure( + shape=(2, 3), + names=["1", "2", "3", None, "5", "6"] + ) + + assert fig[0, 0].name == "1" + assert fig[0, 1].name == "2" + assert fig[0, 2].name == "3" + assert fig[1, 0].name is None + assert fig[1, 1].name == "5" + assert fig[1, 2].name == "6" + + fig = fpl.Figure( + shape=(2, 3), + names=["1", "2", "3", None, "5", None] + ) + + assert fig[0, 0].name == "1" + assert fig[0, 1].name == "2" + assert fig[0, 2].name == "3" + assert fig[1, 0].name is None + assert fig[1, 1].name == "5" + assert fig[1, 2].name is None + + # if fewer subplot names are given than n_sublots, pad with Nones + fig = fpl.Figure( + shape=(2, 3), + names=["1", "2", "3", "4"] + ) + + assert fig[0, 0].name == "1" + assert fig[0, 1].name == "2" + assert fig[0, 2].name == "3" + assert fig[1, 0].name == "4" + assert fig[1, 1].name is None + assert fig[1, 2].name is None + + # raise if len(names) > n_subplots + with pytest.raises(ValueError): + fpl.Figure( + shape=(2, 3), + names=["1", "2", "3", "4", "5", "6", "7"] + ) + + with pytest.raises(ValueError): + fpl.Figure( + shape=(2, 3), + names=["1", "2", "3", "4", None, "6", "7"] + ) + + with pytest.raises(ValueError): + fpl.Figure( + shape=(2, 3), + names=["1", None, "3", "4", None, "6", "7"] + ) diff --git a/tests/test_image_graphic.py b/tests/test_image_graphic.py new file mode 100644 index 000000000..f2d87860b --- /dev/null +++ b/tests/test_image_graphic.py @@ -0,0 +1,219 @@ +import numpy as np +from numpy import testing as npt +import imageio.v3 as iio + +import pygfx + +import fastplotlib as fpl +from fastplotlib.graphics.features import GraphicFeatureEvent +from fastplotlib.utils import make_colors + +GRAY_IMAGE = iio.imread("imageio:camera.png") +RGB_IMAGE = iio.imread("imageio:astronaut.png") + + +COFFEE_IMAGE = iio.imread("imageio:coffee.png") + +# image cmap, vmin, vmax, interpolations +# new screenshot tests too for these when in graphics + + +EVENT_RETURN_VALUE: GraphicFeatureEvent = None + + +def event_handler(ev): + global EVENT_RETURN_VALUE + EVENT_RETURN_VALUE = ev + + +def check_event(graphic, feature, value): + global EVENT_RETURN_VALUE + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.type == feature + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target == graphic.world_object + if isinstance(EVENT_RETURN_VALUE.info["value"], float): + # floating point error + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], value) + else: + assert EVENT_RETURN_VALUE.info["value"] == value + + +def check_set_slice( + data: np.ndarray, + image_graphic: fpl.ImageGraphic, + row_slice: slice, + col_slice: slice, +): + image_graphic.data[row_slice, col_slice] = 1 + data_values = image_graphic.data.value + npt.assert_almost_equal(data_values[row_slice, col_slice], 1) + + # make sure other vals unchanged + npt.assert_almost_equal(data_values[: row_slice.start], data[: row_slice.start]) + npt.assert_almost_equal(data_values[row_slice.stop :], data[row_slice.stop :]) + npt.assert_almost_equal( + data_values[:, : col_slice.start], data[:, : col_slice.start] + ) + npt.assert_almost_equal(data_values[:, col_slice.stop :], data[:, col_slice.stop :]) + + global EVENT_RETURN_VALUE + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.type == "data" + assert EVENT_RETURN_VALUE.graphic == image_graphic + assert EVENT_RETURN_VALUE.target == image_graphic.world_object + assert EVENT_RETURN_VALUE.info["key"] == (row_slice, col_slice) + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], 1) + + +def test_gray(): + fig = fpl.Figure() + ig = fig[0, 0].add_image(GRAY_IMAGE) + assert isinstance(ig, fpl.ImageGraphic) + + ig.add_event_handler( + event_handler, + "data", + "cmap", + "vmin", + "vmax", + "interpolation", + "cmap_interpolation", + ) + + # make sure entire data is the same + npt.assert_almost_equal(ig.data.value, GRAY_IMAGE) + + # since this entire image is under the wgpu max texture limit, + # the entire image should be in the single Texture buffer + npt.assert_almost_equal(ig.data.buffer[0, 0].data, GRAY_IMAGE) + + assert isinstance(ig._material, pygfx.ImageBasicMaterial) + assert isinstance(ig._material.map, pygfx.TextureMap) + assert isinstance(ig._material.map.texture, pygfx.Texture) + + ig.cmap = "viridis" + assert ig.cmap == "viridis" + check_event(graphic=ig, feature="cmap", value="viridis") + + new_colors = make_colors(256, "viridis") + for child in ig.world_object.children: + npt.assert_almost_equal(child.material.map.texture.data, new_colors) + + ig.cmap = "jet" + assert ig.cmap == "jet" + + new_colors = make_colors(256, "jet") + for child in ig.world_object.children: + npt.assert_almost_equal(child.material.map.texture.data, new_colors) + + assert ig.interpolation == "nearest" + for child in ig.world_object.children: + assert child.material.interpolation == "nearest" + + ig.interpolation = "linear" + assert ig.interpolation == "linear" + for child in ig.world_object.children: + assert child.material.interpolation == "linear" + check_event(graphic=ig, feature="interpolation", value="linear") + + assert ig.cmap_interpolation == "linear" + for child in ig.world_object.children: + assert child.material.map.min_filter == "linear" + assert child.material.map.mag_filter == "linear" + + ig.cmap_interpolation = "nearest" + assert ig.cmap_interpolation == "nearest" + for child in ig.world_object.children: + assert child.material.map.min_filter == "nearest" + assert child.material.map.mag_filter == "nearest" + + check_event(graphic=ig, feature="cmap_interpolation", value="nearest") + + npt.assert_almost_equal(ig.vmin, GRAY_IMAGE.min()) + npt.assert_almost_equal(ig.vmax, GRAY_IMAGE.max()) + + ig.vmin = 50 + assert ig.vmin == 50 + for child in ig.world_object.children: + assert child.material.clim == (50, ig.vmax) + check_event(graphic=ig, feature="vmin", value=50) + + ig.vmax = 100 + assert ig.vmax == 100 + for child in ig.world_object.children: + assert child.material.clim == (ig.vmin, 100) + check_event(graphic=ig, feature="vmax", value=100) + + # test reset + ig.reset_vmin_vmax() + npt.assert_almost_equal(ig.vmin, GRAY_IMAGE.min()) + npt.assert_almost_equal(ig.vmax, GRAY_IMAGE.max()) + + check_set_slice(GRAY_IMAGE, ig, slice(100, 200), slice(200, 300)) + + # test setting all values + ig.data = 1 + npt.assert_almost_equal(ig.data.value, 1) + + +def test_rgb(): + fig = fpl.Figure() + ig = fig[0, 0].add_image(RGB_IMAGE) + assert isinstance(ig, fpl.ImageGraphic) + + ig.add_event_handler(event_handler, "data") + + npt.assert_almost_equal(ig.data.value, RGB_IMAGE) + + assert ig.interpolation == "nearest" + for child in ig.world_object.children: + assert child.material.interpolation == "nearest" + + ig.interpolation = "linear" + assert ig.interpolation == "linear" + for child in ig.world_object.children: + assert child.material.interpolation == "linear" + + npt.assert_almost_equal(ig.vmin, RGB_IMAGE.min()) + npt.assert_almost_equal(ig.vmax, RGB_IMAGE.max()) + + ig.vmin = 50 + assert ig.vmin == 50 + for child in ig.world_object.children: + assert child.material.clim == (50, ig.vmax) + + ig.vmax = 100 + assert ig.vmax == 100 + for child in ig.world_object.children: + assert child.material.clim == (ig.vmin, 100) + + # test reset + ig.reset_vmin_vmax() + npt.assert_almost_equal(ig.vmin, RGB_IMAGE.min()) + npt.assert_almost_equal(ig.vmax, RGB_IMAGE.max()) + + check_set_slice(RGB_IMAGE, ig, slice(100, 200), slice(200, 300)) + + +def test_rgba(): + rgba = np.zeros(shape=(*COFFEE_IMAGE.shape[:2], 4), dtype=np.float32) + + fig = fpl.Figure() + ig = fig[0, 0].add_image(rgba) + assert isinstance(ig, fpl.ImageGraphic) + + npt.assert_almost_equal(ig.data.value, rgba) + + # fancy indexing + # set the blue values of some pixels with an alpha > 1 + ig.data[COFFEE_IMAGE[:, :, -1] > 200] = np.array([0.0, 0.0, 1.0, 0.6]).astype( + np.float32 + ) + + rgba[COFFEE_IMAGE[:, :, -1] > 200] = np.array([0.0, 0.0, 1.0, 0.6]).astype( + np.float32 + ) + + # check that fancy indexing works + npt.assert_almost_equal(ig.data.value, rgba) diff --git a/tests/test_plot_helpers.py b/tests/test_plot_helpers.py new file mode 100644 index 000000000..b4abe55fc --- /dev/null +++ b/tests/test_plot_helpers.py @@ -0,0 +1,33 @@ +import numpy as np +import fastplotlib as fpl + + +def make_circle(center, radius: float, n_points: int = 75) -> np.ndarray: + theta = np.linspace(0, 2 * np.pi, n_points) + xs = radius * np.sin(theta) + ys = radius * np.cos(theta) + + return np.column_stack([xs, ys]) + center + + +def test_get_nearest_graphics(): + circles = list() + + centers = [[0, 0], [0, 20], [20, 0], [20, 20]] + + for center in centers: + circles.append(make_circle(center, 5, n_points=75)) + + fig = fpl.Figure() + + lines = fig[0, 0].add_line_collection(circles, cmap="jet", thickness=5) + + fig[0, 0].add_scatter(np.array([[0, 12, 0]])) + + # check distances + nearest = fpl.utils.get_nearest_graphics((0, 12), lines) + assert nearest[0] is lines[1] # closest + assert nearest[1] is lines[0] + assert nearest[2] is lines[3] + assert nearest[3] is lines[2] # furthest + assert nearest[-1] is lines[2] diff --git a/tests/test_positions_data_buffer_manager.py b/tests/test_positions_data_buffer_manager.py new file mode 100644 index 000000000..18a7b36e8 --- /dev/null +++ b/tests/test_positions_data_buffer_manager.py @@ -0,0 +1,201 @@ +import numpy as np +from numpy import testing as npt +import pytest + +import fastplotlib as fpl +from fastplotlib.graphics.features import VertexPositions, GraphicFeatureEvent +from .utils import ( + generate_slice_indices, + generate_positions_spiral_data, +) + + +EVENT_RETURN_VALUE: GraphicFeatureEvent = None + + +def event_handler(ev): + global EVENT_RETURN_VALUE + EVENT_RETURN_VALUE = ev + + +@pytest.mark.parametrize( + "data", [generate_positions_spiral_data(v) for v in ["y", "xy", "xyz"]] +) +def test_create_buffer(data): + points_data = VertexPositions(data) + + if data.ndim == 1: + # only y-vals specified + npt.assert_almost_equal(points_data[:, 1], generate_positions_spiral_data("y")) + # x-vals are auto generated just using arange + npt.assert_almost_equal(points_data[:, 0], np.arange(data.size)) + + elif data.shape[1] == 2: + # test 2D + npt.assert_almost_equal( + points_data[:, :-1], generate_positions_spiral_data("xy") + ) + npt.assert_almost_equal(points_data[:, -1], 0.0) + + elif data.shape[1] == 3: + # test 3D spiral + npt.assert_almost_equal(points_data[:], generate_positions_spiral_data("xyz")) + + +@pytest.mark.parametrize("test_graphic", [False, "line", "scatter"]) +def test_int(test_graphic): + # test setting single points + + data = generate_positions_spiral_data("xyz") + if test_graphic: + fig = fpl.Figure() + + if test_graphic == "line": + graphic = fig[0, 0].add_line(data=data) + + elif test_graphic == "scatter": + graphic = fig[0, 0].add_scatter(data=data) + + points = graphic.data + global EVENT_RETURN_VALUE + graphic.add_event_handler(event_handler, "data") + else: + points = VertexPositions(data) + + # set all x, y, z points, create a kink in the spiral + points[2] = 1.0 + npt.assert_almost_equal(points[2], 1.0) + # make sure other points are not affected + indices = list(range(10)) + indices.pop(2) + npt.assert_almost_equal(points[indices], data[indices]) + + # check event + if test_graphic: + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target is graphic.world_object + assert EVENT_RETURN_VALUE.info["key"] == 2 + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], 1.0) + + # reset + if test_graphic: + graphic.data = data + else: + points[:] = data + npt.assert_almost_equal(points[:], data) + + # check event + if test_graphic: + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target is graphic.world_object + assert EVENT_RETURN_VALUE.info["key"] == slice(None) + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], data) + + # just set y value + points[3, 1] = 1.0 + npt.assert_almost_equal(points[3, 1], 1.0) + # make sure others not modified + npt.assert_almost_equal(points[3, 0], data[3, 0]) + npt.assert_almost_equal(points[3, 2], data[3, 2]) + indices = list(range(10)) + indices.pop(3) + npt.assert_almost_equal(points[indices], data[indices]) + + +@pytest.mark.parametrize("test_graphic", [False, "line", "scatter"]) +@pytest.mark.parametrize( + "slice_method", [generate_slice_indices(i) for i in range(1, 16)] +) # int tested separately +@pytest.mark.parametrize("test_axis", ["y", "xy", "xyz"]) +def test_slice(test_graphic, slice_method: dict, test_axis: str): + data = generate_positions_spiral_data("xyz") + + if test_graphic: + fig = fpl.Figure() + + if test_graphic == "line": + graphic = fig[0, 0].add_line(data=data) + + elif test_graphic == "scatter": + graphic = fig[0, 0].add_scatter(data=data) + + points = graphic.data + global EVENT_RETURN_VALUE + graphic.add_event_handler(event_handler, "data") + else: + points = VertexPositions(data) + + s = slice_method["slice"] + indices = slice_method["indices"] + offset = slice_method["offset"] + size = slice_method["size"] + others = slice_method["others"] + + match test_axis: + case "y": + points[s, 1] = -data[s, 1] + npt.assert_almost_equal(points[s, 1], -data[s, 1]) + npt.assert_almost_equal(points[indices, 1], -data[indices, 1]) + # make sure other points are not modified + npt.assert_almost_equal( + points[others, 1], data[others, 1] + ) # other points in same dimension + npt.assert_almost_equal( + points[:, 2:], data[:, 2:] + ) # dimensions that are not sliced + + # check event + if test_graphic: + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target is graphic.world_object + if isinstance(s, slice): + assert EVENT_RETURN_VALUE.info["key"] == (s, 1) + else: + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["key"][0], s) + assert EVENT_RETURN_VALUE.info["key"][1] == 1 + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], -data[s, 1]) + + case "xy": + points[s, :-1] = -data[s, :-1] + npt.assert_almost_equal(points[s, :-1], -data[s, :-1]) + npt.assert_almost_equal(points[indices, :-1], -data[s, :-1]) + # make sure other points are not modified + npt.assert_almost_equal( + points[others, :-1], data[others, :-1] + ) # other points in the same dimensions + npt.assert_almost_equal( + points[:, -1], data[:, -1] + ) # dimensions that are not touched + + # check event + if test_graphic: + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target is graphic.world_object + if isinstance(s, slice): + assert EVENT_RETURN_VALUE.info["key"] == (s, slice(None, -1, None)) + else: + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["key"][0], s) + assert EVENT_RETURN_VALUE.info["key"][1] == slice(None, -1, None) + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], -data[s, :-1]) + + case "xyz": + points[s] = -data[s] + npt.assert_almost_equal(points[s], -data[s]) + npt.assert_almost_equal(points[indices], -data[s]) + # make sure other points are not modified + npt.assert_almost_equal(points[others], data[others]) + + # check event + if test_graphic: + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target is graphic.world_object + if isinstance(s, slice): + assert EVENT_RETURN_VALUE.info["key"] == s + else: + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["key"], s) + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], -data[s]) diff --git a/tests/test_positions_graphics.py b/tests/test_positions_graphics.py new file mode 100644 index 000000000..ed791b6fa --- /dev/null +++ b/tests/test_positions_graphics.py @@ -0,0 +1,487 @@ +import numpy as np +from numpy import testing as npt +import pytest + +import pygfx + +import fastplotlib as fpl +from fastplotlib.graphics.features import ( + VertexPositions, + VertexColors, + VertexCmap, + UniformColor, + UniformSize, + PointsSizesFeature, + Thickness, + GraphicFeatureEvent, +) + +from .utils import ( + generate_positions_spiral_data, + generate_color_inputs, + MULTI_COLORS_TRUTH, + generate_slice_indices, +) + + +TRUTH_CMAPS = { + "jet": np.array( + [ + [0.0, 0.0, 0.5, 1.0], + [0.0, 0.0, 0.99910873, 1.0], + [0.0, 0.37843138, 1.0, 1.0], + [0.0, 0.8333333, 1.0, 1.0], + [0.30044276, 1.0, 0.66729915, 1.0], + [0.65464896, 1.0, 0.31309298, 1.0], + [1.0, 0.90123457, 0.0, 1.0], + [1.0, 0.4945534, 0.0, 1.0], + [1.0, 0.08787218, 0.0, 1.0], + [0.5, 0.0, 0.0, 1.0], + ], + dtype=np.float32, + ), + "viridis": np.array( + [ + [0.267004, 0.004874, 0.329415, 1.0], + [0.281412, 0.155834, 0.469201, 1.0], + [0.244972, 0.287675, 0.53726, 1.0], + [0.190631, 0.407061, 0.556089, 1.0], + [0.147607, 0.511733, 0.557049, 1.0], + [0.119483, 0.614817, 0.537692, 1.0], + [0.20803, 0.718701, 0.472873, 1.0], + [0.421908, 0.805774, 0.35191, 1.0], + [0.699415, 0.867117, 0.175971, 1.0], + [0.993248, 0.906157, 0.143936, 1.0], + ], + dtype=np.float32, + ), +} + + +EVENT_RETURN_VALUE: GraphicFeatureEvent = None + + +def event_handler(ev): + global EVENT_RETURN_VALUE + EVENT_RETURN_VALUE = ev + + +def test_sizes_slice(): + pass + + +@pytest.mark.parametrize("graphic_type", ["line", "scatter"]) +@pytest.mark.parametrize("colors", [None, *generate_color_inputs("b")]) +@pytest.mark.parametrize("uniform_color", [True, False]) +@pytest.mark.parametrize("alpha", [1.0, 0.5, 0.0]) +def test_uniform_color(graphic_type, colors, uniform_color, alpha): + fig = fpl.Figure() + + kwargs = dict() + for kwarg in ["colors", "uniform_color", "alpha"]: + if locals()[kwarg] is not None: + # add to dict of arguments that will be passed + kwargs[kwarg] = locals()[kwarg] + + data = generate_positions_spiral_data("xy") + + if graphic_type == "line": + graphic = fig[0, 0].add_line(data=data, **kwargs) + elif graphic_type == "scatter": + graphic = fig[0, 0].add_scatter(data=data, **kwargs) + + if uniform_color: + assert isinstance(graphic._colors, UniformColor) + assert isinstance(graphic.colors, pygfx.Color) + if colors is None: + # default white + assert graphic.colors == pygfx.Color([1, 1, 1, alpha]) + else: + # should be blue + assert graphic.colors == pygfx.Color([0, 0, 1, alpha]) + + # check pygfx material + npt.assert_almost_equal( + graphic.world_object.material.color, np.asarray(graphic.colors) + ) + else: + assert isinstance(graphic._colors, VertexColors) + assert isinstance(graphic.colors, VertexColors) + if colors is None: + # default white + npt.assert_almost_equal( + graphic.colors.value, + np.repeat([[1, 1, 1, alpha]], repeats=len(graphic.data), axis=0), + ) + else: + # blue + npt.assert_almost_equal( + graphic.colors.value, + np.repeat([[0, 0, 1, alpha]], repeats=len(graphic.data), axis=0), + ) + + # check geometry + npt.assert_almost_equal( + graphic.world_object.geometry.colors.data, graphic.colors.value + ) + + +@pytest.mark.parametrize("graphic_type", ["line", "scatter"]) +@pytest.mark.parametrize( + "data", [generate_positions_spiral_data(v) for v in ["y", "xy", "xyz"]] +) +def test_positions_graphics_data( + graphic_type, + data, +): + # tests with different ways of passing positions data, x, xy and xyz + fig = fpl.Figure() + + if graphic_type == "line": + graphic = fig[0, 0].add_line(data=data) + + elif graphic_type == "scatter": + graphic = fig[0, 0].add_scatter(data=data) + + assert isinstance(graphic._data, VertexPositions) + assert isinstance(graphic.data, VertexPositions) + + # n_datapoints must match + assert len(graphic.data.value) == len(data) + + # make sure data is correct + match data.shape[-1]: + case 1: # only y-vals given + npt.assert_almost_equal(graphic.data[:, 1], data) # y vals must match + npt.assert_almost_equal( + graphic.data[:, 0], np.arange(data.size) + ) # VertexData makes x-vals with arange + npt.assert_almost_equal(graphic.data[:, -1], 0) # z-vals must be zeros + case 2: # xy vals given + npt.assert_almost_equal(graphic.data[:, :-1], data) # x and y must match + npt.assert_almost_equal(graphic.data[:, -1], 0) # z-vals must be zero + case 3: # xyz vals given + npt.assert_almost_equal(graphic.data[:], data[:]) # everything must match + + +@pytest.mark.parametrize("graphic_type", ["line", "scatter"]) +@pytest.mark.parametrize("colors", [None, *generate_color_inputs("r")]) +@pytest.mark.parametrize("uniform_color", [None, False]) +@pytest.mark.parametrize("alpha", [None, 0.5, 0.0]) +def test_positions_graphic_vertex_colors( + graphic_type, + colors, + uniform_color, + alpha, +): + # test different ways of passing vertex colors + fig = fpl.Figure() + + kwargs = dict() + for kwarg in ["colors", "uniform_color", "alpha"]: + if locals()[kwarg] is not None: + # add to dict of arguments that will be passed + kwargs[kwarg] = locals()[kwarg] + + data = generate_positions_spiral_data("xy") + + if graphic_type == "line": + graphic = fig[0, 0].add_line(data=data, **kwargs) + elif graphic_type == "scatter": + graphic = fig[0, 0].add_scatter(data=data, **kwargs) + + if alpha is None: # default arg + alpha = 1 + + # color per vertex + # uniform colors is default False, or set to False + assert isinstance(graphic._colors, VertexColors) + assert isinstance(graphic.colors, VertexColors) + assert len(graphic.colors) == len(graphic.data) + + if colors is None: + # default + npt.assert_almost_equal( + graphic.colors.value, + np.repeat([[1, 1, 1, alpha]], repeats=len(graphic.data), axis=0), + ) + else: + if len(colors) != len(graphic.data): + # should be single red, regardless of input variant (i.e. str, array, RGBA tuple, etc. + npt.assert_almost_equal( + graphic.colors.value, + np.repeat([[1, 0, 0, alpha]], repeats=len(graphic.data), axis=0), + ) + else: + # multi colors + # use the truth for multi colors test that is pre-set + npt.assert_almost_equal(graphic.colors.value, MULTI_COLORS_TRUTH) + + +@pytest.mark.parametrize("graphic_type", ["line", "scatter"]) +@pytest.mark.parametrize("colors", [None, *generate_color_inputs("r")]) +@pytest.mark.parametrize("uniform_color", [None, False]) +@pytest.mark.parametrize("cmap", ["jet"]) +@pytest.mark.parametrize( + "cmap_transform", [None, [3, 5, 2, 1, 0, 6, 9, 7, 4, 8], np.arange(9, -1, -1)] +) +@pytest.mark.parametrize("alpha", [None, 0.5, 0.0]) +def test_cmap( + graphic_type, + colors, + uniform_color, + cmap, + cmap_transform, + alpha, +): + # test different ways of passing cmap args + fig = fpl.Figure() + + kwargs = dict() + for kwarg in ["cmap", "cmap_transform", "colors", "uniform_color", "alpha"]: + if locals()[kwarg] is not None: + # add to dict of arguments that will be passed + kwargs[kwarg] = locals()[kwarg] + + data = generate_positions_spiral_data("xy") + + if graphic_type == "line": + graphic = fig[0, 0].add_line(data=data, **kwargs) + elif graphic_type == "scatter": + graphic = fig[0, 0].add_scatter(data=data, **kwargs) + + if alpha is None: + alpha = 1.0 + + truth = TRUTH_CMAPS[cmap].copy() + truth[:, -1] = alpha + + # permute if transform is provided + if cmap_transform is not None: + truth = truth[cmap_transform] + npt.assert_almost_equal(graphic.cmap.transform, cmap_transform) + + assert isinstance(graphic._cmap, VertexCmap) + + assert graphic.cmap.name == cmap + + # make sure buffer is identical + # cmap overrides colors argument + assert graphic.colors.buffer is graphic.cmap.buffer + + npt.assert_almost_equal(graphic.cmap.value, truth) + npt.assert_almost_equal(graphic.colors.value, truth) + + # test changing cmap but not transform + graphic.cmap = "viridis" + truth = TRUTH_CMAPS["viridis"].copy() + truth[:, -1] = alpha + + if cmap_transform is not None: + truth = truth[cmap_transform] + + assert graphic.cmap.name == "viridis" + npt.assert_almost_equal(graphic.cmap.value, truth) + npt.assert_almost_equal(graphic.colors.value, truth) + + # test changing transform + cmap_transform = np.random.rand(10) + + # cmap transform is internally normalized between 0 - 1 + cmap_transform_norm = cmap_transform.copy() + cmap_transform_norm -= cmap_transform.min() + cmap_transform_norm /= cmap_transform_norm.max() + cmap_transform_norm *= 255 + + truth = fpl.utils.get_cmap("viridis", alpha=alpha) + truth = np.vstack([truth[val] for val in cmap_transform_norm.astype(int)]) + + graphic.cmap.transform = cmap_transform + npt.assert_almost_equal(graphic.cmap.transform, cmap_transform) + + npt.assert_almost_equal(graphic.cmap.value, truth) + npt.assert_almost_equal(graphic.colors.value, truth) + + +@pytest.mark.parametrize("graphic_type", ["line", "scatter"]) +@pytest.mark.parametrize("cmap", ["jet"]) +@pytest.mark.parametrize( + "colors", [None, *generate_color_inputs("multi")] +) # cmap arg overrides colors +@pytest.mark.parametrize( + "uniform_color", [True] # none of these will work with a uniform buffer +) +def test_incompatible_cmap_color_args(graphic_type, cmap, colors, uniform_color): + # test incompatible cmap args + fig = fpl.Figure() + + kwargs = dict() + for kwarg in ["cmap", "colors", "uniform_color"]: + if locals()[kwarg] is not None: + # add to dict of arguments that will be passed + kwargs[kwarg] = locals()[kwarg] + + data = generate_positions_spiral_data("xy") + + if graphic_type == "line": + with pytest.raises(TypeError): + graphic = fig[0, 0].add_line(data=data, **kwargs) + elif graphic_type == "scatter": + with pytest.raises(TypeError): + graphic = fig[0, 0].add_scatter(data=data, **kwargs) + + +@pytest.mark.parametrize("graphic_type", ["line", "scatter"]) +@pytest.mark.parametrize("colors", [*generate_color_inputs("multi")]) +@pytest.mark.parametrize( + "uniform_color", [True] # none of these will work with a uniform buffer +) +def test_incompatible_color_args(graphic_type, colors, uniform_color): + # test incompatible color args + fig = fpl.Figure() + + kwargs = dict() + for kwarg in ["colors", "uniform_color"]: + if locals()[kwarg] is not None: + # add to dict of arguments that will be passed + kwargs[kwarg] = locals()[kwarg] + + data = generate_positions_spiral_data("xy") + + if graphic_type == "line": + with pytest.raises(TypeError): + graphic = fig[0, 0].add_line(data=data, **kwargs) + elif graphic_type == "scatter": + with pytest.raises(TypeError): + graphic = fig[0, 0].add_scatter(data=data, **kwargs) + + +@pytest.mark.parametrize("sizes", [None, 5.0, np.linspace(3, 8, 10, dtype=np.float32)]) +@pytest.mark.parametrize("uniform_size", [None, False]) +def test_sizes(sizes, uniform_size): + # test scatter sizes + fig = fpl.Figure() + + kwargs = dict() + for kwarg in ["sizes"]: + if locals()[kwarg] is not None: + # add to dict of arguments that will be passed + kwargs[kwarg] = locals()[kwarg] + + data = generate_positions_spiral_data("xy") + + graphic = fig[0, 0].add_scatter(data=data, **kwargs) + + assert isinstance(graphic.sizes, PointsSizesFeature) + assert isinstance(graphic._sizes, PointsSizesFeature) + assert len(data) == len(graphic.sizes) + + if sizes is None: + sizes = 1 # default sizes + + npt.assert_almost_equal(graphic.sizes.value, sizes) + npt.assert_almost_equal( + graphic.world_object.geometry.sizes.data, graphic.sizes.value + ) + + +@pytest.mark.parametrize("sizes", [None, 5.0]) +@pytest.mark.parametrize("uniform_size", [True]) +def test_uniform_size(sizes, uniform_size): + fig = fpl.Figure() + + kwargs = dict() + for kwarg in ["sizes", "uniform_size"]: + if locals()[kwarg] is not None: + # add to dict of arguments that will be passed + kwargs[kwarg] = locals()[kwarg] + + data = generate_positions_spiral_data("xy") + + graphic = fig[0, 0].add_scatter(data=data, **kwargs) + + assert isinstance(graphic.sizes, (float, int)) + assert isinstance(graphic._sizes, UniformSize) + + if sizes is None: + sizes = 1 # default sizes + + npt.assert_almost_equal(graphic.sizes, sizes) + npt.assert_almost_equal(graphic.world_object.material.size, sizes) + + # test changing size + graphic.sizes = 10.0 + assert isinstance(graphic.sizes, float) + assert isinstance(graphic._sizes, UniformSize) + assert graphic.sizes == 10.0 + + +@pytest.mark.parametrize("thickness", [None, 0.5, 5.0]) +def test_thickness(thickness): + fig = fpl.Figure() + + kwargs = dict() + for kwarg in ["thickness"]: + if locals()[kwarg] is not None: + # add to dict of arguments that will be passed + kwargs[kwarg] = locals()[kwarg] + + data = generate_positions_spiral_data("xy") + + graphic = fig[0, 0].add_line(data=data, **kwargs) + + if thickness is None: + thickness = 2.0 # default thickness + + assert isinstance(graphic._thickness, Thickness) + + assert graphic.thickness == thickness + assert graphic.world_object.material.thickness == thickness + + if thickness == 0.5: + assert isinstance(graphic.world_object.material, pygfx.LineThinMaterial) + + else: + assert isinstance(graphic.world_object.material, pygfx.LineMaterial) + + +@pytest.mark.parametrize("graphic_type", ["line", "scatter"]) +@pytest.mark.parametrize("size_space", ["screen", "world", "model"]) +def test_size_space(graphic_type, size_space): + fig = fpl.Figure() + + kwargs = dict() + for kwarg in ["size_space"]: + if locals()[kwarg] is not None: + # add to dict of arguments that will be passed + kwargs[kwarg] = locals()[kwarg] + + data = generate_positions_spiral_data("xy") + + if size_space is None: + size_space = "screen" # default space + + # size_space is really an alias for pygfx.utils.enums.CoordSpace + if graphic_type == "line": + graphic = fig[0, 0].add_line(data=data, **kwargs) + + # test getter + assert graphic.world_object.material.thickness_space == size_space + assert graphic.size_space == size_space + + # test setter + graphic.size_space = "world" + assert graphic.size_space == "world" + assert graphic.world_object.material.thickness_space == "world" + + elif graphic_type == "scatter": + + # test getter + graphic = fig[0, 0].add_scatter(data=data, **kwargs) + assert graphic.world_object.material.size_space == size_space + assert graphic.size_space == size_space + + # test setter + graphic.size_space = "world" + assert graphic.size_space == "world" + assert graphic.world_object.material.size_space == "world" diff --git a/tests/test_sizes_buffer_manager.py b/tests/test_sizes_buffer_manager.py new file mode 100644 index 000000000..2f55eab27 --- /dev/null +++ b/tests/test_sizes_buffer_manager.py @@ -0,0 +1,70 @@ +import numpy as np +from numpy import testing as npt +import pytest + +from fastplotlib.graphics.features import PointsSizesFeature +from .utils import generate_slice_indices + + +def generate_data(input_type: str) -> np.ndarray | float: + """ + Point sizes varying with a sine wave + + Parameters + ---------- + input_type: str + one of "sine", "cosine", or "float" + """ + if input_type == "float": + return 10.0 + xs = np.linspace(0, 10 * np.pi, 10) + + if input_type == "sine": + return np.abs(np.sin(xs)).astype(np.float32) + + if input_type == "cosine": + return np.abs(np.cos(xs)).astype(np.float32) + + +@pytest.mark.parametrize("data", [generate_data(v) for v in ["float", "sine"]]) +def test_create_buffer(data): + sizes = PointsSizesFeature(data, n_datapoints=10) + + if isinstance(data, float): + npt.assert_almost_equal(sizes[:], generate_data("float")) + + elif isinstance(data, np.ndarray): + npt.assert_almost_equal(sizes[:], generate_data("sine")) + + +@pytest.mark.parametrize( + "slice_method", [generate_slice_indices(i) for i in range(0, 16)] +) +@pytest.mark.parametrize("user_input", ["float", "cosine"]) +def test_slice(slice_method: dict, user_input: str): + data = generate_data("sine") + + s = slice_method["slice"] + indices = slice_method["indices"] + offset = slice_method["offset"] + size = slice_method["size"] + others = slice_method["others"] + + sizes = PointsSizesFeature(data, n_datapoints=10) + + match user_input: + case "float": + sizes[s] = 20.0 + truth = np.full(len(indices), 20.0) + npt.assert_almost_equal(sizes[s], truth) + npt.assert_almost_equal(sizes[indices], truth) + # make sure other sizes not modified + npt.assert_almost_equal(sizes[others], data[others]) + + case "cosine": + cosine = generate_data("cosine") + sizes[s] = cosine[s] + npt.assert_almost_equal(sizes[s], cosine[s]) + npt.assert_almost_equal(sizes[indices], cosine[s]) + # make sure other sizes not modified + npt.assert_almost_equal(sizes[others], data[others]) diff --git a/tests/test_text_graphic.py b/tests/test_text_graphic.py new file mode 100644 index 000000000..ec3d0be54 --- /dev/null +++ b/tests/test_text_graphic.py @@ -0,0 +1,101 @@ +from numpy import testing as npt + +import fastplotlib as fpl +from fastplotlib.graphics.features import ( + GraphicFeatureEvent, + TextData, + FontSize, + TextFaceColor, + TextOutlineColor, + TextOutlineThickness, +) + +import pygfx + + +def test_create_graphic(): + fig = fpl.Figure() + data = "lorem ipsum" + text = fig[0, 0].add_text(data) + + assert isinstance(text, fpl.TextGraphic) + + assert isinstance(text._text, TextData) + assert text.text == data + + assert text.font_size == 14 + assert isinstance(text._font_size, FontSize) + assert text.world_object.font_size == 14 + + assert text.face_color == pygfx.Color("w") + assert isinstance(text._face_color, TextFaceColor) + assert text.world_object.material.color == pygfx.Color("w") + + assert text.outline_color == pygfx.Color("w") + assert isinstance(text._outline_color, TextOutlineColor) + assert text.world_object.material.outline_color == pygfx.Color("w") + + assert text.outline_thickness == 0 + assert isinstance(text._outline_thickness, TextOutlineThickness) + assert text.world_object.material.outline_thickness == 0 + + +EVENT_RETURN_VALUE: GraphicFeatureEvent = None + + +def event_handler(ev): + global EVENT_RETURN_VALUE + EVENT_RETURN_VALUE = ev + + +def check_event(graphic, feature, value): + global EVENT_RETURN_VALUE + assert isinstance(EVENT_RETURN_VALUE, GraphicFeatureEvent) + assert EVENT_RETURN_VALUE.type == feature + assert EVENT_RETURN_VALUE.graphic == graphic + assert EVENT_RETURN_VALUE.target == graphic.world_object + if isinstance(EVENT_RETURN_VALUE.info["value"], float): + # floating point error + npt.assert_almost_equal(EVENT_RETURN_VALUE.info["value"], value) + else: + assert EVENT_RETURN_VALUE.info["value"] == value + + +def test_text_changes_events(): + fig = fpl.Figure() + data = "lorem ipsum" + text = fig[0, 0].add_text(data) + + text.add_event_handler( + event_handler, + "text", + "font_size", + "face_color", + "outline_color", + "outline_thickness", + ) + + text.text = "bah" + assert text.text == "bah" + # TODO: seems like there isn't a way in pygfx to get the current text as a str? + check_event(graphic=text, feature="text", value="bah") + + text.font_size = 10.0 + assert text.font_size == 10.0 + assert text.world_object.font_size == 10 + check_event(text, "font_size", 10) + + text.face_color = "r" + assert text.face_color == pygfx.Color("r") + assert text.world_object.material.color == pygfx.Color("r") + check_event(text, "face_color", pygfx.Color("r")) + + text.outline_color = "b" + assert text.outline_color == pygfx.Color("b") + assert text.world_object.material.outline_color == pygfx.Color("b") + check_event(text, "outline_color", pygfx.Color("b")) + + text.outline_thickness = 0.3 + npt.assert_almost_equal(text.outline_thickness, 0.3) + npt.assert_almost_equal(text.world_object.material.outline_thickness, 0.3) + check_event(text, "outline_thickness", 0.3) diff --git a/tests/test_texture_array.py b/tests/test_texture_array.py new file mode 100644 index 000000000..6220f2fe5 --- /dev/null +++ b/tests/test_texture_array.py @@ -0,0 +1,233 @@ +import numpy as np +from numpy import testing as npt +import pytest + +import pygfx + +import fastplotlib as fpl +from fastplotlib.graphics.features import TextureArray +from fastplotlib.graphics.image import _ImageTile + + +MAX_TEXTURE_SIZE = 1024 + + +def make_data(n_rows: int, n_cols: int) -> np.ndarray: + """ + Makes a 2D array where the amplitude of the sine wave + is increasing along the y-direction (along rows), and + the wavelength is increasing along the x-axis (columns) + """ + xs = np.linspace(0, 1_000, n_cols) + + sine = np.sin(np.sqrt(xs)) + + return np.vstack([sine * i for i in range(n_rows)]).astype(np.float32) + + +def check_texture_array( + data: np.ndarray, + ta: TextureArray, + buffer_size: int, + buffer_shape: tuple[int, int], + row_indices_size: int, + col_indices_size: int, + row_indices_values: np.ndarray, + col_indices_values: np.ndarray, +): + + npt.assert_almost_equal(ta.value, data) + + assert ta.buffer.size == buffer_size + assert ta.buffer.shape == buffer_shape + + assert all([isinstance(texture, pygfx.Texture) for texture in ta.buffer.ravel()]) + + assert ta.row_indices.size == row_indices_size + assert ta.col_indices.size == col_indices_size + npt.assert_array_equal(ta.row_indices, row_indices_values) + npt.assert_array_equal(ta.col_indices, col_indices_values) + + # make sure chunking is correct + for texture, chunk_index, data_slice in ta: + assert ta.buffer[chunk_index] is texture + chunk_row, chunk_col = chunk_index + + data_row_start_index = chunk_row * MAX_TEXTURE_SIZE + data_col_start_index = chunk_col * MAX_TEXTURE_SIZE + + data_row_stop_index = min( + data.shape[0], data_row_start_index + MAX_TEXTURE_SIZE + ) + data_col_stop_index = min( + data.shape[1], data_col_start_index + MAX_TEXTURE_SIZE + ) + + row_slice = slice(data_row_start_index, data_row_stop_index) + col_slice = slice(data_col_start_index, data_col_stop_index) + + assert data_slice == (row_slice, col_slice) + + +def check_set_slice(data, ta, row_slice, col_slice): + ta[row_slice, col_slice] = 1 + npt.assert_almost_equal(ta[row_slice, col_slice], 1) + + # make sure other vals unchanged + npt.assert_almost_equal(ta[: row_slice.start], data[: row_slice.start]) + npt.assert_almost_equal(ta[row_slice.stop :], data[row_slice.stop :]) + npt.assert_almost_equal(ta[:, : col_slice.start], data[:, : col_slice.start]) + npt.assert_almost_equal(ta[:, col_slice.stop :], data[:, col_slice.stop :]) + + +def make_image_graphic(data) -> fpl.ImageGraphic: + fig = fpl.Figure() + return fig[0, 0].add_image(data) + + +def check_image_graphic(texture_array, graphic): + # make sure each ImageTile has the right texture + for (texture, chunk_index, data_slice), img in zip( + texture_array, graphic.world_object.children + ): + assert isinstance(img, _ImageTile) + assert img.geometry.grid is texture + assert img.world.x == data_slice[1].start + assert img.world.y == data_slice[0].start + + +@pytest.mark.parametrize("test_graphic", [False, True]) +def test_small_texture(test_graphic): + # tests TextureArray with dims that requires only 1 texture + data = make_data(500, 500) + + if test_graphic: + graphic = make_image_graphic(data) + ta = graphic.data + else: + ta = TextureArray(data) + + check_texture_array( + data=data, + ta=ta, + buffer_size=1, + buffer_shape=(1, 1), + row_indices_size=1, + col_indices_size=1, + row_indices_values=np.array([0]), + col_indices_values=np.array([0]), + ) + + if test_graphic: + check_image_graphic(ta, graphic) + + check_set_slice(data, ta, slice(50, 200), slice(200, 400)) + + +@pytest.mark.parametrize("test_graphic", [False, True]) +def test_texture_at_limit(test_graphic): + # tests TextureArray with data that is 1024 x 1024 + data = make_data(MAX_TEXTURE_SIZE, MAX_TEXTURE_SIZE) + + if test_graphic: + graphic = make_image_graphic(data) + ta = graphic.data + else: + ta = TextureArray(data) + + check_texture_array( + data, + ta=ta, + buffer_size=1, + buffer_shape=(1, 1), + row_indices_size=1, + col_indices_size=1, + row_indices_values=np.array([0]), + col_indices_values=np.array([0]), + ) + + if test_graphic: + check_image_graphic(ta, graphic) + + check_set_slice(data, ta, slice(500, 800), slice(200, 300)) + + +@pytest.mark.parametrize("test_graphic", [False, True]) +def test_wide(test_graphic): + data = make_data(1_200, 2_200) + + if test_graphic: + graphic = make_image_graphic(data) + ta = graphic.data + else: + ta = TextureArray(data) + + check_texture_array( + data, + ta=ta, + buffer_size=6, + buffer_shape=(2, 3), + row_indices_size=2, + col_indices_size=3, + row_indices_values=np.array([0, MAX_TEXTURE_SIZE]), + col_indices_values=np.array([0, MAX_TEXTURE_SIZE, 2 * MAX_TEXTURE_SIZE]), + ) + + if test_graphic: + check_image_graphic(ta, graphic) + + check_set_slice(data, ta, slice(600, 1_100), slice(100, 2_100)) + + +@pytest.mark.parametrize("test_graphic", [False, True]) +def test_tall(test_graphic): + data = make_data(2_200, 1_200) + + if test_graphic: + graphic = make_image_graphic(data) + ta = graphic.data + else: + ta = TextureArray(data) + + check_texture_array( + data, + ta=ta, + buffer_size=6, + buffer_shape=(3, 2), + row_indices_size=3, + col_indices_size=2, + row_indices_values=np.array([0, MAX_TEXTURE_SIZE, 2 * MAX_TEXTURE_SIZE]), + col_indices_values=np.array([0, MAX_TEXTURE_SIZE]), + ) + + if test_graphic: + check_image_graphic(ta, graphic) + + check_set_slice(data, ta, slice(100, 2_100), slice(600, 1_100)) + + +@pytest.mark.parametrize("test_graphic", [False, True]) +def test_square(test_graphic): + data = make_data(2_200, 2_200) + + if test_graphic: + graphic = make_image_graphic(data) + ta = graphic.data + else: + ta = TextureArray(data) + + check_texture_array( + data, + ta=ta, + buffer_size=9, + buffer_shape=(3, 3), + row_indices_size=3, + col_indices_size=3, + row_indices_values=np.array([0, MAX_TEXTURE_SIZE, 2 * MAX_TEXTURE_SIZE]), + col_indices_values=np.array([0, MAX_TEXTURE_SIZE, 2 * MAX_TEXTURE_SIZE]), + ) + + if test_graphic: + check_image_graphic(ta, graphic) + + check_set_slice(data, ta, slice(100, 2_100), slice(100, 2_100)) diff --git a/tests/utils.py b/tests/utils.py new file mode 100644 index 000000000..bc9a092c8 --- /dev/null +++ b/tests/utils.py @@ -0,0 +1,174 @@ +import numpy as np + +import pygfx + + +def generate_slice_indices(kind: int): + n_elements = 10 + a = np.arange(n_elements) + + match kind: + case 0: + # simplest, just int + s = 2 + indices = [2] + + case 1: + # everything, [:] + s = slice(None, None, None) + indices = list(range(10)) + + case 2: + # positive continuous range, [1:5] + s = slice(1, 5, None) + indices = [1, 2, 3, 4] + + case 3: + # positive stepped range, [2:8:2] + s = slice(2, 8, 2) + indices = [2, 4, 6] + + case 4: + # negative continuous range, [-5:] + s = slice(-5, None, None) + indices = [5, 6, 7, 8, 9] + + case 5: + # negative backwards, [-5::-1] + s = slice(-5, None, -1) + indices = [5, 4, 3, 2, 1, 0] + + case 5: + # negative backwards stepped, [-5::-2] + s = slice(-5, None, -2) + indices = [5, 3, 1] + + case 6: + # negative stepped forward[-5::2] + s = slice(-5, None, 2) + indices = [5, 7, 9] + + case 7: + # both negative, [-8:-2] + s = slice(-8, -2, None) + indices = [2, 3, 4, 5, 6, 7] + + case 8: + # both negative and stepped, [-8:2:2] + s = slice(-8, -2, 2) + indices = [2, 4, 6] + + case 9: + # positive, negative, negative, [8:-9:-2] + s = slice(8, -9, -2) + indices = [8, 6, 4, 2] + + case 10: + # only stepped forward, [::2] + s = slice(None, None, 2) + indices = [0, 2, 4, 6, 8] + + case 11: + # only stepped backward, [::-3] + s = slice(None, None, -3) + indices = [9, 6, 3, 0] + + case 12: + # list indices + s = [2, 5, 9] + indices = [2, 5, 9] + + case 13: + # bool indices + s = a > 5 + indices = [6, 7, 8, 9] + + case 14: + # list indices with negatives + s = [1, 4, -2] + indices = [1, 4, 8] + + case 15: + # array indices + s = np.array([1, 4, -7, 9]) + indices = [1, 4, 3, 9] + + others = [i for i in a if i not in indices] + + offset, size = (min(indices), np.ptp(indices) + 1) + + return { + "slice": s, + "indices": indices, + "others": others, + "offset": offset, + "size": size, + } + + +def generate_positions_spiral_data(inputs: str) -> np.ndarray: + """ + Generates a spiral/spring + + Only 10 points so a very pointy spiral but easier to spot changes :D + """ + xs = np.linspace(0, 10 * np.pi, 10) + ys = np.sin(xs) + zs = np.cos(xs) + + match inputs: + case "y": + data = ys + + case "xy": + data = np.column_stack([xs, ys]) + + case "xyz": + data = np.column_stack([xs, ys, zs]) + + return data.astype(np.float32) + + +def generate_color_inputs( + name: str, +) -> list[str, np.ndarray, list, tuple] | list[str, np.ndarray]: + if name == "multi": + s = [ + "r", + "g", + "b", + "cyan", + "magenta", + "green", + "yellow", + "white", + "purple", + "orange", + ] + array = np.vstack([pygfx.Color(c) for c in s]) + return [s, array] + + color = pygfx.Color(name) + + s = name + a = np.array(color) + l = list(color) + t = tuple(color) + + return [s, a, l, t] + + +MULTI_COLORS_TRUTH = np.array( + [ + [1.0, 0.0, 0.0, 1.0], + [0.0, 1.0, 0.0, 1.0], + [0.0, 0.0, 1.0, 1.0], + [0.0, 1.0, 1.0, 1.0], + [1.0, 0.0, 1.0, 1.0], + [0.0, 0.501960813999176, 0.0, 1.0], + [1.0, 1.0, 0.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [0.501960813999176, 0.0, 0.501960813999176, 1.0], + [1.0, 0.6470588445663452, 0.0, 1.0], + ] +) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy