diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..d5b89cc --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 61fa07eeb98b594aeb09c2db430645a2 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/_images/index_4_0.png b/_images/index_4_0.png new file mode 100644 index 0000000..499ea27 Binary files /dev/null and b/_images/index_4_0.png differ diff --git a/_images/tutorials_filterbank_classification_bci_10_0.png b/_images/tutorials_filterbank_classification_bci_10_0.png new file mode 100644 index 0000000..00d7623 Binary files /dev/null and b/_images/tutorials_filterbank_classification_bci_10_0.png differ diff --git a/_images/tutorials_filterbank_classification_bci_10_1.png b/_images/tutorials_filterbank_classification_bci_10_1.png new file mode 100644 index 0000000..f2076fa Binary files /dev/null and b/_images/tutorials_filterbank_classification_bci_10_1.png differ diff --git a/_images/tutorials_filterbank_kernel_classification_bci_10_0.png b/_images/tutorials_filterbank_kernel_classification_bci_10_0.png new file mode 100644 index 0000000..989799c Binary files /dev/null and b/_images/tutorials_filterbank_kernel_classification_bci_10_0.png differ diff --git a/_images/tutorials_filterbank_kernel_classification_bci_10_1.png b/_images/tutorials_filterbank_kernel_classification_bci_10_1.png new file mode 100644 index 0000000..dd40e4d Binary files /dev/null and b/_images/tutorials_filterbank_kernel_classification_bci_10_1.png differ diff --git a/_images/tutorials_filterbank_kernel_classification_bci_14_1.png b/_images/tutorials_filterbank_kernel_classification_bci_14_1.png new file mode 100644 index 0000000..0ab1500 Binary files /dev/null and b/_images/tutorials_filterbank_kernel_classification_bci_14_1.png differ diff --git a/_sources/api.rst.txt b/_sources/api.rst.txt new file mode 100644 index 0000000..1aeabea --- /dev/null +++ b/_sources/api.rst.txt @@ -0,0 +1,77 @@ +.. _api_ref: + +============= +API reference +============= + + +Composing modeling pipelines +---------------------------- +.. _pipeline_api: +.. currentmodule:: coffeine.pipelines + +.. autosummary:: + :toctree: generated/ + :template: function.rst + + make_filter_bank_transformer + make_filter_bank_regressor + make_filter_bank_classifier + + +.. autosummary:: + :toctree: generated/ + :template: class.rst + + GaussianKernel + KernelSum + + +Computing Power-Spectral Features +--------------------------------- +.. _features_api: +.. currentmodule:: coffeine.power_features + +.. autosummary:: + :toctree: generated/ + :template: function.rst + + get_frequency_bands + make_coffeine_data_frame + compute_coffeine + compute_features + + +Covariance Transformers +----------------------- +.. _covariance_transformer_api: +.. currentmodule:: coffeine.covariance_transformers + +.. autosummary:: + :toctree: generated/ + :template: class.rst + + NaiveVec + Diag + LogDiag + Riemann + RiemannSnp + Snp + ExpandFeatures + + +Spatiel Filters +--------------- +.. _spatial_filters_api: +.. currentmodule:: coffeine.spatial_filters + +.. autosummary:: + :toctree: generated/ + :template: class.rst + + ProjIdentitySpace + ProjCommonSpace + ProjLWSpace + ProjRandomSpace + ProjSPoCSpace + diff --git a/_sources/generated/coffeine.covariance_transformers.Diag.rst.txt b/_sources/generated/coffeine.covariance_transformers.Diag.rst.txt new file mode 100644 index 0000000..25fae5f --- /dev/null +++ b/_sources/generated/coffeine.covariance_transformers.Diag.rst.txt @@ -0,0 +1,6 @@ +coffeine.covariance\_transformers.Diag +====================================== + +.. currentmodule:: coffeine.covariance_transformers + +.. autoclass:: Diag \ No newline at end of file diff --git a/_sources/generated/coffeine.covariance_transformers.ExpandFeatures.rst.txt b/_sources/generated/coffeine.covariance_transformers.ExpandFeatures.rst.txt new file mode 100644 index 0000000..92866ad --- /dev/null +++ b/_sources/generated/coffeine.covariance_transformers.ExpandFeatures.rst.txt @@ -0,0 +1,6 @@ +coffeine.covariance\_transformers.ExpandFeatures +================================================ + +.. currentmodule:: coffeine.covariance_transformers + +.. autoclass:: ExpandFeatures \ No newline at end of file diff --git a/_sources/generated/coffeine.covariance_transformers.LogDiag.rst.txt b/_sources/generated/coffeine.covariance_transformers.LogDiag.rst.txt new file mode 100644 index 0000000..24dbda2 --- /dev/null +++ b/_sources/generated/coffeine.covariance_transformers.LogDiag.rst.txt @@ -0,0 +1,6 @@ +coffeine.covariance\_transformers.LogDiag +========================================= + +.. currentmodule:: coffeine.covariance_transformers + +.. autoclass:: LogDiag \ No newline at end of file diff --git a/_sources/generated/coffeine.covariance_transformers.NaiveVec.rst.txt b/_sources/generated/coffeine.covariance_transformers.NaiveVec.rst.txt new file mode 100644 index 0000000..477e8fb --- /dev/null +++ b/_sources/generated/coffeine.covariance_transformers.NaiveVec.rst.txt @@ -0,0 +1,6 @@ +coffeine.covariance\_transformers.NaiveVec +========================================== + +.. currentmodule:: coffeine.covariance_transformers + +.. autoclass:: NaiveVec \ No newline at end of file diff --git a/_sources/generated/coffeine.covariance_transformers.Riemann.rst.txt b/_sources/generated/coffeine.covariance_transformers.Riemann.rst.txt new file mode 100644 index 0000000..4d87997 --- /dev/null +++ b/_sources/generated/coffeine.covariance_transformers.Riemann.rst.txt @@ -0,0 +1,6 @@ +coffeine.covariance\_transformers.Riemann +========================================= + +.. currentmodule:: coffeine.covariance_transformers + +.. autoclass:: Riemann \ No newline at end of file diff --git a/_sources/generated/coffeine.covariance_transformers.RiemannSnp.rst.txt b/_sources/generated/coffeine.covariance_transformers.RiemannSnp.rst.txt new file mode 100644 index 0000000..54d8f69 --- /dev/null +++ b/_sources/generated/coffeine.covariance_transformers.RiemannSnp.rst.txt @@ -0,0 +1,6 @@ +coffeine.covariance\_transformers.RiemannSnp +============================================ + +.. currentmodule:: coffeine.covariance_transformers + +.. autoclass:: RiemannSnp \ No newline at end of file diff --git a/_sources/generated/coffeine.covariance_transformers.Snp.rst.txt b/_sources/generated/coffeine.covariance_transformers.Snp.rst.txt new file mode 100644 index 0000000..e11385e --- /dev/null +++ b/_sources/generated/coffeine.covariance_transformers.Snp.rst.txt @@ -0,0 +1,6 @@ +coffeine.covariance\_transformers.Snp +===================================== + +.. currentmodule:: coffeine.covariance_transformers + +.. autoclass:: Snp \ No newline at end of file diff --git a/_sources/generated/coffeine.pipelines.GaussianKernel.rst.txt b/_sources/generated/coffeine.pipelines.GaussianKernel.rst.txt new file mode 100644 index 0000000..8e984b2 --- /dev/null +++ b/_sources/generated/coffeine.pipelines.GaussianKernel.rst.txt @@ -0,0 +1,6 @@ +coffeine.pipelines.GaussianKernel +================================= + +.. currentmodule:: coffeine.pipelines + +.. autoclass:: GaussianKernel \ No newline at end of file diff --git a/_sources/generated/coffeine.pipelines.KernelSum.rst.txt b/_sources/generated/coffeine.pipelines.KernelSum.rst.txt new file mode 100644 index 0000000..4721716 --- /dev/null +++ b/_sources/generated/coffeine.pipelines.KernelSum.rst.txt @@ -0,0 +1,6 @@ +coffeine.pipelines.KernelSum +============================ + +.. currentmodule:: coffeine.pipelines + +.. autoclass:: KernelSum \ No newline at end of file diff --git a/_sources/generated/coffeine.pipelines.make_filter_bank_classifier.rst.txt b/_sources/generated/coffeine.pipelines.make_filter_bank_classifier.rst.txt new file mode 100644 index 0000000..aea1c52 --- /dev/null +++ b/_sources/generated/coffeine.pipelines.make_filter_bank_classifier.rst.txt @@ -0,0 +1,6 @@ +coffeine.pipelines.make\_filter\_bank\_classifier +================================================= + +.. currentmodule:: coffeine.pipelines + +.. autofunction:: make_filter_bank_classifier \ No newline at end of file diff --git a/_sources/generated/coffeine.pipelines.make_filter_bank_regressor.rst.txt b/_sources/generated/coffeine.pipelines.make_filter_bank_regressor.rst.txt new file mode 100644 index 0000000..9df7ea4 --- /dev/null +++ b/_sources/generated/coffeine.pipelines.make_filter_bank_regressor.rst.txt @@ -0,0 +1,6 @@ +coffeine.pipelines.make\_filter\_bank\_regressor +================================================ + +.. currentmodule:: coffeine.pipelines + +.. autofunction:: make_filter_bank_regressor \ No newline at end of file diff --git a/_sources/generated/coffeine.pipelines.make_filter_bank_transformer.rst.txt b/_sources/generated/coffeine.pipelines.make_filter_bank_transformer.rst.txt new file mode 100644 index 0000000..29ad87c --- /dev/null +++ b/_sources/generated/coffeine.pipelines.make_filter_bank_transformer.rst.txt @@ -0,0 +1,6 @@ +coffeine.pipelines.make\_filter\_bank\_transformer +================================================== + +.. currentmodule:: coffeine.pipelines + +.. autofunction:: make_filter_bank_transformer \ No newline at end of file diff --git a/_sources/generated/coffeine.power_features.compute_coffeine.rst.txt b/_sources/generated/coffeine.power_features.compute_coffeine.rst.txt new file mode 100644 index 0000000..1be1a00 --- /dev/null +++ b/_sources/generated/coffeine.power_features.compute_coffeine.rst.txt @@ -0,0 +1,6 @@ +coffeine.power\_features.compute\_coffeine +========================================== + +.. currentmodule:: coffeine.power_features + +.. autofunction:: compute_coffeine \ No newline at end of file diff --git a/_sources/generated/coffeine.power_features.compute_features.rst.txt b/_sources/generated/coffeine.power_features.compute_features.rst.txt new file mode 100644 index 0000000..cebf911 --- /dev/null +++ b/_sources/generated/coffeine.power_features.compute_features.rst.txt @@ -0,0 +1,6 @@ +coffeine.power\_features.compute\_features +========================================== + +.. currentmodule:: coffeine.power_features + +.. autofunction:: compute_features \ No newline at end of file diff --git a/_sources/generated/coffeine.power_features.get_frequency_bands.rst.txt b/_sources/generated/coffeine.power_features.get_frequency_bands.rst.txt new file mode 100644 index 0000000..08e9d48 --- /dev/null +++ b/_sources/generated/coffeine.power_features.get_frequency_bands.rst.txt @@ -0,0 +1,6 @@ +coffeine.power\_features.get\_frequency\_bands +============================================== + +.. currentmodule:: coffeine.power_features + +.. autofunction:: get_frequency_bands \ No newline at end of file diff --git a/_sources/generated/coffeine.power_features.make_coffeine_data_frame.rst.txt b/_sources/generated/coffeine.power_features.make_coffeine_data_frame.rst.txt new file mode 100644 index 0000000..8f77dac --- /dev/null +++ b/_sources/generated/coffeine.power_features.make_coffeine_data_frame.rst.txt @@ -0,0 +1,6 @@ +coffeine.power\_features.make\_coffeine\_data\_frame +==================================================== + +.. currentmodule:: coffeine.power_features + +.. autofunction:: make_coffeine_data_frame \ No newline at end of file diff --git a/_sources/generated/coffeine.spatial_filters.ProjCommonSpace.rst.txt b/_sources/generated/coffeine.spatial_filters.ProjCommonSpace.rst.txt new file mode 100644 index 0000000..70442a6 --- /dev/null +++ b/_sources/generated/coffeine.spatial_filters.ProjCommonSpace.rst.txt @@ -0,0 +1,6 @@ +coffeine.spatial\_filters.ProjCommonSpace +========================================= + +.. currentmodule:: coffeine.spatial_filters + +.. autoclass:: ProjCommonSpace \ No newline at end of file diff --git a/_sources/generated/coffeine.spatial_filters.ProjIdentitySpace.rst.txt b/_sources/generated/coffeine.spatial_filters.ProjIdentitySpace.rst.txt new file mode 100644 index 0000000..e6ab113 --- /dev/null +++ b/_sources/generated/coffeine.spatial_filters.ProjIdentitySpace.rst.txt @@ -0,0 +1,6 @@ +coffeine.spatial\_filters.ProjIdentitySpace +=========================================== + +.. currentmodule:: coffeine.spatial_filters + +.. autoclass:: ProjIdentitySpace \ No newline at end of file diff --git a/_sources/generated/coffeine.spatial_filters.ProjLWSpace.rst.txt b/_sources/generated/coffeine.spatial_filters.ProjLWSpace.rst.txt new file mode 100644 index 0000000..b62dbbc --- /dev/null +++ b/_sources/generated/coffeine.spatial_filters.ProjLWSpace.rst.txt @@ -0,0 +1,6 @@ +coffeine.spatial\_filters.ProjLWSpace +===================================== + +.. currentmodule:: coffeine.spatial_filters + +.. autoclass:: ProjLWSpace \ No newline at end of file diff --git a/_sources/generated/coffeine.spatial_filters.ProjRandomSpace.rst.txt b/_sources/generated/coffeine.spatial_filters.ProjRandomSpace.rst.txt new file mode 100644 index 0000000..e25c258 --- /dev/null +++ b/_sources/generated/coffeine.spatial_filters.ProjRandomSpace.rst.txt @@ -0,0 +1,6 @@ +coffeine.spatial\_filters.ProjRandomSpace +========================================= + +.. currentmodule:: coffeine.spatial_filters + +.. autoclass:: ProjRandomSpace \ No newline at end of file diff --git a/_sources/generated/coffeine.spatial_filters.ProjSPoCSpace.rst.txt b/_sources/generated/coffeine.spatial_filters.ProjSPoCSpace.rst.txt new file mode 100644 index 0000000..264db5e --- /dev/null +++ b/_sources/generated/coffeine.spatial_filters.ProjSPoCSpace.rst.txt @@ -0,0 +1,6 @@ +coffeine.spatial\_filters.ProjSPoCSpace +======================================= + +.. currentmodule:: coffeine.spatial_filters + +.. autoclass:: ProjSPoCSpace \ No newline at end of file diff --git a/_sources/index.ipynb.txt b/_sources/index.ipynb.txt new file mode 100644 index 0000000..c45fae2 --- /dev/null +++ b/_sources/index.ipynb.txt @@ -0,0 +1,302 @@ +{ + "cells": [ + { + "cell_type": "raw", + "id": "20915c70", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + "Coffeine: Covariance Data Frames for Predictive M/EEG Pipelines\n", + "===============================================================" + ] + }, + { + "cell_type": "markdown", + "id": "fba6e8ad", + "metadata": {}, + "source": [ + "## Covariances in Data Frames for predictive modeling\n", + "\n", + "Coffeine is designed for building biomedical prediction models from M/EEG signals. The library provides a high-level interface facilitating the use of M/EEG covariance matrix as representation of the signal. The methods implemented here make use of tools and concepts implemented in [PyRiemann](https://pyriemann.readthedocs.io/). The API is fully compatible with [scikit-learn](https://scikit-learn.org/))." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "39898548", + "metadata": { + "nbsphinx": "hidden" + }, + "outputs": [], + "source": [ + "# this is a hidden cell (see metadata)\n", + "import mne\n", + "mne.utils.set_log_level('critical')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "18fb6cda", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(reg=1e-05)),\n", + " ('riemann',\n", + " Riemann())]),\n", + " 'delta'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(reg=1e-05)),\n", + " ('riemann',\n", + " Riemann())]),\n", + " 'theta'),\n", + " ('pipeline-3',\n", + " Pipeline(steps=[('projc...\n", + " 1.38488637e+03, 1.66810054e+03, 2.00923300e+03, 2.42012826e+03,\n", + " 2.91505306e+03, 3.51119173e+03, 4.22924287e+03, 5.09413801e+03,\n", + " 6.13590727e+03, 7.39072203e+03, 8.90215085e+03, 1.07226722e+04,\n", + " 1.29154967e+04, 1.55567614e+04, 1.87381742e+04, 2.25701972e+04,\n", + " 2.71858824e+04, 3.27454916e+04, 3.94420606e+04, 4.75081016e+04,\n", + " 5.72236766e+04, 6.89261210e+04, 8.30217568e+04, 1.00000000e+05])))])In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(reg=1e-05)),\n", + " ('riemann',\n", + " Riemann())]),\n", + " 'delta'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(reg=1e-05)),\n", + " ('riemann',\n", + " Riemann())]),\n", + " 'theta'),\n", + " ('pipeline-3',\n", + " Pipeline(steps=[('projc...\n", + " 1.38488637e+03, 1.66810054e+03, 2.00923300e+03, 2.42012826e+03,\n", + " 2.91505306e+03, 3.51119173e+03, 4.22924287e+03, 5.09413801e+03,\n", + " 6.13590727e+03, 7.39072203e+03, 8.90215085e+03, 1.07226722e+04,\n", + " 1.29154967e+04, 1.55567614e+04, 1.87381742e+04, 2.25701972e+04,\n", + " 2.71858824e+04, 3.27454916e+04, 3.94420606e+04, 4.75081016e+04,\n", + " 5.72236766e+04, 6.89261210e+04, 8.30217568e+04, 1.00000000e+05])))])
ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(reg=1e-05)),\n", + " ('riemann', Riemann())]),\n", + " 'delta'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(reg=1e-05)),\n", + " ('riemann', Riemann())]),\n", + " 'theta'),\n", + " ('pipeline-3',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(reg=1e-05)),\n", + " ('riemann', Riemann())]),\n", + " 'alpha1')])
delta
ProjCommonSpace(reg=1e-05)
Riemann()
theta
ProjCommonSpace(reg=1e-05)
Riemann()
alpha1
ProjCommonSpace(reg=1e-05)
Riemann()
[]
passthrough
StandardScaler()
RidgeCV(alphas=array([1.00000000e-03, 1.20450354e-03, 1.45082878e-03, 1.74752840e-03,\n", + " 2.10490414e-03, 2.53536449e-03, 3.05385551e-03, 3.67837977e-03,\n", + " 4.43062146e-03, 5.33669923e-03, 6.42807312e-03, 7.74263683e-03,\n", + " 9.32603347e-03, 1.12332403e-02, 1.35304777e-02, 1.62975083e-02,\n", + " 1.96304065e-02, 2.36448941e-02, 2.84803587e-02, 3.43046929e-02,\n", + " 4.13201240e-02, 4.97702356e-0...\n", + " 1.38488637e+03, 1.66810054e+03, 2.00923300e+03, 2.42012826e+03,\n", + " 2.91505306e+03, 3.51119173e+03, 4.22924287e+03, 5.09413801e+03,\n", + " 6.13590727e+03, 7.39072203e+03, 8.90215085e+03, 1.07226722e+04,\n", + " 1.29154967e+04, 1.55567614e+04, 1.87381742e+04, 2.25701972e+04,\n", + " 2.71858824e+04, 3.27454916e+04, 3.94420606e+04, 4.75081016e+04,\n", + " 5.72236766e+04, 6.89261210e+04, 8.30217568e+04, 1.00000000e+05]))
\n", + " | alpha1 | \n", + "alpha2 | \n", + "
---|---|---|
0 | \n", + "[[9.899550941533323e-11, 1.0150193223596802e-1... | \n", + "[[1.0496460732612284e-10, 1.1822827054921826e-... | \n", + "
1 | \n", + "[[9.709858344182252e-11, 8.928610694895678e-11... | \n", + "[[9.006992581133798e-11, 8.001210027471314e-11... | \n", + "
2 | \n", + "[[1.6005797216165005e-10, 1.7120265854899606e-... | \n", + "[[1.293161103688762e-10, 1.4271783164176115e-1... | \n", + "
3 | \n", + "[[1.0282494751586467e-10, 1.0768228603843818e-... | \n", + "[[1.7453066588408235e-10, 2.1678207719155826e-... | \n", + "
4 | \n", + "[[2.029473693821182e-10, 2.0201658837032425e-1... | \n", + "[[1.9550977509808572e-10, 1.979325286585598e-1... | \n", + "
\n", + " | alpha1 | \n", + "alpha2 | \n", + "
---|---|---|
0 | \n", + "[[9.899550941533323e-11, 1.0150193223596802e-1... | \n", + "[[1.0496460732612292e-10, 1.182282705492182e-1... | \n", + "
1 | \n", + "[[9.709858344182261e-11, 8.928610694895676e-11... | \n", + "[[9.006992581133795e-11, 8.001210027471314e-11... | \n", + "
2 | \n", + "[[1.6005797216165005e-10, 1.7120265854899606e-... | \n", + "[[1.2931611036887622e-10, 1.4271783164176122e-... | \n", + "
3 | \n", + "[[1.0282494751586464e-10, 1.0768228603843814e-... | \n", + "[[1.7453066588408227e-10, 2.1678207719155818e-... | \n", + "
4 | \n", + "[[2.029473693821182e-10, 2.0201658837032425e-1... | \n", + "[[1.955097750980857e-10, 1.9793252865855997e-1... | \n", + "
Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])),\n", + " ('kernelsum', KernelSum())])In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])),\n", + " ('kernelsum', KernelSum())])
ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])
alpha1
ProjCommonSpace(n_compo=60, reg=1e-05, scale=1)
Riemann(metric='logeuclid')
GaussianKernel()
alpha2
ProjCommonSpace(n_compo=60, reg=1e-05, scale=1)
Riemann(metric='logeuclid')
GaussianKernel()
passthrough
KernelSum()
Pipeline(steps=[('pipeline',\n", + " Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])),\n", + " ('kernelsum', KernelSum())])),\n", + " ('kernelridge',\n", + " KernelRidge(alpha=1e-10, kernel='precomputed'))])In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
Pipeline(steps=[('pipeline',\n", + " Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])),\n", + " ('kernelsum', KernelSum())])),\n", + " ('kernelridge',\n", + " KernelRidge(alpha=1e-10, kernel='precomputed'))])
Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])),\n", + " ('kernelsum', KernelSum())])
ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])
alpha1
ProjCommonSpace(n_compo=60, reg=1e-05, scale=1)
Riemann(metric='logeuclid')
GaussianKernel()
alpha2
ProjCommonSpace(n_compo=60, reg=1e-05, scale=1)
Riemann(metric='logeuclid')
GaussianKernel()
[]
passthrough
KernelSum()
KernelRidge(alpha=1e-10, kernel='precomputed')
GridSearchCV(error_score='raise',\n", + " estimator=Pipeline(steps=[('pipeline',\n", + " Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('...\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])),\n", + " ('kernelsum',\n", + " KernelSum())])),\n", + " ('kernelridge',\n", + " KernelRidge(alpha=1e-10,\n", + " kernel='precomputed'))]),\n", + " n_jobs=2,\n", + " param_grid={'pipeline__columntransformer__pipeline-1__gaussiankernel__sigma': array([ 1., 10., 100.]),\n", + " 'pipeline__columntransformer__pipeline-2__gaussiankernel__sigma': array([ 1., 10., 100.])},\n", + " scoring='roc_auc')In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
GridSearchCV(error_score='raise',\n", + " estimator=Pipeline(steps=[('pipeline',\n", + " Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('...\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])),\n", + " ('kernelsum',\n", + " KernelSum())])),\n", + " ('kernelridge',\n", + " KernelRidge(alpha=1e-10,\n", + " kernel='precomputed'))]),\n", + " n_jobs=2,\n", + " param_grid={'pipeline__columntransformer__pipeline-1__gaussiankernel__sigma': array([ 1., 10., 100.]),\n", + " 'pipeline__columntransformer__pipeline-2__gaussiankernel__sigma': array([ 1., 10., 100.])},\n", + " scoring='roc_auc')
Pipeline(steps=[('pipeline',\n", + " Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])),\n", + " ('kernelsum', KernelSum())])),\n", + " ('kernelridge',\n", + " KernelRidge(alpha=1e-10, kernel='precomputed'))])
Pipeline(steps=[('columntransformer',\n", + " ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])),\n", + " ('kernelsum', KernelSum())])
ColumnTransformer(remainder='passthrough',\n", + " transformers=[('pipeline-1',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha1'),\n", + " ('pipeline-2',\n", + " Pipeline(steps=[('projcommonspace',\n", + " ProjCommonSpace(n_compo=60,\n", + " reg=1e-05,\n", + " scale=1)),\n", + " ('riemann',\n", + " Riemann(metric='logeuclid')),\n", + " ('gaussiankernel',\n", + " GaussianKernel())]),\n", + " 'alpha2')])
alpha1
ProjCommonSpace(n_compo=60, reg=1e-05, scale=1)
Riemann(metric='logeuclid')
GaussianKernel()
alpha2
ProjCommonSpace(n_compo=60, reg=1e-05, scale=1)
Riemann(metric='logeuclid')
GaussianKernel()
[]
passthrough
KernelSum()
KernelRidge(alpha=1e-10, kernel='precomputed')
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 0000000..2ea7ff3 --- /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 = `` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = `` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 0000000..dbe1aaa --- /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/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..f43f618 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '0.3dev', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: true, + 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 0000000..a858a41 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/graphviz.css b/_static/graphviz.css new file mode 100644 index 0000000..8d81c02 --- /dev/null +++ b/_static/graphviz.css @@ -0,0 +1,19 @@ +/* + * graphviz.css + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- graphviz extension. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 0000000..250f566 --- /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-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/nbsphinx-broken-thumbnail.svg b/_static/nbsphinx-broken-thumbnail.svg new file mode 100644 index 0000000..4919ca8 --- /dev/null +++ b/_static/nbsphinx-broken-thumbnail.svg @@ -0,0 +1,9 @@ + diff --git a/_static/nbsphinx-code-cells.css b/_static/nbsphinx-code-cells.css new file mode 100644 index 0000000..a3fb27c --- /dev/null +++ b/_static/nbsphinx-code-cells.css @@ -0,0 +1,259 @@ +/* remove conflicting styling from Sphinx themes */ +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt *, +div.nbinput.container div.input_area pre, +div.nboutput.container div.output_area pre, +div.nbinput.container div.input_area .highlight, +div.nboutput.container div.output_area .highlight { + border: none; + padding: 0; + margin: 0; + box-shadow: none; +} + +div.nbinput.container > div[class*=highlight], +div.nboutput.container > div[class*=highlight] { + margin: 0; +} + +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt * { + background: none; +} + +div.nboutput.container div.output_area .highlight, +div.nboutput.container div.output_area pre { + background: unset; +} + +div.nboutput.container div.output_area div.highlight { + color: unset; /* override Pygments text color */ +} + +/* avoid gaps between output lines */ +div.nboutput.container div[class*=highlight] pre { + line-height: normal; +} + +/* input/output containers */ +div.nbinput.container, +div.nboutput.container { + display: -webkit-flex; + display: flex; + align-items: flex-start; + margin: 0; + width: 100%; +} +@media (max-width: 540px) { + div.nbinput.container, + div.nboutput.container { + flex-direction: column; + } +} + +/* input container */ +div.nbinput.container { + padding-top: 5px; +} + +/* last container */ +div.nblast.container { + padding-bottom: 5px; +} + +/* input prompt */ +div.nbinput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nbinput.container div.prompt pre > code { + color: #307FC1; +} + +/* output prompt */ +div.nboutput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nboutput.container div.prompt pre > code { + color: #BF5B3D; +} + +/* all prompts */ +div.nbinput.container div.prompt, +div.nboutput.container div.prompt { + width: 4.5ex; + padding-top: 5px; + position: relative; + user-select: none; +} + +div.nbinput.container div.prompt > div, +div.nboutput.container div.prompt > div { + position: absolute; + right: 0; + margin-right: 0.3ex; +} + +@media (max-width: 540px) { + div.nbinput.container div.prompt, + div.nboutput.container div.prompt { + width: unset; + text-align: left; + padding: 0.4em; + } + div.nboutput.container div.prompt.empty { + padding: 0; + } + + div.nbinput.container div.prompt > div, + div.nboutput.container div.prompt > div { + position: unset; + } +} + +/* disable scrollbars and line breaks on prompts */ +div.nbinput.container div.prompt pre, +div.nboutput.container div.prompt pre { + overflow: hidden; + white-space: pre; +} + +/* input/output area */ +div.nbinput.container div.input_area, +div.nboutput.container div.output_area { + -webkit-flex: 1; + flex: 1; + overflow: auto; +} +@media (max-width: 540px) { + div.nbinput.container div.input_area, + div.nboutput.container div.output_area { + width: 100%; + } +} + +/* input area */ +div.nbinput.container div.input_area { + border: 1px solid #e0e0e0; + border-radius: 2px; + /*background: #f5f5f5;*/ +} + +/* override MathJax center alignment in output cells */ +div.nboutput.container div[class*=MathJax] { + text-align: left !important; +} + +/* override sphinx.ext.imgmath center alignment in output cells */ +div.nboutput.container div.math p { + text-align: left; +} + +/* standard error */ +div.nboutput.container div.output_area.stderr { + background: #fdd; +} + +/* ANSI colors */ +.ansi-black-fg { color: #3E424D; } +.ansi-black-bg { background-color: #3E424D; } +.ansi-black-intense-fg { color: #282C36; } +.ansi-black-intense-bg { background-color: #282C36; } +.ansi-red-fg { color: #E75C58; } +.ansi-red-bg { background-color: #E75C58; } +.ansi-red-intense-fg { color: #B22B31; } +.ansi-red-intense-bg { background-color: #B22B31; } +.ansi-green-fg { color: #00A250; } +.ansi-green-bg { background-color: #00A250; } +.ansi-green-intense-fg { color: #007427; } +.ansi-green-intense-bg { background-color: #007427; } +.ansi-yellow-fg { color: #DDB62B; } +.ansi-yellow-bg { background-color: #DDB62B; } +.ansi-yellow-intense-fg { color: #B27D12; } +.ansi-yellow-intense-bg { background-color: #B27D12; } +.ansi-blue-fg { color: #208FFB; } +.ansi-blue-bg { background-color: #208FFB; } +.ansi-blue-intense-fg { color: #0065CA; } +.ansi-blue-intense-bg { background-color: #0065CA; } +.ansi-magenta-fg { color: #D160C4; } +.ansi-magenta-bg { background-color: #D160C4; } +.ansi-magenta-intense-fg { color: #A03196; } +.ansi-magenta-intense-bg { background-color: #A03196; } +.ansi-cyan-fg { color: #60C6C8; } +.ansi-cyan-bg { background-color: #60C6C8; } +.ansi-cyan-intense-fg { color: #258F8F; } +.ansi-cyan-intense-bg { background-color: #258F8F; } +.ansi-white-fg { color: #C5C1B4; } +.ansi-white-bg { background-color: #C5C1B4; } +.ansi-white-intense-fg { color: #A1A6B2; } +.ansi-white-intense-bg { background-color: #A1A6B2; } + +.ansi-default-inverse-fg { color: #FFFFFF; } +.ansi-default-inverse-bg { background-color: #000000; } + +.ansi-bold { font-weight: bold; } +.ansi-underline { text-decoration: underline; } + + +div.nbinput.container div.input_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight].math, +div.nboutput.container div.output_area.rendered_html, +div.nboutput.container div.output_area > div.output_javascript, +div.nboutput.container div.output_area:not(.rendered_html) > img{ + padding: 5px; + margin: 0; +} + +/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ +div.nbinput.container div.input_area > div[class^='highlight'], +div.nboutput.container div.output_area > div[class^='highlight']{ + overflow-y: hidden; +} + +/* hide copy button on prompts for 'sphinx_copybutton' extension ... */ +.prompt .copybtn, +/* ... and 'sphinx_immaterial' theme */ +.prompt .md-clipboard.md-icon { + display: none; +} + +/* Some additional styling taken form the Jupyter notebook CSS */ +.jp-RenderedHTMLCommon table, +div.rendered_html table { + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 12px; + table-layout: fixed; +} +.jp-RenderedHTMLCommon thead, +div.rendered_html thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} +.jp-RenderedHTMLCommon tr, +.jp-RenderedHTMLCommon th, +.jp-RenderedHTMLCommon td, +div.rendered_html tr, +div.rendered_html th, +div.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; +} +.jp-RenderedHTMLCommon th, +div.rendered_html th { + font-weight: bold; +} +.jp-RenderedHTMLCommon tbody tr:nth-child(odd), +div.rendered_html tbody tr:nth-child(odd) { + background: #f5f5f5; +} +.jp-RenderedHTMLCommon tbody tr:hover, +div.rendered_html tbody tr:hover { + background: rgba(66, 165, 245, 0.2); +} + diff --git a/_static/nbsphinx-gallery.css b/_static/nbsphinx-gallery.css new file mode 100644 index 0000000..365c27a --- /dev/null +++ b/_static/nbsphinx-gallery.css @@ -0,0 +1,31 @@ +.nbsphinx-gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + gap: 5px; + margin-top: 1em; + margin-bottom: 1em; +} + +.nbsphinx-gallery > a { + padding: 5px; + border: 1px dotted currentColor; + border-radius: 2px; + text-align: center; +} + +.nbsphinx-gallery > a:hover { + border-style: solid; +} + +.nbsphinx-gallery img { + max-width: 100%; + max-height: 100%; +} + +.nbsphinx-gallery > a > div:first-child { + display: flex; + align-items: start; + justify-content: center; + height: 120px; + margin-bottom: 5px; +} diff --git a/_static/nbsphinx-no-thumbnail.svg b/_static/nbsphinx-no-thumbnail.svg new file mode 100644 index 0000000..9dca758 --- /dev/null +++ b/_static/nbsphinx-no-thumbnail.svg @@ -0,0 +1,9 @@ + diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000..7107cec Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 0000000..997797f --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,152 @@ +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #7971292e } +html[data-theme="light"] .highlight { background: #fefefe; color: #545454 } +html[data-theme="light"] .highlight .c { color: #797129 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #d91e18 } /* Error */ +html[data-theme="light"] .highlight .k { color: #7928a1 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #797129 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #545454 } /* Name */ +html[data-theme="light"] .highlight .o { color: #008000 } /* Operator */ +html[data-theme="light"] .highlight .p { color: #545454 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #797129 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #797129 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #797129 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #797129 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #797129 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #797129 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #007faa } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #007faa } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #007faa } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #7928a1 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #7928a1 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #7928a1 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #7928a1 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #7928a1 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #797129 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #797129 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #797129 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #008000 } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #797129 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #797129 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #007faa } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #007faa } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #797129 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #008000 } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #7928a1 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #007faa } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #797129 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #545454 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #545454 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #007faa } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #007faa } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #d91e18 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #7928a1 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #545454 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #545454 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #797129 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #797129 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #797129 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #797129 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #797129 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #008000 } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #008000 } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #008000 } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #008000 } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #008000 } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #008000 } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #008000 } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #008000 } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #008000 } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #008000 } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #d91e18 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #008000 } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #007faa } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #797129 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #007faa } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #d91e18 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #d91e18 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #d91e18 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #797129 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #797129 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } +html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ +html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/scripts/bootstrap.js b/_static/scripts/bootstrap.js new file mode 100644 index 0000000..766173a --- /dev/null +++ b/_static/scripts/bootstrap.js @@ -0,0 +1,3 @@ +/*! For license information please see bootstrap.js.LICENSE.txt */ +(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>w,afterRead:()=>b,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>G,auto:()=>r,basePlacements:()=>a,beforeMain:()=>v,beforeRead:()=>m,beforeWrite:()=>A,bottom:()=>n,clippingParents:()=>h,computeStyles:()=>et,createPopper:()=>Dt,createPopperBase:()=>Lt,createPopperLite:()=>$t,detectOverflow:()=>mt,end:()=>c,eventListeners:()=>nt,flip:()=>_t,hide:()=>yt,left:()=>o,main:()=>y,modifierPhases:()=>T,offset:()=>wt,placements:()=>g,popper:()=>d,popperGenerator:()=>kt,popperOffsets:()=>At,preventOverflow:()=>Et,read:()=>_,reference:()=>f,right:()=>s,start:()=>l,top:()=>i,variationPlacements:()=>p,viewport:()=>u,write:()=>E});var i="top",n="bottom",s="right",o="left",r="auto",a=[i,n,s,o],l="start",c="end",h="clippingParents",u="viewport",d="popper",f="reference",p=a.reduce((function(t,e){return t.concat([e+"-"+l,e+"-"+c])}),[]),g=[].concat(a,[r]).reduce((function(t,e){return t.concat([e,e+"-"+l,e+"-"+c])}),[]),m="beforeRead",_="read",b="afterRead",v="beforeMain",y="main",w="afterMain",A="beforeWrite",E="write",C="afterWrite",T=[m,_,b,v,y,w,A,E,C];function O(t){return t?(t.nodeName||"").toLowerCase():null}function x(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function k(t){return t instanceof x(t).Element||t instanceof Element}function L(t){return t instanceof x(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof x(t).ShadowRoot||t instanceof ShadowRoot)}const $={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];L(s)&&O(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});L(n)&&O(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function S(t){return t.split("-")[0]}var I=Math.max,N=Math.min,P=Math.round;function j(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function M(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&L(t)&&(s=t.offsetWidth>0&&P(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&P(n.height)/t.offsetHeight||1);var r=(k(t)?x(t):window).visualViewport,a=!M()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,u=n.height/o;return{width:h,height:u,top:c,right:l+h,bottom:c+u,left:l,x:l,y:c}}function W(t){var e=H(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function F(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function B(t){return x(t).getComputedStyle(t)}function z(t){return["table","td","th"].indexOf(O(t))>=0}function q(t){return((k(t)?t.ownerDocument:t.document)||window.document).documentElement}function R(t){return"html"===O(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function V(t){return L(t)&&"fixed"!==B(t).position?t.offsetParent:null}function K(t){for(var e=x(t),i=V(t);i&&z(i)&&"static"===B(i).position;)i=V(i);return i&&("html"===O(i)||"body"===O(i)&&"static"===B(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&L(t)&&"fixed"===B(t).position)return null;var i=R(t);for(D(i)&&(i=i.host);L(i)&&["html","body"].indexOf(O(i))<0;){var n=B(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Q(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function X(t,e,i){return I(t,N(e,i))}function Y(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function U(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const G={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,r=t.state,l=t.name,c=t.options,h=r.elements.arrow,u=r.modifiersData.popperOffsets,d=S(r.placement),f=Q(d),p=[o,s].indexOf(d)>=0?"height":"width";if(h&&u){var g=function(t,e){return Y("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:U(t,a))}(c.padding,r),m=W(h),_="y"===f?i:o,b="y"===f?n:s,v=r.rects.reference[p]+r.rects.reference[f]-u[f]-r.rects.popper[p],y=u[f]-r.rects.reference[f],w=K(h),A=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,E=v/2-y/2,C=g[_],T=A-m[p]-g[b],O=A/2-m[p]/2+E,x=X(C,O,T),k=f;r.modifiersData[l]=((e={})[k]=x,e.centerOffset=x-O,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&F(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function J(t){return t.split("-")[1]}var Z={top:"auto",right:"auto",bottom:"auto",left:"auto"};function tt(t){var e,r=t.popper,a=t.popperRect,l=t.placement,h=t.variation,u=t.offsets,d=t.position,f=t.gpuAcceleration,p=t.adaptive,g=t.roundOffsets,m=t.isFixed,_=u.x,b=void 0===_?0:_,v=u.y,y=void 0===v?0:v,w="function"==typeof g?g({x:b,y}):{x:b,y};b=w.x,y=w.y;var A=u.hasOwnProperty("x"),E=u.hasOwnProperty("y"),C=o,T=i,O=window;if(p){var k=K(r),L="clientHeight",D="clientWidth";k===x(r)&&"static"!==B(k=q(r)).position&&"absolute"===d&&(L="scrollHeight",D="scrollWidth"),(l===i||(l===o||l===s)&&h===c)&&(T=n,y-=(m&&k===O&&O.visualViewport?O.visualViewport.height:k[L])-a.height,y*=f?1:-1),l!==o&&(l!==i&&l!==n||h!==c)||(C=s,b-=(m&&k===O&&O.visualViewport?O.visualViewport.width:k[D])-a.width,b*=f?1:-1)}var $,S=Object.assign({position:d},p&&Z),I=!0===g?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:P(i*s)/s||0,y:P(n*s)/s||0}}({x:b,y},x(r)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},S,(($={})[T]=E?"0":"",$[C]=A?"0":"",$.transform=(O.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",$)):Object.assign({},S,((e={})[T]=E?y+"px":"",e[C]=A?b+"px":"",e.transform="",e))}const et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:S(e.placement),variation:J(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,tt(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,tt(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var it={passive:!0};const nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=x(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,it)})),a&&l.addEventListener("resize",i.update,it),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,it)})),a&&l.removeEventListener("resize",i.update,it)}},data:{}};var st={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(t){return t.replace(/left|right|bottom|top/g,(function(t){return st[t]}))}var rt={start:"end",end:"start"};function at(t){return t.replace(/start|end/g,(function(t){return rt[t]}))}function lt(t){var e=x(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ct(t){return H(q(t)).left+lt(t).scrollLeft}function ht(t){var e=B(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function ut(t){return["html","body","#document"].indexOf(O(t))>=0?t.ownerDocument.body:L(t)&&ht(t)?t:ut(R(t))}function dt(t,e){var i;void 0===e&&(e=[]);var n=ut(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=x(n),r=s?[o].concat(o.visualViewport||[],ht(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(dt(R(r)))}function ft(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function pt(t,e,i){return e===u?ft(function(t,e){var i=x(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=M();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ct(t),y:l}}(t,i)):k(e)?function(t,e){var i=H(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):ft(function(t){var e,i=q(t),n=lt(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=I(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=I(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ct(t),l=-n.scrollTop;return"rtl"===B(s||i).direction&&(a+=I(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,r=t.reference,a=t.element,h=t.placement,u=h?S(h):null,d=h?J(h):null,f=r.x+r.width/2-a.width/2,p=r.y+r.height/2-a.height/2;switch(u){case i:e={x:f,y:r.y-a.height};break;case n:e={x:f,y:r.y+r.height};break;case s:e={x:r.x+r.width,y:p};break;case o:e={x:r.x-a.width,y:p};break;default:e={x:r.x,y:r.y}}var g=u?Q(u):null;if(null!=g){var m="y"===g?"height":"width";switch(d){case l:e[g]=e[g]-(r[m]/2-a[m]/2);break;case c:e[g]=e[g]+(r[m]/2-a[m]/2)}}return e}function mt(t,e){void 0===e&&(e={});var o=e,r=o.placement,l=void 0===r?t.placement:r,c=o.strategy,p=void 0===c?t.strategy:c,g=o.boundary,m=void 0===g?h:g,_=o.rootBoundary,b=void 0===_?u:_,v=o.elementContext,y=void 0===v?d:v,w=o.altBoundary,A=void 0!==w&&w,E=o.padding,C=void 0===E?0:E,T=Y("number"!=typeof C?C:U(C,a)),x=y===d?f:d,D=t.rects.popper,$=t.elements[A?x:y],S=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=dt(R(t)),i=["absolute","fixed"].indexOf(B(t).position)>=0&&L(t)?K(t):t;return k(i)?e.filter((function(t){return k(t)&&F(t,i)&&"body"!==O(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=pt(t,i,n);return e.top=I(s.top,e.top),e.right=N(s.right,e.right),e.bottom=N(s.bottom,e.bottom),e.left=I(s.left,e.left),e}),pt(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(k($)?$:$.contextElement||q(t.elements.popper),m,b,p),P=H(t.elements.reference),j=gt({reference:P,element:D,strategy:"absolute",placement:l}),M=ft(Object.assign({},D,j)),W=y===d?M:P,z={top:S.top-W.top+T.top,bottom:W.bottom-S.bottom+T.bottom,left:S.left-W.left+T.left,right:W.right-S.right+T.right},V=t.modifiersData.offset;if(y===d&&V){var Q=V[l];Object.keys(z).forEach((function(t){var e=[s,n].indexOf(t)>=0?1:-1,o=[i,n].indexOf(t)>=0?"y":"x";z[t]+=Q[o]*e}))}return z}const _t={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,c=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var u=c.mainAxis,d=void 0===u||u,f=c.altAxis,m=void 0===f||f,_=c.fallbackPlacements,b=c.padding,v=c.boundary,y=c.rootBoundary,w=c.altBoundary,A=c.flipVariations,E=void 0===A||A,C=c.allowedAutoPlacements,T=e.options.placement,O=S(T),x=_||(O!==T&&E?function(t){if(S(t)===r)return[];var e=ot(t);return[at(t),e,at(e)]}(T):[ot(T)]),k=[T].concat(x).reduce((function(t,i){return t.concat(S(i)===r?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,l=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,u=J(n),d=u?l?p:p.filter((function(t){return J(t)===u})):a,f=d.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=d);var m=f.reduce((function(e,i){return e[i]=mt(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[S(i)],e}),{});return Object.keys(m).sort((function(t,e){return m[t]-m[e]}))}(e,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:E,allowedAutoPlacements:C}):i)}),[]),L=e.rects.reference,D=e.rects.popper,$=new Map,I=!0,N=k[0],P=0;P