From 80170c183794168968ae9c435d0683e4f2ef6acd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 2 Oct 2024 11:35:24 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20mschelti?= =?UTF-8?q?enne/stimuli@20f2599ae919d00923f946d4e294b1b82f9e4bdc=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + .nojekyll | 0 .../30_apply_a_window.py | 113 +++ .../40_sychronize_sound_and_trigger.ipynb | 61 ++ .../30_apply_a_window.ipynb | 140 +++ .../10_base_sounds.py | 122 +++ .../10_base_sounds.zip | Bin 0 -> 11022 bytes .../20_colored_noise.zip | Bin 0 -> 6366 bytes .../tutorials_jupyter.zip | Bin 0 -> 19606 bytes .../20_colored_noise.py | 63 ++ .../40_sychronize_sound_and_trigger.zip | Bin 0 -> 3516 bytes .../10_base_sounds.ipynb | 230 +++++ .../30_apply_a_window.zip | Bin 0 -> 9888 bytes .../20_colored_noise.ipynb | 97 ++ .../tutorials_python.zip | Bin 0 -> 11142 bytes .../40_sychronize_sound_and_trigger.py | 37 + _images/sphx_glr_10_base_sounds_001.png | Bin 0 -> 25581 bytes _images/sphx_glr_10_base_sounds_002.png | Bin 0 -> 11555 bytes _images/sphx_glr_10_base_sounds_thumb.png | Bin 0 -> 17784 bytes _images/sphx_glr_20_colored_noise_001.png | Bin 0 -> 62575 bytes _images/sphx_glr_20_colored_noise_thumb.png | Bin 0 -> 54587 bytes _images/sphx_glr_30_apply_a_window_001.png | Bin 0 -> 55909 bytes _images/sphx_glr_30_apply_a_window_002.png | Bin 0 -> 60360 bytes _images/sphx_glr_30_apply_a_window_003.png | Bin 0 -> 59498 bytes _images/sphx_glr_30_apply_a_window_thumb.png | Bin 0 -> 48581 bytes ..._40_sychronize_sound_and_trigger_thumb.png | Bin 0 -> 25603 bytes _sources/api/audio.rst.txt | 58 ++ _sources/api/index.rst.txt | 22 + _sources/api/time.rst.txt | 50 + _sources/api/triggers.rst.txt | 39 + _sources/api/utilities.rst.txt | 23 + _sources/changes/0.1.rst.txt | 24 + _sources/changes/0.2.rst.txt | 30 + _sources/changes/0.3.rst.txt | 23 + _sources/changes/0.4.rst.txt | 26 + _sources/changes/0.5.rst.txt | 31 + _sources/changes/index.rst.txt | 12 + _sources/changes/latest.rst.txt | 26 + .../api/stimuli.add_file_handler.rst.txt | 9 + .../generated/api/stimuli.audio.Noise.rst.txt | 11 + .../generated/api/stimuli.audio.Sound.rst.txt | 11 + .../api/stimuli.audio.SoundAM.rst.txt | 11 + .../generated/api/stimuli.audio.Tone.rst.txt | 11 + .../api/stimuli.audio.backend.SoundSD.rst.txt | 11 + .../api/stimuli.set_log_level.rst.txt | 9 + .../generated/api/stimuli.sys_info.rst.txt | 9 + .../api/stimuli.time.BaseClock.rst.txt | 11 + .../generated/api/stimuli.time.Clock.rst.txt | 11 + .../generated/api/stimuli.time.sleep.rst.txt | 9 + .../api/stimuli.triggers.LSLTrigger.rst.txt | 11 + .../api/stimuli.triggers.MockTrigger.rst.txt | 11 + ...imuli.triggers.ParallelPortTrigger.rst.txt | 11 + .../tutorials/10_base_sounds.rst.txt | 343 +++++++ .../tutorials/20_colored_noise.rst.txt | 167 ++++ .../tutorials/30_apply_a_window.rst.txt | 252 +++++ .../40_sychronize_sound_and_trigger.rst.txt | 124 +++ _sources/generated/tutorials/index.rst.txt | 115 +++ .../tutorials/sg_execution_times.rst.txt | 46 + _sources/index.rst.txt | 58 ++ _sources/sg_execution_times.rst.txt | 46 + _sphinx_design_static/design-tabs.js | 101 ++ _sphinx_design_static/sphinx-design.min.css | 1 + _static/basic.css | 925 ++++++++++++++++++ _static/binder_badge_logo.svg | 1 + _static/broken_example.png | Bin 0 -> 21404 bytes _static/check-solid.svg | 4 + _static/clipboard.min.js | 7 + _static/copy-button.svg | 5 + _static/copybutton.css | 94 ++ _static/copybutton.js | 248 +++++ _static/copybutton_funcs.js | 73 ++ _static/css/style.css | 4 + _static/debug.css | 69 ++ _static/design-tabs.js | 101 ++ _static/doctools.js | 156 +++ _static/documentation_options.js | 13 + _static/file.png | Bin 0 -> 286 bytes _static/jupyterlite_badge_logo.svg | 3 + _static/language_data.js | 199 ++++ _static/minus.png | Bin 0 -> 90 bytes _static/no_image.png | Bin 0 -> 4315 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 258 +++++ _static/scripts/furo-extensions.js | 0 _static/scripts/furo.js | 3 + _static/scripts/furo.js.LICENSE.txt | 7 + _static/scripts/furo.js.map | 1 + _static/searchtools.js | 620 ++++++++++++ _static/sg_gallery-binder.css | 11 + _static/sg_gallery-dataframe.css | 47 + _static/sg_gallery-rendered-html.css | 224 +++++ _static/sg_gallery.css | 367 +++++++ _static/skeleton.css | 296 ++++++ _static/sphinx-design.min.css | 1 + _static/sphinx_highlight.js | 154 +++ _static/styles/furo-extensions.css | 2 + _static/styles/furo-extensions.css.map | 1 + _static/styles/furo.css | 2 + _static/styles/furo.css.map | 1 + api/audio.html | 428 ++++++++ api/index.html | 570 +++++++++++ api/time.html | 392 ++++++++ api/triggers.html | 395 ++++++++ api/utilities.html | 362 +++++++ changes/0.1.html | 364 +++++++ changes/0.2.html | 380 +++++++ changes/0.3.html | 371 +++++++ changes/0.4.html | 374 +++++++ changes/0.5.html | 381 ++++++++ changes/index.html | 349 +++++++ changes/latest.html | 371 +++++++ generated/api/stimuli.add_file_handler.html | 384 ++++++++ generated/api/stimuli.audio.Noise.html | 594 +++++++++++ generated/api/stimuli.audio.Sound.html | 583 +++++++++++ generated/api/stimuli.audio.SoundAM.html | 640 ++++++++++++ generated/api/stimuli.audio.Tone.html | 597 +++++++++++ .../api/stimuli.audio.backend.SoundSD.html | 495 ++++++++++ generated/api/stimuli.set_log_level.html | 375 +++++++ generated/api/stimuli.sys_info.html | 375 +++++++ generated/api/stimuli.time.BaseClock.html | 448 +++++++++ generated/api/stimuli.time.Clock.html | 450 +++++++++ generated/api/stimuli.time.sleep.html | 383 ++++++++ .../api/stimuli.triggers.LSLTrigger.html | 483 +++++++++ .../api/stimuli.triggers.MockTrigger.html | 399 ++++++++ .../stimuli.triggers.ParallelPortTrigger.html | 491 ++++++++++ generated/tutorials/10_base_sounds.html | 491 ++++++++++ generated/tutorials/20_colored_noise.html | 409 ++++++++ generated/tutorials/30_apply_a_window.html | 472 +++++++++ .../40_sychronize_sound_and_trigger.html | 394 ++++++++ generated/tutorials/index.html | 362 +++++++ generated/tutorials/sg_execution_times.html | 363 +++++++ genindex.html | 665 +++++++++++++ index.html | 410 ++++++++ objects.inv | Bin 0 -> 2762 bytes search.html | 326 ++++++ searchindex.js | 1 + sg_execution_times.html | 363 +++++++ 137 files changed, 22215 insertions(+) create mode 100644 .gitignore create mode 100644 .nojekyll create mode 100644 _downloads/0d95c47479bb83aaf162357584d36ccd/30_apply_a_window.py create mode 100644 _downloads/23dcf1a3cfcdf770fbf9a4983f0a29ed/40_sychronize_sound_and_trigger.ipynb create mode 100644 _downloads/5cd9f36d95a835433df7ed54eca518a8/30_apply_a_window.ipynb create mode 100644 _downloads/675b7bca8802f0a50427069cf96a827c/10_base_sounds.py create mode 100644 _downloads/7ec0d0fd406c43e8cb0af6584c5a702b/10_base_sounds.zip create mode 100644 _downloads/8e88ab6e3d6f4deb376ff4f552ae5d6c/20_colored_noise.zip create mode 100644 _downloads/9d554c47ca875f7ea767f890b94bedca/tutorials_jupyter.zip create mode 100644 _downloads/b603a0a351f8dafd8d43fa97b0940fb9/20_colored_noise.py create mode 100644 _downloads/ca550b1c98bc489fc59fe39bf75d7352/40_sychronize_sound_and_trigger.zip create mode 100644 _downloads/d74af7fa5e442c539cd6cf29b1bc5e0a/10_base_sounds.ipynb create mode 100644 _downloads/d8e802f167772d78d013fdd35a0fe97d/30_apply_a_window.zip create mode 100644 _downloads/f01b4282b71ffa5d3fa91785b3b43173/20_colored_noise.ipynb create mode 100644 _downloads/f39435c137e7c92d0a271e51aa1187ac/tutorials_python.zip create mode 100644 _downloads/fb6d04b7c6a1d59103ae95ed9c796516/40_sychronize_sound_and_trigger.py create mode 100644 _images/sphx_glr_10_base_sounds_001.png create mode 100644 _images/sphx_glr_10_base_sounds_002.png create mode 100644 _images/sphx_glr_10_base_sounds_thumb.png create mode 100644 _images/sphx_glr_20_colored_noise_001.png create mode 100644 _images/sphx_glr_20_colored_noise_thumb.png create mode 100644 _images/sphx_glr_30_apply_a_window_001.png create mode 100644 _images/sphx_glr_30_apply_a_window_002.png create mode 100644 _images/sphx_glr_30_apply_a_window_003.png create mode 100644 _images/sphx_glr_30_apply_a_window_thumb.png create mode 100644 _images/sphx_glr_40_sychronize_sound_and_trigger_thumb.png create mode 100644 _sources/api/audio.rst.txt create mode 100644 _sources/api/index.rst.txt create mode 100644 _sources/api/time.rst.txt create mode 100644 _sources/api/triggers.rst.txt create mode 100644 _sources/api/utilities.rst.txt create mode 100644 _sources/changes/0.1.rst.txt create mode 100644 _sources/changes/0.2.rst.txt create mode 100644 _sources/changes/0.3.rst.txt create mode 100644 _sources/changes/0.4.rst.txt create mode 100644 _sources/changes/0.5.rst.txt create mode 100644 _sources/changes/index.rst.txt create mode 100644 _sources/changes/latest.rst.txt create mode 100644 _sources/generated/api/stimuli.add_file_handler.rst.txt create mode 100644 _sources/generated/api/stimuli.audio.Noise.rst.txt create mode 100644 _sources/generated/api/stimuli.audio.Sound.rst.txt create mode 100644 _sources/generated/api/stimuli.audio.SoundAM.rst.txt create mode 100644 _sources/generated/api/stimuli.audio.Tone.rst.txt create mode 100644 _sources/generated/api/stimuli.audio.backend.SoundSD.rst.txt create mode 100644 _sources/generated/api/stimuli.set_log_level.rst.txt create mode 100644 _sources/generated/api/stimuli.sys_info.rst.txt create mode 100644 _sources/generated/api/stimuli.time.BaseClock.rst.txt create mode 100644 _sources/generated/api/stimuli.time.Clock.rst.txt create mode 100644 _sources/generated/api/stimuli.time.sleep.rst.txt create mode 100644 _sources/generated/api/stimuli.triggers.LSLTrigger.rst.txt create mode 100644 _sources/generated/api/stimuli.triggers.MockTrigger.rst.txt create mode 100644 _sources/generated/api/stimuli.triggers.ParallelPortTrigger.rst.txt create mode 100644 _sources/generated/tutorials/10_base_sounds.rst.txt create mode 100644 _sources/generated/tutorials/20_colored_noise.rst.txt create mode 100644 _sources/generated/tutorials/30_apply_a_window.rst.txt create mode 100644 _sources/generated/tutorials/40_sychronize_sound_and_trigger.rst.txt create mode 100644 _sources/generated/tutorials/index.rst.txt create mode 100644 _sources/generated/tutorials/sg_execution_times.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/sg_execution_times.rst.txt create mode 100644 _sphinx_design_static/design-tabs.js create mode 100644 _sphinx_design_static/sphinx-design.min.css create mode 100644 _static/basic.css create mode 100644 _static/binder_badge_logo.svg create mode 100644 _static/broken_example.png create mode 100644 _static/check-solid.svg create mode 100644 _static/clipboard.min.js create mode 100644 _static/copy-button.svg create mode 100644 _static/copybutton.css create mode 100644 _static/copybutton.js create mode 100644 _static/copybutton_funcs.js create mode 100644 _static/css/style.css create mode 100644 _static/debug.css create mode 100644 _static/design-tabs.js create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/file.png create mode 100644 _static/jupyterlite_badge_logo.svg create mode 100644 _static/language_data.js create mode 100644 _static/minus.png create mode 100644 _static/no_image.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/scripts/furo-extensions.js create mode 100644 _static/scripts/furo.js create mode 100644 _static/scripts/furo.js.LICENSE.txt create mode 100644 _static/scripts/furo.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/sg_gallery-binder.css create mode 100644 _static/sg_gallery-dataframe.css create mode 100644 _static/sg_gallery-rendered-html.css create mode 100644 _static/sg_gallery.css create mode 100644 _static/skeleton.css create mode 100644 _static/sphinx-design.min.css create mode 100644 _static/sphinx_highlight.js create mode 100644 _static/styles/furo-extensions.css create mode 100644 _static/styles/furo-extensions.css.map create mode 100644 _static/styles/furo.css create mode 100644 _static/styles/furo.css.map create mode 100644 api/audio.html create mode 100644 api/index.html create mode 100644 api/time.html create mode 100644 api/triggers.html create mode 100644 api/utilities.html create mode 100644 changes/0.1.html create mode 100644 changes/0.2.html create mode 100644 changes/0.3.html create mode 100644 changes/0.4.html create mode 100644 changes/0.5.html create mode 100644 changes/index.html create mode 100644 changes/latest.html create mode 100644 generated/api/stimuli.add_file_handler.html create mode 100644 generated/api/stimuli.audio.Noise.html create mode 100644 generated/api/stimuli.audio.Sound.html create mode 100644 generated/api/stimuli.audio.SoundAM.html create mode 100644 generated/api/stimuli.audio.Tone.html create mode 100644 generated/api/stimuli.audio.backend.SoundSD.html create mode 100644 generated/api/stimuli.set_log_level.html create mode 100644 generated/api/stimuli.sys_info.html create mode 100644 generated/api/stimuli.time.BaseClock.html create mode 100644 generated/api/stimuli.time.Clock.html create mode 100644 generated/api/stimuli.time.sleep.html create mode 100644 generated/api/stimuli.triggers.LSLTrigger.html create mode 100644 generated/api/stimuli.triggers.MockTrigger.html create mode 100644 generated/api/stimuli.triggers.ParallelPortTrigger.html create mode 100644 generated/tutorials/10_base_sounds.html create mode 100644 generated/tutorials/20_colored_noise.html create mode 100644 generated/tutorials/30_apply_a_window.html create mode 100644 generated/tutorials/40_sychronize_sound_and_trigger.html create mode 100644 generated/tutorials/index.html create mode 100644 generated/tutorials/sg_execution_times.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 search.html create mode 100644 searchindex.js create mode 100644 sg_execution_times.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a0090b46 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# macOS +.DS_Store diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/_downloads/0d95c47479bb83aaf162357584d36ccd/30_apply_a_window.py b/_downloads/0d95c47479bb83aaf162357584d36ccd/30_apply_a_window.py new file mode 100644 index 00000000..638da8b0 --- /dev/null +++ b/_downloads/0d95c47479bb83aaf162357584d36ccd/30_apply_a_window.py @@ -0,0 +1,113 @@ +""" +============== +Apply a window +============== + +.. include:: ../../links.inc + +In signal processing and statistics, a window function (also known as an +apodization function or tapering function) is a mathematical function that is +zero-valued outside of some chosen interval, normally symmetric around the +middle of the interval, usually near a maximum in the middle, and usually +tapering away from the middle. Mathematically, when another function or +waveform/data-sequence is "multiplied" by a window function, the product is +also zero-valued outside the interval: all that is left is the part where they +overlap, the "view through the window". + +Source: `Wikipedia `_ + +A sound waveform might have an abrupt onset or offset. It is often preferred to +apply a window to ramp up and ramp down the volume. +""" + +# %% + +# sphinx_gallery_thumbnail_number = 3 + +import numpy as np +from matplotlib import pyplot as plt +from scipy.signal.windows import tukey + +from stimuli.audio import Tone + +# %% +# +# In this tutorial, we will create a pure tone auditory stimuli and apply a +# window with a linear ramp-up and a linear ramp-down to smooth the onset and +# offset. + +# %% +# Create a pure tone +# ------------------ +# +# To create the stimuli, we create a :class:`~stimuli.audio.Tone` object with +# a given volume and frequency. + +sound = Tone(frequency=200, volume=10, duration=0.1) + +# %% +# By default, a generated signal will have a rectangular window applied. A +# recctangular window is equal to 0 outside of the signal definition range, and +# to 1 inside. We can plot the waveform of one of the channels: + +# draw the waveform +_, ax = sound.plot() +ax.set_title("Waveform - Rectangular window") + +# overlay a rectangular window +# note: for demonstration purposes, we make the window 20% longer than the +# signal by extending it by 10% before and after the signal. +extension = int(0.1 * sound.times.size) +window = np.zeros(extension + sound.times.size + extension) +window[extension + 1 : extension + sound.times.size] = 1 / sound.volume +# determine the timestamps associated to each sample in the window (ms) +window_times = np.arange(0, 1 / sound.sample_rate * window.size, 1 / sound.sample_rate) +window_times -= extension / sound.sample_rate +# draw the window +ax.plot(window_times, window, color="crimson") +plt.show() + +# %% +# Create a different window +# ------------------------- +# +# For this tutorial, we will define a window with a ramp from ``0`` to ``1`` +# during the first 10% of the total duration, and a ramp from ``1`` to ``0`` +# during the last 10% of the total duration. A correctly defined window is a +# 1D `~numpy.array` with the same number of samples as the sound. + +window = np.ones(sound.times.size) +n_samples_ramp = int(0.1 * sound.times.size) +ramp = np.linspace(start=0, stop=1, num=n_samples_ramp) +window[:n_samples_ramp] = ramp +window[-n_samples_ramp:] = ramp[::-1] + +# %% +# Change the window +# ----------------- +# +# We can change the applied window by setting the property ``window``. + +sound.window = window + +# draw the modified sound and the window +_, ax = sound.plot() +ax.set_title("Waveform - Ramp onset/offset window") +ax.plot(sound.times, window / sound.volume, color="crimson") # overlay the window +plt.show() + +# %% +# Scipy windows +# ------------- +# +# `scipy`_ has many windows implemented in :mod:`scipy.signal.windows`. For instance +# we can use a Tukey window with the function `~scipy.signal.windows.tukey`. + +window = tukey(sound.times.size) +sound.window = window + +# draw the modified sound and the window +_, ax = sound.plot() +ax.set_title("Waveform - Tukey window") +ax.plot(sound.times, window / sound.volume, color="crimson") # overlay the window +plt.show() diff --git a/_downloads/23dcf1a3cfcdf770fbf9a4983f0a29ed/40_sychronize_sound_and_trigger.ipynb b/_downloads/23dcf1a3cfcdf770fbf9a4983f0a29ed/40_sychronize_sound_and_trigger.ipynb new file mode 100644 index 00000000..f3512f50 --- /dev/null +++ b/_downloads/23dcf1a3cfcdf770fbf9a4983f0a29ed/40_sychronize_sound_and_trigger.ipynb @@ -0,0 +1,61 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n# Synchronize sound and trigger\n\nOften, a trigger must be emitted simultenously with a sound onset, with as little delay\nand jitter as possible. With ``stimuli``, similarly to ``psychtoolbox``, the key concept\nis to schedule the sound.\n\nFirst, let's have a look at our default device latency.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import sounddevice as sd\n\nfrom stimuli.audio import SoundAM\nfrom stimuli.time import sleep\nfrom stimuli.triggers import MockTrigger\n\nidx = sd.default.device[\"output\"]\nprint(f\"Low-latency (s): {sd.query_devices()[idx]['default_low_output_latency']}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we can schedule a sound with the argument ``when`` which will use the clock\nprovided in the argument ``clock`` to schedule the sound. Then, we wait for this\nduration to elapse before sending the trigger.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "trigger = MockTrigger() # replace with your trigger object\nsound = SoundAM(\n frequency_carrier=1000,\n frequency_modulation=40,\n method=\"dsbsc\",\n volume=10,\n duration=1,\n)\nsound.play(when=0.5, blocking=False)\nsleep(0.5)\ntrigger.signal(1)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/_downloads/5cd9f36d95a835433df7ed54eca518a8/30_apply_a_window.ipynb b/_downloads/5cd9f36d95a835433df7ed54eca518a8/30_apply_a_window.ipynb new file mode 100644 index 00000000..439cb6a5 --- /dev/null +++ b/_downloads/5cd9f36d95a835433df7ed54eca518a8/30_apply_a_window.ipynb @@ -0,0 +1,140 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n# Apply a window\n\n.. include:: ../../links.inc\n\nIn signal processing and statistics, a window function (also known as an\napodization function or tapering function) is a mathematical function that is\nzero-valued outside of some chosen interval, normally symmetric around the\nmiddle of the interval, usually near a maximum in the middle, and usually\ntapering away from the middle. Mathematically, when another function or\nwaveform/data-sequence is \"multiplied\" by a window function, the product is\nalso zero-valued outside the interval: all that is left is the part where they\noverlap, the \"view through the window\".\n\nSource: [Wikipedia](https://en.wikipedia.org/wiki/Window_function)\n\nA sound waveform might have an abrupt onset or offset. It is often preferred to\napply a window to ramp up and ramp down the volume.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\nfrom matplotlib import pyplot as plt\nfrom scipy.signal.windows import tukey\n\nfrom stimuli.audio import Tone" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this tutorial, we will create a pure tone auditory stimuli and apply a\nwindow with a linear ramp-up and a linear ramp-down to smooth the onset and\noffset.\n\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create a pure tone\n\nTo create the stimuli, we create a :class:`~stimuli.audio.Tone` object with\na given volume and frequency.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sound = Tone(frequency=200, volume=10, duration=0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By default, a generated signal will have a rectangular window applied. A\nrecctangular window is equal to 0 outside of the signal definition range, and\nto 1 inside. We can plot the waveform of one of the channels:\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# draw the waveform\n_, ax = sound.plot()\nax.set_title(\"Waveform - Rectangular window\")\n\n# overlay a rectangular window\n# note: for demonstration purposes, we make the window 20% longer than the\n# signal by extending it by 10% before and after the signal.\nextension = int(0.1 * sound.times.size)\nwindow = np.zeros(extension + sound.times.size + extension)\nwindow[extension + 1 : extension + sound.times.size] = 1 / sound.volume\n# determine the timestamps associated to each sample in the window (ms)\nwindow_times = np.arange(0, 1 / sound.sample_rate * window.size, 1 / sound.sample_rate)\nwindow_times -= extension / sound.sample_rate\n# draw the window\nax.plot(window_times, window, color=\"crimson\")\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create a different window\n\nFor this tutorial, we will define a window with a ramp from ``0`` to ``1``\nduring the first 10% of the total duration, and a ramp from ``1`` to ``0``\nduring the last 10% of the total duration. A correctly defined window is a\n1D `~numpy.array` with the same number of samples as the sound.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "window = np.ones(sound.times.size)\nn_samples_ramp = int(0.1 * sound.times.size)\nramp = np.linspace(start=0, stop=1, num=n_samples_ramp)\nwindow[:n_samples_ramp] = ramp\nwindow[-n_samples_ramp:] = ramp[::-1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Change the window\n\nWe can change the applied window by setting the property ``window``.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sound.window = window\n\n# draw the modified sound and the window\n_, ax = sound.plot()\nax.set_title(\"Waveform - Ramp onset/offset window\")\nax.plot(sound.times, window / sound.volume, color=\"crimson\") # overlay the window\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Scipy windows\n\n`scipy`_ has many windows implemented in :mod:`scipy.signal.windows`. For instance\nwe can use a Tukey window with the function `~scipy.signal.windows.tukey`.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "window = tukey(sound.times.size)\nsound.window = window\n\n# draw the modified sound and the window\n_, ax = sound.plot()\nax.set_title(\"Waveform - Tukey window\")\nax.plot(sound.times, window / sound.volume, color=\"crimson\") # overlay the window\nplt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/_downloads/675b7bca8802f0a50427069cf96a827c/10_base_sounds.py b/_downloads/675b7bca8802f0a50427069cf96a827c/10_base_sounds.py new file mode 100644 index 00000000..bda1a863 --- /dev/null +++ b/_downloads/675b7bca8802f0a50427069cf96a827c/10_base_sounds.py @@ -0,0 +1,122 @@ +""" +=========== +Base sounds +=========== + +``stimuli`` provides a common API for audio stimuli. The audio +stimuli can be either generated or loaded. A generated stimuli can be exported. +The volume, duration and other properties can be set when creating the stimuli +or updated between plays. +""" + +# %% + +from pathlib import Path +from tempfile import TemporaryDirectory + +from matplotlib import pyplot as plt + +from stimuli.audio import Sound, Tone + +# sphinx_gallery_thumbnail_number = 1 + +# %% +# +# In this tutorial, we will create, edit, save and load a pure tone auditory +# stimuli. A pure tone is a signal with a sinusoidal waveform, that is a sine +# wave of any frequency, phase-shift and amplitude. +# +# Source: `Wikipedia `_ + +# %% +# Create and edit a pure tone +# --------------------------- +# +# To create the stimuli, we create a :class:`~stimuli.audio.Tone` object with +# a given volume and frequency. + +sound = Tone(frequency=440, volume=10, duration=1) # La - A440 + +# %% +# We can listen to the sound we created with :meth:`~stimuli.audio.Tone.play`. + +sound.play(blocking=True) + +# %% +# We can edit the sound properties by replacing the value in the properties. +# For instance, let's increase the volume and change the frequency. + +sound.volume = 50 # percentage between 0 and 100 +sound.frequency = 1000 # Hz + +# %% +# The sound is updated each time an attribute is changed. + +sound.play(blocking=True) + +# %% +# Export/Load a sound +# ------------------- +# +# We can export a sound with :meth:`~stimuli.audio.Tone.save` and load a sound with +# :class:`~stimuli.audio.Sound`. + +with TemporaryDirectory() as directory: + fname = Path(directory) / "my_pure_tone.wav" + sound.save(fname, overwrite=True) + sound_loaded = Sound(fname) +sound_loaded.play(blocking=True) + +# %% +# However, a loaded sound can be any type of sound. ``stimuli`` does not +# know that the sound was exported with the ``save()`` method of one of its +# class. As such, the attributes that were specific to the original sound are +# not present anymore and can not be updated anymore. + +print(hasattr(sound_loaded, "frequency")) + +# %% +# Only the basic attributes are preserved: ``duration``, ``sample_rate``. + +print(f"Duration of the original sound: {sound.duration} second.") +print(f"Duration of the loaded sound: {sound_loaded.duration} second.") +print(f"Sample rate of the original sound: {sound.sample_rate} Hz.") +print(f"Sample rate of the loaded sound: {sound_loaded.sample_rate} Hz.") + +# %% +# The volume is normalized, with the loudest channel set to ``100``. The ratio +# between channels is preserved. + +print(f"Volume of the original sound: {sound.volume}.") +print(f"Volume of the loaded sound: {sound_loaded.volume}.") + +# %% +# Visualize a sound +# ----------------- +# +# Finally, the underlying signal is stored in the ``signal`` property, a numpy array of +# shape ``(n_samples, n_channels)``. We can plot the signal of each channel. + +samples_to_plot = 100 # number of samples to plot +times = sound.times[:samples_to_plot] * 1000 # ms + +f, ax = plt.subplots(1, 1, layout="constrained") +ax.plot(times, sound.signal.squeeze()[:samples_to_plot]) # draw data +ax.axhline(0, color="black") # draw horizontal line through y=0 + +# labels +ax.set_title("Signal (mono)") +ax.set_xlabel("Time (ms)") + +# draw vertical line after each period +period = int(sound.sample_rate / sound.frequency) +for k in range(0, samples_to_plot, period): + ax.axvline(times[k], color="lightgreen") + +plt.show() + +# %% +# Or with the convenient :meth:`~stimuli.audio.Tone.plot` method. + +sound.plot() +plt.show() diff --git a/_downloads/7ec0d0fd406c43e8cb0af6584c5a702b/10_base_sounds.zip b/_downloads/7ec0d0fd406c43e8cb0af6584c5a702b/10_base_sounds.zip new file mode 100644 index 0000000000000000000000000000000000000000..0f846e6a27c7a027584ddb3f740a6404d6096d71 GIT binary patch literal 11022 zcmds7TW=f36?Wpb4}1tvG>?54tPqq8XiBQx7osZQGz}a$Km$ zDdH?mGb5fJe=Fu$A!IqznW$Ed#OYG`pO`xYSS^(iaiOr!Lsd6iYb$KG!cGM#R_4dRUU-WwOB1=Us-7?Wrp;JOd9OKnbIF;seov3=| z6z^Ffi}lyKP_fI3bp;`nE>AMo0g|t2KuC*2UA3yFp{Hnd+6l33C{8n@2q~K{wYi8E zGD%dij@+_Lr$*`|GWZ4LJrai%?t57Mt-+PG6|Mv_S|&rWQevf(#FGSsR5R^{!pd`S z4WuN7fW>)PDB*AU_ zxO6VJVyaK$)Iq_yM8KWd^ePe;VXiO8mZgLE*taGDegeGcLCqRp3X=rQW`STVs?+S+d> zj-EU@7*<=34)JTP5J!gtA@;;~Qaln*v8cK7kBZeI(bnNGmwDVtxJV{E;`o(VI8K#Y zZp3{=8ZxP|;K98*U@QFs=?Lsn7piZd{jqCr)yCtz>90eJeNrcRU(m9WN#{M z2IIvyP*!cMlO~4DCd&QJ;+>F&>7wNw;>Am87JjrLSA%i2?nwOMfXIX+Vr87f`q~B@ zFb56~4m{;Y4GdDPg9G07>{WBkQ?e+0H3)ZYPn3+80@^|nCZuzPo|X_dtnkRem{rh; zo;OkOFKqetzw;`|hin#37RrjhiZ_uKde+{;Pg48|-?-BJb{o#RL5fcZG)VzV%XOpI zACO&})i!Y46L{uEf*wa~J^RhvKfj4BJOahJn!$iiYKt|Q44E1* z^eUprU_zqhkDdo#*Nz@^A-I<>Hx{owLuz1egjI27W}{$mBZw}GYXG&BY=d(`zDNl| zk+`%48_O&CGH=AQS6yT_0NIAm21sBgB9lE1v?_B3!(!lNWujjx#0rg&B^ey2b!>Hv zf5 zzUvR#mVCR~uwmkwlV&sc4M~22K!Vr`mW3KP}Df*OxRWq~=aqtmM+Au8+-sGM($Q@NN9ClPoh+DLzN6y5;zIkcqw-@6pa9)Zp8xNIQ#FV(m1@<7o9NBV8aBTl@ zDDW3vCoA1i09CQBklLsj6h>aaN@lLl;1Lv(nIHLEj4T2)^$G^-`mr2v%nG>@h^8e$ zkr#-U5w0LEiL)dtj)E!t{8`YhTtbguW$?U-pq1cOk(G<3SRZl3lE^7UkU&9XBd1-W z`oW2hGW$qAvVljJW-oYgKR6|S+fOY`fnkggjJnfteTbYpM99nxFj{A`p8pRtB0E>z zx7A(vCO_7gxHEQ4+maxV@-=zm%%DTiJI*9*7z)QwMQXIV-_+~VGl_T`~k;J#(08^@t^-5Kl#mXA3UHR z$|J92j5=SN>1+7pAXZ6YgRywQ4w{DO;o*oJB&LE?7H6|;WrATn4gV%dGBEr4O*0DA z5PLPi7*J^TL?;^!O=!A~_U&`f5aP`lZ0*Y5Hwg{RDKy(#s5a z`!qB(J`NJ%B~!8@-DaxC*-W(*R~ITSDLsy22!I2TO_?MO>AMW6m_%I6l0@bfmS8OA zGO?+Tduoo*ts-XTdK3brLP}O7zX4+DQ6VX>97!Quu_$b1N$8A$1LBp-YmpU|?^K3g;@ABi1 zJu+3}BB(b;8j{#Old7+&E{d#(QtF?y=%5`^gGBd>Flo-h6uOEQ%@wSFe62@9p94nf z0^e9wO9J}hvgwwjXj0alGKXdR7mu#MZw|gTKIIl*;Q*dLi7YlzB4003^ayQ~pb5k) zsta@|+2S8O9vvQz4i74V;WkXPz)YdD=)K^CCxm-55TzRN5QYzWZ;qdT^6BRfZ~pL< zK1ikK=bz}`D^10G-QB*a3rU;k`T3{c<4e{n+qoxs{QQ@{q7|Rw51q04lHUFUm||b- literal 0 HcmV?d00001 diff --git a/_downloads/8e88ab6e3d6f4deb376ff4f552ae5d6c/20_colored_noise.zip b/_downloads/8e88ab6e3d6f4deb376ff4f552ae5d6c/20_colored_noise.zip new file mode 100644 index 0000000000000000000000000000000000000000..206de39e9429a34709e43de064025e9e622f4ed8 GIT binary patch literal 6366 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 Me`9NF{3$>EAGV~D>;M1& literal 0 HcmV?d00001 diff --git a/_downloads/b603a0a351f8dafd8d43fa97b0940fb9/20_colored_noise.py b/_downloads/b603a0a351f8dafd8d43fa97b0940fb9/20_colored_noise.py new file mode 100644 index 00000000..bbf6d9e2 --- /dev/null +++ b/_downloads/b603a0a351f8dafd8d43fa97b0940fb9/20_colored_noise.py @@ -0,0 +1,63 @@ +""" +============= +Colored noise +============= + +A noise signal is produced by a stochastic process. The color of noise, also +called the noise spectrum, refers to the power spectrum of a noise signal. + +The practice of naming kinds of noise after colors started with white noise, +a signal whose spectrum has equal power within any equal interval of +frequencies. That name was given by analogy with white light, which was +(incorrectly) assumed to have such a flat power spectrum over the visible +range. Other color names, such as ``pink``, ``red``, and ``blue`` were then +given to noise with other spectral profiles, often (but not always) in +reference to the color of light with similar spectra. Some of those names +have standard definitions in certain disciplines, while others are very +informal and poorly defined. + +Source: `Wikipedia `_ +""" + +# %% + +import numpy as np +from matplotlib import pyplot as plt + +from stimuli.audio import Noise + +# %% +# In this tutorial, we will create and plot the power spectrum of different +# noise colors. ``stimuli`` implements several noise color in +# :class:`~stimuli.audio.Noise`. Refer to the documentation of the ``color`` +# argument for available colors. + +colors = ("white", "pink", "blue", "violet", "brown") +sounds = dict() +for color in colors: + # identical volume on all audio channels + sounds[color] = Noise(color=color, volume=10, duration=1) + +# %% +# We can listen to each individual noise by playing each sound with +# :meth:`~stimuli.audio.Noise.play`. + +for sound in sounds.values(): + sound.play(blocking=True) + +# %% +# The underlying signal is stored in the :py:attr:`stimuli.audio.Noise.signal` +# property, a numpy :class:`~numpy.ndarray` of shape ``(n_samples, n_channels)``. In +# this case, the sound was set to mono so the signal has shape ``(n_samples, 1)``. + +plt.figure(layout="constrained") +for color in colors: + signal = sounds[color].signal.squeeze() + # compute the one-dimensional discrete fourier transform + frequencies = np.fft.rfftfreq(signal.size) + dft = np.abs(np.fft.rfft(signal)) + # plot with log scaling on both X and Y axis + plt.loglog(frequencies, dft) +plt.legend(colors) +plt.ylim([1e-3, None]) +plt.show() diff --git a/_downloads/ca550b1c98bc489fc59fe39bf75d7352/40_sychronize_sound_and_trigger.zip b/_downloads/ca550b1c98bc489fc59fe39bf75d7352/40_sychronize_sound_and_trigger.zip new file mode 100644 index 0000000000000000000000000000000000000000..976f29bc13c6a35c3ab2880a41f0d08c4f3a3f7c GIT binary patch literal 3516 zcmd5<-EP}96!x0#2Lg822Ot;(u>se!k?f{`3#=Et$+`t-fnkU|nU-jq4Ml1sWk(A# zpwF<&U9Ru3_t{hI9E!3XCvMs<1*X7O%yZ7i^QZ4nrzd+4AGPor$IpIlefiHXPan2g z_@S_N+)r$k&W%>$H=bBssw`pfaYoE$-1LfyQW_24bww{L)gTa$KmdURggb1bAE%D1 zE@6#6$xG|VgcF_%=Xge}$V&-2y0o$)OX23ATyLY5<*pmnERkR!Imx(WRfI0QMg&8c zC55(DOeF7-pAcX?whm#%c-+Megk%Q5od!vP`EXjxiM~Lwn{#r`E0SuJ^1?;JqMl9X zJS$;06nk%aQS@9G3;sy%4lS9p1qV;1*5`ydqDupwO&P=j_k~C~kqp90t6qdDjznH) z<7%v+0FK)%il#>ABskn-WhOKU$}h2A-@Ul50g>@W!Aj1HEpc60+o-(I>G`XA4V=g> z$PhN|1y|vYuAWg{x}tP+6ct7&*Phbv_408DfV6Gr3AqHTUrTPPq_(l`&Kbas&JF`s zBK0znro9k>yGdr;9 z__`qcf~O@uJV^@F<)8+tlyX&>&3c6`u*h2a$1DT&DfV0ttt(oyitmrn3hcHr?;=^u z#+@{~rE-I3x8=Ku7Ps3)wQ=Cun2ur<*fzd5x{Yb)1B&-wo~V0gbIiv5l6kBex_dt^ z$FhAu_Wob3-%OT|7(=nzoAtU!BAD? zXiajGsaeTpURrqRTGm+A>qoUSfyiiMm<-!J^AdxqrKfPLHKfn*V{MvefKNTCf;qw8brbC?VI1>HR~=sf5sTZ K!F}&*{Pi!p9ZvKB literal 0 HcmV?d00001 diff --git a/_downloads/d74af7fa5e442c539cd6cf29b1bc5e0a/10_base_sounds.ipynb b/_downloads/d74af7fa5e442c539cd6cf29b1bc5e0a/10_base_sounds.ipynb new file mode 100644 index 00000000..e43bdb69 --- /dev/null +++ b/_downloads/d74af7fa5e442c539cd6cf29b1bc5e0a/10_base_sounds.ipynb @@ -0,0 +1,230 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n# Base sounds\n\n``stimuli`` provides a common API for audio stimuli. The audio\nstimuli can be either generated or loaded. A generated stimuli can be exported.\nThe volume, duration and other properties can be set when creating the stimuli\nor updated between plays.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from pathlib import Path\nfrom tempfile import TemporaryDirectory\n\nfrom matplotlib import pyplot as plt\n\nfrom stimuli.audio import Sound, Tone" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this tutorial, we will create, edit, save and load a pure tone auditory\nstimuli. A pure tone is a signal with a sinusoidal waveform, that is a sine\nwave of any frequency, phase-shift and amplitude.\n\nSource: [Wikipedia](https://en.wikipedia.org/wiki/Pure_tone)\n\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create and edit a pure tone\n\nTo create the stimuli, we create a :class:`~stimuli.audio.Tone` object with\na given volume and frequency.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sound = Tone(frequency=440, volume=10, duration=1) # La - A440" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can listen to the sound we created with :meth:`~stimuli.audio.Tone.play`.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sound.play(blocking=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can edit the sound properties by replacing the value in the properties.\nFor instance, let's increase the volume and change the frequency.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sound.volume = 50 # percentage between 0 and 100\nsound.frequency = 1000 # Hz" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The sound is updated each time an attribute is changed.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sound.play(blocking=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Export/Load a sound\n\nWe can export a sound with :meth:`~stimuli.audio.Tone.save` and load a sound with\n:class:`~stimuli.audio.Sound`.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "with TemporaryDirectory() as directory:\n fname = Path(directory) / \"my_pure_tone.wav\"\n sound.save(fname, overwrite=True)\n sound_loaded = Sound(fname)\nsound_loaded.play(blocking=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, a loaded sound can be any type of sound. ``stimuli`` does not\nknow that the sound was exported with the ``save()`` method of one of its\nclass. As such, the attributes that were specific to the original sound are\nnot present anymore and can not be updated anymore.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(hasattr(sound_loaded, \"frequency\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Only the basic attributes are preserved: ``duration``, ``sample_rate``.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(f\"Duration of the original sound: {sound.duration} second.\")\nprint(f\"Duration of the loaded sound: {sound_loaded.duration} second.\")\nprint(f\"Sample rate of the original sound: {sound.sample_rate} Hz.\")\nprint(f\"Sample rate of the loaded sound: {sound_loaded.sample_rate} Hz.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The volume is normalized, with the loudest channel set to ``100``. The ratio\nbetween channels is preserved.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(f\"Volume of the original sound: {sound.volume}.\")\nprint(f\"Volume of the loaded sound: {sound_loaded.volume}.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualize a sound\n\nFinally, the underlying signal is stored in the ``signal`` property, a numpy array of\nshape ``(n_samples, n_channels)``. We can plot the signal of each channel.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "samples_to_plot = 100 # number of samples to plot\ntimes = sound.times[:samples_to_plot] * 1000 # ms\n\nf, ax = plt.subplots(1, 1, layout=\"constrained\")\nax.plot(times, sound.signal.squeeze()[:samples_to_plot]) # draw data\nax.axhline(0, color=\"black\") # draw horizontal line through y=0\n\n# labels\nax.set_title(\"Signal (mono)\")\nax.set_xlabel(\"Time (ms)\")\n\n# draw vertical line after each period\nperiod = int(sound.sample_rate / sound.frequency)\nfor k in range(0, samples_to_plot, period):\n ax.axvline(times[k], color=\"lightgreen\")\n\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Or with the convenient :meth:`~stimuli.audio.Tone.plot` method.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sound.plot()\nplt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/_downloads/d8e802f167772d78d013fdd35a0fe97d/30_apply_a_window.zip b/_downloads/d8e802f167772d78d013fdd35a0fe97d/30_apply_a_window.zip new file mode 100644 index 0000000000000000000000000000000000000000..df93a06777b47b5153ef36c177218366ecfb54e4 GIT binary patch literal 9888 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 A{Qv*} literal 0 HcmV?d00001 diff --git a/_downloads/f01b4282b71ffa5d3fa91785b3b43173/20_colored_noise.ipynb b/_downloads/f01b4282b71ffa5d3fa91785b3b43173/20_colored_noise.ipynb new file mode 100644 index 00000000..44ac7485 --- /dev/null +++ b/_downloads/f01b4282b71ffa5d3fa91785b3b43173/20_colored_noise.ipynb @@ -0,0 +1,97 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n# Colored noise\n\nA noise signal is produced by a stochastic process. The color of noise, also\ncalled the noise spectrum, refers to the power spectrum of a noise signal.\n\nThe practice of naming kinds of noise after colors started with white noise,\na signal whose spectrum has equal power within any equal interval of\nfrequencies. That name was given by analogy with white light, which was\n(incorrectly) assumed to have such a flat power spectrum over the visible\nrange. Other color names, such as ``pink``, ``red``, and ``blue`` were then\ngiven to noise with other spectral profiles, often (but not always) in\nreference to the color of light with similar spectra. Some of those names\nhave standard definitions in certain disciplines, while others are very\ninformal and poorly defined.\n\nSource: [Wikipedia](https://en.wikipedia.org/wiki/Colors_of_noise)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\nfrom matplotlib import pyplot as plt\n\nfrom stimuli.audio import Noise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this tutorial, we will create and plot the power spectrum of different\nnoise colors. ``stimuli`` implements several noise color in\n:class:`~stimuli.audio.Noise`. Refer to the documentation of the ``color``\nargument for available colors.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "colors = (\"white\", \"pink\", \"blue\", \"violet\", \"brown\")\nsounds = dict()\nfor color in colors:\n # identical volume on all audio channels\n sounds[color] = Noise(color=color, volume=10, duration=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can listen to each individual noise by playing each sound with\n:meth:`~stimuli.audio.Noise.play`.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for sound in sounds.values():\n sound.play(blocking=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The underlying signal is stored in the :py:attr:`stimuli.audio.Noise.signal`\nproperty, a numpy :class:`~numpy.ndarray` of shape ``(n_samples, n_channels)``. In\nthis case, the sound was set to mono so the signal has shape ``(n_samples, 1)``.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "plt.figure(layout=\"constrained\")\nfor color in colors:\n signal = sounds[color].signal.squeeze()\n # compute the one-dimensional discrete fourier transform\n frequencies = np.fft.rfftfreq(signal.size)\n dft = np.abs(np.fft.rfft(signal))\n # plot with log scaling on both X and Y axis\n plt.loglog(frequencies, dft)\nplt.legend(colors)\nplt.ylim([1e-3, None])\nplt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/_downloads/f39435c137e7c92d0a271e51aa1187ac/tutorials_python.zip b/_downloads/f39435c137e7c92d0a271e51aa1187ac/tutorials_python.zip new file mode 100644 index 0000000000000000000000000000000000000000..037d21ebd5727a71c5e459fcd4d38986583e4454 GIT binary patch literal 11142 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 H{Oi8~xR9|2 literal 0 HcmV?d00001 diff --git a/_downloads/fb6d04b7c6a1d59103ae95ed9c796516/40_sychronize_sound_and_trigger.py b/_downloads/fb6d04b7c6a1d59103ae95ed9c796516/40_sychronize_sound_and_trigger.py new file mode 100644 index 00000000..ce230c81 --- /dev/null +++ b/_downloads/fb6d04b7c6a1d59103ae95ed9c796516/40_sychronize_sound_and_trigger.py @@ -0,0 +1,37 @@ +""" +============================= +Synchronize sound and trigger +============================= + +Often, a trigger must be emitted simultenously with a sound onset, with as little delay +and jitter as possible. With ``stimuli``, similarly to ``psychtoolbox``, the key concept +is to schedule the sound. + +First, let's have a look at our default device latency. +""" + +import sounddevice as sd + +from stimuli.audio import SoundAM +from stimuli.time import sleep +from stimuli.triggers import MockTrigger + +idx = sd.default.device["output"] +print(f"Low-latency (s): {sd.query_devices()[idx]['default_low_output_latency']}") + +# %% +# Next, we can schedule a sound with the argument ``when`` which will use the clock +# provided in the argument ``clock`` to schedule the sound. Then, we wait for this +# duration to elapse before sending the trigger. + +trigger = MockTrigger() # replace with your trigger object +sound = SoundAM( + frequency_carrier=1000, + frequency_modulation=40, + method="dsbsc", + volume=10, + duration=1, +) +sound.play(when=0.5, blocking=False) +sleep(0.5) +trigger.signal(1) diff --git a/_images/sphx_glr_10_base_sounds_001.png b/_images/sphx_glr_10_base_sounds_001.png new file mode 100644 index 0000000000000000000000000000000000000000..85a2d8fdb52bc9e63cb012590f496be474c64d5c GIT binary patch literal 25581 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

