From 4c88e0589964fe8f7172876f67b2f8f222e0f477 Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Wed, 19 Jul 2023 16:18:54 -0700 Subject: [PATCH 01/61] Initialize repo packaging based on sci py cookie --- .copier-answers.yml | 11 + .extgitignore | 158 ++++++++++++++ .git_archival.txt | 4 + .gitattributes | 1 + .github/CONTRIBUTING.md | 101 +++++++++ .github/dependabot.yml | 7 + .github/matchers/pylint.json | 32 +++ .github/workflows/cd.yml | 63 ++++++ .github/workflows/ci.yml | 71 ++++++ .gitignore | 164 ++++++++++++++ .pre-commit-config.yaml | 78 +++++++ .readthedocs.yml | 18 ++ LICENSE | 19 ++ .../mxw_h5_plugin/Linux/libcompression.so | Bin 35776 -> 0 bytes docs/conf.py | 45 ++++ docs/index.md | 17 ++ noxfile.py | 116 ++++++++++ pyproject.toml | 202 ++++++++++++++++++ setup.py | 40 ---- .../braingeneers}/__init__.py | 19 +- src/braingeneers/_compat/__init__.py | 8 + src/braingeneers/_compat/typing.py | 26 +++ .../braingeneers}/analysis/__init__.py | 0 .../braingeneers}/analysis/analysis.py | 0 .../braingeneers}/analysis/analysis_test.py | 0 .../analysis/visualize_maxwell.py | 0 .../braingeneers}/data/__init__.py | 0 .../braingeneers}/data/datasets.py | 0 .../data/datasets_electrophysiology.py | 0 .../data/datasets_electrophysiology_test.py | 0 .../braingeneers}/data/datasets_fluidics.py | 0 .../braingeneers}/data/datasets_imaging.py | 0 .../braingeneers}/data/datasets_neuron.py | 0 .../Mac_arm64/libcompression.dylib | Bin .../Mac_x86_64/libcompression.dylib | Bin .../mxw_h5_plugin/Windows/compression.dll | Bin .../braingeneers}/data/transforms/__init__.py | 0 .../braingeneers}/iot/__init__.py | 0 {braingeneers => src/braingeneers}/iot/gui.py | 0 .../braingeneers}/iot/messaging.py | 0 .../braingeneers}/iot/messaging_test.py | 0 .../braingeneers}/iot/shadows.py | 0 .../iot/shadows_dev_playground.py | 0 .../braingeneers}/iot/simple.py | 0 .../braingeneers}/ml/__init__.py | 0 .../braingeneers}/ml/ephys_dataloader.py | 0 src/braingeneers/py.typed | 0 .../braingeneers}/utils/__init__.py | 0 .../braingeneers}/utils/common_utils.py | 0 .../braingeneers}/utils/configure.py | 0 .../braingeneers}/utils/configure_test.py | 0 .../braingeneers}/utils/numpy_s3_memmap.py | 0 .../utils/numpy_s3_memmap_test.py | 0 .../utils/s3wrangler/__init__.py | 0 .../utils/s3wrangler/s3wrangler_test.py | 0 .../utils/smart_open_braingeneers/__init__.py | 0 .../smart_open_braingeneers_test.py | 0 tests/test_package.py | 14 ++ 58 files changed, 1170 insertions(+), 44 deletions(-) create mode 100644 .copier-answers.yml create mode 100644 .extgitignore create mode 100644 .git_archival.txt create mode 100644 .gitattributes create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/dependabot.yml create mode 100644 .github/matchers/pylint.json create mode 100644 .github/workflows/cd.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .pre-commit-config.yaml create mode 100644 .readthedocs.yml create mode 100644 LICENSE delete mode 100644 braingeneers/data/mxw_h5_plugin/Linux/libcompression.so create mode 100644 docs/conf.py create mode 100644 docs/index.md create mode 100644 noxfile.py create mode 100644 pyproject.toml delete mode 100644 setup.py rename {braingeneers => src/braingeneers}/__init__.py (85%) create mode 100644 src/braingeneers/_compat/__init__.py create mode 100644 src/braingeneers/_compat/typing.py rename {braingeneers => src/braingeneers}/analysis/__init__.py (100%) rename {braingeneers => src/braingeneers}/analysis/analysis.py (100%) rename {braingeneers => src/braingeneers}/analysis/analysis_test.py (100%) rename {braingeneers => src/braingeneers}/analysis/visualize_maxwell.py (100%) rename {braingeneers => src/braingeneers}/data/__init__.py (100%) rename {braingeneers => src/braingeneers}/data/datasets.py (100%) rename {braingeneers => src/braingeneers}/data/datasets_electrophysiology.py (100%) rename {braingeneers => src/braingeneers}/data/datasets_electrophysiology_test.py (100%) rename {braingeneers => src/braingeneers}/data/datasets_fluidics.py (100%) rename {braingeneers => src/braingeneers}/data/datasets_imaging.py (100%) rename {braingeneers => src/braingeneers}/data/datasets_neuron.py (100%) rename {braingeneers => src/braingeneers}/data/mxw_h5_plugin/Mac_arm64/libcompression.dylib (100%) rename {braingeneers => src/braingeneers}/data/mxw_h5_plugin/Mac_x86_64/libcompression.dylib (100%) rename {braingeneers => src/braingeneers}/data/mxw_h5_plugin/Windows/compression.dll (100%) rename {braingeneers => src/braingeneers}/data/transforms/__init__.py (100%) rename {braingeneers => src/braingeneers}/iot/__init__.py (100%) rename {braingeneers => src/braingeneers}/iot/gui.py (100%) rename {braingeneers => src/braingeneers}/iot/messaging.py (100%) rename {braingeneers => src/braingeneers}/iot/messaging_test.py (100%) rename {braingeneers => src/braingeneers}/iot/shadows.py (100%) rename {braingeneers => src/braingeneers}/iot/shadows_dev_playground.py (100%) rename {braingeneers => src/braingeneers}/iot/simple.py (100%) rename {braingeneers => src/braingeneers}/ml/__init__.py (100%) rename {braingeneers => src/braingeneers}/ml/ephys_dataloader.py (100%) create mode 100644 src/braingeneers/py.typed rename {braingeneers => src/braingeneers}/utils/__init__.py (100%) rename {braingeneers => src/braingeneers}/utils/common_utils.py (100%) rename {braingeneers => src/braingeneers}/utils/configure.py (100%) rename {braingeneers => src/braingeneers}/utils/configure_test.py (100%) rename {braingeneers => src/braingeneers}/utils/numpy_s3_memmap.py (100%) rename {braingeneers => src/braingeneers}/utils/numpy_s3_memmap_test.py (100%) rename {braingeneers => src/braingeneers}/utils/s3wrangler/__init__.py (100%) rename {braingeneers => src/braingeneers}/utils/s3wrangler/s3wrangler_test.py (100%) rename {braingeneers => src/braingeneers}/utils/smart_open_braingeneers/__init__.py (100%) rename {braingeneers => src/braingeneers}/utils/smart_open_braingeneers/smart_open_braingeneers_test.py (100%) create mode 100644 tests/test_package.py diff --git a/.copier-answers.yml b/.copier-answers.yml new file mode 100644 index 0000000..1308d8a --- /dev/null +++ b/.copier-answers.yml @@ -0,0 +1,11 @@ +# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY +_commit: 2023.07.13 +_src_path: gh:scientific-python/cookie +backend: hatch +email: me@example.com +full_name: Braingeneers +license: MIT +org: braingeneers +project_name: braingeneers +project_short_description: braingeneerspy +url: https://github.com/braingeneers/braingeneerspy diff --git a/.extgitignore b/.extgitignore new file mode 100644 index 0000000..25cf9a4 --- /dev/null +++ b/.extgitignore @@ -0,0 +1,158 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# setuptools_scm +src/*/_version.py + + +# ruff +.ruff_cache/ + +# OS specific stuff +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Common editor files +*~ +*.swp diff --git a/.git_archival.txt b/.git_archival.txt new file mode 100644 index 0000000..8fb235d --- /dev/null +++ b/.git_archival.txt @@ -0,0 +1,4 @@ +node: $Format:%H$ +node-date: $Format:%cI$ +describe-name: $Format:%(describe:tags=true,match=*[0-9]*)$ +ref-names: $Format:%D$ diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..00a7b00 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +.git_archival.txt export-subst diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..2560b1a --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,101 @@ +See the [Scientific Python Developer Guide][spc-dev-intro] for a detailed +description of best practices for developing scientific packages. + +[spc-dev-intro]: https://scientific-python-cookie.readthedocs.io/guide/intro + +# Quick development + +The fastest way to start with development is to use nox. If you don't have nox, +you can use `pipx run nox` to run it without installing, or `pipx install nox`. +If you don't have pipx (pip for applications), then you can install with with +`pip install pipx` (the only case were installing an application with regular +pip is reasonable). If you use macOS, then pipx and nox are both in brew, use +`brew install pipx nox`. + +To use, run `nox`. This will lint and test using every installed version of +Python on your system, skipping ones that are not installed. You can also run +specific jobs: + +```console +$ nox -s lint # Lint only +$ nox -s tests # Python tests +$ nox -s docs -- serve # Build and serve the docs +$ nox -s build # Make an SDist and wheel +``` + +Nox handles everything for you, including setting up an temporary virtual +environment for each run. + +# Setting up a development environment manually + +You can set up a development environment by running: + +```bash +python3 -m venv .venv +source ./.venv/bin/activate +pip install -v -e .[dev] +``` + +If you have the +[Python Launcher for Unix](https://github.com/brettcannon/python-launcher), you +can instead do: + +```bash +py -m venv .venv +py -m install -v -e .[dev] +``` + +# Post setup + +You should prepare pre-commit, which will help you by checking that commits pass +required checks: + +```bash +pip install pre-commit # or brew install pre-commit on macOS +pre-commit install # Will install a pre-commit hook into the git repo +``` + +You can also/alternatively run `pre-commit run` (changes only) or +`pre-commit run --all-files` to check even without installing the hook. + +# Testing + +Use pytest to run the unit checks: + +```bash +pytest +``` + +# Coverage + +Use pytest-cov to generate coverage reports: + +```bash +pytest --cov=braingeneers +``` + +# Building docs + +You can build the docs using: + +```bash +nox -s docs +``` + +You can see a preview with: + +```bash +nox -s docs -- serve +``` + +# Pre-commit + +This project uses pre-commit for all style checking. While you can run it with +nox, this is such an important tool that it deserves to be installed on its own. +Install pre-commit and run: + +```bash +pre-commit run -a +``` + +to check all files. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..6fddca0 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/matchers/pylint.json b/.github/matchers/pylint.json new file mode 100644 index 0000000..e3a6bd1 --- /dev/null +++ b/.github/matchers/pylint.json @@ -0,0 +1,32 @@ +{ + "problemMatcher": [ + { + "severity": "warning", + "pattern": [ + { + "regexp": "^([^:]+):(\\d+):(\\d+): ([A-DF-Z]\\d+): \\033\\[[\\d;]+m([^\\033]+).*$", + "file": 1, + "line": 2, + "column": 3, + "code": 4, + "message": 5 + } + ], + "owner": "pylint-warning" + }, + { + "severity": "error", + "pattern": [ + { + "regexp": "^([^:]+):(\\d+):(\\d+): (E\\d+): \\033\\[[\\d;]+m([^\\033]+).*$", + "file": 1, + "line": 2, + "column": 3, + "code": 4, + "message": 5 + } + ], + "owner": "pylint-error" + } + ] +} diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml new file mode 100644 index 0000000..fc949e2 --- /dev/null +++ b/.github/workflows/cd.yml @@ -0,0 +1,63 @@ +name: CD + +on: + workflow_dispatch: + pull_request: + push: + branches: + - master + - main + - develop + release: + types: + - published + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + FORCE_COLOR: 3 + +jobs: + dist: + needs: [pre-commit] + name: Distribution build + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Build sdist and wheel + run: pipx run build + + - uses: actions/upload-artifact@v3 + with: + path: dist + + - name: Check products + run: pipx run twine check dist/* + + publish: + needs: [dist] + name: Publish to PyPI + environment: pypi + permissions: + id-token: write + runs-on: ubuntu-latest + if: github.event_name == 'release' && github.event.action == 'published' + + steps: + - uses: actions/download-artifact@v3 + with: + name: artifact + path: dist + + - uses: pypa/gh-action-pypi-publish@release/v1 + if: github.event_name == 'release' && github.event.action == 'published' + with: + # Remember to tell (test-)pypi about this repo before publishing + # Remove this line to publish to PyPI + repository-url: https://test.pypi.org/legacy/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..33ce067 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,71 @@ +name: CI + +on: + workflow_dispatch: + pull_request: + push: + branches: + - master + - main + - develop + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + FORCE_COLOR: 3 + +jobs: + pre-commit: + name: Format + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: actions/setup-python@v4 + with: + python-version: "3.x" + - uses: pre-commit/action@v3.0.0 + with: + extra_args: --hook-stage manual --all-files + - name: Run PyLint + run: | + echo "::add-matcher::$GITHUB_WORKSPACE/.github/matchers/pylint.json" + pipx run nox -s pylint + + checks: + name: Check Python ${{ matrix.python-version }} on ${{ matrix.runs-on }} + runs-on: ${{ matrix.runs-on }} + needs: [pre-commit] + strategy: + fail-fast: false + matrix: + python-version: ["3.8", "3.11", "3.12"] + runs-on: [ubuntu-latest, macos-latest, windows-latest] + + include: + - python-version: pypy-3.9 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + allow-prereleases: true + + - name: Install package + run: python -m pip install .[test] + + - name: Test package + run: >- + python -m pytest -ra --cov --cov-report=xml --cov-report=term + --durations=20 + + - name: Upload coverage report + uses: codecov/codecov-action@v3.1.4 diff --git a/.gitignore b/.gitignore index 0f4949d..4faf4c0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,167 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +# Version file +**/_version.py + .ipynb_checkpoints .coverage __pycache__ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..44678c9 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,78 @@ +ci: + autoupdate_commit_msg: "chore: update pre-commit hooks" + autofix_commit_msg: "style: pre-commit fixes" + +repos: + - repo: https://github.com/psf/black + rev: "23.7.0" + hooks: + - id: black-jupyter + + - repo: https://github.com/asottile/blacken-docs + rev: "1.15.0" + hooks: + - id: blacken-docs + additional_dependencies: [black==23.7.0] + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: "v4.4.0" + hooks: + - id: check-added-large-files + - id: check-case-conflict + - id: check-merge-conflict + - id: check-symlinks + - id: check-yaml + - id: debug-statements + - id: end-of-file-fixer + - id: mixed-line-ending + - id: name-tests-test + args: ["--pytest-test-first"] + - id: requirements-txt-fixer + - id: trailing-whitespace + + - repo: https://github.com/pre-commit/pygrep-hooks + rev: "v1.10.0" + hooks: + - id: rst-backticks + - id: rst-directive-colons + - id: rst-inline-touching-normal + + - repo: https://github.com/pre-commit/mirrors-prettier + rev: "v3.0.0" + hooks: + - id: prettier + types_or: [yaml, markdown, html, css, scss, javascript, json] + args: [--prose-wrap=always] + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: "v0.0.277" + hooks: + - id: ruff + args: ["--fix", "--show-fixes"] + + - repo: https://github.com/pre-commit/mirrors-mypy + rev: "v1.4.1" + hooks: + - id: mypy + files: src|tests + args: [] + additional_dependencies: + - pytest + + - repo: https://github.com/codespell-project/codespell + rev: "v2.2.5" + hooks: + - id: codespell + + - repo: https://github.com/shellcheck-py/shellcheck-py + rev: "v0.9.0.5" + hooks: + - id: shellcheck + + - repo: local + hooks: + - id: disallow-caps + name: Disallow improper capitalization + language: pygrep + entry: PyBind|Numpy|Cmake|CCache|Github|PyTest + exclude: .pre-commit-config.yaml diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 0000000..7e49657 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,18 @@ +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3.11" +sphinx: + configuration: docs/conf.py + +python: + install: + - method: pip + path: . + extra_requirements: + - docs diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f2ea658 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright 2023 Braingeneers + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/braingeneers/data/mxw_h5_plugin/Linux/libcompression.so b/braingeneers/data/mxw_h5_plugin/Linux/libcompression.so deleted file mode 100644 index af449c29ae569e2a171e3326245a92467fac3fcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35776 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 diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..88da678 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +import importlib.metadata + +project = "braingeneers" +copyright = "2023, Braingeneers" +author = "Braingeneers" +version = release = importlib.metadata.version("braingeneers") + +extensions = [ + "myst_parser", + "sphinx.ext.autodoc", + "sphinx.ext.intersphinx", + "sphinx.ext.mathjax", + "sphinx.ext.napoleon", + "sphinx_autodoc_typehints", + "sphinx_copybutton", +] + +source_suffix = [".rst", ".md"] +exclude_patterns = [ + "_build", + "**.ipynb_checkpoints", + "Thumbs.db", + ".DS_Store", + ".env", + ".venv", +] + +html_theme = "furo" + +myst_enable_extensions = [ + "colon_fence", +] + +intersphinx_mapping = { + "python": ("https://docs.python.org/3", None), +} + +nitpick_ignore = [ + ("py:class", "_io.StringIO"), + ("py:class", "_io.BytesIO"), +] + +always_document_param_types = True diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..5873f0a --- /dev/null +++ b/docs/index.md @@ -0,0 +1,17 @@ +# braingeneers + +```{toctree} +:maxdepth: 2 +:hidden: + +``` + +```{include} ../README.md +:start-after: +``` + +## Indices and tables + +- {ref}`genindex` +- {ref}`modindex` +- {ref}`search` diff --git a/noxfile.py b/noxfile.py new file mode 100644 index 0000000..3532266 --- /dev/null +++ b/noxfile.py @@ -0,0 +1,116 @@ +from __future__ import annotations + +import argparse +import shutil +from pathlib import Path + +import nox + +DIR = Path(__file__).parent.resolve() + +nox.options.sessions = ["lint", "pylint", "tests"] + + +@nox.session +def lint(session: nox.Session) -> None: + """ + Run the linter. + """ + session.install("pre-commit") + session.run("pre-commit", "run", "--all-files", *session.posargs) + + +@nox.session +def pylint(session: nox.Session) -> None: + """ + Run PyLint. + """ + # This needs to be installed into the package environment, and is slower + # than a pre-commit check + session.install(".", "pylint") + session.run("pylint", "src", *session.posargs) + + +@nox.session +def tests(session: nox.Session) -> None: + """ + Run the unit and regular tests. Use --cov to activate coverage. + """ + session.install(".[test]") + session.run("pytest", *session.posargs) + + +@nox.session +def docs(session: nox.Session) -> None: + """ + Build the docs. Pass "--serve" to serve. + """ + + parser = argparse.ArgumentParser() + parser.add_argument("--serve", action="store_true", help="Serve after building") + parser.add_argument( + "-b", dest="builder", default="html", help="Build target (default: html)" + ) + args, posargs = parser.parse_known_args(session.posargs) + + if args.builder != "html" and args.serve: + session.error("Must not specify non-HTML builder with --serve") + + session.install(".[docs]") + session.chdir("docs") + + if args.builder == "linkcheck": + session.run( + "sphinx-build", "-b", "linkcheck", ".", "_build/linkcheck", *posargs + ) + return + + session.run( + "sphinx-build", + "-n", # nitpicky mode + "-T", # full tracebacks + "-W", # Warnings as errors + "--keep-going", # See all errors + "-b", + args.builder, + ".", + f"_build/{args.builder}", + *posargs, + ) + + if args.serve: + session.log("Launching docs at http://localhost:8000/ - use Ctrl-C to quit") + session.run("python", "-m", "http.server", "8000", "-d", "_build/html") + + +@nox.session +def build_api_docs(session: nox.Session) -> None: + """ + Build (regenerate) API docs. + """ + + session.install("sphinx") + session.chdir("docs") + session.run( + "sphinx-apidoc", + "-o", + "api/", + "--module-first", + "--no-toc", + "--force", + "../src/braingeneers", + ) + + +@nox.session +def build(session: nox.Session) -> None: + """ + Build an SDist and wheel. + """ + + build_p = DIR.joinpath("build") + if build_p.exists(): + shutil.rmtree(build_p) + + session.install("build") + session.run("python", "-m", "build") diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8fd9414 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,202 @@ +[build-system] +requires = ["hatchling", "hatch-vcs"] +build-backend = "hatchling.build" + + +[project] +name = "braingeneers" +authors = [ + { name = "Braingeneers", email = "me@example.com" }, +] +description = "Braingeneers Python utilities" +readme = "README.md" +requires-python = ">=3.8" +classifiers = [ + "Development Status :: 1 - Planning", + "Intended Audience :: Science/Research", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Scientific/Engineering", + "Typing :: Typed", +] +dynamic = ["version"] +dependencies = [ + "typing_extensions >=4.6; python_version<'3.11'", + 'deprecated', + 'requests', + 'numpy', + 'tenacity', + # 'sortedcontainers', + 'boto3', +] + +[tool.hatch.build.hooks.vcs] +version-file = "src/braingeneers/_version.py" + +[project.optional-dependencies] +data = [ + 'h5py', + 'smart_open @ git+https://github.com/davidparks21/smart_open.git@develop', # 'smart_open>=5.1.0', the hash version fixes the bytes from-to range header issue. + 'awswrangler==3.*', + 'pandas', + 'nptyping', + 'paho-mqtt' +] +iot = [ + 'redis', + 'schedule', + 'paho-mqtt' +] +analysis = [ + 'scipy>=1.10.0', + 'pandas', + 'powerlaw', + 'matplotlib', + # Both of these dependencies are required for read_phy_files + 'awswrangler==3.*', + 'smart_open @ git+https://github.com/davidparks21/smart_open.git@develop', # 'smart_open>=5.1.0', the hash version fixes the bytes from-to range header issue. +] +ml = [ + 'torch', + 'scikit-learn', +] +hengenlab = [ + 'neuraltoolkit @ git+https://github.com/hengenlab/neuraltoolkit.git', # channel mapping information +] +test = [ + "pytest >=6", + "pytest-cov >=3", +] +dev = [ + "pytest >=6", + "pytest-cov >=3", +] +docs = [ + "sphinx>=4.0", + "myst_parser>=0.13", + "sphinx_book_theme>=0.1.0", + "sphinx_copybutton", + "sphinx_autodoc_typehints", + "furo", +] + +[project.urls] +Homepage = "https://github.com/braingeneers/braingeneerspy" +"Bug Tracker" = "https://github.com/braingeneers/braingeneerspy/issues" +Discussions = "https://github.com/braingeneers/braingeneerspy/discussions" +Changelog = "https://github.com/braingeneers/braingeneerspy/releases" + +[tool.hatch] +metadata.allow-direct-references = true +version.source = "vcs" +envs.default.dependencies = [ + "pytest", + "pytest-cov", +] + + +[tool.pytest.ini_options] +minversion = "6.0" +addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"] +xfail_strict = true +filterwarnings = [ + "error", + "ignore:(ast.Str|Attribute s|ast.NameConstant|ast.Num) is deprecated:DeprecationWarning:_pytest", +] +log_cli_level = "INFO" +testpaths = [ + "tests", +] + + +[tool.coverage] +run.source = ["braingeneers"] +port.exclude_lines = [ + 'pragma: no cover', + '\.\.\.', + 'if typing.TYPE_CHECKING:', +] + +[tool.mypy] +files = ["src", "tests"] +python_version = "3.8" +warn_unused_configs = true +strict = true +show_error_codes = true +enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"] +warn_unreachable = true +disallow_untyped_defs = false +disallow_incomplete_defs = false + +[[tool.mypy.overrides]] +module = "braingeneers.*" +disallow_untyped_defs = true +disallow_incomplete_defs = true + + +[tool.ruff] +select = [ + "E", "F", "W", # flake8 + "B", # flake8-bugbear + "I", # isort + "ARG", # flake8-unused-arguments + "C4", # flake8-comprehensions + "EM", # flake8-errmsg + "ICN", # flake8-import-conventions + "ISC", # flake8-implicit-str-concat + "G", # flake8-logging-format + "PGH", # pygrep-hooks + "PIE", # flake8-pie + "PL", # pylint + "PT", # flake8-pytest-style + "PTH", # flake8-use-pathlib + "RET", # flake8-return + "RUF", # Ruff-specific + "SIM", # flake8-simplify + "T20", # flake8-print + "UP", # pyupgrade + "YTT", # flake8-2020 + "EXE", # flake8-executable + "NPY", # NumPy specific rules + "PD", # pandas-vet +] +extend-ignore = [ + "PLR", # Design related pylint codes + "E501", # Line too long +] +typing-modules = ["braingeneers._compat.typing"] +src = ["src"] +unfixable = [ + "T20", # Removes print statements + "F841", # Removes unused variables +] +exclude = [] +flake8-unused-arguments.ignore-variadic-names = true +isort.required-imports = ["from __future__ import annotations"] + +[tool.ruff.per-file-ignores] +"tests/**" = ["T20"] +"noxfile.py" = ["T20"] + + +[tool.pylint] +py-version = "3.8" +ignore-paths= ["src/braingeneers/_version.py"] +reports.output-format = "colorized" +similarities.ignore-imports = "yes" +messages_control.disable = [ + "design", + "fixme", + "line-too-long", + "missing-module-docstring", + "wrong-import-position", +] diff --git a/setup.py b/setup.py deleted file mode 100644 index cd03549..0000000 --- a/setup.py +++ /dev/null @@ -1,40 +0,0 @@ -from setuptools import setup, find_packages -from os import path -import itertools -import braingeneers.utils.configure as config - - -here = path.abspath(path.dirname(__file__)) -with open(path.join(here, 'README.md'), encoding='utf-8') as f: - long_description = f.read() - -# DEPENDENCIES: -# Dependencies are listed in configure.py, they are imported from braingeneers.configure.dependencies -# dynamically. Please edit dependencies in configure.py, not here. This was done so that the dependency -# list is not duplicated. It is also necessary to allow the dependency list to be validated at runtime. -setup( - name='braingeneerspy', - version='0.1.12', - python_requires='>=3.10.0', # needed for ordered dictionaries; also this bug in 3.9 and below https://bugs.python.org/issue42853 - description='Braingeneers Python utilities', - long_description=long_description, - long_description_content_type='text/markdown', - url='https://github.com/braingeneers/braingeneerspy', - author='Braingeneers', - # non python files are excluded by default - package_data={'braingeneers': ['data/mxw_h5_plugin/**/*']}, - include_package_data=True, - classifiers=[ - 'Development Status :: 3 - Alpha', - 'Intended Audience :: Braingeneers, collaborators', - 'Programming Language :: Python :: 3', - 'License :: MIT', - ], - packages=find_packages(exclude=()), - # Edit these fields using the `dependencies` variable above, no changes here are necessary - install_requires=config.DEPENDENCIES['minimal'], - extras_require={ - 'all': list(itertools.chain(*config.DEPENDENCIES.values())), # all dependencies included - **{k: v for k, v in config.DEPENDENCIES.items() if k != 'minimal'}, # each dependency group - }, -) diff --git a/braingeneers/__init__.py b/src/braingeneers/__init__.py similarity index 85% rename from braingeneers/__init__.py rename to src/braingeneers/__init__.py index 4eb6a99..a013382 100644 --- a/braingeneers/__init__.py +++ b/src/braingeneers/__init__.py @@ -1,9 +1,20 @@ -import braingeneers -import braingeneers.utils -from braingeneers.utils.configure import \ - set_default_endpoint, get_default_endpoint, skip_unittest_if_offline +""" +Copyright (c) 2023 Braingeneers. All rights reserved. + +braingeneers: braingeneerspy +""" + +from __future__ import annotations import warnings +from . import utils +from .utils.configure import \ + set_default_endpoint, get_default_endpoint, skip_unittest_if_offline +from ._version import version as VERSION # noqa + +__version__ = VERSION + +__all__ = ("set_default_endpoint", "get_default_endpoint", "skip_unittest_if_offline", "utils") # Deprecated imports are allowed for backwards compatibility. # This code should be removed in the future. This was added 27apr2022 by David Parks. diff --git a/src/braingeneers/_compat/__init__.py b/src/braingeneers/_compat/__init__.py new file mode 100644 index 0000000..efc43c9 --- /dev/null +++ b/src/braingeneers/_compat/__init__.py @@ -0,0 +1,8 @@ +""" +Copyright (c) 2023 Braingeneers. All rights reserved. + +braingeneers: braingeneerspy +""" + + +from __future__ import annotations diff --git a/src/braingeneers/_compat/typing.py b/src/braingeneers/_compat/typing.py new file mode 100644 index 0000000..103a484 --- /dev/null +++ b/src/braingeneers/_compat/typing.py @@ -0,0 +1,26 @@ +""" +Copyright (c) 2023 Braingeneers. All rights reserved. + +braingeneers: braingeneerspy +""" + + +from __future__ import annotations + +import sys + +if sys.version_info < (3, 10): + from typing_extensions import TypeAlias +else: + from typing import TypeAlias + +if sys.version_info < (3, 11): + from typing_extensions import Self, assert_never +else: + from typing import Self, assert_never + +__all__ = ["TypeAlias", "Self", "assert_never"] + + +def __dir__() -> list[str]: + return __all__ diff --git a/braingeneers/analysis/__init__.py b/src/braingeneers/analysis/__init__.py similarity index 100% rename from braingeneers/analysis/__init__.py rename to src/braingeneers/analysis/__init__.py diff --git a/braingeneers/analysis/analysis.py b/src/braingeneers/analysis/analysis.py similarity index 100% rename from braingeneers/analysis/analysis.py rename to src/braingeneers/analysis/analysis.py diff --git a/braingeneers/analysis/analysis_test.py b/src/braingeneers/analysis/analysis_test.py similarity index 100% rename from braingeneers/analysis/analysis_test.py rename to src/braingeneers/analysis/analysis_test.py diff --git a/braingeneers/analysis/visualize_maxwell.py b/src/braingeneers/analysis/visualize_maxwell.py similarity index 100% rename from braingeneers/analysis/visualize_maxwell.py rename to src/braingeneers/analysis/visualize_maxwell.py diff --git a/braingeneers/data/__init__.py b/src/braingeneers/data/__init__.py similarity index 100% rename from braingeneers/data/__init__.py rename to src/braingeneers/data/__init__.py diff --git a/braingeneers/data/datasets.py b/src/braingeneers/data/datasets.py similarity index 100% rename from braingeneers/data/datasets.py rename to src/braingeneers/data/datasets.py diff --git a/braingeneers/data/datasets_electrophysiology.py b/src/braingeneers/data/datasets_electrophysiology.py similarity index 100% rename from braingeneers/data/datasets_electrophysiology.py rename to src/braingeneers/data/datasets_electrophysiology.py diff --git a/braingeneers/data/datasets_electrophysiology_test.py b/src/braingeneers/data/datasets_electrophysiology_test.py similarity index 100% rename from braingeneers/data/datasets_electrophysiology_test.py rename to src/braingeneers/data/datasets_electrophysiology_test.py diff --git a/braingeneers/data/datasets_fluidics.py b/src/braingeneers/data/datasets_fluidics.py similarity index 100% rename from braingeneers/data/datasets_fluidics.py rename to src/braingeneers/data/datasets_fluidics.py diff --git a/braingeneers/data/datasets_imaging.py b/src/braingeneers/data/datasets_imaging.py similarity index 100% rename from braingeneers/data/datasets_imaging.py rename to src/braingeneers/data/datasets_imaging.py diff --git a/braingeneers/data/datasets_neuron.py b/src/braingeneers/data/datasets_neuron.py similarity index 100% rename from braingeneers/data/datasets_neuron.py rename to src/braingeneers/data/datasets_neuron.py diff --git a/braingeneers/data/mxw_h5_plugin/Mac_arm64/libcompression.dylib b/src/braingeneers/data/mxw_h5_plugin/Mac_arm64/libcompression.dylib similarity index 100% rename from braingeneers/data/mxw_h5_plugin/Mac_arm64/libcompression.dylib rename to src/braingeneers/data/mxw_h5_plugin/Mac_arm64/libcompression.dylib diff --git a/braingeneers/data/mxw_h5_plugin/Mac_x86_64/libcompression.dylib b/src/braingeneers/data/mxw_h5_plugin/Mac_x86_64/libcompression.dylib similarity index 100% rename from braingeneers/data/mxw_h5_plugin/Mac_x86_64/libcompression.dylib rename to src/braingeneers/data/mxw_h5_plugin/Mac_x86_64/libcompression.dylib diff --git a/braingeneers/data/mxw_h5_plugin/Windows/compression.dll b/src/braingeneers/data/mxw_h5_plugin/Windows/compression.dll similarity index 100% rename from braingeneers/data/mxw_h5_plugin/Windows/compression.dll rename to src/braingeneers/data/mxw_h5_plugin/Windows/compression.dll diff --git a/braingeneers/data/transforms/__init__.py b/src/braingeneers/data/transforms/__init__.py similarity index 100% rename from braingeneers/data/transforms/__init__.py rename to src/braingeneers/data/transforms/__init__.py diff --git a/braingeneers/iot/__init__.py b/src/braingeneers/iot/__init__.py similarity index 100% rename from braingeneers/iot/__init__.py rename to src/braingeneers/iot/__init__.py diff --git a/braingeneers/iot/gui.py b/src/braingeneers/iot/gui.py similarity index 100% rename from braingeneers/iot/gui.py rename to src/braingeneers/iot/gui.py diff --git a/braingeneers/iot/messaging.py b/src/braingeneers/iot/messaging.py similarity index 100% rename from braingeneers/iot/messaging.py rename to src/braingeneers/iot/messaging.py diff --git a/braingeneers/iot/messaging_test.py b/src/braingeneers/iot/messaging_test.py similarity index 100% rename from braingeneers/iot/messaging_test.py rename to src/braingeneers/iot/messaging_test.py diff --git a/braingeneers/iot/shadows.py b/src/braingeneers/iot/shadows.py similarity index 100% rename from braingeneers/iot/shadows.py rename to src/braingeneers/iot/shadows.py diff --git a/braingeneers/iot/shadows_dev_playground.py b/src/braingeneers/iot/shadows_dev_playground.py similarity index 100% rename from braingeneers/iot/shadows_dev_playground.py rename to src/braingeneers/iot/shadows_dev_playground.py diff --git a/braingeneers/iot/simple.py b/src/braingeneers/iot/simple.py similarity index 100% rename from braingeneers/iot/simple.py rename to src/braingeneers/iot/simple.py diff --git a/braingeneers/ml/__init__.py b/src/braingeneers/ml/__init__.py similarity index 100% rename from braingeneers/ml/__init__.py rename to src/braingeneers/ml/__init__.py diff --git a/braingeneers/ml/ephys_dataloader.py b/src/braingeneers/ml/ephys_dataloader.py similarity index 100% rename from braingeneers/ml/ephys_dataloader.py rename to src/braingeneers/ml/ephys_dataloader.py diff --git a/src/braingeneers/py.typed b/src/braingeneers/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/braingeneers/utils/__init__.py b/src/braingeneers/utils/__init__.py similarity index 100% rename from braingeneers/utils/__init__.py rename to src/braingeneers/utils/__init__.py diff --git a/braingeneers/utils/common_utils.py b/src/braingeneers/utils/common_utils.py similarity index 100% rename from braingeneers/utils/common_utils.py rename to src/braingeneers/utils/common_utils.py diff --git a/braingeneers/utils/configure.py b/src/braingeneers/utils/configure.py similarity index 100% rename from braingeneers/utils/configure.py rename to src/braingeneers/utils/configure.py diff --git a/braingeneers/utils/configure_test.py b/src/braingeneers/utils/configure_test.py similarity index 100% rename from braingeneers/utils/configure_test.py rename to src/braingeneers/utils/configure_test.py diff --git a/braingeneers/utils/numpy_s3_memmap.py b/src/braingeneers/utils/numpy_s3_memmap.py similarity index 100% rename from braingeneers/utils/numpy_s3_memmap.py rename to src/braingeneers/utils/numpy_s3_memmap.py diff --git a/braingeneers/utils/numpy_s3_memmap_test.py b/src/braingeneers/utils/numpy_s3_memmap_test.py similarity index 100% rename from braingeneers/utils/numpy_s3_memmap_test.py rename to src/braingeneers/utils/numpy_s3_memmap_test.py diff --git a/braingeneers/utils/s3wrangler/__init__.py b/src/braingeneers/utils/s3wrangler/__init__.py similarity index 100% rename from braingeneers/utils/s3wrangler/__init__.py rename to src/braingeneers/utils/s3wrangler/__init__.py diff --git a/braingeneers/utils/s3wrangler/s3wrangler_test.py b/src/braingeneers/utils/s3wrangler/s3wrangler_test.py similarity index 100% rename from braingeneers/utils/s3wrangler/s3wrangler_test.py rename to src/braingeneers/utils/s3wrangler/s3wrangler_test.py diff --git a/braingeneers/utils/smart_open_braingeneers/__init__.py b/src/braingeneers/utils/smart_open_braingeneers/__init__.py similarity index 100% rename from braingeneers/utils/smart_open_braingeneers/__init__.py rename to src/braingeneers/utils/smart_open_braingeneers/__init__.py diff --git a/braingeneers/utils/smart_open_braingeneers/smart_open_braingeneers_test.py b/src/braingeneers/utils/smart_open_braingeneers/smart_open_braingeneers_test.py similarity index 100% rename from braingeneers/utils/smart_open_braingeneers/smart_open_braingeneers_test.py rename to src/braingeneers/utils/smart_open_braingeneers/smart_open_braingeneers_test.py diff --git a/tests/test_package.py b/tests/test_package.py new file mode 100644 index 0000000..5b50c97 --- /dev/null +++ b/tests/test_package.py @@ -0,0 +1,14 @@ +from __future__ import annotations + +import braingeneers as m +import braingeneers._compat.typing as typing_backports + + +def test_version(): + assert m.__version__ + + +def test_has_typing(): + assert hasattr(typing_backports, "TypeAlias") + assert hasattr(typing_backports, "Self") + assert hasattr(typing_backports, "assert_never") From 1cfd34dea4d153968ee6d7b374eb48fa1947cdca Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Wed, 19 Jul 2023 16:24:10 -0700 Subject: [PATCH 02/61] Update min python and remove pre-commit dep for now --- .github/workflows/ci.yml | 3 +-- pyproject.toml | 10 ++++------ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 33ce067..83df286 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,11 +38,10 @@ jobs: checks: name: Check Python ${{ matrix.python-version }} on ${{ matrix.runs-on }} runs-on: ${{ matrix.runs-on }} - needs: [pre-commit] strategy: fail-fast: false matrix: - python-version: ["3.8", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] runs-on: [ubuntu-latest, macos-latest, windows-latest] include: diff --git a/pyproject.toml b/pyproject.toml index 8fd9414..5e84427 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,9 +10,9 @@ authors = [ ] description = "Braingeneers Python utilities" readme = "README.md" -requires-python = ">=3.8" +requires-python = ">=3.10" classifiers = [ - "Development Status :: 1 - Planning", + "Development Status :: 3 - Alpha", "Intended Audience :: Science/Research", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", @@ -20,8 +20,6 @@ classifiers = [ "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", @@ -128,7 +126,7 @@ port.exclude_lines = [ [tool.mypy] files = ["src", "tests"] -python_version = "3.8" +python_version = "3.10" warn_unused_configs = true strict = true show_error_codes = true @@ -189,7 +187,7 @@ isort.required-imports = ["from __future__ import annotations"] [tool.pylint] -py-version = "3.8" +py-version = "3.10" ignore-paths= ["src/braingeneers/_version.py"] reports.output-format = "colorized" similarities.ignore-imports = "yes" From b456f6deffafbf6954a1da4f95c8cf429f7a57c9 Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Wed, 19 Jul 2023 16:25:12 -0700 Subject: [PATCH 03/61] Remove copier answers --- .copier-answers.yml | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 .copier-answers.yml diff --git a/.copier-answers.yml b/.copier-answers.yml deleted file mode 100644 index 1308d8a..0000000 --- a/.copier-answers.yml +++ /dev/null @@ -1,11 +0,0 @@ -# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: 2023.07.13 -_src_path: gh:scientific-python/cookie -backend: hatch -email: me@example.com -full_name: Braingeneers -license: MIT -org: braingeneers -project_name: braingeneers -project_short_description: braingeneerspy -url: https://github.com/braingeneers/braingeneerspy From 14c685ec74d988b1e2dd2af6bc9874d6686cef3b Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Wed, 19 Jul 2023 16:26:43 -0700 Subject: [PATCH 04/61] Remove 3.12 for now --- .github/workflows/ci.yml | 2 +- pyproject.toml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 83df286..4ec4311 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,7 +41,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11"] runs-on: [ubuntu-latest, macos-latest, windows-latest] include: diff --git a/pyproject.toml b/pyproject.toml index 5e84427..8393746 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,6 @@ classifiers = [ "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering", "Typing :: Typed", ] From 1a8514731f5e6d738036de57b04135964fa2b6c9 Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Wed, 19 Jul 2023 16:30:25 -0700 Subject: [PATCH 05/61] Remove pypy3.9 --- .github/workflows/ci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4ec4311..35536da 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,10 +44,6 @@ jobs: python-version: ["3.10", "3.11"] runs-on: [ubuntu-latest, macos-latest, windows-latest] - include: - - python-version: pypy-3.9 - runs-on: ubuntu-latest - steps: - uses: actions/checkout@v3 with: From b44660b475a767f922bec67ff904da47fcbabd78 Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Wed, 19 Jul 2023 16:33:57 -0700 Subject: [PATCH 06/61] Allow formatting to always pass for now --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 35536da..4019a1c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,7 @@ jobs: pre-commit: name: Format runs-on: ubuntu-latest + continue-on-error: true steps: - uses: actions/checkout@v3 with: From 8ab00b4fffa534c25d1b104625e7944936a8676f Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Wed, 19 Jul 2023 16:36:21 -0700 Subject: [PATCH 07/61] Ignore pre-commit for now --- .github/workflows/ci.yml | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4019a1c..2ba6333 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,24 +17,23 @@ env: FORCE_COLOR: 3 jobs: - pre-commit: - name: Format - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - uses: actions/setup-python@v4 - with: - python-version: "3.x" - - uses: pre-commit/action@v3.0.0 - with: - extra_args: --hook-stage manual --all-files - - name: Run PyLint - run: | - echo "::add-matcher::$GITHUB_WORKSPACE/.github/matchers/pylint.json" - pipx run nox -s pylint + # pre-commit: + # name: Format + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v3 + # with: + # fetch-depth: 0 + # - uses: actions/setup-python@v4 + # with: + # python-version: "3.x" + # - uses: pre-commit/action@v3.0.0 + # with: + # extra_args: --hook-stage manual --all-files + # - name: Run PyLint + # run: | + # echo "::add-matcher::$GITHUB_WORKSPACE/.github/matchers/pylint.json" + # pipx run nox -s pylint checks: name: Check Python ${{ matrix.python-version }} on ${{ matrix.runs-on }} From 5901084c5422a72ff6c95adfff6c58da792f53fb Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Wed, 2 Aug 2023 13:47:34 -0700 Subject: [PATCH 08/61] fix: bring back missing .so file and remove from gitignore --- .gitignore | 2 -- .../data/mxw_h5_plugin/Linux/libcompression.so | Bin 0 -> 35776 bytes 2 files changed, 2 deletions(-) create mode 100644 src/braingeneers/data/mxw_h5_plugin/Linux/libcompression.so diff --git a/.gitignore b/.gitignore index 4faf4c0..efff2b5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,6 @@ __pycache__/ *.py[cod] *$py.class -# C extensions -*.so # Distribution / packaging .Python diff --git a/src/braingeneers/data/mxw_h5_plugin/Linux/libcompression.so b/src/braingeneers/data/mxw_h5_plugin/Linux/libcompression.so new file mode 100644 index 0000000000000000000000000000000000000000..af449c29ae569e2a171e3326245a92467fac3fcd GIT binary patch literal 35776 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 literal 0 HcmV?d00001 From c3187b99c1a26727416a6b921a2eec7da0796caf Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Thu, 14 Sep 2023 17:04:45 -0700 Subject: [PATCH 09/61] chore: remove old setup.py --- setup.py | 40 ---------------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 setup.py diff --git a/setup.py b/setup.py deleted file mode 100644 index 8e616c8..0000000 --- a/setup.py +++ /dev/null @@ -1,40 +0,0 @@ -from setuptools import setup, find_packages -from os import path -import itertools -import braingeneers.utils.configure as config - - -here = path.abspath(path.dirname(__file__)) -with open(path.join(here, 'README.md'), encoding='utf-8') as f: - long_description = f.read() - -# DEPENDENCIES: -# Dependencies are listed in configure.py, they are imported from braingeneers.configure.dependencies -# dynamically. Please edit dependencies in configure.py, not here. This was done so that the dependency -# list is not duplicated. It is also necessary to allow the dependency list to be validated at runtime. -setup( - name='braingeneerspy', - version='0.1.13', - python_requires='>=3.10.0', # needed for ordered dictionaries; also this bug in 3.9 and below https://bugs.python.org/issue42853 - description='Braingeneers Python utilities', - long_description=long_description, - long_description_content_type='text/markdown', - url='https://github.com/braingeneers/braingeneerspy', - author='Braingeneers', - # non python files are excluded by default - package_data={'braingeneers': ['data/mxw_h5_plugin/**/*']}, - include_package_data=True, - classifiers=[ - 'Development Status :: 3 - Alpha', - 'Intended Audience :: Braingeneers, collaborators', - 'Programming Language :: Python :: 3', - 'License :: MIT', - ], - packages=find_packages(exclude=()), - # Edit these fields using the `dependencies` variable above, no changes here are necessary - install_requires=config.DEPENDENCIES['minimal'], - extras_require={ - 'all': list(itertools.chain(*config.DEPENDENCIES.values())), # all dependencies included - **{k: v for k, v in config.DEPENDENCIES.items() if k != 'minimal'}, # each dependency group - }, -) From ff5c3e3995a427afdd5f232a4e1eef2018f62552 Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Thu, 14 Sep 2023 17:11:38 -0700 Subject: [PATCH 10/61] ci: update branch to development Updated ci and cd yaml to trigger on development branch --- .github/workflows/cd.yml | 3 +-- .github/workflows/ci.yml | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index fc949e2..291899d 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -7,7 +7,7 @@ on: branches: - master - main - - develop + - development release: types: - published @@ -21,7 +21,6 @@ env: jobs: dist: - needs: [pre-commit] name: Distribution build runs-on: ubuntu-latest diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ba6333..6b9f304 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ on: branches: - master - main - - develop + - development concurrency: group: ${{ github.workflow }}-${{ github.ref }} From c3ade4f949345c9200b89e9cdaf21be79a16218a Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Thu, 14 Sep 2023 17:42:09 -0700 Subject: [PATCH 11/61] ci: Add built dist test step for cd --- .github/workflows/cd.yml | 50 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 291899d..62c26aa 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -38,6 +38,50 @@ jobs: - name: Check products run: pipx run twine check dist/* + + test-built-dist: + needs: [dist] + name: Test built distribution + runs-on: ubuntu-latest + permissions: + id-token: write + steps: + - uses: actions/setup-python@v4.7.0 + name: Install Python + with: + python-version: 3.10 + - uses: actions/download-artifact@v3 + with: + name: releases + path: dist + - name: List contents of built dist + run: | + ls -ltrh + ls -ltrh dist + - name: Publish to Test PyPI + uses: pypa/gh-action-pypi-publish@v1.8.10 + with: + repository-url: https://test.pypi.org/legacy/ + verbose: true + skip-existing: true + - name: Check pypi packages + run: | + sleep 3 + python -m pip install --upgrade pip + + echo "=== Testing wheel file ===" + # Install wheel to get dependencies and check import + python -m pip install --extra-index-url https://test.pypi.org/simple --upgrade --pre braingeneers + python -c "import braingeneers; print(braingeneers.__version__)" + echo "=== Done testing wheel file ===" + + echo "=== Testing source tar file ===" + # Install tar gz and check import + python -m pip uninstall --yes braingeneers + python -m pip install --extra-index-url https://test.pypi.org/simple --upgrade --pre --no-binary=:all: braingeneers + python -c "import braingeneers; print(braingeneers.__version__)" + echo "=== Done testing source tar file ===" + publish: needs: [dist] @@ -55,8 +99,4 @@ jobs: path: dist - uses: pypa/gh-action-pypi-publish@release/v1 - if: github.event_name == 'release' && github.event.action == 'published' - with: - # Remember to tell (test-)pypi about this repo before publishing - # Remove this line to publish to PyPI - repository-url: https://test.pypi.org/legacy/ + if: startsWith(github.ref, 'refs/tags') From 751ae3b2bcace7370fbd5be5bed1186cb087f157 Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Thu, 14 Sep 2023 17:43:19 -0700 Subject: [PATCH 12/61] ci: publish need both steps to finish --- .github/workflows/cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 62c26aa..6bd5638 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -84,7 +84,7 @@ jobs: publish: - needs: [dist] + needs: [dist, test-built-dist] name: Publish to PyPI environment: pypi permissions: From da8dba81c0b7a896724c746d2f13d3ae2ea3cb94 Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Thu, 14 Sep 2023 17:44:05 -0700 Subject: [PATCH 13/61] ci: fix python version --- .github/workflows/cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 6bd5638..58cab0c 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -49,7 +49,7 @@ jobs: - uses: actions/setup-python@v4.7.0 name: Install Python with: - python-version: 3.10 + python-version: '3.10' - uses: actions/download-artifact@v3 with: name: releases From bebbf210b85a746ee05876cd261f0302496095a2 Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Thu, 14 Sep 2023 17:47:17 -0700 Subject: [PATCH 14/61] ci: fix artifact name and action version --- .github/workflows/cd.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 58cab0c..71e07d2 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -52,7 +52,7 @@ jobs: python-version: '3.10' - uses: actions/download-artifact@v3 with: - name: releases + name: artifact path: dist - name: List contents of built dist run: | @@ -98,5 +98,5 @@ jobs: name: artifact path: dist - - uses: pypa/gh-action-pypi-publish@release/v1 + - uses: pypa/gh-action-pypi-publish@v1.8.10 if: startsWith(github.ref, 'refs/tags') From 999648078cb340d2e55cd8abc7265d2621416b99 Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Thu, 14 Sep 2023 18:02:19 -0700 Subject: [PATCH 15/61] ci: Remove cd for pull requests --- .github/workflows/cd.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 71e07d2..904ba48 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -2,7 +2,6 @@ name: CD on: workflow_dispatch: - pull_request: push: branches: - master From d5e04c98d7f82b3a6707be9775a4044ddd8f875a Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Thu, 14 Sep 2023 18:10:16 -0700 Subject: [PATCH 16/61] ci: fix auto versioning for pypi --- pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 8393746..b0261ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,9 @@ dependencies = [ [tool.hatch.build.hooks.vcs] version-file = "src/braingeneers/_version.py" +[tool.hatch.version.raw-options] +local_scheme = "no-local-version" + [project.optional-dependencies] data = [ 'h5py', From f75856ed2fa7bbb35c47e1f490309b1091bef76c Mon Sep 17 00:00:00 2001 From: Landung 'Don' Setiawan Date: Fri, 15 Sep 2023 09:57:40 -0700 Subject: [PATCH 17/61] chore(deps): Add all optional deps --- pyproject.toml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b0261ab..2add6a0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,6 +43,15 @@ version-file = "src/braingeneers/_version.py" local_scheme = "no-local-version" [project.optional-dependencies] +all = [ + 'braingeneers[data]', + 'braingeneers[analysis]', + 'braingeneers[ml]', + 'braingeneers[iot]', + 'braingeneers[hengenlab]', + 'braingeneers[test]', + 'braingeneers[docs]', +] data = [ 'h5py', 'smart_open @ git+https://github.com/davidparks21/smart_open.git@develop', # 'smart_open>=5.1.0', the hash version fixes the bytes from-to range header issue. @@ -76,10 +85,6 @@ test = [ "pytest >=6", "pytest-cov >=3", ] -dev = [ - "pytest >=6", - "pytest-cov >=3", -] docs = [ "sphinx>=4.0", "myst_parser>=0.13", From a8c66ba50ea39c8d399f91dd208d1bf9ec59775f Mon Sep 17 00:00:00 2001 From: Cordero Core <127983572+uwcdc@users.noreply.github.com> Date: Mon, 18 Sep 2023 11:35:33 -0700 Subject: [PATCH 18/61] Update README.md --- README.md | 161 +++++++++++++++++++++++++++--------------------------- 1 file changed, 82 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index 3131fc4..53afa63 100644 --- a/README.md +++ b/README.md @@ -1,94 +1,95 @@ # Braingeneers Python Utilities -[This package][github] is supposed to collect, as well as make installable -through Pip, all of the Python code and utilities that we develop as -part of the Braingeneers project. There are five subpackages: - * `braingeneers.analysis` code for data analysis. +[![ssec](https://img.shields.io/badge/SSEC-Project-purple?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAOCAQAAABedl5ZAAAACXBIWXMAAAHKAAABygHMtnUxAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMNJREFUGBltwcEqwwEcAOAfc1F2sNsOTqSlNUopSv5jW1YzHHYY/6YtLa1Jy4mbl3Bz8QIeyKM4fMaUxr4vZnEpjWnmLMSYCysxTcddhF25+EvJia5hhCudULAePyRalvUteXIfBgYxJufRuaKuprKsbDjVUrUj40FNQ11PTzEmrCmrevPhRcVQai8m1PRVvOPZgX2JttWYsGhD3atbHWcyUqX4oqDtJkJiJHUYv+R1JbaNHJmP/+Q1HLu2GbNoSm3Ft0+Y1YMdPSTSwQAAAABJRU5ErkJggg==&style=plastic)](https://escience.washington.edu/wetai/) +[![BSD License](https://badgen.net/badge/license/BSD-3-Clause/blue)](LICENSE) - * `braingeneers.data` all code for basic data access . - * `braingeneers.data.datasets_electrophysiology` contains methods which load and manipulate ephys data. - * `braingeneers.data.datasets_fluidics` contains methods which load and manipulate fluidics data. - * `braingeneers.data.datasets_imaging` contains methods which load and manipulate imaging data. - - * `braingeneers.iot` all code for IOT (internet of things) communication. - * `braingeneers.iot.messaging` a single interface for all messaging and inter-device data transfer functions (MQTT, redis, device state, etc.). A wetAI tutorial on this package exists. - - * `braingeneers.ml` all code related to ML (machine learning). - * `braingeneers.ml.ephys_dataloader` a high performance pytorch data loader for ephys data. +Welcome to the **Braingeneers Python Utilities** repository! This package collects and provides various Python code and utilities developed as part of the Braingeneers project. The package adheres to the Python Package Authority (PyPA) standards for package structure and organization. - * `braigeneers.utils` - * `braingeneers.utils.s3wrangler` a wrapper of `awswrangler.s3` for accessing PRP/S3. See section below for the documentation and examples. - * `braingeneers.utils.smart_open_braingeneers` a wrapper of `smart_open` for opening files on PRP/S3. See section below for the documentation and examples. +## Installation -[github]: https://www.github.com/braingeneers/braingeneerspy +You can install `braingeneerspy` using `pip` with the following commands: -## Installation / upgrade - -Most dependencies are optional installations for this package. -Below are examples of various installation configurations. +### Install from GitHub (Recommended) +```bash +pip install --force-reinstall git+https://github.com/braingeneers/braingeneerspy.git ``` -# Typical install (includes `iot`, `analysis`, and `data` access functions, skips `ml`, and lab-specific dependencies): -python -m pip install --force-reinstall git+https://github.com/braingeneers/braingeneerspy.git#egg=braingeneerspy[iot,analysis,data] -# Full install (all optional dependencies included). -python -m pip install --force-reinstall git+https://github.com/braingeneers/braingeneerspy.git#egg=braingeneerspy[all] +### Install from a Wheel (PyPI) + +If you prefer to install a pre-built wheel, you can find the latest release on [PyPI](https://pypi.org/project/braingeneerspy/). Please replace `` with the specific version you want to install. -# Minimum install (no optional dependencies, good for Raspberry PI builds). -python -m pip install --force-reinstall git+https://github.com/braingeneers/braingeneerspy.git +```bash +pip install braingeneerspy== ``` -### macOS installation note: -if install fails with ```no matches found: git+https://github.com/braingeneers/braingeneerspy.git#egg=braingeneerspy[all]``` -wrap quotes around the github address like so +### Install with Optional Dependencies + +You can install `braingeneerspy` with specific optional dependencies based on your needs. Use the following command examples: +- Install with IoT, analysis, and data access functions (skips machine learning and lab-specific dependencies): + +```bash +pip install --force-reinstall git+https://github.com/braingeneers/braingeneerspy.git#egg=braingeneerspy[iot,analysis,data] ``` -# Typical install (includes `iot`, `analysis`, and `data` access functions, skips `ml`, and lab-specific dependencies): -python -m pip install --force-reinstall 'git+https://github.com/braingeneers/braingeneerspy.git#egg=braingeneerspy[iot,analysis]' -# Full install (all optional dependencies included). -python -m pip install --force-reinstall 'git+https://github.com/braingeneers/braingeneerspy.git#egg=braingeneerspy[all]' +- Install with all optional dependencies: + +```bash +pip install --force-reinstall git+https://github.com/braingeneers/braingeneerspy.git#egg=braingeneerspy[all] ``` -### Optional dependency organization +Please note that macOS users may need to wrap the GitHub URL in quotes if they encounter issues during installation, as shown in the examples above. + +## Optional Dependency Groups + +Dependencies in `braingeneerspy` are organized into optional groups of requirements. You can install all dependencies with `all`, or you can install a specific set of dependencies. Here are the optional dependency groups: + +- *Unspecified*: Minimal packages for data access will be installed. +- `all`: All optional dependencies will be included. +- `iot`: IoT dependencies such as AWS and Redis packages will be installed. +- `analysis`: Dependencies for data analysis routines, plotting tools, math libraries, etc. +- `ml`: Machine learning dependencies such as `torch` will be installed. +- `hengenlab`: Hengenlab data loader-specific packages such as `neuraltoolkit` will be installed. + +## Committing Changes to the Repo + +If you plan to make changes to the `braingeneerspy` package and publish them on GitHub, please follow these steps: + +1. Update the `version` variable in `setup.py`. +2. To receive the updated `braingeneerspy` package on your local machine, run one of the pip install commands mentioned earlier. -Dependencies are organized into optional groups of requirements. You can install all dependencies with `all`, -or install the minimum dependencies (by not specifying optional groups), -or some combination of dependencies you will use. Optional dependency groups are: +## Modules and Subpackages - - *Unspecified*: Minimal packages for data access will be installed. - - `all`: All optional dependencies will be included. - - `iot`: IOT dependencies such as AWS, Redis packages will be installed. - - `analysis`: Dependencies for data analysis routines, plotting tools, math libraries, etc. - - `ml`: Machine Learning dependencies such as `torch` will be installed. - - `hengenlab`: Hengenlab data loader specific packages such as `neuraltoolkit` will be installed. +`braingeneerspy` includes several subpackages and modules, each serving a specific purpose within the Braingeneers project: -### Committing changes to the repo +- `braingeneers.analysis`: Contains code for data analysis. +- `braingeneers.data`: Provides code for basic data access, including subpackages for handling electrophysiology, fluidics, and imaging data. +- `braingeneers.iot`: Offers code for Internet of Things (IoT) communication, including a messaging interface. +- `braingeneers.ml`: Contains code related to machine learning, such as a high-performance PyTorch data loader for electrophysiology data. +- `braingeneers.utils`: Provides utility functions, including S3 access and smart file opening. -To publish changes made to the `braingeneerspy` package on github, please follow these steps. - 1. Update the `version` variable in `setup.py`. - 2. To then receive the updated `braingeneerspy` package on your personal computer - 3. Run one of the pip install commands listed above. +## S3 Access and Configuration -## braingeneers.utils.s3wrangler -Extends the `awswrangler.s3 package` for Braingeneers/PRP access. -See API documentation: https://aws-data-wrangler.readthedocs.io/en/2.4.0-docs/api.html#amazon-s3 +### `braingeneers.utils.s3wrangler` + +This module extends the `awswrangler.s3 package` for Braingeneers/PRP access. For API documentation and usage examples, please visit the [official documentation](https://aws-data-wrangler.readthedocs.io/en/2.4.0-docs/api.html#amazon-s3). + +Here's a basic usage example: -Usage examples: ```python import braingeneers.utils.s3wrangler as wr -# get all UUIDs from s3://braingeneers/ephys/ +# Get all UUIDs from s3://braingeneers/ephys/ uuids = wr.list_directories('s3://braingeneers/ephys/') print(uuids) ``` -## braingeneers.utils.smart_open_braingeneers -Configures smart_open for braingeneers use on PRP/S3. When importing this version of `smart_open` -braingeneers defaults will be autoconfigured. Note that `smart_open` supports both local and S3 files, -so it can be used for all files, not just S3 file access. +### `braingeneers.utils.smart_open_braingeneers` + +This module configures `smart_open` for Braingeneers use on PRP/S3. When importing this version of `smart_open`, Braingeneers defaults will be autoconfigured. Note that `smart_open` supports both local and S3 files, so it can be used for all files, not just S3 file access. -Basic usage example (copy/paste this to test your setup), if it works you will see a helpful bit of advice printed to the screen: +Here's a basic usage example: ```python import braingeneers.utils.smart_open_braingeneers as smart_open @@ -97,32 +98,31 @@ with smart_open.open('s3://braingeneersdev/test_file.txt', 'r') as f: print(f.read()) ``` -You may also safely replace Python's default `open` function with `smart_open.open`, -`smart_open` supports both local and remote files: +You can also safely replace Python's default `open` function with `smart_open.open`: ```python import braingeneers.utils.smart_open_braingeneers as smart_open open = smart_open.open ``` -### Non-standard S3 endpoints: -`smart_open` and `s3wrangler` are pre-configured by default to the standard braingeneers S3 endpoint, -no configuration is necessary. If you would like to utilize a different S3 service you can specify a -new custom `ENDPOINT`, this can be a local path or an endpoint URL for another S3 service (s3wrangler -only supports S3 services, not local paths, `smart_open` supports local paths). +## Customizing S3 Endpoints + +By default, `smart_open` and `s3wrangler` are pre-configured for the standard Braingeneers S3 endpoint. However, you can specify a custom `ENDPOINT` if you'd like to use a different S3 service. This can be a local path or an endpoint URL for another S3 service (note that `s3wrangler` only supports S3 services, not local paths, while `smart_open` supports local paths). + +To set a custom endpoint, follow these steps: -- Set an environment variable `ENDPOINT` with the new endpoint. Unix based example:`export ENDPOINT="https://s3-west.nrp-nautilus.io"` -- Call `braingeneers.set_default_endpoint(endpoint: str)` and `braingeneers.get_default_endpoint()`. - These functions will update both `smart_open` and `s3wrangler` (if it's an S3 endpoint, - local path endpoints are ignored by s3wrangler) +1. Set an environment variable `ENDPOINT` with the new endpoint. For example, on Unix-based systems: -When running a job on the PRP you can use the PRP internal S3 endpoint, -which is faster than the default external endpoint (this will only work on jobs run in the PRP -environment). Add the following environment variable to your job YAML file. -This will set the environment variable ENDPOINT_URL which overrides the -default external PPR/S3 endpoint, which is used if you don't set this variable. -Setting this environment variable can also be used to set an endpoint other than the PRP/S3. + ```bash + export ENDPOINT="https://s3-west.nrp-nautilus.io" + ``` + +2. Call `braingeneers.set_default_endpoint(endpoint: str)` and `braingeneers.get_default_endpoint()`. These functions will update both `smart_open` and `s3wrangler` (if it's an S3 endpoint, local path endpoints are ignored by `s3wrangler`). + +### Using the PRP Internal S3 Endpoint + +When running a job on the PRP, you can use the PRP internal S3 endpoint, which is faster than the default external endpoint. To do this, add the following environment variable to your job YAML file: ```yaml spec: @@ -137,5 +137,8 @@ spec: value: "http://rook-ceph-rgw-nautiluss3.rook" ``` -Notes: -- There were version conflicts between 4.2.0 and 5.1.0 of smart_open. This configuration has been tested to work with 5.1.0. +Please note that this will only work on jobs run in the PRP environment. Setting the `ENDPOINT` environment variable can also be used to specify an endpoint other than the PRP/S3. + +### Notes + +- `braingeneerspy` is compatible with `smart_open` version 5.1.0. If you encounter issues, make sure to use this version for compatibility. From 33a3bba98c1a04a2af5834bdfbcbbe75679a0ad9 Mon Sep 17 00:00:00 2001 From: Cordero Core <127983572+uwcdc@users.noreply.github.com> Date: Thu, 21 Sep 2023 22:03:37 +0000 Subject: [PATCH 19/61] Update README.md --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 53afa63..ae0ac7e 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,18 @@ [![ssec](https://img.shields.io/badge/SSEC-Project-purple?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAOCAQAAABedl5ZAAAACXBIWXMAAAHKAAABygHMtnUxAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMNJREFUGBltwcEqwwEcAOAfc1F2sNsOTqSlNUopSv5jW1YzHHYY/6YtLa1Jy4mbl3Bz8QIeyKM4fMaUxr4vZnEpjWnmLMSYCysxTcddhF25+EvJia5hhCudULAePyRalvUteXIfBgYxJufRuaKuprKsbDjVUrUj40FNQ11PTzEmrCmrevPhRcVQai8m1PRVvOPZgX2JttWYsGhD3atbHWcyUqX4oqDtJkJiJHUYv+R1JbaNHJmP/+Q1HLu2GbNoSm3Ft0+Y1YMdPSTSwQAAAABJRU5ErkJggg==&style=plastic)](https://escience.washington.edu/wetai/) [![BSD License](https://badgen.net/badge/license/BSD-3-Clause/blue)](LICENSE) +## Getting Started + Welcome to the **Braingeneers Python Utilities** repository! This package collects and provides various Python code and utilities developed as part of the Braingeneers project. The package adheres to the Python Package Authority (PyPA) standards for package structure and organization. +# Development/Contribution + +To get started with your development (or fork), click the "Open with GitHub Codespaces" button below to launch a fully configured development environment with all the necessary tools and extensions. + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/braingeneers/braingeneerspy?quickstart=1) + +Instruction on how to contribute to this project can be found in the CONTRIBUTION.md + ## Installation You can install `braingeneerspy` using `pip` with the following commands: From d418cb02ca3c48344beb885ff5af7dc118e7b2d3 Mon Sep 17 00:00:00 2001 From: uwcdc <127983572+uwcdc@users.noreply.github.com> Date: Fri, 22 Sep 2023 14:24:25 -0700 Subject: [PATCH 20/61] Update docs and devcontainer --- .devcontainer/devcontainer.json | 15 +++++++++++++++ .devcontainer/post_create.sh | 26 ++++++++++++++++++++++++++ README.md | 22 +++++++++++++++++++++- docs/{ => source}/conf.py | 0 docs/{ => source}/index.md | 0 5 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/post_create.sh rename docs/{ => source}/conf.py (100%) rename docs/{ => source}/index.md (100%) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..ab4422b --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,15 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +{ + "image":"ghcr.io/braingeneers/research:latest", + + "customizations": { + "vscode": { + "extensions": [ + "ms-toolsai.jupyter", + "ms-python.python", + "ms-vsliveshare.vsliveshare" + ] + } + }, + "postCreateCommand": "sh .devcontainer/post_create.sh" +} diff --git a/.devcontainer/post_create.sh b/.devcontainer/post_create.sh new file mode 100644 index 0000000..129dce6 --- /dev/null +++ b/.devcontainer/post_create.sh @@ -0,0 +1,26 @@ +# For writing commands that will be executed after the container is created + +# Installs `human_hip` as local library without resolving dependencies (--no-deps) +python3 -m pip install -e ./src/braingeneers --no-deps + +# # Install datasets from S3 +# # This script will download the datasets from S3 and place them in the correct directory structure +# # This script should be run from the root of the repository + +# # Define the base directory path +# base_dir="${HOME}/data/ephys" + +# # Create the base directory +# mkdir -p "$base_dir" + +# # Define an array of dataset names +# dataset_names=("2023-04-02-e-hc328_unperturbed/derived/" "2022-10-20-e-/derived/" "2022-11-02-e-Hc11.1-chip16753/derived" "2023-05-10-e-hc52_18790_unperturbed/derived") + +# # Loop through the dataset names +# for sub_dir in "${dataset_names[@]}"; do +# # Create directories +# mkdir -p "$base_dir/$sub_dir" + +# # Download data from S3 +# aws --endpoint https://s3-west.nrp-nautilus.io s3 cp "s3://braingeneers/ephys/$sub_dir" "$base_dir/$sub_dir" --recursive --no-sign-request +# done diff --git a/README.md b/README.md index ae0ac7e..ba5f689 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,9 @@ Welcome to the **Braingeneers Python Utilities** repository! This package collects and provides various Python code and utilities developed as part of the Braingeneers project. The package adheres to the Python Package Authority (PyPA) standards for package structure and organization. -# Development/Contribution +## Contribution + +We welcome contributions from collaborators and researchers interested in our work. If you have improvements, suggestions, or new findings to share, please submit a pull request. Your contributions help advance our research and analysis efforts. To get started with your development (or fork), click the "Open with GitHub Codespaces" button below to launch a fully configured development environment with all the necessary tools and extensions. @@ -152,3 +154,21 @@ Please note that this will only work on jobs run in the PRP environment. Setting ### Notes - `braingeneerspy` is compatible with `smart_open` version 5.1.0. If you encounter issues, make sure to use this version for compatibility. + +## Documentation + +The docs directory has been set up using `sphinx-build -M html docs/source/ docs/build/` to create a base project Documentation structure. You can add inline documentation (NumPy style) to further enrich our project's documentation. To render the documentation locally, navigate to the `docs/build/html` folder in the terminal and run `python3 -m http.server`. + +## Working in Codespaces + +### Project Structure + +- **src/:** This folder contains scripts and notebooks representing completed work by the team. + +- **pyproject.toml:** This file follows the guidelines from [PyPA](https://packaging.python.org/tutorials/packaging-projects/) for documenting project setup information. + +### Customizing the Devcontainer + +The `devcontainer.json` file allows you to customize your Codespace container and VS Code environment using extensions. You can add more extensions to tailor the environment to your specific needs. Explore the VS Code extensions marketplace for additional tools that may enhance your workflow. + +For more information about Braingeneers, visit our [website](https://braingeneers.ucsc.edu/). diff --git a/docs/conf.py b/docs/source/conf.py similarity index 100% rename from docs/conf.py rename to docs/source/conf.py diff --git a/docs/index.md b/docs/source/index.md similarity index 100% rename from docs/index.md rename to docs/source/index.md From 3836ace4881c1f4a63059ab63039da926eee010a Mon Sep 17 00:00:00 2001 From: uwcdc <127983572+uwcdc@users.noreply.github.com> Date: Fri, 22 Sep 2023 14:26:44 -0700 Subject: [PATCH 21/61] Update .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index efff2b5..85d3d91 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ __pycache__/ # Distribution / packaging .Python -build/ develop-eggs/ dist/ downloads/ From d7e1c18949d84fcbe14e21f1ea17411d39fb114e Mon Sep 17 00:00:00 2001 From: uwcdc <127983572+uwcdc@users.noreply.github.com> Date: Fri, 22 Sep 2023 14:28:14 -0700 Subject: [PATCH 22/61] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 85d3d91..850e7a6 100644 --- a/.gitignore +++ b/.gitignore @@ -66,7 +66,7 @@ instance/ .scrapy # Sphinx documentation -docs/_build/ +# docs/_build/ # PyBuilder .pybuilder/ From 1dfdfc14b400c600ffd113414770cf52dedcc1c6 Mon Sep 17 00:00:00 2001 From: uwcdc <127983572+uwcdc@users.noreply.github.com> Date: Fri, 22 Sep 2023 14:29:43 -0700 Subject: [PATCH 23/61] Add build/html files --- .gitignore | 1 - docs/build/doctrees/environment.pickle | Bin 0 -> 2064421 bytes docs/build/doctrees/index.doctree | Bin 0 -> 4774 bytes docs/build/html/.buildinfo | 4 + docs/build/html/_sources/index.md.txt | 17 + docs/build/html/_static/basic.css | 925 ++++++++++++++++++ docs/build/html/_static/check-solid.svg | 4 + docs/build/html/_static/clipboard.min.js | 7 + docs/build/html/_static/copy-button.svg | 5 + docs/build/html/_static/copybutton.css | 94 ++ docs/build/html/_static/copybutton.js | 248 +++++ docs/build/html/_static/copybutton_funcs.js | 73 ++ docs/build/html/_static/debug.css | 69 ++ docs/build/html/_static/doctools.js | 156 +++ .../html/_static/documentation_options.js | 13 + docs/build/html/_static/file.png | Bin 0 -> 286 bytes docs/build/html/_static/language_data.js | 199 ++++ docs/build/html/_static/minus.png | Bin 0 -> 90 bytes docs/build/html/_static/plus.png | Bin 0 -> 90 bytes docs/build/html/_static/pygments.css | 255 +++++ .../html/_static/scripts/furo-extensions.js | 0 docs/build/html/_static/scripts/furo.js | 3 + .../html/_static/scripts/furo.js.LICENSE.txt | 7 + docs/build/html/_static/scripts/furo.js.map | 1 + docs/build/html/_static/searchtools.js | 574 +++++++++++ docs/build/html/_static/skeleton.css | 296 ++++++ docs/build/html/_static/sphinx_highlight.js | 154 +++ .../html/_static/styles/furo-extensions.css | 2 + .../_static/styles/furo-extensions.css.map | 1 + docs/build/html/_static/styles/furo.css | 2 + docs/build/html/_static/styles/furo.css.map | 1 + docs/build/html/genindex.html | 232 +++++ docs/build/html/index.html | 262 +++++ docs/build/html/objects.inv | Bin 0 -> 241 bytes docs/build/html/search.html | 240 +++++ docs/build/html/searchindex.js | 1 + 36 files changed, 3845 insertions(+), 1 deletion(-) create mode 100644 docs/build/doctrees/environment.pickle create mode 100644 docs/build/doctrees/index.doctree create mode 100644 docs/build/html/.buildinfo create mode 100644 docs/build/html/_sources/index.md.txt create mode 100644 docs/build/html/_static/basic.css create mode 100644 docs/build/html/_static/check-solid.svg create mode 100644 docs/build/html/_static/clipboard.min.js create mode 100644 docs/build/html/_static/copy-button.svg create mode 100644 docs/build/html/_static/copybutton.css create mode 100644 docs/build/html/_static/copybutton.js create mode 100644 docs/build/html/_static/copybutton_funcs.js create mode 100644 docs/build/html/_static/debug.css create mode 100644 docs/build/html/_static/doctools.js create mode 100644 docs/build/html/_static/documentation_options.js create mode 100644 docs/build/html/_static/file.png create mode 100644 docs/build/html/_static/language_data.js create mode 100644 docs/build/html/_static/minus.png create mode 100644 docs/build/html/_static/plus.png create mode 100644 docs/build/html/_static/pygments.css create mode 100644 docs/build/html/_static/scripts/furo-extensions.js create mode 100644 docs/build/html/_static/scripts/furo.js create mode 100644 docs/build/html/_static/scripts/furo.js.LICENSE.txt create mode 100644 docs/build/html/_static/scripts/furo.js.map create mode 100644 docs/build/html/_static/searchtools.js create mode 100644 docs/build/html/_static/skeleton.css create mode 100644 docs/build/html/_static/sphinx_highlight.js create mode 100644 docs/build/html/_static/styles/furo-extensions.css create mode 100644 docs/build/html/_static/styles/furo-extensions.css.map create mode 100644 docs/build/html/_static/styles/furo.css create mode 100644 docs/build/html/_static/styles/furo.css.map create mode 100644 docs/build/html/genindex.html create mode 100644 docs/build/html/index.html create mode 100644 docs/build/html/objects.inv create mode 100644 docs/build/html/search.html create mode 100644 docs/build/html/searchindex.js diff --git a/.gitignore b/.gitignore index 850e7a6..8e63723 100644 --- a/.gitignore +++ b/.gitignore @@ -167,7 +167,6 @@ __pycache__ .idea tmp/ *.pyc -build/ **/.DS_Store dist/ braingeneers/test/* diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..8547bc65f8fdc5f28e8a6b410bfbbfb5c8a3b4eb GIT binary patch literal 2064421 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�e$=6w}ZMUeml+ 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

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/docs/build/html/_static/copybutton.js b/docs/build/html/_static/copybutton.js new file mode 100644 index 0000000..2ea7ff3 --- /dev/null +++ b/docs/build/html/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/docs/build/html/_static/copybutton_funcs.js b/docs/build/html/_static/copybutton_funcs.js new file mode 100644 index 0000000..dbe1aaa --- /dev/null +++ b/docs/build/html/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/docs/build/html/_static/debug.css b/docs/build/html/_static/debug.css new file mode 100644 index 0000000..74d4aec --- /dev/null +++ b/docs/build/html/_static/debug.css @@ -0,0 +1,69 @@ +/* + This CSS file should be overridden by the theme authors. It's + meant for debugging and developing the skeleton that this theme provides. +*/ +body { + font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji"; + background: lavender; +} +.sb-announcement { + background: rgb(131, 131, 131); +} +.sb-announcement__inner { + background: black; + color: white; +} +.sb-header { + background: lightskyblue; +} +.sb-header__inner { + background: royalblue; + color: white; +} +.sb-header-secondary { + background: lightcyan; +} +.sb-header-secondary__inner { + background: cornflowerblue; + color: white; +} +.sb-sidebar-primary { + background: lightgreen; +} +.sb-main { + background: blanchedalmond; +} +.sb-main__inner { + background: antiquewhite; +} +.sb-header-article { + background: lightsteelblue; +} +.sb-article-container { + background: snow; +} +.sb-article-main { + background: white; +} +.sb-footer-article { + background: lightpink; +} +.sb-sidebar-secondary { + background: lightgoldenrodyellow; +} +.sb-footer-content { + background: plum; +} +.sb-footer-content__inner { + background: palevioletred; +} +.sb-footer { + background: pink; +} +.sb-footer__inner { + background: salmon; +} +.sb-article { + background: white; +} diff --git a/docs/build/html/_static/doctools.js b/docs/build/html/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/docs/build/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js new file mode 100644 index 0000000..d1f2291 --- /dev/null +++ b/docs/build/html/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '0.0.1', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/build/html/_static/file.png b/docs/build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/docs/build/html/_static/language_data.js b/docs/build/html/_static/language_data.js new file mode 100644 index 0000000..250f566 --- /dev/null +++ b/docs/build/html/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/docs/build/html/_static/minus.png b/docs/build/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/docs/build/html/_static/plus.png b/docs/build/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/docs/build/html/_static/pygments.css b/docs/build/html/_static/pygments.css new file mode 100644 index 0000000..7547150 --- /dev/null +++ b/docs/build/html/_static/pygments.css @@ -0,0 +1,255 @@ +.highlight pre { line-height: 125%; } +.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #204a87; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #000000; font-style: italic } /* Generic.Output */ +.highlight .gp { color: #8f5902 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #204a87 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ +.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ +@media not print { +body[data-theme="dark"] .highlight pre { line-height: 125%; } +body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight .hll { background-color: #404040 } +body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 } +body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */ +body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */ +body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */ +body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */ +body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */ +body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */ +body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */ +body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body[data-theme="dark"] .highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */ +body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */ +body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */ +body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */ +body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */ +body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */ +body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */ +body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */ +body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */ +body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */ +body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */ +body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */ +body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */ +body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +@media (prefers-color-scheme: dark) { +body:not([data-theme="light"]) .highlight pre { line-height: 125%; } +body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight .hll { background-color: #404040 } +body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 } +body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */ +body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */ +body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */ +body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */ +body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */ +body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */ +body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */ +body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body:not([data-theme="light"]) .highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */ +body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */ +body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */ +body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */ +body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */ +body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */ +body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */ +body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */ +body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */ +body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */ +body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */ +body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */ +body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */ +body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +} +} \ No newline at end of file diff --git a/docs/build/html/_static/scripts/furo-extensions.js b/docs/build/html/_static/scripts/furo-extensions.js new file mode 100644 index 0000000..e69de29 diff --git a/docs/build/html/_static/scripts/furo.js b/docs/build/html/_static/scripts/furo.js new file mode 100644 index 0000000..32e7c05 --- /dev/null +++ b/docs/build/html/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={212:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); +//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/docs/build/html/_static/scripts/furo.js.LICENSE.txt b/docs/build/html/_static/scripts/furo.js.LICENSE.txt new file mode 100644 index 0000000..1632189 --- /dev/null +++ b/docs/build/html/_static/scripts/furo.js.LICENSE.txt @@ -0,0 +1,7 @@ +/*! + * gumshoejs v5.1.2 (patched by @pradyunsg) + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ diff --git a/docs/build/html/_static/scripts/furo.js.map b/docs/build/html/_static/scripts/furo.js.map new file mode 100644 index 0000000..7b7ddb1 --- /dev/null +++ b/docs/build/html/_static/scripts/furo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 0.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/build/html/_static/searchtools.js b/docs/build/html/_static/searchtools.js new file mode 100644 index 0000000..7918c3f --- /dev/null +++ b/docs/build/html/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/build/html/_static/skeleton.css b/docs/build/html/_static/skeleton.css new file mode 100644 index 0000000..467c878 --- /dev/null +++ b/docs/build/html/_static/skeleton.css @@ -0,0 +1,296 @@ +/* Some sane resets. */ +html { + height: 100%; +} + +body { + margin: 0; + min-height: 100%; +} + +/* All the flexbox magic! */ +body, +.sb-announcement, +.sb-content, +.sb-main, +.sb-container, +.sb-container__inner, +.sb-article-container, +.sb-footer-content, +.sb-header, +.sb-header-secondary, +.sb-footer { + display: flex; +} + +/* These order things vertically */ +body, +.sb-main, +.sb-article-container { + flex-direction: column; +} + +/* Put elements in the center */ +.sb-header, +.sb-header-secondary, +.sb-container, +.sb-content, +.sb-footer, +.sb-footer-content { + justify-content: center; +} +/* Put elements at the ends */ +.sb-article-container { + justify-content: space-between; +} + +/* These elements grow. */ +.sb-main, +.sb-content, +.sb-container, +article { + flex-grow: 1; +} + +/* Because padding making this wider is not fun */ +article { + box-sizing: border-box; +} + +/* The announcements element should never be wider than the page. */ +.sb-announcement { + max-width: 100%; +} + +.sb-sidebar-primary, +.sb-sidebar-secondary { + flex-shrink: 0; + width: 17rem; +} + +.sb-announcement__inner { + justify-content: center; + + box-sizing: border-box; + height: 3rem; + + overflow-x: auto; + white-space: nowrap; +} + +/* Sidebars, with checkbox-based toggle */ +.sb-sidebar-primary, +.sb-sidebar-secondary { + position: fixed; + height: 100%; + top: 0; +} + +.sb-sidebar-primary { + left: -17rem; + transition: left 250ms ease-in-out; +} +.sb-sidebar-secondary { + right: -17rem; + transition: right 250ms ease-in-out; +} + +.sb-sidebar-toggle { + display: none; +} +.sb-sidebar-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + + transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease; + + opacity: 0; + background-color: rgba(0, 0, 0, 0.54); +} + +#sb-sidebar-toggle--primary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"], +#sb-sidebar-toggle--secondary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] { + width: 100%; + height: 100%; + opacity: 1; + transition: width 0ms ease, height 0ms ease, opacity 250ms ease; +} + +#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary { + left: 0; +} +#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary { + right: 0; +} + +/* Full-width mode */ +.drop-secondary-sidebar-for-full-width-content + .hide-when-secondary-sidebar-shown { + display: none !important; +} +.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary { + display: none !important; +} + +/* Mobile views */ +.sb-page-width { + width: 100%; +} + +.sb-article-container, +.sb-footer-content__inner, +.drop-secondary-sidebar-for-full-width-content .sb-article, +.drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 100vw; +} + +.sb-article, +.match-content-width { + padding: 0 1rem; + box-sizing: border-box; +} + +@media (min-width: 32rem) { + .sb-article, + .match-content-width { + padding: 0 2rem; + } +} + +/* Tablet views */ +@media (min-width: 42rem) { + .sb-article-container { + width: auto; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 42rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 46rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 46rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 50rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 50rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Tablet views */ +@media (min-width: 59rem) { + .sb-sidebar-secondary { + position: static; + } + .hide-when-secondary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 63rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 67rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Desktop views */ +@media (min-width: 76rem) { + .sb-sidebar-primary { + position: static; + } + .hide-when-primary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} + +/* Full desktop views */ +@media (min-width: 80rem) { + .sb-article, + .match-content-width { + width: 46rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } +} + +@media (min-width: 84rem) { + .sb-article, + .match-content-width { + width: 50rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } +} + +@media (min-width: 88rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-page-width { + width: 88rem; + } +} diff --git a/docs/build/html/_static/sphinx_highlight.js b/docs/build/html/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/docs/build/html/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/build/html/_static/styles/furo-extensions.css b/docs/build/html/_static/styles/furo-extensions.css new file mode 100644 index 0000000..bc447f2 --- /dev/null +++ b/docs/build/html/_static/styles/furo-extensions.css @@ -0,0 +1,2 @@ +#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} +/*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/docs/build/html/_static/styles/furo-extensions.css.map b/docs/build/html/_static/styles/furo-extensions.css.map new file mode 100644 index 0000000..9ba5637 --- /dev/null +++ b/docs/build/html/_static/styles/furo-extensions.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/docs/build/html/_static/styles/furo.css b/docs/build/html/_static/styles/furo.css new file mode 100644 index 0000000..3d29a21 --- /dev/null +++ b/docs/build/html/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#646776;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);text-decoration-color:var(--color-link-underline--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1rem;vertical-align:middle;width:1rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1rem;width:1rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg{color:inherit;height:1rem;width:1rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{fill:currentColor;display:inline-block;height:1rem;width:1rem}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.25rem;width:1.25rem}:target{scroll-margin-top:var(--header-height)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:3.5rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-bottom:.125rem;margin-top:.125rem}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>p,div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree .reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} +/*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/docs/build/html/_static/styles/furo.css.map b/docs/build/html/_static/styles/furo.css.map new file mode 100644 index 0000000..d1dfb10 --- /dev/null +++ b/docs/build/html/_static/styles/furo.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo.css","mappings":"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0CACE,CAFF,kBACA,CACE,wEACA,CARA,YACA,CAKF,mBAFF,OAII,eACA,CAJF,iCAJE,cAGJ,CANI,oBAEA,CAKF,SAIE,2BADA,UACA,kBAGF,sCACA,CAFF,WACE,WACA,qCACE,gCACA,2EACA,sDAKJ,aACE,mDAII,CAJJ,6CAII,kEACA,iBACE,iDACA,+CACE,aACA,WADA,+BACA,uEANN,YACE,mDAEE,mBADF,0CACE,CADF,qBACE,0DACA,YACE,4DACA,sEANN,YACE,8CACA,kBADA,UACA,2CACE,2EACA,cACE,kEACA,mEANN,yBACE,4DACA,sBACE,+EAEE,iEACA,qEANN,sCACE,CAGE,iBAHF,gBAGE,qBACE,CAJJ,uBACA,gDACE,wDACA,6DAHF,2CACA,CADA,gBACA,eACE,CAGE,sBANN,8BACE,CAII,iBAFF,4DACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCrEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDACA,qCAGA,6BACA,kBACA,qDAKA,oCAEA,+DAGA,2CAGE,oDAIA,oEAEE,qBAGJ,wDAEE,uCAEF,kEAGA,8CAEA,uDAKA,oCAEA,yDAEE,gEAKF,+CC5FA,0EAGE,CACA,qDCLJ,+DAIE,sCAIA,kEACE,yBACA,2FAMA,gBACA,yGCbF,mBAOA,2MAIA,4HAYA,0DACE,8GAYF,8HAQE,mBAEA,6HAOF,YAGA,mIAME,eACA,CAFF,YAEE,4FAMJ,8BAEE,uBAYA,sCAEE,CAJF,oBAEA,CARA,wCAEA,CAHA,8BACA,CAFA,eACA,CAGA,wCAEA,CAEA,mDAIE,kCACE,6BACA,4CAKJ,kDAIA,eACE,aAGF,8BACE,uDACA,sCACA,cAEA,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","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto\n display: block\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #646776; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2962ff;\n --color-brand-content: #2a5adf;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link-underline--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #ffffffcc; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2b8cee;\n --color-brand-content: #368ce2;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n vertical-align: middle\n\n.theme-toggle\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n vertical-align: middle\n height: 1rem\n width: 1rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n float: left\n padding: 1rem 0.5rem\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: 1rem\n width: 1rem\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page svg\n color: inherit\n height: 1rem\n width: 1rem\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $full-width - $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n .theme-toggle-header\n display: block\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: var(--header-height)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Center the page, and accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n .content\n margin-left: auto\n margin-right: auto\n\n@media (max-width: $content-width + 2* $content-padding)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n .content\n padding: 0 $content-padding--small\n // Don't float sidebars to the right.\n article aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 3.5rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\n.versionmodified\n font-style: italic\ndiv.versionadded, div.versionchanged, div.deprecated\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > p,\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 0.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(0.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(0.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the

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ŜXHW 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 z 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 CMz>tH>skABz?{V@QWU{h>{%`q5T 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Ƚ$rm7^RNI5u^3CR49l?+tFQ)Zu^t<+ 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Ƚ$rm7^RNI5 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 Y*|*(MeOGnnrSqRUIUpc+(M@OnA6$i%-~a#s literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9ff6e598a1eeb835cdf79d347724780925a1727d GIT binary patch literal 4774 zcmbtY&5t8T6`$Ezd+Zr|Jf37jq}d4@p^%M;$19WrT8R@JfE9CC5pGeZ++B9nOm}tD zRlVaOS_uvtGE&`AC`g=d5G>j1epRpDtM_}K{#EC< zzdzdYA3M^SkZO6#qDZ9?*Ut8$G%OOXjQi4k@N4(nJ+%FtUFx*RL+eG|76@4|rJ!uLIV-^cd@e2;C%3&NdYwp^As9Y__%Ma1VauCAW2WyCWh+><-7 z4$C}@u;n67XYSf|g^VJg{)HV@tQFzf_EeF~c+MmDWXtY(kaeo!D{$?>c~(*j@g4D9 zaUwp11$S`iDG(BE#qFrN-{dl9S;lk6+IJ!TNo}n992jlCbk&uw9o7VU^kWstkn0Cb zMGp*{(QUn-z4gka%E=((V**5+oQZeHkJhx@REZp7=+!wEPa7QfXGI)y6U0)lqG_dK z-}Y%GkcKBOBaKzKIa|OAqP1#ApTQxYe~O6ln0{K`Wy=mSj(e&_u*CWr!($L0Z!+|4 zS1KPQb(ll3%gQdj`gFIl#%DKMjtlDXtGh^MDd~jPl}Z{>@paX=%iV_Dz#BrDH~AImq&Kk#k+P zG#!%~7MHcR+T%-cLGrfkL0II}Fa=F}G^iM8-wD3{%=eTm2c?gd8!PGinHCH zv$#OnY)ZxG%=VF5dCp9lJG?{;?Ui9khL`Rk?;jP6d+jdCZB$|t0IZyM%fpVbH!DIniBx+JMjyx_YJm#JfTuLK?y19eI zilOTE&g>xPS(>9P^Jg4JyJPnRi<{Su9rLAxtqe1Tt~YgTC*reW0dWUZXQ6bSadd1F5pY1nB-KtuLJI7iK>B-b710-(O!0c%G+uAmEuXIvs$GyM?G*qqH#V zr*!-&&YoGfIx5!a2bsd@X>`sht;;AX^-EcCkR2u?<0^aIxPa^`)F|ic=-w!9aB`nbJPNk z7|R45%1;m9w+9)|0%}_ji^xY1f}Smdze9Hl4*Rw+Cex3nQ;_v(c4b7WPSbobb@m?Z z^a@~SfQAw97{Jj3ee&L;k6_P(d>(EbPn6a1->#2GurhMl3!a}!ZsuMF!hR}D5<^%Y zSrSnc(In8bC-BK6Xu`9(K%g`7kZXIWuasfSK*)uN@rD21jZ<>{fle3#?H2{&TEkFp z`1kTPh|`c&lgCLY(CUT&zKl0m*_#mD7exjUG-dj!qRIo;@SZf3Y7QT$6T=au3SG=L z_Q`~tH%?g@jWifuIQR_al?Wkx1r-EGuXt_mh1hiwaI~CpfPt9Ot5%A`HILvFqHJ| zH#WCQCH)lEWZsV5{-_>b@KpBa;`sav#JzsSlww~J)2?pkpM#BR5$-Ww>61w1$K~_i zV7YEL?e?Qa@S~OB-`ynm73bX`y0AxU_b%sen$=%Y{`>{Ry;9Y$uuu>f^P1fc6Ey5U z$4o-R^7-NU18hA%p`W+u=bq>6(+-+2JUV{QwO_w3#JkYNGl+rTEuI#3*p3Jm(5*B>no+8CyB1N*oUnLqrRSImf^BQ@-A^W)4 kul_JV94_epmc57yNR?};2eNy~6-Hql7wAEryJB|wAEK5fZU6uP literal 0 HcmV?d00001 diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo new file mode 100644 index 0000000..6ba420c --- /dev/null +++ b/docs/build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 7c929d0f0ff51360581d08bed579ed53 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_sources/index.md.txt b/docs/build/html/_sources/index.md.txt new file mode 100644 index 0000000..5873f0a --- /dev/null +++ b/docs/build/html/_sources/index.md.txt @@ -0,0 +1,17 @@ +# braingeneers + +```{toctree} +:maxdepth: 2 +:hidden: + +``` + +```{include} ../README.md +:start-after: +``` + +## Indices and tables + +- {ref}`genindex` +- {ref}`modindex` +- {ref}`search` diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css new file mode 100644 index 0000000..30fee9d --- /dev/null +++ b/docs/build/html/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/build/html/_static/check-solid.svg b/docs/build/html/_static/check-solid.svg new file mode 100644 index 0000000..92fad4b --- /dev/null +++ b/docs/build/html/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/build/html/_static/clipboard.min.js b/docs/build/html/_static/clipboard.min.js new file mode 100644 index 0000000..54b3c46 --- /dev/null +++ b/docs/build/html/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/docs/build/html/_static/copybutton.css b/docs/build/html/_static/copybutton.css new file mode 100644 index 0000000..f1916ec --- /dev/null +++ b/docs/build/html/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *