diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 30e3e60..f44e73e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -90,3 +90,35 @@ jobs: if: env.is-merge == 'false' # Skip if it's a merge commit run: | poetry run pytest + + docs: + runs-on: ubuntu-latest + + steps: + - name: Check out the repository + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + # Install Poetry + - name: Install Poetry + run: | + curl -sSL https://install.python-poetry.org | python3 - + export PATH="$HOME/.local/bin:$PATH" + + - name: Install project with dev dependencies + run: | + poetry install --with dev + + # Generate Sphinx Documentation with sphinx-apidoc + - name: Generate API Documentation with Sphinx + run: | + poetry run sphinx-apidoc -o docs/source codes + + # Build HTML using Sphinx + - name: Build HTML with Sphinx + run: | + poetry run sphinx-build -b html docs/source docs/_build/html diff --git a/README.md b/README.md index 4839255..c7dd481 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repo aims to provide a way of benchmarking surrogate models for coupled ODE systems, as can be found in the context of chemical reaction networks. -Full documentation can be found on the new [website](https://immi000.github.io/CODES-Benchmark-Docs/). +Full documentation can be found on the new [website](https://robin-janssen.github.io/CODES-Benchmark/). ## Motivation @@ -140,6 +140,6 @@ Then, install the required packages with pip install -r requirements.txt ``` -The installation is now complete. To be able to run and evaluate the benchmark, you need to first set up a configuration YAML file. There is one provided, but it should be configured. For more information, check the [configuration page](https://immi000.github.io/CODES-Benchmark-Docs/documentation.html#config). There, we also offer an interactive Config-Generator tool with some explanations to help you set up your benchmark. +The installation is now complete. To be able to run and evaluate the benchmark, you need to first set up a configuration YAML file. There is one provided, but it should be configured. For more information, check the [configuration page](https://robin-janssen.github.io/CODES-Benchmark/documentation.html#config). There, we also offer an interactive Config-Generator tool with some explanations to help you set up your benchmark. -You can also add your own datasets and models to the benchmark to evaluate them against each other or some of our baseline models. For more information on how to do this, please refer to the [documentation](https://immi000.github.io/CODES-Benchmark-Docs/documentation.html). \ No newline at end of file +You can also add your own datasets and models to the benchmark to evaluate them against each other or some of our baseline models. For more information on how to do this, please refer to the [documentation](https://robin-janssen.github.io/CODES-Benchmark/documentation.html). \ No newline at end of file diff --git a/codes/benchmark/bench_fcts.py b/codes/benchmark/bench_fcts.py index c0ab58d..01f298d 100644 --- a/codes/benchmark/bench_fcts.py +++ b/codes/benchmark/bench_fcts.py @@ -1194,7 +1194,7 @@ def tabular_comparison(all_metrics: dict, config: dict) -> None: for i, value in enumerate(mae_values) ] mre_row = ["MRE"] + [ - f"{value*100:.2f} %" if i != best_mre_index else f"* {value*100:.2f} % *" + f"{value * 100:.2f} %" if i != best_mre_index else f"* {value * 100:.2f} % *" for i, value in enumerate(mre_values) ] epochs_row = ["Epochs"] + [value for i, value in enumerate(epochs)] diff --git a/codes/surrogates/surrogates.py b/codes/surrogates/surrogates.py index 4f4cb5e..92105ea 100644 --- a/codes/surrogates/surrogates.py +++ b/codes/surrogates/surrogates.py @@ -19,7 +19,7 @@ class AbstractSurrogateModel(ABC, nn.Module): structure of a surrogate model and defines the methods that need to be implemented by the subclasses for it to be compatible with the benchmarking framework. For more information, see - https://immi000.github.io/CODES-Benchmark-Docs/documentation.html#add_model. + https://robin-janssen.github.io/CODES-Benchmark/documentation.html#add_model. Args: device (str, optional): The device to run the model on. Defaults to None. @@ -105,15 +105,15 @@ def __init__( @abstractmethod def forward(self, inputs: Any) -> tuple[Tensor, Tensor]: - """ - Forward pass of the model. + # """ + # Forward pass of the model. - Args: - inputs (Any): The input data as recieved from the dataloader. + # Args: + # inputs (Any): The input data as recieved from the dataloader. - Returns: - tuple[Tensor, Tensor]: The model predictions and the targets. - """ + # Returns: + # tuple[Tensor, Tensor]: The model predictions and the targets. + # """ pass @abstractmethod diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d0c3cbf --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo new file mode 100644 index 0000000..20383c1 --- /dev/null +++ b/docs/_build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 7303878f072328508a731aec95c1900e +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/.doctrees/codes.benchmark.doctree b/docs/_build/html/.doctrees/codes.benchmark.doctree new file mode 100644 index 0000000..b47fcd4 Binary files /dev/null and b/docs/_build/html/.doctrees/codes.benchmark.doctree differ diff --git a/docs/_build/html/.doctrees/codes.doctree b/docs/_build/html/.doctrees/codes.doctree new file mode 100644 index 0000000..996e930 Binary files /dev/null and b/docs/_build/html/.doctrees/codes.doctree differ diff --git a/docs/_build/html/.doctrees/codes.surrogates.doctree b/docs/_build/html/.doctrees/codes.surrogates.doctree new file mode 100644 index 0000000..99c0a45 Binary files /dev/null and b/docs/_build/html/.doctrees/codes.surrogates.doctree differ diff --git a/docs/_build/html/.doctrees/codes.train.doctree b/docs/_build/html/.doctrees/codes.train.doctree new file mode 100644 index 0000000..287531c Binary files /dev/null and b/docs/_build/html/.doctrees/codes.train.doctree differ diff --git a/docs/_build/html/.doctrees/codes.utils.doctree b/docs/_build/html/.doctrees/codes.utils.doctree new file mode 100644 index 0000000..211ab2e Binary files /dev/null and b/docs/_build/html/.doctrees/codes.utils.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.benchmark.bench_fcts.doctree b/docs/_build/html/.doctrees/docs/source/codes.benchmark.bench_fcts.doctree new file mode 100644 index 0000000..368c116 Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.benchmark.bench_fcts.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.benchmark.bench_plots.doctree b/docs/_build/html/.doctrees/docs/source/codes.benchmark.bench_plots.doctree new file mode 100644 index 0000000..37c29c6 Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.benchmark.bench_plots.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.benchmark.bench_utils.doctree b/docs/_build/html/.doctrees/docs/source/codes.benchmark.bench_utils.doctree new file mode 100644 index 0000000..5e361d9 Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.benchmark.bench_utils.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.benchmark.doctree b/docs/_build/html/.doctrees/docs/source/codes.benchmark.doctree new file mode 100644 index 0000000..aebdb42 Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.benchmark.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.doctree b/docs/_build/html/.doctrees/docs/source/codes.doctree new file mode 100644 index 0000000..6697c83 Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.surrogates.doctree b/docs/_build/html/.doctrees/docs/source/codes.surrogates.doctree new file mode 100644 index 0000000..c954a6b Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.surrogates.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.surrogates.surrogate_classes.doctree b/docs/_build/html/.doctrees/docs/source/codes.surrogates.surrogate_classes.doctree new file mode 100644 index 0000000..0bcfa75 Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.surrogates.surrogate_classes.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.surrogates.surrogates.doctree b/docs/_build/html/.doctrees/docs/source/codes.surrogates.surrogates.doctree new file mode 100644 index 0000000..ea90989 Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.surrogates.surrogates.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.train.doctree b/docs/_build/html/.doctrees/docs/source/codes.train.doctree new file mode 100644 index 0000000..53f17ec Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.train.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.train.train_fcts.doctree b/docs/_build/html/.doctrees/docs/source/codes.train.train_fcts.doctree new file mode 100644 index 0000000..df3e72e Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.train.train_fcts.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.utils.data_utils.doctree b/docs/_build/html/.doctrees/docs/source/codes.utils.data_utils.doctree new file mode 100644 index 0000000..8bf7421 Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.utils.data_utils.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.utils.doctree b/docs/_build/html/.doctrees/docs/source/codes.utils.doctree new file mode 100644 index 0000000..d3ca4f4 Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.utils.doctree differ diff --git a/docs/_build/html/.doctrees/docs/source/codes.utils.utils.doctree b/docs/_build/html/.doctrees/docs/source/codes.utils.utils.doctree new file mode 100644 index 0000000..312fadf Binary files /dev/null and b/docs/_build/html/.doctrees/docs/source/codes.utils.utils.doctree differ diff --git a/docs/_build/html/.doctrees/environment.pickle b/docs/_build/html/.doctrees/environment.pickle new file mode 100644 index 0000000..e40d2d3 Binary files /dev/null and b/docs/_build/html/.doctrees/environment.pickle differ diff --git a/docs/_build/html/.doctrees/index.doctree b/docs/_build/html/.doctrees/index.doctree new file mode 100644 index 0000000..a767986 Binary files /dev/null and b/docs/_build/html/.doctrees/index.doctree differ diff --git a/docs/_build/html/.doctrees/modules.doctree b/docs/_build/html/.doctrees/modules.doctree new file mode 100644 index 0000000..af16f31 Binary files /dev/null and b/docs/_build/html/.doctrees/modules.doctree differ diff --git a/docs/_build/html/_sources/codes.benchmark.rst b/docs/_build/html/_sources/codes.benchmark.rst new file mode 100644 index 0000000..4641a6e --- /dev/null +++ b/docs/_build/html/_sources/codes.benchmark.rst @@ -0,0 +1,37 @@ +codes.benchmark package +======================= + +Submodules +---------- + +codes.benchmark.bench\_fcts module +---------------------------------- + +.. automodule:: codes.benchmark.bench_fcts + :members: + :undoc-members: + :show-inheritance: + +codes.benchmark.bench\_plots module +----------------------------------- + +.. automodule:: codes.benchmark.bench_plots + :members: + :undoc-members: + :show-inheritance: + +codes.benchmark.bench\_utils module +----------------------------------- + +.. automodule:: codes.benchmark.bench_utils + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: codes.benchmark + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/codes.rst b/docs/_build/html/_sources/codes.rst new file mode 100644 index 0000000..bb2d6e8 --- /dev/null +++ b/docs/_build/html/_sources/codes.rst @@ -0,0 +1,21 @@ +codes package +============= + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + codes.benchmark + codes.surrogates + codes.train + codes.utils + +Module contents +--------------- + +.. automodule:: codes + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/codes.surrogates.rst b/docs/_build/html/_sources/codes.surrogates.rst new file mode 100644 index 0000000..3e6504e --- /dev/null +++ b/docs/_build/html/_sources/codes.surrogates.rst @@ -0,0 +1,29 @@ +codes.surrogates package +======================== + +Submodules +---------- + +codes.surrogates.surrogate\_classes module +------------------------------------------ + +.. automodule:: codes.surrogates.surrogate_classes + :members: + :undoc-members: + :show-inheritance: + +codes.surrogates.surrogates module +---------------------------------- + +.. automodule:: codes.surrogates.surrogates + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: codes.surrogates + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/codes.train.rst b/docs/_build/html/_sources/codes.train.rst new file mode 100644 index 0000000..524ca98 --- /dev/null +++ b/docs/_build/html/_sources/codes.train.rst @@ -0,0 +1,21 @@ +codes.train package +=================== + +Submodules +---------- + +codes.train.train\_fcts module +------------------------------ + +.. automodule:: codes.train.train_fcts + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: codes.train + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/codes.utils.rst b/docs/_build/html/_sources/codes.utils.rst new file mode 100644 index 0000000..af2c2bb --- /dev/null +++ b/docs/_build/html/_sources/codes.utils.rst @@ -0,0 +1,29 @@ +codes.utils package +=================== + +Submodules +---------- + +codes.utils.data\_utils module +------------------------------ + +.. automodule:: codes.utils.data_utils + :members: + :undoc-members: + :show-inheritance: + +codes.utils.utils module +------------------------ + +.. automodule:: codes.utils.utils + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: codes.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/docs/source/codes.benchmark.bench_fcts.rst b/docs/_build/html/_sources/docs/source/codes.benchmark.bench_fcts.rst new file mode 100644 index 0000000..909a88b --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.benchmark.bench_fcts.rst @@ -0,0 +1,33 @@ +codes.benchmark.bench\_fcts +=========================== + +.. automodule:: codes.benchmark.bench_fcts + + + .. rubric:: Functions + + .. autosummary:: + + compare_MAE + compare_UQ + compare_batchsize + compare_dynamic_accuracy + compare_extrapolation + compare_inference_time + compare_interpolation + compare_main_losses + compare_models + compare_relative_errors + compare_sparse + evaluate_UQ + evaluate_accuracy + evaluate_batchsize + evaluate_compute + evaluate_dynamic_accuracy + evaluate_extrapolation + evaluate_interpolation + evaluate_sparse + run_benchmark + tabular_comparison + time_inference + \ No newline at end of file diff --git a/docs/_build/html/_sources/docs/source/codes.benchmark.bench_plots.rst b/docs/_build/html/_sources/docs/source/codes.benchmark.bench_plots.rst new file mode 100644 index 0000000..0efbddb --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.benchmark.bench_plots.rst @@ -0,0 +1,38 @@ +codes.benchmark.bench\_plots +============================ + +.. automodule:: codes.benchmark.bench_plots + + + .. rubric:: Functions + + .. autosummary:: + + get_custom_palette + inference_time_bar_plot + int_ext_sparse + plot_MAE_comparison + plot_MAE_comparison_train_duration + plot_average_errors_over_time + plot_average_uncertainty_over_time + plot_comparative_dynamic_correlation_heatmaps + plot_comparative_error_correlation_heatmaps + plot_dynamic_correlation + plot_dynamic_correlation_heatmap + plot_error_correlation_heatmap + plot_error_distribution_comparative + plot_error_distribution_per_chemical + plot_example_predictions_with_uncertainty + plot_generalization_error_comparison + plot_generalization_errors + plot_loss_comparison + plot_losses + plot_relative_errors + plot_relative_errors_over_time + plot_surr_losses + plot_uncertainty_over_time_comparison + plot_uncertainty_vs_errors + rel_errors_and_uq + save_plot + save_plot_counter + \ No newline at end of file diff --git a/docs/_build/html/_sources/docs/source/codes.benchmark.bench_utils.rst b/docs/_build/html/_sources/docs/source/codes.benchmark.bench_utils.rst new file mode 100644 index 0000000..4afbb1e --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.benchmark.bench_utils.rst @@ -0,0 +1,29 @@ +codes.benchmark.bench\_utils +============================ + +.. automodule:: codes.benchmark.bench_utils + + + .. rubric:: Functions + + .. autosummary:: + + check_benchmark + check_surrogate + clean_metrics + convert_dict_to_scientific_notation + convert_to_standard_types + count_trainable_parameters + discard_numpy_entries + flatten_dict + format_seconds + format_time + get_model_config + get_required_models_list + get_surrogate + load_model + make_comparison_csv + measure_memory_footprint + read_yaml_config + write_metrics_to_yaml + \ No newline at end of file diff --git a/docs/_build/html/_sources/docs/source/codes.benchmark.rst b/docs/_build/html/_sources/docs/source/codes.benchmark.rst new file mode 100644 index 0000000..8f1d8cd --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.benchmark.rst @@ -0,0 +1,15 @@ +codes.benchmark +=============== + +.. automodule:: codes.benchmark + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :recursive: + + bench_fcts + bench_plots + bench_utils diff --git a/docs/_build/html/_sources/docs/source/codes.rst b/docs/_build/html/_sources/docs/source/codes.rst new file mode 100644 index 0000000..a554fec --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.rst @@ -0,0 +1,16 @@ +codes +===== + +.. automodule:: codes + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :recursive: + + benchmark + surrogates + train + utils diff --git a/docs/_build/html/_sources/docs/source/codes.surrogates.rst b/docs/_build/html/_sources/docs/source/codes.surrogates.rst new file mode 100644 index 0000000..592f684 --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.surrogates.rst @@ -0,0 +1,14 @@ +codes.surrogates +================ + +.. automodule:: codes.surrogates + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :recursive: + + surrogate_classes + surrogates diff --git a/docs/_build/html/_sources/docs/source/codes.surrogates.surrogate_classes.rst b/docs/_build/html/_sources/docs/source/codes.surrogates.surrogate_classes.rst new file mode 100644 index 0000000..f9a3fd7 --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.surrogates.surrogate_classes.rst @@ -0,0 +1,6 @@ +codes.surrogates.surrogate\_classes +=================================== + +.. currentmodule:: codes.surrogates + +.. autodata:: surrogate_classes \ No newline at end of file diff --git a/docs/_build/html/_sources/docs/source/codes.surrogates.surrogates.rst b/docs/_build/html/_sources/docs/source/codes.surrogates.surrogates.rst new file mode 100644 index 0000000..271f67c --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.surrogates.surrogates.rst @@ -0,0 +1,12 @@ +codes.surrogates.surrogates +=========================== + +.. automodule:: codes.surrogates.surrogates + + + .. rubric:: Classes + + .. autosummary:: + + AbstractSurrogateModel + \ No newline at end of file diff --git a/docs/_build/html/_sources/docs/source/codes.train.rst b/docs/_build/html/_sources/docs/source/codes.train.rst new file mode 100644 index 0000000..1fdbdb4 --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.train.rst @@ -0,0 +1,13 @@ +codes.train +=========== + +.. automodule:: codes.train + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :recursive: + + train_fcts diff --git a/docs/_build/html/_sources/docs/source/codes.train.train_fcts.rst b/docs/_build/html/_sources/docs/source/codes.train.train_fcts.rst new file mode 100644 index 0000000..7b559de --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.train.train_fcts.rst @@ -0,0 +1,16 @@ +codes.train.train\_fcts +======================= + +.. automodule:: codes.train.train_fcts + + + .. rubric:: Functions + + .. autosummary:: + + create_task_list_for_surrogate + parallel_training + sequential_training + train_and_save_model + worker + \ No newline at end of file diff --git a/docs/_build/html/_sources/docs/source/codes.utils.data_utils.rst b/docs/_build/html/_sources/docs/source/codes.utils.data_utils.rst new file mode 100644 index 0000000..b1d5ac9 --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.utils.data_utils.rst @@ -0,0 +1,23 @@ +codes.utils.data\_utils +======================= + +.. automodule:: codes.utils.data_utils + + + .. rubric:: Functions + + .. autosummary:: + + check_and_load_data + create_dataset + create_hdf5_dataset + download_data + get_data_subset + normalize_data + + .. rubric:: Exceptions + + .. autosummary:: + + DatasetError + \ No newline at end of file diff --git a/docs/_build/html/_sources/docs/source/codes.utils.rst b/docs/_build/html/_sources/docs/source/codes.utils.rst new file mode 100644 index 0000000..cf24089 --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.utils.rst @@ -0,0 +1,14 @@ +codes.utils +=========== + +.. automodule:: codes.utils + + +.. rubric:: Modules + +.. autosummary:: + :toctree: + :recursive: + + data_utils + utils diff --git a/docs/_build/html/_sources/docs/source/codes.utils.utils.rst b/docs/_build/html/_sources/docs/source/codes.utils.utils.rst new file mode 100644 index 0000000..919025c --- /dev/null +++ b/docs/_build/html/_sources/docs/source/codes.utils.utils.rst @@ -0,0 +1,23 @@ +codes.utils.utils +================= + +.. automodule:: codes.utils.utils + + + .. rubric:: Functions + + .. autosummary:: + + check_training_status + create_model_dir + get_progress_bar + load_and_save_config + load_task_list + make_description + nice_print + read_yaml_config + save_task_list + set_random_seeds + time_execution + worker_init_fn + \ No newline at end of file diff --git a/docs/_build/html/_sources/index.rst b/docs/_build/html/_sources/index.rst new file mode 100644 index 0000000..9b4cc42 --- /dev/null +++ b/docs/_build/html/_sources/index.rst @@ -0,0 +1,23 @@ +CODES API Documentation +======================= + +Welcome to the CODES API documentation. + +.. autosummary:: + :toctree: docs/source/ + :recursive: + + codes.benchmark + codes.surrogates + codes.train + codes.utils + + +.. .. toctree:: +.. :maxdepth: 2 +.. :caption: API Reference: + +.. codes.benchmark +.. codes.surrogates +.. codes.train +.. codes.utils diff --git a/docs/_build/html/_sources/modules.rst b/docs/_build/html/_sources/modules.rst new file mode 100644 index 0000000..6d86bd0 --- /dev/null +++ b/docs/_build/html/_sources/modules.rst @@ -0,0 +1,7 @@ +codes +===== + +.. toctree:: + :maxdepth: 4 + + codes diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css new file mode 100644 index 0000000..2af6139 --- /dev/null +++ b/docs/_build/html/_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: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js new file mode 100644 index 0000000..4d67807 --- /dev/null +++ b/docs/_build/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-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/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js new file mode 100644 index 0000000..dab586c --- /dev/null +++ b/docs/_build/html/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/_build/html/_static/file.png b/docs/_build/html/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/docs/_build/html/_static/file.png differ diff --git a/docs/_build/html/_static/language_data.js b/docs/_build/html/_static/language_data.js new file mode 100644 index 0000000..367b8ed --- /dev/null +++ b/docs/_build/html/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-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/docs/_build/html/_static/locales/ar/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/ar/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..15541a6 Binary files /dev/null and b/docs/_build/html/_static/locales/ar/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/ar/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/ar/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..34d404c --- /dev/null +++ b/docs/_build/html/_static/locales/ar/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "طباعة إلى PDF" + +msgid "Theme by the" +msgstr "موضوع بواسطة" + +msgid "Download source file" +msgstr "تنزيل ملف المصدر" + +msgid "open issue" +msgstr "قضية مفتوحة" + +msgid "Contents" +msgstr "محتويات" + +msgid "previous page" +msgstr "الصفحة السابقة" + +msgid "Download notebook file" +msgstr "تنزيل ملف دفتر الملاحظات" + +msgid "Copyright" +msgstr "حقوق النشر" + +msgid "Download this page" +msgstr "قم بتنزيل هذه الصفحة" + +msgid "Source repository" +msgstr "مستودع المصدر" + +msgid "By" +msgstr "بواسطة" + +msgid "repository" +msgstr "مخزن" + +msgid "Last updated on" +msgstr "آخر تحديث في" + +msgid "Toggle navigation" +msgstr "تبديل التنقل" + +msgid "Sphinx Book Theme" +msgstr "موضوع كتاب أبو الهول" + +msgid "suggest edit" +msgstr "أقترح تحرير" + +msgid "Open an issue" +msgstr "افتح قضية" + +msgid "Launch" +msgstr "إطلاق" + +msgid "Fullscreen mode" +msgstr "وضع ملء الشاشة" + +msgid "Edit this page" +msgstr "قم بتحرير هذه الصفحة" + +msgid "By the" +msgstr "بواسطة" + +msgid "next page" +msgstr "الصفحة التالية" diff --git a/docs/_build/html/_static/locales/bg/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/bg/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..da95120 Binary files /dev/null and b/docs/_build/html/_static/locales/bg/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/bg/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/bg/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..7420c19 --- /dev/null +++ b/docs/_build/html/_static/locales/bg/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Печат в PDF" + +msgid "Theme by the" +msgstr "Тема от" + +msgid "Download source file" +msgstr "Изтеглете изходния файл" + +msgid "open issue" +msgstr "отворен брой" + +msgid "Contents" +msgstr "Съдържание" + +msgid "previous page" +msgstr "предишна страница" + +msgid "Download notebook file" +msgstr "Изтеглете файла на бележника" + +msgid "Copyright" +msgstr "Авторско право" + +msgid "Download this page" +msgstr "Изтеглете тази страница" + +msgid "Source repository" +msgstr "Хранилище на източника" + +msgid "By" +msgstr "От" + +msgid "repository" +msgstr "хранилище" + +msgid "Last updated on" +msgstr "Последна актуализация на" + +msgid "Toggle navigation" +msgstr "Превключване на навигацията" + +msgid "Sphinx Book Theme" +msgstr "Тема на книгата Sphinx" + +msgid "suggest edit" +msgstr "предложи редактиране" + +msgid "Open an issue" +msgstr "Отворете проблем" + +msgid "Launch" +msgstr "Стартиране" + +msgid "Fullscreen mode" +msgstr "Режим на цял екран" + +msgid "Edit this page" +msgstr "Редактирайте тази страница" + +msgid "By the" +msgstr "По" + +msgid "next page" +msgstr "Следваща страница" diff --git a/docs/_build/html/_static/locales/bn/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/bn/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..6b96639 Binary files /dev/null and b/docs/_build/html/_static/locales/bn/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/bn/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/bn/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..63a07c3 --- /dev/null +++ b/docs/_build/html/_static/locales/bn/LC_MESSAGES/booktheme.po @@ -0,0 +1,63 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "পিডিএফ প্রিন্ট করুন" + +msgid "Theme by the" +msgstr "থিম দ্বারা" + +msgid "Download source file" +msgstr "উত্স ফাইল ডাউনলোড করুন" + +msgid "open issue" +msgstr "খোলা সমস্যা" + +msgid "previous page" +msgstr "আগের পৃষ্ঠা" + +msgid "Download notebook file" +msgstr "নোটবুক ফাইল ডাউনলোড করুন" + +msgid "Copyright" +msgstr "কপিরাইট" + +msgid "Download this page" +msgstr "এই পৃষ্ঠাটি ডাউনলোড করুন" + +msgid "Source repository" +msgstr "উত্স সংগ্রহস্থল" + +msgid "By" +msgstr "দ্বারা" + +msgid "Last updated on" +msgstr "সর্বশেষ আপডেট" + +msgid "Toggle navigation" +msgstr "নেভিগেশন টগল করুন" + +msgid "Sphinx Book Theme" +msgstr "স্পিনিক্স বুক থিম" + +msgid "Open an issue" +msgstr "একটি সমস্যা খুলুন" + +msgid "Launch" +msgstr "শুরু করা" + +msgid "Edit this page" +msgstr "এই পৃষ্ঠাটি সম্পাদনা করুন" + +msgid "By the" +msgstr "দ্বারা" + +msgid "next page" +msgstr "পরবর্তী পৃষ্ঠা" diff --git a/docs/_build/html/_static/locales/ca/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/ca/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..a4dd30e Binary files /dev/null and b/docs/_build/html/_static/locales/ca/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/ca/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/ca/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..8fb358b --- /dev/null +++ b/docs/_build/html/_static/locales/ca/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Imprimeix a PDF" + +msgid "Theme by the" +msgstr "Tema del" + +msgid "Download source file" +msgstr "Baixeu el fitxer font" + +msgid "open issue" +msgstr "número obert" + +msgid "previous page" +msgstr "Pàgina anterior" + +msgid "Download notebook file" +msgstr "Descarregar fitxer de quadern" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Download this page" +msgstr "Descarregueu aquesta pàgina" + +msgid "Source repository" +msgstr "Dipòsit de fonts" + +msgid "By" +msgstr "Per" + +msgid "Last updated on" +msgstr "Darrera actualització el" + +msgid "Toggle navigation" +msgstr "Commuta la navegació" + +msgid "Sphinx Book Theme" +msgstr "Tema del llibre Esfinx" + +msgid "suggest edit" +msgstr "suggerir edició" + +msgid "Open an issue" +msgstr "Obriu un número" + +msgid "Launch" +msgstr "Llançament" + +msgid "Edit this page" +msgstr "Editeu aquesta pàgina" + +msgid "By the" +msgstr "Per la" + +msgid "next page" +msgstr "pàgina següent" diff --git a/docs/_build/html/_static/locales/cs/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/cs/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..c39e01a Binary files /dev/null and b/docs/_build/html/_static/locales/cs/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/cs/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/cs/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..c6ef469 --- /dev/null +++ b/docs/_build/html/_static/locales/cs/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Tisk do PDF" + +msgid "Theme by the" +msgstr "Téma od" + +msgid "Download source file" +msgstr "Stáhněte si zdrojový soubor" + +msgid "open issue" +msgstr "otevřené číslo" + +msgid "Contents" +msgstr "Obsah" + +msgid "previous page" +msgstr "předchozí stránka" + +msgid "Download notebook file" +msgstr "Stáhnout soubor poznámkového bloku" + +msgid "Copyright" +msgstr "autorská práva" + +msgid "Download this page" +msgstr "Stáhněte si tuto stránku" + +msgid "Source repository" +msgstr "Zdrojové úložiště" + +msgid "By" +msgstr "Podle" + +msgid "repository" +msgstr "úložiště" + +msgid "Last updated on" +msgstr "Naposledy aktualizováno" + +msgid "Toggle navigation" +msgstr "Přepnout navigaci" + +msgid "Sphinx Book Theme" +msgstr "Téma knihy Sfinga" + +msgid "suggest edit" +msgstr "navrhnout úpravy" + +msgid "Open an issue" +msgstr "Otevřete problém" + +msgid "Launch" +msgstr "Zahájení" + +msgid "Fullscreen mode" +msgstr "Režim celé obrazovky" + +msgid "Edit this page" +msgstr "Upravit tuto stránku" + +msgid "By the" +msgstr "Podle" + +msgid "next page" +msgstr "další strana" diff --git a/docs/_build/html/_static/locales/da/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/da/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..f43157d Binary files /dev/null and b/docs/_build/html/_static/locales/da/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/da/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/da/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..306a38e --- /dev/null +++ b/docs/_build/html/_static/locales/da/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Udskriv til PDF" + +msgid "Theme by the" +msgstr "Tema af" + +msgid "Download source file" +msgstr "Download kildefil" + +msgid "open issue" +msgstr "åbent nummer" + +msgid "Contents" +msgstr "Indhold" + +msgid "previous page" +msgstr "forrige side" + +msgid "Download notebook file" +msgstr "Download notesbog-fil" + +msgid "Copyright" +msgstr "ophavsret" + +msgid "Download this page" +msgstr "Download denne side" + +msgid "Source repository" +msgstr "Kildelager" + +msgid "By" +msgstr "Ved" + +msgid "repository" +msgstr "lager" + +msgid "Last updated on" +msgstr "Sidst opdateret den" + +msgid "Toggle navigation" +msgstr "Skift navigation" + +msgid "Sphinx Book Theme" +msgstr "Sphinx bogtema" + +msgid "suggest edit" +msgstr "foreslå redigering" + +msgid "Open an issue" +msgstr "Åbn et problem" + +msgid "Launch" +msgstr "Start" + +msgid "Fullscreen mode" +msgstr "Fuldskærmstilstand" + +msgid "Edit this page" +msgstr "Rediger denne side" + +msgid "By the" +msgstr "Ved" + +msgid "next page" +msgstr "Næste side" diff --git a/docs/_build/html/_static/locales/de/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/de/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..648b565 Binary files /dev/null and b/docs/_build/html/_static/locales/de/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/de/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/de/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..4925360 --- /dev/null +++ b/docs/_build/html/_static/locales/de/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "In PDF drucken" + +msgid "Theme by the" +msgstr "Thema von der" + +msgid "Download source file" +msgstr "Quelldatei herunterladen" + +msgid "open issue" +msgstr "offenes Thema" + +msgid "Contents" +msgstr "Inhalt" + +msgid "previous page" +msgstr "vorherige Seite" + +msgid "Download notebook file" +msgstr "Notebook-Datei herunterladen" + +msgid "Copyright" +msgstr "Urheberrechte ©" + +msgid "Download this page" +msgstr "Laden Sie diese Seite herunter" + +msgid "Source repository" +msgstr "Quell-Repository" + +msgid "By" +msgstr "Durch" + +msgid "repository" +msgstr "Repository" + +msgid "Last updated on" +msgstr "Zuletzt aktualisiert am" + +msgid "Toggle navigation" +msgstr "Navigation umschalten" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-Buch-Thema" + +msgid "suggest edit" +msgstr "vorschlagen zu bearbeiten" + +msgid "Open an issue" +msgstr "Öffnen Sie ein Problem" + +msgid "Launch" +msgstr "Starten" + +msgid "Fullscreen mode" +msgstr "Vollbildmodus" + +msgid "Edit this page" +msgstr "Bearbeite diese Seite" + +msgid "By the" +msgstr "Bis zum" + +msgid "next page" +msgstr "Nächste Seite" diff --git a/docs/_build/html/_static/locales/el/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/el/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..fca6e93 Binary files /dev/null and b/docs/_build/html/_static/locales/el/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/el/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/el/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..3e01acb --- /dev/null +++ b/docs/_build/html/_static/locales/el/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Εκτύπωση σε PDF" + +msgid "Theme by the" +msgstr "Θέμα από το" + +msgid "Download source file" +msgstr "Λήψη αρχείου προέλευσης" + +msgid "open issue" +msgstr "ανοιχτό ζήτημα" + +msgid "Contents" +msgstr "Περιεχόμενα" + +msgid "previous page" +msgstr "προηγούμενη σελίδα" + +msgid "Download notebook file" +msgstr "Λήψη αρχείου σημειωματάριου" + +msgid "Copyright" +msgstr "Πνευματική ιδιοκτησία" + +msgid "Download this page" +msgstr "Λήψη αυτής της σελίδας" + +msgid "Source repository" +msgstr "Αποθήκη πηγής" + +msgid "By" +msgstr "Με" + +msgid "repository" +msgstr "αποθήκη" + +msgid "Last updated on" +msgstr "Τελευταία ενημέρωση στις" + +msgid "Toggle navigation" +msgstr "Εναλλαγή πλοήγησης" + +msgid "Sphinx Book Theme" +msgstr "Θέμα βιβλίου Sphinx" + +msgid "suggest edit" +msgstr "προτείνω επεξεργασία" + +msgid "Open an issue" +msgstr "Ανοίξτε ένα ζήτημα" + +msgid "Launch" +msgstr "Εκτόξευση" + +msgid "Fullscreen mode" +msgstr "ΛΕΙΤΟΥΡΓΙΑ ΠΛΗΡΟΥΣ ΟΘΟΝΗΣ" + +msgid "Edit this page" +msgstr "Επεξεργαστείτε αυτήν τη σελίδα" + +msgid "By the" +msgstr "Από το" + +msgid "next page" +msgstr "επόμενη σελίδα" diff --git a/docs/_build/html/_static/locales/eo/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/eo/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..d1072bb Binary files /dev/null and b/docs/_build/html/_static/locales/eo/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/eo/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/eo/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..f7ed226 --- /dev/null +++ b/docs/_build/html/_static/locales/eo/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Presi al PDF" + +msgid "Theme by the" +msgstr "Temo de la" + +msgid "Download source file" +msgstr "Elŝutu fontodosieron" + +msgid "open issue" +msgstr "malferma numero" + +msgid "Contents" +msgstr "Enhavo" + +msgid "previous page" +msgstr "antaŭa paĝo" + +msgid "Download notebook file" +msgstr "Elŝutu kajeran dosieron" + +msgid "Copyright" +msgstr "Kopirajto" + +msgid "Download this page" +msgstr "Elŝutu ĉi tiun paĝon" + +msgid "Source repository" +msgstr "Fonto-deponejo" + +msgid "By" +msgstr "De" + +msgid "repository" +msgstr "deponejo" + +msgid "Last updated on" +msgstr "Laste ĝisdatigita la" + +msgid "Toggle navigation" +msgstr "Ŝalti navigadon" + +msgid "Sphinx Book Theme" +msgstr "Sfinksa Libro-Temo" + +msgid "suggest edit" +msgstr "sugesti redaktadon" + +msgid "Open an issue" +msgstr "Malfermu numeron" + +msgid "Launch" +msgstr "Lanĉo" + +msgid "Fullscreen mode" +msgstr "Plenekrana reĝimo" + +msgid "Edit this page" +msgstr "Redaktu ĉi tiun paĝon" + +msgid "By the" +msgstr "Per la" + +msgid "next page" +msgstr "sekva paĝo" diff --git a/docs/_build/html/_static/locales/es/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/es/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..ba2ee4d Binary files /dev/null and b/docs/_build/html/_static/locales/es/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/es/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/es/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..5e0029e --- /dev/null +++ b/docs/_build/html/_static/locales/es/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Imprimir en PDF" + +msgid "Theme by the" +msgstr "Tema por el" + +msgid "Download source file" +msgstr "Descargar archivo fuente" + +msgid "open issue" +msgstr "Tema abierto" + +msgid "Contents" +msgstr "Contenido" + +msgid "previous page" +msgstr "pagina anterior" + +msgid "Download notebook file" +msgstr "Descargar archivo de cuaderno" + +msgid "Copyright" +msgstr "Derechos de autor" + +msgid "Download this page" +msgstr "Descarga esta pagina" + +msgid "Source repository" +msgstr "Repositorio de origen" + +msgid "By" +msgstr "Por" + +msgid "repository" +msgstr "repositorio" + +msgid "Last updated on" +msgstr "Ultima actualización en" + +msgid "Toggle navigation" +msgstr "Navegación de palanca" + +msgid "Sphinx Book Theme" +msgstr "Tema del libro de la esfinge" + +msgid "suggest edit" +msgstr "sugerir editar" + +msgid "Open an issue" +msgstr "Abrir un problema" + +msgid "Launch" +msgstr "Lanzamiento" + +msgid "Fullscreen mode" +msgstr "Modo de pantalla completa" + +msgid "Edit this page" +msgstr "Edita esta página" + +msgid "By the" +msgstr "Por el" + +msgid "next page" +msgstr "siguiente página" diff --git a/docs/_build/html/_static/locales/et/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/et/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..983b823 Binary files /dev/null and b/docs/_build/html/_static/locales/et/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/et/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/et/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..8680982 --- /dev/null +++ b/docs/_build/html/_static/locales/et/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Prindi PDF-i" + +msgid "Theme by the" +msgstr "Teema" + +msgid "Download source file" +msgstr "Laadige alla lähtefail" + +msgid "open issue" +msgstr "avatud küsimus" + +msgid "Contents" +msgstr "Sisu" + +msgid "previous page" +msgstr "eelmine leht" + +msgid "Download notebook file" +msgstr "Laadige sülearvuti fail alla" + +msgid "Copyright" +msgstr "Autoriõigus" + +msgid "Download this page" +msgstr "Laadige see leht alla" + +msgid "Source repository" +msgstr "Allikahoidla" + +msgid "By" +msgstr "Kõrval" + +msgid "repository" +msgstr "hoidla" + +msgid "Last updated on" +msgstr "Viimati uuendatud" + +msgid "Toggle navigation" +msgstr "Lülita navigeerimine sisse" + +msgid "Sphinx Book Theme" +msgstr "Sfinksiraamatu teema" + +msgid "suggest edit" +msgstr "soovita muuta" + +msgid "Open an issue" +msgstr "Avage probleem" + +msgid "Launch" +msgstr "Käivitage" + +msgid "Fullscreen mode" +msgstr "Täisekraanirežiim" + +msgid "Edit this page" +msgstr "Muutke seda lehte" + +msgid "By the" +msgstr "Autor" + +msgid "next page" +msgstr "järgmine leht" diff --git a/docs/_build/html/_static/locales/fi/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/fi/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..d8ac054 Binary files /dev/null and b/docs/_build/html/_static/locales/fi/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/fi/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/fi/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..34dac21 --- /dev/null +++ b/docs/_build/html/_static/locales/fi/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Tulosta PDF-tiedostoon" + +msgid "Theme by the" +msgstr "Teeman tekijä" + +msgid "Download source file" +msgstr "Lataa lähdetiedosto" + +msgid "open issue" +msgstr "avoin ongelma" + +msgid "Contents" +msgstr "Sisällys" + +msgid "previous page" +msgstr "Edellinen sivu" + +msgid "Download notebook file" +msgstr "Lataa muistikirjatiedosto" + +msgid "Copyright" +msgstr "Tekijänoikeus" + +msgid "Download this page" +msgstr "Lataa tämä sivu" + +msgid "Source repository" +msgstr "Lähteen arkisto" + +msgid "By" +msgstr "Tekijä" + +msgid "repository" +msgstr "arkisto" + +msgid "Last updated on" +msgstr "Viimeksi päivitetty" + +msgid "Toggle navigation" +msgstr "Vaihda navigointia" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-kirjan teema" + +msgid "suggest edit" +msgstr "ehdottaa muokkausta" + +msgid "Open an issue" +msgstr "Avaa ongelma" + +msgid "Launch" +msgstr "Tuoda markkinoille" + +msgid "Fullscreen mode" +msgstr "Koko näytön tila" + +msgid "Edit this page" +msgstr "Muokkaa tätä sivua" + +msgid "By the" +msgstr "Mukaan" + +msgid "next page" +msgstr "seuraava sivu" diff --git a/docs/_build/html/_static/locales/fr/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/fr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..f663d39 Binary files /dev/null and b/docs/_build/html/_static/locales/fr/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/fr/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/fr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..8991a1b --- /dev/null +++ b/docs/_build/html/_static/locales/fr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Imprimer au format PDF" + +msgid "Theme by the" +msgstr "Thème par le" + +msgid "Download source file" +msgstr "Télécharger le fichier source" + +msgid "open issue" +msgstr "signaler un problème" + +msgid "Contents" +msgstr "Contenu" + +msgid "previous page" +msgstr "page précédente" + +msgid "Download notebook file" +msgstr "Télécharger le fichier notebook" + +msgid "Copyright" +msgstr "droits d'auteur" + +msgid "Download this page" +msgstr "Téléchargez cette page" + +msgid "Source repository" +msgstr "Dépôt source" + +msgid "By" +msgstr "Par" + +msgid "repository" +msgstr "dépôt" + +msgid "Last updated on" +msgstr "Dernière mise à jour le" + +msgid "Toggle navigation" +msgstr "Basculer la navigation" + +msgid "Sphinx Book Theme" +msgstr "Thème du livre Sphinx" + +msgid "suggest edit" +msgstr "suggestion de modification" + +msgid "Open an issue" +msgstr "Ouvrez un problème" + +msgid "Launch" +msgstr "lancement" + +msgid "Fullscreen mode" +msgstr "Mode plein écran" + +msgid "Edit this page" +msgstr "Modifier cette page" + +msgid "By the" +msgstr "Par le" + +msgid "next page" +msgstr "page suivante" diff --git a/docs/_build/html/_static/locales/hr/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/hr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..eca4a1a Binary files /dev/null and b/docs/_build/html/_static/locales/hr/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/hr/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/hr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..42c4233 --- /dev/null +++ b/docs/_build/html/_static/locales/hr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Ispis u PDF" + +msgid "Theme by the" +msgstr "Tema autora" + +msgid "Download source file" +msgstr "Preuzmi izvornu datoteku" + +msgid "open issue" +msgstr "otvoreno izdanje" + +msgid "Contents" +msgstr "Sadržaj" + +msgid "previous page" +msgstr "Prethodna stranica" + +msgid "Download notebook file" +msgstr "Preuzmi datoteku bilježnice" + +msgid "Copyright" +msgstr "Autorska prava" + +msgid "Download this page" +msgstr "Preuzmite ovu stranicu" + +msgid "Source repository" +msgstr "Izvorno spremište" + +msgid "By" +msgstr "Po" + +msgid "repository" +msgstr "spremište" + +msgid "Last updated on" +msgstr "Posljednje ažuriranje:" + +msgid "Toggle navigation" +msgstr "Uključi / isključi navigaciju" + +msgid "Sphinx Book Theme" +msgstr "Tema knjige Sphinx" + +msgid "suggest edit" +msgstr "predloži uređivanje" + +msgid "Open an issue" +msgstr "Otvorite izdanje" + +msgid "Launch" +msgstr "Pokrenite" + +msgid "Fullscreen mode" +msgstr "Način preko cijelog zaslona" + +msgid "Edit this page" +msgstr "Uredite ovu stranicu" + +msgid "By the" +msgstr "Od strane" + +msgid "next page" +msgstr "sljedeća stranica" diff --git a/docs/_build/html/_static/locales/id/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/id/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..d07a06a Binary files /dev/null and b/docs/_build/html/_static/locales/id/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/id/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/id/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..b8d8d89 --- /dev/null +++ b/docs/_build/html/_static/locales/id/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Cetak ke PDF" + +msgid "Theme by the" +msgstr "Tema oleh" + +msgid "Download source file" +msgstr "Unduh file sumber" + +msgid "open issue" +msgstr "masalah terbuka" + +msgid "Contents" +msgstr "Isi" + +msgid "previous page" +msgstr "halaman sebelumnya" + +msgid "Download notebook file" +msgstr "Unduh file notebook" + +msgid "Copyright" +msgstr "hak cipta" + +msgid "Download this page" +msgstr "Unduh halaman ini" + +msgid "Source repository" +msgstr "Repositori sumber" + +msgid "By" +msgstr "Oleh" + +msgid "repository" +msgstr "gudang" + +msgid "Last updated on" +msgstr "Terakhir diperbarui saat" + +msgid "Toggle navigation" +msgstr "Alihkan navigasi" + +msgid "Sphinx Book Theme" +msgstr "Tema Buku Sphinx" + +msgid "suggest edit" +msgstr "menyarankan edit" + +msgid "Open an issue" +msgstr "Buka masalah" + +msgid "Launch" +msgstr "Meluncurkan" + +msgid "Fullscreen mode" +msgstr "Mode layar penuh" + +msgid "Edit this page" +msgstr "Edit halaman ini" + +msgid "By the" +msgstr "Oleh" + +msgid "next page" +msgstr "halaman selanjutnya" diff --git a/docs/_build/html/_static/locales/it/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/it/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..53ba476 Binary files /dev/null and b/docs/_build/html/_static/locales/it/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/it/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/it/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..36fca59 --- /dev/null +++ b/docs/_build/html/_static/locales/it/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Stampa in PDF" + +msgid "Theme by the" +msgstr "Tema di" + +msgid "Download source file" +msgstr "Scarica il file sorgente" + +msgid "open issue" +msgstr "questione aperta" + +msgid "Contents" +msgstr "Contenuti" + +msgid "previous page" +msgstr "pagina precedente" + +msgid "Download notebook file" +msgstr "Scarica il file del taccuino" + +msgid "Copyright" +msgstr "Diritto d'autore" + +msgid "Download this page" +msgstr "Scarica questa pagina" + +msgid "Source repository" +msgstr "Repository di origine" + +msgid "By" +msgstr "Di" + +msgid "repository" +msgstr "repository" + +msgid "Last updated on" +msgstr "Ultimo aggiornamento il" + +msgid "Toggle navigation" +msgstr "Attiva / disattiva la navigazione" + +msgid "Sphinx Book Theme" +msgstr "Tema del libro della Sfinge" + +msgid "suggest edit" +msgstr "suggerisci modifica" + +msgid "Open an issue" +msgstr "Apri un problema" + +msgid "Launch" +msgstr "Lanciare" + +msgid "Fullscreen mode" +msgstr "Modalità schermo intero" + +msgid "Edit this page" +msgstr "Modifica questa pagina" + +msgid "By the" +msgstr "Dal" + +msgid "next page" +msgstr "pagina successiva" diff --git a/docs/_build/html/_static/locales/iw/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/iw/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..a45c657 Binary files /dev/null and b/docs/_build/html/_static/locales/iw/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/iw/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/iw/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..dede9cb --- /dev/null +++ b/docs/_build/html/_static/locales/iw/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: iw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "הדפס לקובץ PDF" + +msgid "Theme by the" +msgstr "נושא מאת" + +msgid "Download source file" +msgstr "הורד את קובץ המקור" + +msgid "open issue" +msgstr "בעיה פתוחה" + +msgid "Contents" +msgstr "תוכן" + +msgid "previous page" +msgstr "עמוד קודם" + +msgid "Download notebook file" +msgstr "הורד קובץ מחברת" + +msgid "Copyright" +msgstr "זכויות יוצרים" + +msgid "Download this page" +msgstr "הורד דף זה" + +msgid "Source repository" +msgstr "מאגר המקורות" + +msgid "By" +msgstr "על ידי" + +msgid "repository" +msgstr "מאגר" + +msgid "Last updated on" +msgstr "עודכן לאחרונה ב" + +msgid "Toggle navigation" +msgstr "החלף ניווט" + +msgid "Sphinx Book Theme" +msgstr "נושא ספר ספינקס" + +msgid "suggest edit" +msgstr "מציע לערוך" + +msgid "Open an issue" +msgstr "פתח גיליון" + +msgid "Launch" +msgstr "לְהַשִׁיק" + +msgid "Fullscreen mode" +msgstr "מצב מסך מלא" + +msgid "Edit this page" +msgstr "ערוך דף זה" + +msgid "By the" +msgstr "דרך" + +msgid "next page" +msgstr "עמוד הבא" diff --git a/docs/_build/html/_static/locales/ja/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/ja/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..1cefd29 Binary files /dev/null and b/docs/_build/html/_static/locales/ja/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/ja/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/ja/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..2615f0d --- /dev/null +++ b/docs/_build/html/_static/locales/ja/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDFに印刷" + +msgid "Theme by the" +msgstr "のテーマ" + +msgid "Download source file" +msgstr "ソースファイルをダウンロード" + +msgid "open issue" +msgstr "未解決の問題" + +msgid "Contents" +msgstr "目次" + +msgid "previous page" +msgstr "前のページ" + +msgid "Download notebook file" +msgstr "ノートブックファイルをダウンロード" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Download this page" +msgstr "このページをダウンロード" + +msgid "Source repository" +msgstr "ソースリポジトリ" + +msgid "By" +msgstr "著者" + +msgid "repository" +msgstr "リポジトリ" + +msgid "Last updated on" +msgstr "最終更新日" + +msgid "Toggle navigation" +msgstr "ナビゲーションを切り替え" + +msgid "Sphinx Book Theme" +msgstr "スフィンクスの本のテーマ" + +msgid "suggest edit" +msgstr "編集を提案する" + +msgid "Open an issue" +msgstr "問題を報告" + +msgid "Launch" +msgstr "起動" + +msgid "Fullscreen mode" +msgstr "全画面モード" + +msgid "Edit this page" +msgstr "このページを編集" + +msgid "By the" +msgstr "によって" + +msgid "next page" +msgstr "次のページ" diff --git a/docs/_build/html/_static/locales/ko/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/ko/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..06c7ec9 Binary files /dev/null and b/docs/_build/html/_static/locales/ko/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/ko/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/ko/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..c9e13a4 --- /dev/null +++ b/docs/_build/html/_static/locales/ko/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDF로 인쇄" + +msgid "Theme by the" +msgstr "테마별" + +msgid "Download source file" +msgstr "소스 파일 다운로드" + +msgid "open issue" +msgstr "열린 문제" + +msgid "Contents" +msgstr "내용" + +msgid "previous page" +msgstr "이전 페이지" + +msgid "Download notebook file" +msgstr "노트북 파일 다운로드" + +msgid "Copyright" +msgstr "저작권" + +msgid "Download this page" +msgstr "이 페이지 다운로드" + +msgid "Source repository" +msgstr "소스 저장소" + +msgid "By" +msgstr "으로" + +msgid "repository" +msgstr "저장소" + +msgid "Last updated on" +msgstr "마지막 업데이트" + +msgid "Toggle navigation" +msgstr "탐색 전환" + +msgid "Sphinx Book Theme" +msgstr "스핑크스 도서 테마" + +msgid "suggest edit" +msgstr "편집 제안" + +msgid "Open an issue" +msgstr "이슈 열기" + +msgid "Launch" +msgstr "시작하다" + +msgid "Fullscreen mode" +msgstr "전체 화면으로보기" + +msgid "Edit this page" +msgstr "이 페이지 편집" + +msgid "By the" +msgstr "에 의해" + +msgid "next page" +msgstr "다음 페이지" diff --git a/docs/_build/html/_static/locales/lt/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/lt/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..4468ba0 Binary files /dev/null and b/docs/_build/html/_static/locales/lt/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/lt/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/lt/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..35eabd9 --- /dev/null +++ b/docs/_build/html/_static/locales/lt/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Spausdinti į PDF" + +msgid "Theme by the" +msgstr "Tema" + +msgid "Download source file" +msgstr "Atsisiųsti šaltinio failą" + +msgid "open issue" +msgstr "atviras klausimas" + +msgid "Contents" +msgstr "Turinys" + +msgid "previous page" +msgstr "Ankstesnis puslapis" + +msgid "Download notebook file" +msgstr "Atsisiųsti nešiojamojo kompiuterio failą" + +msgid "Copyright" +msgstr "Autorių teisės" + +msgid "Download this page" +msgstr "Atsisiųskite šį puslapį" + +msgid "Source repository" +msgstr "Šaltinio saugykla" + +msgid "By" +msgstr "Iki" + +msgid "repository" +msgstr "saugykla" + +msgid "Last updated on" +msgstr "Paskutinį kartą atnaujinta" + +msgid "Toggle navigation" +msgstr "Perjungti naršymą" + +msgid "Sphinx Book Theme" +msgstr "Sfinkso knygos tema" + +msgid "suggest edit" +msgstr "pasiūlyti redaguoti" + +msgid "Open an issue" +msgstr "Atidarykite problemą" + +msgid "Launch" +msgstr "Paleiskite" + +msgid "Fullscreen mode" +msgstr "Pilno ekrano režimas" + +msgid "Edit this page" +msgstr "Redaguoti šį puslapį" + +msgid "By the" +msgstr "Prie" + +msgid "next page" +msgstr "Kitas puslapis" diff --git a/docs/_build/html/_static/locales/lv/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/lv/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..74aa4d8 Binary files /dev/null and b/docs/_build/html/_static/locales/lv/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/lv/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/lv/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..ee1bd08 --- /dev/null +++ b/docs/_build/html/_static/locales/lv/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Drukāt PDF formātā" + +msgid "Theme by the" +msgstr "Autora tēma" + +msgid "Download source file" +msgstr "Lejupielādēt avota failu" + +msgid "open issue" +msgstr "atklāts jautājums" + +msgid "Contents" +msgstr "Saturs" + +msgid "previous page" +msgstr "iepriekšējā lapa" + +msgid "Download notebook file" +msgstr "Lejupielādēt piezīmju grāmatiņu" + +msgid "Copyright" +msgstr "Autortiesības" + +msgid "Download this page" +msgstr "Lejupielādējiet šo lapu" + +msgid "Source repository" +msgstr "Avota krātuve" + +msgid "By" +msgstr "Autors" + +msgid "repository" +msgstr "krātuve" + +msgid "Last updated on" +msgstr "Pēdējoreiz atjaunināts" + +msgid "Toggle navigation" +msgstr "Pārslēgt navigāciju" + +msgid "Sphinx Book Theme" +msgstr "Sfinksa grāmatas tēma" + +msgid "suggest edit" +msgstr "ieteikt rediģēt" + +msgid "Open an issue" +msgstr "Atveriet problēmu" + +msgid "Launch" +msgstr "Uzsākt" + +msgid "Fullscreen mode" +msgstr "Pilnekrāna režīms" + +msgid "Edit this page" +msgstr "Rediģēt šo lapu" + +msgid "By the" +msgstr "Ar" + +msgid "next page" +msgstr "nākamā lapaspuse" diff --git a/docs/_build/html/_static/locales/ml/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/ml/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..2736e8f Binary files /dev/null and b/docs/_build/html/_static/locales/ml/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/ml/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/ml/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..d471277 --- /dev/null +++ b/docs/_build/html/_static/locales/ml/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDF- ലേക്ക് പ്രിന്റുചെയ്യുക" + +msgid "Theme by the" +msgstr "പ്രമേയം" + +msgid "Download source file" +msgstr "ഉറവിട ഫയൽ ഡൗൺലോഡുചെയ്യുക" + +msgid "open issue" +msgstr "തുറന്ന പ്രശ്നം" + +msgid "previous page" +msgstr "മുൻപത്തെ താൾ" + +msgid "Download notebook file" +msgstr "നോട്ട്ബുക്ക് ഫയൽ ഡൺലോഡ് ചെയ്യുക" + +msgid "Copyright" +msgstr "പകർപ്പവകാശം" + +msgid "Download this page" +msgstr "ഈ പേജ് ഡൗൺലോഡുചെയ്യുക" + +msgid "Source repository" +msgstr "ഉറവിട ശേഖരം" + +msgid "By" +msgstr "എഴുതിയത്" + +msgid "Last updated on" +msgstr "അവസാനം അപ്‌ഡേറ്റുചെയ്‌തത്" + +msgid "Toggle navigation" +msgstr "നാവിഗേഷൻ ടോഗിൾ ചെയ്യുക" + +msgid "Sphinx Book Theme" +msgstr "സ്ഫിങ്ക്സ് പുസ്തക തീം" + +msgid "suggest edit" +msgstr "എഡിറ്റുചെയ്യാൻ നിർദ്ദേശിക്കുക" + +msgid "Open an issue" +msgstr "ഒരു പ്രശ്നം തുറക്കുക" + +msgid "Launch" +msgstr "സമാരംഭിക്കുക" + +msgid "Edit this page" +msgstr "ഈ പേജ് എഡിറ്റുചെയ്യുക" + +msgid "By the" +msgstr "എഴുതിയത്" + +msgid "next page" +msgstr "അടുത്ത പേജ്" diff --git a/docs/_build/html/_static/locales/mr/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/mr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..fe53010 Binary files /dev/null and b/docs/_build/html/_static/locales/mr/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/mr/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/mr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..f3694ac --- /dev/null +++ b/docs/_build/html/_static/locales/mr/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "पीडीएफवर मुद्रित करा" + +msgid "Theme by the" +msgstr "द्वारा थीम" + +msgid "Download source file" +msgstr "स्त्रोत फाइल डाउनलोड करा" + +msgid "open issue" +msgstr "खुला मुद्दा" + +msgid "previous page" +msgstr "मागील पान" + +msgid "Download notebook file" +msgstr "नोटबुक फाईल डाउनलोड करा" + +msgid "Copyright" +msgstr "कॉपीराइट" + +msgid "Download this page" +msgstr "हे पृष्ठ डाउनलोड करा" + +msgid "Source repository" +msgstr "स्त्रोत भांडार" + +msgid "By" +msgstr "द्वारा" + +msgid "Last updated on" +msgstr "अखेरचे अद्यतनित" + +msgid "Toggle navigation" +msgstr "नेव्हिगेशन टॉगल करा" + +msgid "Sphinx Book Theme" +msgstr "स्फिंक्स बुक थीम" + +msgid "suggest edit" +msgstr "संपादन सुचवा" + +msgid "Open an issue" +msgstr "एक मुद्दा उघडा" + +msgid "Launch" +msgstr "लाँच करा" + +msgid "Edit this page" +msgstr "हे पृष्ठ संपादित करा" + +msgid "By the" +msgstr "द्वारा" + +msgid "next page" +msgstr "पुढील पृष्ठ" diff --git a/docs/_build/html/_static/locales/ms/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/ms/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..f02603f Binary files /dev/null and b/docs/_build/html/_static/locales/ms/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/ms/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/ms/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..65b7c60 --- /dev/null +++ b/docs/_build/html/_static/locales/ms/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Cetak ke PDF" + +msgid "Theme by the" +msgstr "Tema oleh" + +msgid "Download source file" +msgstr "Muat turun fail sumber" + +msgid "open issue" +msgstr "isu terbuka" + +msgid "previous page" +msgstr "halaman sebelumnya" + +msgid "Download notebook file" +msgstr "Muat turun fail buku nota" + +msgid "Copyright" +msgstr "hak cipta" + +msgid "Download this page" +msgstr "Muat turun halaman ini" + +msgid "Source repository" +msgstr "Repositori sumber" + +msgid "By" +msgstr "Oleh" + +msgid "Last updated on" +msgstr "Terakhir dikemas kini pada" + +msgid "Toggle navigation" +msgstr "Togol navigasi" + +msgid "Sphinx Book Theme" +msgstr "Tema Buku Sphinx" + +msgid "suggest edit" +msgstr "cadangkan edit" + +msgid "Open an issue" +msgstr "Buka masalah" + +msgid "Launch" +msgstr "Lancarkan" + +msgid "Edit this page" +msgstr "Edit halaman ini" + +msgid "By the" +msgstr "Oleh" + +msgid "next page" +msgstr "muka surat seterusnya" diff --git a/docs/_build/html/_static/locales/nl/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/nl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..e59e7ec Binary files /dev/null and b/docs/_build/html/_static/locales/nl/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/nl/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/nl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..71bd1cd --- /dev/null +++ b/docs/_build/html/_static/locales/nl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Afdrukken naar pdf" + +msgid "Theme by the" +msgstr "Thema door de" + +msgid "Download source file" +msgstr "Download het bronbestand" + +msgid "open issue" +msgstr "open probleem" + +msgid "Contents" +msgstr "Inhoud" + +msgid "previous page" +msgstr "vorige pagina" + +msgid "Download notebook file" +msgstr "Download notebookbestand" + +msgid "Copyright" +msgstr "auteursrechten" + +msgid "Download this page" +msgstr "Download deze pagina" + +msgid "Source repository" +msgstr "Bronopslagplaats" + +msgid "By" +msgstr "Door" + +msgid "repository" +msgstr "repository" + +msgid "Last updated on" +msgstr "Laatst geupdate op" + +msgid "Toggle navigation" +msgstr "Schakel navigatie" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-boekthema" + +msgid "suggest edit" +msgstr "suggereren bewerken" + +msgid "Open an issue" +msgstr "Open een probleem" + +msgid "Launch" +msgstr "Lancering" + +msgid "Fullscreen mode" +msgstr "Volledig scherm" + +msgid "Edit this page" +msgstr "bewerk deze pagina" + +msgid "By the" +msgstr "Door de" + +msgid "next page" +msgstr "volgende bladzijde" diff --git a/docs/_build/html/_static/locales/no/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/no/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..6cd15c8 Binary files /dev/null and b/docs/_build/html/_static/locales/no/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/no/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/no/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..b21346a --- /dev/null +++ b/docs/_build/html/_static/locales/no/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: no\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Skriv ut til PDF" + +msgid "Theme by the" +msgstr "Tema av" + +msgid "Download source file" +msgstr "Last ned kildefilen" + +msgid "open issue" +msgstr "åpent nummer" + +msgid "Contents" +msgstr "Innhold" + +msgid "previous page" +msgstr "forrige side" + +msgid "Download notebook file" +msgstr "Last ned notatbokfilen" + +msgid "Copyright" +msgstr "opphavsrett" + +msgid "Download this page" +msgstr "Last ned denne siden" + +msgid "Source repository" +msgstr "Kildedepot" + +msgid "By" +msgstr "Av" + +msgid "repository" +msgstr "oppbevaringssted" + +msgid "Last updated on" +msgstr "Sist oppdatert den" + +msgid "Toggle navigation" +msgstr "Bytt navigasjon" + +msgid "Sphinx Book Theme" +msgstr "Sphinx boktema" + +msgid "suggest edit" +msgstr "foreslå redigering" + +msgid "Open an issue" +msgstr "Åpne et problem" + +msgid "Launch" +msgstr "Start" + +msgid "Fullscreen mode" +msgstr "Fullskjerm-modus" + +msgid "Edit this page" +msgstr "Rediger denne siden" + +msgid "By the" +msgstr "Ved" + +msgid "next page" +msgstr "neste side" diff --git a/docs/_build/html/_static/locales/pl/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/pl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..9ebb584 Binary files /dev/null and b/docs/_build/html/_static/locales/pl/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/pl/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/pl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..1b7233f --- /dev/null +++ b/docs/_build/html/_static/locales/pl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Drukuj do PDF" + +msgid "Theme by the" +msgstr "Motyw autorstwa" + +msgid "Download source file" +msgstr "Pobierz plik źródłowy" + +msgid "open issue" +msgstr "otwarty problem" + +msgid "Contents" +msgstr "Zawartość" + +msgid "previous page" +msgstr "Poprzednia strona" + +msgid "Download notebook file" +msgstr "Pobierz plik notatnika" + +msgid "Copyright" +msgstr "prawa autorskie" + +msgid "Download this page" +msgstr "Pobierz tę stronę" + +msgid "Source repository" +msgstr "Repozytorium źródłowe" + +msgid "By" +msgstr "Przez" + +msgid "repository" +msgstr "magazyn" + +msgid "Last updated on" +msgstr "Ostatnia aktualizacja" + +msgid "Toggle navigation" +msgstr "Przełącz nawigację" + +msgid "Sphinx Book Theme" +msgstr "Motyw książki Sphinx" + +msgid "suggest edit" +msgstr "zaproponuj edycję" + +msgid "Open an issue" +msgstr "Otwórz problem" + +msgid "Launch" +msgstr "Uruchomić" + +msgid "Fullscreen mode" +msgstr "Pełny ekran" + +msgid "Edit this page" +msgstr "Edytuj tę strone" + +msgid "By the" +msgstr "Przez" + +msgid "next page" +msgstr "Następna strona" diff --git a/docs/_build/html/_static/locales/pt/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/pt/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..d0ddb87 Binary files /dev/null and b/docs/_build/html/_static/locales/pt/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/pt/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/pt/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..1b27314 --- /dev/null +++ b/docs/_build/html/_static/locales/pt/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Imprimir em PDF" + +msgid "Theme by the" +msgstr "Tema por" + +msgid "Download source file" +msgstr "Baixar arquivo fonte" + +msgid "open issue" +msgstr "questão aberta" + +msgid "Contents" +msgstr "Conteúdo" + +msgid "previous page" +msgstr "página anterior" + +msgid "Download notebook file" +msgstr "Baixar arquivo de notebook" + +msgid "Copyright" +msgstr "direito autoral" + +msgid "Download this page" +msgstr "Baixe esta página" + +msgid "Source repository" +msgstr "Repositório fonte" + +msgid "By" +msgstr "De" + +msgid "repository" +msgstr "repositório" + +msgid "Last updated on" +msgstr "Última atualização em" + +msgid "Toggle navigation" +msgstr "Alternar de navegação" + +msgid "Sphinx Book Theme" +msgstr "Tema do livro Sphinx" + +msgid "suggest edit" +msgstr "sugerir edição" + +msgid "Open an issue" +msgstr "Abra um problema" + +msgid "Launch" +msgstr "Lançamento" + +msgid "Fullscreen mode" +msgstr "Modo tela cheia" + +msgid "Edit this page" +msgstr "Edite essa página" + +msgid "By the" +msgstr "Pelo" + +msgid "next page" +msgstr "próxima página" diff --git a/docs/_build/html/_static/locales/ro/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/ro/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..3c36ab1 Binary files /dev/null and b/docs/_build/html/_static/locales/ro/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/ro/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/ro/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..1783ad2 --- /dev/null +++ b/docs/_build/html/_static/locales/ro/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Imprimați în PDF" + +msgid "Theme by the" +msgstr "Tema de" + +msgid "Download source file" +msgstr "Descărcați fișierul sursă" + +msgid "open issue" +msgstr "problema deschisă" + +msgid "Contents" +msgstr "Cuprins" + +msgid "previous page" +msgstr "pagina anterioară" + +msgid "Download notebook file" +msgstr "Descărcați fișierul notebook" + +msgid "Copyright" +msgstr "Drepturi de autor" + +msgid "Download this page" +msgstr "Descarcă această pagină" + +msgid "Source repository" +msgstr "Depozit sursă" + +msgid "By" +msgstr "De" + +msgid "repository" +msgstr "repertoriu" + +msgid "Last updated on" +msgstr "Ultima actualizare la" + +msgid "Toggle navigation" +msgstr "Comutare navigare" + +msgid "Sphinx Book Theme" +msgstr "Tema Sphinx Book" + +msgid "suggest edit" +msgstr "sugerează editare" + +msgid "Open an issue" +msgstr "Deschideți o problemă" + +msgid "Launch" +msgstr "Lansa" + +msgid "Fullscreen mode" +msgstr "Modul ecran întreg" + +msgid "Edit this page" +msgstr "Editați această pagină" + +msgid "By the" +msgstr "Langa" + +msgid "next page" +msgstr "pagina următoare" diff --git a/docs/_build/html/_static/locales/ru/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/ru/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..6b8ca41 Binary files /dev/null and b/docs/_build/html/_static/locales/ru/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/ru/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/ru/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..b1176b7 --- /dev/null +++ b/docs/_build/html/_static/locales/ru/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Распечатать в PDF" + +msgid "Theme by the" +msgstr "Тема от" + +msgid "Download source file" +msgstr "Скачать исходный файл" + +msgid "open issue" +msgstr "открытый вопрос" + +msgid "Contents" +msgstr "Содержание" + +msgid "previous page" +msgstr "Предыдущая страница" + +msgid "Download notebook file" +msgstr "Скачать файл записной книжки" + +msgid "Copyright" +msgstr "авторское право" + +msgid "Download this page" +msgstr "Загрузите эту страницу" + +msgid "Source repository" +msgstr "Исходный репозиторий" + +msgid "By" +msgstr "По" + +msgid "repository" +msgstr "хранилище" + +msgid "Last updated on" +msgstr "Последнее обновление" + +msgid "Toggle navigation" +msgstr "Переключить навигацию" + +msgid "Sphinx Book Theme" +msgstr "Тема книги Сфинкс" + +msgid "suggest edit" +msgstr "предложить редактировать" + +msgid "Open an issue" +msgstr "Открыть вопрос" + +msgid "Launch" +msgstr "Запуск" + +msgid "Fullscreen mode" +msgstr "Полноэкранный режим" + +msgid "Edit this page" +msgstr "Редактировать эту страницу" + +msgid "By the" +msgstr "Посредством" + +msgid "next page" +msgstr "Следующая страница" diff --git a/docs/_build/html/_static/locales/sk/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/sk/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..59bd0dd Binary files /dev/null and b/docs/_build/html/_static/locales/sk/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/sk/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/sk/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..6501288 --- /dev/null +++ b/docs/_build/html/_static/locales/sk/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Tlač do PDF" + +msgid "Theme by the" +msgstr "Téma od" + +msgid "Download source file" +msgstr "Stiahnite si zdrojový súbor" + +msgid "open issue" +msgstr "otvorené vydanie" + +msgid "Contents" +msgstr "Obsah" + +msgid "previous page" +msgstr "predchádzajúca strana" + +msgid "Download notebook file" +msgstr "Stiahnite si zošit" + +msgid "Copyright" +msgstr "Autorské práva" + +msgid "Download this page" +msgstr "Stiahnite si túto stránku" + +msgid "Source repository" +msgstr "Zdrojové úložisko" + +msgid "By" +msgstr "Autor:" + +msgid "repository" +msgstr "Úložisko" + +msgid "Last updated on" +msgstr "Posledná aktualizácia dňa" + +msgid "Toggle navigation" +msgstr "Prepnúť navigáciu" + +msgid "Sphinx Book Theme" +msgstr "Téma knihy Sfinga" + +msgid "suggest edit" +msgstr "navrhnúť úpravu" + +msgid "Open an issue" +msgstr "Otvorte problém" + +msgid "Launch" +msgstr "Spustiť" + +msgid "Fullscreen mode" +msgstr "Režim celej obrazovky" + +msgid "Edit this page" +msgstr "Upraviť túto stránku" + +msgid "By the" +msgstr "Podľa" + +msgid "next page" +msgstr "ďalšia strana" diff --git a/docs/_build/html/_static/locales/sl/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/sl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..87bf26d Binary files /dev/null and b/docs/_build/html/_static/locales/sl/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/sl/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/sl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..3c7e3a8 --- /dev/null +++ b/docs/_build/html/_static/locales/sl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Natisni v PDF" + +msgid "Theme by the" +msgstr "Tema avtorja" + +msgid "Download source file" +msgstr "Prenesite izvorno datoteko" + +msgid "open issue" +msgstr "odprto vprašanje" + +msgid "Contents" +msgstr "Vsebina" + +msgid "previous page" +msgstr "Prejšnja stran" + +msgid "Download notebook file" +msgstr "Prenesite datoteko zvezka" + +msgid "Copyright" +msgstr "avtorske pravice" + +msgid "Download this page" +msgstr "Prenesite to stran" + +msgid "Source repository" +msgstr "Izvorno skladišče" + +msgid "By" +msgstr "Avtor" + +msgid "repository" +msgstr "odlagališče" + +msgid "Last updated on" +msgstr "Nazadnje posodobljeno dne" + +msgid "Toggle navigation" +msgstr "Preklopi navigacijo" + +msgid "Sphinx Book Theme" +msgstr "Tema knjige Sphinx" + +msgid "suggest edit" +msgstr "predlagajte urejanje" + +msgid "Open an issue" +msgstr "Odprite številko" + +msgid "Launch" +msgstr "Kosilo" + +msgid "Fullscreen mode" +msgstr "Celozaslonski način" + +msgid "Edit this page" +msgstr "Uredite to stran" + +msgid "By the" +msgstr "Avtor" + +msgid "next page" +msgstr "Naslednja stran" diff --git a/docs/_build/html/_static/locales/sr/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/sr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..ec740f4 Binary files /dev/null and b/docs/_build/html/_static/locales/sr/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/sr/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/sr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..773b8ad --- /dev/null +++ b/docs/_build/html/_static/locales/sr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Испис у ПДФ" + +msgid "Theme by the" +msgstr "Тхеме би" + +msgid "Download source file" +msgstr "Преузми изворну датотеку" + +msgid "open issue" +msgstr "отворено издање" + +msgid "Contents" +msgstr "Садржај" + +msgid "previous page" +msgstr "Претходна страница" + +msgid "Download notebook file" +msgstr "Преузмите датотеку бележнице" + +msgid "Copyright" +msgstr "Ауторско право" + +msgid "Download this page" +msgstr "Преузмите ову страницу" + +msgid "Source repository" +msgstr "Изворно спремиште" + +msgid "By" +msgstr "Од стране" + +msgid "repository" +msgstr "спремиште" + +msgid "Last updated on" +msgstr "Последње ажурирање" + +msgid "Toggle navigation" +msgstr "Укључи / искључи навигацију" + +msgid "Sphinx Book Theme" +msgstr "Тема књиге Спхинк" + +msgid "suggest edit" +msgstr "предложи уређивање" + +msgid "Open an issue" +msgstr "Отворите издање" + +msgid "Launch" +msgstr "Лансирање" + +msgid "Fullscreen mode" +msgstr "Режим целог екрана" + +msgid "Edit this page" +msgstr "Уредите ову страницу" + +msgid "By the" +msgstr "Од" + +msgid "next page" +msgstr "Следећа страна" diff --git a/docs/_build/html/_static/locales/sv/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/sv/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..b07dc76 Binary files /dev/null and b/docs/_build/html/_static/locales/sv/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/sv/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/sv/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..bcac54c --- /dev/null +++ b/docs/_build/html/_static/locales/sv/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Skriv ut till PDF" + +msgid "Theme by the" +msgstr "Tema av" + +msgid "Download source file" +msgstr "Ladda ner källfil" + +msgid "open issue" +msgstr "öppna problemrapport" + +msgid "Contents" +msgstr "Innehåll" + +msgid "previous page" +msgstr "föregående sida" + +msgid "Download notebook file" +msgstr "Ladda ner notebook-fil" + +msgid "Copyright" +msgstr "Upphovsrätt" + +msgid "Download this page" +msgstr "Ladda ner den här sidan" + +msgid "Source repository" +msgstr "Källkodsrepositorium" + +msgid "By" +msgstr "Av" + +msgid "repository" +msgstr "repositorium" + +msgid "Last updated on" +msgstr "Senast uppdaterad den" + +msgid "Toggle navigation" +msgstr "Växla navigering" + +msgid "Sphinx Book Theme" +msgstr "Sphinx Boktema" + +msgid "suggest edit" +msgstr "föreslå ändring" + +msgid "Open an issue" +msgstr "Öppna en problemrapport" + +msgid "Launch" +msgstr "Öppna" + +msgid "Fullscreen mode" +msgstr "Fullskärmsläge" + +msgid "Edit this page" +msgstr "Redigera den här sidan" + +msgid "By the" +msgstr "Av den" + +msgid "next page" +msgstr "nästa sida" diff --git a/docs/_build/html/_static/locales/ta/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/ta/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..29f52e1 Binary files /dev/null and b/docs/_build/html/_static/locales/ta/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/ta/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/ta/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..b48bdfa --- /dev/null +++ b/docs/_build/html/_static/locales/ta/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDF இல் அச்சிடுக" + +msgid "Theme by the" +msgstr "வழங்கிய தீம்" + +msgid "Download source file" +msgstr "மூல கோப்பைப் பதிவிறக்குக" + +msgid "open issue" +msgstr "திறந்த பிரச்சினை" + +msgid "previous page" +msgstr "முந்தைய பக்கம்" + +msgid "Download notebook file" +msgstr "நோட்புக் கோப்பைப் பதிவிறக்கவும்" + +msgid "Copyright" +msgstr "பதிப்புரிமை" + +msgid "Download this page" +msgstr "இந்தப் பக்கத்தைப் பதிவிறக்கவும்" + +msgid "Source repository" +msgstr "மூல களஞ்சியம்" + +msgid "By" +msgstr "வழங்கியவர்" + +msgid "Last updated on" +msgstr "கடைசியாக புதுப்பிக்கப்பட்டது" + +msgid "Toggle navigation" +msgstr "வழிசெலுத்தலை நிலைமாற்று" + +msgid "Sphinx Book Theme" +msgstr "ஸ்பிங்க்ஸ் புத்தக தீம்" + +msgid "suggest edit" +msgstr "திருத்த பரிந்துரைக்கவும்" + +msgid "Open an issue" +msgstr "சிக்கலைத் திறக்கவும்" + +msgid "Launch" +msgstr "தொடங்க" + +msgid "Edit this page" +msgstr "இந்தப் பக்கத்தைத் திருத்தவும்" + +msgid "By the" +msgstr "மூலம்" + +msgid "next page" +msgstr "அடுத்த பக்கம்" diff --git a/docs/_build/html/_static/locales/te/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/te/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..0a5f4b4 Binary files /dev/null and b/docs/_build/html/_static/locales/te/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/te/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/te/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..952278f --- /dev/null +++ b/docs/_build/html/_static/locales/te/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDF కి ముద్రించండి" + +msgid "Theme by the" +msgstr "ద్వారా థీమ్" + +msgid "Download source file" +msgstr "మూల ఫైల్‌ను డౌన్‌లోడ్ చేయండి" + +msgid "open issue" +msgstr "ఓపెన్ ఇష్యూ" + +msgid "previous page" +msgstr "ముందు పేజి" + +msgid "Download notebook file" +msgstr "నోట్బుక్ ఫైల్ను డౌన్లోడ్ చేయండి" + +msgid "Copyright" +msgstr "కాపీరైట్" + +msgid "Download this page" +msgstr "ఈ పేజీని డౌన్‌లోడ్ చేయండి" + +msgid "Source repository" +msgstr "మూల రిపోజిటరీ" + +msgid "By" +msgstr "ద్వారా" + +msgid "Last updated on" +msgstr "చివరిగా నవీకరించబడింది" + +msgid "Toggle navigation" +msgstr "నావిగేషన్‌ను టోగుల్ చేయండి" + +msgid "Sphinx Book Theme" +msgstr "సింహిక పుస్తక థీమ్" + +msgid "suggest edit" +msgstr "సవరించమని సూచించండి" + +msgid "Open an issue" +msgstr "సమస్యను తెరవండి" + +msgid "Launch" +msgstr "ప్రారంభించండి" + +msgid "Edit this page" +msgstr "ఈ పేజీని సవరించండి" + +msgid "By the" +msgstr "ద్వారా" + +msgid "next page" +msgstr "తరువాతి పేజీ" diff --git a/docs/_build/html/_static/locales/tg/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/tg/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..b21c6c6 Binary files /dev/null and b/docs/_build/html/_static/locales/tg/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/tg/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/tg/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..c33dc42 --- /dev/null +++ b/docs/_build/html/_static/locales/tg/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Чоп ба PDF" + +msgid "Theme by the" +msgstr "Мавзӯъи аз" + +msgid "Download source file" +msgstr "Файли манбаъро зеркашӣ кунед" + +msgid "open issue" +msgstr "барориши кушод" + +msgid "Contents" +msgstr "Мундариҷа" + +msgid "previous page" +msgstr "саҳифаи қаблӣ" + +msgid "Download notebook file" +msgstr "Файли дафтарро зеркашӣ кунед" + +msgid "Copyright" +msgstr "Ҳуқуқи муаллиф" + +msgid "Download this page" +msgstr "Ин саҳифаро зеркашӣ кунед" + +msgid "Source repository" +msgstr "Анбори манбаъ" + +msgid "By" +msgstr "Бо" + +msgid "repository" +msgstr "анбор" + +msgid "Last updated on" +msgstr "Last навсозӣ дар" + +msgid "Toggle navigation" +msgstr "Гузаришро иваз кунед" + +msgid "Sphinx Book Theme" +msgstr "Сфинкс Мавзӯи китоб" + +msgid "suggest edit" +msgstr "пешниҳод вироиш" + +msgid "Open an issue" +msgstr "Масъаларо кушоед" + +msgid "Launch" +msgstr "Оғоз" + +msgid "Fullscreen mode" +msgstr "Ҳолати экрани пурра" + +msgid "Edit this page" +msgstr "Ин саҳифаро таҳрир кунед" + +msgid "By the" +msgstr "Бо" + +msgid "next page" +msgstr "саҳифаи оянда" diff --git a/docs/_build/html/_static/locales/th/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/th/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..abede98 Binary files /dev/null and b/docs/_build/html/_static/locales/th/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/th/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/th/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..9d24294 --- /dev/null +++ b/docs/_build/html/_static/locales/th/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "พิมพ์เป็น PDF" + +msgid "Theme by the" +msgstr "ธีมโดย" + +msgid "Download source file" +msgstr "ดาวน์โหลดไฟล์ต้นฉบับ" + +msgid "open issue" +msgstr "เปิดปัญหา" + +msgid "Contents" +msgstr "สารบัญ" + +msgid "previous page" +msgstr "หน้าที่แล้ว" + +msgid "Download notebook file" +msgstr "ดาวน์โหลดไฟล์สมุดบันทึก" + +msgid "Copyright" +msgstr "ลิขสิทธิ์" + +msgid "Download this page" +msgstr "ดาวน์โหลดหน้านี้" + +msgid "Source repository" +msgstr "ที่เก็บซอร์ส" + +msgid "By" +msgstr "โดย" + +msgid "repository" +msgstr "ที่เก็บ" + +msgid "Last updated on" +msgstr "ปรับปรุงล่าสุดเมื่อ" + +msgid "Toggle navigation" +msgstr "ไม่ต้องสลับช่องทาง" + +msgid "Sphinx Book Theme" +msgstr "ธีมหนังสือสฟิงซ์" + +msgid "suggest edit" +msgstr "แนะนำแก้ไข" + +msgid "Open an issue" +msgstr "เปิดปัญหา" + +msgid "Launch" +msgstr "เปิด" + +msgid "Fullscreen mode" +msgstr "โหมดเต็มหน้าจอ" + +msgid "Edit this page" +msgstr "แก้ไขหน้านี้" + +msgid "By the" +msgstr "โดย" + +msgid "next page" +msgstr "หน้าต่อไป" diff --git a/docs/_build/html/_static/locales/tl/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/tl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..8df1b73 Binary files /dev/null and b/docs/_build/html/_static/locales/tl/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/tl/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/tl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..20e0d07 --- /dev/null +++ b/docs/_build/html/_static/locales/tl/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "I-print sa PDF" + +msgid "Theme by the" +msgstr "Tema ng" + +msgid "Download source file" +msgstr "Mag-download ng file ng pinagmulan" + +msgid "open issue" +msgstr "bukas na isyu" + +msgid "previous page" +msgstr "Nakaraang pahina" + +msgid "Download notebook file" +msgstr "Mag-download ng file ng notebook" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Download this page" +msgstr "I-download ang pahinang ito" + +msgid "Source repository" +msgstr "Pinagmulan ng imbakan" + +msgid "By" +msgstr "Ni" + +msgid "Last updated on" +msgstr "Huling na-update noong" + +msgid "Toggle navigation" +msgstr "I-toggle ang pag-navigate" + +msgid "Sphinx Book Theme" +msgstr "Tema ng Sphinx Book" + +msgid "suggest edit" +msgstr "iminumungkahi i-edit" + +msgid "Open an issue" +msgstr "Magbukas ng isyu" + +msgid "Launch" +msgstr "Ilunsad" + +msgid "Edit this page" +msgstr "I-edit ang pahinang ito" + +msgid "By the" +msgstr "Sa pamamagitan ng" + +msgid "next page" +msgstr "Susunod na pahina" diff --git a/docs/_build/html/_static/locales/tr/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/tr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..029ae18 Binary files /dev/null and b/docs/_build/html/_static/locales/tr/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/tr/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/tr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..a77eb02 --- /dev/null +++ b/docs/_build/html/_static/locales/tr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDF olarak yazdır" + +msgid "Theme by the" +msgstr "Tarafından tema" + +msgid "Download source file" +msgstr "Kaynak dosyayı indirin" + +msgid "open issue" +msgstr "Açık konu" + +msgid "Contents" +msgstr "İçindekiler" + +msgid "previous page" +msgstr "önceki sayfa" + +msgid "Download notebook file" +msgstr "Defter dosyasını indirin" + +msgid "Copyright" +msgstr "Telif hakkı" + +msgid "Download this page" +msgstr "Bu sayfayı indirin" + +msgid "Source repository" +msgstr "Kaynak kod deposu" + +msgid "By" +msgstr "Tarafından" + +msgid "repository" +msgstr "depo" + +msgid "Last updated on" +msgstr "Son güncelleme tarihi" + +msgid "Toggle navigation" +msgstr "Gezinmeyi değiştir" + +msgid "Sphinx Book Theme" +msgstr "Sfenks Kitap Teması" + +msgid "suggest edit" +msgstr "düzenleme öner" + +msgid "Open an issue" +msgstr "Bir sorunu açın" + +msgid "Launch" +msgstr "Başlatmak" + +msgid "Fullscreen mode" +msgstr "Tam ekran modu" + +msgid "Edit this page" +msgstr "Bu sayfayı düzenle" + +msgid "By the" +msgstr "Tarafından" + +msgid "next page" +msgstr "sonraki Sayfa" diff --git a/docs/_build/html/_static/locales/uk/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/uk/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..16ab789 Binary files /dev/null and b/docs/_build/html/_static/locales/uk/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/uk/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/uk/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..993dd07 --- /dev/null +++ b/docs/_build/html/_static/locales/uk/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Друк у форматі PDF" + +msgid "Theme by the" +msgstr "Тема від" + +msgid "Download source file" +msgstr "Завантажити вихідний файл" + +msgid "open issue" +msgstr "відкритий випуск" + +msgid "Contents" +msgstr "Зміст" + +msgid "previous page" +msgstr "Попередня сторінка" + +msgid "Download notebook file" +msgstr "Завантажте файл блокнота" + +msgid "Copyright" +msgstr "Авторське право" + +msgid "Download this page" +msgstr "Завантажте цю сторінку" + +msgid "Source repository" +msgstr "Джерело сховища" + +msgid "By" +msgstr "Автор" + +msgid "repository" +msgstr "сховище" + +msgid "Last updated on" +msgstr "Останнє оновлення:" + +msgid "Toggle navigation" +msgstr "Переключити навігацію" + +msgid "Sphinx Book Theme" +msgstr "Тема книги \"Сфінкс\"" + +msgid "suggest edit" +msgstr "запропонувати редагувати" + +msgid "Open an issue" +msgstr "Відкрийте випуск" + +msgid "Launch" +msgstr "Запуск" + +msgid "Fullscreen mode" +msgstr "Повноекранний режим" + +msgid "Edit this page" +msgstr "Редагувати цю сторінку" + +msgid "By the" +msgstr "По" + +msgid "next page" +msgstr "Наступна сторінка" diff --git a/docs/_build/html/_static/locales/ur/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/ur/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..de8c84b Binary files /dev/null and b/docs/_build/html/_static/locales/ur/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/ur/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/ur/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..2f77426 --- /dev/null +++ b/docs/_build/html/_static/locales/ur/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "پی ڈی ایف پرنٹ کریں" + +msgid "Theme by the" +msgstr "کے ذریعہ تھیم" + +msgid "Download source file" +msgstr "سورس فائل ڈاؤن لوڈ کریں" + +msgid "open issue" +msgstr "کھلا مسئلہ" + +msgid "previous page" +msgstr "سابقہ ​​صفحہ" + +msgid "Download notebook file" +msgstr "نوٹ بک فائل ڈاؤن لوڈ کریں" + +msgid "Copyright" +msgstr "کاپی رائٹ" + +msgid "Download this page" +msgstr "اس صفحے کو ڈاؤن لوڈ کریں" + +msgid "Source repository" +msgstr "ماخذ ذخیرہ" + +msgid "By" +msgstr "بذریعہ" + +msgid "Last updated on" +msgstr "آخری بار تازہ کاری ہوئی" + +msgid "Toggle navigation" +msgstr "نیویگیشن ٹوگل کریں" + +msgid "Sphinx Book Theme" +msgstr "سپنکس بک تھیم" + +msgid "suggest edit" +msgstr "ترمیم کی تجویز کریں" + +msgid "Open an issue" +msgstr "ایک مسئلہ کھولیں" + +msgid "Launch" +msgstr "لانچ کریں" + +msgid "Edit this page" +msgstr "اس صفحے میں ترمیم کریں" + +msgid "By the" +msgstr "کی طرف" + +msgid "next page" +msgstr "اگلا صفحہ" diff --git a/docs/_build/html/_static/locales/vi/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/vi/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..2bb3255 Binary files /dev/null and b/docs/_build/html/_static/locales/vi/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/vi/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/vi/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..33159f3 --- /dev/null +++ b/docs/_build/html/_static/locales/vi/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "In sang PDF" + +msgid "Theme by the" +msgstr "Chủ đề của" + +msgid "Download source file" +msgstr "Tải xuống tệp nguồn" + +msgid "open issue" +msgstr "vấn đề mở" + +msgid "Contents" +msgstr "Nội dung" + +msgid "previous page" +msgstr "trang trước" + +msgid "Download notebook file" +msgstr "Tải xuống tệp sổ tay" + +msgid "Copyright" +msgstr "Bản quyền" + +msgid "Download this page" +msgstr "Tải xuống trang này" + +msgid "Source repository" +msgstr "Kho nguồn" + +msgid "By" +msgstr "Bởi" + +msgid "repository" +msgstr "kho" + +msgid "Last updated on" +msgstr "Cập nhật lần cuối vào" + +msgid "Toggle navigation" +msgstr "Chuyển đổi điều hướng thành" + +msgid "Sphinx Book Theme" +msgstr "Chủ đề sách nhân sư" + +msgid "suggest edit" +msgstr "đề nghị chỉnh sửa" + +msgid "Open an issue" +msgstr "Mở một vấn đề" + +msgid "Launch" +msgstr "Phóng" + +msgid "Fullscreen mode" +msgstr "Chế độ toàn màn hình" + +msgid "Edit this page" +msgstr "chỉnh sửa trang này" + +msgid "By the" +msgstr "Bằng" + +msgid "next page" +msgstr "Trang tiếp theo" diff --git a/docs/_build/html/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..0e3235d Binary files /dev/null and b/docs/_build/html/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/zh_CN/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/zh_CN/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..2e519ef --- /dev/null +++ b/docs/_build/html/_static/locales/zh_CN/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "列印成 PDF" + +msgid "Theme by the" +msgstr "主题作者:" + +msgid "Download source file" +msgstr "下载源文件" + +msgid "open issue" +msgstr "创建议题" + +msgid "Contents" +msgstr "目录" + +msgid "previous page" +msgstr "上一页" + +msgid "Download notebook file" +msgstr "下载笔记本文件" + +msgid "Copyright" +msgstr "版权" + +msgid "Download this page" +msgstr "下载此页面" + +msgid "Source repository" +msgstr "源码库" + +msgid "By" +msgstr "作者:" + +msgid "repository" +msgstr "仓库" + +msgid "Last updated on" +msgstr "上次更新时间:" + +msgid "Toggle navigation" +msgstr "显示或隐藏导航栏" + +msgid "Sphinx Book Theme" +msgstr "Sphinx Book 主题" + +msgid "suggest edit" +msgstr "提出修改建议" + +msgid "Open an issue" +msgstr "创建议题" + +msgid "Launch" +msgstr "启动" + +msgid "Fullscreen mode" +msgstr "全屏模式" + +msgid "Edit this page" +msgstr "编辑此页面" + +msgid "By the" +msgstr "作者:" + +msgid "next page" +msgstr "下一页" diff --git a/docs/_build/html/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo b/docs/_build/html/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..9116fa9 Binary files /dev/null and b/docs/_build/html/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo differ diff --git a/docs/_build/html/_static/locales/zh_TW/LC_MESSAGES/booktheme.po b/docs/_build/html/_static/locales/zh_TW/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..beecb07 --- /dev/null +++ b/docs/_build/html/_static/locales/zh_TW/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "列印成 PDF" + +msgid "Theme by the" +msgstr "佈景主題作者:" + +msgid "Download source file" +msgstr "下載原始檔" + +msgid "open issue" +msgstr "公開的問題" + +msgid "Contents" +msgstr "目錄" + +msgid "previous page" +msgstr "上一頁" + +msgid "Download notebook file" +msgstr "下載 Notebook 檔案" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Download this page" +msgstr "下載此頁面" + +msgid "Source repository" +msgstr "來源儲存庫" + +msgid "By" +msgstr "作者:" + +msgid "repository" +msgstr "儲存庫" + +msgid "Last updated on" +msgstr "最後更新時間:" + +msgid "Toggle navigation" +msgstr "顯示或隱藏導覽列" + +msgid "Sphinx Book Theme" +msgstr "Sphinx Book 佈景主題" + +msgid "suggest edit" +msgstr "提出修改建議" + +msgid "Open an issue" +msgstr "開啟議題" + +msgid "Launch" +msgstr "啟動" + +msgid "Fullscreen mode" +msgstr "全螢幕模式" + +msgid "Edit this page" +msgstr "編輯此頁面" + +msgid "By the" +msgstr "作者:" + +msgid "next page" +msgstr "下一頁" diff --git a/docs/_build/html/_static/minus.png b/docs/_build/html/_static/minus.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/docs/_build/html/_static/minus.png differ diff --git a/docs/_build/html/_static/plus.png b/docs/_build/html/_static/plus.png new file mode 100644 index 0000000..7107cec Binary files /dev/null and b/docs/_build/html/_static/plus.png differ diff --git a/docs/_build/html/_static/pygments.css b/docs/_build/html/_static/pygments.css new file mode 100644 index 0000000..012e6a0 --- /dev/null +++ b/docs/_build/html/_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: #fae4c2 } +html[data-theme="light"] .highlight { background: #fefefe; color: #080808 } +html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #a12236 } /* Error */ +html[data-theme="light"] .highlight .k { color: #6730c5 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #7f4707 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #080808 } /* Name */ +html[data-theme="light"] .highlight .o { color: #00622f } /* Operator */ +html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #005b82 } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #005b82 } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #005b82 } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #6730c5 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #6730c5 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #6730c5 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #6730c5 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #6730c5 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #7f4707 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #7f4707 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #7f4707 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #00622f } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #7f4707 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #005b82 } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #005b82 } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #7f4707 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #00622f } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #6730c5 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #005b82 } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #7f4707 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #005b82 } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #005b82 } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #a12236 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #6730c5 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #7f4707 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #7f4707 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #7f4707 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #7f4707 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #7f4707 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #00622f } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #00622f } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #00622f } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #00622f } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #00622f } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #00622f } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #00622f } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #00622f } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #00622f } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #00622f } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #a12236 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #00622f } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #005b82 } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #7f4707 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #005b82 } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #a12236 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #a12236 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #a12236 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #7f4707 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #7f4707 } /* 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/docs/_build/html/_static/sbt-webpack-macros.html b/docs/_build/html/_static/sbt-webpack-macros.html new file mode 100644 index 0000000..6cbf559 --- /dev/null +++ b/docs/_build/html/_static/sbt-webpack-macros.html @@ -0,0 +1,11 @@ + +{% macro head_pre_bootstrap() %} + +{% endmacro %} + +{% macro body_post() %} + +{% endmacro %} diff --git a/docs/_build/html/_static/searchtools.js b/docs/_build/html/_static/searchtools.js new file mode 100644 index 0000000..b08d58c --- /dev/null +++ b/docs/_build/html/_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/docs/_build/html/_static/sphinx_highlight.js b/docs/_build/html/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/docs/_build/html/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/_build/html/_static/styles/bootstrap.css b/docs/_build/html/_static/styles/bootstrap.css new file mode 100644 index 0000000..5ac709f --- /dev/null +++ b/docs/_build/html/_static/styles/bootstrap.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33,37,41,.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33,37,41,.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0,0,0,.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0,0,0,.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0,0,0,.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0,0,0,.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0,0,0,.075);--bs-focus-ring-width:0.1875rem;--bs-focus-ring-opacity:1;--bs-focus-ring-color:var(--pst-color-accent);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222,226,230,.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222,226,230,.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:hsla(0,0%,100%,.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f;color-scheme:dark}*,:after,:before{box-sizing:border-box}@media(prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);background-color:var(--bs-body-bg);color:var(--bs-body-color);font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);margin:0;text-align:var(--bs-body-text-align)}hr{border:0;border-top:var(--bs-border-width) solid;color:inherit;margin:1rem 0;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:var(--bs-heading-color);font-weight:500;line-height:1.2;margin-bottom:.5rem;margin-top:0}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media(min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media(min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media(min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-bottom:1rem;margin-top:0}abbr[title]{cursor:help;text-decoration:underline dotted;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{background-color:var(--bs-highlight-bg);color:var(--bs-highlight-color);padding:.1875em}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;font-size:.875em;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{word-wrap:break-word;color:var(--bs-code-color);font-size:.875em}a>code{color:inherit}kbd{background-color:var(--bs-body-color);border-radius:.25rem;color:var(--bs-body-bg);font-size:.875em;padding:.1875rem .375rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:var(--bs-secondary-color);padding-bottom:.5rem;padding-top:.5rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:left;font-size:calc(1.275rem + .3vw);line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}@media(min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width:1200px){.display-6{font-size:2.5rem}}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#6c757d;font-size:.875em;margin-bottom:1rem;margin-top:-1rem}.blockquote-footer:before{content:"— "}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:var(--bs-secondary-color);font-size:.875em}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}@media(min-width:540px){.container,.container-sm{max-width:540px}}@media(min-width:720px){.container,.container-md,.container-sm{max-width:720px}}@media(min-width:960px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media(min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1400px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:540px;--bs-breakpoint-md:720px;--bs-breakpoint-lg:960px;--bs-breakpoint-xl:1200px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-left:calc(var(--bs-gutter-x)*-.5);margin-right:calc(var(--bs-gutter-x)*-.5);margin-top:calc(var(--bs-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--bs-gutter-y);max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media(min-width:540px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media(min-width:720px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media(min-width:960px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media(min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb),0.05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb),0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb),0.075);border-color:var(--bs-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.table>:not(caption)>*>*{background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)));color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));padding:.5rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped-columns>:not(caption)>tr>:nth-child(2n),.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000}.table-primary,.table-secondary{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#a7b9b1;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000}.table-info,.table-success{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000}.table-danger,.table-warning{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#c6c7c8;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000}.table-dark,.table-light{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff}.table-responsive{-webkit-overflow-scrolling:touch;overflow-x:auto}@media(max-width:539.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media(max-width:719.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media(max-width:959.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media(max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}.form-label{margin-bottom:.5rem}.col-form-label{font-size:inherit;line-height:1.5;margin-bottom:0;padding-bottom:calc(.375rem + var(--bs-border-width));padding-top:calc(.375rem + var(--bs-border-width))}.col-form-label-lg{font-size:1.25rem;padding-bottom:calc(.5rem + var(--bs-border-width));padding-top:calc(.5rem + var(--bs-border-width))}.col-form-label-sm{font-size:.875rem;padding-bottom:calc(.25rem + var(--bs-border-width));padding-top:calc(.25rem + var(--bs-border-width))}.form-text{color:var(--bs-secondary-color);font-size:.875em;margin-top:.25rem}.form-control{appearance:none;background-clip:padding-box;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media(prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{background-color:var(--bs-body-bg);border-color:#86b7fe;box-shadow:0 0 0 .1875rem var(--pst-color-accent);color:var(--bs-body-color);outline:0}.form-control::-webkit-date-and-time-value{height:1.5em;margin:0;min-width:85px}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{background-color:var(--bs-tertiary-bg);border:0 solid;border-color:inherit;border-inline-end-width:var(--bs-border-width);border-radius:0;color:var(--bs-body-color);margin:-.375rem -.75rem;margin-inline-end:.75rem;padding:.375rem .75rem;pointer-events: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}@media(prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0;color:var(--bs-body-color);display:block;line-height:1.5;margin-bottom:0;padding:.375rem 0;width:100%}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:var(--bs-border-radius-sm);font-size:.875rem;min-height:calc(1.5em + .5rem + var(--bs-border-width)*2);padding:.25rem .5rem}.form-control-sm::file-selector-button{margin:-.25rem -.5rem;margin-inline-end:.5rem;padding:.25rem .5rem}.form-control-lg{border-radius:var(--bs-border-radius-lg);font-size:1.25rem;min-height:calc(1.5em + 1rem + var(--bs-border-width)*2);padding:.5rem 1rem}.form-control-lg::file-selector-button{margin:-.5rem -1rem;margin-inline-end:1rem;padding:.5rem 1rem}textarea.form-control{min-height:calc(1.5em + .75rem + var(--bs-border-width)*2)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + var(--bs-border-width)*2)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + var(--bs-border-width)*2)}.form-control-color{height:calc(1.5em + .75rem + var(--bs-border-width)*2);padding:.375rem;width:3rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + var(--bs-border-width)*2)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + var(--bs-border-width)*2)}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem 2.25rem .375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media(prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;box-shadow:0 0 0 .1875rem var(--pst-color-accent);outline:0}.form-select[multiple],.form-select[size]:not([size="1"]){background-image:none;padding-right:.75rem}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{border-radius:var(--bs-border-radius-sm);font-size:.875rem;padding-bottom:.25rem;padding-left:.5rem;padding-top:.25rem}.form-select-lg{border-radius:var(--bs-border-radius-lg);font-size:1.25rem;padding-bottom:.5rem;padding-left:1rem;padding-top:.5rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E")}.form-check{display:block;margin-bottom:.125rem;min-height:1.5rem;padding-left:1.5em}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-left:0;padding-right:1.5em;text-align:right}.form-check-reverse .form-check-input{float:right;margin-left:0;margin-right:-1.5em}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-position:50%;background-repeat:no-repeat;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);flex-shrink:0;height:1em;margin-top:.25em;print-color-adjust:exact;vertical-align:top;width:1em}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;box-shadow:0 0 0 .1875rem var(--pst-color-accent);outline:0}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3E%3C/svg%3E")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='2' fill='%23fff'/%3E%3C/svg%3E")}.form-check-input[type=checkbox]:indeterminate{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3E%3C/svg%3E");background-color:#0d6efd;border-color:#0d6efd}.form-check-input:disabled{filter:none;opacity:.5;pointer-events:none}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(0, 0, 0, 0.25)'/%3E%3C/svg%3E");background-image:var(--bs-form-switch-bg);background-position:0;border-radius:2em;margin-left:-2.5em;transition:background-position .15s ease-in-out;width:2em}@media(prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%2386b7fe'/%3E%3C/svg%3E")}.form-switch .form-check-input:checked{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E");background-position:100%}.form-switch.form-check-reverse{padding-left:0;padding-right:2.5em}.form-switch.form-check-reverse .form-check-input{margin-left:0;margin-right:-2.5em}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{filter:none;opacity:.65;pointer-events:none}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255, 255, 255, 0.25)'/%3E%3C/svg%3E")}.form-range{appearance:none;background-color:transparent;height:1.375rem;padding:0;width:100%}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .1875rem var(--pst-color-accent)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .1875rem var(--pst-color-accent)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;height:1rem;margin-top:-.25rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media(prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.form-range::-moz-range-thumb{appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;height:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media(prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + var(--bs-border-width)*2);line-height:1.25;min-height:calc(3.5rem + var(--bs-border-width)*2)}.form-floating>label{border:var(--bs-border-width) solid transparent;height:100%;left:0;overflow:hidden;padding:1rem .75rem;pointer-events:none;position:absolute;text-align:start;text-overflow:ellipsis;top:0;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out;white-space:nowrap;z-index:2}@media(prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-select{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label:after,.form-floating>.form-control:focus~label:after,.form-floating>.form-control:not(:placeholder-shown)~label:after,.form-floating>.form-select~label:after{background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius);content:"";height:1.5em;inset:1rem .375rem;position:absolute;z-index:-1}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.form-floating>.form-control:disabled~label:after,.form-floating>:disabled~label:after{background-color:var(--bs-secondary-bg)}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{flex:1 1 auto;min-width:0;position:relative;width:1%}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{align-items:center;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:flex;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;text-align:center;white-space:nowrap}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{border-radius:var(--bs-border-radius-lg);font-size:1.25rem;padding:.5rem 1rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{border-radius:var(--bs-border-radius-sm);font-size:.875rem;padding:.25rem .5rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-bottom-right-radius:0;border-top-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:calc(var(--bs-border-width)*-1)}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-bottom-left-radius:0;border-top-left-radius:0}.valid-feedback{color:var(--bs-form-valid-color);display:none;font-size:.875em;margin-top:.25rem;width:100%}.valid-tooltip{background-color:var(--bs-success);border-radius:var(--bs-border-radius);color:#fff;display:none;font-size:.875rem;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-success-rgb),1)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-success-rgb),1)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3.75rem + 1.5em)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .1875rem rgba(var(--bs-success-rgb),1)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{color:var(--bs-form-invalid-color);display:none;font-size:.875em;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:var(--bs-danger);border-radius:var(--bs-border-radius);color:#fff;display:none;font-size:.875rem;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-danger-rgb),1)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-danger-rgb),1)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3.75rem + 1.5em)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .1875rem rgba(var(--bs-danger-rgb),1)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.1875rem rgba(var(--bs-btn-focus-shadow-rgb),.5);background-color:var(--bs-btn-bg);border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);color:var(--bs-btn-color);cursor:pointer;display:inline-block;font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);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;user-select:none;vertical-align:middle}@media(prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);color:var(--bs-btn-hover-color)}.btn-check+.btn:hover{background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color);color:var(--bs-btn-color)}.btn:focus-visible{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-focus-box-shadow);color:var(--bs-btn-hover-color);outline:0}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-focus-box-shadow);outline:0}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color);color:var(--bs-btn-active-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);color:var(--bs-btn-disabled-color);opacity:var(--bs-btn-disabled-opacity);pointer-events:none}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:0 0 0 #000;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{height:auto;transition:width .35s ease;width:0}@media(prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--pst-color-surface);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:var(--pst-color-surface);--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;background-clip:padding-box;background-color:var(--bs-dropdown-bg);border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius);color:var(--bs-dropdown-color);display:none;font-size:var(--bs-dropdown-font-size);list-style:none;margin:0;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);position:absolute;text-align:left;z-index:var(--bs-dropdown-zindex)}.dropdown-menu[data-bs-popper]{left:0;margin-top:var(--bs-dropdown-spacer);top:100%}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:auto;right:0}@media(min-width:540px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:auto;right:0}}@media(min-width:720px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:auto;right:0}}@media(min-width:960px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:auto;right:0}}@media(min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:auto;right:0}}.dropup .dropdown-menu[data-bs-popper]{bottom:100%;margin-bottom:var(--bs-dropdown-spacer);margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{left:100%;margin-left:var(--bs-dropdown-spacer);margin-top:0;right:auto;top:0}.dropend .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{left:auto;margin-right:var(--bs-dropdown-spacer);margin-top:0;right:100%;top:0}.dropstart .dropdown-toggle:after{content:"";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:"";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{border-top:1px solid var(--bs-dropdown-divider-bg);height:0;margin:var(--bs-dropdown-divider-margin-y) 0;opacity:1;overflow:hidden}.dropdown-item{background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0);clear:both;color:var(--bs-dropdown-link-color);display:block;font-weight:400;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);text-align:inherit;text-decoration:none;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--bs-dropdown-link-hover-bg);color:var(--bs-dropdown-link-hover-color)}.dropdown-item.active,.dropdown-item:active{background-color:var(--bs-dropdown-link-active-bg);color:var(--bs-dropdown-link-active-color);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:var(--bs-dropdown-link-disabled-color);pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:var(--bs-dropdown-header-color);display:block;font-size:.875rem;margin-bottom:0;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);white-space:nowrap}.dropdown-item-text{color:var(--bs-dropdown-link-color);display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:var(--pst-color-surface);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:var(--pst-color-surface);--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width)*-1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{align-items:flex-start;flex-direction:column;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width)*-1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{background:none;border:0;color:var(--bs-nav-link-color);display:block;font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{box-shadow:0 0 0 .1875rem var(--pst-color-accent);outline:0}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);cursor:default;pointer-events:none}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius);margin-bottom:calc(var(--bs-nav-tabs-border-width)*-1)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:var(--bs-nav-tabs-link-hover-border-color);isolation:isolate}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color);color:var(--bs-nav-tabs-link-active-color)}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:calc(var(--bs-nav-tabs-border-width)*-1)}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:var(--bs-nav-pills-link-active-bg);color:var(--bs-nav-pills-link-active-color)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{border-bottom:var(--bs-nav-underline-border-width) solid transparent;padding-left:0;padding-right:0}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{border-bottom-color:currentcolor;color:var(--bs-nav-underline-link-active-color);font-weight:700}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb),0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb),0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb),0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(33, 37, 41, 0.75)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb),0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0.1875rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl{align-items:center;display:flex;flex-wrap:inherit;justify-content:space-between}.navbar-brand{color:var(--bs-navbar-brand-color);font-size:var(--bs-navbar-brand-font-size);margin-right:var(--bs-navbar-brand-margin-end);padding-bottom:var(--bs-navbar-brand-padding-y);padding-top:var(--bs-navbar-brand-padding-y);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{color:var(--bs-navbar-color);padding-bottom:.5rem;padding-top:.5rem}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);color:var(--bs-navbar-color);font-size:var(--bs-navbar-toggler-font-size);line-height:1;padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{background-image:var(--bs-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media(min-width:540px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media(min-width:720px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media(min-width:960px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media(min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:hsla(0,0%,100%,.55);--bs-navbar-hover-color:hsla(0,0%,100%,.75);--bs-navbar-disabled-color:hsla(0,0%,100%,.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:hsla(0,0%,100%,.1)}.navbar-dark,.navbar[data-bs-theme=dark],[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.55)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb),0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;word-wrap:break-word;background-clip:border-box;background-color:var(--bs-card-bg);border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius);color:var(--bs-body-color);display:flex;flex-direction:column;height:var(--bs-card-height);min-width:0;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{color:var(--bs-card-color);flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x)}.card-title{color:var(--bs-card-title-color);margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{color:var(--bs-card-subtitle-color);margin-top:calc(var(--bs-card-title-spacer-y)*-.5)}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);margin-bottom:0;padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{border-bottom:0;margin-bottom:calc(var(--bs-card-cap-padding-y)*-1);margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-img-overlay{border-radius:var(--bs-card-inner-border-radius);bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width:540px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--bs-accordion-btn-focus-box-shadow:0 0 0 0.1875rem var(--pst-color-accent);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{align-items:center;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;color:var(--bs-accordion-btn-color);display:flex;font-size:1rem;overflow-anchor:none;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);position:relative;text-align:left;transition:var(--bs-accordion-transition);width:100%}@media(prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(var(--bs-accordion-border-width)*-1) 0 var(--bs-accordion-border-color);color:var(--bs-accordion-active-color)}.accordion-button:not(.collapsed):after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button:after{background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);content:"";flex-shrink:0;height:var(--bs-accordion-btn-icon-width);margin-left:auto;transition:var(--bs-accordion-btn-icon-transition);width:var(--bs-accordion-btn-icon-width)}@media(prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow);outline:0;z-index:3}.accordion-header{margin-bottom:0}.accordion-item{background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);color:var(--bs-accordion-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-left-radius:var(--bs-accordion-inner-border-radius);border-bottom-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-left:0;border-radius:0;border-right:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");--bs-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius);display:flex;flex-wrap:wrap;font-size:var(--bs-breadcrumb-font-size);list-style:none;margin-bottom:var(--bs-breadcrumb-margin-bottom);padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider,"/");float:left;padding-right:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.1875rem var(--pst-color-accent);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;list-style:none;padding-left:0}.page-link{background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);color:var(--bs-pagination-color);display:block;font-size:var(--bs-pagination-font-size);padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);position:relative;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}@media(prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color);color:var(--bs-pagination-hover-color);z-index:2}.page-link:focus{background-color:var(--bs-pagination-focus-bg);box-shadow:var(--bs-pagination-focus-box-shadow);color:var(--bs-pagination-focus-color);outline:0;z-index:3}.active>.page-link,.page-link.active{background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color);color:var(--bs-pagination-active-color);z-index:3}.disabled>.page-link,.page-link.disabled{background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color);color:var(--bs-pagination-disabled-color);pointer-events:none}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-bottom-left-radius:var(--bs-pagination-border-radius);border-top-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-bottom-right-radius:var(--bs-pagination-border-radius);border-top-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);border-radius:var(--bs-badge-border-radius);color:var(--bs-badge-color);display:inline-block;font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);text-align:center;vertical-align:baseline;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius);color:var(--bs-alert-color);margin-bottom:var(--bs-alert-margin-bottom);padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);position:relative}.alert-heading{color:inherit}.alert-link{color:var(--bs-alert-link-color);font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{padding:1.25rem 1rem;position:absolute;right:0;top:0;z-index:2}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius);display:flex;font-size:var(--bs-progress-font-size);height:var(--bs-progress-height);overflow:hidden}.progress-bar{background-color:var(--bs-progress-bar-bg);color:var(--bs-progress-bar-color);display:flex;flex-direction:column;justify-content:center;overflow:hidden;text-align:center;transition:var(--bs-progress-bar-transition);white-space:nowrap}@media(prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media(prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;border-radius:var(--bs-list-group-border-radius);display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{color:var(--bs-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:var(--bs-list-group-action-hover-bg);color:var(--bs-list-group-action-hover-color);text-decoration:none;z-index:1}.list-group-item-action:active{background-color:var(--bs-list-group-action-active-bg);color:var(--bs-list-group-action-active-color)}.list-group-item{background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);color:var(--bs-list-group-color);display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);position:relative;text-decoration:none}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--bs-list-group-disabled-bg);color:var(--bs-list-group-disabled-color);pointer-events:none}.list-group-item.active{background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color);color:var(--bs-list-group-active-color);z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:var(--bs-list-group-border-width);margin-top:calc(var(--bs-list-group-border-width)*-1)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}@media(min-width:540px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media(min-width:720px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media(min-width:960px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media(min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3E%3C/svg%3E");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.1875rem var(--pst-color-accent);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;box-sizing:content-box;height:1em;opacity:var(--bs-btn-close-opacity);padding:.25em;width:1em}.btn-close,.btn-close:hover{color:var(--bs-btn-close-color)}.btn-close:hover{opacity:var(--bs-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity);outline:0}.btn-close.disabled,.btn-close:disabled{opacity:var(--bs-btn-close-disabled-opacity);pointer-events:none;user-select:none}.btn-close-white,[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);background-clip:padding-box;background-color:var(--bs-toast-bg);border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);border-radius:var(--bs-toast-border-radius);box-shadow:var(--bs-toast-box-shadow);color:var(--bs-toast-color);font-size:var(--bs-toast-font-size);max-width:100%;pointer-events:auto;width:var(--bs-toast-max-width)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;max-width:100%;pointer-events:none;position:absolute;width:max-content;z-index:var(--bs-toast-zindex)}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{align-items:center;background-clip:padding-box;background-color:var(--bs-toast-header-bg);border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));color:var(--bs-toast-header-color);display:flex;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x)}.toast-header .btn-close{margin-left:var(--bs-toast-padding-x);margin-right:calc(var(--bs-toast-padding-x)*-.5)}.toast-body{word-wrap:break-word;padding:var(--bs-toast-padding-x)}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);display:none;height:100%;left:0;outline:0;overflow-x:hidden;overflow-y:auto;position:fixed;top:0;width:100%;z-index:var(--bs-modal-zindex)}.modal-dialog{margin:var(--bs-modal-margin);pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-50px);transition:transform .3s ease-out}@media(prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{background-clip:padding-box;background-color:var(--bs-modal-bg);border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);color:var(--bs-modal-color);display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;background-color:var(--bs-backdrop-bg);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:var(--bs-backdrop-zindex)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{align-items:center;border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius);display:flex;flex-shrink:0;padding:var(--bs-modal-header-padding)}.modal-header .btn-close{margin:calc(var(--bs-modal-header-padding-y)*-.5) calc(var(--bs-modal-header-padding-x)*-.5) calc(var(--bs-modal-header-padding-y)*-.5) auto;padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5)}.modal-title{line-height:var(--bs-modal-title-line-height);margin-bottom:0}.modal-body{flex:1 1 auto;padding:var(--bs-modal-padding);position:relative}.modal-footer{align-items:center;background-color:var(--bs-modal-footer-bg);border-bottom-left-radius:var(--bs-modal-inner-border-radius);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width:540px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{margin-left:auto;margin-right:auto;max-width:var(--bs-modal-width)}.modal-sm{--bs-modal-width:300px}}@media(min-width:960px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media(min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width:539.98px){.modal-fullscreen-sm-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width:719.98px){.modal-fullscreen-md-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width:959.98px){.modal-fullscreen-lg-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width:1199.98px){.modal-fullscreen-xl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;word-wrap:break-word;display:block;font-family:var(--bs-font-sans-serif);font-size:var(--bs-tooltip-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;margin:var(--bs-tooltip-margin);opacity:0;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--bs-tooltip-zindex)}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;height:var(--bs-tooltip-arrow-height);width:var(--bs-tooltip-arrow-width)}.tooltip .tooltip-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{border-top-color:var(--bs-tooltip-bg);border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;top:-1px}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{height:var(--bs-tooltip-arrow-width);left:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{border-right-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;right:-1px}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{border-bottom-color:var(--bs-tooltip-bg);border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);bottom:-1px}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{height:var(--bs-tooltip-arrow-width);right:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{border-left-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);left:-1px}.tooltip-inner{background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius);color:var(--bs-tooltip-color);max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);text-align:center}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);word-wrap:break-word;background-clip:padding-box;background-color:var(--bs-popover-bg);border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius);display:block;font-family:var(--bs-font-sans-serif);font-size:var(--bs-popover-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;max-width:var(--bs-popover-max-width);text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--bs-popover-zindex)}.popover .popover-arrow{display:block;height:var(--bs-popover-arrow-height);width:var(--bs-popover-arrow-width)}.popover .popover-arrow:after,.popover .popover-arrow:before{border:0 solid transparent;content:"";display:block;position:absolute}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-top>.popover-arrow:before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{border-top-color:var(--bs-popover-arrow-border);bottom:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{border-top-color:var(--bs-popover-bg);bottom:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{height:var(--bs-popover-arrow-width);left:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-end>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{border-right-color:var(--bs-popover-arrow-border);left:0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{border-right-color:var(--bs-popover-bg);left:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:before{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{border-bottom-color:var(--bs-popover-arrow-border);top:0}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{border-bottom-color:var(--bs-popover-bg);top:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg);content:"";display:block;left:50%;margin-left:calc(var(--bs-popover-arrow-width)*-.5);position:absolute;top:0;width:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{height:var(--bs-popover-arrow-width);right:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-start>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{border-left-color:var(--bs-popover-arrow-border);right:0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{border-left-color:var(--bs-popover-bg);right:var(--bs-popover-border-width)}.popover-header{background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius);color:var(--bs-popover-header-color);font-size:var(--bs-popover-header-font-size);margin-bottom:0;padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x)}.popover-header:empty{display:none}.popover-body{color:var(--bs-popover-body-color);padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media(prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{opacity:0;transition:opacity 0s .6s;z-index:0}@media(prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media(prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:2rem;width:2rem}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;position:absolute;right:0;z-index:2}.carousel-indicators [data-bs-target]{background-clip:padding-box;background-color:#fff;border:0;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;padding:0;text-indent:-999px;transition:opacity .6s ease;width:30px}@media(prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:1.25rem;color:#fff;left:15%;padding-bottom:1.25rem;padding-top:1.25rem;position:absolute;right:15%;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);border-radius:50%;display:inline-block;height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);width:var(--bs-spinner-width)}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border-right-color:currentcolor;border:var(--bs-spinner-border-width) solid;border-right:var(--bs-spinner-border-width) solid transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media(prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media(max-width:539.98px){.offcanvas-sm{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media(max-width:539.98px)and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media(max-width:539.98px){.offcanvas-sm.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-sm.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-sm.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom,.offcanvas-sm.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-sm.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media(min-width:540px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media(max-width:719.98px){.offcanvas-md{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media(max-width:719.98px)and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media(max-width:719.98px){.offcanvas-md.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-md.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-md.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom,.offcanvas-md.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-md.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media(min-width:720px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media(max-width:959.98px){.offcanvas-lg{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media(max-width:959.98px)and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media(max-width:959.98px){.offcanvas-lg.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-lg.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-lg.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom,.offcanvas-lg.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-lg.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media(min-width:960px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media(max-width:1199.98px){.offcanvas-xl{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media(max-width:1199.98px)and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media(max-width:1199.98px){.offcanvas-xl.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-xl.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-xl.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom,.offcanvas-xl.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xl.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media(min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}.offcanvas{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}@media(prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas.offcanvas-bottom,.offcanvas.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{background-color:#000;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{align-items:center;display:flex;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{margin:calc(var(--bs-offcanvas-padding-y)*-.5) calc(var(--bs-offcanvas-padding-x)*-.5) calc(var(--bs-offcanvas-padding-y)*-.5) auto;padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5)}.offcanvas-title{line-height:var(--bs-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{flex-grow:1;overflow-y:auto;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.placeholder{background-color:currentcolor;cursor:wait;display:inline-block;min-height:1em;opacity:.5;vertical-align:middle}.placeholder.btn:before{content:"";display:inline-block}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{animation:placeholder-wave 2s linear infinite;mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);mask-size:200% 100%}@keyframes placeholder-wave{to{mask-position:-200% 0}}.clearfix:after{clear:both;content:"";display:block}.text-bg-primary{background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-secondary{background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-success{background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-info{background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-warning{background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-danger{background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-light{background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-dark{background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,.75))!important}.focus-ring:focus{box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);outline:0}.icon-link{align-items:center;backface-visibility:hidden;display:inline-flex;gap:.375rem;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,.5));text-underline-offset:.25em}.icon-link>.bi{fill:currentcolor;flex-shrink:0;height:1em;transition:transform .2s ease-in-out;width:1em}@media(prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio:before{content:"";display:block;padding-top:var(--bs-aspect-ratio)}.ratio>*{height:100%;left:0;position:absolute;top:0;width:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}.sticky-top{top:0}.sticky-bottom,.sticky-top{position:sticky;z-index:1020}.sticky-bottom{bottom:0}@media(min-width:540px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{bottom:0;position:sticky;z-index:1020}}@media(min-width:720px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{bottom:0;position:sticky;z-index:1020}}@media(min-width:960px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{bottom:0;position:sticky;z-index:1020}}@media(min-width:1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{bottom:0;position:sticky;z-index:1020}}.hstack{align-items:center;flex-direction:row}.hstack,.vstack{align-self:stretch;display:flex}.vstack{flex:1 1 auto;flex-direction:column}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;white-space:nowrap!important;width:1px!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{align-self:stretch;background-color:currentcolor;display:inline-block;min-height:1em;opacity:.25;width:var(--bs-border-width)}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{object-fit:contain!important}.object-fit-cover{object-fit:cover!important}.object-fit-fill{object-fit:fill!important}.object-fit-scale{object-fit:scale-down!important}.object-fit-none{object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb),var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb),var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb),var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb),var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb),var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb),var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb),var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb),var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-bottom:0!important;margin-top:0!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-bottom:0!important;padding-top:0!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{column-gap:0!important}.column-gap-1{column-gap:.25rem!important}.column-gap-2{column-gap:.5rem!important}.column-gap-3{column-gap:1rem!important}.column-gap-4{column-gap:1.5rem!important}.column-gap-5{column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:hsla(0,0%,100%,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25,.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50,.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75,.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100,.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-end-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-bottom-right-radius:50%!important;border-top-right-radius:50%!important}.rounded-end-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-bottom-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-bottom-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media(min-width:540px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{object-fit:contain!important}.object-fit-sm-cover{object-fit:cover!important}.object-fit-sm-fill{object-fit:fill!important}.object-fit-sm-scale{object-fit:scale-down!important}.object-fit-sm-none{object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-bottom:0!important;margin-top:0!important}.my-sm-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-sm-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-sm-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-sm-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-sm-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-sm-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-bottom:0!important;padding-top:0!important}.py-sm-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-sm-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-sm-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-sm-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-sm-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{column-gap:0!important}.column-gap-sm-1{column-gap:.25rem!important}.column-gap-sm-2{column-gap:.5rem!important}.column-gap-sm-3{column-gap:1rem!important}.column-gap-sm-4{column-gap:1.5rem!important}.column-gap-sm-5{column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media(min-width:720px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{object-fit:contain!important}.object-fit-md-cover{object-fit:cover!important}.object-fit-md-fill{object-fit:fill!important}.object-fit-md-scale{object-fit:scale-down!important}.object-fit-md-none{object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-bottom:0!important;margin-top:0!important}.my-md-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-md-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-md-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-md-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-md-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-md-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-bottom:0!important;padding-top:0!important}.py-md-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-md-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-md-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-md-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-md-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{column-gap:0!important}.column-gap-md-1{column-gap:.25rem!important}.column-gap-md-2{column-gap:.5rem!important}.column-gap-md-3{column-gap:1rem!important}.column-gap-md-4{column-gap:1.5rem!important}.column-gap-md-5{column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media(min-width:960px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{object-fit:contain!important}.object-fit-lg-cover{object-fit:cover!important}.object-fit-lg-fill{object-fit:fill!important}.object-fit-lg-scale{object-fit:scale-down!important}.object-fit-lg-none{object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-bottom:0!important;margin-top:0!important}.my-lg-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-lg-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-lg-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-lg-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-lg-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-lg-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-bottom:0!important;padding-top:0!important}.py-lg-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-lg-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-lg-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-lg-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-lg-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{column-gap:0!important}.column-gap-lg-1{column-gap:.25rem!important}.column-gap-lg-2{column-gap:.5rem!important}.column-gap-lg-3{column-gap:1rem!important}.column-gap-lg-4{column-gap:1.5rem!important}.column-gap-lg-5{column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media(min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{object-fit:contain!important}.object-fit-xl-cover{object-fit:cover!important}.object-fit-xl-fill{object-fit:fill!important}.object-fit-xl-scale{object-fit:scale-down!important}.object-fit-xl-none{object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-bottom:0!important;margin-top:0!important}.my-xl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xl-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-xl-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-bottom:0!important;padding-top:0!important}.py-xl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xl-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{column-gap:0!important}.column-gap-xl-1{column-gap:.25rem!important}.column-gap-xl-2{column-gap:.5rem!important}.column-gap-xl-3{column-gap:1rem!important}.column-gap-xl-4{column-gap:1.5rem!important}.column-gap-xl-5{column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.css.map*/ \ No newline at end of file diff --git a/docs/_build/html/_static/styles/bootstrap.css.map b/docs/_build/html/_static/styles/bootstrap.css.map new file mode 100644 index 0000000..6af30c4 --- /dev/null +++ b/docs/_build/html/_static/styles/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/bootstrap.css","mappings":"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eACA,CAWJ,iBfjII,yCJ4QE,iBALI,CmBrIR,yDhB4wBsC,CgB3wBtC,oBfnIE,CeuIF,uCAEE,sBACA,wBAFA,oBhBsoB0B,CgBhoB9B,iBf9II,yCJ4QE,iBALI,CmBxHR,wDhBgwBsC,CgB/vBtC,kBfhJE,CeoJF,uCAEE,oBACA,uBAFA,kBhB6nB0B,CgBnnB5B,sBACE,0DhB6uBoC,CgB1uBtC,yBACE,yDhB0uBoC,CgBvuBtC,yBACE,wDhBuuBoC,CgBluBxC,oBAEE,sDhB8tBsC,CgB7tBtC,gBAFA,UhBmlB4B,CgB/kB5B,mDACE,eAGF,uCACE,mBfvLA,sCe2LF,0CACE,mBf5LA,sCegMF,yFhB8sBsC,CgB7sBtC,wFhB8sBsC,CmB75BxC,aACE,sQAUA,gBACA,kCnBk3BsC,CmBj3BtC,iFAEA,uCnB+9BkC,CmBh+BlC,4BAEA,yBnB+9BkC,CmB99BlC,2DlBHE,sCkBJF,0BnBy3BsC,CmBh4BtC,ctBuRI,cALI,CsB7QR,enB+lB4B,CmB9lB5B,enBsmB4B,CmB1mB5B,uCFMI,qEEPJ,UAgBA,CFLI,sCEfN,aFgBQ,iBEMN,mBACE,oBnBs3BoC,CmBh3BlC,kDALF,SnBs+B8B,CmB79BhC,0DAGE,sBADA,oBACA,CAGF,sBAEE,uCnBu1BoC,CmBl1BtC,4BACE,kBACA,uCAIJ,gBlBtCI,yCJ4QE,iBALI,CsB/NR,qBnBquB4B,CmBpuB5B,kBnBquB4B,CmBvuB5B,kBlBvCE,CkB8CJ,gBlB9CI,yCJ4QE,iBALI,CsBvNR,oBnBiuB4B,CmBhuB5B,iBnBiuB4B,CmBnuB5B,iBlB/CE,CkBwDA,kCACE,sQCxEN,YACE,cAGA,sBAFA,iBpBq6BwC,CoBp6BxC,kBpBs6BwC,CoBn6BxC,8BACE,WACA,mBAIJ,oBAEE,eADA,mBpB25BwC,CoBz5BxC,iBAEA,sCACE,YAEA,aAAY,CADZ,mBACA,CAIJ,kBACE,qCAOA,gBACA,yCACA,+CAEA,wBADA,4BAEA,wBACA,0DpB24BwC,CoBt5BxC,cAEA,UpBy4BwC,CoBx4BxC,iBASA,yBARA,mBAHA,SAWA,CAGA,iCnB3BE,oBmB+BF,8BAEE,iBpBm4BsC,CoBh4BxC,yBACE,sBpB03BsC,CoBv3BxC,wBACE,oBpBs1BoC,CoBp1BpC,kDADA,ShBnCoB,CgBuCtB,0BACE,wBpB5BM,CoB6BN,oBpB7BM,CoB+BN,yCAII,qQAIJ,sCAII,6KAKN,+CAOI,+PANF,wBpBjDM,CoBkDN,oBAKE,CAIJ,2BAEE,YACA,WAFA,mBpBo2BuC,CoB31BvC,2FACE,eACA,UpBy1BqC,CoB30B3C,aACE,kBpBo1BgC,CoBl1BhC,+BACE,qLAIA,0CACA,sBnBjHA,kBmB+GA,mBHlHE,gDGiHF,SAKA,CHlHE,sCG0GJ,+BHzGM,iBGmHJ,qCACE,2KAGF,uCAMI,wKALF,wBAKE,CAKN,gCAEE,cAAa,CADb,mBACA,CAEA,kDAEE,aAAY,CADZ,mBACA,CAKN,mBACE,qBACA,iBpBsyBgC,CoBnyBlC,WAEE,mBACA,oBAFA,iBAEA,CAIE,mDAEE,YACA,YAFA,mBpBwpBwB,CoB/oB1B,8EACE,2LCnLN,YAIE,gBACA,6BAHA,gBACA,UAFA,UAIA,CAEA,kBACE,UAIA,wGrB8gCuC,CqB7gCvC,oGrB6gCuC,CqB1gCzC,8BACE,SAGF,kCAIE,gBH1BF,wBlBkCQ,CqBNN,QrB6/BuC,CC1gCvC,mBoBSA,WrB8/BuC,CqB7/BvC,mBJbE,uGIWF,UAQA,CJfE,sCIMJ,kCJLM,iBIgBJ,yCHjCF,wBlB8hCyC,CqBx/BzC,2CAKE,uCrBu+B8B,CqBt+B9B,yBpB7BA,mBoB0BA,kBACA,crBu+B8B,CqBz+B9B,YrBw+B8B,CqBz+B9B,UpBxBA,CoBkCF,8BAGE,gBHpDF,wBlBkCQ,CqBoBN,QrBm+BuC,CC1gCvC,mBoBoCA,WrBm+BuC,CiB1gCrC,uGIsCF,UAOA,CJzCE,sCIiCJ,8BJhCM,iBI0CJ,qCH3DF,wBlB8hCyC,CqB99BzC,8BAKE,uCrB68B8B,CqB58B9B,yBpBvDA,mBoBoDA,kBACA,crB68B8B,CqB/8B9B,YrB88B8B,CqB/8B9B,UpBlDA,CoB4DF,qBACE,oBAEA,2CACE,0CrBg9BqC,CqB78BvC,uCACE,0CrB48BqC,CsBniC3C,eACE,kBAEA,gGAGE,8CtBw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CAGA,SAKE,CAIJ,8BACE,8CAME,0CALF,SAKE,CAIJ,mGAME,yCAGA,+CAJA,gCAIA,CAGA,yKAKI,0CAKN,sCAKI,0CAIJ,mDAKE,2CAEA,iDAJA,mCAKA,uCAJA,mBAIA,CAYF,aC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,qCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,uCDkGA,eC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,sCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,uCDkGA,aC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,qCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,uCDkGA,UC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,qCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,uCDkGA,aC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,oCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,uCDkGA,YC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,oCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,uCDkGA,WC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,sCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,uCDkGA,UC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,mCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,uCD4HA,qBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,qCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,mBDmGA,uBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,sCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,mBDmGA,qBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,oCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,mBDmGA,kBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,qCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,mBDmGA,qBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,oCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,mBDmGA,oBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,oCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,mBDmGA,mBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,sCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,mBDmGA,kBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,mCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,mBD+GF,UACE,yBACA,oCACA,wBACA,kCACA,gDACA,wCACA,iDACA,yCACA,gCACA,2CACA,+BACA,qCAEA,yBzB8QwC,CyBpQxC,wBACE,0BAGF,gBACE,gCAWJ,2BCjJE,0BACA,wB7B8NI,0BALI,C6BvNR,kDDkJF,2BCrJE,2BACA,0B7B8NI,2BALI,C6BvNR,kDCnEF,MVgBM,8BUfJ,CVmBI,sCUpBN,MVqBQ,iBUlBN,iBACE,UAMF,qBACE,aAIJ,YACE,SACA,gBVDI,2BUEJ,CVEI,sCULN,YVMQ,iBUDN,gCAEE,YVNE,2BUKF,OAEA,CVHE,sEACE,iBWpBR,sEAME,kBAGF,iBACE,mBCwBE,uBA/BF,gBACA,mCAFA,oCADA,sBAqCI,WAHA,qBACA,kB7B6hBwB,C6B5hBxB,qBAjCJ,CA0DE,6BACE,cD9CN,eAEE,0BACA,8BACA,0BACA,+BACA,8B/BuQI,4BALI,C+BhQR,yCACA,mCACA,8DACA,oDACA,kDACA,yFACA,4DACA,sCACA,8CACA,8CACA,oDACA,qDACA,qCACA,sDACA,2DACA,kCACA,qCACA,mCACA,oCACA,sCAcA,4BADA,uCAEA,6E3BzCE,+C2BoCF,+BALA,a/B6OI,sCALI,C+BjOR,gBAJA,SAFA,uCACA,kEAJA,kBAQA,gBAPA,iC3B9BE,C2B6CF,+BAEE,OACA,qCAFA,QAEA,CAwBA,qBACE,mBAAoB,CAEpB,qCAEE,MAAK,CADL,UACA,C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AEE,mBAAkB,CADlB,kDACA,CAEA,mEAEE,oDADA,sDACA,EhCtFR,yBgC8DA,0BACE,mBAGE,wExCvDJ,6DAZA,0BwCwEI,wExC5DJ,2BAA0B,CAZ1B,0DAYA,CwCiEI,kDACE,aAGF,4DAEE,mBAAkB,CADlB,kDACA,CAEA,mEAEE,oDADA,sDACA,EAcZ,kBxChJI,gBwCmJF,mCACE,mDAEA,8CACE,sBAaJ,yBACE,sDACA,+CACA,6DACA,4DACA,gEACA,6DACA,iEACA,yDACA,0DACA,oEAVF,2BACE,wDACA,iDACA,+DACA,4DACA,kEACA,6DACA,mEACA,2DACA,4DACA,sEAVF,yBACE,sDACA,+CACA,6DACA,4DACA,gEACA,6DACA,iEACA,yDACA,0DACA,oEAVF,sBACE,mDACA,4CACA,0DACA,4DACA,6DACA,6DACA,8DACA,sDACA,uDACA,iEAVF,yBACE,sDACA,+CACA,6DACA,4DACA,gEACA,6DACA,iEACA,yDACA,0DACA,oEAVF,wBACE,qDACA,8CACA,4DACA,4DACA,+DACA,6DACA,gEACA,wDACA,yDACA,mEAVF,uBACE,oDACA,6CACA,2DACA,4DACA,8DACA,6DACA,+DACA,uDACA,wDACA,kEAVF,sBACE,mDACA,4CACA,0DACA,4DACA,6DACA,6DACA,8DACA,sDACA,uDACA,iEC5LJ,WAEE,0BACA,oVACA,2BACA,kCACA,oEACA,+BACA,qCACA,uEAQA,wEACA,SzCJE,sByCFF,uBAEA,U1CopD2B,C0C9oD3B,oCALA,cAFA,SAOA,CAGA,4BAPA,+BAUE,CAHF,iBAGE,0CADA,oBACA,CAGF,iBAEE,4CACA,0CAFA,SAEA,CAGF,wCAIE,6CAFA,oBACA,gBACA,CAcA,iDATF,wCCjDF,OAEE,uBACA,6BACA,4BACA,0BACA,2B9CyRI,6BALI,C8ClRR,mBACA,+CACA,+CACA,2DACA,iDACA,2CACA,kDACA,sDACA,kEASA,4BADA,oCAEA,uE1CPE,4C0CQF,sCALA,4B9CyQI,mCALI,C8CtQR,eAGA,oBAJA,+B1CAE,C0CWF,eACE,UAGF,kBACE,aAIJ,iBACE,uBA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","sources":["webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/bootstrap.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_banner.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_root.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/vendor/_rfs.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_color-mode.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_reboot.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_variables.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_border-radius.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_type.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_lists.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/variables/_bootstrap.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_images.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_image.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_containers.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_container.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_grid.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_grid.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_tables.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_table-variants.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_labels.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_form-text.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_form-control.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_transition.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_gradients.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_form-select.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_form-check.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_form-range.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_floating-labels.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_input-group.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_forms.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_buttons.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_buttons.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_transitions.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_dropdown.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_caret.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_button-group.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_nav.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_navbar.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_card.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_accordion.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_breadcrumb.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_pagination.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_pagination.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_badge.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_alert.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_progress.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_list-group.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_close.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_toasts.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_modal.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_backdrop.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_tooltip.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_reset-text.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_popover.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_carousel.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_spinners.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_offcanvas.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_placeholders.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_color-bg.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_colored-links.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_focus-ring.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_icon-link.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_ratio.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_position.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_stacks.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_visually-hidden.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_visually-hidden.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_stretched-link.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_text-truncation.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_vr.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_utilities.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/utilities/_api.scss"],"sourcesContent":["/*!\n * Bootstrap v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */:root,[data-bs-theme=light]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: #052c65;--bs-secondary-text-emphasis: #2b2f32;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #cfe2ff;--bs-secondary-bg-subtle: #e2e3e5;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #9ec5fe;--bs-secondary-border-subtle: #c4c8cb;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb: 33, 37, 41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb: 33, 37, 41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #0d6efd;--bs-link-color-rgb: 13, 110, 253;--bs-link-decoration: underline;--bs-link-hover-color: #0a58ca;--bs-link-hover-color-rgb: 10, 88, 202;--bs-code-color: #d63384;--bs-highlight-color: #212529;--bs-highlight-bg: #fff3cd;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.375rem;--bs-border-radius-sm: 0.25rem;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.1875rem;--bs-focus-ring-opacity: 1;--bs-focus-ring-color: var(--pst-color-accent);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: #6ea8fe;--bs-secondary-text-emphasis: #a7acb1;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #031633;--bs-secondary-bg-subtle: #161719;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #084298;--bs-secondary-border-subtle: #41464b;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #6ea8fe;--bs-link-hover-color: #8bb9fe;--bs-link-color-rgb: 110, 168, 254;--bs-link-hover-color-rgb: 139, 185, 254;--bs-code-color: #e685b5;--bs-highlight-color: #dee2e6;--bs-highlight-bg: #664d03;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: #75b798;--bs-form-valid-border-color: #75b798;--bs-form-invalid-color: #ea868f;--bs-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 540px){.container-sm,.container{max-width:540px}}@media(min-width: 720px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 960px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1400px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 540px;--bs-breakpoint-md: 720px;--bs-breakpoint-lg: 960px;--bs-breakpoint-xl: 1200px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 540px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 720px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 960px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-emphasis-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-emphasis-color);--bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color: var(--bs-emphasis-color);--bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color: var(--bs-emphasis-color);--bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #cfe2ff;--bs-table-border-color: #a6b5cc;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #b5b6b7;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #a7b9b1;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #a6c3ca;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #ccc2a4;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #c6acae;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #c6c7c8;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #4d5154;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 539.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 719.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 959.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + var(--bs-border-width));padding-bottom:calc(0.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + var(--bs-border-width));padding-bottom:calc(0.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + var(--bs-border-width));padding-bottom:calc(0.25rem + var(--bs-border-width));font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .1875rem var(--pst-color-accent)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .1875rem var(--pst-color-accent)}.form-select[multiple],.form-select[size]:not([size=\"1\"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .1875rem var(--pst-color-accent)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\")}.form-range{width:100%;height:1.375rem;padding:0;appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .1875rem var(--pst-color-accent)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .1875rem var(--pst-color-accent)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--bs-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--bs-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:\"\";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width)*-1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-success-rgb), 1)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size=\"1\"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size=\"1\"]{--bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-success-rgb), 1)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .1875rem rgba(var(--bs-success-rgb), 1)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-danger-rgb), 1)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size=\"1\"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size=\"1\"]{--bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-danger-rgb), 1)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .1875rem rgba(var(--bs-danger-rgb), 1)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 0.75rem;--bs-btn-padding-y: 0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.1875rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130, 138, 145;--bs-btn-active-color: #fff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60, 153, 110;--bs-btn-active-color: #fff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11, 172, 204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217, 164, 6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225, 83, 97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66, 70, 73;--bs-btn-active-color: #fff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-primary{--bs-btn-color: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0d6efd;--bs-btn-hover-border-color: #0d6efd;--bs-btn-focus-shadow-rgb: 13, 110, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0d6efd;--bs-btn-active-border-color: #0d6efd;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0d6efd;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0d6efd;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108, 117, 125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25, 135, 84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13, 202, 240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255, 193, 7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220, 53, 69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33, 37, 41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 49, 132, 253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: var(--bs-box-shadow);--bs-dropdown-link-color: var(--bs-body-color);--bs-dropdown-link-hover-color: var(--bs-body-color);--bs-dropdown-link-hover-bg: var(--pst-color-surface);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: var(--pst-color-surface);--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 540px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 720px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 960px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: var(--pst-color-surface);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: var(--pst-color-surface);--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--bs-border-width)*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--bs-border-width)*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .1875rem var(--pst-color-accent)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: var(--bs-border-color);--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25rem;--bs-navbar-toggler-padding-x: 0.75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: 0.1875rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 540px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 720px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 960px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: rgba(255, 255, 255, 0.55);--bs-navbar-hover-color: rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 540px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e\");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e\");--bs-accordion-btn-focus-box-shadow: 0 0 0 0.1875rem var(--pst-color-accent);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:\"\";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}.accordion-flush>.accordion-item>.accordion-collapse{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");--bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: var(--bs-body-bg);--bs-pagination-border-width: var(--bs-border-width);--bs-pagination-border-color: var(--bs-border-color);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: var(--bs-tertiary-bg);--bs-pagination-hover-border-color: var(--bs-border-color);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 0.1875rem var(--pst-color-accent);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #0d6efd;--bs-pagination-active-border-color: #0d6efd;--bs-pagination-disabled-color: var(--bs-secondary-color);--bs-pagination-disabled-bg: var(--bs-secondary-bg);--bs-pagination-disabled-border-color: var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-tertiary-bg);--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: var(--bs-body-bg);--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #0d6efd;--bs-list-group-active-border-color: #0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, \".\") \". \";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 540px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 720px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 960px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.1875rem var(--pst-color-accent);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: ;--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: var(--bs-box-shadow-sm);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin:calc(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.5*var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 540px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 960px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 539.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 719.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 959.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:\"\";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: var(--bs-box-shadow);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:\"\";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:\"\";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\")*/}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\")*/}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 539.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 539.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 539.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 540px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 719.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 719.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 719.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 720px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 959.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 959.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 959.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 960px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin:calc(-0.5*var(--bs-offcanvas-padding-y)) calc(-0.5*var(--bs-offcanvas-padding-x)) calc(-0.5*var(--bs-offcanvas-padding-y)) auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:\"\"}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:\"\"}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 540px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 720px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 960px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--bs-box-shadow) !important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 540px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 720px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 960px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}","@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-` + + + + + + + + +

+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.benchmark package

+ +
+
+ +
+

Contents

+
+ +
+
+
+ + + + +
+ +
+

codes.benchmark package#

+
+

Submodules#

+
+
+

codes.benchmark.bench_fcts module#

+
+
+codes.benchmark.bench_fcts.compare_MAE(metrics, config)#
+

Compare the MAE of different surrogate models over the course of training.

+
+
Parameters:
+
    +
  • metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.compare_UQ(all_metrics, config)#
+

Compare the uncertainty quantification (UQ) metrics of different surrogate models.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.compare_batchsize(all_metrics, config)#
+

Compare the batch size training errors of different surrogate models.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.compare_dynamic_accuracy(metrics, config)#
+

Compare the gradients of different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.compare_extrapolation(all_metrics, config)#
+

Compare the extrapolation errors of different surrogate models.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.compare_inference_time(metrics, config, save=True)#
+

Compare the mean inference time of different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict[str, dict]) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool, optional) – Whether to save the plot. Defaults to True.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.compare_interpolation(all_metrics, config)#
+

Compare the interpolation errors of different surrogate models.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.compare_main_losses(metrics, config)#
+

Compare the training and test losses of the main models for different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.compare_models(metrics, config)#
+
+ +
+
+codes.benchmark.bench_fcts.compare_relative_errors(metrics, config)#
+

Compare the relative errors over time for different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.compare_sparse(all_metrics, config)#
+

Compare the sparse training errors of different surrogate models.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.evaluate_UQ(model, surr_name, test_loader, timesteps, conf, labels=None)#
+

Evaluate the uncertainty quantification (UQ) performance of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • labels (list, optional) – The labels for the chemical species.

  • +
+
+
Returns:
+

A dictionary containing UQ metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_fcts.evaluate_accuracy(model, surr_name, test_loader, conf, labels=None)#
+

Evaluate the accuracy of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • labels (list, optional) – The labels for the chemical species.

  • +
+
+
Returns:
+

A dictionary containing accuracy metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_fcts.evaluate_batchsize(model, surr_name, test_loader, timesteps, conf)#
+

Evaluate the performance of the surrogate model with different batch sizes.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing batch size training metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_fcts.evaluate_compute(model, surr_name, test_loader, conf)#
+

Evaluate the computational resource requirements of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing model complexity metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_fcts.evaluate_dynamic_accuracy(model, surr_name, test_loader, conf, species_names=None)#
+

Evaluate the gradients of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing gradients metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_fcts.evaluate_extrapolation(model, surr_name, test_loader, timesteps, conf)#
+

Evaluate the extrapolation performance of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing extrapolation metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_fcts.evaluate_interpolation(model, surr_name, test_loader, timesteps, conf)#
+

Evaluate the interpolation performance of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing interpolation metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_fcts.evaluate_sparse(model, surr_name, test_loader, timesteps, n_train_samples, conf)#
+

Evaluate the performance of the surrogate model with sparse training data.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • n_train_samples (int) – The number of training samples in the full dataset.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing sparse training metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_fcts.run_benchmark(surr_name, surrogate_class, conf)#
+

Run benchmarks for a given surrogate model.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model to benchmark.

  • +
  • surrogate_class – The class of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing all relevant metrics for the given model.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_fcts.tabular_comparison(all_metrics, config)#
+

Compare the metrics of different surrogate models in a tabular format.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_fcts.time_inference(model, surr_name, test_loader, conf, n_test_samples, n_runs=5)#
+

Time the inference of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • n_test_samples (int) – The number of test samples.

  • +
  • n_runs (int, optional) – Number of times to run the inference for timing.

  • +
+
+
Returns:
+

A dictionary containing timing metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+

codes.benchmark.bench_plots module#

+
+
+codes.benchmark.bench_plots.get_custom_palette(num_colors)#
+

Returns a list of colors sampled from a custom color palette.

+
+
Parameters:
+

num_colors (int) – The number of colors needed.

+
+
Returns:
+

A list of RGBA color tuples.

+
+
Return type:
+

list

+
+
+
+ +
+
+codes.benchmark.bench_plots.inference_time_bar_plot(surrogates, means, stds, config, save=True)#
+

Plot the mean inference time with standard deviation for different surrogate models.

+
+
Parameters:
+
    +
  • surrogates (List[str]) – List of surrogate model names.

  • +
  • means (List[float]) – List of mean inference times for each surrogate model.

  • +
  • stds (List[float]) – List of standard deviation of inference times for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool, optional) – Whether to save the plot. Defaults to True.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.int_ext_sparse(all_metrics, config)#
+

Function to make one comparative plot of the interpolation, extrapolation, and sparse training errors.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_MAE_comparison(MAEs, labels, config, save=True)#
+

Plot the MAE for different surrogate models.

+
+
Parameters:
+
    +
  • MAE (tuple) – Tuple of accuracy arrays for each surrogate model.

  • +
  • labels (tuple) – Tuple of labels for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_MAE_comparison_train_duration(MAEs, labels, train_durations, config, save=True)#
+

Plot the MAE for different surrogate models.

+
+
Parameters:
+
    +
  • MAE (tuple) – Tuple of accuracy arrays for each surrogate model.

  • +
  • labels (tuple) – Tuple of labels for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_average_errors_over_time(surr_name, conf, errors, metrics, timesteps, mode, save=False)#
+

Plot the errors over time for different modes (interpolation, extrapolation, sparse, batchsize).

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • errors (np.ndarray) – Errors array of shape [N_metrics, n_timesteps].

  • +
  • metrics (np.ndarray) – Metrics array of shape [N_metrics].

  • +
  • timesteps (np.ndarray) – Timesteps array.

  • +
  • mode (str) – The mode of evaluation (‘interpolation’, ‘extrapolation’, ‘sparse’, ‘batchsize’).

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_average_uncertainty_over_time(surr_name, conf, errors_time, preds_std, timesteps, save=False)#
+

Plot the average uncertainty over time.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • errors_time (np.ndarray) – Prediction errors over time.

  • +
  • preds_std (np.ndarray) – Standard deviation over time of predictions from the ensemble of models.

  • +
  • timesteps (np.ndarray) – Timesteps array.

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_comparative_dynamic_correlation_heatmaps(gradients, errors, avg_correlations, max_grad, max_err, max_count, config, save=True)#
+

Plot comparative heatmaps of correlation between gradient and prediction errors +for multiple surrogate models.

+
+
Parameters:
+
    +
  • gradients (dict[str, np.ndarray]) – Dictionary of gradients from the ensemble of models.

  • +
  • errors (dict[str, np.ndarray]) – Dictionary of prediction errors.

  • +
  • avg_correlations (dict[str, float]) – Dictionary of average correlations between gradients and prediction errors.

  • +
  • max_grad (dict[str, float]) – Dictionary of maximum gradient values for axis scaling across models.

  • +
  • max_err (dict[str, float]) – Dictionary of maximum error values for axis scaling across models.

  • +
  • max_count (dict[str, float]) – Dictionary of maximum count values for heatmap normalization across models.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool, optional) – Whether to save the plot. Defaults to True.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_comparative_error_correlation_heatmaps(preds_std, errors, avg_correlations, axis_max, max_count, config, save=True)#
+

Plot comparative heatmaps of correlation between predictive uncertainty and prediction errors +for multiple surrogate models.

+
+
Parameters:
+
    +
  • preds_std (dict[str, np.ndarray]) – Dictionary of standard deviation of predictions from the ensemble of models.

  • +
  • errors (dict[str, np.ndarray]) – Dictionary of prediction errors.

  • +
  • avg_correlations (dict[str, float]) – Dictionary of average correlations between gradients and prediction errors.

  • +
  • axis_max (dict[str, float]) – Dictionary of maximum values for axis scaling across models.

  • +
  • max_count (dict[str, float]) – Dictionary of maximum count values for heatmap normalization across models.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool, optional) – Whether to save the plot. Defaults to True.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_dynamic_correlation(surr_name, conf, gradients, errors, save=False)#
+

Plot the correlation between the gradients of the data and the prediction errors.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • gradients (np.ndarray) – The gradients of the data.

  • +
  • errors (np.ndarray) – The prediction errors.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_dynamic_correlation_heatmap(surr_name, conf, preds_std, errors, average_correlation, save=False, threshold_factor=0.0001, xcut_percent=0.003)#
+

Plot the correlation between predictive uncertainty and prediction errors using a heatmap.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • preds_std (np.ndarray) – Standard deviation of predictions from the ensemble of models.

  • +
  • errors (np.ndarray) – Prediction errors.

  • +
  • average_correlation (float) – The average correlation between gradients and prediction errors (pearson correlation).

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
  • threshold_factor (float, optional) – Fraction of max value below which cells are set to 0. Default is 5e-5.

  • +
  • cutoff_percent (float, optional) – The percentage of total counts to include in the heatmap. Default is 0.95.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_error_correlation_heatmap(surr_name, conf, preds_std, errors, average_correlation, save=False, threshold_factor=0.01)#
+

Plot the correlation between predictive uncertainty and prediction errors using a heatmap.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • preds_std (np.ndarray) – Standard deviation of predictions from the ensemble of models.

  • +
  • errors (np.ndarray) – Prediction errors.

  • +
  • average_correlation (float) – The average correlation between gradients and prediction errors (pearson correlation).

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
  • threshold_factor (float, optional) – Fraction of max value below which cells are set to 0. Default is 0.001.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_error_distribution_comparative(errors, conf, save=True)#
+

Plot the comparative distribution of errors for each surrogate model as a smoothed histogram plot.

+
+
Parameters:
+
    +
  • conf (dict) – The configuration dictionary.

  • +
  • errors (dict) – Dictionary containing numpy arrays of shape [num_samples, num_timesteps, num_chemicals] for each model.

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_error_distribution_per_chemical(surr_name, conf, errors, chemical_names=None, num_chemicals=10, save=True)#
+

Plot the distribution of errors for each chemical as a smoothed histogram plot.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • errors (np.ndarray) – Errors array of shape [num_samples, num_timesteps, num_chemicals].

  • +
  • chemical_names (list, optional) – List of chemical names for labeling the lines.

  • +
  • num_chemicals (int, optional) – Number of chemicals to plot. Default is 10.

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_example_predictions_with_uncertainty(surr_name, conf, preds_mean, preds_std, targets, timesteps, example_idx=0, num_chemicals=100, labels=None, save=False)#
+

Plot example predictions with uncertainty.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • preds_mean (np.ndarray) – Mean predictions from the ensemble of models.

  • +
  • preds_std (np.ndarray) – Standard deviation of predictions from the ensemble of models.

  • +
  • targets (np.ndarray) – True targets.

  • +
  • timesteps (np.ndarray) – Timesteps array.

  • +
  • example_idx (int, optional) – Index of the example to plot. Default is 0.

  • +
  • num_chemicals (int, optional) – Number of chemicals to plot. Default is 100.

  • +
  • labels (list, optional) – List of labels for the chemicals.

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_generalization_error_comparison(surrogates, metrics_list, model_errors_list, xlabel, filename, config, save=True, xlog=False)#
+

Plot the generalization errors of different surrogate models.

+
+
Parameters:
+
    +
  • surrogates (list) – List of surrogate model names.

  • +
  • metrics_list (list[np.array]) – List of numpy arrays containing the metrics for each surrogate model.

  • +
  • model_errors_list (list[np.array]) – List of numpy arrays containing the errors for each surrogate model.

  • +
  • xlabel (str) – Label for the x-axis.

  • +
  • filename (str) – Filename to save the plot.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
  • xlog (bool) – Whether to use a log scale for the x-axis.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_generalization_errors(surr_name, conf, metrics, model_errors, mode, save=False)#
+

Plot the generalization errors of a model for various metrics.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • metrics (np.ndarray) – The metrics (e.g., intervals, cutoffs, batch sizes, number of training samples).

  • +
  • model_errors (np.ndarray) – The model errors.

  • +
  • mode (str) – The mode of generalization (“interpolation”, “extrapolation”, “sparse”, “batchsize”).

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_loss_comparison(train_losses, test_losses, labels, config, save=True)#
+

Plot the training and test losses for different surrogate models.

+
+
Parameters:
+
    +
  • train_losses (tuple) – Tuple of training loss arrays for each surrogate model.

  • +
  • test_losses (tuple) – Tuple of test loss arrays for each surrogate model.

  • +
  • labels (tuple) – Tuple of labels for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_losses(loss_histories, labels, title='Losses', save=False, conf=None, surr_name=None, mode='main')#
+

Plot the loss trajectories for the training of multiple models.

+
+
Parameters:
+
    +
  • loss_histories (tuple[array, ...]) – List of loss history arrays.

  • +
  • labels (tuple[str, ...]) – List of labels for each loss history.

  • +
  • title (str) – Title of the plot.

  • +
  • save (bool) – Whether to save the plot as an image file.

  • +
  • conf (Optional[dict]) – The configuration dictionary.

  • +
  • surr_name (Optional[str]) – The name of the surrogate model.

  • +
  • mode (str) – The mode of the training.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_relative_errors(mean_errors, median_errors, timesteps, config, save=True)#
+

Plot the relative errors over time for different surrogate models.

+
+
Parameters:
+
    +
  • mean_errors (dict) – dictionary containing the mean relative errors for each surrogate model.

  • +
  • median_errors (dict) – dictionary containing the median relative errors for each surrogate model.

  • +
  • timesteps (np.ndarray) – Array of timesteps.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_relative_errors_over_time(surr_name, conf, relative_errors, title, save=False)#
+

Plot the mean and median relative errors over time with shaded regions for +the 50th, 90th, and 99th percentiles.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • relative_errors (np.ndarray) – The relative errors of the model.

  • +
  • title (str) – The title of the plot.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_surr_losses(model, surr_name, conf, timesteps)#
+

Plot the training and test losses for the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_uncertainty_over_time_comparison(uncertainties, absolute_errors, timesteps, config, save=True)#
+

Plot the uncertainty over time for different surrogate models.

+
+
Parameters:
+
    +
  • uncertainties (dict) – Dictionary containing the uncertainties for each surrogate model.

  • +
  • absolute_errors (dict) – Dictionary containing the absolute errors for each surrogate model.

  • +
  • timesteps (np.ndarray) – Array of timesteps.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.plot_uncertainty_vs_errors(surr_name, conf, preds_std, errors, save=False)#
+

Plot the correlation between predictive uncertainty and prediction errors.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • preds_std (np.ndarray) – Standard deviation of predictions from the ensemble of models.

  • +
  • errors (np.ndarray) – Prediction errors.

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.rel_errors_and_uq(metrics, config, save=True)#
+

Create a figure with two subplots: relative errors over time and uncertainty over time for different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict) – Dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.save_plot(plt, filename, conf, surr_name='', dpi=300, base_dir='plots', increase_count=False)#
+

Save the plot to a file, creating necessary directories if they don’t exist.

+
+
Parameters:
+
    +
  • plt (matplotlib.pyplot) – The plot object to save.

  • +
  • filename (str) – The desired filename for the plot.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • dpi (int) – The resolution of the saved plot.

  • +
  • base_dir (str, optional) – The base directory where plots will be saved. Default is “plots”.

  • +
  • increase_count (bool, optional) – Whether to increment the filename count if a file already exists. Default is True.

  • +
+
+
Raises:
+

ValueError – If the configuration dictionary does not contain the required keys.

+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_plots.save_plot_counter(filename, directory, increase_count=True)#
+

Save a plot with an incremented filename if a file with the same name already exists.

+
+
Parameters:
+
    +
  • filename (str) – The desired filename for the plot.

  • +
  • directory (str) – The directory to save the plot in.

  • +
  • increase_count (bool, optional) – Whether to increment the filename count if a file already exists. Default is True.

  • +
+
+
Returns:
+

The full path to the saved plot.

+
+
Return type:
+

str

+
+
+
+ +
+
+

codes.benchmark.bench_utils module#

+
+
+codes.benchmark.bench_utils.check_benchmark(conf)#
+

Check whether there are any configuration issues with the benchmark.

+
+
Parameters:
+

conf (dict) – The configuration dictionary.

+
+
Raises:
+
    +
  • FileNotFoundError – If the training ID directory is missing or if the .yaml file is missing.

  • +
  • ValueError – If the configuration is missing required keys or the values do not match the training configuration.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_utils.check_surrogate(surrogate, conf)#
+

Check whether the required models for the benchmark are present in the expected directories.

+
+
Parameters:
+
    +
  • surrogate (str) – The name of the surrogate model to check.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Raises:
+

FileNotFoundError – If any required models are missing.

+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_utils.clean_metrics(metrics, conf)#
+

Clean the metrics dictionary to remove problematic entries.

+
+
Parameters:
+
    +
  • metrics (dict) – The benchmark metrics.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

The cleaned metrics dictionary.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_utils.convert_dict_to_scientific_notation(d, precision=8)#
+

Convert all numerical values in a dictionary to scientific notation.

+
+
Parameters:
+

d (dict) – The input dictionary.

+
+
Returns:
+

The dictionary with numerical values in scientific notation.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_utils.convert_to_standard_types(data)#
+

Recursively convert data to standard types that can be serialized to YAML.

+
+
Parameters:
+

data – The data to convert.

+
+
Returns:
+

The converted data.

+
+
+
+ +
+
+codes.benchmark.bench_utils.count_trainable_parameters(model)#
+

Count the number of trainable parameters in the model.

+
+
Parameters:
+

model (torch.nn.Module) – The PyTorch model.

+
+
Returns:
+

The number of trainable parameters.

+
+
Return type:
+

int

+
+
+
+ +
+
+codes.benchmark.bench_utils.discard_numpy_entries(d)#
+

Recursively remove dictionary entries that contain NumPy arrays.

+
+
Parameters:
+

d (dict) – The input dictionary.

+
+
Returns:
+

A new dictionary without entries containing NumPy arrays.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_utils.flatten_dict(d, parent_key='', sep=' - ')#
+

Flatten a nested dictionary.

+
+
Parameters:
+
    +
  • d (dict) – The dictionary to flatten.

  • +
  • parent_key (str) – The base key string.

  • +
  • sep (str) – The separator between keys.

  • +
+
+
Returns:
+

Flattened dictionary with composite keys.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_utils.format_seconds(seconds)#
+

Format a duration given in seconds as hh:mm:ss.

+
+
Parameters:
+

seconds (int) – The duration in seconds.

+
+
Returns:
+

The formatted duration string.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.benchmark.bench_utils.format_time(mean_time, std_time)#
+

Format mean and std time consistently in ns, µs, ms, or s.

+
+
Parameters:
+
    +
  • mean_time – The mean time.

  • +
  • std_time – The standard deviation of the time.

  • +
+
+
Returns:
+

The formatted time string.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.benchmark.bench_utils.get_model_config(surr_name, config)#
+

Get the model configuration for a specific surrogate model from the dataset folder. +Returns an empty dictionary if the configuration file is not found.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • config (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

The model configuration dictionary.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_utils.get_required_models_list(surrogate, conf)#
+

Generate a list of required models based on the configuration settings.

+
+
Parameters:
+
    +
  • surrogate (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A list of required model names.

+
+
Return type:
+

list

+
+
+
+ +
+
+codes.benchmark.bench_utils.get_surrogate(surrogate_name)#
+

Check if the surrogate model exists.

+
+
Parameters:
+

surrogate_name (str) – The name of the surrogate model.

+
+
Returns:
+

The surrogate model class if it exists, otherwise None.

+
+
Return type:
+

SurrogateModel | None

+
+
+
+ +
+
+codes.benchmark.bench_utils.load_model(model, training_id, surr_name, model_identifier)#
+

Load a trained surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • training_id (str) – The training identifier.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • model_identifier (str) – The identifier of the model (e.g., ‘main’).

  • +
+
+
Return type:
+

Module

+
+
Returns:
+

The loaded surrogate model.

+
+
+
+ +
+
+codes.benchmark.bench_utils.make_comparison_csv(metrics, config)#
+

Generate a CSV file comparing metrics for different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict) – Dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.bench_utils.measure_memory_footprint(model, inputs)#
+

Measure the memory footprint of the model during the forward and backward pass.

+
+
Parameters:
+
    +
  • model (torch.nn.Module) – The PyTorch model.

  • +
  • inputs (tuple) – The input data for the model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
+
+
Returns:
+

A dictionary containing memory footprint measurements.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_utils.read_yaml_config(config_path)#
+

Read the YAML configuration file.

+
+
Parameters:
+

config_path (str) – Path to the YAML configuration file.

+
+
Returns:
+

The configuration dictionary.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.bench_utils.write_metrics_to_yaml(surr_name, conf, metrics)#
+

Write the benchmark metrics to a YAML file.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • metrics (dict) – The benchmark metrics.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+

Module contents#

+
+
+codes.benchmark.check_benchmark(conf)#
+

Check whether there are any configuration issues with the benchmark.

+
+
Parameters:
+

conf (dict) – The configuration dictionary.

+
+
Raises:
+
    +
  • FileNotFoundError – If the training ID directory is missing or if the .yaml file is missing.

  • +
  • ValueError – If the configuration is missing required keys or the values do not match the training configuration.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.check_surrogate(surrogate, conf)#
+

Check whether the required models for the benchmark are present in the expected directories.

+
+
Parameters:
+
    +
  • surrogate (str) – The name of the surrogate model to check.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Raises:
+

FileNotFoundError – If any required models are missing.

+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.clean_metrics(metrics, conf)#
+

Clean the metrics dictionary to remove problematic entries.

+
+
Parameters:
+
    +
  • metrics (dict) – The benchmark metrics.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

The cleaned metrics dictionary.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.compare_MAE(metrics, config)#
+

Compare the MAE of different surrogate models over the course of training.

+
+
Parameters:
+
    +
  • metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.compare_UQ(all_metrics, config)#
+

Compare the uncertainty quantification (UQ) metrics of different surrogate models.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.compare_batchsize(all_metrics, config)#
+

Compare the batch size training errors of different surrogate models.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.compare_dynamic_accuracy(metrics, config)#
+

Compare the gradients of different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.compare_extrapolation(all_metrics, config)#
+

Compare the extrapolation errors of different surrogate models.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.compare_inference_time(metrics, config, save=True)#
+

Compare the mean inference time of different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict[str, dict]) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool, optional) – Whether to save the plot. Defaults to True.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.compare_interpolation(all_metrics, config)#
+

Compare the interpolation errors of different surrogate models.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.compare_main_losses(metrics, config)#
+

Compare the training and test losses of the main models for different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.compare_models(metrics, config)#
+
+ +
+
+codes.benchmark.compare_relative_errors(metrics, config)#
+

Compare the relative errors over time for different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.compare_sparse(all_metrics, config)#
+

Compare the sparse training errors of different surrogate models.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.convert_dict_to_scientific_notation(d, precision=8)#
+

Convert all numerical values in a dictionary to scientific notation.

+
+
Parameters:
+

d (dict) – The input dictionary.

+
+
Returns:
+

The dictionary with numerical values in scientific notation.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.convert_to_standard_types(data)#
+

Recursively convert data to standard types that can be serialized to YAML.

+
+
Parameters:
+

data – The data to convert.

+
+
Returns:
+

The converted data.

+
+
+
+ +
+
+codes.benchmark.count_trainable_parameters(model)#
+

Count the number of trainable parameters in the model.

+
+
Parameters:
+

model (torch.nn.Module) – The PyTorch model.

+
+
Returns:
+

The number of trainable parameters.

+
+
Return type:
+

int

+
+
+
+ +
+
+codes.benchmark.discard_numpy_entries(d)#
+

Recursively remove dictionary entries that contain NumPy arrays.

+
+
Parameters:
+

d (dict) – The input dictionary.

+
+
Returns:
+

A new dictionary without entries containing NumPy arrays.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.evaluate_UQ(model, surr_name, test_loader, timesteps, conf, labels=None)#
+

Evaluate the uncertainty quantification (UQ) performance of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • labels (list, optional) – The labels for the chemical species.

  • +
+
+
Returns:
+

A dictionary containing UQ metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.evaluate_accuracy(model, surr_name, test_loader, conf, labels=None)#
+

Evaluate the accuracy of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • labels (list, optional) – The labels for the chemical species.

  • +
+
+
Returns:
+

A dictionary containing accuracy metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.evaluate_batchsize(model, surr_name, test_loader, timesteps, conf)#
+

Evaluate the performance of the surrogate model with different batch sizes.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing batch size training metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.evaluate_compute(model, surr_name, test_loader, conf)#
+

Evaluate the computational resource requirements of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing model complexity metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.evaluate_dynamic_accuracy(model, surr_name, test_loader, conf, species_names=None)#
+

Evaluate the gradients of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing gradients metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.evaluate_extrapolation(model, surr_name, test_loader, timesteps, conf)#
+

Evaluate the extrapolation performance of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing extrapolation metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.evaluate_interpolation(model, surr_name, test_loader, timesteps, conf)#
+

Evaluate the interpolation performance of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing interpolation metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.evaluate_sparse(model, surr_name, test_loader, timesteps, n_train_samples, conf)#
+

Evaluate the performance of the surrogate model with sparse training data.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • n_train_samples (int) – The number of training samples in the full dataset.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing sparse training metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.flatten_dict(d, parent_key='', sep=' - ')#
+

Flatten a nested dictionary.

+
+
Parameters:
+
    +
  • d (dict) – The dictionary to flatten.

  • +
  • parent_key (str) – The base key string.

  • +
  • sep (str) – The separator between keys.

  • +
+
+
Returns:
+

Flattened dictionary with composite keys.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.format_seconds(seconds)#
+

Format a duration given in seconds as hh:mm:ss.

+
+
Parameters:
+

seconds (int) – The duration in seconds.

+
+
Returns:
+

The formatted duration string.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.benchmark.format_time(mean_time, std_time)#
+

Format mean and std time consistently in ns, µs, ms, or s.

+
+
Parameters:
+
    +
  • mean_time – The mean time.

  • +
  • std_time – The standard deviation of the time.

  • +
+
+
Returns:
+

The formatted time string.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.benchmark.get_custom_palette(num_colors)#
+

Returns a list of colors sampled from a custom color palette.

+
+
Parameters:
+

num_colors (int) – The number of colors needed.

+
+
Returns:
+

A list of RGBA color tuples.

+
+
Return type:
+

list

+
+
+
+ +
+
+codes.benchmark.get_model_config(surr_name, config)#
+

Get the model configuration for a specific surrogate model from the dataset folder. +Returns an empty dictionary if the configuration file is not found.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • config (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

The model configuration dictionary.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.get_required_models_list(surrogate, conf)#
+

Generate a list of required models based on the configuration settings.

+
+
Parameters:
+
    +
  • surrogate (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A list of required model names.

+
+
Return type:
+

list

+
+
+
+ +
+
+codes.benchmark.get_surrogate(surrogate_name)#
+

Check if the surrogate model exists.

+
+
Parameters:
+

surrogate_name (str) – The name of the surrogate model.

+
+
Returns:
+

The surrogate model class if it exists, otherwise None.

+
+
Return type:
+

SurrogateModel | None

+
+
+
+ +
+
+codes.benchmark.inference_time_bar_plot(surrogates, means, stds, config, save=True)#
+

Plot the mean inference time with standard deviation for different surrogate models.

+
+
Parameters:
+
    +
  • surrogates (List[str]) – List of surrogate model names.

  • +
  • means (List[float]) – List of mean inference times for each surrogate model.

  • +
  • stds (List[float]) – List of standard deviation of inference times for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool, optional) – Whether to save the plot. Defaults to True.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.int_ext_sparse(all_metrics, config)#
+

Function to make one comparative plot of the interpolation, extrapolation, and sparse training errors.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.load_model(model, training_id, surr_name, model_identifier)#
+

Load a trained surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • training_id (str) – The training identifier.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • model_identifier (str) – The identifier of the model (e.g., ‘main’).

  • +
+
+
Return type:
+

Module

+
+
Returns:
+

The loaded surrogate model.

+
+
+
+ +
+
+codes.benchmark.make_comparison_csv(metrics, config)#
+

Generate a CSV file comparing metrics for different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict) – Dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.measure_memory_footprint(model, inputs)#
+

Measure the memory footprint of the model during the forward and backward pass.

+
+
Parameters:
+
    +
  • model (torch.nn.Module) – The PyTorch model.

  • +
  • inputs (tuple) – The input data for the model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
+
+
Returns:
+

A dictionary containing memory footprint measurements.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.plot_MAE_comparison(MAEs, labels, config, save=True)#
+

Plot the MAE for different surrogate models.

+
+
Parameters:
+
    +
  • MAE (tuple) – Tuple of accuracy arrays for each surrogate model.

  • +
  • labels (tuple) – Tuple of labels for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_MAE_comparison_train_duration(MAEs, labels, train_durations, config, save=True)#
+

Plot the MAE for different surrogate models.

+
+
Parameters:
+
    +
  • MAE (tuple) – Tuple of accuracy arrays for each surrogate model.

  • +
  • labels (tuple) – Tuple of labels for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_average_errors_over_time(surr_name, conf, errors, metrics, timesteps, mode, save=False)#
+

Plot the errors over time for different modes (interpolation, extrapolation, sparse, batchsize).

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • errors (np.ndarray) – Errors array of shape [N_metrics, n_timesteps].

  • +
  • metrics (np.ndarray) – Metrics array of shape [N_metrics].

  • +
  • timesteps (np.ndarray) – Timesteps array.

  • +
  • mode (str) – The mode of evaluation (‘interpolation’, ‘extrapolation’, ‘sparse’, ‘batchsize’).

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_average_uncertainty_over_time(surr_name, conf, errors_time, preds_std, timesteps, save=False)#
+

Plot the average uncertainty over time.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • errors_time (np.ndarray) – Prediction errors over time.

  • +
  • preds_std (np.ndarray) – Standard deviation over time of predictions from the ensemble of models.

  • +
  • timesteps (np.ndarray) – Timesteps array.

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_comparative_dynamic_correlation_heatmaps(gradients, errors, avg_correlations, max_grad, max_err, max_count, config, save=True)#
+

Plot comparative heatmaps of correlation between gradient and prediction errors +for multiple surrogate models.

+
+
Parameters:
+
    +
  • gradients (dict[str, np.ndarray]) – Dictionary of gradients from the ensemble of models.

  • +
  • errors (dict[str, np.ndarray]) – Dictionary of prediction errors.

  • +
  • avg_correlations (dict[str, float]) – Dictionary of average correlations between gradients and prediction errors.

  • +
  • max_grad (dict[str, float]) – Dictionary of maximum gradient values for axis scaling across models.

  • +
  • max_err (dict[str, float]) – Dictionary of maximum error values for axis scaling across models.

  • +
  • max_count (dict[str, float]) – Dictionary of maximum count values for heatmap normalization across models.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool, optional) – Whether to save the plot. Defaults to True.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_comparative_error_correlation_heatmaps(preds_std, errors, avg_correlations, axis_max, max_count, config, save=True)#
+

Plot comparative heatmaps of correlation between predictive uncertainty and prediction errors +for multiple surrogate models.

+
+
Parameters:
+
    +
  • preds_std (dict[str, np.ndarray]) – Dictionary of standard deviation of predictions from the ensemble of models.

  • +
  • errors (dict[str, np.ndarray]) – Dictionary of prediction errors.

  • +
  • avg_correlations (dict[str, float]) – Dictionary of average correlations between gradients and prediction errors.

  • +
  • axis_max (dict[str, float]) – Dictionary of maximum values for axis scaling across models.

  • +
  • max_count (dict[str, float]) – Dictionary of maximum count values for heatmap normalization across models.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool, optional) – Whether to save the plot. Defaults to True.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_dynamic_correlation(surr_name, conf, gradients, errors, save=False)#
+

Plot the correlation between the gradients of the data and the prediction errors.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • gradients (np.ndarray) – The gradients of the data.

  • +
  • errors (np.ndarray) – The prediction errors.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
+
+ +
+
+codes.benchmark.plot_dynamic_correlation_heatmap(surr_name, conf, preds_std, errors, average_correlation, save=False, threshold_factor=0.0001, xcut_percent=0.003)#
+

Plot the correlation between predictive uncertainty and prediction errors using a heatmap.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • preds_std (np.ndarray) – Standard deviation of predictions from the ensemble of models.

  • +
  • errors (np.ndarray) – Prediction errors.

  • +
  • average_correlation (float) – The average correlation between gradients and prediction errors (pearson correlation).

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
  • threshold_factor (float, optional) – Fraction of max value below which cells are set to 0. Default is 5e-5.

  • +
  • cutoff_percent (float, optional) – The percentage of total counts to include in the heatmap. Default is 0.95.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_error_correlation_heatmap(surr_name, conf, preds_std, errors, average_correlation, save=False, threshold_factor=0.01)#
+

Plot the correlation between predictive uncertainty and prediction errors using a heatmap.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • preds_std (np.ndarray) – Standard deviation of predictions from the ensemble of models.

  • +
  • errors (np.ndarray) – Prediction errors.

  • +
  • average_correlation (float) – The average correlation between gradients and prediction errors (pearson correlation).

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
  • threshold_factor (float, optional) – Fraction of max value below which cells are set to 0. Default is 0.001.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_error_distribution_comparative(errors, conf, save=True)#
+

Plot the comparative distribution of errors for each surrogate model as a smoothed histogram plot.

+
+
Parameters:
+
    +
  • conf (dict) – The configuration dictionary.

  • +
  • errors (dict) – Dictionary containing numpy arrays of shape [num_samples, num_timesteps, num_chemicals] for each model.

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_error_distribution_per_chemical(surr_name, conf, errors, chemical_names=None, num_chemicals=10, save=True)#
+

Plot the distribution of errors for each chemical as a smoothed histogram plot.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • errors (np.ndarray) – Errors array of shape [num_samples, num_timesteps, num_chemicals].

  • +
  • chemical_names (list, optional) – List of chemical names for labeling the lines.

  • +
  • num_chemicals (int, optional) – Number of chemicals to plot. Default is 10.

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_example_predictions_with_uncertainty(surr_name, conf, preds_mean, preds_std, targets, timesteps, example_idx=0, num_chemicals=100, labels=None, save=False)#
+

Plot example predictions with uncertainty.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • preds_mean (np.ndarray) – Mean predictions from the ensemble of models.

  • +
  • preds_std (np.ndarray) – Standard deviation of predictions from the ensemble of models.

  • +
  • targets (np.ndarray) – True targets.

  • +
  • timesteps (np.ndarray) – Timesteps array.

  • +
  • example_idx (int, optional) – Index of the example to plot. Default is 0.

  • +
  • num_chemicals (int, optional) – Number of chemicals to plot. Default is 100.

  • +
  • labels (list, optional) – List of labels for the chemicals.

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_generalization_error_comparison(surrogates, metrics_list, model_errors_list, xlabel, filename, config, save=True, xlog=False)#
+

Plot the generalization errors of different surrogate models.

+
+
Parameters:
+
    +
  • surrogates (list) – List of surrogate model names.

  • +
  • metrics_list (list[np.array]) – List of numpy arrays containing the metrics for each surrogate model.

  • +
  • model_errors_list (list[np.array]) – List of numpy arrays containing the errors for each surrogate model.

  • +
  • xlabel (str) – Label for the x-axis.

  • +
  • filename (str) – Filename to save the plot.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
  • xlog (bool) – Whether to use a log scale for the x-axis.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_generalization_errors(surr_name, conf, metrics, model_errors, mode, save=False)#
+

Plot the generalization errors of a model for various metrics.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • metrics (np.ndarray) – The metrics (e.g., intervals, cutoffs, batch sizes, number of training samples).

  • +
  • model_errors (np.ndarray) – The model errors.

  • +
  • mode (str) – The mode of generalization (“interpolation”, “extrapolation”, “sparse”, “batchsize”).

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_loss_comparison(train_losses, test_losses, labels, config, save=True)#
+

Plot the training and test losses for different surrogate models.

+
+
Parameters:
+
    +
  • train_losses (tuple) – Tuple of training loss arrays for each surrogate model.

  • +
  • test_losses (tuple) – Tuple of test loss arrays for each surrogate model.

  • +
  • labels (tuple) – Tuple of labels for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_losses(loss_histories, labels, title='Losses', save=False, conf=None, surr_name=None, mode='main')#
+

Plot the loss trajectories for the training of multiple models.

+
+
Parameters:
+
    +
  • loss_histories (tuple[array, ...]) – List of loss history arrays.

  • +
  • labels (tuple[str, ...]) – List of labels for each loss history.

  • +
  • title (str) – Title of the plot.

  • +
  • save (bool) – Whether to save the plot as an image file.

  • +
  • conf (Optional[dict]) – The configuration dictionary.

  • +
  • surr_name (Optional[str]) – The name of the surrogate model.

  • +
  • mode (str) – The mode of the training.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_relative_errors(mean_errors, median_errors, timesteps, config, save=True)#
+

Plot the relative errors over time for different surrogate models.

+
+
Parameters:
+
    +
  • mean_errors (dict) – dictionary containing the mean relative errors for each surrogate model.

  • +
  • median_errors (dict) – dictionary containing the median relative errors for each surrogate model.

  • +
  • timesteps (np.ndarray) – Array of timesteps.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_relative_errors_over_time(surr_name, conf, relative_errors, title, save=False)#
+

Plot the mean and median relative errors over time with shaded regions for +the 50th, 90th, and 99th percentiles.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • relative_errors (np.ndarray) – The relative errors of the model.

  • +
  • title (str) – The title of the plot.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_surr_losses(model, surr_name, conf, timesteps)#
+

Plot the training and test losses for the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_uncertainty_over_time_comparison(uncertainties, absolute_errors, timesteps, config, save=True)#
+

Plot the uncertainty over time for different surrogate models.

+
+
Parameters:
+
    +
  • uncertainties (dict) – Dictionary containing the uncertainties for each surrogate model.

  • +
  • absolute_errors (dict) – Dictionary containing the absolute errors for each surrogate model.

  • +
  • timesteps (np.ndarray) – Array of timesteps.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.plot_uncertainty_vs_errors(surr_name, conf, preds_std, errors, save=False)#
+

Plot the correlation between predictive uncertainty and prediction errors.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • preds_std (np.ndarray) – Standard deviation of predictions from the ensemble of models.

  • +
  • errors (np.ndarray) – Prediction errors.

  • +
  • save (bool, optional) – Whether to save the plot as a file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.read_yaml_config(config_path)#
+

Read the YAML configuration file.

+
+
Parameters:
+

config_path (str) – Path to the YAML configuration file.

+
+
Returns:
+

The configuration dictionary.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.rel_errors_and_uq(metrics, config, save=True)#
+

Create a figure with two subplots: relative errors over time and uncertainty over time for different surrogate models.

+
+
Parameters:
+
    +
  • metrics (dict) – Dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
  • save (bool) – Whether to save the plot.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.run_benchmark(surr_name, surrogate_class, conf)#
+

Run benchmarks for a given surrogate model.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model to benchmark.

  • +
  • surrogate_class – The class of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
+
+
Returns:
+

A dictionary containing all relevant metrics for the given model.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.save_plot(plt, filename, conf, surr_name='', dpi=300, base_dir='plots', increase_count=False)#
+

Save the plot to a file, creating necessary directories if they don’t exist.

+
+
Parameters:
+
    +
  • plt (matplotlib.pyplot) – The plot object to save.

  • +
  • filename (str) – The desired filename for the plot.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • dpi (int) – The resolution of the saved plot.

  • +
  • base_dir (str, optional) – The base directory where plots will be saved. Default is “plots”.

  • +
  • increase_count (bool, optional) – Whether to increment the filename count if a file already exists. Default is True.

  • +
+
+
Raises:
+

ValueError – If the configuration dictionary does not contain the required keys.

+
+
Return type:
+

None

+
+
+
+ +
+
+codes.benchmark.save_plot_counter(filename, directory, increase_count=True)#
+

Save a plot with an incremented filename if a file with the same name already exists.

+
+
Parameters:
+
    +
  • filename (str) – The desired filename for the plot.

  • +
  • directory (str) – The directory to save the plot in.

  • +
  • increase_count (bool, optional) – Whether to increment the filename count if a file already exists. Default is True.

  • +
+
+
Returns:
+

The full path to the saved plot.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.benchmark.tabular_comparison(all_metrics, config)#
+

Compare the metrics of different surrogate models in a tabular format.

+
+
Parameters:
+
    +
  • all_metrics (dict) – dictionary containing the benchmark metrics for each surrogate model.

  • +
  • config (dict) – Configuration dictionary.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+codes.benchmark.time_inference(model, surr_name, test_loader, conf, n_test_samples, n_runs=5)#
+

Time the inference of the surrogate model.

+
+
Parameters:
+
    +
  • model – Instance of the surrogate model class.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • timesteps (np.ndarray) – The timesteps array.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • n_test_samples (int) – The number of test samples.

  • +
  • n_runs (int, optional) – Number of times to run the inference for timing.

  • +
+
+
Returns:
+

A dictionary containing timing metrics.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.benchmark.write_metrics_to_yaml(surr_name, conf, metrics)#
+

Write the benchmark metrics to a YAML file.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • conf (dict) – The configuration dictionary.

  • +
  • metrics (dict) – The benchmark metrics.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+ + +
+ + + + + + +
+ +
+
+
+ +
+ + + +
+ + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/codes.html b/docs/_build/html/codes.html new file mode 100644 index 0000000..6edaf35 --- /dev/null +++ b/docs/_build/html/codes.html @@ -0,0 +1,847 @@ + + + + + + + + + + + codes package — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes package

+ +
+
+ +
+

Contents

+
+ +
+
+
+ + + + +
+ +
+

codes package#

+
+

Subpackages#

+
+ +
+
+
+

Module contents#

+
+
+ + +
+ + + + + + +
+ +
+
+
+ +
+ + + +
+ + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/codes.surrogates.html b/docs/_build/html/codes.surrogates.html new file mode 100644 index 0000000..0cf2496 --- /dev/null +++ b/docs/_build/html/codes.surrogates.html @@ -0,0 +1,2797 @@ + + + + + + + + + + + codes.surrogates package — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.surrogates package

+ +
+
+ +
+

Contents

+
+ +
+
+
+ + + + +
+ +
+

codes.surrogates package#

+
+

Submodules#

+
+
+

codes.surrogates.surrogate_classes module#

+
+
+

codes.surrogates.surrogates module#

+
+
+class codes.surrogates.surrogates.AbstractSurrogateModel(device=None, n_chemicals=29, n_timesteps=100, config=None)#
+

Bases: ABC, Module

+

Abstract base class for surrogate models. This class implements the basic +structure of a surrogate model and defines the methods that need to be +implemented by the subclasses for it to be compatible with the benchmarking +framework. For more information, see +https://robin-janssen.github.io/CODES-Benchmark/documentation.html#add_model.

+
+
Parameters:
+
    +
  • device (str, optional) – The device to run the model on. Defaults to None.

  • +
  • n_chemicals (int, optional) – The number of chemicals. Defaults to 29.

  • +
  • n_timesteps (int, optional) – The number of timesteps. Defaults to 100.

  • +
  • config (dict, optional) – The configuration dictionary. Defaults to {}.

  • +
+
+
+
+
+train_loss#
+

The training loss.

+
+
Type:
+

float

+
+
+
+ +
+
+test_loss#
+

The test loss.

+
+
Type:
+

float

+
+
+
+ +
+
+MAE#
+

The mean absolute error.

+
+
Type:
+

float

+
+
+
+ +
+
+normalisation#
+

The normalisation parameters.

+
+
Type:
+

dict

+
+
+
+ +
+
+train_duration#
+

The training duration.

+
+
Type:
+

float

+
+
+
+ +
+
+device#
+

The device to run the model on.

+
+
Type:
+

str

+
+
+
+ +
+
+n_chemicals#
+

The number of chemicals.

+
+
Type:
+

int

+
+
+
+ +
+
+n_timesteps#
+

The number of timesteps.

+
+
Type:
+

int

+
+
+
+ +
+
+L1#
+

The L1 loss function.

+
+
Type:
+

nn.L1Loss

+
+
+
+ +
+
+config#
+

The configuration dictionary.

+
+
Type:
+

dict

+
+
+
+ +
+
+forward(inputs
+

Any) -> tuple[Tensor, Tensor]: +Forward pass of the model.

+
+ +
+
+prepare_data(
+

dataset_train: np.ndarray, +dataset_test: np.ndarray | None, +dataset_val: np.ndarray | None, +timesteps: np.ndarray, +batch_size: int, +shuffle: bool,

+
+ +
+
+) -> tuple[DataLoader, DataLoader, DataLoader]
+

Gets the data loaders for training, testing, and validation.

+
+ +
+
+fit(
+

train_loader: DataLoader, +test_loader: DataLoader, +epochs: int | None, +position: int, +description: str,

+
+ +
+
+) -> None
+

Trains the model on the training data. Sets the train_loss and test_loss attributes.

+
+ +
+
+predict(data_loader
+

DataLoader) -> tuple[torch.Tensor, torch.Tensor]: +Evaluates the model on the given data loader.

+
+ +
+
+save(
+

model_name: str, +subfolder: str, +training_id: str, +data_params: dict,

+
+ +
+
+) -> None
+

Saves the model to disk.

+
+ +
+
+load(training_id
+

str, surr_name: str, model_identifier: str) -> None: +Loads a trained surrogate model.

+
+ +
+
+setup_progress_bar(epochs
+

int, position: int, description: str) -> tqdm: +Helper function to set up a progress bar for training.

+
+ +
+
+denormalize(data
+

torch.Tensor) -> torch.Tensor: +Denormalizes the data back to the original scale.

+
+ +
+
+denormalize(data)#
+

Denormalize the data.

+
+
Parameters:
+

data (np.ndarray) – The data to denormalize.

+
+
Returns:
+

The denormalized data.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+abstract fit(train_loader, test_loader, epochs, position, description)#
+

Perform the training of the model. Sets the train_loss and test_loss attributes.

+
+
Parameters:
+
    +
  • train_loader (DataLoader) – The DataLoader object containing the training data.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the testing data.

  • +
  • epochs (int) – The number of epochs to train the model for.

  • +
  • position (int) – The position of the progress bar.

  • +
  • description (str) – The description of the progress bar.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+abstract forward(inputs)#
+

Define the computation performed at every call.

+

Should be overridden by all subclasses. +:rtype: tuple[Tensor, Tensor]

+
+

Note

+

Although the recipe for forward pass needs to be defined within +this function, one should call the Module instance afterwards +instead of this since the former takes care of running the +registered hooks while the latter silently ignores them.

+
+
+ +
+
+load(training_id, surr_name, model_identifier, model_dir=None)#
+

Load a trained surrogate model.

+
+
Parameters:
+
    +
  • training_id (str) – The training identifier.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • model_identifier (str) – The identifier of the model (e.g., ‘main’).

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None. The model is loaded in place.

+
+
+
+ +
+
+predict(data_loader)#
+

Evaluate the model on the given dataloader.

+
+
Parameters:
+

data_loader (DataLoader) – The DataLoader object containing the data the +model is evaluated on.

+
+
Returns:
+

The predictions and targets.

+
+
Return type:
+

tuple[torch.Tensor, torch.Tensor]

+
+
+
+ +
+
+abstract prepare_data(dataset_train, dataset_test, dataset_val, timesteps, batch_size, shuffle)#
+

Prepare the data for training, testing, and validation. This method should +return the DataLoader objects for the training, testing, and validation data.

+
+
Parameters:
+
    +
  • dataset_train (np.ndarray) – The training dataset.

  • +
  • dataset_test (np.ndarray) – The testing dataset.

  • +
  • dataset_val (np.ndarray) – The validation dataset.

  • +
  • timesteps (np.ndarray) – The timesteps.

  • +
  • batch_size (int) – The batch size.

  • +
  • shuffle (bool) – Whether to shuffle the data.

  • +
+
+
Returns:
+

+
The DataLoader objects for the

training, testing, and validation data.

+
+
+

+
+
Return type:
+

tuple[DataLoader, DataLoader, DataLoader]

+
+
+
+ +
+
+save(model_name, base_dir, training_id, data_params)#
+

Save the model to disk.

+
+
Parameters:
+
    +
  • model_name (str) – The name of the model.

  • +
  • subfolder (str) – The subfolder to save the model in.

  • +
  • training_id (str) – The training identifier.

  • +
  • data_params (dict) – The data parameters.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+setup_progress_bar(epochs, position, description)#
+

Helper function to set up a progress bar for training.

+
+
Parameters:
+
    +
  • epochs (int) – The number of epochs.

  • +
  • position (int) – The position of the progress bar.

  • +
  • description (str) – The description of the progress bar.

  • +
+
+
Returns:
+

The progress bar.

+
+
Return type:
+

tqdm

+
+
+
+ +
+ +
+
+

Module contents#

+
+
+class codes.surrogates.AbstractSurrogateModel(device=None, n_chemicals=29, n_timesteps=100, config=None)#
+

Bases: ABC, Module

+

Abstract base class for surrogate models. This class implements the basic +structure of a surrogate model and defines the methods that need to be +implemented by the subclasses for it to be compatible with the benchmarking +framework. For more information, see +https://robin-janssen.github.io/CODES-Benchmark/documentation.html#add_model.

+
+
Parameters:
+
    +
  • device (str, optional) – The device to run the model on. Defaults to None.

  • +
  • n_chemicals (int, optional) – The number of chemicals. Defaults to 29.

  • +
  • n_timesteps (int, optional) – The number of timesteps. Defaults to 100.

  • +
  • config (dict, optional) – The configuration dictionary. Defaults to {}.

  • +
+
+
+
+
+train_loss#
+

The training loss.

+
+
Type:
+

float

+
+
+
+ +
+
+test_loss#
+

The test loss.

+
+
Type:
+

float

+
+
+
+ +
+
+MAE#
+

The mean absolute error.

+
+
Type:
+

float

+
+
+
+ +
+
+normalisation#
+

The normalisation parameters.

+
+
Type:
+

dict

+
+
+
+ +
+
+train_duration#
+

The training duration.

+
+
Type:
+

float

+
+
+
+ +
+
+device#
+

The device to run the model on.

+
+
Type:
+

str

+
+
+
+ +
+
+n_chemicals#
+

The number of chemicals.

+
+
Type:
+

int

+
+
+
+ +
+
+n_timesteps#
+

The number of timesteps.

+
+
Type:
+

int

+
+
+
+ +
+
+L1#
+

The L1 loss function.

+
+
Type:
+

nn.L1Loss

+
+
+
+ +
+
+config#
+

The configuration dictionary.

+
+
Type:
+

dict

+
+
+
+ +
+
+forward(inputs
+

Any) -> tuple[Tensor, Tensor]: +Forward pass of the model.

+
+ +
+
+prepare_data(
+

dataset_train: np.ndarray, +dataset_test: np.ndarray | None, +dataset_val: np.ndarray | None, +timesteps: np.ndarray, +batch_size: int, +shuffle: bool,

+
+ +
+
+) -> tuple[DataLoader, DataLoader, DataLoader]
+

Gets the data loaders for training, testing, and validation.

+
+ +
+
+fit(
+

train_loader: DataLoader, +test_loader: DataLoader, +epochs: int | None, +position: int, +description: str,

+
+ +
+
+) -> None
+

Trains the model on the training data. Sets the train_loss and test_loss attributes.

+
+ +
+
+predict(data_loader
+

DataLoader) -> tuple[torch.Tensor, torch.Tensor]: +Evaluates the model on the given data loader.

+
+ +
+
+save(
+

model_name: str, +subfolder: str, +training_id: str, +data_params: dict,

+
+ +
+
+) -> None
+

Saves the model to disk.

+
+ +
+
+load(training_id
+

str, surr_name: str, model_identifier: str) -> None: +Loads a trained surrogate model.

+
+ +
+
+setup_progress_bar(epochs
+

int, position: int, description: str) -> tqdm: +Helper function to set up a progress bar for training.

+
+ +
+
+denormalize(data
+

torch.Tensor) -> torch.Tensor: +Denormalizes the data back to the original scale.

+
+ +
+
+denormalize(data)#
+

Denormalize the data.

+
+
Parameters:
+

data (np.ndarray) – The data to denormalize.

+
+
Returns:
+

The denormalized data.

+
+
Return type:
+

np.ndarray

+
+
+
+ +
+
+abstract fit(train_loader, test_loader, epochs, position, description)#
+

Perform the training of the model. Sets the train_loss and test_loss attributes.

+
+
Parameters:
+
    +
  • train_loader (DataLoader) – The DataLoader object containing the training data.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the testing data.

  • +
  • epochs (int) – The number of epochs to train the model for.

  • +
  • position (int) – The position of the progress bar.

  • +
  • description (str) – The description of the progress bar.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+abstract forward(inputs)#
+

Define the computation performed at every call.

+

Should be overridden by all subclasses. +:rtype: tuple[Tensor, Tensor]

+
+

Note

+

Although the recipe for forward pass needs to be defined within +this function, one should call the Module instance afterwards +instead of this since the former takes care of running the +registered hooks while the latter silently ignores them.

+
+
+ +
+
+load(training_id, surr_name, model_identifier, model_dir=None)#
+

Load a trained surrogate model.

+
+
Parameters:
+
    +
  • training_id (str) – The training identifier.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
  • model_identifier (str) – The identifier of the model (e.g., ‘main’).

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None. The model is loaded in place.

+
+
+
+ +
+
+predict(data_loader)#
+

Evaluate the model on the given dataloader.

+
+
Parameters:
+

data_loader (DataLoader) – The DataLoader object containing the data the +model is evaluated on.

+
+
Returns:
+

The predictions and targets.

+
+
Return type:
+

tuple[torch.Tensor, torch.Tensor]

+
+
+
+ +
+
+abstract prepare_data(dataset_train, dataset_test, dataset_val, timesteps, batch_size, shuffle)#
+

Prepare the data for training, testing, and validation. This method should +return the DataLoader objects for the training, testing, and validation data.

+
+
Parameters:
+
    +
  • dataset_train (np.ndarray) – The training dataset.

  • +
  • dataset_test (np.ndarray) – The testing dataset.

  • +
  • dataset_val (np.ndarray) – The validation dataset.

  • +
  • timesteps (np.ndarray) – The timesteps.

  • +
  • batch_size (int) – The batch size.

  • +
  • shuffle (bool) – Whether to shuffle the data.

  • +
+
+
Returns:
+

+
The DataLoader objects for the

training, testing, and validation data.

+
+
+

+
+
Return type:
+

tuple[DataLoader, DataLoader, DataLoader]

+
+
+
+ +
+
+save(model_name, base_dir, training_id, data_params)#
+

Save the model to disk.

+
+
Parameters:
+
    +
  • model_name (str) – The name of the model.

  • +
  • subfolder (str) – The subfolder to save the model in.

  • +
  • training_id (str) – The training identifier.

  • +
  • data_params (dict) – The data parameters.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+setup_progress_bar(epochs, position, description)#
+

Helper function to set up a progress bar for training.

+
+
Parameters:
+
    +
  • epochs (int) – The number of epochs.

  • +
  • position (int) – The position of the progress bar.

  • +
  • description (str) – The description of the progress bar.

  • +
+
+
Returns:
+

The progress bar.

+
+
Return type:
+

tqdm

+
+
+
+ +
+ +
+
+class codes.surrogates.BranchNet(input_size, hidden_size, output_size, num_hidden_layers, activation=ReLU())#
+

Bases: Module

+

Class that defines the branch network for the MultiONet model.

+
+
Parameters:
+
    +
  • input_size (int) – The input size for the network.

  • +
  • hidden_size (int) – The number of hidden units in each layer.

  • +
  • output_size (int) – The number of output units.

  • +
  • num_hidden_layers (int) – The number of hidden layers.

  • +
+
+
+
+
+forward(x)#
+

Forward pass for the branch network.

+
+
Parameters:
+

x (torch.Tensor) – The input tensor.

+
+
Return type:
+

Tensor

+
+
+
+ +
+ +
+
+class codes.surrogates.ChemDataset(raw_data, timesteps, device)#
+

Bases: Dataset

+

Dataset class for the latent neural ODE model. The data is +a 3D tensor with dimensions (batch, timesteps, species). The +dataset also returns the timesteps for the data, as they are +requred for the integration.

+
+ +
+
+class codes.surrogates.Decoder(out_features, latent_features=5, width_list=None, activation=ReLU())#
+

Bases: Module

+

The decoder neural network. The decoder is a simple feedforward neural network +the output of which is of a higher dimension than the input. Acts as the approximate +inverse of the encoder.

+
+
+out_features#
+

The number of output features.

+
+
Type:
+

int

+
+
+
+ +
+
+latent_features#
+

The number of latent features.

+
+
Type:
+

int

+
+
+
+ +
+
+width_list#
+

The width of the hidden layers.

+
+
Type:
+

list

+
+
+
+ +
+
+activation#
+

The activation function.

+
+
Type:
+

torch.nn.Module

+
+
+
+ +
+
+mlp#
+

The neural network.

+
+
Type:
+

torch.nn.Sequential

+
+
+
+ +
+
+forward(x)#
+

Perform a forward pass through the neural network. (“Decode” the input)

+
+ +
+
+forward(x)#
+

Perform a forward pass through the neural network.

+
+
Parameters:
+

x (torch.Tensor) – The input tensor.

+
+
Returns:
+

The output of the neural network. (“Decoded” input)

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+ +
+
+class codes.surrogates.Encoder(in_features, latent_features=5, width_list=None, activation=ReLU())#
+

Bases: Module

+

The encoder neural network. The encoder is a simple feedforward neural network +the output of which is of a lower dimension than the input.

+
+
+in_features#
+

The number of input features.

+
+
Type:
+

int

+
+
+
+ +
+
+latent_features#
+

The number of latent features.

+
+
Type:
+

int

+
+
+
+ +
+
+n_hidden#
+

The number of hidden layers.

+
+
Type:
+

int

+
+
+
+ +
+
+width_list#
+

The width of the hidden layers.

+
+
Type:
+

list

+
+
+
+ +
+
+activation#
+

The activation function.

+
+
Type:
+

torch.nn.Module

+
+
+
+ +
+
+mlp#
+

The neural network.

+
+
Type:
+

torch.nn.Sequential

+
+
+
+ +
+
+forward(x)#
+

Perform a forward pass through the neural network. (“Encode” the input)

+
+ +
+
+forward(x)#
+

Perform a forward pass through the neural network.

+
+
Parameters:
+

x (torch.Tensor) – The input tensor.

+
+
Returns:
+

The output of the neural network. (“Encoded” input)

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+ +
+
+class codes.surrogates.FullyConnected(device=None, n_chemicals=29, n_timesteps=100, config=None)#
+

Bases: AbstractSurrogateModel

+
+
+create_dataloader(dataset, timesteps, batch_size, shuffle=False)#
+

Create a DataLoader from a dataset.

+
+
Parameters:
+
    +
  • dataset (np.ndarray) – The dataset.

  • +
  • timesteps (np.ndarray) – The timesteps.

  • +
  • batch_size (int) – The batch size.

  • +
  • shuffle (bool, optional) – Whether to shuffle the data.

  • +
+
+
Returns:
+

The DataLoader object.

+
+
Return type:
+

DataLoader

+
+
+
+ +
+
+epoch(data_loader, criterion, optimizer)#
+

Perform one training epoch.

+
+
Parameters:
+
    +
  • data_loader (DataLoader) – The DataLoader object containing the training data.

  • +
  • criterion (nn.Module) – The loss function.

  • +
  • optimizer (torch.optim.Optimizer) – The optimizer.

  • +
+
+
Returns:
+

The total loss for the training step.

+
+
Return type:
+

float

+
+
+
+ +
+
+fit(train_loader, test_loader, epochs, position=0, description='Training FullyConnected')#
+

Train the FullyConnected model.

+
+
Parameters:
+
    +
  • train_loader (DataLoader) – The DataLoader object containing the training data.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • epochs (int, optional) – The number of epochs to train the model.

  • +
  • position (int) – The position of the progress bar.

  • +
  • description (str) – The description for the progress bar.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None

+
+
+
+ +
+
+forward(inputs)#
+

Forward pass for the FullyConnected model.

+
+
Parameters:
+
    +
  • inputs (tuple[torch.Tensor, torch.Tensor]) – The input tensor and the target tensor.

  • +
  • Note – The targets are not used in the forward pass but are included for compatibility with the DataLoader.

  • +
  • timesteps (np.ndarray, optional) – The timesteps array.

  • +
  • Note – The timesteps are not used in the forward pass but are included for compatibility with the benchmarking code.

  • +
+
+
Returns:
+

Output tensor of the model.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+
+prepare_data(dataset_train, dataset_test, dataset_val, timesteps, batch_size, shuffle=True)#
+

Prepare the data for the predict or fit methods. +Note: All datasets must have shape (n_samples, n_timesteps, n_chemicals).

+
+
Parameters:
+
    +
  • dataset_train (np.ndarray) – The training data.

  • +
  • dataset_test (np.ndarray) – The test data.

  • +
  • dataset_val (np.ndarray, optional) – The validation data.

  • +
  • timesteps (np.ndarray) – The timesteps.

  • +
  • batch_size (int, optional) – The batch size.

  • +
  • shuffle (bool, optional) – Whether to shuffle the data.

  • +
+
+
Returns:
+

The training, test, and validation DataLoaders.

+
+
Return type:
+

tuple

+
+
+
+ +
+
+setup_optimizer_and_scheduler(epochs)#
+

Utility function to set up the optimizer and scheduler for training.

+
+
Parameters:
+

epochs (int) – The number of epochs to train the model.

+
+
Returns:
+

The optimizer and scheduler.

+
+
Return type:
+

tuple (torch.optim.Optimizer, torch.optim.lr_scheduler._LRScheduler)

+
+
+
+ +
+ +
+
+class codes.surrogates.FullyConnectedNet(input_size, hidden_size, output_size, num_hidden_layers, activation=ReLU())#
+

Bases: Module

+
+
+forward(inputs)#
+

One forward pass through the network.

+
+
Parameters:
+

inputs (torch.Tensor) – The input tensor.

+
+
Returns:
+

The output tensor of the model.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+ +
+
+class codes.surrogates.LatentNeuralODE(device=None, n_chemicals=29, n_timesteps=100, model_config=None)#
+

Bases: AbstractSurrogateModel

+

LatentNeuralODE is a class that represents a latent neural ordinary differential +equation model. It includes an encoder, decoder, and neural ODE. The integrator is +implemented by the torchode framework.

+
+
+model#
+

The neural network model wrapped in a ModelWrapper object.

+
+
Type:
+

ModelWrapper

+
+
+
+ +
+
+config#
+

The configuration for the model.

+
+
Type:
+

LatentNeuralODEBaseConfig

+
+
+
+ +
+
+forward(inputs)#
+

Takes whatever the dataloader outputs, performs a forward pass +through the model and returns the predictions with the respective targets.

+
+ +
+
+prepare_data(dataset_train, dataset_test, dataset_val, timesteps, batch_size,
+

shuffle): Prepares the data for training by creating a DataLoader object.

+
+ +
+
+fit(train_loader, test_loader, epochs, position, description)#
+

Fits the model to +the training data. Sets the train_loss and test_loss attributes.

+
+ +
+
+fit(train_loader, test_loader, epochs, position=0, description='Training LatentNeuralODE')#
+

Fits the model to the training data. Sets the train_loss and test_loss attributes. +After 10 epochs, the loss weights are renormalized to scale the individual loss terms.

+
+
Parameters:
+
    +
  • train_loader (DataLoader) – The data loader for the training data.

  • +
  • test_loader (DataLoader) – The data loader for the test data.

  • +
  • epochs (int | None) – The number of epochs to train the model. If None, uses the value from the config.

  • +
  • position (int) – The position of the progress bar.

  • +
  • description (str) – The description for the progress bar.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+forward(inputs)#
+

Takes whatever the dataloader outputs, performs a forward pass through the +model and returns the predictions with the respective targets.

+
+
Parameters:
+

inputs (Any) – the data from the dataloader

+
+
Returns:
+

predictions and targets

+
+
Return type:
+

tuple[torch.Tensor, torch.Tensor]

+
+
+
+ +
+
+prepare_data(dataset_train, dataset_test, dataset_val, timesteps, batch_size=128, shuffle=True)#
+

Prepares the data for training by creating a DataLoader object.

+
+
Parameters:
+
    +
  • dataset_train (np.ndarray) – The training dataset.

  • +
  • dataset_test (np.ndarray) – The test dataset.

  • +
  • dataset_val (np.ndarray) – The validation dataset.

  • +
  • timesteps (np.ndarray) – The array of timesteps.

  • +
  • batch_size (int) – The batch size for the DataLoader.

  • +
  • shuffle (bool) – Whether to shuffle the data.

  • +
+
+
Returns:
+

The DataLoader object containing the prepared data.

+
+
Return type:
+

DataLoader

+
+
+
+ +
+ +
+
+class codes.surrogates.LatentPoly(device=None, n_chemicals=29, n_timesteps=100, model_config=None)#
+

Bases: AbstractSurrogateModel

+

LatentPoly class for training a polynomial model on latent space trajectories. +Includes an Encoder, Decoder and learnable Polynomial.

+
+
+config#
+

The configuration for the model.

+
+
Type:
+

LatentPolynomialBaseConfig

+
+
+
+ +
+
+model#
+

The model for the polynomial.

+
+
Type:
+

PolynomialModelWrapper

+
+
+
+ +
+
+device#
+

The device to use for training.

+
+
Type:
+

str

+
+
+
+ +
+
+forward()#
+

Perform a forward pass through the model.

+
+ +
+
+prepare_data()#
+

Prepares the data for training by creating a DataLoader object.

+
+ +
+
+fit()#
+

Fits the model to the training data. Sets the train_loss and test_loss attributes.

+
+ +
+
+fit(train_loader, test_loader, epochs, position=0, description='Training LatentPoly')#
+

Fits the model to the training data. Sets the train_loss and test_loss attributes. +After 10 epochs, the loss weights are renormalized to scale the individual loss terms.

+
+
Parameters:
+
    +
  • train_loader (DataLoader) – The data loader for the training data.

  • +
  • test_loader (DataLoader) – The data loader for the test data.

  • +
  • epochs (int | None) – The number of epochs to train the model. If None, uses the value from the config.

  • +
  • position (int) – The position of the progress bar.

  • +
  • description (str) – The description for the progress bar.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+forward(inputs)#
+

Perform a forward pass through the model.

+
+
Parameters:
+

inputs (torch.Tensor) – The input tensor.

+
+
Returns:
+

predictions and targets

+
+
Return type:
+

tuple[torch.Tensor, torch.Tensor]

+
+
+
+ +
+
+prepare_data(dataset_train, dataset_test, dataset_val, timesteps, batch_size=128, shuffle=True)#
+

Prepares the data for training by creating a DataLoader object.

+
+
Parameters:
+
    +
  • dataset (np.ndarray) – The input dataset.

  • +
  • timesteps (np.ndarray) – The timesteps for the dataset.

  • +
  • batch_size (int | None) – The batch size for the DataLoader. If None, the entire dataset is loaded as a single batch.

  • +
  • shuffle (bool) – Whether to shuffle the data during training.

  • +
+
+
Returns:
+

The DataLoader object containing the prepared data.

+
+
Return type:
+

DataLoader

+
+
+
+ +
+ +
+
+class codes.surrogates.ModelWrapper(config, n_chemicals)#
+

Bases: Module

+

This class wraps the encoder, decoder and ODE term into a single model. It also +provides the integration of the ODE term and the loss calculation.

+
+
+config#
+

The configuration for the model.

+
+
Type:
+

LatentNeuralODEBaseConfig

+
+
+
+ +
+
+loss_weights#
+

The weights for the loss terms.

+
+
Type:
+

list

+
+
+
+ +
+
+encoder#
+

The encoder neural network.

+
+
Type:
+

Encoder

+
+
+
+ +
+
+decoder#
+

The decoder neural network.

+
+
Type:
+

Decoder

+
+
+
+ +
+
+ode#
+

The neural ODE term.

+
+
Type:
+

ODE

+
+
+
+ +
+
+forward(x, t_range)#
+

Performs a forward pass through the model.

+
+ +
+
+renormalize_loss_weights(x_true, x_pred)#
+

Renormalizes the loss weights.

+
+ +
+
+total_loss(x_true, x_pred)#
+

Calculates the total loss.

+
+ +
+
+identity_loss(x)#
+

Calculates the identity loss (encoder -> decoder).

+
+ +
+
+l2_loss(x_true, x_pred)#
+

Calculates the L2 loss.

+
+ +
+
+deriv_loss(x_true, x_pred)#
+

Calculates the derivative loss.

+
+ +
+
+deriv2_loss(x_true, x_pred)#
+

Calculates the second derivative loss.

+
+ +
+
+deriv(x)#
+

Calculates the first derivative.

+
+ +
+
+deriv2(x)#
+

Calculates the second derivative.

+
+ +
+
+classmethod deriv(x)#
+

Calculate the numerical derivative.

+
+
Parameters:
+

x (torch.Tensor) – The input tensor.

+
+
Returns:
+

The numerical derivative.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+
+classmethod deriv2(x)#
+

Calculate the numerical second derivative.

+
+
Parameters:
+

x (torch.Tensor) – The input tensor.

+
+
Returns:
+

The numerical second derivative.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+
+classmethod deriv2_loss(x_true, x_pred)#
+

Difference between the curvature of the predicted and true trajectories.

+
+
Parameters:
+
    +
  • x_true (torch.Tensor) – The true trajectory.

  • +
  • x_pred (torch.Tensor) – The predicted trajectory

  • +
+
+
Returns:
+

The second derivative loss.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+
+classmethod deriv_loss(x_true, x_pred)#
+

Difference between the slopes of the predicted and true trajectories.

+
+
Parameters:
+
    +
  • x_true (torch.Tensor) – The true trajectory.

  • +
  • x_pred (torch.Tensor) – The predicted trajectory

  • +
+
+
Returns:
+

The derivative loss.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+
+forward(x, t_range)#
+

Perform a forward pass through the model. Applies the encoder to the initial state, +then propagates through time in the latent space by integrating the neural ODE term. +Finally, the decoder is applied to the latent state to obtain the predicted trajectory.

+
+
Parameters:
+
    +
  • x (torch.Tensor) – The input tensor.

  • +
  • t_range (torch.Tensor) – The range of timesteps.

  • +
+
+
Returns:
+

The predicted trajectory.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+
+identity_loss(x)#
+

Calculate the identity loss (Encoder -> Decoder).

+
+
Parameters:
+

x (torch.Tensor) – The input tensor.

+
+
Returns:
+

The identity loss.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+
+classmethod l2_loss(x_true, x_pred)#
+

Calculate the L2 loss.

+
+
Parameters:
+
    +
  • x_true (torch.Tensor) – The true trajectory.

  • +
  • x_pred (torch.Tensor) – The predicted trajectory

  • +
+
+
Returns:
+

The L2 loss.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+
+renormalize_loss_weights(x_true, x_pred)#
+

Renormalize the loss weights based on the current loss values so that they are accurately +weighted based on the provided weights. To be used once after a short burn in phase.

+
+
Parameters:
+
    +
  • x_true (torch.Tensor) – The true trajectory.

  • +
  • x_pred (torch.Tensor) – The predicted trajectory

  • +
+
+
+
+ +
+
+total_loss(x_true, x_pred)#
+

Calculate the total loss based on the loss weights.

+
+
Parameters:
+
    +
  • x_true (torch.Tensor) – The true trajectory.

  • +
  • x_pred (torch.Tensor) – The predicted trajectory

  • +
+
+
Returns:
+

The total loss.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+ +
+
+class codes.surrogates.MultiONet(device=None, n_chemicals=29, n_timesteps=100, config=None)#
+

Bases: OperatorNetwork

+

Class that implements the MultiONet model. +It differs from a standard DeepONet in that it has multiple outputs, which are obtained by +splitting the outputs of branch and trunk networks and calculating the scalar product of the splits.

+
+
Parameters:
+
    +
  • device (str, optional) – The device to use for training (e.g., ‘cpu’, ‘cuda:0’).

  • +
  • n_chemicals (int, optional) – The number of chemicals.

  • +
  • n_timesteps (int, optional) – The number of timesteps.

  • +
  • config (dict, optional) – The configuration for the model.

  • +
  • information (The configuration must provide the following)

  • +
  • trunk_input_size (-) – The input size for the trunk network.

  • +
  • hidden_size (-) – The number of hidden units in each layer of the branch and trunk networks.

  • +
  • branch_hidden_layers (-) – The number of hidden layers in the branch network.

  • +
  • trunk_hidden_layers (-) – The number of hidden layers in the trunk network.

  • +
  • output_factor (-) – The factor by which the number of outputs is multiplied.

  • +
  • learning_rate (-) – The learning rate for the optimizer.

  • +
  • schedule (-) – Whether to use a learning rate schedule.

  • +
  • regularization_factor (-) – The regularization factor for the optimizer.

  • +
  • masses (-) – The masses for mass conservation loss.

  • +
  • massloss_factor (-) – The factor for the mass conservation loss.

  • +
+
+
Raises:
+

TypeError – Invalid configuration for MultiONet model.

+
+
+
+
+create_dataloader(data, timesteps, batch_size, shuffle=False)#
+

Create a DataLoader for the given data.

+
+
Parameters:
+
    +
  • data (np.ndarray) – The data to load. Must have shape (n_samples, n_timesteps, n_chemicals).

  • +
  • timesteps (np.ndarray) – The timesteps.

  • +
  • batch_size (int, optional) – The batch size.

  • +
  • shuffle (bool, optional) – Whether to shuffle the data.

  • +
+
+
+
+ +
+
+epoch(data_loader, criterion, optimizer)#
+

Perform one training epoch.

+
+
Parameters:
+
    +
  • data_loader (DataLoader) – The DataLoader object containing the training data.

  • +
  • criterion (nn.Module) – The loss function.

  • +
  • optimizer (torch.optim.Optimizer) – The optimizer.

  • +
+
+
Returns:
+

The total loss for the training step.

+
+
Return type:
+

float

+
+
+
+ +
+
+fit(train_loader, test_loader, epochs, position=0, description='Training DeepONet')#
+

Train the MultiONet model.

+
+
Parameters:
+
    +
  • train_loader (DataLoader) – The DataLoader object containing the training data.

  • +
  • test_loader (DataLoader) – The DataLoader object containing the test data.

  • +
  • epochs (int, optional) – The number of epochs to train the model.

  • +
  • position (int) – The position of the progress bar.

  • +
  • description (str) – The description for the progress bar.

  • +
+
+
Return type:
+

None

+
+
Returns:
+

None. The training loss, test loss, and MAE are stored in the model.

+
+
+
+ +
+
+forward(inputs)#
+

Forward pass for the MultiONet model.

+
+
Parameters:
+

inputs (tuple) – The input tuple containing branch_input, trunk_input, and targets.

+
+
Returns:
+

The model outputs and the targets.

+
+
Return type:
+

tuple

+
+
+
+ +
+
+prepare_data(dataset_train, dataset_test, dataset_val, timesteps, batch_size, shuffle=True)#
+

Prepare the data for the predict or fit methods. +Note: All datasets must have shape (n_samples, n_timesteps, n_chemicals).

+
+
Parameters:
+
    +
  • dataset_train (np.ndarray) – The training data.

  • +
  • dataset_test (np.ndarray) – The test data.

  • +
  • dataset_val (np.ndarray, optional) – The validation data.

  • +
  • timesteps (np.ndarray) – The timesteps.

  • +
  • batch_size (int, optional) – The batch size.

  • +
  • shuffle (bool, optional) – Whether to shuffle the data.

  • +
+
+
Returns:
+

The training, test, and validation DataLoaders.

+
+
Return type:
+

tuple

+
+
+
+ +
+
+setup_criterion()#
+

Utility function to set up the loss function for training.

+
+
Returns:
+

The loss function.

+
+
Return type:
+

callable

+
+
+
+ +
+
+setup_optimizer_and_scheduler(epochs)#
+

Utility function to set up the optimizer and scheduler for training.

+
+
Parameters:
+

epochs (int) – The number of epochs to train the model.

+
+
Returns:
+

The optimizer and scheduler.

+
+
Return type:
+

tuple (torch.optim.Optimizer, torch.optim.lr_scheduler._LRScheduler)

+
+
+
+ +
+ +
+
+class codes.surrogates.ODE(input_shape, output_shape, activation, n_hidden, layer_width, tanh_reg)#
+

Bases: Module

+

The neural ODE term. The term itself is a simple feedforward neural network, +a scaled tanh function is applied to the output if tanh_reg is set to True.

+
+
+tanh_reg#
+

Whether to apply a tanh regularization to the output.

+
+
Type:
+

bool

+
+
+
+ +
+
+reg_factor#
+

The regularization factor.

+
+
Type:
+

torch.Tensor

+
+
+
+ +
+
+activation#
+

The activation function.

+
+
Type:
+

torch.nn.Module

+
+
+
+ +
+
+mlp#
+

The neural network.

+
+
Type:
+

torch.nn.Sequential

+
+
+
+ +
+
+forward(t, x)#
+

Perform a forward pass through the neural network.

+
+ +
+
+forward(t, x)#
+

The forward pass through the neural network.

+
+
Parameters:
+
    +
  • t (torch.Tensor) – The time tensor.

  • +
  • x (torch.Tensor) – The input tensor.

  • +
+
+
Returns:
+

The output of the neural network.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+ +
+
+class codes.surrogates.Polynomial(degree, dimension)#
+

Bases: Module

+

Polynomial class with learnable parameters derived from nn.Module.

+
+
+degree#
+

the degree of the polynomial

+
+
Type:
+

int

+
+
+
+ +
+
+dimension#
+

The dimension of the in- and output variables

+
+
Type:
+

int

+
+
+
+ +
+
+coef#
+

The linear layer for the polynomial coefficients

+
+
Type:
+

nn.Linear

+
+
+
+ +
+
+t_matrix#
+

The matrix of time values

+
+
Type:
+

torch.Tensor

+
+
+
+ +
+
+forward()#
+

Evaluate the polynomial at the given timesteps.

+
+ +
+
+_prepare_t()#
+

Prepare the time values in matrix form for the polynomial.

+
+ +
+
+forward(t)#
+

Evaluate the polynomial at the given timesteps.

+
+
Parameters:
+

t (torch.Tensor) – The input tensor.

+
+
Returns:
+

The evaluated polynomial.

+
+
Return type:
+

torch.Tensor

+
+
+
+ +
+ +
+
+class codes.surrogates.TrunkNet(input_size, hidden_size, output_size, num_hidden_layers, activation=ReLU())#
+

Bases: Module

+

Class that defines the trunk network for the MultiONet model.

+
+
Parameters:
+
    +
  • input_size (int) – The input size for the network.

  • +
  • hidden_size (int) – The number of hidden units in each layer.

  • +
  • output_size (int) – The number of output units.

  • +
  • num_hidden_layers (int) – The number of hidden layers.

  • +
+
+
+
+
+forward(x)#
+

Forward pass for the trunk network.

+
+
Parameters:
+

x (torch.Tensor) – The input tensor.

+
+
Return type:
+

Tensor

+
+
+
+ +
+ +
+
+ + +
+ + + + + + +
+ +
+
+
+ +
+ + + +
+ + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/codes.train.html b/docs/_build/html/codes.train.html new file mode 100644 index 0000000..a1a16b2 --- /dev/null +++ b/docs/_build/html/codes.train.html @@ -0,0 +1,661 @@ + + + + + + + + + + + codes.train package — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + + + + + + +
+ +
+

codes.train package#

+
+

Submodules#

+
+
+

codes.train.train_fcts module#

+
+
+codes.train.train_fcts.create_task_list_for_surrogate(config, surr_name)#
+

Creates a list of training tasks for a specific surrogate model based on the +configuration file.

+
+
Parameters:
+
    +
  • config (dict) – The configuration dictionary taken from the config file.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
+
+
Returns:
+

A list of training tasks for the surrogate model.

+
+
Return type:
+

list

+
+
+
+ +
+
+codes.train.train_fcts.parallel_training(tasks, device_list, task_list_filepath)#
+

Execute the training tasks in parallel on multiple devices.

+
+
Parameters:
+
    +
  • tasks (list) – The list of training tasks.

  • +
  • device_list (list) – The list of devices to use for training.

  • +
  • task_list_filepath (str) – The filepath to the task list file.

  • +
+
+
+
+ +
+
+codes.train.train_fcts.sequential_training(tasks, device_list, task_list_filepath)#
+

Execute the training tasks sequentially on a single device.

+
+
Parameters:
+
    +
  • tasks (list) – The list of training tasks.

  • +
  • device_list (list) – The list of devices to use for training.

  • +
  • task_list_filepath (str) – The filepath to the task list file.

  • +
+
+
+
+ +
+
+codes.train.train_fcts.train_and_save_model(surr_name, mode, metric, training_id, seed=None, epochs=None, device='cpu', position=1)#
+

Train and save a model for a specific benchmark mode. The parameters are determined +by the task(s) which is created from the config file.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • mode (str) – The benchmark mode (e.g. “main”, “interpolation”, “extrapolation”).

  • +
  • metric (int) – The metric for the benchmark mode.

  • +
  • training_id (str) – The training ID for the current training session.

  • +
  • seed (int, optional) – The random seed for the training. Defaults to None.

  • +
  • epochs (int, optional) – The number of epochs for the training. Defaults to None.

  • +
  • device (str, optional) – The device for the training. Defaults to “cpu”.

  • +
  • position (int, optional) – The position of the model in the task list. Defaults to 1.

  • +
+
+
+
+ +
+
+codes.train.train_fcts.worker(task_queue, device, device_idx, overall_progress_bar, task_list_filepath)#
+

Worker function to process tasks from the task queue on the given device.

+
+
Parameters:
+
    +
  • task_queue (Queue) – The task queue containing the training tasks.

  • +
  • device (str) – The device to use for training.

  • +
  • device_idx (int) – The index of the device in the device list.

  • +
  • overall_progress_bar (tqdm) – The overall progress bar for the training.

  • +
  • task_list_filepath (str) – The filepath to the task list file

  • +
+
+
+
+ +
+
+

Module contents#

+
+
+codes.train.create_task_list_for_surrogate(config, surr_name)#
+

Creates a list of training tasks for a specific surrogate model based on the +configuration file.

+
+
Parameters:
+
    +
  • config (dict) – The configuration dictionary taken from the config file.

  • +
  • surr_name (str) – The name of the surrogate model.

  • +
+
+
Returns:
+

A list of training tasks for the surrogate model.

+
+
Return type:
+

list

+
+
+
+ +
+
+codes.train.parallel_training(tasks, device_list, task_list_filepath)#
+

Execute the training tasks in parallel on multiple devices.

+
+
Parameters:
+
    +
  • tasks (list) – The list of training tasks.

  • +
  • device_list (list) – The list of devices to use for training.

  • +
  • task_list_filepath (str) – The filepath to the task list file.

  • +
+
+
+
+ +
+
+codes.train.sequential_training(tasks, device_list, task_list_filepath)#
+

Execute the training tasks sequentially on a single device.

+
+
Parameters:
+
    +
  • tasks (list) – The list of training tasks.

  • +
  • device_list (list) – The list of devices to use for training.

  • +
  • task_list_filepath (str) – The filepath to the task list file.

  • +
+
+
+
+ +
+
+codes.train.train_and_save_model(surr_name, mode, metric, training_id, seed=None, epochs=None, device='cpu', position=1)#
+

Train and save a model for a specific benchmark mode. The parameters are determined +by the task(s) which is created from the config file.

+
+
Parameters:
+
    +
  • surr_name (str) – The name of the surrogate model.

  • +
  • mode (str) – The benchmark mode (e.g. “main”, “interpolation”, “extrapolation”).

  • +
  • metric (int) – The metric for the benchmark mode.

  • +
  • training_id (str) – The training ID for the current training session.

  • +
  • seed (int, optional) – The random seed for the training. Defaults to None.

  • +
  • epochs (int, optional) – The number of epochs for the training. Defaults to None.

  • +
  • device (str, optional) – The device for the training. Defaults to “cpu”.

  • +
  • position (int, optional) – The position of the model in the task list. Defaults to 1.

  • +
+
+
+
+ +
+
+codes.train.worker(task_queue, device, device_idx, overall_progress_bar, task_list_filepath)#
+

Worker function to process tasks from the task queue on the given device.

+
+
Parameters:
+
    +
  • task_queue (Queue) – The task queue containing the training tasks.

  • +
  • device (str) – The device to use for training.

  • +
  • device_idx (int) – The index of the device in the device list.

  • +
  • overall_progress_bar (tqdm) – The overall progress bar for the training.

  • +
  • task_list_filepath (str) – The filepath to the task list file

  • +
+
+
+
+ +
+
+ + +
+ + + + + + +
+ +
+
+
+ +
+ + + + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/codes.utils.html b/docs/_build/html/codes.utils.html new file mode 100644 index 0000000..e4fb3ed --- /dev/null +++ b/docs/_build/html/codes.utils.html @@ -0,0 +1,1193 @@ + + + + + + + + + + + codes.utils package — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + + + + + + +
+ +
+

codes.utils package#

+
+

Submodules#

+
+
+

codes.utils.data_utils module#

+
+
+exception codes.utils.data_utils.DatasetError#
+

Bases: Exception

+

Error for missing data or dataset or if the data shape is incorrect.

+
+ +
+
+codes.utils.data_utils.check_and_load_data(dataset_name, verbose=True, log=True, normalisation_mode='standardise', tolerance=1e-20)#
+

Check the specified dataset and load the data based on the mode (train or test).

+
+
Parameters:
+
    +
  • dataset_name (str) – The name of the dataset.

  • +
  • verbose (bool) – Whether to print information about the loaded data.

  • +
  • log (bool) – Whether to log-transform the data (log10).

  • +
  • normalisation_mode (str) – The normalization mode, either “disable”, “minmax”, or “standardise”.

  • +
  • tolerance (float, optional) – The tolerance value for log-transformation. +Values below this will be set to the tolerance value. Pass None to disable.

  • +
+
+
Returns:
+

Loaded data and timesteps.

+
+
Return type:
+

tuple

+
+
Raises:
+

DatasetError – If the dataset or required data is missing or if the data shape is incorrect.

+
+
+
+ +
+
+codes.utils.data_utils.create_dataset(name, train_data, test_data=None, val_data=None, split=None, timesteps=None, labels=None)#
+

Creates a new dataset in the data directory.

+
+
Parameters:
+
    +
  • name (str) – The name of the dataset.

  • +
  • train_data (np.ndarray | torch.Tensor) – The training data.

  • +
  • test_data (np.ndarray | torch.Tensor, optional) – The test data.

  • +
  • val_data (np.ndarray | torch.Tensor, optional) – The validation data.

  • +
  • tuple (split) – If test_data and val_data are not provided, +train_data can be split into training, test and validation data.

  • +
  • timesteps (np.ndarray | torch.Tensor, optional) – The timesteps array.

  • +
  • labels (list[str], optional) – The labels for the chemicals.

  • +
+
+
Raises:
+
    +
  • FileExistsError – If the dataset already exists.

  • +
  • TypeError – If the train_data is not a numpy array or torch tensor.

  • +
  • ValueError – If the train_data, test_data, and val_data do not have the correct shape.

  • +
+
+
+
+ +
+
+codes.utils.data_utils.create_hdf5_dataset(train_data, test_data, val_data, dataset_name, data_dir='datasets', timesteps=None, labels=None)#
+

Create an HDF5 file for a dataset with train and test data, and optionally timesteps. +Additionally, store metadata about the dataset.

+
+
Parameters:
+
    +
  • train_data (np.ndarray) – The training data array of shape (n_samples, n_timesteps, n_chemicals).

  • +
  • test_data (np.ndarray) – The test data array of shape (n_samples, n_timesteps, n_chemicals).

  • +
  • val_data (np.ndarray) – The validation data array of shape (n_samples, n_timesteps, n_chemicals).

  • +
  • dataset_name (str) – The name of the dataset.

  • +
  • data_dir (str) – The directory to save the dataset in.

  • +
  • timesteps (np.ndarray, optional) – The timesteps array. If None, integer timesteps will be generated.

  • +
  • labels (list[str], optional) – The labels for the chemicals.

  • +
+
+
+
+ +
+
+codes.utils.data_utils.download_data(dataset_name, path=None)#
+

Download the specified dataset if it is not present +:type dataset_name: str +:param dataset_name: The name of the dataset. +:type dataset_name: str +:type path: Optional[str] +:param path: The path to save the dataset. If None, the default data directory is used. +:type path: str, optional

+
+ +
+
+codes.utils.data_utils.get_data_subset(full_train_data, full_test_data, timesteps, mode, metric)#
+

Get the appropriate data subset based on the mode and metric.

+
+
Parameters:
+
    +
  • full_train_data (np.ndarray) – The full training data.

  • +
  • full_test_data (np.ndarray) – The full test data.

  • +
  • timesteps (np.ndarray) – The timesteps.

  • +
  • mode (str) – The benchmark mode (e.g., “accuracy”, “interpolation”, “extrapolation”, “sparse”, “UQ”).

  • +
  • metric (int) – The specific metric for the mode (e.g., interval, cutoff, factor, batch size).

  • +
+
+
Returns:
+

The training data, test data, and timesteps subset.

+
+
Return type:
+

tuple

+
+
+
+ +
+
+codes.utils.data_utils.normalize_data(train_data, test_data=None, val_data=None, mode='standardise')#
+

Normalize the data based on the training data statistics.

+
+
Parameters:
+
    +
  • train_data (np.ndarray) – Training data array.

  • +
  • test_data (np.ndarray, optional) – Test data array.

  • +
  • val_data (np.ndarray, optional) – Validation data array.

  • +
  • mode (str) – Normalization mode, either “minmax” or “standardise”.

  • +
+
+
Returns:
+

Normalized training data, test data, and validation data.

+
+
Return type:
+

tuple

+
+
+
+ +
+
+

codes.utils.utils module#

+
+
+codes.utils.utils.check_training_status(config)#
+

Check if the training is already completed by looking for a completion marker file. +If the training is not complete, compare the configurations and ask for a confirmation if there are differences.

+
+
Parameters:
+

config (dict) – The configuration dictionary.

+
+
Returns:
+

The path to the task list file. +bool: Whether to copy the configuration file.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.utils.utils.create_model_dir(base_dir='.', subfolder='trained', unique_id='')#
+

Create a directory based on a unique identifier inside a specified subfolder of the base directory.

+
+
Parameters:
+
    +
  • base_dir (str) – The base directory where the subfolder and unique directory will be created.

  • +
  • subfolder (str) – The subfolder inside the base directory to include before the unique directory.

  • +
  • unique_id (str) – A unique identifier to be included in the directory name.

  • +
+
+
Returns:
+

The path of the created unique directory within the specified subfolder.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.utils.utils.get_progress_bar(tasks)#
+

Create a progress bar with a specific description.

+
+
Parameters:
+

tasks (list) – The list of tasks to be executed.

+
+
Returns:
+

The created progress bar.

+
+
Return type:
+

tqdm

+
+
+
+ +
+
+codes.utils.utils.load_and_save_config(config_path='config.yaml', save=True)#
+

Load configuration from a YAML file and save a copy to the specified directory.

+
+
Parameters:
+
    +
  • config_path (str) – The path to the configuration YAML file.

  • +
  • save (bool) – Whether to save a copy of the configuration file. Default is True.

  • +
+
+
Returns:
+

The loaded configuration dictionary.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.utils.utils.load_task_list(filepath)#
+

Load a list of tasks from a JSON file.

+
+
Parameters:
+

filepath (str) – The path to the JSON file.

+
+
Returns:
+

The loaded list of tasks

+
+
Return type:
+

list

+
+
+
+ +
+
+codes.utils.utils.make_description(mode, device, metric, surrogate_name)#
+

Create a formatted description for the progress bar that ensures consistent alignment.

+
+
Parameters:
+
    +
  • mode (str) – The benchmark mode (e.g., “accuracy”, “interpolation”, “extrapolation”, “sparse”, “UQ”).

  • +
  • device (str) – The device to use for training (e.g., ‘cuda:0’).

  • +
  • metric (str) – The specific metric for the mode (e.g., interval, cutoff, factor, batch size).

  • +
  • surrogate_name (str) – The name of the surrogate model.

  • +
+
+
Returns:
+

A formatted description string for the progress bar.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.utils.utils.nice_print(message, width=80)#
+

Print a message in a nicely formatted way with a fixed width.

+
+
Parameters:
+
    +
  • message (str) – The message to print.

  • +
  • width (int) – The width of the printed box. Default is 80.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.utils.utils.read_yaml_config(config_path)#
+
+ +
+
+codes.utils.utils.save_task_list(tasks, filepath)#
+

Save a list of tasks to a JSON file.

+
+
Parameters:
+
    +
  • tasks (list) – The list of tasks to save.

  • +
  • filepath (str) – The path to the JSON file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.utils.utils.set_random_seeds(seed)#
+

Set random seeds for reproducibility.

+
+
Parameters:
+

seed (int) – The random seed to set.

+
+
+
+ +
+
+codes.utils.utils.time_execution(func)#
+

Decorator to time the execution of a function and store the duration +as an attribute of the function.

+
+
Parameters:
+

func (callable) – The function to be timed.

+
+
+
+ +
+
+codes.utils.utils.worker_init_fn(worker_id)#
+

Initialize the random seed for each worker in PyTorch DataLoader.

+
+
Parameters:
+

worker_id (int) – The worker ID.

+
+
+
+ +
+
+

Module contents#

+
+
+codes.utils.check_and_load_data(dataset_name, verbose=True, log=True, normalisation_mode='standardise', tolerance=1e-20)#
+

Check the specified dataset and load the data based on the mode (train or test).

+
+
Parameters:
+
    +
  • dataset_name (str) – The name of the dataset.

  • +
  • verbose (bool) – Whether to print information about the loaded data.

  • +
  • log (bool) – Whether to log-transform the data (log10).

  • +
  • normalisation_mode (str) – The normalization mode, either “disable”, “minmax”, or “standardise”.

  • +
  • tolerance (float, optional) – The tolerance value for log-transformation. +Values below this will be set to the tolerance value. Pass None to disable.

  • +
+
+
Returns:
+

Loaded data and timesteps.

+
+
Return type:
+

tuple

+
+
Raises:
+

DatasetError – If the dataset or required data is missing or if the data shape is incorrect.

+
+
+
+ +
+
+codes.utils.check_training_status(config)#
+

Check if the training is already completed by looking for a completion marker file. +If the training is not complete, compare the configurations and ask for a confirmation if there are differences.

+
+
Parameters:
+

config (dict) – The configuration dictionary.

+
+
Returns:
+

The path to the task list file. +bool: Whether to copy the configuration file.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.utils.create_dataset(name, train_data, test_data=None, val_data=None, split=None, timesteps=None, labels=None)#
+

Creates a new dataset in the data directory.

+
+
Parameters:
+
    +
  • name (str) – The name of the dataset.

  • +
  • train_data (np.ndarray | torch.Tensor) – The training data.

  • +
  • test_data (np.ndarray | torch.Tensor, optional) – The test data.

  • +
  • val_data (np.ndarray | torch.Tensor, optional) – The validation data.

  • +
  • tuple (split) – If test_data and val_data are not provided, +train_data can be split into training, test and validation data.

  • +
  • timesteps (np.ndarray | torch.Tensor, optional) – The timesteps array.

  • +
  • labels (list[str], optional) – The labels for the chemicals.

  • +
+
+
Raises:
+
    +
  • FileExistsError – If the dataset already exists.

  • +
  • TypeError – If the train_data is not a numpy array or torch tensor.

  • +
  • ValueError – If the train_data, test_data, and val_data do not have the correct shape.

  • +
+
+
+
+ +
+
+codes.utils.create_hdf5_dataset(train_data, test_data, val_data, dataset_name, data_dir='datasets', timesteps=None, labels=None)#
+

Create an HDF5 file for a dataset with train and test data, and optionally timesteps. +Additionally, store metadata about the dataset.

+
+
Parameters:
+
    +
  • train_data (np.ndarray) – The training data array of shape (n_samples, n_timesteps, n_chemicals).

  • +
  • test_data (np.ndarray) – The test data array of shape (n_samples, n_timesteps, n_chemicals).

  • +
  • val_data (np.ndarray) – The validation data array of shape (n_samples, n_timesteps, n_chemicals).

  • +
  • dataset_name (str) – The name of the dataset.

  • +
  • data_dir (str) – The directory to save the dataset in.

  • +
  • timesteps (np.ndarray, optional) – The timesteps array. If None, integer timesteps will be generated.

  • +
  • labels (list[str], optional) – The labels for the chemicals.

  • +
+
+
+
+ +
+
+codes.utils.create_model_dir(base_dir='.', subfolder='trained', unique_id='')#
+

Create a directory based on a unique identifier inside a specified subfolder of the base directory.

+
+
Parameters:
+
    +
  • base_dir (str) – The base directory where the subfolder and unique directory will be created.

  • +
  • subfolder (str) – The subfolder inside the base directory to include before the unique directory.

  • +
  • unique_id (str) – A unique identifier to be included in the directory name.

  • +
+
+
Returns:
+

The path of the created unique directory within the specified subfolder.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.utils.download_data(dataset_name, path=None)#
+

Download the specified dataset if it is not present +:type dataset_name: str +:param dataset_name: The name of the dataset. +:type dataset_name: str +:type path: Optional[str] +:param path: The path to save the dataset. If None, the default data directory is used. +:type path: str, optional

+
+ +
+
+codes.utils.get_data_subset(full_train_data, full_test_data, timesteps, mode, metric)#
+

Get the appropriate data subset based on the mode and metric.

+
+
Parameters:
+
    +
  • full_train_data (np.ndarray) – The full training data.

  • +
  • full_test_data (np.ndarray) – The full test data.

  • +
  • timesteps (np.ndarray) – The timesteps.

  • +
  • mode (str) – The benchmark mode (e.g., “accuracy”, “interpolation”, “extrapolation”, “sparse”, “UQ”).

  • +
  • metric (int) – The specific metric for the mode (e.g., interval, cutoff, factor, batch size).

  • +
+
+
Returns:
+

The training data, test data, and timesteps subset.

+
+
Return type:
+

tuple

+
+
+
+ +
+
+codes.utils.get_progress_bar(tasks)#
+

Create a progress bar with a specific description.

+
+
Parameters:
+

tasks (list) – The list of tasks to be executed.

+
+
Returns:
+

The created progress bar.

+
+
Return type:
+

tqdm

+
+
+
+ +
+
+codes.utils.load_and_save_config(config_path='config.yaml', save=True)#
+

Load configuration from a YAML file and save a copy to the specified directory.

+
+
Parameters:
+
    +
  • config_path (str) – The path to the configuration YAML file.

  • +
  • save (bool) – Whether to save a copy of the configuration file. Default is True.

  • +
+
+
Returns:
+

The loaded configuration dictionary.

+
+
Return type:
+

dict

+
+
+
+ +
+
+codes.utils.load_task_list(filepath)#
+

Load a list of tasks from a JSON file.

+
+
Parameters:
+

filepath (str) – The path to the JSON file.

+
+
Returns:
+

The loaded list of tasks

+
+
Return type:
+

list

+
+
+
+ +
+
+codes.utils.make_description(mode, device, metric, surrogate_name)#
+

Create a formatted description for the progress bar that ensures consistent alignment.

+
+
Parameters:
+
    +
  • mode (str) – The benchmark mode (e.g., “accuracy”, “interpolation”, “extrapolation”, “sparse”, “UQ”).

  • +
  • device (str) – The device to use for training (e.g., ‘cuda:0’).

  • +
  • metric (str) – The specific metric for the mode (e.g., interval, cutoff, factor, batch size).

  • +
  • surrogate_name (str) – The name of the surrogate model.

  • +
+
+
Returns:
+

A formatted description string for the progress bar.

+
+
Return type:
+

str

+
+
+
+ +
+
+codes.utils.nice_print(message, width=80)#
+

Print a message in a nicely formatted way with a fixed width.

+
+
Parameters:
+
    +
  • message (str) – The message to print.

  • +
  • width (int) – The width of the printed box. Default is 80.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.utils.normalize_data(train_data, test_data=None, val_data=None, mode='standardise')#
+

Normalize the data based on the training data statistics.

+
+
Parameters:
+
    +
  • train_data (np.ndarray) – Training data array.

  • +
  • test_data (np.ndarray, optional) – Test data array.

  • +
  • val_data (np.ndarray, optional) – Validation data array.

  • +
  • mode (str) – Normalization mode, either “minmax” or “standardise”.

  • +
+
+
Returns:
+

Normalized training data, test data, and validation data.

+
+
Return type:
+

tuple

+
+
+
+ +
+
+codes.utils.read_yaml_config(config_path)#
+
+ +
+
+codes.utils.save_task_list(tasks, filepath)#
+

Save a list of tasks to a JSON file.

+
+
Parameters:
+
    +
  • tasks (list) – The list of tasks to save.

  • +
  • filepath (str) – The path to the JSON file.

  • +
+
+
Return type:
+

None

+
+
+
+ +
+
+codes.utils.set_random_seeds(seed)#
+

Set random seeds for reproducibility.

+
+
Parameters:
+

seed (int) – The random seed to set.

+
+
+
+ +
+
+codes.utils.time_execution(func)#
+

Decorator to time the execution of a function and store the duration +as an attribute of the function.

+
+
Parameters:
+

func (callable) – The function to be timed.

+
+
+
+ +
+
+codes.utils.worker_init_fn(worker_id)#
+

Initialize the random seed for each worker in PyTorch DataLoader.

+
+
Parameters:
+

worker_id (int) – The worker ID.

+
+
+
+ +
+
+ + +
+ + + + + + +
+ +
+
+
+ +
+ + + + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.benchmark.bench_fcts.html b/docs/_build/html/docs/source/codes.benchmark.bench_fcts.html new file mode 100644 index 0000000..ffb979a --- /dev/null +++ b/docs/_build/html/docs/source/codes.benchmark.bench_fcts.html @@ -0,0 +1,509 @@ + + + + + + + + + + + codes.benchmark.bench_fcts — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.benchmark.bench_fcts

+ +
+
+ +
+
+
+ + + + +
+ +
+

codes.benchmark.bench_fcts#

+

Functions

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

compare_MAE(metrics, config)

Compare the MAE of different surrogate models over the course of training.

compare_UQ(all_metrics, config)

Compare the uncertainty quantification (UQ) metrics of different surrogate models.

compare_batchsize(all_metrics, config)

Compare the batch size training errors of different surrogate models.

compare_dynamic_accuracy(metrics, config)

Compare the gradients of different surrogate models.

compare_extrapolation(all_metrics, config)

Compare the extrapolation errors of different surrogate models.

compare_inference_time(metrics, config[, save])

Compare the mean inference time of different surrogate models.

compare_interpolation(all_metrics, config)

Compare the interpolation errors of different surrogate models.

compare_main_losses(metrics, config)

Compare the training and test losses of the main models for different surrogate models.

compare_models(metrics, config)

compare_relative_errors(metrics, config)

Compare the relative errors over time for different surrogate models.

compare_sparse(all_metrics, config)

Compare the sparse training errors of different surrogate models.

evaluate_UQ(model, surr_name, test_loader, ...)

Evaluate the uncertainty quantification (UQ) performance of the surrogate model.

evaluate_accuracy(model, surr_name, ...[, ...])

Evaluate the accuracy of the surrogate model.

evaluate_batchsize(model, surr_name, ...)

Evaluate the performance of the surrogate model with different batch sizes.

evaluate_compute(model, surr_name, ...)

Evaluate the computational resource requirements of the surrogate model.

evaluate_dynamic_accuracy(model, surr_name, ...)

Evaluate the gradients of the surrogate model.

evaluate_extrapolation(model, surr_name, ...)

Evaluate the extrapolation performance of the surrogate model.

evaluate_interpolation(model, surr_name, ...)

Evaluate the interpolation performance of the surrogate model.

evaluate_sparse(model, surr_name, ...)

Evaluate the performance of the surrogate model with sparse training data.

run_benchmark(surr_name, surrogate_class, conf)

Run benchmarks for a given surrogate model.

tabular_comparison(all_metrics, config)

Compare the metrics of different surrogate models in a tabular format.

time_inference(model, surr_name, ...[, n_runs])

Time the inference of the surrogate model.

+
+
+ + +
+ + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.benchmark.bench_plots.html b/docs/_build/html/docs/source/codes.benchmark.bench_plots.html new file mode 100644 index 0000000..40b48d0 --- /dev/null +++ b/docs/_build/html/docs/source/codes.benchmark.bench_plots.html @@ -0,0 +1,524 @@ + + + + + + + + + + + codes.benchmark.bench_plots — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.benchmark.bench_plots

+ +
+
+ +
+
+
+ + + + +
+ +
+

codes.benchmark.bench_plots#

+

Functions

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

get_custom_palette(num_colors)

Returns a list of colors sampled from a custom color palette.

inference_time_bar_plot(surrogates, means, ...)

Plot the mean inference time with standard deviation for different surrogate models.

int_ext_sparse(all_metrics, config)

Function to make one comparative plot of the interpolation, extrapolation, and sparse training errors.

plot_MAE_comparison(MAEs, labels, config[, save])

Plot the MAE for different surrogate models.

plot_MAE_comparison_train_duration(MAEs, ...)

Plot the MAE for different surrogate models.

plot_average_errors_over_time(surr_name, ...)

Plot the errors over time for different modes (interpolation, extrapolation, sparse, batchsize).

plot_average_uncertainty_over_time(...[, save])

Plot the average uncertainty over time.

plot_comparative_dynamic_correlation_heatmaps(...)

Plot comparative heatmaps of correlation between gradient and prediction errors for multiple surrogate models.

plot_comparative_error_correlation_heatmaps(...)

Plot comparative heatmaps of correlation between predictive uncertainty and prediction errors for multiple surrogate models.

plot_dynamic_correlation(surr_name, conf, ...)

Plot the correlation between the gradients of the data and the prediction errors.

plot_dynamic_correlation_heatmap(surr_name, ...)

Plot the correlation between predictive uncertainty and prediction errors using a heatmap.

plot_error_correlation_heatmap(surr_name, ...)

Plot the correlation between predictive uncertainty and prediction errors using a heatmap.

plot_error_distribution_comparative(errors, conf)

Plot the comparative distribution of errors for each surrogate model as a smoothed histogram plot.

plot_error_distribution_per_chemical(...[, ...])

Plot the distribution of errors for each chemical as a smoothed histogram plot.

plot_example_predictions_with_uncertainty(...)

Plot example predictions with uncertainty.

plot_generalization_error_comparison(...[, ...])

Plot the generalization errors of different surrogate models.

plot_generalization_errors(surr_name, conf, ...)

Plot the generalization errors of a model for various metrics.

plot_loss_comparison(train_losses, ...[, save])

Plot the training and test losses for different surrogate models.

plot_losses(loss_histories, labels[, title, ...])

Plot the loss trajectories for the training of multiple models.

plot_relative_errors(mean_errors, ...[, save])

Plot the relative errors over time for different surrogate models.

plot_relative_errors_over_time(surr_name, ...)

Plot the mean and median relative errors over time with shaded regions for the 50th, 90th, and 99th percentiles.

plot_surr_losses(model, surr_name, conf, ...)

Plot the training and test losses for the surrogate model.

plot_uncertainty_over_time_comparison(...[, ...])

Plot the uncertainty over time for different surrogate models.

plot_uncertainty_vs_errors(surr_name, conf, ...)

Plot the correlation between predictive uncertainty and prediction errors.

rel_errors_and_uq(metrics, config[, save])

Create a figure with two subplots: relative errors over time and uncertainty over time for different surrogate models.

save_plot(plt, filename, conf[, surr_name, ...])

Save the plot to a file, creating necessary directories if they don't exist.

save_plot_counter(filename, directory[, ...])

Save a plot with an incremented filename if a file with the same name already exists.

+
+
+ + +
+ + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.benchmark.bench_utils.html b/docs/_build/html/docs/source/codes.benchmark.bench_utils.html new file mode 100644 index 0000000..d316bd2 --- /dev/null +++ b/docs/_build/html/docs/source/codes.benchmark.bench_utils.html @@ -0,0 +1,497 @@ + + + + + + + + + + + codes.benchmark.bench_utils — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.benchmark.bench_utils

+ +
+
+ +
+
+
+ + + + +
+ +
+

codes.benchmark.bench_utils#

+

Functions

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

check_benchmark(conf)

Check whether there are any configuration issues with the benchmark.

check_surrogate(surrogate, conf)

Check whether the required models for the benchmark are present in the expected directories.

clean_metrics(metrics, conf)

Clean the metrics dictionary to remove problematic entries.

convert_dict_to_scientific_notation(d[, ...])

Convert all numerical values in a dictionary to scientific notation.

convert_to_standard_types(data)

Recursively convert data to standard types that can be serialized to YAML.

count_trainable_parameters(model)

Count the number of trainable parameters in the model.

discard_numpy_entries(d)

Recursively remove dictionary entries that contain NumPy arrays.

flatten_dict(d[, parent_key, sep])

Flatten a nested dictionary.

format_seconds(seconds)

Format a duration given in seconds as hh:mm:ss.

format_time(mean_time, std_time)

Format mean and std time consistently in ns, µs, ms, or s.

get_model_config(surr_name, config)

Get the model configuration for a specific surrogate model from the dataset folder.

get_required_models_list(surrogate, conf)

Generate a list of required models based on the configuration settings.

get_surrogate(surrogate_name)

Check if the surrogate model exists.

load_model(model, training_id, surr_name, ...)

Load a trained surrogate model.

make_comparison_csv(metrics, config)

Generate a CSV file comparing metrics for different surrogate models.

measure_memory_footprint(model, inputs)

Measure the memory footprint of the model during the forward and backward pass.

read_yaml_config(config_path)

Read the YAML configuration file.

write_metrics_to_yaml(surr_name, conf, metrics)

Write the benchmark metrics to a YAML file.

+
+
+ + +
+ + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.benchmark.html b/docs/_build/html/docs/source/codes.benchmark.html new file mode 100644 index 0000000..26c10c0 --- /dev/null +++ b/docs/_build/html/docs/source/codes.benchmark.html @@ -0,0 +1,452 @@ + + + + + + + + + + + codes.benchmark — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.benchmark

+ +
+
+ +
+
+
+ + + + + + + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.html b/docs/_build/html/docs/source/codes.html new file mode 100644 index 0000000..7f0eab9 --- /dev/null +++ b/docs/_build/html/docs/source/codes.html @@ -0,0 +1,437 @@ + + + + + + + + + + + codes — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes

+ +
+
+ +
+
+
+ + + + + + + + + + + +
+ +
+
+
+ +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.surrogates.html b/docs/_build/html/docs/source/codes.surrogates.html new file mode 100644 index 0000000..e0977e6 --- /dev/null +++ b/docs/_build/html/docs/source/codes.surrogates.html @@ -0,0 +1,449 @@ + + + + + + + + + + + codes.surrogates — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.surrogates

+ +
+
+ +
+
+
+ + + + + + + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.surrogates.surrogate_classes.html b/docs/_build/html/docs/source/codes.surrogates.surrogate_classes.html new file mode 100644 index 0000000..1182431 --- /dev/null +++ b/docs/_build/html/docs/source/codes.surrogates.surrogate_classes.html @@ -0,0 +1,470 @@ + + + + + + + + + + + codes.surrogates.surrogate_classes — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.surrogates.surrogate_classes

+ +
+
+ +
+

Contents

+
+ +
+
+
+ + + + +
+ +
+

codes.surrogates.surrogate_classes#

+
+
+codes.surrogates.surrogate_classes = [<class 'codes.surrogates.DeepONet.deeponet.MultiONet'>, <class 'codes.surrogates.FCNN.fcnn.FullyConnected'>, <class 'codes.surrogates.LatentNeuralODE.latent_neural_ode.LatentNeuralODE'>, <class 'codes.surrogates.LatentPolynomial.latent_poly.LatentPoly'>]#
+

Built-in mutable sequence.

+

If no argument is given, the constructor creates a new empty list. +The argument must be an iterable if specified.

+
+ +
+ + +
+ + + + + + + + +
+ + + +
+ + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.surrogates.surrogates.html b/docs/_build/html/docs/source/codes.surrogates.surrogates.html new file mode 100644 index 0000000..ef9de6b --- /dev/null +++ b/docs/_build/html/docs/source/codes.surrogates.surrogates.html @@ -0,0 +1,446 @@ + + + + + + + + + + + codes.surrogates.surrogates — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.surrogates.surrogates

+ +
+
+ +
+
+
+ + + + +
+ +
+

codes.surrogates.surrogates#

+

Classes

+
+ + + + + +

AbstractSurrogateModel([device, ...])

Abstract base class for surrogate models.

+
+
+ + +
+ + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.train.html b/docs/_build/html/docs/source/codes.train.html new file mode 100644 index 0000000..aca30ac --- /dev/null +++ b/docs/_build/html/docs/source/codes.train.html @@ -0,0 +1,446 @@ + + + + + + + + + + + codes.train — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.train

+ +
+
+ +
+
+
+ + + + +
+ +
+

codes.train#

+

Modules

+
+ + + + + +

train_fcts

+
+
+ + +
+ + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.train.train_fcts.html b/docs/_build/html/docs/source/codes.train.train_fcts.html new file mode 100644 index 0000000..47d917c --- /dev/null +++ b/docs/_build/html/docs/source/codes.train.train_fcts.html @@ -0,0 +1,458 @@ + + + + + + + + + + + codes.train.train_fcts — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.train.train_fcts

+ +
+
+ +
+
+
+ + + + +
+ +
+

codes.train.train_fcts#

+

Functions

+
+ + + + + + + + + + + + + + + + + +

create_task_list_for_surrogate(config, surr_name)

Creates a list of training tasks for a specific surrogate model based on the configuration file.

parallel_training(tasks, device_list, ...)

Execute the training tasks in parallel on multiple devices.

sequential_training(tasks, device_list, ...)

Execute the training tasks sequentially on a single device.

train_and_save_model(surr_name, mode, ...[, ...])

Train and save a model for a specific benchmark mode.

worker(task_queue, device, device_idx, ...)

Worker function to process tasks from the task queue on the given device.

+
+
+ + +
+ + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.utils.data_utils.html b/docs/_build/html/docs/source/codes.utils.data_utils.html new file mode 100644 index 0000000..862c121 --- /dev/null +++ b/docs/_build/html/docs/source/codes.utils.data_utils.html @@ -0,0 +1,470 @@ + + + + + + + + + + + codes.utils.data_utils — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.utils.data_utils

+ +
+
+ +
+
+
+ + + + +
+ +
+

codes.utils.data_utils#

+

Functions

+
+ + + + + + + + + + + + + + + + + + + + +

check_and_load_data(dataset_name[, verbose, ...])

Check the specified dataset and load the data based on the mode (train or test).

create_dataset(name, train_data[, ...])

Creates a new dataset in the data directory.

create_hdf5_dataset(train_data, test_data, ...)

Create an HDF5 file for a dataset with train and test data, and optionally timesteps.

download_data(dataset_name[, path])

Download the specified dataset if it is not present :type dataset_name: str :param dataset_name: The name of the dataset.

get_data_subset(full_train_data, ...)

Get the appropriate data subset based on the mode and metric.

normalize_data(train_data[, test_data, ...])

Normalize the data based on the training data statistics.

+
+

Exceptions

+
+ + + + + +

DatasetError

Error for missing data or dataset or if the data shape is incorrect.

+
+
+ + +
+ + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.utils.html b/docs/_build/html/docs/source/codes.utils.html new file mode 100644 index 0000000..faafd04 --- /dev/null +++ b/docs/_build/html/docs/source/codes.utils.html @@ -0,0 +1,449 @@ + + + + + + + + + + + codes.utils — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.utils

+ +
+
+ +
+
+
+ + + + + + + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/docs/source/codes.utils.utils.html b/docs/_build/html/docs/source/codes.utils.utils.html new file mode 100644 index 0000000..b8a5a62 --- /dev/null +++ b/docs/_build/html/docs/source/codes.utils.utils.html @@ -0,0 +1,469 @@ + + + + + + + + + + + codes.utils.utils — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes.utils.utils

+ +
+
+ +
+
+
+ + + + +
+ +
+

codes.utils.utils#

+

Functions

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

check_training_status(config)

Check if the training is already completed by looking for a completion marker file.

create_model_dir([base_dir, subfolder, ...])

Create a directory based on a unique identifier inside a specified subfolder of the base directory.

get_progress_bar(tasks)

Create a progress bar with a specific description.

load_and_save_config([config_path, save])

Load configuration from a YAML file and save a copy to the specified directory.

load_task_list(filepath)

Load a list of tasks from a JSON file.

make_description(mode, device, metric, ...)

Create a formatted description for the progress bar that ensures consistent alignment.

nice_print(message[, width])

Print a message in a nicely formatted way with a fixed width.

read_yaml_config(config_path)

save_task_list(tasks, filepath)

Save a list of tasks to a JSON file.

set_random_seeds(seed)

Set random seeds for reproducibility.

time_execution(func)

Decorator to time the execution of a function and store the duration as an attribute of the function.

worker_init_fn(worker_id)

Initialize the random seed for each worker in PyTorch DataLoader.

+
+
+ + +
+ + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/favicon-96x96.png b/docs/_build/html/favicon-96x96.png new file mode 100644 index 0000000..f6a6568 Binary files /dev/null and b/docs/_build/html/favicon-96x96.png differ diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html new file mode 100644 index 0000000..06346fa --- /dev/null +++ b/docs/_build/html/genindex.html @@ -0,0 +1,1501 @@ + + + + + + + + + + Index — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

+ +
+
+ +
+
+
+ + + + +
+ + +

Index

+ +
+ _ + | A + | B + | C + | D + | E + | F + | G + | I + | L + | M + | N + | O + | P + | R + | S + | T + | W + +
+

_

+ + +
+ +

A

+ + + +
+ +

B

+ + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

I

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

W

+ + + +
+ + + +
+ + + + + + +
+ +
+
+
+ +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html new file mode 100644 index 0000000..ef4c641 --- /dev/null +++ b/docs/_build/html/index.html @@ -0,0 +1,447 @@ + + + + + + + + + + + CODES API Documentation — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

CODES API Documentation

+ +
+
+ +
+
+
+ + + + + + + + + + + + + +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/modules.html b/docs/_build/html/modules.html new file mode 100644 index 0000000..e1a801a --- /dev/null +++ b/docs/_build/html/modules.html @@ -0,0 +1,458 @@ + + + + + + + + + + + codes — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

codes

+ +
+
+ +
+
+
+ + + + +
+ +
+

codes#

+ +
+ + +
+ + + + + + +
+ +
+
+
+ +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv new file mode 100644 index 0000000..dbea572 Binary files /dev/null and b/docs/_build/html/objects.inv differ diff --git a/docs/_build/html/py-modindex.html b/docs/_build/html/py-modindex.html new file mode 100644 index 0000000..ad03740 --- /dev/null +++ b/docs/_build/html/py-modindex.html @@ -0,0 +1,448 @@ + + + + + + + + + + Python Module Index — CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

+ +
+
+ +
+
+
+ + + + +
+ + +

Python Module Index

+ +
+ c +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ c
+ codes +
    + codes.benchmark +
    + codes.benchmark.bench_fcts +
    + codes.benchmark.bench_plots +
    + codes.benchmark.bench_utils +
    + codes.surrogates +
    + codes.surrogates.surrogate_classes +
    + codes.surrogates.surrogates +
    + codes.train +
    + codes.train.train_fcts +
    + codes.utils +
    + codes.utils.data_utils +
    + codes.utils.utils +
+ + +
+ + + + + + +
+ +
+
+
+ +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html new file mode 100644 index 0000000..86cc7be --- /dev/null +++ b/docs/_build/html/search.html @@ -0,0 +1,385 @@ + + + + + + + + + Search - CODES documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + +
+ +
+ +
+
+ + +
+

Search

+ + + +
+
+ + + + + + +
+ +
+
+
+ +
+ + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js new file mode 100644 index 0000000..402ac07 --- /dev/null +++ b/docs/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"CODES API Documentation": [[18, null]], "Module contents": [[0, "module-codes"], [1, "module-codes.benchmark"], [2, "module-codes.surrogates"], [3, "module-codes.train"], [4, "module-codes.utils"]], "Submodules": [[1, "submodules"], [2, "submodules"], [3, "submodules"], [4, "submodules"]], "Subpackages": [[0, "subpackages"]], "codes": [[5, null], [19, null]], "codes package": [[0, null]], "codes.benchmark": [[6, null]], "codes.benchmark package": [[1, null]], "codes.benchmark.bench_fcts": [[7, null]], "codes.benchmark.bench_fcts module": [[1, "module-codes.benchmark.bench_fcts"]], "codes.benchmark.bench_plots": [[8, null]], "codes.benchmark.bench_plots module": [[1, "module-codes.benchmark.bench_plots"]], "codes.benchmark.bench_utils": [[9, null]], "codes.benchmark.bench_utils module": [[1, "module-codes.benchmark.bench_utils"]], "codes.surrogates": [[10, null]], "codes.surrogates package": [[2, null]], "codes.surrogates.surrogate_classes": [[11, null]], "codes.surrogates.surrogate_classes module": [[2, "module-codes.surrogates.surrogate_classes"]], "codes.surrogates.surrogates": [[12, null]], "codes.surrogates.surrogates module": [[2, "module-codes.surrogates.surrogates"]], "codes.train": [[13, null]], "codes.train package": [[3, null]], "codes.train.train_fcts": [[14, null]], "codes.train.train_fcts module": [[3, "module-codes.train.train_fcts"]], "codes.utils": [[15, null]], "codes.utils package": [[4, null]], "codes.utils.data_utils": [[16, null]], "codes.utils.data_utils module": [[4, "module-codes.utils.data_utils"]], "codes.utils.utils": [[17, null]], "codes.utils.utils module": [[4, "module-codes.utils.utils"]]}, "docnames": ["codes", "codes.benchmark", "codes.surrogates", "codes.train", "codes.utils", "docs/source/codes", "docs/source/codes.benchmark", "docs/source/codes.benchmark.bench_fcts", "docs/source/codes.benchmark.bench_plots", "docs/source/codes.benchmark.bench_utils", "docs/source/codes.surrogates", "docs/source/codes.surrogates.surrogate_classes", "docs/source/codes.surrogates.surrogates", "docs/source/codes.train", "docs/source/codes.train.train_fcts", "docs/source/codes.utils", "docs/source/codes.utils.data_utils", "docs/source/codes.utils.utils", "index", "modules"], "envversion": {"sphinx": 63, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["codes.rst", "codes.benchmark.rst", "codes.surrogates.rst", "codes.train.rst", "codes.utils.rst", "docs/source/codes.rst", "docs/source/codes.benchmark.rst", "docs/source/codes.benchmark.bench_fcts.rst", "docs/source/codes.benchmark.bench_plots.rst", "docs/source/codes.benchmark.bench_utils.rst", "docs/source/codes.surrogates.rst", "docs/source/codes.surrogates.surrogate_classes.rst", "docs/source/codes.surrogates.surrogates.rst", "docs/source/codes.train.rst", "docs/source/codes.train.train_fcts.rst", "docs/source/codes.utils.rst", "docs/source/codes.utils.data_utils.rst", "docs/source/codes.utils.utils.rst", "index.rst", "modules.rst"], "indexentries": {"_prepare_t() (codes.surrogates.polynomial method)": [[2, "codes.surrogates.Polynomial._prepare_t", false]], "abstractsurrogatemodel (class in codes.surrogates)": [[2, "codes.surrogates.AbstractSurrogateModel", false]], "abstractsurrogatemodel (class in codes.surrogates.surrogates)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel", false]], "activation (codes.surrogates.decoder attribute)": [[2, "codes.surrogates.Decoder.activation", false]], "activation (codes.surrogates.encoder attribute)": [[2, "codes.surrogates.Encoder.activation", false]], "activation (codes.surrogates.ode attribute)": [[2, "codes.surrogates.ODE.activation", false]], "branchnet (class in codes.surrogates)": [[2, "codes.surrogates.BranchNet", false]], "check_and_load_data() (in module codes.utils)": [[4, "codes.utils.check_and_load_data", false]], "check_and_load_data() (in module codes.utils.data_utils)": [[4, "codes.utils.data_utils.check_and_load_data", false]], "check_benchmark() (in module codes.benchmark)": [[1, "codes.benchmark.check_benchmark", false]], "check_benchmark() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.check_benchmark", false]], "check_surrogate() (in module codes.benchmark)": [[1, "codes.benchmark.check_surrogate", false]], "check_surrogate() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.check_surrogate", false]], "check_training_status() (in module codes.utils)": [[4, "codes.utils.check_training_status", false]], "check_training_status() (in module codes.utils.utils)": [[4, "codes.utils.utils.check_training_status", false]], "chemdataset (class in codes.surrogates)": [[2, "codes.surrogates.ChemDataset", false]], "clean_metrics() (in module codes.benchmark)": [[1, "codes.benchmark.clean_metrics", false]], "clean_metrics() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.clean_metrics", false]], "codes": [[0, "module-codes", false], [5, "module-codes", false]], "codes.benchmark": [[1, "module-codes.benchmark", false], [6, "module-codes.benchmark", false]], "codes.benchmark.bench_fcts": [[1, "module-codes.benchmark.bench_fcts", false], [7, "module-codes.benchmark.bench_fcts", false]], "codes.benchmark.bench_plots": [[1, "module-codes.benchmark.bench_plots", false], [8, "module-codes.benchmark.bench_plots", false]], "codes.benchmark.bench_utils": [[1, "module-codes.benchmark.bench_utils", false], [9, "module-codes.benchmark.bench_utils", false]], "codes.surrogates": [[2, "module-codes.surrogates", false], [10, "module-codes.surrogates", false]], "codes.surrogates.surrogate_classes": [[2, "module-codes.surrogates.surrogate_classes", false]], "codes.surrogates.surrogates": [[2, "module-codes.surrogates.surrogates", false], [12, "module-codes.surrogates.surrogates", false]], "codes.train": [[3, "module-codes.train", false], [13, "module-codes.train", false]], "codes.train.train_fcts": [[3, "module-codes.train.train_fcts", false], [14, "module-codes.train.train_fcts", false]], "codes.utils": [[4, "module-codes.utils", false], [15, "module-codes.utils", false]], "codes.utils.data_utils": [[4, "module-codes.utils.data_utils", false], [16, "module-codes.utils.data_utils", false]], "codes.utils.utils": [[4, "module-codes.utils.utils", false], [17, "module-codes.utils.utils", false]], "coef (codes.surrogates.polynomial attribute)": [[2, "codes.surrogates.Polynomial.coef", false]], "compare_batchsize() (in module codes.benchmark)": [[1, "codes.benchmark.compare_batchsize", false]], "compare_batchsize() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_batchsize", false]], "compare_dynamic_accuracy() (in module codes.benchmark)": [[1, "codes.benchmark.compare_dynamic_accuracy", false]], "compare_dynamic_accuracy() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_dynamic_accuracy", false]], "compare_extrapolation() (in module codes.benchmark)": [[1, "codes.benchmark.compare_extrapolation", false]], "compare_extrapolation() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_extrapolation", false]], "compare_inference_time() (in module codes.benchmark)": [[1, "codes.benchmark.compare_inference_time", false]], "compare_inference_time() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_inference_time", false]], "compare_interpolation() (in module codes.benchmark)": [[1, "codes.benchmark.compare_interpolation", false]], "compare_interpolation() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_interpolation", false]], "compare_mae() (in module codes.benchmark)": [[1, "codes.benchmark.compare_MAE", false]], "compare_mae() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_MAE", false]], "compare_main_losses() (in module codes.benchmark)": [[1, "codes.benchmark.compare_main_losses", false]], "compare_main_losses() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_main_losses", false]], "compare_models() (in module codes.benchmark)": [[1, "codes.benchmark.compare_models", false]], "compare_models() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_models", false]], "compare_relative_errors() (in module codes.benchmark)": [[1, "codes.benchmark.compare_relative_errors", false]], "compare_relative_errors() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_relative_errors", false]], "compare_sparse() (in module codes.benchmark)": [[1, "codes.benchmark.compare_sparse", false]], "compare_sparse() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_sparse", false]], "compare_uq() (in module codes.benchmark)": [[1, "codes.benchmark.compare_UQ", false]], "compare_uq() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.compare_UQ", false]], "config (codes.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.AbstractSurrogateModel.config", false]], "config (codes.surrogates.latentneuralode attribute)": [[2, "codes.surrogates.LatentNeuralODE.config", false]], "config (codes.surrogates.latentpoly attribute)": [[2, "codes.surrogates.LatentPoly.config", false]], "config (codes.surrogates.modelwrapper attribute)": [[2, "codes.surrogates.ModelWrapper.config", false]], "config (codes.surrogates.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.config", false]], "convert_dict_to_scientific_notation() (in module codes.benchmark)": [[1, "codes.benchmark.convert_dict_to_scientific_notation", false]], "convert_dict_to_scientific_notation() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.convert_dict_to_scientific_notation", false]], "convert_to_standard_types() (in module codes.benchmark)": [[1, "codes.benchmark.convert_to_standard_types", false]], "convert_to_standard_types() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.convert_to_standard_types", false]], "count_trainable_parameters() (in module codes.benchmark)": [[1, "codes.benchmark.count_trainable_parameters", false]], "count_trainable_parameters() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.count_trainable_parameters", false]], "create_dataloader() (codes.surrogates.fullyconnected method)": [[2, "codes.surrogates.FullyConnected.create_dataloader", false]], "create_dataloader() (codes.surrogates.multionet method)": [[2, "codes.surrogates.MultiONet.create_dataloader", false]], "create_dataset() (in module codes.utils)": [[4, "codes.utils.create_dataset", false]], "create_dataset() (in module codes.utils.data_utils)": [[4, "codes.utils.data_utils.create_dataset", false]], "create_hdf5_dataset() (in module codes.utils)": [[4, "codes.utils.create_hdf5_dataset", false]], "create_hdf5_dataset() (in module codes.utils.data_utils)": [[4, "codes.utils.data_utils.create_hdf5_dataset", false]], "create_model_dir() (in module codes.utils)": [[4, "codes.utils.create_model_dir", false]], "create_model_dir() (in module codes.utils.utils)": [[4, "codes.utils.utils.create_model_dir", false]], "create_task_list_for_surrogate() (in module codes.train)": [[3, "codes.train.create_task_list_for_surrogate", false]], "create_task_list_for_surrogate() (in module codes.train.train_fcts)": [[3, "codes.train.train_fcts.create_task_list_for_surrogate", false]], "dataseterror": [[4, "codes.utils.data_utils.DatasetError", false]], "decoder (class in codes.surrogates)": [[2, "codes.surrogates.Decoder", false]], "decoder (codes.surrogates.modelwrapper attribute)": [[2, "codes.surrogates.ModelWrapper.decoder", false]], "degree (codes.surrogates.polynomial attribute)": [[2, "codes.surrogates.Polynomial.degree", false]], "denormalize() (codes.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.AbstractSurrogateModel.denormalize", false]], "denormalize() (codes.surrogates.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.denormalize", false]], "deriv() (codes.surrogates.modelwrapper class method)": [[2, "id7", false]], "deriv() (codes.surrogates.modelwrapper method)": [[2, "codes.surrogates.ModelWrapper.deriv", false]], "deriv2() (codes.surrogates.modelwrapper class method)": [[2, "id8", false]], "deriv2() (codes.surrogates.modelwrapper method)": [[2, "codes.surrogates.ModelWrapper.deriv2", false]], "deriv2_loss() (codes.surrogates.modelwrapper class method)": [[2, "id9", false]], "deriv2_loss() (codes.surrogates.modelwrapper method)": [[2, "codes.surrogates.ModelWrapper.deriv2_loss", false]], "deriv_loss() (codes.surrogates.modelwrapper class method)": [[2, "id10", false]], "deriv_loss() (codes.surrogates.modelwrapper method)": [[2, "codes.surrogates.ModelWrapper.deriv_loss", false]], "device (codes.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.AbstractSurrogateModel.device", false]], "device (codes.surrogates.latentpoly attribute)": [[2, "codes.surrogates.LatentPoly.device", false]], "device (codes.surrogates.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.device", false]], "dimension (codes.surrogates.polynomial attribute)": [[2, "codes.surrogates.Polynomial.dimension", false]], "discard_numpy_entries() (in module codes.benchmark)": [[1, "codes.benchmark.discard_numpy_entries", false]], "discard_numpy_entries() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.discard_numpy_entries", false]], "download_data() (in module codes.utils)": [[4, "codes.utils.download_data", false]], "download_data() (in module codes.utils.data_utils)": [[4, "codes.utils.data_utils.download_data", false]], "encoder (class in codes.surrogates)": [[2, "codes.surrogates.Encoder", false]], "encoder (codes.surrogates.modelwrapper attribute)": [[2, "codes.surrogates.ModelWrapper.encoder", false]], "epoch() (codes.surrogates.fullyconnected method)": [[2, "codes.surrogates.FullyConnected.epoch", false]], "epoch() (codes.surrogates.multionet method)": [[2, "codes.surrogates.MultiONet.epoch", false]], "evaluate_accuracy() (in module codes.benchmark)": [[1, "codes.benchmark.evaluate_accuracy", false]], "evaluate_accuracy() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.evaluate_accuracy", false]], "evaluate_batchsize() (in module codes.benchmark)": [[1, "codes.benchmark.evaluate_batchsize", false]], "evaluate_batchsize() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.evaluate_batchsize", false]], "evaluate_compute() (in module codes.benchmark)": [[1, "codes.benchmark.evaluate_compute", false]], "evaluate_compute() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.evaluate_compute", false]], "evaluate_dynamic_accuracy() (in module codes.benchmark)": [[1, "codes.benchmark.evaluate_dynamic_accuracy", false]], "evaluate_dynamic_accuracy() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.evaluate_dynamic_accuracy", false]], "evaluate_extrapolation() (in module codes.benchmark)": [[1, "codes.benchmark.evaluate_extrapolation", false]], "evaluate_extrapolation() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.evaluate_extrapolation", false]], "evaluate_interpolation() (in module codes.benchmark)": [[1, "codes.benchmark.evaluate_interpolation", false]], "evaluate_interpolation() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.evaluate_interpolation", false]], "evaluate_sparse() (in module codes.benchmark)": [[1, "codes.benchmark.evaluate_sparse", false]], "evaluate_sparse() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.evaluate_sparse", false]], "evaluate_uq() (in module codes.benchmark)": [[1, "codes.benchmark.evaluate_UQ", false]], "evaluate_uq() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.evaluate_UQ", false]], "fit() (codes.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.AbstractSurrogateModel.fit", false]], "fit() (codes.surrogates.fullyconnected method)": [[2, "codes.surrogates.FullyConnected.fit", false]], "fit() (codes.surrogates.latentneuralode method)": [[2, "codes.surrogates.LatentNeuralODE.fit", false], [2, "id2", false]], "fit() (codes.surrogates.latentpoly method)": [[2, "codes.surrogates.LatentPoly.fit", false], [2, "id4", false]], "fit() (codes.surrogates.multionet method)": [[2, "codes.surrogates.MultiONet.fit", false]], "fit() (codes.surrogates.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.fit", false]], "flatten_dict() (in module codes.benchmark)": [[1, "codes.benchmark.flatten_dict", false]], "flatten_dict() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.flatten_dict", false]], "format_seconds() (in module codes.benchmark)": [[1, "codes.benchmark.format_seconds", false]], "format_seconds() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.format_seconds", false]], "format_time() (in module codes.benchmark)": [[1, "codes.benchmark.format_time", false]], "format_time() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.format_time", false]], "forward() (codes.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.AbstractSurrogateModel.forward", false]], "forward() (codes.surrogates.branchnet method)": [[2, "codes.surrogates.BranchNet.forward", false]], "forward() (codes.surrogates.decoder method)": [[2, "codes.surrogates.Decoder.forward", false], [2, "id0", false]], "forward() (codes.surrogates.encoder method)": [[2, "codes.surrogates.Encoder.forward", false], [2, "id1", false]], "forward() (codes.surrogates.fullyconnected method)": [[2, "codes.surrogates.FullyConnected.forward", false]], "forward() (codes.surrogates.fullyconnectednet method)": [[2, "codes.surrogates.FullyConnectedNet.forward", false]], "forward() (codes.surrogates.latentneuralode method)": [[2, "codes.surrogates.LatentNeuralODE.forward", false], [2, "id3", false]], "forward() (codes.surrogates.latentpoly method)": [[2, "codes.surrogates.LatentPoly.forward", false], [2, "id5", false]], "forward() (codes.surrogates.modelwrapper method)": [[2, "codes.surrogates.ModelWrapper.forward", false], [2, "id11", false]], "forward() (codes.surrogates.multionet method)": [[2, "codes.surrogates.MultiONet.forward", false]], "forward() (codes.surrogates.ode method)": [[2, "codes.surrogates.ODE.forward", false], [2, "id16", false]], "forward() (codes.surrogates.polynomial method)": [[2, "codes.surrogates.Polynomial.forward", false], [2, "id17", false]], "forward() (codes.surrogates.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.forward", false]], "forward() (codes.surrogates.trunknet method)": [[2, "codes.surrogates.TrunkNet.forward", false]], "fullyconnected (class in codes.surrogates)": [[2, "codes.surrogates.FullyConnected", false]], "fullyconnectednet (class in codes.surrogates)": [[2, "codes.surrogates.FullyConnectedNet", false]], "get_custom_palette() (in module codes.benchmark)": [[1, "codes.benchmark.get_custom_palette", false]], "get_custom_palette() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.get_custom_palette", false]], "get_data_subset() (in module codes.utils)": [[4, "codes.utils.get_data_subset", false]], "get_data_subset() (in module codes.utils.data_utils)": [[4, "codes.utils.data_utils.get_data_subset", false]], "get_model_config() (in module codes.benchmark)": [[1, "codes.benchmark.get_model_config", false]], "get_model_config() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.get_model_config", false]], "get_progress_bar() (in module codes.utils)": [[4, "codes.utils.get_progress_bar", false]], "get_progress_bar() (in module codes.utils.utils)": [[4, "codes.utils.utils.get_progress_bar", false]], "get_required_models_list() (in module codes.benchmark)": [[1, "codes.benchmark.get_required_models_list", false]], "get_required_models_list() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.get_required_models_list", false]], "get_surrogate() (in module codes.benchmark)": [[1, "codes.benchmark.get_surrogate", false]], "get_surrogate() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.get_surrogate", false]], "identity_loss() (codes.surrogates.modelwrapper method)": [[2, "codes.surrogates.ModelWrapper.identity_loss", false], [2, "id12", false]], "in_features (codes.surrogates.encoder attribute)": [[2, "codes.surrogates.Encoder.in_features", false]], "inference_time_bar_plot() (in module codes.benchmark)": [[1, "codes.benchmark.inference_time_bar_plot", false]], "inference_time_bar_plot() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.inference_time_bar_plot", false]], "int_ext_sparse() (in module codes.benchmark)": [[1, "codes.benchmark.int_ext_sparse", false]], "int_ext_sparse() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.int_ext_sparse", false]], "l1 (codes.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.AbstractSurrogateModel.L1", false]], "l1 (codes.surrogates.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.L1", false]], "l2_loss() (codes.surrogates.modelwrapper class method)": [[2, "id13", false]], "l2_loss() (codes.surrogates.modelwrapper method)": [[2, "codes.surrogates.ModelWrapper.l2_loss", false]], "latent_features (codes.surrogates.decoder attribute)": [[2, "codes.surrogates.Decoder.latent_features", false]], "latent_features (codes.surrogates.encoder attribute)": [[2, "codes.surrogates.Encoder.latent_features", false]], "latentneuralode (class in codes.surrogates)": [[2, "codes.surrogates.LatentNeuralODE", false]], "latentpoly (class in codes.surrogates)": [[2, "codes.surrogates.LatentPoly", false]], "load() (codes.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.AbstractSurrogateModel.load", false]], "load() (codes.surrogates.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.load", false]], "load_and_save_config() (in module codes.utils)": [[4, "codes.utils.load_and_save_config", false]], "load_and_save_config() (in module codes.utils.utils)": [[4, "codes.utils.utils.load_and_save_config", false]], "load_model() (in module codes.benchmark)": [[1, "codes.benchmark.load_model", false]], "load_model() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.load_model", false]], "load_task_list() (in module codes.utils)": [[4, "codes.utils.load_task_list", false]], "load_task_list() (in module codes.utils.utils)": [[4, "codes.utils.utils.load_task_list", false]], "loss_weights (codes.surrogates.modelwrapper attribute)": [[2, "codes.surrogates.ModelWrapper.loss_weights", false]], "mae (codes.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.AbstractSurrogateModel.MAE", false]], "mae (codes.surrogates.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.MAE", false]], "make_comparison_csv() (in module codes.benchmark)": [[1, "codes.benchmark.make_comparison_csv", false]], "make_comparison_csv() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.make_comparison_csv", false]], "make_description() (in module codes.utils)": [[4, "codes.utils.make_description", false]], "make_description() (in module codes.utils.utils)": [[4, "codes.utils.utils.make_description", false]], "measure_memory_footprint() (in module codes.benchmark)": [[1, "codes.benchmark.measure_memory_footprint", false]], "measure_memory_footprint() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.measure_memory_footprint", false]], "mlp (codes.surrogates.decoder attribute)": [[2, "codes.surrogates.Decoder.mlp", false]], "mlp (codes.surrogates.encoder attribute)": [[2, "codes.surrogates.Encoder.mlp", false]], "mlp (codes.surrogates.ode attribute)": [[2, "codes.surrogates.ODE.mlp", false]], "model (codes.surrogates.latentneuralode attribute)": [[2, "codes.surrogates.LatentNeuralODE.model", false]], "model (codes.surrogates.latentpoly attribute)": [[2, "codes.surrogates.LatentPoly.model", false]], "modelwrapper (class in codes.surrogates)": [[2, "codes.surrogates.ModelWrapper", false]], "module": [[0, "module-codes", false], [1, "module-codes.benchmark", false], [1, "module-codes.benchmark.bench_fcts", false], [1, "module-codes.benchmark.bench_plots", false], [1, "module-codes.benchmark.bench_utils", false], [2, "module-codes.surrogates", false], [2, "module-codes.surrogates.surrogate_classes", false], [2, "module-codes.surrogates.surrogates", false], [3, "module-codes.train", false], [3, "module-codes.train.train_fcts", false], [4, "module-codes.utils", false], [4, "module-codes.utils.data_utils", false], [4, "module-codes.utils.utils", false], [5, "module-codes", false], [6, "module-codes.benchmark", false], [7, "module-codes.benchmark.bench_fcts", false], [8, "module-codes.benchmark.bench_plots", false], [9, "module-codes.benchmark.bench_utils", false], [10, "module-codes.surrogates", false], [12, "module-codes.surrogates.surrogates", false], [13, "module-codes.train", false], [14, "module-codes.train.train_fcts", false], [15, "module-codes.utils", false], [16, "module-codes.utils.data_utils", false], [17, "module-codes.utils.utils", false]], "multionet (class in codes.surrogates)": [[2, "codes.surrogates.MultiONet", false]], "n_chemicals (codes.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.AbstractSurrogateModel.n_chemicals", false]], "n_chemicals (codes.surrogates.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.n_chemicals", false]], "n_hidden (codes.surrogates.encoder attribute)": [[2, "codes.surrogates.Encoder.n_hidden", false]], "n_timesteps (codes.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.AbstractSurrogateModel.n_timesteps", false]], "n_timesteps (codes.surrogates.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.n_timesteps", false]], "nice_print() (in module codes.utils)": [[4, "codes.utils.nice_print", false]], "nice_print() (in module codes.utils.utils)": [[4, "codes.utils.utils.nice_print", false]], "normalisation (codes.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.AbstractSurrogateModel.normalisation", false]], "normalisation (codes.surrogates.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.normalisation", false]], "normalize_data() (in module codes.utils)": [[4, "codes.utils.normalize_data", false]], "normalize_data() (in module codes.utils.data_utils)": [[4, "codes.utils.data_utils.normalize_data", false]], "ode (class in codes.surrogates)": [[2, "codes.surrogates.ODE", false]], "ode (codes.surrogates.modelwrapper attribute)": [[2, "codes.surrogates.ModelWrapper.ode", false]], "out_features (codes.surrogates.decoder attribute)": [[2, "codes.surrogates.Decoder.out_features", false]], "parallel_training() (in module codes.train)": [[3, "codes.train.parallel_training", false]], "parallel_training() (in module codes.train.train_fcts)": [[3, "codes.train.train_fcts.parallel_training", false]], "plot_average_errors_over_time() (in module codes.benchmark)": [[1, "codes.benchmark.plot_average_errors_over_time", false]], "plot_average_errors_over_time() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_average_errors_over_time", false]], "plot_average_uncertainty_over_time() (in module codes.benchmark)": [[1, "codes.benchmark.plot_average_uncertainty_over_time", false]], "plot_average_uncertainty_over_time() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_average_uncertainty_over_time", false]], "plot_comparative_dynamic_correlation_heatmaps() (in module codes.benchmark)": [[1, "codes.benchmark.plot_comparative_dynamic_correlation_heatmaps", false]], "plot_comparative_dynamic_correlation_heatmaps() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_comparative_dynamic_correlation_heatmaps", false]], "plot_comparative_error_correlation_heatmaps() (in module codes.benchmark)": [[1, "codes.benchmark.plot_comparative_error_correlation_heatmaps", false]], "plot_comparative_error_correlation_heatmaps() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_comparative_error_correlation_heatmaps", false]], "plot_dynamic_correlation() (in module codes.benchmark)": [[1, "codes.benchmark.plot_dynamic_correlation", false]], "plot_dynamic_correlation() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_dynamic_correlation", false]], "plot_dynamic_correlation_heatmap() (in module codes.benchmark)": [[1, "codes.benchmark.plot_dynamic_correlation_heatmap", false]], "plot_dynamic_correlation_heatmap() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_dynamic_correlation_heatmap", false]], "plot_error_correlation_heatmap() (in module codes.benchmark)": [[1, "codes.benchmark.plot_error_correlation_heatmap", false]], "plot_error_correlation_heatmap() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_error_correlation_heatmap", false]], "plot_error_distribution_comparative() (in module codes.benchmark)": [[1, "codes.benchmark.plot_error_distribution_comparative", false]], "plot_error_distribution_comparative() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_error_distribution_comparative", false]], "plot_error_distribution_per_chemical() (in module codes.benchmark)": [[1, "codes.benchmark.plot_error_distribution_per_chemical", false]], "plot_error_distribution_per_chemical() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_error_distribution_per_chemical", false]], "plot_example_predictions_with_uncertainty() (in module codes.benchmark)": [[1, "codes.benchmark.plot_example_predictions_with_uncertainty", false]], "plot_example_predictions_with_uncertainty() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_example_predictions_with_uncertainty", false]], "plot_generalization_error_comparison() (in module codes.benchmark)": [[1, "codes.benchmark.plot_generalization_error_comparison", false]], "plot_generalization_error_comparison() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_generalization_error_comparison", false]], "plot_generalization_errors() (in module codes.benchmark)": [[1, "codes.benchmark.plot_generalization_errors", false]], "plot_generalization_errors() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_generalization_errors", false]], "plot_loss_comparison() (in module codes.benchmark)": [[1, "codes.benchmark.plot_loss_comparison", false]], "plot_loss_comparison() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_loss_comparison", false]], "plot_losses() (in module codes.benchmark)": [[1, "codes.benchmark.plot_losses", false]], "plot_losses() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_losses", false]], "plot_mae_comparison() (in module codes.benchmark)": [[1, "codes.benchmark.plot_MAE_comparison", false]], "plot_mae_comparison() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_MAE_comparison", false]], "plot_mae_comparison_train_duration() (in module codes.benchmark)": [[1, "codes.benchmark.plot_MAE_comparison_train_duration", false]], "plot_mae_comparison_train_duration() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_MAE_comparison_train_duration", false]], "plot_relative_errors() (in module codes.benchmark)": [[1, "codes.benchmark.plot_relative_errors", false]], "plot_relative_errors() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_relative_errors", false]], "plot_relative_errors_over_time() (in module codes.benchmark)": [[1, "codes.benchmark.plot_relative_errors_over_time", false]], "plot_relative_errors_over_time() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_relative_errors_over_time", false]], "plot_surr_losses() (in module codes.benchmark)": [[1, "codes.benchmark.plot_surr_losses", false]], "plot_surr_losses() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_surr_losses", false]], "plot_uncertainty_over_time_comparison() (in module codes.benchmark)": [[1, "codes.benchmark.plot_uncertainty_over_time_comparison", false]], "plot_uncertainty_over_time_comparison() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_uncertainty_over_time_comparison", false]], "plot_uncertainty_vs_errors() (in module codes.benchmark)": [[1, "codes.benchmark.plot_uncertainty_vs_errors", false]], "plot_uncertainty_vs_errors() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.plot_uncertainty_vs_errors", false]], "polynomial (class in codes.surrogates)": [[2, "codes.surrogates.Polynomial", false]], "predict() (codes.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.AbstractSurrogateModel.predict", false]], "predict() (codes.surrogates.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.predict", false]], "prepare_data() (codes.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.AbstractSurrogateModel.prepare_data", false]], "prepare_data() (codes.surrogates.fullyconnected method)": [[2, "codes.surrogates.FullyConnected.prepare_data", false]], "prepare_data() (codes.surrogates.latentneuralode method)": [[2, "codes.surrogates.LatentNeuralODE.prepare_data", false]], "prepare_data() (codes.surrogates.latentpoly method)": [[2, "codes.surrogates.LatentPoly.prepare_data", false], [2, "id6", false]], "prepare_data() (codes.surrogates.multionet method)": [[2, "codes.surrogates.MultiONet.prepare_data", false]], "prepare_data() (codes.surrogates.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.prepare_data", false]], "read_yaml_config() (in module codes.benchmark)": [[1, "codes.benchmark.read_yaml_config", false]], "read_yaml_config() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.read_yaml_config", false]], "read_yaml_config() (in module codes.utils)": [[4, "codes.utils.read_yaml_config", false]], "read_yaml_config() (in module codes.utils.utils)": [[4, "codes.utils.utils.read_yaml_config", false]], "reg_factor (codes.surrogates.ode attribute)": [[2, "codes.surrogates.ODE.reg_factor", false]], "rel_errors_and_uq() (in module codes.benchmark)": [[1, "codes.benchmark.rel_errors_and_uq", false]], "rel_errors_and_uq() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.rel_errors_and_uq", false]], "renormalize_loss_weights() (codes.surrogates.modelwrapper method)": [[2, "codes.surrogates.ModelWrapper.renormalize_loss_weights", false], [2, "id14", false]], "run_benchmark() (in module codes.benchmark)": [[1, "codes.benchmark.run_benchmark", false]], "run_benchmark() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.run_benchmark", false]], "save() (codes.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.AbstractSurrogateModel.save", false]], "save() (codes.surrogates.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.save", false]], "save_plot() (in module codes.benchmark)": [[1, "codes.benchmark.save_plot", false]], "save_plot() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.save_plot", false]], "save_plot_counter() (in module codes.benchmark)": [[1, "codes.benchmark.save_plot_counter", false]], "save_plot_counter() (in module codes.benchmark.bench_plots)": [[1, "codes.benchmark.bench_plots.save_plot_counter", false]], "save_task_list() (in module codes.utils)": [[4, "codes.utils.save_task_list", false]], "save_task_list() (in module codes.utils.utils)": [[4, "codes.utils.utils.save_task_list", false]], "sequential_training() (in module codes.train)": [[3, "codes.train.sequential_training", false]], "sequential_training() (in module codes.train.train_fcts)": [[3, "codes.train.train_fcts.sequential_training", false]], "set_random_seeds() (in module codes.utils)": [[4, "codes.utils.set_random_seeds", false]], "set_random_seeds() (in module codes.utils.utils)": [[4, "codes.utils.utils.set_random_seeds", false]], "setup_criterion() (codes.surrogates.multionet method)": [[2, "codes.surrogates.MultiONet.setup_criterion", false]], "setup_optimizer_and_scheduler() (codes.surrogates.fullyconnected method)": [[2, "codes.surrogates.FullyConnected.setup_optimizer_and_scheduler", false]], "setup_optimizer_and_scheduler() (codes.surrogates.multionet method)": [[2, "codes.surrogates.MultiONet.setup_optimizer_and_scheduler", false]], "setup_progress_bar() (codes.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.AbstractSurrogateModel.setup_progress_bar", false]], "setup_progress_bar() (codes.surrogates.surrogates.abstractsurrogatemodel method)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.setup_progress_bar", false]], "surrogate_classes (in module codes.surrogates)": [[11, "codes.surrogates.surrogate_classes", false]], "t_matrix (codes.surrogates.polynomial attribute)": [[2, "codes.surrogates.Polynomial.t_matrix", false]], "tabular_comparison() (in module codes.benchmark)": [[1, "codes.benchmark.tabular_comparison", false]], "tabular_comparison() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.tabular_comparison", false]], "tanh_reg (codes.surrogates.ode attribute)": [[2, "codes.surrogates.ODE.tanh_reg", false]], "test_loss (codes.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.AbstractSurrogateModel.test_loss", false]], "test_loss (codes.surrogates.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.test_loss", false]], "time_execution() (in module codes.utils)": [[4, "codes.utils.time_execution", false]], "time_execution() (in module codes.utils.utils)": [[4, "codes.utils.utils.time_execution", false]], "time_inference() (in module codes.benchmark)": [[1, "codes.benchmark.time_inference", false]], "time_inference() (in module codes.benchmark.bench_fcts)": [[1, "codes.benchmark.bench_fcts.time_inference", false]], "total_loss() (codes.surrogates.modelwrapper method)": [[2, "codes.surrogates.ModelWrapper.total_loss", false], [2, "id15", false]], "train_and_save_model() (in module codes.train)": [[3, "codes.train.train_and_save_model", false]], "train_and_save_model() (in module codes.train.train_fcts)": [[3, "codes.train.train_fcts.train_and_save_model", false]], "train_duration (codes.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.AbstractSurrogateModel.train_duration", false]], "train_duration (codes.surrogates.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.train_duration", false]], "train_loss (codes.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.AbstractSurrogateModel.train_loss", false]], "train_loss (codes.surrogates.surrogates.abstractsurrogatemodel attribute)": [[2, "codes.surrogates.surrogates.AbstractSurrogateModel.train_loss", false]], "trunknet (class in codes.surrogates)": [[2, "codes.surrogates.TrunkNet", false]], "width_list (codes.surrogates.decoder attribute)": [[2, "codes.surrogates.Decoder.width_list", false]], "width_list (codes.surrogates.encoder attribute)": [[2, "codes.surrogates.Encoder.width_list", false]], "worker() (in module codes.train)": [[3, "codes.train.worker", false]], "worker() (in module codes.train.train_fcts)": [[3, "codes.train.train_fcts.worker", false]], "worker_init_fn() (in module codes.utils)": [[4, "codes.utils.worker_init_fn", false]], "worker_init_fn() (in module codes.utils.utils)": [[4, "codes.utils.utils.worker_init_fn", false]], "write_metrics_to_yaml() (in module codes.benchmark)": [[1, "codes.benchmark.write_metrics_to_yaml", false]], "write_metrics_to_yaml() (in module codes.benchmark.bench_utils)": [[1, "codes.benchmark.bench_utils.write_metrics_to_yaml", false]]}, "objects": {"": [[5, 0, 0, "-", "codes"]], "codes": [[6, 0, 0, "-", "benchmark"], [10, 0, 0, "-", "surrogates"], [13, 0, 0, "-", "train"], [15, 0, 0, "-", "utils"]], "codes.benchmark": [[7, 0, 0, "-", "bench_fcts"], [8, 0, 0, "-", "bench_plots"], [9, 0, 0, "-", "bench_utils"], [1, 1, 1, "", "check_benchmark"], [1, 1, 1, "", "check_surrogate"], [1, 1, 1, "", "clean_metrics"], [1, 1, 1, "", "compare_MAE"], [1, 1, 1, "", "compare_UQ"], [1, 1, 1, "", "compare_batchsize"], [1, 1, 1, "", "compare_dynamic_accuracy"], [1, 1, 1, "", "compare_extrapolation"], [1, 1, 1, "", "compare_inference_time"], [1, 1, 1, "", "compare_interpolation"], [1, 1, 1, "", "compare_main_losses"], [1, 1, 1, "", "compare_models"], [1, 1, 1, "", "compare_relative_errors"], [1, 1, 1, "", "compare_sparse"], [1, 1, 1, "", "convert_dict_to_scientific_notation"], [1, 1, 1, "", "convert_to_standard_types"], [1, 1, 1, "", "count_trainable_parameters"], [1, 1, 1, "", "discard_numpy_entries"], [1, 1, 1, "", "evaluate_UQ"], [1, 1, 1, "", "evaluate_accuracy"], [1, 1, 1, "", "evaluate_batchsize"], [1, 1, 1, "", "evaluate_compute"], [1, 1, 1, "", "evaluate_dynamic_accuracy"], [1, 1, 1, "", "evaluate_extrapolation"], [1, 1, 1, "", "evaluate_interpolation"], [1, 1, 1, "", "evaluate_sparse"], [1, 1, 1, "", "flatten_dict"], [1, 1, 1, "", "format_seconds"], [1, 1, 1, "", "format_time"], [1, 1, 1, "", "get_custom_palette"], [1, 1, 1, "", "get_model_config"], [1, 1, 1, "", "get_required_models_list"], [1, 1, 1, "", "get_surrogate"], [1, 1, 1, "", "inference_time_bar_plot"], [1, 1, 1, "", "int_ext_sparse"], [1, 1, 1, "", "load_model"], [1, 1, 1, "", "make_comparison_csv"], [1, 1, 1, "", "measure_memory_footprint"], [1, 1, 1, "", "plot_MAE_comparison"], [1, 1, 1, "", "plot_MAE_comparison_train_duration"], [1, 1, 1, "", "plot_average_errors_over_time"], [1, 1, 1, "", "plot_average_uncertainty_over_time"], [1, 1, 1, "", "plot_comparative_dynamic_correlation_heatmaps"], [1, 1, 1, "", "plot_comparative_error_correlation_heatmaps"], [1, 1, 1, "", "plot_dynamic_correlation"], [1, 1, 1, "", "plot_dynamic_correlation_heatmap"], [1, 1, 1, "", "plot_error_correlation_heatmap"], [1, 1, 1, "", "plot_error_distribution_comparative"], [1, 1, 1, "", "plot_error_distribution_per_chemical"], [1, 1, 1, "", "plot_example_predictions_with_uncertainty"], [1, 1, 1, "", "plot_generalization_error_comparison"], [1, 1, 1, "", "plot_generalization_errors"], [1, 1, 1, "", "plot_loss_comparison"], [1, 1, 1, "", "plot_losses"], [1, 1, 1, "", "plot_relative_errors"], [1, 1, 1, "", "plot_relative_errors_over_time"], [1, 1, 1, "", "plot_surr_losses"], [1, 1, 1, "", "plot_uncertainty_over_time_comparison"], [1, 1, 1, "", "plot_uncertainty_vs_errors"], [1, 1, 1, "", "read_yaml_config"], [1, 1, 1, "", "rel_errors_and_uq"], [1, 1, 1, "", "run_benchmark"], [1, 1, 1, "", "save_plot"], [1, 1, 1, "", "save_plot_counter"], [1, 1, 1, "", "tabular_comparison"], [1, 1, 1, "", "time_inference"], [1, 1, 1, "", "write_metrics_to_yaml"]], "codes.benchmark.bench_fcts": [[1, 1, 1, "", "compare_MAE"], [1, 1, 1, "", "compare_UQ"], [1, 1, 1, "", "compare_batchsize"], [1, 1, 1, "", "compare_dynamic_accuracy"], [1, 1, 1, "", "compare_extrapolation"], [1, 1, 1, "", "compare_inference_time"], [1, 1, 1, "", "compare_interpolation"], [1, 1, 1, "", "compare_main_losses"], [1, 1, 1, "", "compare_models"], [1, 1, 1, "", "compare_relative_errors"], [1, 1, 1, "", "compare_sparse"], [1, 1, 1, "", "evaluate_UQ"], [1, 1, 1, "", "evaluate_accuracy"], [1, 1, 1, "", "evaluate_batchsize"], [1, 1, 1, "", "evaluate_compute"], [1, 1, 1, "", "evaluate_dynamic_accuracy"], [1, 1, 1, "", "evaluate_extrapolation"], [1, 1, 1, "", "evaluate_interpolation"], [1, 1, 1, "", "evaluate_sparse"], [1, 1, 1, "", "run_benchmark"], [1, 1, 1, "", "tabular_comparison"], [1, 1, 1, "", "time_inference"]], "codes.benchmark.bench_plots": [[1, 1, 1, "", "get_custom_palette"], [1, 1, 1, "", "inference_time_bar_plot"], [1, 1, 1, "", "int_ext_sparse"], [1, 1, 1, "", "plot_MAE_comparison"], [1, 1, 1, "", "plot_MAE_comparison_train_duration"], [1, 1, 1, "", "plot_average_errors_over_time"], [1, 1, 1, "", "plot_average_uncertainty_over_time"], [1, 1, 1, "", "plot_comparative_dynamic_correlation_heatmaps"], [1, 1, 1, "", "plot_comparative_error_correlation_heatmaps"], [1, 1, 1, "", "plot_dynamic_correlation"], [1, 1, 1, "", "plot_dynamic_correlation_heatmap"], [1, 1, 1, "", "plot_error_correlation_heatmap"], [1, 1, 1, "", "plot_error_distribution_comparative"], [1, 1, 1, "", "plot_error_distribution_per_chemical"], [1, 1, 1, "", "plot_example_predictions_with_uncertainty"], [1, 1, 1, "", "plot_generalization_error_comparison"], [1, 1, 1, "", "plot_generalization_errors"], [1, 1, 1, "", "plot_loss_comparison"], [1, 1, 1, "", "plot_losses"], [1, 1, 1, "", "plot_relative_errors"], [1, 1, 1, "", "plot_relative_errors_over_time"], [1, 1, 1, "", "plot_surr_losses"], [1, 1, 1, "", "plot_uncertainty_over_time_comparison"], [1, 1, 1, "", "plot_uncertainty_vs_errors"], [1, 1, 1, "", "rel_errors_and_uq"], [1, 1, 1, "", "save_plot"], [1, 1, 1, "", "save_plot_counter"]], "codes.benchmark.bench_utils": [[1, 1, 1, "", "check_benchmark"], [1, 1, 1, "", "check_surrogate"], [1, 1, 1, "", "clean_metrics"], [1, 1, 1, "", "convert_dict_to_scientific_notation"], [1, 1, 1, "", "convert_to_standard_types"], [1, 1, 1, "", "count_trainable_parameters"], [1, 1, 1, "", "discard_numpy_entries"], [1, 1, 1, "", "flatten_dict"], [1, 1, 1, "", "format_seconds"], [1, 1, 1, "", "format_time"], [1, 1, 1, "", "get_model_config"], [1, 1, 1, "", "get_required_models_list"], [1, 1, 1, "", "get_surrogate"], [1, 1, 1, "", "load_model"], [1, 1, 1, "", "make_comparison_csv"], [1, 1, 1, "", "measure_memory_footprint"], [1, 1, 1, "", "read_yaml_config"], [1, 1, 1, "", "write_metrics_to_yaml"]], "codes.surrogates": [[2, 2, 1, "", "AbstractSurrogateModel"], [2, 2, 1, "", "BranchNet"], [2, 2, 1, "", "ChemDataset"], [2, 2, 1, "", "Decoder"], [2, 2, 1, "", "Encoder"], [2, 2, 1, "", "FullyConnected"], [2, 2, 1, "", "FullyConnectedNet"], [2, 2, 1, "", "LatentNeuralODE"], [2, 2, 1, "", "LatentPoly"], [2, 2, 1, "", "ModelWrapper"], [2, 2, 1, "", "MultiONet"], [2, 2, 1, "", "ODE"], [2, 2, 1, "", "Polynomial"], [2, 2, 1, "", "TrunkNet"], [11, 5, 1, "", "surrogate_classes"], [2, 0, 0, "-", "surrogate_classes"], [12, 0, 0, "-", "surrogates"]], "codes.surrogates.AbstractSurrogateModel": [[2, 3, 1, "", "L1"], [2, 3, 1, "", "MAE"], [2, 3, 1, "", "config"], [2, 4, 1, "", "denormalize"], [2, 3, 1, "", "device"], [2, 4, 1, "", "fit"], [2, 4, 1, "", "forward"], [2, 4, 1, "", "load"], [2, 3, 1, "", "n_chemicals"], [2, 3, 1, "", "n_timesteps"], [2, 3, 1, "", "normalisation"], [2, 4, 1, "", "predict"], [2, 4, 1, "", "prepare_data"], [2, 4, 1, "", "save"], [2, 4, 1, "", "setup_progress_bar"], [2, 3, 1, "", "test_loss"], [2, 3, 1, "", "train_duration"], [2, 3, 1, "", "train_loss"]], "codes.surrogates.BranchNet": [[2, 4, 1, "", "forward"]], "codes.surrogates.Decoder": [[2, 3, 1, "", "activation"], [2, 4, 1, "id0", "forward"], [2, 3, 1, "", "latent_features"], [2, 3, 1, "", "mlp"], [2, 3, 1, "", "out_features"], [2, 3, 1, "", "width_list"]], "codes.surrogates.Encoder": [[2, 3, 1, "", "activation"], [2, 4, 1, "id1", "forward"], [2, 3, 1, "", "in_features"], [2, 3, 1, "", "latent_features"], [2, 3, 1, "", "mlp"], [2, 3, 1, "", "n_hidden"], [2, 3, 1, "", "width_list"]], "codes.surrogates.FullyConnected": [[2, 4, 1, "", "create_dataloader"], [2, 4, 1, "", "epoch"], [2, 4, 1, "", "fit"], [2, 4, 1, "", "forward"], [2, 4, 1, "", "prepare_data"], [2, 4, 1, "", "setup_optimizer_and_scheduler"]], "codes.surrogates.FullyConnectedNet": [[2, 4, 1, "", "forward"]], "codes.surrogates.LatentNeuralODE": [[2, 3, 1, "", "config"], [2, 4, 1, "id2", "fit"], [2, 4, 1, "id3", "forward"], [2, 3, 1, "", "model"], [2, 4, 1, "", "prepare_data"]], "codes.surrogates.LatentPoly": [[2, 3, 1, "", "config"], [2, 3, 1, "", "device"], [2, 4, 1, "id4", "fit"], [2, 4, 1, "id5", "forward"], [2, 3, 1, "", "model"], [2, 4, 1, "id6", "prepare_data"]], "codes.surrogates.ModelWrapper": [[2, 3, 1, "", "config"], [2, 3, 1, "", "decoder"], [2, 4, 1, "id7", "deriv"], [2, 4, 1, "id8", "deriv2"], [2, 4, 1, "id9", "deriv2_loss"], [2, 4, 1, "id10", "deriv_loss"], [2, 3, 1, "", "encoder"], [2, 4, 1, "id11", "forward"], [2, 4, 1, "id12", "identity_loss"], [2, 4, 1, "id13", "l2_loss"], [2, 3, 1, "", "loss_weights"], [2, 3, 1, "", "ode"], [2, 4, 1, "id14", "renormalize_loss_weights"], [2, 4, 1, "id15", "total_loss"]], "codes.surrogates.MultiONet": [[2, 4, 1, "", "create_dataloader"], [2, 4, 1, "", "epoch"], [2, 4, 1, "", "fit"], [2, 4, 1, "", "forward"], [2, 4, 1, "", "prepare_data"], [2, 4, 1, "", "setup_criterion"], [2, 4, 1, "", "setup_optimizer_and_scheduler"]], "codes.surrogates.ODE": [[2, 3, 1, "", "activation"], [2, 4, 1, "id16", "forward"], [2, 3, 1, "", "mlp"], [2, 3, 1, "", "reg_factor"], [2, 3, 1, "", "tanh_reg"]], "codes.surrogates.Polynomial": [[2, 4, 1, "", "_prepare_t"], [2, 3, 1, "", "coef"], [2, 3, 1, "", "degree"], [2, 3, 1, "", "dimension"], [2, 4, 1, "id17", "forward"], [2, 3, 1, "", "t_matrix"]], "codes.surrogates.TrunkNet": [[2, 4, 1, "", "forward"]], "codes.surrogates.surrogates": [[2, 2, 1, "", "AbstractSurrogateModel"]], "codes.surrogates.surrogates.AbstractSurrogateModel": [[2, 3, 1, "", "L1"], [2, 3, 1, "", "MAE"], [2, 3, 1, "", "config"], [2, 4, 1, "", "denormalize"], [2, 3, 1, "", "device"], [2, 4, 1, "", "fit"], [2, 4, 1, "", "forward"], [2, 4, 1, "", "load"], [2, 3, 1, "", "n_chemicals"], [2, 3, 1, "", "n_timesteps"], [2, 3, 1, "", "normalisation"], [2, 4, 1, "", "predict"], [2, 4, 1, "", "prepare_data"], [2, 4, 1, "", "save"], [2, 4, 1, "", "setup_progress_bar"], [2, 3, 1, "", "test_loss"], [2, 3, 1, "", "train_duration"], [2, 3, 1, "", "train_loss"]], "codes.train": [[3, 1, 1, "", "create_task_list_for_surrogate"], [3, 1, 1, "", "parallel_training"], [3, 1, 1, "", "sequential_training"], [3, 1, 1, "", "train_and_save_model"], [14, 0, 0, "-", "train_fcts"], [3, 1, 1, "", "worker"]], "codes.train.train_fcts": [[3, 1, 1, "", "create_task_list_for_surrogate"], [3, 1, 1, "", "parallel_training"], [3, 1, 1, "", "sequential_training"], [3, 1, 1, "", "train_and_save_model"], [3, 1, 1, "", "worker"]], "codes.utils": [[4, 1, 1, "", "check_and_load_data"], [4, 1, 1, "", "check_training_status"], [4, 1, 1, "", "create_dataset"], [4, 1, 1, "", "create_hdf5_dataset"], [4, 1, 1, "", "create_model_dir"], [16, 0, 0, "-", "data_utils"], [4, 1, 1, "", "download_data"], [4, 1, 1, "", "get_data_subset"], [4, 1, 1, "", "get_progress_bar"], [4, 1, 1, "", "load_and_save_config"], [4, 1, 1, "", "load_task_list"], [4, 1, 1, "", "make_description"], [4, 1, 1, "", "nice_print"], [4, 1, 1, "", "normalize_data"], [4, 1, 1, "", "read_yaml_config"], [4, 1, 1, "", "save_task_list"], [4, 1, 1, "", "set_random_seeds"], [4, 1, 1, "", "time_execution"], [17, 0, 0, "-", "utils"], [4, 1, 1, "", "worker_init_fn"]], "codes.utils.data_utils": [[4, 6, 1, "", "DatasetError"], [4, 1, 1, "", "check_and_load_data"], [4, 1, 1, "", "create_dataset"], [4, 1, 1, "", "create_hdf5_dataset"], [4, 1, 1, "", "download_data"], [4, 1, 1, "", "get_data_subset"], [4, 1, 1, "", "normalize_data"]], "codes.utils.utils": [[4, 1, 1, "", "check_training_status"], [4, 1, 1, "", "create_model_dir"], [4, 1, 1, "", "get_progress_bar"], [4, 1, 1, "", "load_and_save_config"], [4, 1, 1, "", "load_task_list"], [4, 1, 1, "", "make_description"], [4, 1, 1, "", "nice_print"], [4, 1, 1, "", "read_yaml_config"], [4, 1, 1, "", "save_task_list"], [4, 1, 1, "", "set_random_seeds"], [4, 1, 1, "", "time_execution"], [4, 1, 1, "", "worker_init_fn"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "method", "Python method"], "5": ["py", "data", "Python data"], "6": ["py", "exception", "Python exception"]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:attribute", "4": "py:method", "5": "py:data", "6": "py:exception"}, "terms": {"": [1, 3], "0": [1, 2, 4], "0001": 1, "001": 1, "003": 1, "01": 1, "1": 3, "10": [1, 2], "100": [1, 2], "128": 2, "1e": 4, "20": 4, "29": 2, "300": 1, "3d": 2, "5": [1, 2], "50th": 1, "5e": 1, "8": 1, "80": 4, "90th": 1, "95": 1, "99th": 1, "A": [1, 3, 4], "For": 2, "If": [1, 2, 4, 11], "It": 2, "One": 2, "The": [1, 2, 3, 4, 11], "To": 2, "_lrschedul": 2, "_prepare_t": [0, 2], "abc": 2, "about": 4, "absolut": [1, 2], "absolute_error": 1, "abstract": 2, "abstractsurrogatemodel": [0, 2], "accur": 2, "accuraci": [1, 4], "across": 1, "act": 2, "activ": [0, 2], "add_model": 2, "addition": 4, "after": 2, "afterward": 2, "align": 4, "all": [1, 2], "all_metr": 1, "alreadi": [1, 4], "also": 2, "although": 2, "an": [1, 2, 4, 11], "ani": [1, 2], "appli": 2, "appropri": 4, "approxim": 2, "ar": [1, 2, 3, 4], "argument": 11, "arrai": [1, 2, 4], "ask": 4, "attribut": [2, 4], "averag": 1, "average_correl": 1, "avg_correl": 1, "axi": 1, "axis_max": 1, "back": 2, "backward": 1, "bar": [2, 3, 4], "base": [1, 2, 3, 4], "base_dir": [1, 2, 4], "basic": 2, "batch": [1, 2, 4], "batch_siz": 2, "batchsiz": 1, "befor": 4, "below": [1, 4], "bench_fct": [0, 19], "bench_plot": [0, 19], "bench_util": [0, 19], "benchmark": [0, 2, 3, 4, 19], "between": [1, 2], "bool": [1, 2, 4], "box": 4, "branch": 2, "branch_hidden_lay": 2, "branch_input": 2, "branchnet": [0, 2], "built": 11, "burn": 2, "calcul": 2, "call": 2, "callabl": [2, 4], "can": [1, 4], "care": 2, "cell": 1, "check": [1, 4], "check_and_load_data": [0, 4], "check_benchmark": [0, 1], "check_surrog": [0, 1], "check_training_statu": [0, 4], "chemdataset": [0, 2], "chemic": [1, 2, 4], "chemical_nam": 1, "class": [1, 2, 11, 12], "classmethod": 2, "clean": 1, "clean_metr": [0, 1], "coef": [0, 2], "coeffici": 2, "color": 1, "compar": [1, 4], "compare_batchs": [0, 1], "compare_dynamic_accuraci": [0, 1], "compare_extrapol": [0, 1], "compare_inference_tim": [0, 1], "compare_interpol": [0, 1], "compare_ma": [0, 1], "compare_main_loss": [0, 1], "compare_model": [0, 1], "compare_relative_error": [0, 1], "compare_spars": [0, 1], "compare_uq": [0, 1], "compat": 2, "complet": 4, "complex": 1, "composit": 1, "comput": [1, 2], "conf": 1, "config": [0, 1, 2, 3, 4], "config_path": [1, 4], "configur": [1, 2, 3, 4], "confirm": 4, "conserv": 2, "consist": [1, 4], "constructor": 11, "contain": [1, 2, 3], "content": 19, "convert": 1, "convert_dict_to_scientific_not": [0, 1], "convert_to_standard_typ": [0, 1], "copi": 4, "correct": 4, "correl": 1, "count": 1, "count_trainable_paramet": [0, 1], "cours": 1, "cpu": [2, 3], "creat": [1, 2, 3, 4, 11], "create_dataload": [0, 2], "create_dataset": [0, 4], "create_hdf5_dataset": [0, 4], "create_model_dir": [0, 4], "create_task_list_for_surrog": [0, 3], "criterion": 2, "csv": 1, "cuda": [2, 4], "current": [2, 3], "curvatur": 2, "custom": 1, "cutoff": [1, 4], "cutoff_perc": 1, "d": 1, "data": [1, 2, 4], "data_dir": 4, "data_load": 2, "data_param": 2, "data_util": [0, 19], "dataload": [1, 2, 4], "dataset": [1, 2, 4], "dataset_nam": 4, "dataset_test": 2, "dataset_train": 2, "dataset_v": 2, "dataseterror": [0, 4], "decod": [0, 2], "decor": 4, "deeponet": [2, 11], "default": [1, 2, 3, 4], "defin": 2, "degre": [0, 2], "denorm": [0, 2], "deriv": [0, 2], "deriv2": [0, 2], "deriv2_loss": [0, 2], "deriv_loss": [0, 2], "descript": [2, 4], "desir": 1, "determin": 3, "deviat": 1, "devic": [0, 2, 3, 4], "device_idx": 3, "device_list": 3, "dict": [1, 2, 3, 4], "dictionari": [1, 2, 3, 4], "differ": [1, 2, 4], "differenti": 2, "dimens": [0, 2], "directori": [1, 4], "disabl": 4, "discard_numpy_entri": [0, 1], "disk": 2, "distribut": 1, "do": [1, 4], "document": 2, "doe": 1, "don": 1, "download": 4, "download_data": [0, 4], "dpi": 1, "durat": [1, 2, 4], "dure": [1, 2], "e": [1, 2, 3, 4], "each": [1, 2, 4], "either": 4, "empti": [1, 11], "encod": [0, 2], "ensembl": 1, "ensur": 4, "entir": 2, "entri": 1, "epoch": [0, 2, 3], "equat": 2, "error": [1, 2, 4], "errors_tim": 1, "evalu": [1, 2], "evaluate_accuraci": [0, 1], "evaluate_batchs": [0, 1], "evaluate_comput": [0, 1], "evaluate_dynamic_accuraci": [0, 1], "evaluate_extrapol": [0, 1], "evaluate_interpol": [0, 1], "evaluate_spars": [0, 1], "evaluate_uq": [0, 1], "everi": 2, "exampl": 1, "example_idx": 1, "except": [4, 16], "execut": [3, 4], "exist": [1, 4], "expect": 1, "extrapol": [1, 3, 4], "factor": [2, 4], "fals": [1, 2], "fcnn": 11, "featur": 2, "feedforward": 2, "figur": 1, "file": [1, 3, 4], "fileexistserror": 4, "filenam": 1, "filenotfounderror": 1, "filepath": [3, 4], "final": 2, "first": 2, "fit": [0, 2], "fix": 4, "flatten": 1, "flatten_dict": [0, 1], "float": [1, 2, 4], "folder": 1, "follow": 2, "footprint": 1, "form": 2, "format": [1, 4], "format_second": [0, 1], "format_tim": [0, 1], "former": 2, "forward": [0, 1, 2], "found": 1, "fraction": 1, "framework": 2, "from": [1, 2, 3, 4], "full": [1, 4], "full_test_data": 4, "full_train_data": 4, "fullyconnect": [0, 2, 11], "fullyconnectednet": [0, 2], "func": 4, "function": [1, 2, 3, 4, 7, 8, 9, 14, 16, 17], "g": [1, 2, 3, 4], "gener": [1, 4], "get": [1, 2, 4], "get_custom_palett": [0, 1], "get_data_subset": [0, 4], "get_model_config": [0, 1], "get_progress_bar": [0, 4], "get_required_models_list": [0, 1], "get_surrog": [0, 1], "github": 2, "given": [1, 2, 3, 11], "gradient": 1, "ha": 2, "have": [2, 4], "hdf5": 4, "heatmap": 1, "helper": 2, "hh": 1, "hidden": 2, "hidden_s": 2, "higher": 2, "histogram": 1, "histori": 1, "hook": 2, "html": 2, "http": 2, "i": [1, 2, 3, 4, 11], "id": [1, 3, 4], "ident": 2, "identifi": [1, 2, 4], "identity_loss": [0, 2], "ignor": 2, "imag": 1, "implement": 2, "in_featur": [0, 2], "includ": [1, 2, 4], "incorrect": 4, "increase_count": 1, "increment": 1, "index": [1, 3], "individu": 2, "infer": 1, "inference_time_bar_plot": [0, 1], "inform": [2, 4], "initi": [2, 4], "input": [1, 2], "input_s": 2, "input_shap": 2, "insid": 4, "instanc": [1, 2], "instead": 2, "int": [1, 2, 3, 4], "int_ext_spars": [0, 1], "integ": 4, "integr": 2, "interpol": [1, 3, 4], "interv": [1, 4], "invalid": 2, "invers": 2, "io": 2, "issu": 1, "iter": 11, "itself": 2, "janssen": 2, "json": 4, "kei": 1, "l1": [0, 2], "l1loss": 2, "l2": 2, "l2_loss": [0, 2], "label": [1, 4], "latent": 2, "latent_featur": [0, 2], "latent_neural_od": 11, "latent_poli": 11, "latentneuralod": [0, 2, 11], "latentneuralodebaseconfig": 2, "latentpoli": [0, 2, 11], "latentpolynomi": 11, "latentpolynomialbaseconfig": 2, "latter": 2, "layer": 2, "layer_width": 2, "learn": 2, "learnabl": 2, "learning_r": 2, "line": 1, "linear": 2, "list": [1, 2, 3, 4, 11], "load": [0, 1, 2, 4], "load_and_save_config": [0, 4], "load_model": [0, 1], "load_task_list": [0, 4], "loader": 2, "log": [1, 4], "log10": 4, "look": 4, "loss": [1, 2], "loss_histori": 1, "loss_weight": [0, 2], "lower": 2, "lr_schedul": 2, "m": 1, "mae": [0, 1, 2], "main": [1, 2, 3], "make": 1, "make_comparison_csv": [0, 1], "make_descript": [0, 4], "marker": 4, "mass": 2, "massloss_factor": 2, "match": 1, "matplotlib": 1, "matrix": 2, "max": 1, "max_count": 1, "max_err": 1, "max_grad": 1, "maximum": 1, "mean": [1, 2], "mean_error": 1, "mean_tim": 1, "measur": 1, "measure_memory_footprint": [0, 1], "median": 1, "median_error": 1, "memori": 1, "messag": 4, "metadata": 4, "method": 2, "metric": [1, 3, 4], "metrics_list": 1, "minmax": 4, "miss": [1, 4], "mlp": [0, 2], "mm": 1, "mode": [1, 3, 4], "model": [0, 1, 2, 3, 4], "model_config": 2, "model_dir": 2, "model_error": 1, "model_errors_list": 1, "model_identifi": [1, 2], "model_nam": 2, "modelwrapp": [0, 2], "modul": [5, 6, 10, 13, 15, 19], "more": 2, "multionet": [0, 2, 11], "multipl": [1, 2, 3], "multipli": 2, "must": [2, 11], "mutabl": 11, "n": 1, "n_chemic": [0, 2, 4], "n_hidden": [0, 2], "n_metric": 1, "n_run": 1, "n_sampl": [2, 4], "n_test_sampl": 1, "n_timestep": [0, 1, 2, 4], "n_train_sampl": 1, "name": [1, 2, 3, 4], "ndarrai": [1, 2, 4], "necessari": 1, "need": [1, 2], "nest": 1, "network": 2, "neural": 2, "new": [1, 4, 11], "nice": 4, "nice_print": [0, 4], "nn": [1, 2], "none": [1, 2, 3, 4], "normal": [1, 4], "normalis": [0, 2], "normalisation_mod": 4, "normalize_data": [0, 4], "notat": 1, "note": 2, "np": [1, 2, 4], "num_chem": 1, "num_color": 1, "num_hidden_lay": 2, "num_sampl": 1, "num_timestep": 1, "number": [1, 2, 3], "numer": [1, 2], "numpi": [1, 4], "object": [1, 2], "obtain": 2, "od": [0, 2], "onc": 2, "one": [1, 2], "operatornetwork": 2, "optim": 2, "option": [1, 2, 3, 4], "ordinari": 2, "origin": 2, "otherwis": 1, "out_featur": [0, 2], "output": 2, "output_factor": 2, "output_s": 2, "output_shap": 2, "over": 1, "overal": 3, "overall_progress_bar": 3, "overridden": 2, "packag": 19, "palett": 1, "parallel": 3, "parallel_train": [0, 3], "param": 4, "paramet": [1, 2, 3, 4], "parent_kei": 1, "pass": [1, 2, 4], "path": [1, 4], "pearson": 1, "percentag": 1, "percentil": 1, "perform": [1, 2], "phase": 2, "place": 2, "plot": 1, "plot_average_errors_over_tim": [0, 1], "plot_average_uncertainty_over_tim": [0, 1], "plot_comparative_dynamic_correlation_heatmap": [0, 1], "plot_comparative_error_correlation_heatmap": [0, 1], "plot_dynamic_correl": [0, 1], "plot_dynamic_correlation_heatmap": [0, 1], "plot_error_correlation_heatmap": [0, 1], "plot_error_distribution_compar": [0, 1], "plot_error_distribution_per_chem": [0, 1], "plot_example_predictions_with_uncertainti": [0, 1], "plot_generalization_error": [0, 1], "plot_generalization_error_comparison": [0, 1], "plot_loss": [0, 1], "plot_loss_comparison": [0, 1], "plot_mae_comparison": [0, 1], "plot_mae_comparison_train_dur": [0, 1], "plot_relative_error": [0, 1], "plot_relative_errors_over_tim": [0, 1], "plot_surr_loss": [0, 1], "plot_uncertainty_over_time_comparison": [0, 1], "plot_uncertainty_vs_error": [0, 1], "plt": 1, "polynomi": [0, 2], "polynomialmodelwrapp": 2, "posit": [2, 3], "precis": 1, "predict": [0, 1, 2], "preds_mean": 1, "preds_std": 1, "prepar": 2, "prepare_data": [0, 2], "present": [1, 4], "print": 4, "problemat": 1, "process": 3, "product": 2, "progress": [2, 3, 4], "propag": 2, "provid": [2, 4], "pyplot": 1, "pytorch": [1, 4], "quantif": 1, "queue": 3, "rais": [1, 2, 4], "random": [3, 4], "rang": 2, "rate": 2, "raw_data": 2, "read": 1, "read_yaml_config": [0, 1, 4], "recip": 2, "recurs": 1, "reg_factor": [0, 2], "region": 1, "regist": 2, "regular": 2, "regularization_factor": 2, "rel": 1, "rel_errors_and_uq": [0, 1], "relative_error": 1, "relev": 1, "relu": 2, "remov": 1, "renorm": 2, "renormalize_loss_weight": [0, 2], "repres": 2, "reproduc": 4, "requir": [1, 4], "requr": 2, "resolut": 1, "resourc": 1, "respect": 2, "return": [1, 2, 3, 4], "rgba": 1, "robin": 2, "rtype": 2, "run": [1, 2], "run_benchmark": [0, 1], "same": 1, "sampl": 1, "save": [0, 1, 2, 3, 4], "save_plot": [0, 1], "save_plot_count": [0, 1], "save_task_list": [0, 4], "scalar": 2, "scale": [1, 2], "schedul": 2, "scientif": 1, "second": [1, 2], "see": 2, "seed": [3, 4], "sep": 1, "separ": 1, "sequenc": 11, "sequenti": [2, 3], "sequential_train": [0, 3], "serial": 1, "session": 3, "set": [1, 2, 4], "set_random_se": [0, 4], "setup_criterion": [0, 2], "setup_optimizer_and_schedul": [0, 2], "setup_progress_bar": [0, 2], "shade": 1, "shape": [1, 2, 4], "short": 2, "should": 2, "shuffl": 2, "silent": 2, "simpl": 2, "sinc": 2, "singl": [2, 3], "size": [1, 2, 4], "slope": 2, "smooth": 1, "so": 2, "space": 2, "spars": [1, 4], "speci": [1, 2], "species_nam": 1, "specif": [1, 3, 4], "specifi": [4, 11], "split": [2, 4], "ss": 1, "standard": [1, 2], "standardis": 4, "state": 2, "statist": 4, "std": 1, "std_time": 1, "step": 2, "store": [2, 4], "str": [1, 2, 3, 4], "string": [1, 4], "structur": 2, "subclass": 2, "subfold": [2, 4], "submodul": [0, 19], "subpackag": 19, "subplot": 1, "subset": 4, "surr_nam": [1, 2, 3], "surrog": [0, 1, 3, 4, 19], "surrogate_class": [0, 1, 19], "surrogate_nam": [1, 4], "surrogatemodel": 1, "t": [1, 2], "t_matrix": [0, 2], "t_rang": 2, "tabular": 1, "tabular_comparison": [0, 1], "take": 2, "taken": 3, "tanh": 2, "tanh_reg": [0, 2], "target": [1, 2], "task": [3, 4], "task_list_filepath": 3, "task_queu": 3, "tensor": [2, 4], "term": 2, "test": [1, 2, 4], "test_data": 4, "test_load": [1, 2], "test_loss": [0, 1, 2], "than": 2, "thei": [1, 2], "them": 2, "thi": [2, 4], "threshold_factor": 1, "through": 2, "time": [1, 2, 4], "time_execut": [0, 4], "time_infer": [0, 1], "timestep": [1, 2, 4], "titl": 1, "toler": 4, "torch": [1, 2, 4], "torchod": 2, "total": [1, 2], "total_loss": [0, 2], "tqdm": [2, 3, 4], "train": [0, 1, 2, 4, 19], "train_and_save_model": [0, 3], "train_data": 4, "train_dur": [0, 1, 2], "train_fct": [0, 19], "train_load": 2, "train_loss": [0, 1, 2], "trainabl": 1, "training_id": [1, 2, 3], "trajectori": [1, 2], "transform": 4, "true": [1, 2, 4], "trunk": 2, "trunk_hidden_lay": 2, "trunk_input": 2, "trunk_input_s": 2, "trunknet": [0, 2], "tupl": [1, 2, 4], "two": 1, "type": [1, 2, 3, 4], "typeerror": [2, 4], "uncertainti": 1, "uniqu": 4, "unique_id": 4, "unit": 2, "up": 2, "uq": [1, 4], "us": [1, 2, 3, 4], "util": [0, 2, 19], "val_data": 4, "valid": [2, 4], "valu": [1, 2, 4], "valueerror": [1, 4], "variabl": 2, "variou": 1, "verbos": 4, "wai": 4, "weight": 2, "welcom": 18, "whatev": 2, "where": [1, 4], "whether": [1, 2, 4], "which": [1, 2, 3], "while": 2, "width": [2, 4], "width_list": [0, 2], "within": [2, 4], "without": 1, "worker": [0, 3, 4], "worker_id": 4, "worker_init_fn": [0, 4], "wrap": 2, "write": 1, "write_metrics_to_yaml": [0, 1], "x": [1, 2], "x_pred": 2, "x_true": 2, "xcut_perc": 1, "xlabel": 1, "xlog": 1, "yaml": [1, 4], "\u00b5": 1}, "titles": ["codes package", "codes.benchmark package", "codes.surrogates package", "codes.train package", "codes.utils package", "codes", "codes.benchmark", "codes.benchmark.bench_fcts", "codes.benchmark.bench_plots", "codes.benchmark.bench_utils", "codes.surrogates", "codes.surrogates.surrogate_classes", "codes.surrogates.surrogates", "codes.train", "codes.train.train_fcts", "codes.utils", "codes.utils.data_utils", "codes.utils.utils", "CODES API Documentation", "codes"], "titleterms": {"api": 18, "bench_fct": [1, 7], "bench_plot": [1, 8], "bench_util": [1, 9], "benchmark": [1, 6, 7, 8, 9], "code": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "content": [0, 1, 2, 3, 4], "data_util": [4, 16], "document": 18, "modul": [0, 1, 2, 3, 4], "packag": [0, 1, 2, 3, 4], "submodul": [1, 2, 3, 4], "subpackag": 0, "surrog": [2, 10, 11, 12], "surrogate_class": [2, 11], "train": [3, 13, 14], "train_fct": [3, 14], "util": [4, 15, 16, 17]}}) \ No newline at end of file diff --git a/docs/assets/css/main.css b/docs/assets/css/main.css index e75c48d..0e0d223 100644 --- a/docs/assets/css/main.css +++ b/docs/assets/css/main.css @@ -3364,102 +3364,90 @@ input, select, textarea { } /* Header */ - #header { - display: -moz-flex; - display: -webkit-flex; - display: -ms-flex; - display: flex; - background-color: #5e42a6; - cursor: default; - padding: 1.75em 2em; - } - - #header > .title { - border: 0; - color: #ffffff; - display: block; - font-size: 1.25em; - font-weight: bold; - } - - #header > nav { - -moz-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - text-align: right; - } - - #header > nav > ul { - margin: 0; - padding: 0; - } - - #header > nav > ul > li { - display: inline-block; - margin-left: 1.75em; - padding: 0; - vertical-align: middle; - } - - #header > nav > ul > li:first-child { - margin-left: 0; - } - - #header > nav > ul > li a { - border: 0; - color: rgba(255, 255, 255, 0.35); - display: inline-block; - font-size: 0.6em; - font-weight: bold; - letter-spacing: 0.25em; - text-transform: uppercase; - } - - #header > nav > ul > li a:hover { - color: rgba(255, 255, 255, 0.55); - } - - #header > nav > ul > li a.active { - color: #ffffff; - } +#header { + display: flex; + align-items: center; + background-color: #5e42a6; + padding: 1.75em 2em; +} - @media screen and (max-width: 736px) { +#header a { + text-decoration: none; /* Remove underlines */ + border: none; /* Ensure no border around elements */ +} - #header { - padding: 1em 2em; - } +#header .logo img { + width: 50px; + height: 50px; + margin-right: 10px; + border: none; /* Ensure no border around the image */ +} - } +#header > nav { + margin-left: auto; /* Push the navigation to the right */ + flex-shrink: 0; /* Prevent shrinking */ + text-align: right; +} - @media screen and (max-width: 480px) { +#header > nav > ul { + display: flex; + gap: 1.75em; /* Adjust spacing between items */ + list-style: none; + margin: 0; + padding: 0; +} - #header { - display: block; - padding: 0 2em; - text-align: left; - } +#header > nav > ul > li a { + color: rgba(255, 255, 255, 0.35); + font-size: 0.75em; /* Adjust font size as needed */ + font-weight: bold; + letter-spacing: 0.25em; + text-transform: uppercase; + transition: color 0.2s ease-in-out; +} - #header .title { - font-size: 1.25em; - padding: 1em 0; - } +#header > nav > ul > li a:hover { + color: rgba(255, 255, 255, 0.55); +} - #header > nav { - border-top: solid 1px rgba(255, 255, 255, 0.15); - text-align: inherit; - } +#header > nav > ul > li a.active { + color: #ffffff; /* Highlight active link */ +} - #header > nav > ul > li { - margin-left: 1.5em; - } +/* Responsive adjustments */ +@media screen and (max-width: 736px) { + #header { + padding: 1em 2em; + } +} - #header > nav > ul > li a { - height: 6em; - line-height: 6em; - } +@media screen and (max-width: 480px) { + #header { + display: block; + padding: 0 2em; + text-align: left; + } + + #header .logo { + font-size: 1.25em; + padding: 1em 0; + } + + #header > nav { + border-top: solid 1px rgba(255, 255, 255, 0.15); + text-align: inherit; + } + + #header > nav > ul { + display: block; + text-align: left; + } + + #header > nav > ul > li { + margin-left: 1.5em; + } +} - } /* Wrapper (main) */ diff --git a/docs/benchmark.html b/docs/benchmark.html index 6552258..70a195a 100644 --- a/docs/benchmark.html +++ b/docs/benchmark.html @@ -12,19 +12,23 @@ -