KK+K91dj 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 literal 0 HcmV?d00001 diff --git a/_images/sphx_glr_10_base_sounds_thumb.png b/_images/sphx_glr_10_base_sounds_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef18de98f07d09b143bf38de3809635df74309 GIT binary patch literal 17784 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 JF6*2Ung9)g7Ki`< literal 0 HcmV?d00001 diff --git a/_images/sphx_glr_20_colored_noise_001.png b/_images/sphx_glr_20_colored_noise_001.png new file mode 100644 index 0000000000000000000000000000000000000000..c076fefdd281f2010c78ec6d7d8b4c947af5bdaa GIT binary patch literal 62575 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

u0M_&(#jrles1gMV6s)w~JBl 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 AEdT%j literal 0 HcmV?d00001 diff --git a/_images/sphx_glr_30_apply_a_window_001.png b/_images/sphx_glr_30_apply_a_window_001.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc875809a3b700e73dcddbab9ba315e4201d8b6 GIT binary patch literal 55909 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 literal 0 HcmV?d00001 diff --git a/_images/sphx_glr_30_apply_a_window_002.png b/_images/sphx_glr_30_apply_a_window_002.png new file mode 100644 index 0000000000000000000000000000000000000000..d06933450143bba7920ba7080eb6b9870c131fbd GIT binary patch literal 60360 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 g9`if#6PYcZcE>ZIR+$yto&K0#Ew; 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 #g~(NFcSvEFwDm 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

mr#L}u1uf+D$;n46OncvZfoY7 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 WnMX)z(xUkp@TVxNCQ~V89`rv+g^}g} literal 0 HcmV?d00001 diff --git a/_images/sphx_glr_40_sychronize_sound_and_trigger_thumb.png b/_images/sphx_glr_40_sychronize_sound_and_trigger_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6d0ae55a56f442c07624e7488ec494892d3c30 GIT binary patch literal 25603 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Μ1f1bPpB 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

t5(Uj%C+yqtOg(E)4X@#qcCuLAf z6f)Dv#>{aX9MQ^x9pbb}2np4xX%=WYybwPi-7hNz_D&sR`cL=T!uQo?fCjLub;M2) zK0&%Ff!Oyx`vv6y#TQX~ip`yeI*ljne_8EXT1?wKg~6#+B{Ce>?9K@nF`)3`_&=m4 zKsSg)1~;xYHtZb0OuV5OZ6)^m%5HPdDrxK-hIu~f>*X7bR^~G#c)}e=ku#~NUa_lhNy3TeaHtmz zAC~yN=LhiHlhlR8y9{G0V|m`3Kr)c|@Dgt@p&-yHK5?K|y(!jR-`TQK!of|<8r8CJ z-#pQn!OX!+xGvT6dT$;HV_`YItq@=hJbDA~h7#%-?}j4(Mr6b94ZKR@{WD&$Hc&MI zIa(E3I4pjKAh{Ro4B76!Q2YGC z_^%;tp%6EWyUuA-<5s08QI$&Bk6HRNWmT8vB_-8b5AXU6)v3%$Xq6+Y)z0H&yCd}_ zJ##xAtr-;)jyMkem_PT9WAdoyF)XXZJe})U$BcK2?(ykJskjs1<(?}I_bXuy)OfvS z+qaGJ)hX19%>>)%SJHp?s`q4ZcI-amEXOjBsS+W*yrIS@6REn!XfeGpF}D;HJcOr= z=ShOwE7RvVq(qcZJ%rl>k1>xMDVr(l2#0O#<@E8Z;Gp+6;HWWtDSGx?>NiBsImth& zF*qbL^XYRvI$9lr}p|98`_ developed a USB to parallel port +converter using an arduino. + +The details can be found on this repository: +https://github.com/fcbg-platforms/arduino-trigger + +This converter can be used with the :class:`~stimuli.triggers.ParallelPortTrigger` class +by specifying the path to the serial port connected to the arduino or by using the +:class:`str` ``"arduino"`` for automatic detection. diff --git a/_sources/api/utilities.rst.txt b/_sources/api/utilities.rst.txt new file mode 100644 index 00000000..87ad5eb0 --- /dev/null +++ b/_sources/api/utilities.rst.txt @@ -0,0 +1,23 @@ +Utilities +--------- + +Logging utilities are available to interact with ``stimuli`` logger. + +.. currentmodule:: stimuli + +.. autosummary:: + :toctree: ../generated/api + :nosignatures: + + add_file_handler + set_log_level + +Development utilities are available to help debug a setup. + +.. currentmodule:: stimuli + +.. autosummary:: + :toctree: ../generated/api + :nosignatures: + + sys_info diff --git a/_sources/changes/0.1.rst.txt b/_sources/changes/0.1.rst.txt new file mode 100644 index 00000000..4539d44b --- /dev/null +++ b/_sources/changes/0.1.rst.txt @@ -0,0 +1,24 @@ +.. NOTE: we use cross-references to highlight new functions and classes. + Please follow the examples below, so the changelog page will have a link to + the function/class documentation. + +.. NOTE: there are 3 separate sections for changes, based on type: + - "Enhancements" for new features + - "Bugs" for bug fixes + - "API changes" for backward-incompatible changes + +.. include:: ./authors.inc + +Version 0.1 +----------- + +API and behavior changes +~~~~~~~~~~~~~~~~~~~~~~~~ + +- Add audio module with ``ASSR``, ``WhiteNoise``, ``Tone`` and ``Sound`` (by `Mathieu Scheltienne`_) +- Add visuals module with ``Text``, ``Cross``, ``FillingBar``, ``MovingBar`` (by `Mathieu Scheltienne`_) + +Authors +~~~~~~~ + +* `Mathieu Scheltienne`_ diff --git a/_sources/changes/0.2.rst.txt b/_sources/changes/0.2.rst.txt new file mode 100644 index 00000000..d3a61eac --- /dev/null +++ b/_sources/changes/0.2.rst.txt @@ -0,0 +1,30 @@ +.. NOTE: we use cross-references to highlight new functions and classes. + Please follow the examples below, so the changelog page will have a link to + the function/class documentation. + +.. NOTE: there are 3 separate sections for changes, based on type: + - "Enhancements" for new features + - "Bugs" for bug fixes + - "API changes" for backward-incompatible changes + +.. include:: ./authors.inc + +Version 0.2 +----------- + +Enhancements +~~~~~~~~~~~~ + +- Add support for colored noise to ``Noise`` (by `Mathieu Scheltienne`_) + +API and behavior changes +~~~~~~~~~~~~~~~~~~~~~~~~ + +- Add a CLI entry-point to display a fixation ``Cross`` named ``stimuli_cross`` (by `Mathieu Scheltienne`_) +- Rename ``ASSR`` auditory stimuli to ``SoundAM`` (by `Mathieu Scheltienne`_) +- Rename ``WhiteNoise`` auditory stimuli to ``Noise`` (by `Mathieu Scheltienne`_) + +Authors +~~~~~~~ + +* `Mathieu Scheltienne`_ diff --git a/_sources/changes/0.3.rst.txt b/_sources/changes/0.3.rst.txt new file mode 100644 index 00000000..1e107514 --- /dev/null +++ b/_sources/changes/0.3.rst.txt @@ -0,0 +1,23 @@ +.. NOTE: we use cross-references to highlight new functions and classes. + Please follow the examples below, so the changelog page will have a link to + the function/class documentation. + +.. NOTE: there are 3 separate sections for changes, based on type: + - "Enhancements" for new features + - "Bugs" for bug fixes + - "API changes" for backward-incompatible changes + +.. include:: ./authors.inc + +Version 0.3 +----------- + +Enhancements +~~~~~~~~~~~~ + +- Better handling of blocking auditory stimuli when using the ``sound.play()`` method (by `Mathieu Scheltienne`_) + +Authors +~~~~~~~ + +* `Mathieu Scheltienne`_ diff --git a/_sources/changes/0.4.rst.txt b/_sources/changes/0.4.rst.txt new file mode 100644 index 00000000..421952af --- /dev/null +++ b/_sources/changes/0.4.rst.txt @@ -0,0 +1,26 @@ +.. NOTE: we use cross-references to highlight new functions and classes. + Please follow the examples below, so the changelog page will have a link to + the function/class documentation. + +.. NOTE: there are 3 separate sections for changes, based on type: + - "Enhancements" for new features + - "Bugs" for bug fixes + - "API changes" for backward-incompatible changes + +.. include:: ./authors.inc + +Version 0.4 +----------- + +Bugs +~~~~ + +- Fix indentation of docstrings with a summary line (by `Mathieu Scheltienne`_) +- Fix casting of ``true_divide`` with different ``dtypes`` when loading a sound (by `Mathieu Scheltienne`_) +- Cast loaded sounds to ``np.float64`` to prevent floating point error in the volume assessment (by `Mathieu Scheltienne`_) +- Cast all sounds to ``np.float32`` since ``sounddevice`` cast them anyway (by `Mathieu Scheltienne`_) + +Authors +~~~~~~~ + +* `Mathieu Scheltienne`_ diff --git a/_sources/changes/0.5.rst.txt b/_sources/changes/0.5.rst.txt new file mode 100644 index 00000000..fa9128a0 --- /dev/null +++ b/_sources/changes/0.5.rst.txt @@ -0,0 +1,31 @@ +.. NOTE: we use cross-references to highlight new functions and classes. + Please follow the examples below, so the changelog page will have a link to + the function/class documentation. + +.. NOTE: there are 3 separate sections for changes, based on type: + - "Enhancements" for new features + - "Bugs" for bug fixes + - "API changes" for backward-incompatible changes + +.. include:: ./authors.inc + +Version 0.5 +----------- + +Enhancements +~~~~~~~~~~~~ + +- Add the documentation build (by `Mathieu Scheltienne`_ in :pr:`6`) +- Add ``window`` property for auditory stimuli (by `Mathieu Scheltienne`_ in :pr:`12`) +- Add ``copy`` method for auditory stimuli (by `Mathieu Scheltienne`_ in :pr:`13`) +- Improve error checking for integers and paths + +API and behavior changes +~~~~~~~~~~~~~~~~~~~~~~~~ + +- Remove support for python version inferior to 3.10 (by `Mathieu Scheltienne`_ in :pr:`27`) + +Authors +~~~~~~~ + +* `Mathieu Scheltienne`_ diff --git a/_sources/changes/index.rst.txt b/_sources/changes/index.rst.txt new file mode 100644 index 00000000..7b3c9f91 --- /dev/null +++ b/_sources/changes/index.rst.txt @@ -0,0 +1,12 @@ +Changelog +========= + +.. toctree:: + :titlesonly: + + latest.rst + 0.5 + 0.4 + 0.3 + 0.2 + 0.1 diff --git a/_sources/changes/latest.rst.txt b/_sources/changes/latest.rst.txt new file mode 100644 index 00000000..781247a2 --- /dev/null +++ b/_sources/changes/latest.rst.txt @@ -0,0 +1,26 @@ +.. NOTE: we use cross-references to highlight new functions and classes. + Please follow the examples below, so the changelog page will have a link to + the function/class documentation. + +.. NOTE: there are 3 separate sections for changes, based on type: + - "Enhancements" for new features + - "Bugs" for bug fixes + - "API changes" for backward-incompatible changes + +.. include:: ./authors.inc + +.. _latest: + +Version 1.0 +----------- + +- Remove the visual stimuli module (by `Mathieu Scheltienne`_) +- Refactor the audio stimuli module to use a precise callback mechanism (by `Mathieu Scheltienne`_) +- Add triggers via parallel port with :class:`~stimuli.triggers.ParallelPortTrigger` (by `Mathieu Scheltienne`_) +- Add triggers via LSL with :class:`~stimuli.triggers.LSLTrigger` (by `Mathieu Scheltienne`_) +- Add time module to measure time and sleep with :class:`~stimuli.time.Clock` and :func:`~stimuli.time.sleep` (by `Mathieu Scheltienne`_) + +Authors +~~~~~~~ + +* `Mathieu Scheltienne`_ diff --git a/_sources/generated/api/stimuli.add_file_handler.rst.txt b/_sources/generated/api/stimuli.add_file_handler.rst.txt new file mode 100644 index 00000000..0896d1c7 --- /dev/null +++ b/_sources/generated/api/stimuli.add_file_handler.rst.txt @@ -0,0 +1,9 @@ +stimuli.add\_file\_handler +========================== + +.. currentmodule:: stimuli + +.. autofunction:: add_file_handler + +.. minigallery:: stimuli.add_file_handler + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.audio.Noise.rst.txt b/_sources/generated/api/stimuli.audio.Noise.rst.txt new file mode 100644 index 00000000..f1c0fe16 --- /dev/null +++ b/_sources/generated/api/stimuli.audio.Noise.rst.txt @@ -0,0 +1,11 @@ +stimuli.audio.Noise +=================== + +.. currentmodule:: stimuli.audio + +.. autoclass:: Noise + :members: + :inherited-members: + +.. minigallery:: stimuli.audio.Noise + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.audio.Sound.rst.txt b/_sources/generated/api/stimuli.audio.Sound.rst.txt new file mode 100644 index 00000000..72743918 --- /dev/null +++ b/_sources/generated/api/stimuli.audio.Sound.rst.txt @@ -0,0 +1,11 @@ +stimuli.audio.Sound +=================== + +.. currentmodule:: stimuli.audio + +.. autoclass:: Sound + :members: + :inherited-members: + +.. minigallery:: stimuli.audio.Sound + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.audio.SoundAM.rst.txt b/_sources/generated/api/stimuli.audio.SoundAM.rst.txt new file mode 100644 index 00000000..025a3067 --- /dev/null +++ b/_sources/generated/api/stimuli.audio.SoundAM.rst.txt @@ -0,0 +1,11 @@ +stimuli.audio.SoundAM +===================== + +.. currentmodule:: stimuli.audio + +.. autoclass:: SoundAM + :members: + :inherited-members: + +.. minigallery:: stimuli.audio.SoundAM + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.audio.Tone.rst.txt b/_sources/generated/api/stimuli.audio.Tone.rst.txt new file mode 100644 index 00000000..d2386297 --- /dev/null +++ b/_sources/generated/api/stimuli.audio.Tone.rst.txt @@ -0,0 +1,11 @@ +stimuli.audio.Tone +================== + +.. currentmodule:: stimuli.audio + +.. autoclass:: Tone + :members: + :inherited-members: + +.. minigallery:: stimuli.audio.Tone + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.audio.backend.SoundSD.rst.txt b/_sources/generated/api/stimuli.audio.backend.SoundSD.rst.txt new file mode 100644 index 00000000..38ccbb9f --- /dev/null +++ b/_sources/generated/api/stimuli.audio.backend.SoundSD.rst.txt @@ -0,0 +1,11 @@ +stimuli.audio.backend.SoundSD +============================= + +.. currentmodule:: stimuli.audio.backend + +.. autoclass:: SoundSD + :members: + :inherited-members: + +.. minigallery:: stimuli.audio.backend.SoundSD + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.set_log_level.rst.txt b/_sources/generated/api/stimuli.set_log_level.rst.txt new file mode 100644 index 00000000..282a3348 --- /dev/null +++ b/_sources/generated/api/stimuli.set_log_level.rst.txt @@ -0,0 +1,9 @@ +stimuli.set\_log\_level +======================= + +.. currentmodule:: stimuli + +.. autofunction:: set_log_level + +.. minigallery:: stimuli.set_log_level + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.sys_info.rst.txt b/_sources/generated/api/stimuli.sys_info.rst.txt new file mode 100644 index 00000000..dd66db63 --- /dev/null +++ b/_sources/generated/api/stimuli.sys_info.rst.txt @@ -0,0 +1,9 @@ +stimuli.sys\_info +================= + +.. currentmodule:: stimuli + +.. autofunction:: sys_info + +.. minigallery:: stimuli.sys_info + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.time.BaseClock.rst.txt b/_sources/generated/api/stimuli.time.BaseClock.rst.txt new file mode 100644 index 00000000..3e1c3388 --- /dev/null +++ b/_sources/generated/api/stimuli.time.BaseClock.rst.txt @@ -0,0 +1,11 @@ +stimuli.time.BaseClock +====================== + +.. currentmodule:: stimuli.time + +.. autoclass:: BaseClock + :members: + :inherited-members: + +.. minigallery:: stimuli.time.BaseClock + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.time.Clock.rst.txt b/_sources/generated/api/stimuli.time.Clock.rst.txt new file mode 100644 index 00000000..49fab366 --- /dev/null +++ b/_sources/generated/api/stimuli.time.Clock.rst.txt @@ -0,0 +1,11 @@ +stimuli.time.Clock +================== + +.. currentmodule:: stimuli.time + +.. autoclass:: Clock + :members: + :inherited-members: + +.. minigallery:: stimuli.time.Clock + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.time.sleep.rst.txt b/_sources/generated/api/stimuli.time.sleep.rst.txt new file mode 100644 index 00000000..48e50e26 --- /dev/null +++ b/_sources/generated/api/stimuli.time.sleep.rst.txt @@ -0,0 +1,9 @@ +stimuli.time.sleep +================== + +.. currentmodule:: stimuli.time + +.. autofunction:: sleep + +.. minigallery:: stimuli.time.sleep + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.triggers.LSLTrigger.rst.txt b/_sources/generated/api/stimuli.triggers.LSLTrigger.rst.txt new file mode 100644 index 00000000..a710a26c --- /dev/null +++ b/_sources/generated/api/stimuli.triggers.LSLTrigger.rst.txt @@ -0,0 +1,11 @@ +stimuli.triggers.LSLTrigger +=========================== + +.. currentmodule:: stimuli.triggers + +.. autoclass:: LSLTrigger + :members: + :inherited-members: + +.. minigallery:: stimuli.triggers.LSLTrigger + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.triggers.MockTrigger.rst.txt b/_sources/generated/api/stimuli.triggers.MockTrigger.rst.txt new file mode 100644 index 00000000..52814a82 --- /dev/null +++ b/_sources/generated/api/stimuli.triggers.MockTrigger.rst.txt @@ -0,0 +1,11 @@ +stimuli.triggers.MockTrigger +============================ + +.. currentmodule:: stimuli.triggers + +.. autoclass:: MockTrigger + :members: + :inherited-members: + +.. minigallery:: stimuli.triggers.MockTrigger + :add-heading: \ No newline at end of file diff --git a/_sources/generated/api/stimuli.triggers.ParallelPortTrigger.rst.txt b/_sources/generated/api/stimuli.triggers.ParallelPortTrigger.rst.txt new file mode 100644 index 00000000..0401ffa9 --- /dev/null +++ b/_sources/generated/api/stimuli.triggers.ParallelPortTrigger.rst.txt @@ -0,0 +1,11 @@ +stimuli.triggers.ParallelPortTrigger +==================================== + +.. currentmodule:: stimuli.triggers + +.. autoclass:: ParallelPortTrigger + :members: + :inherited-members: + +.. minigallery:: stimuli.triggers.ParallelPortTrigger + :add-heading: \ No newline at end of file diff --git a/_sources/generated/tutorials/10_base_sounds.rst.txt b/_sources/generated/tutorials/10_base_sounds.rst.txt new file mode 100644 index 00000000..98216a86 --- /dev/null +++ b/_sources/generated/tutorials/10_base_sounds.rst.txt @@ -0,0 +1,343 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "generated/tutorials/10_base_sounds.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + :ref:`Go to the end ` + to download the full example code. + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_generated_tutorials_10_base_sounds.py: + + +=========== +Base sounds +=========== + +``stimuli`` provides a common API for audio stimuli. The audio +stimuli can be either generated or loaded. A generated stimuli can be exported. +The volume, duration and other properties can be set when creating the stimuli +or updated between plays. + +.. GENERATED FROM PYTHON SOURCE LINES 13-22 + +.. code-block:: Python + + + from pathlib import Path + from tempfile import TemporaryDirectory + + from matplotlib import pyplot as plt + + from stimuli.audio import Sound, Tone + + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 24-29 + +In this tutorial, we will create, edit, save and load a pure tone auditory +stimuli. A pure tone is a signal with a sinusoidal waveform, that is a sine +wave of any frequency, phase-shift and amplitude. + +Source: `Wikipedia `_ + +.. GENERATED FROM PYTHON SOURCE LINES 32-37 + +Create and edit a pure tone +--------------------------- + +To create the stimuli, we create a :class:`~stimuli.audio.Tone` object with +a given volume and frequency. + +.. GENERATED FROM PYTHON SOURCE LINES 37-40 + +.. code-block:: Python + + + sound = Tone(frequency=440, volume=10, duration=1) # La - A440 + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 41-42 + +We can listen to the sound we created with :meth:`~stimuli.audio.Tone.play`. + +.. GENERATED FROM PYTHON SOURCE LINES 42-45 + +.. code-block:: Python + + + sound.play(blocking=True) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 46-48 + +We can edit the sound properties by replacing the value in the properties. +For instance, let's increase the volume and change the frequency. + +.. GENERATED FROM PYTHON SOURCE LINES 48-52 + +.. code-block:: Python + + + sound.volume = 50 # percentage between 0 and 100 + sound.frequency = 1000 # Hz + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 53-54 + +The sound is updated each time an attribute is changed. + +.. GENERATED FROM PYTHON SOURCE LINES 54-57 + +.. code-block:: Python + + + sound.play(blocking=True) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 58-63 + +Export/Load a sound +------------------- + +We can export a sound with :meth:`~stimuli.audio.Tone.save` and load a sound with +:class:`~stimuli.audio.Sound`. + +.. GENERATED FROM PYTHON SOURCE LINES 63-70 + +.. code-block:: Python + + + with TemporaryDirectory() as directory: + fname = Path(directory) / "my_pure_tone.wav" + sound.save(fname, overwrite=True) + sound_loaded = Sound(fname) + sound_loaded.play(blocking=True) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 71-75 + +However, a loaded sound can be any type of sound. ``stimuli`` does not +know that the sound was exported with the ``save()`` method of one of its +class. As such, the attributes that were specific to the original sound are +not present anymore and can not be updated anymore. + +.. GENERATED FROM PYTHON SOURCE LINES 75-78 + +.. code-block:: Python + + + print(hasattr(sound_loaded, "frequency")) + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + False + + + + +.. GENERATED FROM PYTHON SOURCE LINES 79-80 + +Only the basic attributes are preserved: ``duration``, ``sample_rate``. + +.. GENERATED FROM PYTHON SOURCE LINES 80-86 + +.. code-block:: Python + + + print(f"Duration of the original sound: {sound.duration} second.") + print(f"Duration of the loaded sound: {sound_loaded.duration} second.") + print(f"Sample rate of the original sound: {sound.sample_rate} Hz.") + print(f"Sample rate of the loaded sound: {sound_loaded.sample_rate} Hz.") + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Duration of the original sound: 1 second. + Duration of the loaded sound: 1.0 second. + Sample rate of the original sound: 44100 Hz. + Sample rate of the loaded sound: 44100 Hz. + + + + +.. GENERATED FROM PYTHON SOURCE LINES 87-89 + +The volume is normalized, with the loudest channel set to ``100``. The ratio +between channels is preserved. + +.. GENERATED FROM PYTHON SOURCE LINES 89-93 + +.. code-block:: Python + + + print(f"Volume of the original sound: {sound.volume}.") + print(f"Volume of the loaded sound: {sound_loaded.volume}.") + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Volume of the original sound: [50.]. + Volume of the loaded sound: [100.]. + + + + +.. GENERATED FROM PYTHON SOURCE LINES 94-99 + +Visualize a sound +----------------- + +Finally, the underlying signal is stored in the ``signal`` property, a numpy array of +shape ``(n_samples, n_channels)``. We can plot the signal of each channel. + +.. GENERATED FROM PYTHON SOURCE LINES 99-118 + +.. code-block:: Python + + + samples_to_plot = 100 # number of samples to plot + times = sound.times[:samples_to_plot] * 1000 # ms + + f, ax = plt.subplots(1, 1, layout="constrained") + ax.plot(times, sound.signal.squeeze()[:samples_to_plot]) # draw data + ax.axhline(0, color="black") # draw horizontal line through y=0 + + # labels + ax.set_title("Signal (mono)") + ax.set_xlabel("Time (ms)") + + # draw vertical line after each period + period = int(sound.sample_rate / sound.frequency) + for k in range(0, samples_to_plot, period): + ax.axvline(times[k], color="lightgreen") + + plt.show() + + + + +.. image-sg:: /generated/tutorials/images/sphx_glr_10_base_sounds_001.png + :alt: Signal (mono) + :srcset: /generated/tutorials/images/sphx_glr_10_base_sounds_001.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 119-120 + +Or with the convenient :meth:`~stimuli.audio.Tone.plot` method. + +.. GENERATED FROM PYTHON SOURCE LINES 120-123 + +.. code-block:: Python + + + sound.plot() + plt.show() + + + +.. image-sg:: /generated/tutorials/images/sphx_glr_10_base_sounds_002.png + :alt: + :srcset: /generated/tutorials/images/sphx_glr_10_base_sounds_002.png + :class: sphx-glr-single-img + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** (2 minutes 35.598 seconds) + +**Estimated memory usage:** 152 MB + + +.. _sphx_glr_download_generated_tutorials_10_base_sounds.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: 10_base_sounds.ipynb <10_base_sounds.ipynb>` + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: 10_base_sounds.py <10_base_sounds.py>` + + .. container:: sphx-glr-download sphx-glr-download-zip + + :download:`Download zipped: 10_base_sounds.zip <10_base_sounds.zip>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery `_ diff --git a/_sources/generated/tutorials/20_colored_noise.rst.txt b/_sources/generated/tutorials/20_colored_noise.rst.txt new file mode 100644 index 00000000..36b51d03 --- /dev/null +++ b/_sources/generated/tutorials/20_colored_noise.rst.txt @@ -0,0 +1,167 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "generated/tutorials/20_colored_noise.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + :ref:`Go to the end ` + to download the full example code. + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_generated_tutorials_20_colored_noise.py: + + +============= +Colored noise +============= + +A noise signal is produced by a stochastic process. The color of noise, also +called the noise spectrum, refers to the power spectrum of a noise signal. + +The practice of naming kinds of noise after colors started with white noise, +a signal whose spectrum has equal power within any equal interval of +frequencies. That name was given by analogy with white light, which was +(incorrectly) assumed to have such a flat power spectrum over the visible +range. Other color names, such as ``pink``, ``red``, and ``blue`` were then +given to noise with other spectral profiles, often (but not always) in +reference to the color of light with similar spectra. Some of those names +have standard definitions in certain disciplines, while others are very +informal and poorly defined. + +Source: `Wikipedia `_ + +.. GENERATED FROM PYTHON SOURCE LINES 23-29 + +.. code-block:: Python + + + import numpy as np + from matplotlib import pyplot as plt + + from stimuli.audio import Noise + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 30-34 + +In this tutorial, we will create and plot the power spectrum of different +noise colors. ``stimuli`` implements several noise color in +:class:`~stimuli.audio.Noise`. Refer to the documentation of the ``color`` +argument for available colors. + +.. GENERATED FROM PYTHON SOURCE LINES 34-41 + +.. code-block:: Python + + + colors = ("white", "pink", "blue", "violet", "brown") + sounds = dict() + for color in colors: + # identical volume on all audio channels + sounds[color] = Noise(color=color, volume=10, duration=1) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 42-44 + +We can listen to each individual noise by playing each sound with +:meth:`~stimuli.audio.Noise.play`. + +.. GENERATED FROM PYTHON SOURCE LINES 44-48 + +.. code-block:: Python + + + for sound in sounds.values(): + sound.play(blocking=True) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 49-52 + +The underlying signal is stored in the :py:attr:`stimuli.audio.Noise.signal` +property, a numpy :class:`~numpy.ndarray` of shape ``(n_samples, n_channels)``. In +this case, the sound was set to mono so the signal has shape ``(n_samples, 1)``. + +.. GENERATED FROM PYTHON SOURCE LINES 52-64 + +.. code-block:: Python + + + plt.figure(layout="constrained") + for color in colors: + signal = sounds[color].signal.squeeze() + # compute the one-dimensional discrete fourier transform + frequencies = np.fft.rfftfreq(signal.size) + dft = np.abs(np.fft.rfft(signal)) + # plot with log scaling on both X and Y axis + plt.loglog(frequencies, dft) + plt.legend(colors) + plt.ylim([1e-3, None]) + plt.show() + + + +.. image-sg:: /generated/tutorials/images/sphx_glr_20_colored_noise_001.png + :alt: 20 colored noise + :srcset: /generated/tutorials/images/sphx_glr_20_colored_noise_001.png + :class: sphx-glr-single-img + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** (0 minutes 15.196 seconds) + +**Estimated memory usage:** 145 MB + + +.. _sphx_glr_download_generated_tutorials_20_colored_noise.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: 20_colored_noise.ipynb <20_colored_noise.ipynb>` + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: 20_colored_noise.py <20_colored_noise.py>` + + .. container:: sphx-glr-download sphx-glr-download-zip + + :download:`Download zipped: 20_colored_noise.zip <20_colored_noise.zip>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery `_ diff --git a/_sources/generated/tutorials/30_apply_a_window.rst.txt b/_sources/generated/tutorials/30_apply_a_window.rst.txt new file mode 100644 index 00000000..86adf24f --- /dev/null +++ b/_sources/generated/tutorials/30_apply_a_window.rst.txt @@ -0,0 +1,252 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "generated/tutorials/30_apply_a_window.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + :ref:`Go to the end ` + to download the full example code. + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_generated_tutorials_30_apply_a_window.py: + + +============== +Apply a window +============== + +.. include:: ../../links.inc + +In signal processing and statistics, a window function (also known as an +apodization function or tapering function) is a mathematical function that is +zero-valued outside of some chosen interval, normally symmetric around the +middle of the interval, usually near a maximum in the middle, and usually +tapering away from the middle. Mathematically, when another function or +waveform/data-sequence is "multiplied" by a window function, the product is +also zero-valued outside the interval: all that is left is the part where they +overlap, the "view through the window". + +Source: `Wikipedia `_ + +A sound waveform might have an abrupt onset or offset. It is often preferred to +apply a window to ramp up and ramp down the volume. + +.. GENERATED FROM PYTHON SOURCE LINES 24-32 + +.. code-block:: Python + + + + import numpy as np + from matplotlib import pyplot as plt + from scipy.signal.windows import tukey + + from stimuli.audio import Tone + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 34-37 + +In this tutorial, we will create a pure tone auditory stimuli and apply a +window with a linear ramp-up and a linear ramp-down to smooth the onset and +offset. + +.. GENERATED FROM PYTHON SOURCE LINES 40-45 + +Create a pure tone +------------------ + +To create the stimuli, we create a :class:`~stimuli.audio.Tone` object with +a given volume and frequency. + +.. GENERATED FROM PYTHON SOURCE LINES 45-48 + +.. code-block:: Python + + + sound = Tone(frequency=200, volume=10, duration=0.1) + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 49-52 + +By default, a generated signal will have a rectangular window applied. A +recctangular window is equal to 0 outside of the signal definition range, and +to 1 inside. We can plot the waveform of one of the channels: + +.. GENERATED FROM PYTHON SOURCE LINES 52-70 + +.. code-block:: Python + + + # draw the waveform + _, ax = sound.plot() + ax.set_title("Waveform - Rectangular window") + + # overlay a rectangular window + # note: for demonstration purposes, we make the window 20% longer than the + # signal by extending it by 10% before and after the signal. + extension = int(0.1 * sound.times.size) + window = np.zeros(extension + sound.times.size + extension) + window[extension + 1 : extension + sound.times.size] = 1 / sound.volume + # determine the timestamps associated to each sample in the window (ms) + window_times = np.arange(0, 1 / sound.sample_rate * window.size, 1 / sound.sample_rate) + window_times -= extension / sound.sample_rate + # draw the window + ax.plot(window_times, window, color="crimson") + plt.show() + + + + +.. image-sg:: /generated/tutorials/images/sphx_glr_30_apply_a_window_001.png + :alt: Waveform - Rectangular window + :srcset: /generated/tutorials/images/sphx_glr_30_apply_a_window_001.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 71-78 + +Create a different window +------------------------- + +For this tutorial, we will define a window with a ramp from ``0`` to ``1`` +during the first 10% of the total duration, and a ramp from ``1`` to ``0`` +during the last 10% of the total duration. A correctly defined window is a +1D `~numpy.array` with the same number of samples as the sound. + +.. GENERATED FROM PYTHON SOURCE LINES 78-85 + +.. code-block:: Python + + + window = np.ones(sound.times.size) + n_samples_ramp = int(0.1 * sound.times.size) + ramp = np.linspace(start=0, stop=1, num=n_samples_ramp) + window[:n_samples_ramp] = ramp + window[-n_samples_ramp:] = ramp[::-1] + + + + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 86-90 + +Change the window +----------------- + +We can change the applied window by setting the property ``window``. + +.. GENERATED FROM PYTHON SOURCE LINES 90-99 + +.. code-block:: Python + + + sound.window = window + + # draw the modified sound and the window + _, ax = sound.plot() + ax.set_title("Waveform - Ramp onset/offset window") + ax.plot(sound.times, window / sound.volume, color="crimson") # overlay the window + plt.show() + + + + +.. image-sg:: /generated/tutorials/images/sphx_glr_30_apply_a_window_002.png + :alt: Waveform - Ramp onset/offset window + :srcset: /generated/tutorials/images/sphx_glr_30_apply_a_window_002.png + :class: sphx-glr-single-img + + + + + +.. GENERATED FROM PYTHON SOURCE LINES 100-105 + +Scipy windows +------------- + +`scipy`_ has many windows implemented in :mod:`scipy.signal.windows`. For instance +we can use a Tukey window with the function `~scipy.signal.windows.tukey`. + +.. GENERATED FROM PYTHON SOURCE LINES 105-114 + +.. code-block:: Python + + + window = tukey(sound.times.size) + sound.window = window + + # draw the modified sound and the window + _, ax = sound.plot() + ax.set_title("Waveform - Tukey window") + ax.plot(sound.times, window / sound.volume, color="crimson") # overlay the window + plt.show() + + + +.. image-sg:: /generated/tutorials/images/sphx_glr_30_apply_a_window_003.png + :alt: Waveform - Tukey window + :srcset: /generated/tutorials/images/sphx_glr_30_apply_a_window_003.png + :class: sphx-glr-single-img + + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** (0 minutes 4.736 seconds) + +**Estimated memory usage:** 167 MB + + +.. _sphx_glr_download_generated_tutorials_30_apply_a_window.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: 30_apply_a_window.ipynb <30_apply_a_window.ipynb>` + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: 30_apply_a_window.py <30_apply_a_window.py>` + + .. container:: sphx-glr-download sphx-glr-download-zip + + :download:`Download zipped: 30_apply_a_window.zip <30_apply_a_window.zip>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery `_ diff --git a/_sources/generated/tutorials/40_sychronize_sound_and_trigger.rst.txt b/_sources/generated/tutorials/40_sychronize_sound_and_trigger.rst.txt new file mode 100644 index 00000000..a2077836 --- /dev/null +++ b/_sources/generated/tutorials/40_sychronize_sound_and_trigger.rst.txt @@ -0,0 +1,124 @@ + +.. DO NOT EDIT. +.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. +.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: +.. "generated/tutorials/40_sychronize_sound_and_trigger.py" +.. LINE NUMBERS ARE GIVEN BELOW. + +.. only:: html + + .. note:: + :class: sphx-glr-download-link-note + + :ref:`Go to the end ` + to download the full example code. + +.. rst-class:: sphx-glr-example-title + +.. _sphx_glr_generated_tutorials_40_sychronize_sound_and_trigger.py: + + +============================= +Synchronize sound and trigger +============================= + +Often, a trigger must be emitted simultenously with a sound onset, with as little delay +and jitter as possible. With ``stimuli``, similarly to ``psychtoolbox``, the key concept +is to schedule the sound. + +First, let's have a look at our default device latency. + +.. GENERATED FROM PYTHON SOURCE LINES 12-22 + +.. code-block:: Python + + + import sounddevice as sd + + from stimuli.audio import SoundAM + from stimuli.time import sleep + from stimuli.triggers import MockTrigger + + idx = sd.default.device["output"] + print(f"Low-latency (s): {sd.query_devices()[idx]['default_low_output_latency']}") + + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + Low-latency (s): 0.008684807256235827 + + + + +.. GENERATED FROM PYTHON SOURCE LINES 23-26 + +Next, we can schedule a sound with the argument ``when`` which will use the clock +provided in the argument ``clock`` to schedule the sound. Then, we wait for this +duration to elapse before sending the trigger. + +.. GENERATED FROM PYTHON SOURCE LINES 26-38 + +.. code-block:: Python + + + trigger = MockTrigger() # replace with your trigger object + sound = SoundAM( + frequency_carrier=1000, + frequency_modulation=40, + method="dsbsc", + volume=10, + duration=1, + ) + sound.play(when=0.5, blocking=False) + sleep(0.5) + trigger.signal(1) + + + + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + [mock.signal] INFO: Mock set to 1. + + + + + +.. rst-class:: sphx-glr-timing + + **Total running time of the script:** (0 minutes 0.710 seconds) + +**Estimated memory usage:** 144 MB + + +.. _sphx_glr_download_generated_tutorials_40_sychronize_sound_and_trigger.py: + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-example + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download Jupyter notebook: 40_sychronize_sound_and_trigger.ipynb <40_sychronize_sound_and_trigger.ipynb>` + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download Python source code: 40_sychronize_sound_and_trigger.py <40_sychronize_sound_and_trigger.py>` + + .. container:: sphx-glr-download sphx-glr-download-zip + + :download:`Download zipped: 40_sychronize_sound_and_trigger.zip <40_sychronize_sound_and_trigger.zip>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery `_ diff --git a/_sources/generated/tutorials/index.rst.txt b/_sources/generated/tutorials/index.rst.txt new file mode 100644 index 00000000..06f6570a --- /dev/null +++ b/_sources/generated/tutorials/index.rst.txt @@ -0,0 +1,115 @@ +:orphan: + +Tutorials +========= + + + +.. raw:: html + +

+ + +.. toctree:: + :hidden: + + /generated/tutorials/10_base_sounds + /generated/tutorials/20_colored_noise + /generated/tutorials/30_apply_a_window + /generated/tutorials/40_sychronize_sound_and_trigger + + +.. only:: html + + .. container:: sphx-glr-footer sphx-glr-footer-gallery + + .. container:: sphx-glr-download sphx-glr-download-python + + :download:`Download all examples in Python source code: tutorials_python.zip ` + + .. container:: sphx-glr-download sphx-glr-download-jupyter + + :download:`Download all examples in Jupyter notebooks: tutorials_jupyter.zip ` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery `_ diff --git a/_sources/generated/tutorials/sg_execution_times.rst.txt b/_sources/generated/tutorials/sg_execution_times.rst.txt new file mode 100644 index 00000000..1bbe204d --- /dev/null +++ b/_sources/generated/tutorials/sg_execution_times.rst.txt @@ -0,0 +1,46 @@ + +:orphan: + +.. _sphx_glr_generated_tutorials_sg_execution_times: + + +Computation times +================= +**02:56.241** total execution time for 4 files **from generated/tutorials**: + +.. container:: + + .. raw:: html + + + + + + + + .. list-table:: + :header-rows: 1 + :class: table table-striped sg-datatable + + * - Example + - Time + - Mem (MB) + * - :ref:`sphx_glr_generated_tutorials_10_base_sounds.py` (``10_base_sounds.py``) + - 02:35.598 + - 152.0 + * - :ref:`sphx_glr_generated_tutorials_20_colored_noise.py` (``20_colored_noise.py``) + - 00:15.196 + - 145.1 + * - :ref:`sphx_glr_generated_tutorials_30_apply_a_window.py` (``30_apply_a_window.py``) + - 00:04.736 + - 166.9 + * - :ref:`sphx_glr_generated_tutorials_40_sychronize_sound_and_trigger.py` (``40_sychronize_sound_and_trigger.py``) + - 00:00.710 + - 144.0 diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..1ccd1f79 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,58 @@ +.. include:: ./links.inc + +Stimuli +======= + +.. toctree:: + :hidden: + + api/index + generated/tutorials/index + changes/index + +Stimuli is a Python package for delivery of auditory stimuli and events via parallel +port or LSL which does not require `PsychoPy`_\ :footcite:p:`peirce_psychopy2_2019, +peirce_generating_2008,peirce_psychopypsychophysics_2007`. Instead, it uses +`sounddevice`_ for auditory stimuli which uses `PortAudio`_ under-the-hood. + +Install +------- + +Stimuli is available on `PyPI `_ and on `conda-forge `_. + +.. tab-set:: + + .. tab-item:: PyPI + + .. code-block:: bash + + pip install stimuli + + Or use the faster `uv`_: + + .. code-block:: bash + + uv pip install stimuli + + .. tab-item:: Conda + + .. code-block:: bash + + conda install -c conda-forge stimuli + + .. tab-item:: Source + + .. code-block:: bash + + pip install git+https://github.com/mscheltienne/stimuli + +License +------- + +``stimuli`` is licensed under the `MIT license`_. +A full copy of the license can be found `on GitHub `_. + +References +---------- + +.. footbibliography:: diff --git a/_sources/sg_execution_times.rst.txt b/_sources/sg_execution_times.rst.txt new file mode 100644 index 00000000..a178e649 --- /dev/null +++ b/_sources/sg_execution_times.rst.txt @@ -0,0 +1,46 @@ + +:orphan: + +.. _sphx_glr_sg_execution_times: + + +Computation times +================= +**02:56.241** total execution time for 4 files **from all galleries**: + +.. container:: + + .. raw:: html + + + + + + + + .. list-table:: + :header-rows: 1 + :class: table table-striped sg-datatable + + * - Example + - Time + - Mem (MB) + * - :ref:`sphx_glr_generated_tutorials_10_base_sounds.py` (``../tutorials/10_base_sounds.py``) + - 02:35.598 + - 152.0 + * - :ref:`sphx_glr_generated_tutorials_20_colored_noise.py` (``../tutorials/20_colored_noise.py``) + - 00:15.196 + - 145.1 + * - :ref:`sphx_glr_generated_tutorials_30_apply_a_window.py` (``../tutorials/30_apply_a_window.py``) + - 00:04.736 + - 166.9 + * - :ref:`sphx_glr_generated_tutorials_40_sychronize_sound_and_trigger.py` (``../tutorials/40_sychronize_sound_and_trigger.py``) + - 00:00.710 + - 144.0 diff --git a/_sphinx_design_static/design-tabs.js b/_sphinx_design_static/design-tabs.js new file mode 100644 index 00000000..b25bd6a4 --- /dev/null +++ b/_sphinx_design_static/design-tabs.js @@ -0,0 +1,101 @@ +// @ts-check + +// Extra JS capability for selected tabs to be synced +// The selection is stored in local storage so that it persists across page loads. + +/** + * @type {Record} + */ +let sd_id_to_elements = {}; +const storageKeyPrefix = "sphinx-design-tab-id-"; + +/** + * Create a key for a tab element. + * @param {HTMLElement} el - The tab element. + * @returns {[string, string, string] | null} - The key. + * + */ +function create_key(el) { + let syncId = el.getAttribute("data-sync-id"); + let syncGroup = el.getAttribute("data-sync-group"); + if (!syncId || !syncGroup) return null; + return [syncGroup, syncId, syncGroup + "--" + syncId]; +} + +/** + * Initialize the tab selection. + * + */ +function ready() { + // Find all tabs with sync data + + /** @type {string[]} */ + let groups = []; + + document.querySelectorAll(".sd-tab-label").forEach((label) => { + if (label instanceof HTMLElement) { + let data = create_key(label); + if (data) { + let [group, id, key] = data; + + // add click event listener + // @ts-ignore + label.onclick = onSDLabelClick; + + // store map of key to elements + if (!sd_id_to_elements[key]) { + sd_id_to_elements[key] = []; + } + sd_id_to_elements[key].push(label); + + if (groups.indexOf(group) === -1) { + groups.push(group); + // Check if a specific tab has been selected via URL parameter + const tabParam = new URLSearchParams(window.location.search).get( + group + ); + if (tabParam) { + console.log( + "sphinx-design: Selecting tab id for group '" + + group + + "' from URL parameter: " + + tabParam + ); + window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); + } + } + + // Check is a specific tab has been selected previously + let previousId = window.sessionStorage.getItem( + storageKeyPrefix + group + ); + if (previousId === id) { + // console.log( + // "sphinx-design: Selecting tab from session storage: " + id + // ); + // @ts-ignore + label.previousElementSibling.checked = true; + } + } + } + }); +} + +/** + * Activate other tabs with the same sync id. + * + * @this {HTMLElement} - The element that was clicked. + */ +function onSDLabelClick() { + let data = create_key(this); + if (!data) return; + let [group, id, key] = data; + for (const label of sd_id_to_elements[key]) { + if (label === this) continue; + // @ts-ignore + label.previousElementSibling.checked = true; + } + window.sessionStorage.setItem(storageKeyPrefix + group, id); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_sphinx_design_static/sphinx-design.min.css b/_sphinx_design_static/sphinx-design.min.css new file mode 100644 index 00000000..860c36da --- /dev/null +++ b/_sphinx_design_static/sphinx-design.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative;font-size:var(--sd-fontsize-dropdown)}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary.sd-summary-title{padding:.5em .6em .5em 1em;font-size:var(--sd-fontsize-dropdown-title);font-weight:var(--sd-fontweight-dropdown-title);user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;list-style:none;display:inline-flex;justify-content:space-between}details.sd-dropdown summary.sd-summary-title::-webkit-details-marker{display:none}details.sd-dropdown summary.sd-summary-title:focus{outline:none}details.sd-dropdown summary.sd-summary-title .sd-summary-icon{margin-right:.6em;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary.sd-summary-title .sd-summary-text{flex-grow:1;line-height:1.5;padding-right:.5rem}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker{pointer-events:none;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker svg{opacity:.6}details.sd-dropdown summary.sd-summary-title:hover .sd-summary-state-marker svg{opacity:1;transform:scale(1.1)}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown .sd-summary-chevron-right{transition:.25s}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-right{transform:rotate(90deg)}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-down{transform:rotate(180deg)}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-bg: rgba(0, 113, 188, 0.2);--sd-color-secondary-bg: rgba(108, 117, 125, 0.2);--sd-color-success-bg: rgba(40, 167, 69, 0.2);--sd-color-info-bg: rgba(23, 162, 184, 0.2);--sd-color-warning-bg: rgba(240, 179, 126, 0.2);--sd-color-danger-bg: rgba(220, 53, 69, 0.2);--sd-color-light-bg: rgba(248, 249, 250, 0.2);--sd-color-muted-bg: rgba(108, 117, 125, 0.2);--sd-color-dark-bg: rgba(33, 37, 41, 0.2);--sd-color-black-bg: rgba(0, 0, 0, 0.2);--sd-color-white-bg: rgba(255, 255, 255, 0.2);--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem;--sd-fontsize-dropdown: inherit;--sd-fontsize-dropdown-title: 1rem;--sd-fontweight-dropdown-title: 700} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..f316efcb --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 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/_static/binder_badge_logo.svg b/_static/binder_badge_logo.svg new file mode 100644 index 00000000..327f6b63 --- /dev/null +++ b/_static/binder_badge_logo.svg @@ -0,0 +1 @@ + launchlaunchbinderbinder \ No newline at end of file diff --git a/_static/broken_example.png b/_static/broken_example.png new file mode 100644 index 0000000000000000000000000000000000000000..4fea24e7df4781c2c32c8d7995511ac89e953145 GIT binary patch literal 21404 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 + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 00000000..54b3c463 --- /dev/null +++ b/_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/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 00000000..f1916ec7 --- /dev/null +++ b/_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: + * + *

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/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 00000000..e0da1932 --- /dev/null +++ b/_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, '>>> |\\.\\.\\. |\\$ |In \\[\\d*\\]: | {2,5}\\.\\.\\.: | {5,8}: ', true, 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/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 00000000..dbe1aaad --- /dev/null +++ b/_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/_static/css/style.css b/_static/css/style.css new file mode 100644 index 00000000..77e7db1c --- /dev/null +++ b/_static/css/style.css @@ -0,0 +1,4 @@ +div.sphx-glr-download-link-note { + height: 0px; + visibility: hidden; +} diff --git a/_static/debug.css b/_static/debug.css new file mode 100644 index 00000000..74d4aec3 --- /dev/null +++ b/_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/_static/design-tabs.js b/_static/design-tabs.js new file mode 100644 index 00000000..b25bd6a4 --- /dev/null +++ b/_static/design-tabs.js @@ -0,0 +1,101 @@ +// @ts-check + +// Extra JS capability for selected tabs to be synced +// The selection is stored in local storage so that it persists across page loads. + +/** + * @type {Record} + */ +let sd_id_to_elements = {}; +const storageKeyPrefix = "sphinx-design-tab-id-"; + +/** + * Create a key for a tab element. + * @param {HTMLElement} el - The tab element. + * @returns {[string, string, string] | null} - The key. + * + */ +function create_key(el) { + let syncId = el.getAttribute("data-sync-id"); + let syncGroup = el.getAttribute("data-sync-group"); + if (!syncId || !syncGroup) return null; + return [syncGroup, syncId, syncGroup + "--" + syncId]; +} + +/** + * Initialize the tab selection. + * + */ +function ready() { + // Find all tabs with sync data + + /** @type {string[]} */ + let groups = []; + + document.querySelectorAll(".sd-tab-label").forEach((label) => { + if (label instanceof HTMLElement) { + let data = create_key(label); + if (data) { + let [group, id, key] = data; + + // add click event listener + // @ts-ignore + label.onclick = onSDLabelClick; + + // store map of key to elements + if (!sd_id_to_elements[key]) { + sd_id_to_elements[key] = []; + } + sd_id_to_elements[key].push(label); + + if (groups.indexOf(group) === -1) { + groups.push(group); + // Check if a specific tab has been selected via URL parameter + const tabParam = new URLSearchParams(window.location.search).get( + group + ); + if (tabParam) { + console.log( + "sphinx-design: Selecting tab id for group '" + + group + + "' from URL parameter: " + + tabParam + ); + window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); + } + } + + // Check is a specific tab has been selected previously + let previousId = window.sessionStorage.getItem( + storageKeyPrefix + group + ); + if (previousId === id) { + // console.log( + // "sphinx-design: Selecting tab from session storage: " + id + // ); + // @ts-ignore + label.previousElementSibling.checked = true; + } + } + } + }); +} + +/** + * Activate other tabs with the same sync id. + * + * @this {HTMLElement} - The element that was clicked. + */ +function onSDLabelClick() { + let data = create_key(this); + if (!data) return; + let [group, id, key] = data; + for (const label of sd_id_to_elements[key]) { + if (label === this) continue; + // @ts-ignore + label.previousElementSibling.checked = true; + } + window.sessionStorage.setItem(storageKeyPrefix + group, id); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..4d67807d --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 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/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..5c572ef9 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '1.0.0.dev0', + 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/_static/file.png b/_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/_static/jupyterlite_badge_logo.svg b/_static/jupyterlite_badge_logo.svg new file mode 100644 index 00000000..5de36d7f --- /dev/null +++ b/_static/jupyterlite_badge_logo.svg @@ -0,0 +1,3 @@ + + +launchlaunchlitelite \ No newline at end of file diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 00000000..367b8ed8 --- /dev/null +++ b/_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-2024 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, if 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/_static/minus.png b/_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/_static/no_image.png b/_static/no_image.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2d48d5d3f0044cf0399b3608d8eb5db6f9d12d GIT binary patch literal 4315 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 HW8D7$6^1w` literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_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/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..02b4b128 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,258 @@ +.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 .ges { color: #000000; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.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: #ff3a3a; 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: #ff3a3a } /* Generic.Deleted */ +body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body[data-theme="dark"] .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body[data-theme="dark"] .highlight .gr { color: #ff3a3a } /* 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: #ff3a3a } /* 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: #ff3a3a; 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: #ff3a3a } /* Generic.Deleted */ +body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body:not([data-theme="light"]) .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body:not([data-theme="light"]) .highlight .gr { color: #ff3a3a } /* 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: #ff3a3a } /* 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/_static/scripts/furo-extensions.js b/_static/scripts/furo-extensions.js new file mode 100644 index 00000000..e69de29b diff --git a/_static/scripts/furo.js b/_static/scripts/furo.js new file mode 100644 index 00000000..0abb2afa --- /dev/null +++ b/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={856: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(856),e=n.n(t),o=null,r=null,c=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;(function(t){const e=Math.floor(r.getBoundingClientRect().top);console.log(`headerTop: ${e}`),0==e&&t!=e?r.classList.add("scrolled"):r.classList.remove("scrolled")})(n=t),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+2.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/_static/scripts/furo.js.LICENSE.txt b/_static/scripts/furo.js.LICENSE.txt new file mode 100644 index 00000000..1632189c --- /dev/null +++ b/_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/_static/scripts/furo.js.map b/_static/scripts/furo.js.map new file mode 100644 index 00000000..80ea12b8 --- /dev/null +++ b/_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 = document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader(positionY) {\n const headerTop = Math.floor(header.getBoundingClientRect().top);\n\n console.log(`headerTop: ${headerTop}`);\n if (headerTop == 0 && positionY != headerTop) {\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(positionY);\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 + 2.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","headerTop","floor","scrollHandlerForHeader","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..b08d58c9 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,620 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 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, anchor) + ); + // 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." + ).replace('${resultCount}', resultCount); +}; +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); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (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; +}; + +/** + * 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, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. 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); + }, + + _parseQuery: (query) => { + // 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]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + 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; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + 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, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // 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; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // 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); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], 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.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(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, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + 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/_static/sg_gallery-binder.css b/_static/sg_gallery-binder.css new file mode 100644 index 00000000..420005d2 --- /dev/null +++ b/_static/sg_gallery-binder.css @@ -0,0 +1,11 @@ +/* CSS for binder integration */ + +div.binder-badge { + margin: 1em auto; + vertical-align: middle; +} + +div.lite-badge { + margin: 1em auto; + vertical-align: middle; +} diff --git a/_static/sg_gallery-dataframe.css b/_static/sg_gallery-dataframe.css new file mode 100644 index 00000000..fac74c43 --- /dev/null +++ b/_static/sg_gallery-dataframe.css @@ -0,0 +1,47 @@ +/* Pandas dataframe css */ +/* Taken from: https://github.com/spatialaudio/nbsphinx/blob/fb3ba670fc1ba5f54d4c487573dbc1b4ecf7e9ff/src/nbsphinx.py#L587-L619 */ +html[data-theme="light"] { + --sg-text-color: #000; + --sg-tr-odd-color: #f5f5f5; + --sg-tr-hover-color: rgba(66, 165, 245, 0.2); +} +html[data-theme="dark"] { + --sg-text-color: #fff; + --sg-tr-odd-color: #373737; + --sg-tr-hover-color: rgba(30, 81, 122, 0.2); +} + +table.dataframe { + border: none !important; + border-collapse: collapse; + border-spacing: 0; + border-color: transparent; + color: var(--sg-text-color); + font-size: 12px; + table-layout: fixed; + width: auto; +} +table.dataframe thead { + border-bottom: 1px solid var(--sg-text-color); + vertical-align: bottom; +} +table.dataframe tr, +table.dataframe th, +table.dataframe td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} +table.dataframe th { + font-weight: bold; +} +table.dataframe tbody tr:nth-child(odd) { + background: var(--sg-tr-odd-color); +} +table.dataframe tbody tr:hover { + background: var(--sg-tr-hover-color); +} diff --git a/_static/sg_gallery-rendered-html.css b/_static/sg_gallery-rendered-html.css new file mode 100644 index 00000000..93dc2ffb --- /dev/null +++ b/_static/sg_gallery-rendered-html.css @@ -0,0 +1,224 @@ +/* Adapted from notebook/static/style/style.min.css */ +html[data-theme="light"] { + --sg-text-color: #000; + --sg-background-color: #ffffff; + --sg-code-background-color: #eff0f1; + --sg-tr-hover-color: rgba(66, 165, 245, 0.2); + --sg-tr-odd-color: #f5f5f5; +} +html[data-theme="dark"] { + --sg-text-color: #fff; + --sg-background-color: #121212; + --sg-code-background-color: #2f2f30; + --sg-tr-hover-color: rgba(66, 165, 245, 0.2); + --sg-tr-odd-color: #1f1f1f; +} + +.rendered_html { + color: var(--sg-text-color); + /* any extras will just be numbers: */ +} +.rendered_html em { + font-style: italic; +} +.rendered_html strong { + font-weight: bold; +} +.rendered_html u { + text-decoration: underline; +} +.rendered_html :link { + text-decoration: underline; +} +.rendered_html :visited { + text-decoration: underline; +} +.rendered_html h1 { + font-size: 185.7%; + margin: 1.08em 0 0 0; + font-weight: bold; + line-height: 1.0; +} +.rendered_html h2 { + font-size: 157.1%; + margin: 1.27em 0 0 0; + font-weight: bold; + line-height: 1.0; +} +.rendered_html h3 { + font-size: 128.6%; + margin: 1.55em 0 0 0; + font-weight: bold; + line-height: 1.0; +} +.rendered_html h4 { + font-size: 100%; + margin: 2em 0 0 0; + font-weight: bold; + line-height: 1.0; +} +.rendered_html h5 { + font-size: 100%; + margin: 2em 0 0 0; + font-weight: bold; + line-height: 1.0; + font-style: italic; +} +.rendered_html h6 { + font-size: 100%; + margin: 2em 0 0 0; + font-weight: bold; + line-height: 1.0; + font-style: italic; +} +.rendered_html h1:first-child { + margin-top: 0.538em; +} +.rendered_html h2:first-child { + margin-top: 0.636em; +} +.rendered_html h3:first-child { + margin-top: 0.777em; +} +.rendered_html h4:first-child { + margin-top: 1em; +} +.rendered_html h5:first-child { + margin-top: 1em; +} +.rendered_html h6:first-child { + margin-top: 1em; +} +.rendered_html ul:not(.list-inline), +.rendered_html ol:not(.list-inline) { + padding-left: 2em; +} +.rendered_html ul { + list-style: disc; +} +.rendered_html ul ul { + list-style: square; + margin-top: 0; +} +.rendered_html ul ul ul { + list-style: circle; +} +.rendered_html ol { + list-style: decimal; +} +.rendered_html ol ol { + list-style: upper-alpha; + margin-top: 0; +} +.rendered_html ol ol ol { + list-style: lower-alpha; +} +.rendered_html ol ol ol ol { + list-style: lower-roman; +} +.rendered_html ol ol ol ol ol { + list-style: decimal; +} +.rendered_html * + ul { + margin-top: 1em; +} +.rendered_html * + ol { + margin-top: 1em; +} +.rendered_html hr { + color: var(--sg-text-color); + background-color: var(--sg-text-color); +} +.rendered_html pre { + margin: 1em 2em; + padding: 0px; + background-color: var(--sg-background-color); +} +.rendered_html code { + background-color: var(--sg-code-background-color); +} +.rendered_html p code { + padding: 1px 5px; +} +.rendered_html pre code { + background-color: var(--sg-background-color); +} +.rendered_html pre, +.rendered_html code { + border: 0; + color: var(--sg-text-color); + font-size: 100%; +} +.rendered_html blockquote { + margin: 1em 2em; +} +.rendered_html table { + margin-left: auto; + margin-right: auto; + border: none; + border-collapse: collapse; + border-spacing: 0; + color: var(--sg-text-color); + font-size: 12px; + table-layout: fixed; +} +.rendered_html thead { + border-bottom: 1px solid var(--sg-text-color); + vertical-align: bottom; +} +.rendered_html tr, +.rendered_html th, +.rendered_html td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} +.rendered_html th { + font-weight: bold; +} +.rendered_html tbody tr:nth-child(odd) { + background: var(--sg-tr-odd-color); +} +.rendered_html tbody tr:hover { + color: var(--sg-text-color); + background: var(--sg-tr-hover-color); +} +.rendered_html * + table { + margin-top: 1em; +} +.rendered_html p { + text-align: left; +} +.rendered_html * + p { + margin-top: 1em; +} +.rendered_html img { + display: block; + margin-left: auto; + margin-right: auto; +} +.rendered_html * + img { + margin-top: 1em; +} +.rendered_html img, +.rendered_html svg { + max-width: 100%; + height: auto; +} +.rendered_html img.unconfined, +.rendered_html svg.unconfined { + max-width: none; +} +.rendered_html .alert { + margin-bottom: initial; +} +.rendered_html * + .alert { + margin-top: 1em; +} +[dir="rtl"] .rendered_html p { + text-align: right; +} diff --git a/_static/sg_gallery.css b/_static/sg_gallery.css new file mode 100644 index 00000000..9bcd33c8 --- /dev/null +++ b/_static/sg_gallery.css @@ -0,0 +1,367 @@ +/* +Sphinx-Gallery has compatible CSS to fix default sphinx themes +Tested for Sphinx 1.3.1 for all themes: default, alabaster, sphinxdoc, +scrolls, agogo, traditional, nature, haiku, pyramid +Tested for Read the Docs theme 0.1.7 */ + +/* Define light colors */ +:root, html[data-theme="light"], body[data-theme="light"]{ + --sg-tooltip-foreground: black; + --sg-tooltip-background: rgba(250, 250, 250, 0.9); + --sg-tooltip-border: #ccc transparent; + --sg-thumb-box-shadow-color: #6c757d40; + --sg-thumb-hover-border: #0069d9; + --sg-script-out: #888; + --sg-script-pre: #fafae2; + --sg-pytb-foreground: #000; + --sg-pytb-background: #ffe4e4; + --sg-pytb-border-color: #f66; + --sg-download-a-background-color: #ffc; + --sg-download-a-background-image: linear-gradient(to bottom, #ffc, #d5d57e); + --sg-download-a-border-color: 1px solid #c2c22d; + --sg-download-a-color: #000; + --sg-download-a-hover-background-color: #d5d57e; + --sg-download-a-hover-box-shadow-1: rgba(255, 255, 255, 0.1); + --sg-download-a-hover-box-shadow-2: rgba(0, 0, 0, 0.25); +} +@media(prefers-color-scheme: light) { + :root[data-theme="auto"], html[data-theme="auto"], body[data-theme="auto"] { + --sg-tooltip-foreground: black; + --sg-tooltip-background: rgba(250, 250, 250, 0.9); + --sg-tooltip-border: #ccc transparent; + --sg-thumb-box-shadow-color: #6c757d40; + --sg-thumb-hover-border: #0069d9; + --sg-script-out: #888; + --sg-script-pre: #fafae2; + --sg-pytb-foreground: #000; + --sg-pytb-background: #ffe4e4; + --sg-pytb-border-color: #f66; + --sg-download-a-background-color: #ffc; + --sg-download-a-background-image: linear-gradient(to bottom, #ffc, #d5d57e); + --sg-download-a-border-color: 1px solid #c2c22d; + --sg-download-a-color: #000; + --sg-download-a-hover-background-color: #d5d57e; + --sg-download-a-hover-box-shadow-1: rgba(255, 255, 255, 0.1); + --sg-download-a-hover-box-shadow-2: rgba(0, 0, 0, 0.25); + } +} + +html[data-theme="dark"], body[data-theme="dark"] { + --sg-tooltip-foreground: white; + --sg-tooltip-background: rgba(10, 10, 10, 0.9); + --sg-tooltip-border: #333 transparent; + --sg-thumb-box-shadow-color: #79848d40; + --sg-thumb-hover-border: #003975; + --sg-script-out: rgb(179, 179, 179); + --sg-script-pre: #2e2e22; + --sg-pytb-foreground: #fff; + --sg-pytb-background: #1b1717; + --sg-pytb-border-color: #622; + --sg-download-a-background-color: #443; + --sg-download-a-background-image: linear-gradient(to bottom, #443, #221); + --sg-download-a-border-color: 1px solid #3a3a0d; + --sg-download-a-color: #fff; + --sg-download-a-hover-background-color: #616135; + --sg-download-a-hover-box-shadow-1: rgba(0, 0, 0, 0.1); + --sg-download-a-hover-box-shadow-2: rgba(255, 255, 255, 0.25); +} +@media(prefers-color-scheme: dark){ + html[data-theme="auto"], body[data-theme="auto"] { + --sg-tooltip-foreground: white; + --sg-tooltip-background: rgba(10, 10, 10, 0.9); + --sg-tooltip-border: #333 transparent; + --sg-thumb-box-shadow-color: #79848d40; + --sg-thumb-hover-border: #003975; + --sg-script-out: rgb(179, 179, 179); + --sg-script-pre: #2e2e22; + --sg-pytb-foreground: #fff; + --sg-pytb-background: #1b1717; + --sg-pytb-border-color: #622; + --sg-download-a-background-color: #443; + --sg-download-a-background-image: linear-gradient(to bottom, #443, #221); + --sg-download-a-border-color: 1px solid #3a3a0d; + --sg-download-a-color: #fff; + --sg-download-a-hover-background-color: #616135; + --sg-download-a-hover-box-shadow-1: rgba(0, 0, 0, 0.1); + --sg-download-a-hover-box-shadow-2: rgba(255, 255, 255, 0.25); + } +} + +.sphx-glr-thumbnails { + width: 100%; + margin: 0px 0px 20px 0px; + + /* align thumbnails on a grid */ + justify-content: space-between; + display: grid; + /* each grid column should be at least 160px (this will determine + the actual number of columns) and then take as much of the + remaining width as possible */ + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + gap: 15px; +} +.sphx-glr-thumbnails .toctree-wrapper { + /* hide empty toctree divs added to the DOM + by sphinx even though the toctree is hidden + (they would fill grid places with empty divs) */ + display: none; +} +.sphx-glr-thumbcontainer { + background: transparent; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + box-shadow: 0 0 10px var(--sg-thumb-box-shadow-color); + + /* useful to absolutely position link in div */ + position: relative; + + /* thumbnail width should include padding and borders + and take all available space */ + box-sizing: border-box; + width: 100%; + padding: 10px; + border: 1px solid transparent; + + /* align content in thumbnail */ + display: flex; + flex-direction: column; + align-items: center; + gap: 7px; +} +.sphx-glr-thumbcontainer p { + position: absolute; + top: 0; + left: 0; +} +.sphx-glr-thumbcontainer p, +.sphx-glr-thumbcontainer p a { + /* link should cover the whole thumbnail div */ + width: 100%; + height: 100%; +} +.sphx-glr-thumbcontainer p a span { + /* text within link should be masked + (we are just interested in the href) */ + display: none; +} +.sphx-glr-thumbcontainer:hover { + border: 1px solid; + border-color: var(--sg-thumb-hover-border); + cursor: pointer; +} +.sphx-glr-thumbcontainer a.internal { + bottom: 0; + display: block; + left: 0; + box-sizing: border-box; + padding: 150px 10px 0; + position: absolute; + right: 0; + top: 0; +} +/* Next one is to avoid Sphinx traditional theme to cover all the +thumbnail with its default link Background color */ +.sphx-glr-thumbcontainer a.internal:hover { + background-color: transparent; +} + +.sphx-glr-thumbcontainer p { + margin: 0 0 0.1em 0; +} +.sphx-glr-thumbcontainer .figure { + margin: 10px; + width: 160px; +} +.sphx-glr-thumbcontainer img { + display: inline; + max-height: 112px; + max-width: 160px; +} + +.sphx-glr-thumbcontainer[tooltip]::before { + content: ""; + position: absolute; + pointer-events: none; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 97; + background-color: var(--sg-tooltip-background); + backdrop-filter: blur(3px); + opacity: 0; + transition: opacity 0.3s; +} + +.sphx-glr-thumbcontainer[tooltip]:hover::before { + opacity: 1; +} + +.sphx-glr-thumbcontainer[tooltip]:hover::after { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + color: var(--sg-tooltip-foreground); + content: attr(tooltip); + padding: 10px 10px 5px; + z-index: 98; + width: 100%; + max-height: 100%; + position: absolute; + pointer-events: none; + top: 0; + box-sizing: border-box; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 6; +} + +.sphx-glr-script-out { + color: var(--sg-script-out); + display: flex; + gap: 0.5em; +} +.sphx-glr-script-out::before { + content: "Out:"; + /* These numbers come from the pre style in the pydata sphinx theme. This + * turns out to match perfectly on the rtd theme, but be a bit too low for + * the pydata sphinx theme. As I could not find a dimension to use that was + * scaled the same way, I just picked one option that worked pretty close for + * both. */ + line-height: 1.4; + padding-top: 10px; +} +.sphx-glr-script-out .highlight { + background-color: transparent; + /* These options make the div expand... */ + flex-grow: 1; + /* ... but also keep it from overflowing its flex container. */ + overflow: auto; +} +.sphx-glr-script-out .highlight pre { + background-color: var(--sg-script-pre); + border: 0; + max-height: 30em; + overflow: auto; + padding-left: 1ex; + /* This margin is necessary in the pydata sphinx theme because pre has a box + * shadow which would be clipped by the overflow:auto in the parent div + * above. */ + margin: 2px; + word-break: break-word; +} +.sphx-glr-script-out + p { + margin-top: 1.8em; +} +blockquote.sphx-glr-script-out { + margin-left: 0pt; +} +.sphx-glr-script-out.highlight-pytb .highlight pre { + color: var(--sg-pytb-foreground); + background-color: var(--sg-pytb-background); + border: 1px solid var(--sg-pytb-border-color); + margin-top: 10px; + padding: 7px; +} + +div.sphx-glr-footer { + text-align: center; +} + +div.sphx-glr-download { + margin: 1em auto; + vertical-align: middle; +} + +div.sphx-glr-download a { + background-color: var(--sg-download-a-background-color); + background-image: var(--sg-download-a-background-image); + border-radius: 4px; + border: 1px solid var(--sg-download-a-border-color); + color: var(--sg-download-a-color); + display: inline-block; + font-weight: bold; + padding: 1ex; + text-align: center; +} + +div.sphx-glr-download code.download { + display: inline-block; + white-space: normal; + word-break: normal; + overflow-wrap: break-word; + /* border and background are given by the enclosing 'a' */ + border: none; + background: none; +} + +div.sphx-glr-download a:hover { + box-shadow: inset 0 1px 0 var(--sg-download-a-hover-box-shadow-1), 0 1px 5px var(--sg-download-a-hover-box-shadow-2); + text-decoration: none; + background-image: none; + background-color: var(--sg-download-a-hover-background-color); +} + +div.sphx-glr-sidebar-item img { + max-height: 20px; +} + +.sphx-glr-example-title:target::before { + display: block; + content: ""; + margin-top: -50px; + height: 50px; + visibility: hidden; +} + +ul.sphx-glr-horizontal { + list-style: none; + padding: 0; +} +ul.sphx-glr-horizontal li { + display: inline; +} +ul.sphx-glr-horizontal img { + height: auto !important; +} + +.sphx-glr-single-img { + margin: auto; + display: block; + max-width: 100%; +} + +.sphx-glr-multi-img { + max-width: 42%; + height: auto; +} + +div.sphx-glr-animation { + margin: auto; + display: block; + max-width: 100%; +} +div.sphx-glr-animation .animation { + display: block; +} + +p.sphx-glr-signature a.reference.external { + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + padding: 3px; + font-size: 75%; + text-align: right; + margin-left: auto; + display: table; +} + +.sphx-glr-clear { + clear: both; +} + +a.sphx-glr-backref-instance { + text-decoration: none; +} diff --git a/_static/skeleton.css b/_static/skeleton.css new file mode 100644 index 00000000..467c878c --- /dev/null +++ b/_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/_static/sphinx-design.min.css b/_static/sphinx-design.min.css new file mode 100644 index 00000000..860c36da --- /dev/null +++ b/_static/sphinx-design.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative;font-size:var(--sd-fontsize-dropdown)}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary.sd-summary-title{padding:.5em .6em .5em 1em;font-size:var(--sd-fontsize-dropdown-title);font-weight:var(--sd-fontweight-dropdown-title);user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;list-style:none;display:inline-flex;justify-content:space-between}details.sd-dropdown summary.sd-summary-title::-webkit-details-marker{display:none}details.sd-dropdown summary.sd-summary-title:focus{outline:none}details.sd-dropdown summary.sd-summary-title .sd-summary-icon{margin-right:.6em;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary.sd-summary-title .sd-summary-text{flex-grow:1;line-height:1.5;padding-right:.5rem}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker{pointer-events:none;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker svg{opacity:.6}details.sd-dropdown summary.sd-summary-title:hover .sd-summary-state-marker svg{opacity:1;transform:scale(1.1)}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown .sd-summary-chevron-right{transition:.25s}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-right{transform:rotate(90deg)}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-down{transform:rotate(180deg)}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-bg: rgba(0, 113, 188, 0.2);--sd-color-secondary-bg: rgba(108, 117, 125, 0.2);--sd-color-success-bg: rgba(40, 167, 69, 0.2);--sd-color-info-bg: rgba(23, 162, 184, 0.2);--sd-color-warning-bg: rgba(240, 179, 126, 0.2);--sd-color-danger-bg: rgba(220, 53, 69, 0.2);--sd-color-light-bg: rgba(248, 249, 250, 0.2);--sd-color-muted-bg: rgba(108, 117, 125, 0.2);--sd-color-dark-bg: rgba(33, 37, 41, 0.2);--sd-color-black-bg: rgba(0, 0, 0, 0.2);--sd-color-white-bg: rgba(255, 255, 255, 0.2);--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem;--sd-fontsize-dropdown: inherit;--sd-fontsize-dropdown-title: 1rem;--sd-fontweight-dropdown-title: 700} diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_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/_static/styles/furo-extensions.css b/_static/styles/furo-extensions.css new file mode 100644 index 00000000..82295876 --- /dev/null +++ b/_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;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/_static/styles/furo-extensions.css.map b/_static/styles/furo-extensions.css.map new file mode 100644 index 00000000..c26eac7f --- /dev/null +++ b/_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,0BAEE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cAIA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UCzCN,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 // 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/_static/styles/furo.css b/_static/styles/furo.css new file mode 100644 index 00000000..05a56b17 --- /dev/null +++ b/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}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,p,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{height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;clip:rect(0,0,0,0)!important;background:var(--color-background-primary);border:0!important;color:var(--color-foreground-primary);white-space:nowrap!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-stack--headings:var(--font-stack);--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:#6b6f76;--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:#0a4bff;--color-brand-content:#2757dd;--color-brand-visited:#872ee0;--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-api-added:#21632c;--color-api-added-border:#38a84d;--color-api-changed:#046172;--color-api-changed-border:#06a1bc;--color-api-deprecated:#605706;--color-api-deprecated-border:#f0d90f;--color-api-removed:#b30000;--color-api-removed-border:#ff5c5c;--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-underline:var(--color-background-border);--color-link--hover:var(--color-brand-content);--color-link-underline--hover:var(--color-foreground-border);--color-link--visited:var(--color-brand-visited);--color-link-underline--visited:var(--color-background-border);--color-link--visited--hover:var(--color-brand-visited);--color-link-underline--visited--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:#cfd0d0;--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:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--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-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--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:#cfd0d0;--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:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--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-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--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-light{display:block}@media(prefers-color-scheme:dark){body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-dark{display:block}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:none}}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-family:var(--font-stack--headings);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:visited{color:var(--color-link--visited);text-decoration-color:var(--color-link-underline--visited)}a:visited:hover{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}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--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link:hover:visited{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--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{height:100%}.skip-to-content,body,html{background:var(--color-background-primary);color:var(--color-foreground-primary)}.skip-to-content{border-radius:1rem;left:.25rem;padding:1rem;position:fixed;top:.25rem;transform:translateY(-200%);transition:transform .3s ease-in-out;z-index:40}.skip-to-content:focus-within{transform:translateY(0)}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{display:flex}.theme-toggle{background:transparent;border:none;cursor:pointer;display:flex;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1.25rem;width:1.25rem}.theme-toggle-header{align-items:center;display:flex;justify-content:center}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1.5rem;width:1.5rem}.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,.content-icon-container .view-this-page svg{color:inherit;height:1.25rem;width:1.25rem}.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{height:1rem;width:1rem;fill:currentColor;display:inline-block}.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){.content{margin-left:auto;margin-right:auto;padding:0 1em}}@media(max-width:63em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.theme-toggle-header,.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.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.5rem;width:1.5rem}:target{scroll-margin-top:calc(var(--header-height) + 2.5rem)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}}@media(max-width:48em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){article[role=main] 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:4.25rem}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}div.deprecated,div.versionadded,div.versionchanged,div.versionremoved{border-left:.1875rem solid;border-radius:.125rem;padding-left:.75rem}div.deprecated p,div.versionadded p,div.versionchanged p,div.versionremoved p{margin-bottom:.125rem;margin-top:.125rem}div.versionadded{border-color:var(--color-api-added-border)}div.versionadded .versionmodified{color:var(--color-api-added)}div.versionchanged{border-color:var(--color-api-changed-border)}div.versionchanged .versionmodified{color:var(--color-api-changed)}div.deprecated{border-color:var(--color-api-deprecated-border)}div.deprecated .versionmodified{color:var(--color-api-deprecated)}div.versionremoved{border-color:var(--color-api-removed-border)}div.versionremoved .versionmodified{color:var(--color-api-removed)}.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>:not(span),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}[role=main] .table-wrapper.container{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:2.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(2.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(2.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);color:var(--color-sidebar-link-text)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23607D8B' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24'%3E%3Cpath stroke='none' d='M0 0h24v24H0z'/%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 a.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/_static/styles/furo.css.map b/_static/styles/furo.css.map new file mode 100644 index 00000000..3ecc3715 --- /dev/null +++ b/_static/styles/furo.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo.css","mappings":"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sCAIA,aADF,WACE,CAKF,SACE,CAHJ,kBAEE,CAJE,gBAEJ,CAHI,iBAMA,yFAKA,aACA,eACA,cElbJ,iBAEE,aADA,iBACA,6BAEA,kCAEA,SACA,UAIA,gCACA,CALA,SAEA,SAEA,CAJA,0EAEA,CAFA,OAKA,CAGA,mDACE,iBAGF,gCACE,CADF,UACE,aAEJ,iCAEE,CAFF,UAEE,wCAEA,WACA,WADA,UACA,CACA,4CAGA,MACA,CADA,KACA,wCACA,UAGA,CAJA,UAIA,6DAUA,0CACE,CAFF,mBAEE,wEACA,CAVA,YACA,CAMF,mBAJE,OAOA,gBAJJ,gCACE,CANE,cACA,CAHA,oBACA,CAGA,QAGJ,CAII,0BACA,CADA,UACA,wCAEJ,kBACE,0DACA,gCACE,kBACA,CADA,YACA,oEACA,2CAMF,mDAII,CALN,YACE,CANE,cAKJ,CACE,iBAII,kEACA,yCACE,kDACA,yDACE,+CACA,uBANN,CAMM,+BANN,uCACE,qDACA,4BAEE,mBADA,0CACA,CADA,qBACA,0DACE,wCACA,sGALJ,oCACA,sBACE,kBAFF,UAEE,2CACA,wFACE,cACA,kEANN,uBACE,iDACA,CADA,UACA,0DACE,wDAEE,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,kE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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/variables/_layout.scss","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, p\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 color: var(--color-foreground-primary)\n background: var(--color-background-primary)\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-light\n display: block\n\n @media (prefers-color-scheme: dark)\n .theme-toggle svg.theme-icon-when-auto-dark\n display: block\n .theme-toggle svg.theme-icon-when-auto-light\n display: none\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 --font-stack--headings: var(--font-stack);\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: #6b6f76; // 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: #0a4bff;\n --color-brand-content: #2757dd;\n --color-brand-visited: #872ee0;\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\n --color-api-added: #21632c;\n --color-api-added-border: #38a84d;\n --color-api-changed: #046172;\n --color-api-changed-border: #06a1bc;\n --color-api-deprecated: #605706;\n --color-api-deprecated-border: #f0d90f;\n --color-api-removed: #b30000;\n --color-api-removed-border: #ff5c5c;\n\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-underline: var(--color-background-border);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline--hover: var(--color-foreground-border);\n\n --color-link--visited: var(--color-brand-visited);\n --color-link-underline--visited: var(--color-background-border);\n --color-link--visited--hover: var(--color-brand-visited);\n --color-link-underline--visited--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #cfd0d0; // 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: #3d94ff;\n --color-brand-content: #5ca5ff;\n --color-brand-visited: #b27aeb;\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 --color-api-added: #3db854;\n --color-api-added-border: #267334;\n --color-api-changed: #09b0ce;\n --color-api-changed-border: #056d80;\n --color-api-deprecated: #b1a10b;\n --color-api-deprecated-border: #6e6407;\n --color-api-removed: #ff7575;\n --color-api-removed-border: #b03b3b;\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-family: var(--font-stack--headings)\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 &:visited\n color: var(--color-link--visited)\n text-decoration-color: var(--color-link-underline--visited)\n &:hover\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\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--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &:visited\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--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\n.skip-to-content\n position: fixed\n padding: 1rem\n border-radius: 1rem\n left: 0.25rem\n top: 0.25rem\n z-index: 40\n background: var(--color-background-primary)\n color: var(--color-foreground-primary)\n\n transform: translateY(-200%)\n transition: transform 300ms ease-in-out\n\n &:focus-within\n transform: translateY(0%)\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 display: flex\n\n.theme-toggle\n display: flex\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n display: flex\n align-items: center\n justify-content: center\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: 1.5rem\n width: 1.5rem\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, .view-this-page\n svg\n color: inherit\n height: 1.25rem\n width: 1.25rem\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: $content-padded-width + $sidebar-width)\n // Center the page\n .content\n margin-left: auto\n margin-right: auto\n padding: 0 $content-padding--small\n\n@media (max-width: $content-padded-width--small + $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, .theme-toggle-header\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\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.5rem\n width: 1.5rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: calc(var(--header-height) + 2.5rem)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n\n@media (max-width: $content-width + 2* $content-padding--small)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n article[role=main] aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","// Overall Layout Variables\n//\n// Because CSS variables can't be used in media queries. The fact that this\n// makes the layout non-user-configurable is a good thing.\n$content-padding: 3em;\n$content-padding--small: 1em;\n$content-width: 46em;\n$sidebar-width: 15em;\n$content-padded-width: $content-width + 2 * $content-padding;\n$content-padded-width--small: $content-width + 2 * $content-padding--small;\n$full-width: $content-padded-width + 2 * $sidebar-width;\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: 4.25rem\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\ndiv.versionadded,\ndiv.versionchanged,\ndiv.deprecated,\ndiv.versionremoved\n border-left: 0.1875rem solid\n border-radius: 0.125rem\n\n padding-left: 0.75rem\n\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\ndiv.versionadded\n border-color: var(--color-api-added-border)\n .versionmodified\n color: var(--color-api-added)\n\ndiv.versionchanged\n border-color: var(--color-api-changed-border)\n .versionmodified\n color: var(--color-api-changed)\n\ndiv.deprecated\n border-color: var(--color-api-deprecated-border)\n .versionmodified\n color: var(--color-api-deprecated)\n\ndiv.versionremoved\n border-color: var(--color-api-removed-border)\n .versionmodified\n color: var(--color-api-removed)\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 > *:not(span),\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","[role=main] .table-wrapper.container\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: 2.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(2.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(2.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 color: var(--color-sidebar-link-text)\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