From 654f35af98b1ea7768164f60a9b4a4b7a959d956 Mon Sep 17 00:00:00 2001 From: BradyPlanden Date: Mon, 11 Dec 2023 17:41:50 +0000 Subject: [PATCH] deploy: c34a9ea7b208fe6d723d05d0d32fce727b34136b --- .buildinfo | 4 - .doctrees/api/index.doctree | Bin 4092 -> 0 bytes .doctrees/api/pybop/_costs/index.doctree | Bin 46178 -> 0 bytes .doctrees/api/pybop/_dataset/index.doctree | Bin 14716 -> 0 bytes .doctrees/api/pybop/_problem/index.doctree | Bin 52852 -> 0 bytes .doctrees/api/pybop/index.doctree | Bin 566680 -> 0 bytes .../api/pybop/models/base_model/index.doctree | Bin 68848 -> 0 bytes .../pybop/models/empirical/ecm/index.doctree | Bin 25607 -> 0 bytes .../api/pybop/models/empirical/index.doctree | Bin 26300 -> 0 bytes .doctrees/api/pybop/models/index.doctree | Bin 4044 -> 0 bytes .../models/lithium_ion/echem/index.doctree | Bin 41220 -> 0 bytes .../pybop/models/lithium_ion/index.doctree | Bin 41954 -> 0 bytes .../api/pybop/optimisation/index.doctree | Bin 56430 -> 0 bytes .../optimisers/base_optimiser/index.doctree | Bin 33563 -> 0 bytes .doctrees/api/pybop/optimisers/index.doctree | Bin 3763 -> 0 bytes .../optimisers/nlopt_optimize/index.doctree | Bin 29674 -> 0 bytes .../optimisers/pints_optimisers/index.doctree | Bin 68641 -> 0 bytes .../optimisers/scipy_optimisers/index.doctree | Bin 45265 -> 0 bytes .doctrees/api/pybop/parameters/index.doctree | Bin 3696 -> 0 bytes .../pybop/parameters/parameter/index.doctree | Bin 31092 -> 0 bytes .../parameters/parameter_set/index.doctree | Bin 33376 -> 0 bytes .../api/pybop/parameters/priors/index.doctree | Bin 55146 -> 0 bytes .doctrees/api/pybop/plotting/index.doctree | Bin 3776 -> 0 bytes .../plotting/plot_convergence/index.doctree | Bin 13548 -> 0 bytes .../pybop/plotting/plot_cost2d/index.doctree | Bin 30655 -> 0 bytes .../plotting/plot_parameters/index.doctree | Bin 36228 -> 0 bytes .../plotting/plotly_manager/index.doctree | Bin 29834 -> 0 bytes .../pybop/plotting/quick_plot/index.doctree | Bin 44993 -> 0 bytes .doctrees/api/pybop/version/index.doctree | Bin 4917 -> 0 bytes .doctrees/contributing.doctree | Bin 70058 -> 0 bytes .doctrees/environment.pickle | Bin 2839175 -> 0 bytes .doctrees/index.doctree | Bin 9995 -> 0 bytes .doctrees/user_guide/index.doctree | Bin 3484 -> 0 bytes .doctrees/user_guide/installation.doctree | Bin 12884 -> 0 bytes .doctrees/user_guide/usage.doctree | Bin 15620 -> 0 bytes _modules/index.html | 482 --- _modules/pybop.html | 558 ---- _modules/pybop/_costs.html | 720 ----- _modules/pybop/_dataset.html | 540 ---- _modules/pybop/_problem.html | 775 ----- _modules/pybop/models/base_model.html | 871 ----- _modules/pybop/models/empirical/ecm.html | 547 ---- _modules/pybop/models/lithium_ion/echem.html | 611 ---- _modules/pybop/optimisation.html | 966 ------ _modules/pybop/optimisers/base_optimiser.html | 567 ---- _modules/pybop/optimisers/nlopt_optimize.html | 592 ---- .../pybop/optimisers/pints_optimisers.html | 708 ---- .../pybop/optimisers/scipy_optimisers.html | 693 ---- _modules/pybop/parameters/parameter.html | 605 ---- _modules/pybop/parameters/parameter_set.html | 640 ---- _modules/pybop/parameters/priors.html | 761 ----- _modules/pybop/plotting/plot_convergence.html | 523 --- _modules/pybop/plotting/plot_cost2d.html | 635 ---- _modules/pybop/plotting/plot_parameters.html | 634 ---- _modules/pybop/plotting/plotly_manager.html | 633 ---- _modules/pybop/plotting/quick_plot.html | 720 ----- _modules/pybop/version.html | 471 --- _sources/api/index.rst.txt | 12 - _sources/api/pybop/_costs/index.rst.txt | 156 - _sources/api/pybop/_dataset/index.rst.txt | 53 - _sources/api/pybop/_problem/index.rst.txt | 143 - _sources/api/pybop/index.rst.txt | 1607 --------- .../api/pybop/models/base_model/index.rst.txt | 181 -- .../pybop/models/empirical/ecm/index.rst.txt | 49 - .../api/pybop/models/empirical/index.rst.txt | 58 - _sources/api/pybop/models/index.rst.txt | 25 - .../models/lithium_ion/echem/index.rst.txt | 78 - .../pybop/models/lithium_ion/index.rst.txt | 87 - _sources/api/pybop/optimisation/index.rst.txt | 159 - .../optimisers/base_optimiser/index.rst.txt | 86 - _sources/api/pybop/optimisers/index.rst.txt | 18 - .../optimisers/nlopt_optimize/index.rst.txt | 84 - .../optimisers/pints_optimisers/index.rst.txt | 191 -- .../optimisers/scipy_optimisers/index.rst.txt | 118 - _sources/api/pybop/parameters/index.rst.txt | 17 - .../pybop/parameters/parameter/index.rst.txt | 98 - .../parameters/parameter_set/index.rst.txt | 98 - .../api/pybop/parameters/priors/index.rst.txt | 181 -- _sources/api/pybop/plotting/index.rst.txt | 19 - .../plotting/plot_convergence/index.rst.txt | 40 - .../pybop/plotting/plot_cost2d/index.rst.txt | 75 - .../plotting/plot_parameters/index.rst.txt | 72 - .../plotting/plotly_manager/index.rst.txt | 108 - .../pybop/plotting/quick_plot/index.rst.txt | 113 - _sources/api/pybop/version/index.rst.txt | 14 - _sources/contributing.md.txt | 2 - _sources/index.md.txt | 38 - _sources/user_guide/index.md.txt | 22 - _sources/user_guide/installation.rst.txt | 66 - _sources/user_guide/usage.rst.txt | 61 - ...e.1e8bd061cd6da7fc9cf755528e8ffc24.min.css | 1 - _sphinx_design_static/design-tabs.js | 27 - _static/basic.css | 925 ------ _static/check-solid.svg | 4 - _static/clipboard.min.js | 7 - _static/copy-button.svg | 5 - _static/copybutton.css | 94 - _static/copybutton.js | 248 -- _static/copybutton_funcs.js | 73 - _static/custom-icon.js | 17 - ...e.1e8bd061cd6da7fc9cf755528e8ffc24.min.css | 1 - _static/design-tabs.js | 27 - _static/doctools.js | 156 - _static/documentation_options.js | 13 - _static/file.png | Bin 286 -> 0 bytes _static/graphviz.css | 19 - _static/language_data.js | 199 -- _static/minus.png | Bin 90 -> 0 bytes _static/plus.png | Bin 90 -> 0 bytes _static/pygments.css | 152 - _static/scripts/bootstrap.js | 3 - _static/scripts/bootstrap.js.LICENSE.txt | 5 - _static/scripts/bootstrap.js.map | 1 - _static/scripts/pydata-sphinx-theme.js | 2 - _static/scripts/pydata-sphinx-theme.js.map | 1 - _static/searchtools.js | 574 ---- _static/sphinx_highlight.js | 154 - _static/styles/bootstrap.css | 6 - _static/styles/bootstrap.css.map | 1 - _static/styles/pydata-sphinx-theme.css | 2 - _static/styles/pydata-sphinx-theme.css.map | 1 - _static/styles/theme.css | 2 - _static/vendor/fontawesome/6.1.2/LICENSE.txt | 165 - .../vendor/fontawesome/6.1.2/css/all.min.css | 5 - .../vendor/fontawesome/6.1.2/js/all.min.js | 2 - .../6.1.2/js/all.min.js.LICENSE.txt | 5 - .../6.1.2/webfonts/fa-brands-400.ttf | Bin 181264 -> 0 bytes .../6.1.2/webfonts/fa-brands-400.woff2 | Bin 105112 -> 0 bytes .../6.1.2/webfonts/fa-regular-400.ttf | Bin 60236 -> 0 bytes .../6.1.2/webfonts/fa-regular-400.woff2 | Bin 24028 -> 0 bytes .../6.1.2/webfonts/fa-solid-900.ttf | Bin 389948 -> 0 bytes .../6.1.2/webfonts/fa-solid-900.woff2 | Bin 154840 -> 0 bytes .../6.1.2/webfonts/fa-v4compatibility.ttf | Bin 10084 -> 0 bytes .../6.1.2/webfonts/fa-v4compatibility.woff2 | Bin 4776 -> 0 bytes _static/webpack-macros.html | 31 - api/index.html | 541 ---- api/pybop/_costs/index.html | 740 ----- api/pybop/_dataset/index.html | 611 ---- api/pybop/_problem/index.html | 733 ----- api/pybop/index.html | 2873 ----------------- api/pybop/models/base_model/index.html | 804 ----- api/pybop/models/empirical/ecm/index.html | 592 ---- api/pybop/models/empirical/index.html | 601 ---- api/pybop/models/index.html | 567 ---- api/pybop/models/lithium_ion/echem/index.html | 619 ---- api/pybop/models/lithium_ion/index.html | 628 ---- api/pybop/optimisation/index.html | 792 ----- .../optimisers/base_optimiser/index.html | 660 ---- api/pybop/optimisers/index.html | 554 ---- .../optimisers/nlopt_optimize/index.html | 662 ---- .../optimisers/pints_optimisers/index.html | 771 ----- .../optimisers/scipy_optimisers/index.html | 714 ---- api/pybop/parameters/index.html | 553 ---- api/pybop/parameters/parameter/index.html | 680 ---- api/pybop/parameters/parameter_set/index.html | 676 ---- api/pybop/parameters/priors/index.html | 818 ----- api/pybop/plotting/index.html | 555 ---- .../plotting/plot_convergence/index.html | 593 ---- api/pybop/plotting/plot_cost2d/index.html | 643 ---- api/pybop/plotting/plot_parameters/index.html | 641 ---- api/pybop/plotting/plotly_manager/index.html | 703 ---- api/pybop/plotting/quick_plot/index.html | 693 ---- api/pybop/version/index.html | 553 ---- contributing.html | 797 ----- genindex.html | 1576 --------- index.html | 488 --- objects.inv | Bin 2840 -> 0 bytes py-modindex.html | 585 ---- search.html | 464 --- searchindex.js | 1 - user_guide/index.html | 511 --- user_guide/installation.html | 560 ---- user_guide/usage.html | 558 ---- 173 files changed, 47423 deletions(-) delete mode 100644 .buildinfo delete mode 100644 .doctrees/api/index.doctree delete mode 100644 .doctrees/api/pybop/_costs/index.doctree delete mode 100644 .doctrees/api/pybop/_dataset/index.doctree delete mode 100644 .doctrees/api/pybop/_problem/index.doctree delete mode 100644 .doctrees/api/pybop/index.doctree delete mode 100644 .doctrees/api/pybop/models/base_model/index.doctree delete mode 100644 .doctrees/api/pybop/models/empirical/ecm/index.doctree delete mode 100644 .doctrees/api/pybop/models/empirical/index.doctree delete mode 100644 .doctrees/api/pybop/models/index.doctree delete mode 100644 .doctrees/api/pybop/models/lithium_ion/echem/index.doctree delete mode 100644 .doctrees/api/pybop/models/lithium_ion/index.doctree delete mode 100644 .doctrees/api/pybop/optimisation/index.doctree delete mode 100644 .doctrees/api/pybop/optimisers/base_optimiser/index.doctree delete mode 100644 .doctrees/api/pybop/optimisers/index.doctree delete mode 100644 .doctrees/api/pybop/optimisers/nlopt_optimize/index.doctree delete mode 100644 .doctrees/api/pybop/optimisers/pints_optimisers/index.doctree delete mode 100644 .doctrees/api/pybop/optimisers/scipy_optimisers/index.doctree delete mode 100644 .doctrees/api/pybop/parameters/index.doctree delete mode 100644 .doctrees/api/pybop/parameters/parameter/index.doctree delete mode 100644 .doctrees/api/pybop/parameters/parameter_set/index.doctree delete mode 100644 .doctrees/api/pybop/parameters/priors/index.doctree delete mode 100644 .doctrees/api/pybop/plotting/index.doctree delete mode 100644 .doctrees/api/pybop/plotting/plot_convergence/index.doctree delete mode 100644 .doctrees/api/pybop/plotting/plot_cost2d/index.doctree delete mode 100644 .doctrees/api/pybop/plotting/plot_parameters/index.doctree delete mode 100644 .doctrees/api/pybop/plotting/plotly_manager/index.doctree delete mode 100644 .doctrees/api/pybop/plotting/quick_plot/index.doctree delete mode 100644 .doctrees/api/pybop/version/index.doctree delete mode 100644 .doctrees/contributing.doctree delete mode 100644 .doctrees/environment.pickle delete mode 100644 .doctrees/index.doctree delete mode 100644 .doctrees/user_guide/index.doctree delete mode 100644 .doctrees/user_guide/installation.doctree delete mode 100644 .doctrees/user_guide/usage.doctree delete mode 100644 _modules/index.html delete mode 100644 _modules/pybop.html delete mode 100644 _modules/pybop/_costs.html delete mode 100644 _modules/pybop/_dataset.html delete mode 100644 _modules/pybop/_problem.html delete mode 100644 _modules/pybop/models/base_model.html delete mode 100644 _modules/pybop/models/empirical/ecm.html delete mode 100644 _modules/pybop/models/lithium_ion/echem.html delete mode 100644 _modules/pybop/optimisation.html delete mode 100644 _modules/pybop/optimisers/base_optimiser.html delete mode 100644 _modules/pybop/optimisers/nlopt_optimize.html delete mode 100644 _modules/pybop/optimisers/pints_optimisers.html delete mode 100644 _modules/pybop/optimisers/scipy_optimisers.html delete mode 100644 _modules/pybop/parameters/parameter.html delete mode 100644 _modules/pybop/parameters/parameter_set.html delete mode 100644 _modules/pybop/parameters/priors.html delete mode 100644 _modules/pybop/plotting/plot_convergence.html delete mode 100644 _modules/pybop/plotting/plot_cost2d.html delete mode 100644 _modules/pybop/plotting/plot_parameters.html delete mode 100644 _modules/pybop/plotting/plotly_manager.html delete mode 100644 _modules/pybop/plotting/quick_plot.html delete mode 100644 _modules/pybop/version.html delete mode 100644 _sources/api/index.rst.txt delete mode 100644 _sources/api/pybop/_costs/index.rst.txt delete mode 100644 _sources/api/pybop/_dataset/index.rst.txt delete mode 100644 _sources/api/pybop/_problem/index.rst.txt delete mode 100644 _sources/api/pybop/index.rst.txt delete mode 100644 _sources/api/pybop/models/base_model/index.rst.txt delete mode 100644 _sources/api/pybop/models/empirical/ecm/index.rst.txt delete mode 100644 _sources/api/pybop/models/empirical/index.rst.txt delete mode 100644 _sources/api/pybop/models/index.rst.txt delete mode 100644 _sources/api/pybop/models/lithium_ion/echem/index.rst.txt delete mode 100644 _sources/api/pybop/models/lithium_ion/index.rst.txt delete mode 100644 _sources/api/pybop/optimisation/index.rst.txt delete mode 100644 _sources/api/pybop/optimisers/base_optimiser/index.rst.txt delete mode 100644 _sources/api/pybop/optimisers/index.rst.txt delete mode 100644 _sources/api/pybop/optimisers/nlopt_optimize/index.rst.txt delete mode 100644 _sources/api/pybop/optimisers/pints_optimisers/index.rst.txt delete mode 100644 _sources/api/pybop/optimisers/scipy_optimisers/index.rst.txt delete mode 100644 _sources/api/pybop/parameters/index.rst.txt delete mode 100644 _sources/api/pybop/parameters/parameter/index.rst.txt delete mode 100644 _sources/api/pybop/parameters/parameter_set/index.rst.txt delete mode 100644 _sources/api/pybop/parameters/priors/index.rst.txt delete mode 100644 _sources/api/pybop/plotting/index.rst.txt delete mode 100644 _sources/api/pybop/plotting/plot_convergence/index.rst.txt delete mode 100644 _sources/api/pybop/plotting/plot_cost2d/index.rst.txt delete mode 100644 _sources/api/pybop/plotting/plot_parameters/index.rst.txt delete mode 100644 _sources/api/pybop/plotting/plotly_manager/index.rst.txt delete mode 100644 _sources/api/pybop/plotting/quick_plot/index.rst.txt delete mode 100644 _sources/api/pybop/version/index.rst.txt delete mode 100644 _sources/contributing.md.txt delete mode 100644 _sources/index.md.txt delete mode 100644 _sources/user_guide/index.md.txt delete mode 100644 _sources/user_guide/installation.rst.txt delete mode 100644 _sources/user_guide/usage.rst.txt delete mode 100644 _sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css delete mode 100644 _sphinx_design_static/design-tabs.js delete mode 100644 _static/basic.css delete mode 100644 _static/check-solid.svg delete mode 100644 _static/clipboard.min.js delete mode 100644 _static/copy-button.svg delete mode 100644 _static/copybutton.css delete mode 100644 _static/copybutton.js delete mode 100644 _static/copybutton_funcs.js delete mode 100644 _static/custom-icon.js delete mode 100644 _static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css delete mode 100644 _static/design-tabs.js delete mode 100644 _static/doctools.js delete mode 100644 _static/documentation_options.js delete mode 100644 _static/file.png delete mode 100644 _static/graphviz.css delete mode 100644 _static/language_data.js delete mode 100644 _static/minus.png delete mode 100644 _static/plus.png delete mode 100644 _static/pygments.css delete mode 100644 _static/scripts/bootstrap.js delete mode 100644 _static/scripts/bootstrap.js.LICENSE.txt delete mode 100644 _static/scripts/bootstrap.js.map delete mode 100644 _static/scripts/pydata-sphinx-theme.js delete mode 100644 _static/scripts/pydata-sphinx-theme.js.map delete mode 100644 _static/searchtools.js delete mode 100644 _static/sphinx_highlight.js delete mode 100644 _static/styles/bootstrap.css delete mode 100644 _static/styles/bootstrap.css.map delete mode 100644 _static/styles/pydata-sphinx-theme.css delete mode 100644 _static/styles/pydata-sphinx-theme.css.map delete mode 100644 _static/styles/theme.css delete mode 100644 _static/vendor/fontawesome/6.1.2/LICENSE.txt delete mode 100644 _static/vendor/fontawesome/6.1.2/css/all.min.css delete mode 100644 _static/vendor/fontawesome/6.1.2/js/all.min.js delete mode 100644 _static/vendor/fontawesome/6.1.2/js/all.min.js.LICENSE.txt delete mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-brands-400.ttf delete mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-brands-400.woff2 delete mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-regular-400.ttf delete mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-regular-400.woff2 delete mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-solid-900.ttf delete mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-solid-900.woff2 delete mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-v4compatibility.ttf delete mode 100644 _static/vendor/fontawesome/6.1.2/webfonts/fa-v4compatibility.woff2 delete mode 100644 _static/webpack-macros.html delete mode 100644 api/index.html delete mode 100644 api/pybop/_costs/index.html delete mode 100644 api/pybop/_dataset/index.html delete mode 100644 api/pybop/_problem/index.html delete mode 100644 api/pybop/index.html delete mode 100644 api/pybop/models/base_model/index.html delete mode 100644 api/pybop/models/empirical/ecm/index.html delete mode 100644 api/pybop/models/empirical/index.html delete mode 100644 api/pybop/models/index.html delete mode 100644 api/pybop/models/lithium_ion/echem/index.html delete mode 100644 api/pybop/models/lithium_ion/index.html delete mode 100644 api/pybop/optimisation/index.html delete mode 100644 api/pybop/optimisers/base_optimiser/index.html delete mode 100644 api/pybop/optimisers/index.html delete mode 100644 api/pybop/optimisers/nlopt_optimize/index.html delete mode 100644 api/pybop/optimisers/pints_optimisers/index.html delete mode 100644 api/pybop/optimisers/scipy_optimisers/index.html delete mode 100644 api/pybop/parameters/index.html delete mode 100644 api/pybop/parameters/parameter/index.html delete mode 100644 api/pybop/parameters/parameter_set/index.html delete mode 100644 api/pybop/parameters/priors/index.html delete mode 100644 api/pybop/plotting/index.html delete mode 100644 api/pybop/plotting/plot_convergence/index.html delete mode 100644 api/pybop/plotting/plot_cost2d/index.html delete mode 100644 api/pybop/plotting/plot_parameters/index.html delete mode 100644 api/pybop/plotting/plotly_manager/index.html delete mode 100644 api/pybop/plotting/quick_plot/index.html delete mode 100644 api/pybop/version/index.html delete mode 100644 contributing.html delete mode 100644 genindex.html delete mode 100644 index.html delete mode 100644 objects.inv delete mode 100644 py-modindex.html delete mode 100644 search.html delete mode 100644 searchindex.js delete mode 100644 user_guide/index.html delete mode 100644 user_guide/installation.html delete mode 100644 user_guide/usage.html diff --git a/.buildinfo b/.buildinfo deleted file mode 100644 index ee360a5e8..000000000 --- a/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# 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: 51ebcd00860f0f99ab05ad36f646486b -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/api/index.doctree b/.doctrees/api/index.doctree deleted file mode 100644 index c367bab9e0ad157925dab0eb65c2dadca4ce4112..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4092 zcmb_fU5gyY72U6yo!Q-)(aM$xSnG^2j%DJRksx5p1cM_2iPqT&V~lYS?V9eIsrGhv zb*iehvkwkRh>aHNO_i6BzmSk8ga3hF4E`&5&P&d%?w;wHh!B$qR!rZjx^+L!J@?j= z)}Q_{*z*7EK<6UP7GoAgnT)u0wiC&)NO@-5Gxx^t-RJJM?J9PmWuZdu>=t%}B2FU3 zGxx~ZK5aK~qQ}+wea%A?%WQdEv_xC%KXSK4*S1V-65d#{z4spea`*wCap;47+K7F7 zAMynmu(|w&D=lj04Ev1}$F>_R4Hmn$UDU^q9R{?Oj&rY_>A@xcHgi$Ejcj|FNq^@OYDjhduJkK$|tJGGOi{U zQk_p8UjFRY53B!So}REgp2S(i7h|Pi_RFU`#T0&a;Rl;5mWyUge*U3|^)P31J`81M zSe)r0D~ue?Ic{KvM?;Dl%qpWctRuiE@WbD{I=lNQ82eb>7B}s?|C>5j1sxtwN{`RP z%ZMw?zdn=FWYX|pX-m_Oc4o?I^Bg@|Z_B2zz0{xM9JXGkj^m z=GCNbBu>PeNZMYVb?<#AlxZ%DENb{%LS1YDDl#;RH?dx=)vj({1l{l3eV|&!9*Adl zKu+bCQ<<08abG%SkK!y$iU?6i{5J6!vz?SJBAy%JPIrK6miq!k4a^fcbyv16;wVDB zUfEuCdMW5+MLGqH5Th-7;LB6XEV*<~?E%VuWe&yRQ5A~bpGQyex;rgM4cK$jWF7?`-*#@U&KZXKP_2mL?A#+hCda?iBcJ{VpPn?gi*ZSt;JrVTym!;~ z*4$};@Y&i)5W;f{>An9?08jz__0Tjd`AgH1^~^TYX!pv3+f-!Ru)I*Qv!m~o9AB<~ zMhu_%nra)S=6uzAM9bd!zUeOcrY^I8b9qTF&snMIrgldBl~VjSltRt5#3iM*{~cu< z5j=`%WAlTR0YqY~<~VVmiC;kZsd%3*{asaSq`-HYrV`sj8H|=jtq9XEtUAL=JE=T? zs@*cpp3cyN{zIbcRw~}KFB-)%o%r?=_DJzuDib99G3W@aeIQt}{A}4{ zzK9Vu!%U&;O)cAs__Ubgy8Z=I8KQaY7vK!3Zk2Az5z(ge@>~gkSnAzy< zk&f~E*7{<=m69qDEQ=CwHYOOQ!hV(&tobsz$Tjmg-M*o#{KHr>$acsd^M?&Ge;zuGT2U)VSi9lH^h3J zUm78^u~hSkvo~m`Hvl^W!&9WkARQgZN3Y%a3F6sTvv5N_NmlBARI5j&GQ#UQSL2wQ znZE_V}^^~x>A<#J? zkxm(^?6(DGREY@qU=M6)8|EwE9jZyhog!FFiAlY zXER`+W`*m-6S|mg?2A(ZZz5S)iu5iycfbtBt_bye2@?cI%e%5SLhL#Zc*^1=z>ADn z)|-7?y{Q1!WL9$8mEGmpV|w4vm`hxO;sq4($cRxKCMX-Jf7=|xC_u}ATmc)5j>O&e z`kJ(S@jwi1v*iahC`{n@nD+gh-c6r7@t_jz)4o!6TYM+J72k*l;%o6$VY{?qE^}B< zgZ+0`;+v=9>!*cyg+9MUL%T2TVe=F5mH2yMd(Gt1k4h=SLYBiaZ+VZ( zxjsT3iYLq-H-+U^uYk~zPGzzLkPpd=8^Zd4?Kbt=Zhf~ubbaj#kh3yG-8VLMRV$dM zK{+8_2$UOp7|J9;X5a~W&i?&M{*2u1!rjwt{e}AgWrQ~&3KFkT4d9d)FBxb}e7F?* Z+#go6J+L;XC+$H*Bw6tZwS7#={{nIAHv#|v diff --git a/.doctrees/api/pybop/_costs/index.doctree b/.doctrees/api/pybop/_costs/index.doctree deleted file mode 100644 index 63772337ed6db941edd252ab233915edf368a560..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46178 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

pZxU)7>CZV#q2_Z7tH@O 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 m!$fx)#ru`CvVY9NLKy3H+y|?dl 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 diff --git a/.doctrees/api/pybop/_problem/index.doctree b/.doctrees/api/pybop/_problem/index.doctree deleted file mode 100644 index bc58c94e0a88512a3f0d31ed4c7ec57491cbccc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52852 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 {LSm^jR=O+$*qF;SoMfhABzp83EE$d?l- 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 Mx(6am({IoH8wGp#^#A|> diff --git a/.doctrees/api/pybop/models/base_model/index.doctree b/.doctrees/api/pybop/models/base_model/index.doctree deleted file mode 100644 index 12aa82ae0e630d01b5f8d533f478418206a331e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68848 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 diff --git a/.doctrees/api/pybop/models/empirical/ecm/index.doctree b/.doctrees/api/pybop/models/empirical/ecm/index.doctree deleted file mode 100644 index 0bf9f94e20978e318398edfaaf9f1fb6e73bb10f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25607 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 W1_<;fY0gxOEU`3NG`9%Xm;Vpu>BcDl diff --git a/.doctrees/api/pybop/models/index.doctree b/.doctrees/api/pybop/models/index.doctree deleted file mode 100644 index 851a5debf1fb55252f67695de408e1c990d59c70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4044 zcmb7HTZ<&O6`q}$zRmrzy9voIYy$Rj&s3pOO3ip-I7ODs;H!$ z?uS4^*kqe1S1aVnU@+ttod+O|g zU#__*E~@>#g2tN5tl7>wtjl^&-5DF$j^)|9>fB%eP?W%A@IpO0mJfln%mE9ZBx z4ZD}qEaBNSnkhPI?PI55!NB$e*HjVls=4i7)0sB|T3Wi@b61+x%?XUqjyxe9Y1n)09(!zmIAk)VLuImzs^N`P*TWCyKmPd#)qmW#7{2bxBcwNJ(^pY(Bw0eC9YT$(Itb0bg@4(n+dYem~!ENObH%W$P1*|yt8 z_R&l6q-o9-kBO*&_(wqJyDzN*XBjtXgf!8tqjryHu`mgpa8bsEJ!gNSwx5z&LUYaB zYj;W%FyWFrlA@>wA6La^%?jWZvA>f@j zs{l2Cp=KS0_OSBT`HdoZPL(5VM*95)_O*flAkfB_cDHE7oz#S07gzlD+IFC=4RasT z*WhXgxGG`Vz^W};qUt~YAF4iUq3Q%z&^3}Pu*}!Sx1}r(9`=W)K*M)lLc^F8G{WWS z5;TM@km^1s?9WIFcEtX&V1He(zb)9`FE`jfUa)^6W41ze3ibb84;lOSD?`+>Xf;GT z2vP0AWrS9xuL%&mvyAr{yQ+$gF99fMjy5r0Ek>kH>UGe!S{_GkyPfz=nPTtTyIPT~ z5X4g>%9WfdT9jp~qoqc54EV3s1UeXh-W_`o8|8~&)RervT2hui+b^irsK96qj+M47b!TJ49+Y~Qcc^ziSe;ngY>&JRz*@oJA_1G6 z-4`UA8q_p+Ji&Mq>DZns8cUT#$lX8+j`7uYWV^A|u}u0{HMRMR`F@BBNRAA$5d)MfKJ9=yna+*iJJp(J_;4rknIq;6Vdve%sGOhFC$#4j9agon8 zli7t-)1kBX{K{|vtc)~jF){+e(TDu}jd$LKKM&L-UQ_QSOZ9Ko>OofGA$v{L1*duv z&OibfGMx$>Hqc}Y7A3we_w7SqGL0H~HU>lmx*dwzd{oRcO=c0}Qzq~Oez%46(BCUk z0;2uKfY${absEOyFcK2I1jJ~1AI6N}J_vltH+VU?5WBBUjwAe2B-HpS51=7{gl7|A zpiT@YK2;#mudU;$2d|K%WTS8UuN^Rh?jZq%=ePo+Xnhyq7BzR zuHHQWtC*B&ZDF@)_RK#YY`;t=;4h$vUX_C!Iw~9LVBIk;1!!r!rI5nW1o`xBPgbPm z%K>6&n=}Le81Qcq$a`K`exI?g*;njS_6hrvePQgt&-f=ms0!@s1^aZtzFZjgwtr)M zg;wJV9b>oZ@atq=cd$(#!>*djSl2DI-UVu$dx3)T(NB?Bsy1r7ZeY+ge1gX43-+0@ z`)!1TEAQh8QkE^4QA&IwsMnRgX-hnMgA|BL$5J$)3&Oi=!e;egMdP48HEcRr(T|+2 zv@as})^$}gXeE)RVszHPA|6w*6avvi+)%1|KdIy&BOuS+FF`pxGkt>tpoFd;P(Eq0 f)rxqx5eJ;?R_!csIrRkCNqj=Ba*yv4%=qGecUdm7 diff --git a/.doctrees/api/pybop/models/lithium_ion/echem/index.doctree b/.doctrees/api/pybop/models/lithium_ion/echem/index.doctree deleted file mode 100644 index 6cd26c83cf69877c2601cf579335a682be81bcd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41220 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 U_6k|qOoK34!WYdldP@uc3$?UBQvd(} diff --git a/.doctrees/api/pybop/optimisation/index.doctree b/.doctrees/api/pybop/optimisation/index.doctree deleted file mode 100644 index 716665f5a56c5dad2679305898197da5b3135cce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56430 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 JE^yPc-vOuu&CdV; diff --git a/.doctrees/api/pybop/optimisers/nlopt_optimize/index.doctree b/.doctrees/api/pybop/optimisers/nlopt_optimize/index.doctree deleted file mode 100644 index 737c6f56604cd471777156c57adba49309e35784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29674 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 diff --git a/.doctrees/api/pybop/optimisers/pints_optimisers/index.doctree b/.doctrees/api/pybop/optimisers/pints_optimisers/index.doctree deleted file mode 100644 index 163017357cac78103c9680ec66fe5b6fb14260ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68641 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 eDSEOb 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 diff --git a/.doctrees/api/pybop/parameters/parameter/index.doctree b/.doctrees/api/pybop/parameters/parameter/index.doctree deleted file mode 100644 index e0862b0ff4ce8a73f74213698aa543f3d75d6cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31092 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 b=60LyL5o(@3VFr(7HtK>Yf@x0SX%u5$AkeA diff --git a/.doctrees/api/pybop/plotting/index.doctree b/.doctrees/api/pybop/plotting/index.doctree deleted file mode 100644 index c34f52ea24e668765a276429e0976095f6174369..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3776 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 b@fb6#vKds!Sk=hksL diff --git a/.doctrees/api/pybop/plotting/plot_cost2d/index.doctree b/.doctrees/api/pybop/plotting/plot_cost2d/index.doctree deleted file mode 100644 index 3503605776e790541d93b8dbfa6cd43d5bb7251d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30655 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 KG{WdDE&M+vmCMBd diff --git a/.doctrees/api/pybop/plotting/plot_parameters/index.doctree b/.doctrees/api/pybop/plotting/plot_parameters/index.doctree deleted file mode 100644 index d92981334fb43dc1b8f5e6fbdc6f32dadc0e1acc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36228 zcmd5_X^3_4JtbBLLQp7Jrf0P?vl7y3y|5S|dyx9ggt9B?LZ1gaYH^7Y^Gp;J^_In+O?$vBUmeW>#fZ zbyap(&&-Auq1mpiJl=cx^2?X`US&Qw@}Bi~Y-9gL`+|<`wAbd$X0z=ztssuZn_i>4 zYPG}o(Rk*e_<^_d!0Y-AD~`4yN5ghnP2XzA_r=j(${sqcU`~`D3#>-ycf zJz|gAWB0{1dmvoucF$C&iaW}uX*B3XMM@*%yn8`7&`40_M_f0eRI_cEk8ID zQyuoUXm`hIH<6*f=3C23P4=ZM!$dUJa!|l*6}{Vam$gQWMbFo_7C#(w)<;1B$-;hK zG*M3_WABVcg+LafT`i|=#S7gfGnzER(07))Ap}W++vzj|64F?sWd;EfA%$ocBRtyC zS&yU9&iX8vkF98=4Mth!@n*LpAC}C3Gib-Y7Lu98 z|JURH8}R=zv^k1WAUKX{X2+Rl?9L~`Wj_?*&O7a^`bAtC_7hSs$jpKpwi{DgXX!n>NfM1D(( z{KoafOq}Yr8B(NVC@GSFbJYk46asd$4%{D_OWl^~*Bf4|9(1gR3JeUH%KLH`%OCAu zeB&=(_rNb+|3LC@O#J>T#3P!E&TO*Mp1A(H6E8Enp%-*lS51HY<}RFKaA&zG0aS+emSHE^Sk^!rlZ&c!_$` z3{AASRzGL9x>lgHrPP?9maNsV&Ur1&I$j&~Gjh`ggPPX~omHyTTyugtn{d$Hdgh6x zQfsHds}b6ktkLk6WkZ3{?E08&SQb{X^A?lZH9Ecrp#?@apx0DQYkiK7Cz|GR9l&Qm zOn{@|itlwhJt|0(;}{gQqJEB}$a$w3+VSm^q>>+nO8z#q{&$igFB&eLC6o&8Q7a%G zmb~VAA)z~c?|k8l5rV$nGT?23I%vf=JGN3VdYC4EZ^=DzMx&U<%k*G4rz!jLGmFNe z(Co!~7rAaPGUdhtw0rTs#TnLXHT$weX3^5tlf^aVs-#K#Tg-SdqN_B_Bt{AP_}k^6 zShMG)Z2{TFmTDGIACv9ylx{LiZ3p`m8I#~Us!2dqXH9}f6qCR{)z`$bU$tQ08bQ=L zvrpH#41~#IxESEeOo%5jw2bJvX3+M<|L3nA{*=1`D>G50X_H?7l* zXpcZLPOKal?h&m{34(6 zUn%`Sh19XB*K&+a_f{&w7E|sES&RDN45V_O&nYV(3iAT2xagP#skQeKfT~UeN>L$aRQI*Pa``znF@u?d5n11h!WaiwF>73TX7+d?P`!Hd zNXmoNuaF*au-ccSUl}G3Yqe!CxO%8hx0b=xJ5g>JxSHz&S9xwPI$%A(1OmW1Qf0ZO z^a@o_4ZJ=~B{+D!g|)69_5@z%IhEz$wQzb1mXAiX+0{zu`@@{r^fDm3^xZ;czh6ma z10j<>(;vgE!cw+8Q?!fL%Q3d;Fx~zpa(^Ii&P4~6O%bEzwO9DM+{~|t9z*H(16G?qu1YX#JKUMV>7UC$#ZaW`gGzEpiRtk7Pgk#4Qu*{p=|G*T=3f1yE=Th zWv+YOuznW1)GI-<%!dbo5l9{n+DexjyU`2!z-D55^vx#++}MsRPGtvNEt-OyW}#1v zlxPo8#`ezHb7tl4{s1G;{Z|@>_HlQF>OJIcPpfA;)|Wx~wnY<+zdUo=orOxf5AKy| zt3}(wwP>7};v9_=E&Z6eT*J&Ij2ULtk{_t$U_)Q&GO>BNWm?0!TxxYnhf2e!F#DMh zxA9IS{jcY{Ad}I+ULf0eRc5uDw1SPcx8po?xi@mzU59^k0G8FBd0yyRR>(bye-gxs z4l>(-c7N63$Hm|tQ*%zFIg@drq{tC)n%ZJcl_F(vUy0XcOuYv0m_{F9NCG*HE;(3!%S$Gfq>D@6OTIs@r|7MDiu(64 zCv+3~cz=F&Eb7)NB~!w7CQY*XRXwY^G5tjp9k7d^(zl}PV$n*bi+7P(kTAv{BuC%T zw>3oPaS}G6^Y-No8PRu{L9*lU;e<2#Df#*jJzqK*{*d=n2J`o1Osb^GT&iq+=gy(A zpSM1g_y#EyUAYSAb?OA~G7tifFfSO)&XC}W3@i*=9x_8N*mI6`zJa)zINF!|tefqI zotdEe`QX$biRn5w?SnoM8*wy(&F9RoeN?E9K(;7-pnNAtQ)U z!L%AjlVq~NrGwa=tivc8##?o@#Su-#mpPt{$xG$8YD-GDR_pZy$#_c zER`FASL;mw8CprX{|ll-=*49q|G()Gh6A$zxXs?+aSO`ipX{~&zw~~*Qmg*z`V#Cj zFA#;DTmjyHR+I$q6Vc?dW3`%GH>D+#a1Ku`dtV@wv}oQColI9zY3zlXBnR+f6%O2c zxZb^i{^21sWWJ?T6#A3#dJ5qgEh{W%aDs+q9Z_AYJxtoNhf`s9BB`^=laNsx;;c5DA)ZgtJ}ptiE@ciCc(!^ z7sEy^>~>lf>6_CIfhY(^^4eyLgAO8%Xl+ezDe8zy8D?PASP;(EfDBg#(fV0QLVuZ;g zAx=C=!uIUSRyNRRoJ66m()N9*yHMM?G_uTTf#%RKtO=QGfo3PPD-kIBEya0km^NRs zh2lJ3MVvd1q^M0lC0h%_ur-J%$CELd$WtcB*6YKxzPN=#HT6QxBXZAxEkNXgJh$An z36LeFm~Wv!Q2&tOj~)?10;9oz`fj$}Wz=B66<{-esep4HiLXg5XVw33O(81x*(ZB% zC4~}b{2NT6deE4X2S?+bU_McG_FMMPr*jqQO3$7fM@Arf;*WRbWO zI-VGYEg@?y3QMFA#hPUcq)!Hn?n9K&PP{B-^)WWHeEJl=%SCWjtn=uqBSbtLT z;CQ25Z5p|%^kfOdxtftxo^>OLa}DY)L>w-QEaGTwzvIKOCM2#!oj&IDZNs#CY70er z`=*K19EP<)M5>t+{bAblwosg56>*l%iEkf~3Sty;n(##_qHb zUe`_?IO($#)REDwu9j;JwJ*FkGgK(`-neI#HhXqGZ@5`}`DiRVD~R}Rpy7iW<7&9VlDm^txPy1?kb43pbUTJ51<_$7g-!0TDc)fQ+h9*jbu~@0c25=7 zl8$==6&kSPuITkroMJu5u_}jY=&bSrl4@^Ysy6^q8cGVG>n!U?t>!b`u>0prbb|z4 zNjLOpavCEH%9*%)?diO?zQBdyp5%oRA9><7&y!W-ZXUSn`KR`I-@Z8Pf#({-=;hv@ zkAOoQ1cJ~_^||fM^0N@&C~AAj&%H_VEdTiTLbO}FOr8%Qhw$77X{LQ`FG)-CQBBld zV6hWGcpS!mi6{UTWi3QAT!6LvBUBZg5OE0HSzIxky4q)8ngD9|r=TSd@7oZ`k)%aO zvveY~!d%UKHZQ-LXYtM=yxAR9E9o1kEMTZ_J~_z00o73LpX|u0xtE}Q_fq`nAH4i{ zS``akoptz|=N z=`0y^B72n$rB&YmY?DXH+Yhw7X=5tChoZVkuP{*bpID(R`IBtOun$ZNSjfKx8)}kd zW&4;;fwZjr&t|c*CpmC}4IR-}nLxMkBnNv5W@Lh7<;vk%If$YIhCxp2ThWE^iB<*= zgS=7S)(~NkoP_cjP@{f>6mqY|M5qSr6%1XY*Mu!S4`XAocz+88Esn*LWaVdf_lqdR zWAWVUK&g8@{$#=P7*Y^bM{zOssC%3;QA_U6@O1k9w%C0so}zu(X`?5wZU&admyw?! z9QyZilu4!>Zr#_Eh^orp*b0cQTuu%tTdRP%5QQ{k?pknViIU*zj$W?%ucy=iIKhXS zBuRX06%rHUe4PsEjB~eBK(sdGWQ9*B+!w+2SYDF^zNOzt@%0$&26ifsZJwim64RKb zfWT=ZJ*^C<*jP=rPHUM<7Gh%gfj7!}t(FZqNoFV^sN_)!>3x-iB%BS8qELaefs$2| zLmz6QbvAq^S5?+}$*ETo_Vr0dR(V!+HB&XT?Q^KRaNUy1BD3YvBZ`78mx4U^46GSX zKlpyqji(=cY*6ixeV%W)9KW&9W{a+O^^q(s$c1nJ9W1Lp2&*M66zQRBcUL>>bM2<- z`{p{|icB4IEG;m6i+$1ArgI0`_M?q~PFFh@?sJ zW_}mks488qTqFW9JpPf10Jcar7L=0Jx;8L8ev+$7PnOt`{1GFoJgYi9+{cl*Le$|; zk-czua9LFF#T^*WN~xS)lDJ?^NIbV4l5KTQM!^zuF_$U_$u+~!@d6am+3*_?@rzKm zM#NCJ3oPUk-)mYi|r8yK!k8VYXt|P7CJ@b>O{bfOpp?LQzg|Cp!0gB zdOe^+$(sZ^?Oas@jm)!*tn#cI84(@ST{t4REV9EN0RVm)ugD*y#NRdyYeM3i2|Di^ zhK_g(Mf_M55tn+fKR*mxgNSz^5B67wY5hxEDAcd%g_=k5o*`U-+pvIoqyRVFUIw+}Ey2oDjh=78R)`!7LL7oGs|^jQjOWFm{Z zbRWmULjD~U@{LT4e7 zG(^XdG&Z^8D!BGuQiZjo1CLUn0Xy)8Nz`Gli%)bYU%BL$34n+EhhVo3OzQ@wThVIa zg!^->tBA7P=UenbXMUi_K%ZH?Iag2laM}om8d5ZDYXOTX{mo1~9wu9 z!e^Q6xmEI6Cfkofq2cz)wpHVc#1fyS`!U-2q-CW0ar*UcFy?+D{q;%wy5N3_{rxoi z`x*B4v+VEZ*x%37Uy{vc`xaluKEq<$a_r86ir&Slr?zd#zxc*Ht?aPA?5Wu&r*EU1 z6ew&9CoHKaXp1A3Sdj9`Y4s$gi{*#>ly>A+@A5FePGEnO zR=HtcWC3*y=UjJt2Qnwez)TiHa(-S>y*?rBbF=IoA=18$zxx1w|ViB>XhzbR!b zCk$rNB!4?5vy*Fff^mm%0&;?~Ft6Im19$3y9uO+*O*L1-?CwmW27TFLaL_AHy5^lc5%f1HF(=)X$~W{jd9?DOf|X+4L!K6}mJefDO3E4n@t ztz`OaPiCG>)H0VU^|GaJeTZJ_Mx!Ch}rCFr2_w!R)JOchb^AE@=rh} z9~33G+?D?aRY*)0<6odcy2W^PSH8pSEThKvSkjXsSZZ?N41Z@(&?N5X%6cl-X?dKk zI}-nb*~T{(LEtqU-1*Z)$sjCr9`rNjDhWxr4W2}y0#`mI>(=erz4cMfa{`sgqg1hf z&Q+JSRB|eoI`tT7_k69Nu3wA4(9c@<0ui%` zQY2SRWp%e)gNRiz4lYNbf^k5}gO3Bvw~0q{73ql*ZtYn{RC!i)1h_v&XI1dnUyr&A zM*x>Zc7T_9c5WSpEg@^I<7^<$&YOm5{q8Lk>b-iQVy&8il^*RXfR%zgH{3PAkizHs z>7dGeqMxs_KW03qkIX7!#=5%1OT6;SM(?Njj8XpiJ%PtM-0~KJ@p8YLtEwC`sH+6Le1wrz zo^>Pe@^RE%2rpa~S$NTYod2a^SQ8T0LW~BjpBkpkZ*HMDzg0z?rD*;AVb~f(lmnsl ze-6|7vs)>hrH3Juu3{i)|_VH^2(hvWY3dJk7 zm5tzbYAaXmZl&6Bwc46}M%*hsOWqZVoM%5~Qf7iaM}DIU9i3r~CKCWj@n zahBfVWA!JZOO`z^Y~uzZCHeO4(VhU8Mc|8v`Wm7^S7W5?#ZHUUsW-gURo1Ty(N#Rf zYFR9$e%=Y~I=e*zWTP!npanMtOW2K1vFO&LmUYg8;C4ilwuu{(#N$YGz*=)4uMjuO z1u}J{X)SeEP~TqM^hT}`I-cJ$SCKNoKEEP%;zy#rP8-sxO(OzD!q#-H&yzGly z;b=ec04)n_h^WQxA;h&S?Uk;%VnO0`1<4Mp9Y>e?Rs)A?)tgoaI)Y{#CfHHT}Hpq2ySJhU^Vm&)z(CpPx2CTOQ&5nW-2VJA2-Kab=9fqJ3swdXv4Wj@A@X~@Y4K+ZZY zsX+IH?3zfcGkfUh4Up$vf4PyXo>FA>FHWk*Ff~bK&szSRV};AC4GjHxJ6vs{u?gH@ ziBZ%H?fCZb=xXTXYCRpEDFbzWQ{{zdf3OaB;ac6svGOfCT0Ta&EnQp@?PeE?)y2(X zkKk4tdC^$C<>AvuF50UbHohiqpyT;?gOr&Fk^5}76JLO8cn!8#7dUVM+5?wkdl@>A z0K+8&6*vznm(N)x{(E+NNx;(I2%N)=yL_4kaxfmC5M&le#Fn*zmIIzaS;0Ws>4xY0x?Lcu3fGDU| z2xLVa`0|Q?JGvy3%C>qb8MQ5^52G}Mnk@SmCGy`j_Z2idpQJy>>CcVy=P3P|#h-38 zL3!CBH#9@A+!t8R3oIAHQm>_Ss=(fDpTX@Yqnz9nI+mCw>WoU%4TybJnKZ6y~N0}19l-0yG@cEN8r+N1ujKHxD+kXjrOQI#+csI zaGLz;#T z=Iat~FbxCf8eW%RERLpdeQb+s59ZggTSWS!=$MD&J27ZsQ(*XGpFe<_@&;49%Op>w e$xPFxoOYwtZIWiMkdjR{36ceRk%iG+n)^QtDvV?R diff --git a/.doctrees/api/pybop/plotting/plotly_manager/index.doctree b/.doctrees/api/pybop/plotting/plotly_manager/index.doctree deleted file mode 100644 index 752a3648c257304cf3b27442b61b5eba7ca5166a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29834 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 WP$%13Bz&B#lT#4*No|~X&fUytZ+F?5 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 diff --git a/.doctrees/api/pybop/version/index.doctree b/.doctrees/api/pybop/version/index.doctree deleted file mode 100644 index 659e2653db54a9ce6f597aeda61d2bd6d924af55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4917 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

2)jUyWaW!SKv)|QLX9_!OfJKKlS(|E# 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

nBo3}ZGlz7NBWRjoFZWk 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

YBbn52QJ*dV>+d>+F1J-$ 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≧ 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ϝ)~e?Z|mr8GKi>8bmv}Zsn&eFZy^Ah0_V!Pa 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 (F((h#Y4RE&7CYbds@niKKiWfUnmih~LpXB;U~ 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 z]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 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree deleted file mode 100644 index ae04615dff035e43745c8f85f3c595b6e926b217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9995 zcmeHN&5s;M6<>QlytC`w_4*@;z=0;Qjo zs;9c@y{h-|d#~Q>@6NtEb!kffr&dJDgLuE~`hJ}FOcZL~PrN*0u`J#xE`P7MU972A z=I)6k&pcMBDa`PA5c(O5i(7cPO!H+Bigrn0CSuYZF6Oi9rLP7(Zij4_g;qt}l|d3) z-6XSa4qkZW=DOv^zU3uZ#zdOLeh~MpFo<`AB@;_>W{E(u_Cmo=+$z+9D`ggRa*6HI z_ND`0U@Pi`7rH`V5YMx*8=0qhKTk(LIV$NAdJyt=I@+pY69JpXdcK zE4HT8T z9BW-y`_<82)|YR+011@O6G+tHqz-Ph#0+TBgt1f*{;p=BB)Mq;H-*HZ}D+ z3q6RI^j}#B9wdj=q|l+;W0ueSz;h+@DiwugW8!?oFN!RL>(ulM)+J?Fn z2#^y&FE-SK%$OUIx~u^V-y+R+!(?yW+T#rNn9;BWCBkN7KZm|xu&(F&EDAgeM$FvI z#Q zOg_;I*H|Wi2RE$UtJm6_n^&%AJ*@F-d~U>WyUq~q zH3wZMK#!3VtCa?!Qk@6KM^s<0Q@yu?y^3QjmB-MVfrCxjAw2NH)>PhM_jFehN=2>a zuCR9L!Yi`cxePe*q!L*LR*iuVo-h*n^*6h2=k^<&B#{uKn|>}8()QpInVn`q?EqUwR9o!Q&i9xArX1XR9k>urz`Rf=yRJRlK%rI- zY@uLvj8ikjsZg!a8iKv=YmHpkIuF=;i!`E6PuTfL;cwLyKCU8lQuwy#X1*;6x!pQ< zVnr%DUmC!7nsBU^tHqoFrLytmYAz6tAM6%yt5Zg94!{?In1YmA)J)5D#3?Qh^(YQC zz@eI&9x3w9SC|B_!e&B^aR~U4foF>Td8`ASShvc^ZPEY$ULG=pe(p-k4FS6vZ4n8& zc?i^`Oaf5@u>pxen(P6Mf$KU-5R7WTPWBKdvZRktDk|JmACujTwEdI1wj1vKqlpUs zRH@(}A5ienIy#9zxF7Ylw0iZb3CdMx$NfogL_Op(kK9DAC3%+QJx-a#mqIp{G*(Fq zps=mopq^28!f}J(lb!HV>4fh$mGn?h_6eBkKPPBugtFe(nba9*o>nj@ zEDD^scS%6*9xSYFeL2xkO6e>z&eZM<;A||ldO2*HQs}@at0Vz{)<`M_m=z5%^dsRl z($8gRu&$pYf#hYQpZ-%?{o_kUQS<@fWTl>8H0=7o?h8#EJuwJeEnbr!gHOIMhRk?Zfe zNH=_|%Uqe`hP{rY(aqwDg-F6(hHJVT+PI;IC=_H#2MLTYY;-C)M7)ph21oYrUc(;7 zG4Bw2xL(@ByOZqUL8p^7TX-Nyd2S3Tsls*uB8lZsC!B2pM3!bc?nVy{C23>52^;%g z0p+^6Zl}7uHVGVG#N}C6Tv3HO3Py6JS^!8x@aUj8S1zan;j@s{AGE9hgiF@gPDb`m zGwvG?pDpeG_Y+j{Q1I{>oaJ}sEQjOa*6@frDWf~Cx!RW3SzQzCFkKvVslqAg_Djgv z!)<_yjd&I1aUcgn2z#J3M^Zm=d|c{BLY?PIsn1|>GgElr$yrU}4+M2qQR5kU!a>9# zcAuVbu1Sbv4B;a}9NO4#Cz$z%L7c|c_5GCYqxvq42fC~Zd$UldaB&^}-aj}bBKvA% zR^%TT3VSp}mtg(S(hs19LGx_Lm}j%zJnMx=Pe0YXz9iF0>Y42-GTXFiuWPzYKsKR^ zqPUaeE_F!lfJzHd$G#3Y?BPm`hK%h8naOYN=MKNDw>RW@V3VV2?Yyqx<*|RT>@tOR zR^p-5@&P58y5aJRYF78Ma6d;~Fbi~lZEahfYKG$C2gSBJS$7pZ(i#?R@RO;NLF|RO z&$_4$Qa^63KY;7>-=sgc@rSAT$ldo@DtWPW9Nj(FwB@$dOfO72#a%VW1K&q;?rpVH z(kch;s`)sNIw(5%)NWhQO*4_i;Q*@^(9Im}A3E;ufSX383tJW(h2v*a(`u!Zm%WF2 zblNPS5|u7dDVtjrwfeiCoDEJ_HmFx49e;ird8+O%9} zWrDhnk!?9gi#jKlIi{Aq9G%=)IwdW#hH`{@YOs!ZVM-P#_N-C^R5y^j=$N1(3lExm z%?)!{MO80Ub4f1KTo&7WeOtA93@r#(CK)KTe6#>@Q;t&nSTqbBT|3-X3+2x|3-NLZ zDs-p;OmD$>maJd^ckQCj5GRt=UTz%&jKMi!M$SG}tqY7S2eZsJN{dN!O^%YAS_#yz!<%qW?2EfLbDQox2_Xj{zzZMrxnBog?rRiMg#!RJsY&Sm0^hSYHa z=p{doQfFv_5Ud{1?bz5wk9=FL=n?Gzr2f%RDp>9(&OWNnfIhaLCW1NjmD)-?>Ffsh zXhECk3VJKT#RU@wDR+6Iat*lIN$ORherKwru$pq3Qz4^zgr2|z#Uc7K0JF*XFw;RT5bBXs49B>A@#*W3=W^Ed8suqYMEn-5==KI?E$MdPMLuEvym}lq8977u93H?C_y&Lh%TI{`V(-4gQRxh++DRW-P}>!m zB-(`1`Bo0U77)}K{oDL>!o+h;&{2oQcG(iO_>5X~lRKj?}#5LYXpMUHi(P4;8K3sT!EpWypn4I%4YsX;`8f6Z? z#UY^8+g>d{27$4LT?1=()ijHD3w&{*<_(;{e_@J<%{rfOq?`2^;0d3>tYT9zEeU*u z*&x;$_+CNP!}pRrmQ?@1*E8tSJldQZ;0l3NLkvbUe0uZhwW@2apUqtWG4nt0eKFw^ z5Osi+TSXd*neS7~#77}G%j#%PQ4s5od;0&z>#B^Zj%`+~@ib(-GJOc+3G@zOog<5@ zi^+T~L|+yi*nIzAgmDu{_m{DcoD|Znmg}l6eVTL|2@?&P=l%~tqW=#52-TutIY^=E z+l78{SMbw#q}TkiP)l{&*OZpL03Jlz1S>N_5LeAJTCb0od9VfeN`x-S(4F+uvyH*w z?A92?R>f5>Iz2`o(JGS^9?vytm2Z%M0f4o+QKVVKy�Y;0)C2d6CQzC`;5R(igId5= zK@C|vW-a&2cWQ~ma4C)_QXPMA`NxMJ99vD59`rohKJ%_ej8S}S4U7m%H+iO^z-^~F z(Hca2w*)DwuTEymgj1IZT=xk7AK{OZCpKiEzNe~~{ zu<5$VBA{&3j#<}jYnnz=ngFvFYlj%Tj?0$eCa0_6>pg<1<9CCq7%4Dq{guu_e%$Ka z7d~c--D3mxD%)f)kJ#Oj9TRqdaI&K_&u-!OEPl`9_rjUC>?QUFyL;MUFSA$h?0$F_ zE$pPSD5VwIiXD}SYy%;asZn&*#`^B(6tR2mU_D+)ECQr>Oy|fwcjaCilIIaE{!35X zE*EKTGdkgUWM>}|*D1&>qorZ~{r}<*U_$Er?!G5h-n*@7F2{cE+Kguzaz1x^wYUYL zBWy9Iie@2oy_f(kMScn19-zOpGaeg7?Bfu?w`1_`p7s#HKdeXF?boq7xlp7msq$n! z0l#Yk-^f7%eqYsH0}J-f+WF_>%tq|tnIByVx7B1yLmb&(kat7aqZl#vk!wAQSL~BH z``euTea=2T-C&>1*%|l}cCqT-A&~Ga(**!sFJ$>7Rt?Ol;aE|R8|n%; zUt0m^W(Cfru;zJ#=0*9kSKKY5h|m>+l2Xa3qPprTEhB-gD$g}fOuG%v-f;cYs!+H| z-3mr-x1q$+9=VRD#&9u3r#xJAzKM!G2OXgO5y>q;+LX3yOKVDN{D{3Va@{FKMqQt8Eu}I^P9IZ*@22Z9 zk}r-ecSvU(Q8UC?-7vLWE2CpOg}VL)Q36o|hoYnarHd4$G&tq|<@#J8MhO+E%)sSc z*P6-6TPK?1`^Br52~|p}gb|VDC@7>IzNN;y{VLKcQd&`pcX!rq)445kscEwMGD0LZ$z!g0h0pyY24rfsr0LS`+3*D= zsQEDNkeDDXL%w&=RToF#^Dq<_U?ZkLVa^L~{GSe9bN!N*34(&wEYcXT-9Q-=*d8jw zJ2qmkoBOvG)#(tRMVk%w*zN10Gx@T1=3@Xjt=N2_a6KP@$9Qfx+XqQmf~M+ z#G_J4!0S0x15V8(>Ol1mnJIE8>l!jf31yf@ryX|(fGmX_s*CDj0QcTz@R4-#J$8=@RTh}Y+~go?10 z#X(j#0ZctmxR?L~O;t#u4Kj4uX!c>f;Q*}pr0QvNw@JlgkA=i_s$PQP1r)J7aTJG13{g{x-h?&p5Jmx7 z25Ti?gSlVz?tN@xS&Fs9oP;m!u?ao5&dLQ}+pXMif^N`mT|5okr`9t~gq)zF|%NiNWl< zYt8$&4RN0|4_!Mn8^rJl7O_CAzS-yOsdn8!Fqb8A`NXr&=b9bi->2-pc6+O^j<5Gp zj^YT3g2ajvx>v(jC3KZi@gdD9gJLZ6MWsa6TWiDxclV0KZlg6mI=UhsQ%IRG_HM7s zs&BC5p|?gPg$c5g$~*@I;RA;2_S*qrpnnbLzwm!XpTIJYj)VVsgmtM>xM;Cg$U6&i l1ouw8Xrh>=0oT1OOo6&#hJD8Mic5{LnOp1=PrMxu{s+0CWF`Or diff --git a/.doctrees/user_guide/installation.doctree b/.doctrees/user_guide/installation.doctree deleted file mode 100644 index 12c8a788c5aab144dfb36ae6eed3a2113c2e387e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12884 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 J&I^*i{sRi@Kpp@9 diff --git a/.doctrees/user_guide/usage.doctree b/.doctrees/user_guide/usage.doctree deleted file mode 100644 index 3a5db837b9bbf5db92bf88a3c0b86cab76f5cb9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15620 zcmd^GTZ|<~dEVRHFT1n$4l(OBZLrz(c+Lz7AYfuAF^j!f7RF0#fly-g^y#j1y3h3K z?(NH5ELm|9qcBqCi3WkgQ(_@N%0DN&TCBt%4sl!qt}$@l-&m+GE5 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 diff --git a/_modules/index.html b/_modules/index.html deleted file mode 100644 index 88705a1f9..000000000 --- a/_modules/index.html +++ /dev/null @@ -1,482 +0,0 @@ - - - - - - - - - - Overview: module code — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - - -
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop.html b/_modules/pybop.html deleted file mode 100644 index 52f5fa935..000000000 --- a/_modules/pybop.html +++ /dev/null @@ -1,558 +0,0 @@ - - - - - - - - - - pybop — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop

-#
-# Root of the pybop module.
-# Provides access to all shared functionality (models, solvers, etc.).
-#
-# This file is adapted from Pints
-# (see https://github.com/pints-team/pints)
-#
-
-import sys
-from os import path
-
-#
-# Version info
-#
-from pybop.version import __version__
-
-#
-# Constants
-#
-# Float format: a float can be converted to a 17 digit decimal and back without
-# loss of information
-
-[docs] -FLOAT_FORMAT = "{: .17e}"
- -# Absolute path to the pybop repo -
-[docs] -script_path = path.dirname(__file__)
- - -# -# Cost function class -# -from ._costs import BaseCost, RootMeanSquaredError, SumSquaredError - -# -# Dataset class -# -from ._dataset import Dataset - -# -# Model classes -# -from .models.base_model import BaseModel -from .models import lithium_ion -from .models import empirical - -# -# Main optimisation class -# -from .optimisation import Optimisation - -# -# Optimiser class -# -from .optimisers.base_optimiser import BaseOptimiser -from .optimisers.nlopt_optimize import NLoptOptimize -from .optimisers.scipy_optimisers import SciPyMinimize, SciPyDifferentialEvolution -from .optimisers.pints_optimisers import ( - GradientDescent, - Adam, - CMAES, - IRPropMin, - PSO, - SNES, - XNES, -) - -# -# Parameter classes -# -from .parameters.parameter import Parameter -from .parameters.parameter_set import ParameterSet -from .parameters.priors import Gaussian, Uniform, Exponential - -# -# Problem class -# -from ._problem import FittingProblem, DesignProblem - -# -# Plotting class -# -from .plotting.plot_cost2d import plot_cost2d -from .plotting.quick_plot import StandardPlot, quick_plot -from .plotting.plot_convergence import plot_convergence -from .plotting.plot_parameters import plot_parameters -from .plotting.plotly_manager import PlotlyManager - -# -# Remove any imported modules, so we don't expose them as part of pybop -# -del sys -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/_costs.html b/_modules/pybop/_costs.html deleted file mode 100644 index 596524919..000000000 --- a/_modules/pybop/_costs.html +++ /dev/null @@ -1,720 +0,0 @@ - - - - - - - - - - pybop._costs — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop._costs

-import numpy as np
-
-
-
-[docs] -class BaseCost: - """ - Base class for defining cost functions. - - This class is intended to be subclassed to create specific cost functions - for evaluating model predictions against a set of data. The cost function - quantifies the goodness-of-fit between the model predictions and the - observed data, with a lower cost value indicating a better fit. - - Parameters - ---------- - problem : object - A problem instance containing the data and functions necessary for - evaluating the cost function. - _target : array-like - An array containing the target data to fit. - x0 : array-like - The initial guess for the model parameters. - bounds : tuple - The bounds for the model parameters. - n_parameters : int - The number of parameters in the model. - """ - - def __init__(self, problem): - self.problem = problem - if problem is not None: - self._target = problem._target - self.x0 = problem.x0 - self.bounds = problem.bounds - self.n_parameters = problem.n_parameters - -
-[docs] - def __call__(self, x, grad=None): - """ - Calculate the cost function value for a given set of parameters. - - This method must be implemented by subclasses. - - Parameters - ---------- - x : array-like - The parameters for which to evaluate the cost. - grad : array-like, optional - An array to store the gradient of the cost function with respect - to the parameters. - - Returns - ------- - float - The calculated cost function value. - - Raises - ------ - NotImplementedError - If the method has not been implemented by the subclass. - """ - - raise NotImplementedError
-
- - - -
-[docs] -class RootMeanSquaredError(BaseCost): - """ - Root mean square error cost function. - - Computes the root mean square error between model predictions and the target - data, providing a measure of the differences between predicted values and - observed values. - - Inherits all parameters and attributes from ``BaseCost``. - - """ - - def __init__(self, problem): - super(RootMeanSquaredError, self).__init__(problem) - -
-[docs] - def __call__(self, x, grad=None): - """ - Calculate the root mean square error for a given set of parameters. - - Parameters - ---------- - x : array-like - The parameters for which to evaluate the cost. - grad : array-like, optional - An array to store the gradient of the cost function with respect - to the parameters. - - Returns - ------- - float - The root mean square error. - - Raises - ------ - ValueError - If an error occurs during the calculation of the cost. - """ - - try: - prediction = self.problem.evaluate(x) - - if len(prediction) < len(self._target): - return np.float64(np.inf) # simulation stopped early - else: - return np.sqrt(np.mean((prediction - self._target) ** 2)) - - except Exception as e: - raise ValueError(f"Error in cost calculation: {e}")
-
- - - -
-[docs] -class SumSquaredError(BaseCost): - """ - Sum of squared errors cost function. - - Computes the sum of the squares of the differences between model predictions - and target data, which serves as a measure of the total error between the - predicted and observed values. - - Inherits all parameters and attributes from ``BaseCost``. - - Additional Attributes - --------------------- - _de : float - The gradient of the cost function to use if an error occurs during - evaluation. Defaults to 1.0. - - """ - - def __init__(self, problem): - super(SumSquaredError, self).__init__(problem) - - # Default fail gradient - self._de = 1.0 - -
-[docs] - def __call__(self, x, grad=None): - """ - Calculate the sum of squared errors for a given set of parameters. - - Parameters - ---------- - x : array-like - The parameters for which to evaluate the cost. - grad : array-like, optional - An array to store the gradient of the cost function with respect - to the parameters. - - Returns - ------- - float - The sum of squared errors. - - Raises - ------ - ValueError - If an error occurs during the calculation of the cost. - """ - try: - prediction = self.problem.evaluate(x) - - if len(prediction) < len(self._target): - return np.float64(np.inf) # simulation stopped early - else: - return np.sum( - (np.sum(((prediction - self._target) ** 2), axis=0)), - axis=0, - ) - - except Exception as e: - raise ValueError(f"Error in cost calculation: {e}")
- - -
-[docs] - def evaluateS1(self, x): - """ - Compute the cost and its gradient with respect to the parameters. - - Parameters - ---------- - x : array-like - The parameters for which to compute the cost and gradient. - - Returns - ------- - tuple - A tuple containing the cost and the gradient. The cost is a float, - and the gradient is an array-like of the same length as `x`. - - Raises - ------ - ValueError - If an error occurs during the calculation of the cost or gradient. - """ - try: - y, dy = self.problem.evaluateS1(x) - if len(y) < len(self._target): - e = np.float64(np.inf) - de = self._de * np.ones(self.problem.n_parameters) - else: - dy = dy.reshape( - ( - self.problem.n_time_data, - self.problem.n_outputs, - self.problem.n_parameters, - ) - ) - r = y - self._target - e = np.sum(np.sum(r**2, axis=0), axis=0) - de = 2 * np.sum(np.sum((r.T * dy.T), axis=2), axis=1) - - return e, de - - except Exception as e: - raise ValueError(f"Error in cost calculation: {e}")
- - -
-[docs] - def set_fail_gradient(self, de): - """ - Set the fail gradient to a specified value. - - The fail gradient is used if an error occurs during the calculation - of the gradient. This method allows updating the default gradient value. - - Parameters - ---------- - de : float - The new fail gradient value to be used. - """ - de = float(de) - self._de = de
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/_dataset.html b/_modules/pybop/_dataset.html deleted file mode 100644 index 3159c5b52..000000000 --- a/_modules/pybop/_dataset.html +++ /dev/null @@ -1,540 +0,0 @@ - - - - - - - - - - pybop._dataset — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop._dataset

-import pybamm
-
-
-
-[docs] -class Dataset: - """ - Represents a collection of experimental observations. - - This class provides a structured way to store and work with experimental data, - which may include applying operations such as interpolation. - - Parameters - ---------- - name : str - The name of the dataset, providing a label for identification. - data : array-like - The actual experimental data, typically in a structured form such as - a NumPy array or a pandas DataFrame. - - """ - - def __init__(self, name, data): - """ - Initialize a Dataset instance with a name and data. - - Parameters - ---------- - name : str - The name for the dataset. - data : array-like - The experimental data to store within the dataset. - """ - - self.name = name - self.data = data - -
-[docs] - def __repr__(self): - """ - Return a string representation of the Dataset instance. - - Returns - ------- - str - A string that includes the name and data of the dataset. - """ - return f"Dataset: {self.name} \n Data: {self.data}"
- - -
-[docs] - def Interpolant(self): - """ - Create an interpolation function of the dataset based on the independent variable. - - Currently, only time-based interpolation is supported. This method modifies - the instance's Interpolant attribute to be an interpolation function that - can be evaluated at different points in time. - - Raises - ------ - NotImplementedError - If the independent variable for interpolation is not supported. - """ - - if self.variable == "time": - self.Interpolant = pybamm.Interpolant(self.x, self.y, pybamm.t) - else: - NotImplementedError("Only time interpolation is supported")
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/_problem.html b/_modules/pybop/_problem.html deleted file mode 100644 index d14a0cded..000000000 --- a/_modules/pybop/_problem.html +++ /dev/null @@ -1,775 +0,0 @@ - - - - - - - - - - pybop._problem — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop._problem

-import numpy as np
-
-
-
-[docs] -class BaseProblem: - """ - Base class for defining a problem within the PyBOP framework, compatible with PINTS. - - Parameters - ---------- - parameters : list - List of parameters for the problem. - model : object, optional - The model to be used for the problem (default: None). - check_model : bool, optional - Flag to indicate if the model should be checked (default: True). - init_soc : float, optional - Initial state of charge (default: None). - x0 : np.ndarray, optional - Initial parameter values (default: None). - """ - - def __init__( - self, - parameters, - model=None, - check_model=True, - init_soc=None, - x0=None, - ): - self._model = model - self.check_model = check_model - self.parameters = parameters - self.init_soc = init_soc - self.x0 = x0 - self.n_parameters = len(self.parameters) - - # Set bounds - self.bounds = dict( - lower=[param.bounds[0] for param in self.parameters], - upper=[param.bounds[1] for param in self.parameters], - ) - - # Sample from prior for x0 - if x0 is None: - self.x0 = np.zeros(self.n_parameters) - for i, param in enumerate(self.parameters): - self.x0[i] = param.rvs(1) - elif len(x0) != self.n_parameters: - raise ValueError("x0 dimensions do not match number of parameters") - - # Add the initial values to the parameter definitions - for i, param in enumerate(self.parameters): - param.update(value=self.x0[i]) - -
-[docs] - def evaluate(self, x): - """ - Evaluate the model with the given parameters and return the signal. - - Parameters - ---------- - x : np.ndarray - Parameter values to evaluate the model at. - - Raises - ------ - NotImplementedError - This method must be implemented by subclasses. - """ - raise NotImplementedError
- - -
-[docs] - def evaluateS1(self, x): - """ - Evaluate the model with the given parameters and return the signal and its derivatives. - - Parameters - ---------- - x : np.ndarray - Parameter values to evaluate the model at. - - Raises - ------ - NotImplementedError - This method must be implemented by subclasses. - """ - raise NotImplementedError
-
- - - -
-[docs] -class FittingProblem(BaseProblem): - """ - Problem class for fitting (parameter estimation) problems. - - Extends `BaseProblem` with specifics for fitting a model to a dataset. - - Parameters - ---------- - model : object - The model to fit. - parameters : list - List of parameters for the problem. - dataset : list - List of data objects to fit the model to. - signal : str, optional - The signal to fit (default: "Voltage [V]"). - """ - - def __init__( - self, - model, - parameters, - dataset, - signal="Voltage [V]", - check_model=True, - init_soc=None, - x0=None, - ): - super().__init__(parameters, model, check_model, init_soc, x0) - if model is not None: - self._model.signal = signal - self.signal = signal - self._dataset = {o.name: o for o in dataset} - self.n_outputs = len([self.signal]) - - # Check that the dataset contains time and current - for name in ["Time [s]", "Current function [A]", signal]: - if name not in self._dataset: - raise ValueError(f"expected {name} in list of dataset") - - self._time_data = self._dataset["Time [s]"].data - self.n_time_data = len(self._time_data) - self._target = self._dataset[signal].data - - if np.any(self._time_data < 0): - raise ValueError("Times can not be negative.") - if np.any(self._time_data[:-1] >= self._time_data[1:]): - raise ValueError("Times must be increasing.") - - if len(self._target) != len(self._time_data): - raise ValueError("Time data and signal data must be the same length.") - - # Build the model - if self._model._built_model is None: - self._model.build( - dataset=self._dataset, - parameters=self.parameters, - check_model=self.check_model, - init_soc=self.init_soc, - ) - -
-[docs] - def evaluate(self, x): - """ - Evaluate the model with the given parameters and return the signal. - - Parameters - ---------- - x : np.ndarray - Parameter values to evaluate the model at. - """ - - y = np.asarray(self._model.simulate(inputs=x, t_eval=self._time_data)) - - return y
- - -
-[docs] - def evaluateS1(self, x): - """ - Evaluate the model with the given parameters and return the signal and its derivatives. - - Parameters - ---------- - x : np.ndarray - Parameter values to evaluate the model at. - """ - - y, dy = self._model.simulateS1( - inputs=x, - t_eval=self._time_data, - ) - - return (np.asarray(y), np.asarray(dy))
- - -
-[docs] - def target(self): - """ - Return the target dataset. - - Returns - ------- - np.ndarray - The target dataset array. - """ - return self._target
-
- - - -
-[docs] -class DesignProblem(BaseProblem): - """ - Problem class for design optimization problems. - - Extends `BaseProblem` with specifics for applying a model to an experimental design. - - Parameters - ---------- - model : object - The model to apply the design to. - parameters : list - List of parameters for the problem. - experiment : object - The experimental setup to apply the model to. - """ - - def __init__( - self, - model, - parameters, - experiment, - check_model=True, - init_soc=None, - x0=None, - ): - super().__init__(parameters, model, check_model, init_soc, x0) - self.experiment = experiment - self._target = None - - # Build the model if required - if experiment is not None: - # Leave the build until later to apply the experiment - self._model.parameters = self.parameters - if self.parameters is not None: - self._model.fit_keys = [param.name for param in self.parameters] - - elif self._model._built_model is None: - self._model.build( - experiment=self.experiment, - parameters=self.parameters, - check_model=self.check_model, - init_soc=self.init_soc, - ) - -
-[docs] - def evaluate(self, x): - """ - Evaluate the model with the given parameters and return the signal. - - Parameters - ---------- - x : np.ndarray - Parameter values to evaluate the model at. - """ - - y = np.asarray(self._model.simulate(inputs=x, t_eval=self._time_data)) - - return y
- - -
-[docs] - def evaluateS1(self, x): - """ - Evaluate the model with the given parameters and return the signal and its derivatives. - - Parameters - ---------- - x : np.ndarray - Parameter values to evaluate the model at. - """ - - y, dy = self._model.simulateS1( - inputs=x, - t_eval=self._time_data, - ) - - return (np.asarray(y), np.asarray(dy))
- - -
-[docs] - def target(self): - """ - Return the target dataset (not applicable for design problems). - - Returns - ------- - None - """ - return self._target
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/models/base_model.html b/_modules/pybop/models/base_model.html deleted file mode 100644 index eff68781a..000000000 --- a/_modules/pybop/models/base_model.html +++ /dev/null @@ -1,871 +0,0 @@ - - - - - - - - - - pybop.models.base_model — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.models.base_model

-import pybamm
-import numpy as np
-
-
-
-[docs] -class BaseModel: - """ - A base class for constructing and simulating models using PyBaMM. - - This class serves as a foundation for building specific models in PyBaMM. - It provides methods to set up the model, define parameters, and perform - simulations. The class is designed to be subclassed for creating models - with custom behavior. - - Methods - ------- - build(dataset=None, parameters=None, check_model=True, init_soc=None) - Construct the PyBaMM model if not already built. - set_init_soc(init_soc) - Set the initial state of charge for the battery model. - set_params() - Assign the parameters to the model. - simulate(inputs, t_eval) - Execute the forward model simulation and return the result. - simulateS1(inputs, t_eval) - Perform the forward model simulation with sensitivities. - predict(inputs=None, t_eval=None, parameter_set=None, experiment=None, init_soc=None) - Solve the model using PyBaMM's simulation framework and return the solution. - """ - - def __init__(self, name="Base Model"): - """ - Initialize the BaseModel with an optional name. - - Parameters - ---------- - name : str, optional - The name given to the model instance. - """ - self.name = name - self.pybamm_model = None - self.parameters = None - self.dataset = None - self.signal = None - -
-[docs] - def build( - self, - dataset=None, - parameters=None, - check_model=True, - init_soc=None, - ): - """ - Construct the PyBaMM model if not already built, and set parameters. - - This method initializes the model components, applies the given parameters, - sets up the mesh and discretization if needed, and prepares the model - for simulations. - - Parameters - ---------- - dataset : pybamm.Dataset, optional - The dataset to be used in the model construction. - parameters : dict, optional - A dictionary containing parameter values to apply to the model. - check_model : bool, optional - If True, the model will be checked for correctness after construction. - init_soc : float, optional - The initial state of charge to be used in simulations. - """ - self.dataset = dataset - self.parameters = parameters - if self.parameters is not None: - self.fit_keys = [param.name for param in self.parameters] - - if init_soc is not None: - self.set_init_soc(init_soc) - - if self._built_model: - return - - elif self.pybamm_model.is_discretised: - self._model_with_set_params = self.pybamm_model - self._built_model = self.pybamm_model - else: - self.set_params() - self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts) - self._disc = pybamm.Discretisation(self.mesh, self.spatial_methods) - self._built_model = self._disc.process_model( - self._model_with_set_params, inplace=False, check_model=check_model - ) - - # Clear solver - self._solver._model_set_up = {}
- - -
-[docs] - def set_init_soc(self, init_soc): - """ - Set the initial state of charge for the battery model. - - Parameters - ---------- - init_soc : float - The initial state of charge to be used in the model. - """ - if self._built_initial_soc != init_soc: - # reset - self._model_with_set_params = None - self._built_model = None - self.op_conds_to_built_models = None - self.op_conds_to_built_solvers = None - - param = self.pybamm_model.param - self._parameter_set = ( - self._unprocessed_parameter_set.set_initial_stoichiometries( - init_soc, param=param, inplace=False - ) - ) - # Save solved initial SOC in case we need to rebuild the model - self._built_initial_soc = init_soc
- - -
-[docs] - def set_params(self): - """ - Assign the parameters to the model. - - This method processes the model with the given parameters, sets up - the geometry, and updates the model instance. - """ - if self.model_with_set_params: - return - - # Mark any simulation inputs in the parameter set - if self.parameters is not None: - for i in self.fit_keys: - self._parameter_set[i] = "[input]" - - if self.dataset is not None and self.parameters is not None: - if "Current function [A]" not in self.fit_keys: - self.parameter_set["Current function [A]"] = pybamm.Interpolant( - self.dataset["Time [s]"].data, - self.dataset["Current function [A]"].data, - pybamm.t, - ) - # Set t_eval - self.time_data = self._parameter_set["Current function [A]"].x[0] - - self._model_with_set_params = self._parameter_set.process_model( - self._unprocessed_model, inplace=False - ) - self._parameter_set.process_geometry(self.geometry) - self.pybamm_model = self._model_with_set_params
- - -
-[docs] - def simulate(self, inputs, t_eval): - """ - Execute the forward model simulation and return the result. - - Parameters - ---------- - inputs : dict or array-like - The input parameters for the simulation. If array-like, it will be - converted to a dictionary using the model's fit keys. - t_eval : array-like - An array of time points at which to evaluate the solution. - - Returns - ------- - array-like - The simulation result corresponding to the specified signal. - - Raises - ------ - ValueError - If the model has not been built before simulation. - """ - - if self._built_model is None: - raise ValueError("Model must be built before calling simulate") - else: - if not isinstance(inputs, dict): - inputs = {key: inputs[i] for i, key in enumerate(self.fit_keys)} - - return self.solver.solve(self.built_model, inputs=inputs, t_eval=t_eval)[ - self.signal - ].data
- - -
-[docs] - def simulateS1(self, inputs, t_eval): - """ - Perform the forward model simulation with sensitivities. - - Parameters - ---------- - inputs : dict or array-like - The input parameters for the simulation. If array-like, it will be - converted to a dictionary using the model's fit keys. - t_eval : array-like - An array of time points at which to evaluate the solution and its - sensitivities. - - Returns - ------- - tuple - A tuple containing the simulation result and the sensitivities. - - Raises - ------ - ValueError - If the model has not been built before simulation. - """ - - if self._built_model is None: - raise ValueError("Model must be built before calling simulate") - else: - if not isinstance(inputs, dict): - inputs = {key: inputs[i] for i, key in enumerate(self.fit_keys)} - - sol = self.solver.solve( - self.built_model, - inputs=inputs, - t_eval=t_eval, - calculate_sensitivities=True, - ) - - return ( - sol[self.signal].data, - np.asarray( - [ - sol[self.signal].sensitivities[key].toarray() - for key in self.fit_keys - ] - ).T, - )
- - -
-[docs] - def predict( - self, - inputs=None, - t_eval=None, - parameter_set=None, - experiment=None, - init_soc=None, - ): - """ - Solve the model using PyBaMM's simulation framework and return the solution. - - This method sets up a PyBaMM simulation by configuring the model, parameters, experiment - (if any), and initial state of charge (if provided). It then solves the simulation and - returns the resulting solution object. - - Parameters - ---------- - inputs : dict or array-like, optional - Input parameters for the simulation. If the input is array-like, it is converted - to a dictionary using the model's fitting keys. Defaults to None, indicating - that the default parameters should be used. - t_eval : array-like, optional - An array of time points at which to evaluate the solution. Defaults to None, - which means the time points need to be specified within experiment or elsewhere. - parameter_set : pybamm.ParameterValues, optional - A PyBaMM ParameterValues object or a dictionary containing the parameter values - to use for the simulation. Defaults to the model's current ParameterValues if None. - experiment : pybamm.Experiment, optional - A PyBaMM Experiment object specifying the experimental conditions under which - the simulation should be run. Defaults to None, indicating no experiment. - init_soc : float, optional - The initial state of charge for the simulation, as a fraction (between 0 and 1). - Defaults to None. - - Returns - ------- - pybamm.Solution - The solution object returned after solving the simulation. - - Raises - ------ - ValueError - If the model has not been configured properly before calling this method or - if PyBaMM models are not supported by the current simulation method. - - """ - parameter_set = parameter_set or self._parameter_set - if inputs is not None: - if not isinstance(inputs, dict): - inputs = {key: inputs[i] for i, key in enumerate(self.fit_keys)} - parameter_set.update(inputs) - - if self._unprocessed_model is not None: - if experiment is None: - return pybamm.Simulation( - self._unprocessed_model, - parameter_values=parameter_set, - ).solve(t_eval=t_eval, initial_soc=init_soc) - else: - return pybamm.Simulation( - self._unprocessed_model, - experiment=experiment, - parameter_values=parameter_set, - ).solve(initial_soc=init_soc) - else: - raise ValueError("This sim method currently only supports PyBaMM models")
- - - @property -
-[docs] - def built_model(self): - return self._built_model
- - - @property -
-[docs] - def parameter_set(self): - return self._parameter_set
- - - @parameter_set.setter - def parameter_set(self, parameter_set): - self._parameter_set = parameter_set.copy() - - @property -
-[docs] - def model_with_set_params(self): - return self._model_with_set_params
- - - @property -
-[docs] - def geometry(self): - return self._geometry
- - - @geometry.setter - def geometry(self, geometry): - self._geometry = geometry.copy() - - @property -
-[docs] - def submesh_types(self): - return self._submesh_types
- - - @submesh_types.setter - def submesh_types(self, submesh_types): - self._submesh_types = submesh_types.copy() - - @property -
-[docs] - def mesh(self): - return self._mesh
- - - @property -
-[docs] - def var_pts(self): - return self._var_pts
- - - @var_pts.setter - def var_pts(self, var_pts): - self._var_pts = var_pts.copy() - - @property -
-[docs] - def spatial_methods(self): - return self._spatial_methods
- - - @spatial_methods.setter - def spatial_methods(self, spatial_methods): - self._spatial_methods = spatial_methods.copy() - - @property -
-[docs] - def solver(self): - return self._solver
- - - @solver.setter - def solver(self, solver): - self._solver = solver.copy()
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/models/empirical/ecm.html b/_modules/pybop/models/empirical/ecm.html deleted file mode 100644 index e64763717..000000000 --- a/_modules/pybop/models/empirical/ecm.html +++ /dev/null @@ -1,547 +0,0 @@ - - - - - - - - - - pybop.models.empirical.ecm — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.models.empirical.ecm

-import pybamm
-from ..base_model import BaseModel
-
-
-
-[docs] -class Thevenin(BaseModel): - """ - The Thevenin class represents an equivalent circuit model based on the Thevenin model in PyBaMM. - - This class encapsulates the PyBaMM equivalent circuit Thevenin model, providing an interface - to define the parameters, geometry, submesh types, variable points, spatial methods, and solver - to be used for simulations. - - Parameters - ---------- - name : str, optional - A name for the model instance. Defaults to "Equivalent Circuit Thevenin Model". - parameter_set : dict or None, optional - A dictionary of parameters to be used for the model. If None, the default parameters from PyBaMM are used. - geometry : dict or None, optional - The geometry definitions for the model. If None, the default geometry from PyBaMM is used. - submesh_types : dict or None, optional - The types of submeshes to use. If None, the default submesh types from PyBaMM are used. - var_pts : dict or None, optional - The number of points for each variable in the model to define the discretization. If None, the default is used. - spatial_methods : dict or None, optional - The spatial methods to be used for discretization. If None, the default spatial methods from PyBaMM are used. - solver : pybamm.Solver or None, optional - The solver to use for simulating the model. If None, the default solver from PyBaMM is used. - options : dict or None, optional - A dictionary of options to pass to the PyBaMM Thevenin model. - **kwargs : - Additional arguments passed to the PyBaMM Thevenin model constructor. - """ - - def __init__( - self, - name="Equivalent Circuit Thevenin Model", - parameter_set=None, - geometry=None, - submesh_types=None, - var_pts=None, - spatial_methods=None, - solver=None, - options=None, - **kwargs, - ): - super().__init__() - self.pybamm_model = pybamm.equivalent_circuit.Thevenin( - options=options, **kwargs - ) - self._unprocessed_model = self.pybamm_model - self.name = name - - if isinstance(parameter_set, dict): - self.default_parameter_values = pybamm.ParameterValues(parameter_set) - self._parameter_set = self.default_parameter_values - else: - self.default_parameter_values = self.pybamm_model.default_parameter_values - self._parameter_set = ( - parameter_set or self.pybamm_model.default_parameter_values - ) - - self._unprocessed_parameter_set = self._parameter_set - - self.geometry = geometry or self.pybamm_model.default_geometry - self.submesh_types = submesh_types or self.pybamm_model.default_submesh_types - self.var_pts = var_pts or self.pybamm_model.default_var_pts - self.spatial_methods = ( - spatial_methods or self.pybamm_model.default_spatial_methods - ) - self.solver = solver or self.pybamm_model.default_solver - - self._model_with_set_params = None - self._built_model = None - self._built_initial_soc = None - self._mesh = None - self._disc = None
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/models/lithium_ion/echem.html b/_modules/pybop/models/lithium_ion/echem.html deleted file mode 100644 index f3d053a71..000000000 --- a/_modules/pybop/models/lithium_ion/echem.html +++ /dev/null @@ -1,611 +0,0 @@ - - - - - - - - - - pybop.models.lithium_ion.echem — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.models.lithium_ion.echem

-import pybamm
-from ..base_model import BaseModel
-
-
-
-[docs] -class SPM(BaseModel): - """ - Wraps the Single Particle Model (SPM) for simulating lithium-ion batteries, as implemented in PyBaMM. - - The SPM is a simplified physics-based model that represents a lithium-ion cell using a single - spherical particle to simulate the behavior of the negative and positive electrodes. - - Parameters - ---------- - name : str, optional - The name for the model instance, defaulting to "Single Particle Model". - parameter_set : pybamm.ParameterValues or dict, optional - The parameters for the model. If None, default parameters provided by PyBaMM are used. - geometry : dict, optional - The geometry definitions for the model. If None, default geometry from PyBaMM is used. - submesh_types : dict, optional - The types of submeshes to use. If None, default submesh types from PyBaMM are used. - var_pts : dict, optional - The discretization points for each variable in the model. If None, default points from PyBaMM are used. - spatial_methods : dict, optional - The spatial methods used for discretization. If None, default spatial methods from PyBaMM are used. - solver : pybamm.Solver, optional - The solver to use for simulating the model. If None, the default solver from PyBaMM is used. - options : dict, optional - A dictionary of options to customize the behavior of the PyBaMM model. - """ - - def __init__( - self, - name="Single Particle Model", - parameter_set=None, - geometry=None, - submesh_types=None, - var_pts=None, - spatial_methods=None, - solver=None, - options=None, - ): - super().__init__() - self.pybamm_model = pybamm.lithium_ion.SPM(options=options) - self._unprocessed_model = self.pybamm_model - self.name = name - - # Set parameters, using either the provided ones or the default - self.default_parameter_values = self.pybamm_model.default_parameter_values - self._parameter_set = ( - parameter_set or self.pybamm_model.default_parameter_values - ) - self._unprocessed_parameter_set = self._parameter_set - - # Define model geometry and discretization - self.geometry = geometry or self.pybamm_model.default_geometry - self.submesh_types = submesh_types or self.pybamm_model.default_submesh_types - self.var_pts = var_pts or self.pybamm_model.default_var_pts - self.spatial_methods = ( - spatial_methods or self.pybamm_model.default_spatial_methods - ) - self.solver = solver or self.pybamm_model.default_solver - - # Internal attributes for the built model are initialized but not set - self._model_with_set_params = None - self._built_model = None - self._built_initial_soc = None - self._mesh = None - self._disc = None
- - - -
-[docs] -class SPMe(BaseModel): - """ - Represents the Single Particle Model with Electrolyte (SPMe) for lithium-ion batteries. - - The SPMe extends the basic Single Particle Model (SPM) by incorporating electrolyte dynamics, - making it suitable for simulations where electrolyte effects are non-negligible. This class - provides a framework to define the model parameters, geometry, mesh types, discretization - points, spatial methods, and numerical solvers for simulation within the PyBaMM ecosystem. - - Parameters - ---------- - name: str, optional - A name for the model instance, defaults to "Single Particle Model with Electrolyte". - parameter_set: pybamm.ParameterValues or dict, optional - A dictionary or a ParameterValues object containing the parameters for the model. If None, the default PyBaMM parameters for SPMe are used. - geometry: dict, optional - A dictionary defining the model's geometry. If None, the default PyBaMM geometry for SPMe is used. - submesh_types: dict, optional - A dictionary defining the types of submeshes to use. If None, the default PyBaMM submesh types for SPMe are used. - var_pts: dict, optional - A dictionary specifying the number of points for each variable for discretization. If None, the default PyBaMM variable points for SPMe are used. - spatial_methods: dict, optional - A dictionary specifying the spatial methods for discretization. If None, the default PyBaMM spatial methods for SPMe are used. - solver: pybamm.Solver, optional - The solver to use for simulating the model. If None, the default PyBaMM solver for SPMe is used. - options: dict, optional - A dictionary of options to customize the behavior of the PyBaMM model. - """ - - def __init__( - self, - name="Single Particle Model with Electrolyte", - parameter_set=None, - geometry=None, - submesh_types=None, - var_pts=None, - spatial_methods=None, - solver=None, - options=None, - ): - super().__init__() - self.pybamm_model = pybamm.lithium_ion.SPMe(options=options) - self._unprocessed_model = self.pybamm_model - self.name = name - - # Set parameters, using either the provided ones or the default - self.default_parameter_values = self.pybamm_model.default_parameter_values - self._parameter_set = ( - parameter_set or self.pybamm_model.default_parameter_values - ) - self._unprocessed_parameter_set = self._parameter_set - - # Define model geometry and discretization - self.geometry = geometry or self.pybamm_model.default_geometry - self.submesh_types = submesh_types or self.pybamm_model.default_submesh_types - self.var_pts = var_pts or self.pybamm_model.default_var_pts - self.spatial_methods = ( - spatial_methods or self.pybamm_model.default_spatial_methods - ) - self.solver = solver or self.pybamm_model.default_solver - - # Internal attributes for the built model are initialized but not set - self._model_with_set_params = None - self._built_model = None - self._built_initial_soc = None - self._mesh = None - self._disc = None
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/optimisation.html b/_modules/pybop/optimisation.html deleted file mode 100644 index 32bed228b..000000000 --- a/_modules/pybop/optimisation.html +++ /dev/null @@ -1,966 +0,0 @@ - - - - - - - - - - pybop.optimisation — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.optimisation

-import pybop
-import pints
-import numpy as np
-
-
-
-[docs] -class Optimisation: - """ - A class for conducting optimization using PyBOP or PINTS optimizers. - - Parameters - ---------- - cost : pints.ErrorMeasure or pints.LogPDF - An objective function to be optimized, which can be either a PINTS error measure or log PDF. - optimiser : pints.Optimiser or subclass of pybop.BaseOptimizer, optional - An optimizer from either the PINTS or PyBOP framework to perform the optimization (default: None). - sigma0 : float or sequence, optional - Initial step size or standard deviation for the optimizer (default: None). - verbose : bool, optional - If True, the optimization progress is printed (default: False). - - Attributes - ---------- - x0 : numpy.ndarray - Initial parameter values for the optimization. - bounds : dict - Dictionary containing the parameter bounds with keys 'lower' and 'upper'. - n_parameters : int - Number of parameters in the optimization problem. - sigma0 : float or sequence - Initial step size or standard deviation for the optimizer. - log : list - Log of the optimization process. - """ - - def __init__( - self, - cost, - optimiser=None, - sigma0=None, - verbose=False, - ): - self.cost = cost - self.optimiser = optimiser - self.verbose = verbose - self.x0 = cost.x0 - self.bounds = cost.bounds - self.n_parameters = cost.n_parameters - self.sigma0 = sigma0 - self.log = [] - - # Convert x0 to pints vector - self._x0 = pints.vector(self.x0) - - # PyBOP doesn't currently support the pints transformation class - self._transformation = None - - # Check if minimising or maximising - self._minimising = not isinstance(cost, pints.LogPDF) - if self._minimising: - self._function = self.cost - else: - self._function = pints.ProbabilityBasedError(cost) - del cost - - # Construct Optimiser - self.pints = True - - if self.optimiser is None: - self.optimiser = pybop.CMAES - elif issubclass(self.optimiser, pints.Optimiser): - pass - else: - self.pints = False - - if issubclass(self.optimiser, pybop.NLoptOptimize): - self.optimiser = self.optimiser(self.n_parameters) - - elif issubclass( - self.optimiser, (pybop.SciPyMinimize, pybop.SciPyDifferentialEvolution) - ): - self.optimiser = self.optimiser() - - else: - raise ValueError("Unknown optimiser type") - - if self.pints: - self.optimiser = self.optimiser(self.x0, self.sigma0, self.bounds) - - # Check if sensitivities are required - self._needs_sensitivities = self.optimiser.needs_sensitivities() - - # Track optimiser's f_best or f_guessed - self._use_f_guessed = None - self.set_f_guessed_tracking() - - # Parallelisation - self._parallel = False - self._n_workers = 1 - self.set_parallel() - - # User callback - self._callback = None - - # Define stopping criteria - # Maximum iterations - self._max_iterations = None - self.set_max_iterations() - - # Maximum unchanged iterations - self._unchanged_threshold = 1 # smallest significant f change - self._unchanged_max_iterations = None - self.set_max_unchanged_iterations() - - # Maximum evaluations - self._max_evaluations = None - - # Threshold value - self._threshold = None - - # Post-run statistics - self._evaluations = None - self._iterations = None - -
-[docs] - def run(self): - """ - Run the optimization and return the optimized parameters and final cost. - - Returns - ------- - x : numpy.ndarray - The best parameter set found by the optimization. - final_cost : float - The final cost associated with the best parameters. - """ - - if self.pints: - x, final_cost = self._run_pints() - elif not self.pints: - x, final_cost = self._run_pybop() - - # Store the optimised parameters - if self.cost.problem is not None: - self.store_optimised_parameters(x) - - return x, final_cost
- - -
-[docs] - def _run_pybop(self): - """ - Internal method to run the optimization using a PyBOP optimizer. - - Returns - ------- - x : numpy.ndarray - The best parameter set found by the optimization. - final_cost : float - The final cost associated with the best parameters. - """ - x, final_cost = self.optimiser.optimise( - cost_function=self.cost, - x0=self.x0, - bounds=self.bounds, - maxiter=self._max_iterations, - ) - self.log = self.optimiser.log - - return x, final_cost
- - -
-[docs] - def _run_pints(self): - """ - Internal method to run the optimization using a PINTS optimizer. - - Returns - ------- - x : numpy.ndarray - The best parameter set found by the optimization. - final_cost : float - The final cost associated with the best parameters. - - See Also - -------- - This method is heavily based on the run method in the PINTS.OptimisationController class. - """ - - # Check stopping criteria - has_stopping_criterion = False - has_stopping_criterion |= self._max_iterations is not None - has_stopping_criterion |= self._unchanged_max_iterations is not None - has_stopping_criterion |= self._max_evaluations is not None - has_stopping_criterion |= self._threshold is not None - if not has_stopping_criterion: - raise ValueError("At least one stopping criterion must be set.") - - # Iterations and function evaluations - iteration = 0 - evaluations = 0 - - # Unchanged iterations counter - unchanged_iterations = 0 - - # Choose method to evaluate - f = self._function - if self._needs_sensitivities: - f = f.evaluateS1 - - # Create evaluator object - if self._parallel: - # Get number of workers - n_workers = self._n_workers - - # For population based optimisers, don't use more workers than - # particles! - if isinstance(self._optimiser, pints.PopulationBasedOptimiser): - n_workers = min(n_workers, self._optimiser.population_size()) - evaluator = pints.ParallelEvaluator(f, n_workers=n_workers) - else: - evaluator = pints.SequentialEvaluator(f) - - # Keep track of current best and best-guess scores. - fb = fg = np.inf - - # Internally we always minimise! Keep a 2nd value to show the user. - fg_user = (fb, fg) if self._minimising else (-fb, -fg) - - # Keep track of the last significant change - f_sig = np.inf - - # Run the ask-and-tell loop - running = True - try: - while running: - # Ask optimiser for new points - xs = self.optimiser.ask() - - # Evaluate points - fs = evaluator.evaluate(xs) - - # Tell optimiser about function values - self.optimiser.tell(fs) - - # Update the scores - fb = self.optimiser.f_best() - fg = self.optimiser.f_guessed() - fg_user = (fb, fg) if self._minimising else (-fb, -fg) - - # Check for significant changes - f_new = fg if self._use_f_guessed else fb - if np.abs(f_new - f_sig) >= self._unchanged_threshold: - unchanged_iterations = 0 - f_sig = f_new - else: - unchanged_iterations += 1 - - # Update counts - evaluations += len(fs) - iteration += 1 - self.log.append(xs) - - # Check stopping criteria: - # Maximum number of iterations - if ( - self._max_iterations is not None - and iteration >= self._max_iterations - ): - running = False - halt_message = ( - "Maximum number of iterations (" + str(iteration) + ") reached." - ) - - # Maximum number of iterations without significant change - halt = ( - self._unchanged_max_iterations is not None - and unchanged_iterations >= self._unchanged_max_iterations - ) - if running and halt: - running = False - halt_message = ( - "No significant change for " - + str(unchanged_iterations) - + " iterations." - ) - - # Maximum number of evaluations - if ( - self._max_evaluations is not None - and evaluations >= self._max_evaluations - ): - running = False - halt_message = ( - "Maximum number of evaluations (" - + str(self._max_evaluations) - + ") reached." - ) - - # Threshold value - halt = self._threshold is not None and f_new < self._threshold - if running and halt: - running = False - halt_message = ( - "Objective function crossed threshold: " - + str(self._threshold) - + "." - ) - - # Error in optimiser - error = self.optimiser.stop() - if error: - running = False - halt_message = str(error) - - elif self._callback is not None: - self._callback(iteration - 1, self.optimiser) - - except (Exception, SystemExit, KeyboardInterrupt): - # Show last result and exit - print("\n" + "-" * 40) - print("Unexpected termination.") - print("Current score: " + str(fg_user)) - print("Current position:") - - # Show current parameters - x_user = self.optimiser.x_guessed() - if self._transformation is not None: - x_user = self._transformation.to_model(x_user) - for p in x_user: - print(pints.strfloat(p)) - print("-" * 40) - raise - - if self.verbose: - print("Halt: " + halt_message) - - # Save post-run statistics - self._evaluations = evaluations - self._iterations = iteration - - # Get best parameters - if self._use_f_guessed: - x = self.optimiser.x_guessed() - f = self.optimiser.f_guessed() - else: - x = self.optimiser.x_best() - f = self.optimiser.f_best() - - # Inverse transform search parameters - if self._transformation is not None: - x = self._transformation.to_model(x) - - # Return best position and score - return x, f if self._minimising else -f
- - -
-[docs] - def f_guessed_tracking(self): - """ - Check if f_guessed instead of f_best is being tracked. - Credit: PINTS - - Returns - ------- - bool - True if f_guessed is being tracked, False otherwise. - """ - return self._use_f_guessed
- - -
-[docs] - def set_f_guessed_tracking(self, use_f_guessed=False): - """ - Set the method used to track the optimizer progress. - Credit: PINTS - - Parameters - ---------- - use_f_guessed : bool, optional - If True, track f_guessed; otherwise, track f_best (default: False). - """ - self._use_f_guessed = bool(use_f_guessed)
- - -
-[docs] - def set_max_evaluations(self, evaluations=None): - """ - Set a maximum number of evaluations stopping criterion. - Credit: PINTS - - Parameters - ---------- - evaluations : int, optional - The maximum number of evaluations after which to stop the optimization (default: None). - """ - if evaluations is not None: - evaluations = int(evaluations) - if evaluations < 0: - raise ValueError("Maximum number of evaluations cannot be negative.") - self._max_evaluations = evaluations
- - -
-[docs] - def set_parallel(self, parallel=False): - """ - Enable or disable parallel evaluation. - Credit: PINTS - - Parameters - ---------- - parallel : bool or int, optional - If True, use as many worker processes as there are CPU cores. If an integer, use that many workers. - If False or 0, disable parallelism (default: False). - """ - if parallel is True: - self._parallel = True - self._n_workers = pints.ParallelEvaluator.cpu_count() - elif parallel >= 1: - self._parallel = True - self._n_workers = int(parallel) - else: - self._parallel = False - self._n_workers = 1
- - -
-[docs] - def set_max_iterations(self, iterations=1000): - """ - Set the maximum number of iterations as a stopping criterion. - Credit: PINTS - - Parameters - ---------- - iterations : int, optional - The maximum number of iterations to run (default is 1000). - Set to `None` to remove this stopping criterion. - """ - if iterations is not None: - iterations = int(iterations) - if iterations < 0: - raise ValueError("Maximum number of iterations cannot be negative.") - self._max_iterations = iterations
- - -
-[docs] - def set_max_unchanged_iterations(self, iterations=25, threshold=1e-5): - """ - Set the maximum number of iterations without significant change as a stopping criterion. - Credit: PINTS - - Parameters - ---------- - iterations : int, optional - The maximum number of unchanged iterations to run (default is 25). - Set to `None` to remove this stopping criterion. - threshold : float, optional - The minimum significant change in the objective function value that resets the unchanged iteration counter (default is 1e-5). - """ - if iterations is not None: - iterations = int(iterations) - if iterations < 0: - raise ValueError("Maximum number of iterations cannot be negative.") - - threshold = float(threshold) - if threshold < 0: - raise ValueError("Minimum significant change cannot be negative.") - - self._unchanged_max_iterations = iterations - self._unchanged_threshold = threshold
- - -
-[docs] - def store_optimised_parameters(self, x): - """ - Update the problem parameters with optimized values. - - The optimized parameter values are stored within the associated PyBOP parameter class. - - Parameters - ---------- - x : array-like - Optimized parameter values. - """ - for i, param in enumerate(self.cost.problem.parameters): - param.update(value=x[i])
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/optimisers/base_optimiser.html b/_modules/pybop/optimisers/base_optimiser.html deleted file mode 100644 index af752bb2c..000000000 --- a/_modules/pybop/optimisers/base_optimiser.html +++ /dev/null @@ -1,567 +0,0 @@ - - - - - - - - - - pybop.optimisers.base_optimiser — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.optimisers.base_optimiser

-
-[docs] -class BaseOptimiser: - """ - A base class for defining optimisation methods. - - This class serves as a template for creating optimisers. It provides a basic structure for - an optimisation algorithm, including the initial setup and a method stub for performing - the optimisation process. Child classes should override the optimise and _runoptimise - methods with specific algorithms. - - Methods - ------- - optimise(cost_function, x0=None, bounds=None, maxiter=None) - Initiates the optimisation process. This is a stub and should be implemented in child classes. - _runoptimise(cost_function, x0=None, bounds=None) - Contains the logic for the optimisation algorithm. This is a stub and should be implemented in child classes. - name() - Returns the name of the optimiser. - """ - - def __init__(self): - """ - Initializes the BaseOptimiser. - """ - pass - -
-[docs] - def optimise(self, cost_function, x0=None, bounds=None, maxiter=None): - """ - Initiates the optimisation process. - - This method should be overridden by child classes with the specific optimisation algorithm. - - Parameters - ---------- - cost_function : callable - The cost function to be minimised by the optimiser. - x0 : ndarray, optional - Initial guess for the parameters. Default is None. - bounds : sequence or Bounds, optional - Bounds on the parameters. Default is None. - maxiter : int, optional - Maximum number of iterations to perform. Default is None. - - Returns - ------- - The result of the optimisation process. The specific type of this result will depend on the child implementation. - """ - self.cost_function = cost_function - self.x0 = x0 - self.bounds = bounds - self.maxiter = maxiter - - # Run optimisation - result = self._runoptimise(self.cost_function, x0=self.x0, bounds=self.bounds) - - return result
- - -
-[docs] - def _runoptimise(self, cost_function, x0=None, bounds=None): - """ - Contains the logic for the optimisation algorithm. - - This method should be implemented by child classes to perform the actual optimisation. - - Parameters - ---------- - cost_function : callable - The cost function to be minimised by the optimiser. - x0 : ndarray, optional - Initial guess for the parameters. Default is None. - bounds : sequence or Bounds, optional - Bounds on the parameters. Default is None. - - Returns - ------- - This method is expected to return the result of the optimisation, the format of which - will be determined by the child class implementation. - """ - pass
- - -
-[docs] - def name(self): - """ - Returns the name of the optimiser. - - Returns - ------- - str - The name of the optimiser, which is "BaseOptimiser" for this base class. - """ - return "BaseOptimiser"
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/optimisers/nlopt_optimize.html b/_modules/pybop/optimisers/nlopt_optimize.html deleted file mode 100644 index 2dfe4d56b..000000000 --- a/_modules/pybop/optimisers/nlopt_optimize.html +++ /dev/null @@ -1,592 +0,0 @@ - - - - - - - - - - pybop.optimisers.nlopt_optimize — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.optimisers.nlopt_optimize

-import nlopt
-from .base_optimiser import BaseOptimiser
-import numpy as np
-
-
-
-[docs] -class NLoptOptimize(BaseOptimiser): - """ - Extends BaseOptimiser to utilize the NLopt library for nonlinear optimization. - - This class serves as an interface to the NLopt optimization algorithms. It allows the user to - define an optimization problem with bounds, initial guesses, and to select an optimization method - provided by NLopt. - - Parameters - ---------- - n_param : int - Number of parameters to optimize. - xtol : float, optional - The relative tolerance for optimization (stopping criteria). If not provided, a default of 1e-5 is used. - method : nlopt.algorithm, optional - The NLopt algorithm to use for optimization. If not provided, LN_BOBYQA is used by default. - maxiter : int, optional - The maximum number of iterations to perform during optimization. If not provided, NLopt's default is used. - - Methods - ------- - _runoptimise(cost_function, x0, bounds) - Performs the optimization using the NLopt library. - needs_sensitivities() - Indicates whether the optimizer requires gradient information. - name() - Returns the name of the optimizer. - """ - - def __init__(self, n_param, xtol=None, method=None, maxiter=None): - super().__init__() - self.n_param = n_param - self.maxiter = maxiter - - if method is not None: - self.optim = nlopt.opt(method, self.n_param) - else: - self.optim = nlopt.opt(nlopt.LN_BOBYQA, self.n_param) - - if xtol is not None: - self.optim.set_xtol_rel(xtol) - else: - self.optim.set_xtol_rel(1e-5) - -
-[docs] - def _runoptimise(self, cost_function, x0, bounds): - """ - Runs the optimization process using the NLopt library. - - Parameters - ---------- - cost_function : callable - The objective function to minimize. It should take an array of parameter values and return the scalar cost. - x0 : array_like - The initial guess for the parameters. - bounds : dict - A dictionary containing the 'lower' and 'upper' bounds arrays for the parameters. - - Returns - ------- - tuple - A tuple containing the optimized parameter values and the final cost. - """ - - # Add callback storing history of parameter values - self.log = [[x0]] - - def cost_wrapper(x, grad): - self.log.append([np.array(x)]) - return cost_function(x, grad) - - # Pass settings to the optimiser - self.optim.set_min_objective(cost_wrapper) - self.optim.set_lower_bounds(bounds["lower"]) - self.optim.set_upper_bounds(bounds["upper"]) - - # Set max iterations - if self.maxiter is not None: - self.optim.set_maxeval(self.maxiter) - - # Run the optimser - x = self.optim.optimize(x0) - - # Get performance statistics - final_cost = self.optim.last_optimum_value() - - return x, final_cost
- - -
-[docs] - def needs_sensitivities(self): - """ - Indicates if the optimizer requires gradient information for the cost function. - - Returns - ------- - bool - False, as the default NLopt algorithms do not require gradient information. - """ - return False
- - -
-[docs] - def name(self): - """ - Returns the name of this optimizer instance. - - Returns - ------- - str - The name 'NLoptOptimize' representing this NLopt optimization class. - """ - return "NLoptOptimize"
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/optimisers/pints_optimisers.html b/_modules/pybop/optimisers/pints_optimisers.html deleted file mode 100644 index 85a935888..000000000 --- a/_modules/pybop/optimisers/pints_optimisers.html +++ /dev/null @@ -1,708 +0,0 @@ - - - - - - - - - - pybop.optimisers.pints_optimisers — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.optimisers.pints_optimisers

-import pints
-
-
-
-[docs] -class GradientDescent(pints.GradientDescent): - """ - Implements a simple gradient descent optimization algorithm. - - This class extends the gradient descent optimizer from the PINTS library, designed - to minimize a scalar function of one or more variables. Note that this optimizer - does not support boundary constraints. - - Parameters - ---------- - x0 : array_like - Initial position from which optimization will start. - sigma0 : float, optional - Initial step size (default is 0.1). - bounds : sequence or ``Bounds``, optional - Ignored by this optimizer, provided for API consistency. - - See Also - -------- - pints.GradientDescent : The PINTS implementation this class is based on. - """ - - def __init__(self, x0, sigma0=0.1, bounds=None): - if bounds is not None: - print("NOTE: Boundaries ignored by Gradient Descent") - - self.boundaries = None # Bounds ignored in pints.GradDesc - super().__init__(x0, sigma0, self.boundaries)
- - - -
-[docs] -class Adam(pints.Adam): - """ - Implements the Adam optimization algorithm. - - This class extends the Adam optimizer from the PINTS library, which combines - ideas from RMSProp and Stochastic Gradient Descent with momentum. Note that - this optimizer does not support boundary constraints. - - Parameters - ---------- - x0 : array_like - Initial position from which optimization will start. - sigma0 : float, optional - Initial step size (default is 0.1). - bounds : sequence or ``Bounds``, optional - Ignored by this optimizer, provided for API consistency. - - See Also - -------- - pints.Adam : The PINTS implementation this class is based on. - """ - - def __init__(self, x0, sigma0=0.1, bounds=None): - if bounds is not None: - print("NOTE: Boundaries ignored by Adam") - - self.boundaries = None # Bounds ignored in pints.Adam - super().__init__(x0, sigma0, self.boundaries)
- - - -
-[docs] -class IRPropMin(pints.IRPropMin): - """ - Implements the iRpropMin optimization algorithm. - - This class inherits from the PINTS IRPropMin class, which is an optimizer that - uses resilient backpropagation with weight-backtracking. It is designed to handle - problems with large plateaus, noisy gradients, and local minima. - - Parameters - ---------- - x0 : array_like - Initial position from which optimization will start. - sigma0 : float, optional - Initial step size (default is 0.1). - bounds : dict, optional - Lower and upper bounds for each optimization parameter. - - See Also - -------- - pints.IRPropMin : The PINTS implementation this class is based on. - """ - - def __init__(self, x0, sigma0=0.1, bounds=None): - if bounds is not None: - self.boundaries = pints.RectangularBoundaries( - bounds["lower"], bounds["upper"] - ) - else: - self.boundaries = None - super().__init__(x0, sigma0, self.boundaries)
- - - -
-[docs] -class PSO(pints.PSO): - """ - Implements a particle swarm optimization (PSO) algorithm. - - This class extends the PSO optimizer from the PINTS library. PSO is a - metaheuristic optimization method inspired by the social behavior of birds - flocking or fish schooling, suitable for global optimization problems. - - Parameters - ---------- - x0 : array_like - Initial positions of particles, which the optimization will use. - sigma0 : float, optional - Spread of the initial particle positions (default is 0.1). - bounds : dict, optional - Lower and upper bounds for each optimization parameter. - - See Also - -------- - pints.PSO : The PINTS implementation this class is based on. - """ - - def __init__(self, x0, sigma0=0.1, bounds=None): - if bounds is not None: - self.boundaries = pints.RectangularBoundaries( - bounds["lower"], bounds["upper"] - ) - else: - self.boundaries = None - super().__init__(x0, sigma0, self.boundaries)
- - - -
-[docs] -class SNES(pints.SNES): - """ - Implements the stochastic natural evolution strategy (SNES) optimization algorithm. - - Inheriting from the PINTS SNES class, this optimizer is an evolutionary algorithm - that evolves a probability distribution on the parameter space, guiding the search - for the optimum based on the natural gradient of expected fitness. - - Parameters - ---------- - x0 : array_like - Initial position from which optimization will start. - sigma0 : float, optional - Initial step size (default is 0.1). - bounds : dict, optional - Lower and upper bounds for each optimization parameter. - - See Also - -------- - pints.SNES : The PINTS implementation this class is based on. - """ - - def __init__(self, x0, sigma0=0.1, bounds=None): - if bounds is not None: - self.boundaries = pints.RectangularBoundaries( - bounds["lower"], bounds["upper"] - ) - else: - self.boundaries = None - super().__init__(x0, sigma0, self.boundaries)
- - - -
-[docs] -class XNES(pints.XNES): - """ - Implements the Exponential Natural Evolution Strategy (XNES) optimizer from PINTS. - - XNES is an evolutionary algorithm that samples from a multivariate normal distribution, which is updated iteratively to fit the distribution of successful solutions. - - Parameters - ---------- - x0 : array_like - The initial parameter vector to optimize. - sigma0 : float, optional - Initial standard deviation of the sampling distribution, defaults to 0.1. - bounds : dict, optional - A dictionary with 'lower' and 'upper' keys containing arrays for lower and upper bounds on the parameters. If ``None``, no bounds are enforced. - - See Also - -------- - pints.XNES : PINTS implementation of XNES algorithm. - """ - - def __init__(self, x0, sigma0=0.1, bounds=None): - if bounds is not None: - self.boundaries = pints.RectangularBoundaries( - bounds["lower"], bounds["upper"] - ) - else: - self.boundaries = None - super().__init__(x0, sigma0, self.boundaries)
- - - -
-[docs] -class CMAES(pints.CMAES): - """ - Adapter for the Covariance Matrix Adaptation Evolution Strategy (CMA-ES) optimizer in PINTS. - - CMA-ES is an evolutionary algorithm for difficult non-linear non-convex optimization problems. - It adapts the covariance matrix of a multivariate normal distribution to capture the shape of the cost landscape. - - Parameters - ---------- - x0 : array_like - The initial parameter vector to optimize. - sigma0 : float, optional - Initial standard deviation of the sampling distribution, defaults to 0.1. - bounds : dict, optional - A dictionary with 'lower' and 'upper' keys containing arrays for lower and upper bounds on the parameters. - If ``None``, no bounds are enforced. - - See Also - -------- - pints.CMAES : PINTS implementation of CMA-ES algorithm. - """ - - def __init__(self, x0, sigma0=0.1, bounds=None): - if bounds is not None: - self.boundaries = pints.RectangularBoundaries( - bounds["lower"], bounds["upper"] - ) - else: - self.boundaries = None - - super().__init__(x0, sigma0, self.boundaries)
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/optimisers/scipy_optimisers.html b/_modules/pybop/optimisers/scipy_optimisers.html deleted file mode 100644 index a8f1b5b2d..000000000 --- a/_modules/pybop/optimisers/scipy_optimisers.html +++ /dev/null @@ -1,693 +0,0 @@ - - - - - - - - - - pybop.optimisers.scipy_optimisers — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.optimisers.scipy_optimisers

-from scipy.optimize import minimize, differential_evolution
-from .base_optimiser import BaseOptimiser
-
-
-
-[docs] -class SciPyMinimize(BaseOptimiser): - """ - Adapts SciPy's minimize function for use as an optimization strategy. - - This class provides an interface to various scalar minimization algorithms implemented in SciPy, allowing fine-tuning of the optimization process through method selection and option configuration. - - Parameters - ---------- - method : str, optional - The type of solver to use. If not specified, defaults to 'COBYLA'. - bounds : sequence or ``Bounds``, optional - Bounds for variables as supported by the selected method. - maxiter : int, optional - Maximum number of iterations to perform. - """ - - def __init__(self, method=None, bounds=None, maxiter=None): - super().__init__() - self.method = method - self.bounds = bounds - self.maxiter = maxiter - if self.maxiter is not None: - self.options = {"maxiter": self.maxiter} - else: - self.options = {} - - if self.method is None: - self.method = "COBYLA" # "L-BFGS-B" - -
-[docs] - def _runoptimise(self, cost_function, x0, bounds): - """ - Executes the optimization process using SciPy's minimize function. - - Parameters - ---------- - cost_function : callable - The objective function to minimize. - x0 : array_like - Initial guess for the parameters. - bounds : sequence or `Bounds` - Bounds for the variables. - - Returns - ------- - tuple - A tuple (x, final_cost) containing the optimized parameters and the value of `cost_function` at the optimum. - """ - - # Add callback storing history of parameter values - self.log = [[x0]] - - def callback(x): - self.log.append([x]) - - # Reformat bounds - if bounds is not None: - bounds = ( - (lower, upper) for lower, upper in zip(bounds["lower"], bounds["upper"]) - ) - - output = minimize( - cost_function, - x0, - method=self.method, - bounds=bounds, - options=self.options, - callback=callback, - ) - - # Get performance statistics - x = output.x - final_cost = output.fun - - return x, final_cost
- - -
-[docs] - def needs_sensitivities(self): - """ - Determines if the optimization algorithm requires gradient information. - - Returns - ------- - bool - False, indicating that gradient information is not required. - """ - return False
- - -
-[docs] - def name(self): - """ - Provides the name of the optimization strategy. - - Returns - ------- - str - The name 'SciPyMinimize'. - """ - return "SciPyMinimize"
-
- - - -
-[docs] -class SciPyDifferentialEvolution(BaseOptimiser): - """ - Adapts SciPy's differential_evolution function for global optimization. - - This class provides a global optimization strategy based on differential evolution, useful for problems involving continuous parameters and potentially multiple local minima. - - Parameters - ---------- - bounds : sequence or ``Bounds`` - Bounds for variables. Must be provided as it is essential for differential evolution. - strategy : str, optional - The differential evolution strategy to use. Defaults to 'best1bin'. - maxiter : int, optional - Maximum number of iterations to perform. Defaults to 1000. - popsize : int, optional - The number of individuals in the population. Defaults to 15. - """ - - def __init__(self, bounds=None, strategy="best1bin", maxiter=1000, popsize=15): - super().__init__() - self.bounds = bounds - self.strategy = strategy - self.maxiter = maxiter - self.popsize = popsize - -
-[docs] - def _runoptimise(self, cost_function, x0=None, bounds=None): - """ - Executes the optimization process using SciPy's differential_evolution function. - - Parameters - ---------- - cost_function : callable - The objective function to minimize. - x0 : array_like, optional - Ignored parameter, provided for API consistency. - bounds : sequence or ``Bounds`` - Bounds for the variables, required for differential evolution. - - Returns - ------- - tuple - A tuple (x, final_cost) containing the optimized parameters and the value of ``cost_function`` at the optimum. - """ - - if bounds is None: - raise ValueError("Bounds must be specified for differential_evolution.") - - if x0 is not None: - print( - "Ignoring x0. Initial conditions are not used for differential_evolution." - ) - - # Add callback storing history of parameter values - self.log = [] - - def callback(x, convergence): - self.log.append([x]) - - # Reformat bounds if necessary - if isinstance(bounds, dict): - bounds = [ - (lower, upper) for lower, upper in zip(bounds["lower"], bounds["upper"]) - ] - - output = differential_evolution( - cost_function, - bounds, - strategy=self.strategy, - maxiter=self.maxiter, - popsize=self.popsize, - callback=callback, - ) - - # Get performance statistics - x = output.x - final_cost = output.fun - - return x, final_cost
- - -
-[docs] - def needs_sensitivities(self): - """ - Determines if the optimization algorithm requires gradient information. - - Returns - ------- - bool - False, indicating that gradient information is not required for differential evolution. - """ - return False
- - -
-[docs] - def name(self): - """ - Provides the name of the optimization strategy. - - Returns - ------- - str - The name 'SciPyDifferentialEvolution'. - """ - return "SciPyDifferentialEvolution"
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/parameters/parameter.html b/_modules/pybop/parameters/parameter.html deleted file mode 100644 index 88e125ea1..000000000 --- a/_modules/pybop/parameters/parameter.html +++ /dev/null @@ -1,605 +0,0 @@ - - - - - - - - - - pybop.parameters.parameter — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.parameters.parameter

-import numpy as np
-
-
-
-[docs] -class Parameter: - """ - Represents a parameter within the PyBOP framework. - - This class encapsulates the definition of a parameter, including its name, prior - distribution, initial value, bounds, and a margin to ensure the parameter stays - within feasible limits during optimization or sampling. - - Parameters - ---------- - name : str - The name of the parameter. - initial_value : float, optional - The initial value to be assigned to the parameter. Defaults to None. - prior : scipy.stats distribution, optional - The prior distribution from which parameter values are drawn. Defaults to None. - bounds : tuple, optional - A tuple defining the lower and upper bounds for the parameter. - Defaults to None. - - Methods - ------- - rvs(n_samples) - Draw random samples from the parameter's prior distribution. - update(value) - Update the parameter's current value. - set_margin(margin) - Set the margin to a specified positive value less than 1. - - Raises - ------ - ValueError - If the lower bound is not strictly less than the upper bound, or if - the margin is set outside the interval (0, 1). - """ - - def __init__(self, name, initial_value=None, prior=None, bounds=None): - """ - Construct the parameter class with a name, initial value, prior, and bounds. - """ - self.name = name - self.prior = prior - self.initial_value = initial_value - self.value = initial_value - self.bounds = bounds - self.lower_bound = self.bounds[0] - self.upper_bound = self.bounds[1] - self.margin = 1e-4 - - if self.lower_bound >= self.upper_bound: - raise ValueError("Lower bound must be less than upper bound") - -
-[docs] - def rvs(self, n_samples): - """ - Draw random samples from the parameter's prior distribution. - - The samples are constrained to be within the parameter's bounds, excluding - a predefined margin at the boundaries. - - Parameters - ---------- - n_samples : int - The number of samples to draw. - - Returns - ------- - array-like - An array of samples drawn from the prior distribution within the parameter's bounds. - """ - samples = self.prior.rvs(n_samples) - - # Constrain samples to be within bounds - offset = self.margin * (self.upper_bound - self.lower_bound) - samples = np.clip(samples, self.lower_bound + offset, self.upper_bound - offset) - - return samples
- - -
-[docs] - def update(self, value): - """ - Update the parameter's current value. - - Parameters - ---------- - value : float - The new value to be assigned to the parameter. - """ - self.value = value
- - -
-[docs] - def __repr__(self): - """ - Return a string representation of the Parameter instance. - - Returns - ------- - str - A string including the parameter's name, prior, bounds, and current value. - """ - return f"Parameter: {self.name} \n Prior: {self.prior} \n Bounds: {self.bounds} \n Value: {self.value}"
- - -
-[docs] - def set_margin(self, margin): - """ - Set the margin to a specified positive value less than 1. - - The margin is used to ensure parameter samples are not drawn exactly at the bounds, - which may be problematic in some optimization or sampling algorithms. - - Parameters - ---------- - margin : float - The new margin value to be used, which must be in the interval (0, 1). - - Raises - ------ - ValueError - If the margin is not between 0 and 1. - """ - if not 0 < margin < 1: - raise ValueError("Margin must be between 0 and 1") - - self.margin = margin
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/parameters/parameter_set.html b/_modules/pybop/parameters/parameter_set.html deleted file mode 100644 index 2cc247b1c..000000000 --- a/_modules/pybop/parameters/parameter_set.html +++ /dev/null @@ -1,640 +0,0 @@ - - - - - - - - - - pybop.parameters.parameter_set — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.parameters.parameter_set

-import json
-import types
-import pybamm
-import pybop
-
-
-
-[docs] -class ParameterSet: - """ - Handles the import and export of parameter sets for battery models. - - This class provides methods to load parameters from a JSON file and to export them - back to a JSON file. It also includes custom logic to handle special cases, such - as parameter values that require specific initialization. - - Parameters - ---------- - json_path : str, optional - Path to a JSON file containing parameter data. If provided, parameters will be imported from this file during initialization. - params_dict : dict, optional - A dictionary of parameters to initialize the ParameterSet with. If not provided, an empty dictionary is used. - """ - - def __init__(self, json_path=None, params_dict=None): - self.json_path = json_path - self.params = params_dict or {} - self.chemistry = None - -
-[docs] - def import_parameters(self, json_path=None): - """ - Imports parameters from a JSON file specified by the `json_path` attribute. - - If a `json_path` is provided at initialization or as an argument, that JSON file - is loaded and the parameters are stored in the `params` attribute. Special cases - are handled appropriately. - - Parameters - ---------- - json_path : str, optional - Path to the JSON file from which to import parameters. If provided, it overrides the instance's `json_path`. - - Returns - ------- - dict - The dictionary containing the imported parameters. - - Raises - ------ - FileNotFoundError - If the specified JSON file cannot be found. - """ - - # Read JSON file - if not self.params and self.json_path: - with open(self.json_path, "r") as file: - self.params = json.load(file) - self._handle_special_cases() - if self.params["chemistry"] is not None: - self.chemistry = self.params["chemistry"] - return self.params
- - -
-[docs] - def _handle_special_cases(self): - """ - Processes special cases for parameter values that require custom handling. - - For example, if the open-circuit voltage is specified as 'default', it will - fetch the default value from the PyBaMM empirical Thevenin model. - """ - if ( - "Open-circuit voltage [V]" in self.params - and self.params["Open-circuit voltage [V]"] == "default" - ): - self.params[ - "Open-circuit voltage [V]" - ] = pybop.empirical.Thevenin().default_parameter_values[ - "Open-circuit voltage [V]" - ]
- - -
-[docs] - def export_parameters(self, output_json_path, fit_params=None): - """ - Exports parameters to a JSON file specified by `output_json_path`. - - The current state of the `params` attribute is written to the file. If `fit_params` - is provided, these parameters are updated before export. Non-serializable values - are handled and noted in the output JSON. - - Parameters - ---------- - output_json_path : str - The file path where the JSON output will be saved. - fit_params : list of fitted parameter objects, optional - Parameters that have been fitted and need to be included in the export. - - Raises - ------ - ValueError - If there are no parameters to export. - """ - if not self.params: - raise ValueError("No parameters to export. Please import parameters first.") - - # Prepare a copy of the params to avoid modifying the original dict - exportable_params = {**{"chemistry": self.chemistry}, **self.params.copy()} - - # Update parameter set - if fit_params is not None: - for i, param in enumerate(fit_params): - exportable_params.update({param.name: param.value}) - - # Replace non-serializable values - for key, value in exportable_params.items(): - if isinstance(value, types.FunctionType) or not self.is_json_serializable( - value - ): - exportable_params[key] = "Unable to write value to JSON file" - - # Write parameters to JSON file - with open(output_json_path, "w") as file: - json.dump(exportable_params, file, indent=4)
- - -
-[docs] - def is_json_serializable(self, value): - """ - Determines if the given `value` can be serialized to JSON format. - - Parameters - ---------- - value : any - The value to check for JSON serializability. - - Returns - ------- - bool - True if the value is JSON serializable, False otherwise. - """ - try: - json.dumps(value) - return True - except (TypeError, OverflowError): - return False
- - - @classmethod -
-[docs] - def pybamm(cls, name): - """ - Retrieves a PyBaMM parameter set by name. - - Parameters - ---------- - name : str - The name of the PyBaMM parameter set to retrieve. - - Returns - ------- - pybamm.ParameterValues - A PyBaMM parameter set corresponding to the provided name. - """ - return pybamm.ParameterValues(name).copy()
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/parameters/priors.html b/_modules/pybop/parameters/priors.html deleted file mode 100644 index 3dffda073..000000000 --- a/_modules/pybop/parameters/priors.html +++ /dev/null @@ -1,761 +0,0 @@ - - - - - - - - - - pybop.parameters.priors — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.parameters.priors

-import scipy.stats as stats
-
-
-
-[docs] -class Gaussian: - """ - Represents a Gaussian (normal) distribution with a given mean and standard deviation. - - This class provides methods to calculate the probability density function (pdf), - the logarithm of the pdf, and to generate random variates (rvs) from the distribution. - - Parameters - ---------- - mean : float - The mean (mu) of the Gaussian distribution. - sigma : float - The standard deviation (sigma) of the Gaussian distribution. - """ - - def __init__(self, mean, sigma): - self.name = "Gaussian" - self.mean = mean - self.sigma = sigma - -
-[docs] - def pdf(self, x): - """ - Calculates the probability density function of the Gaussian distribution at x. - - Parameters - ---------- - x : float - The point at which to evaluate the pdf. - - Returns - ------- - float - The probability density function value at x. - """ - return stats.norm.pdf(x, loc=self.mean, scale=self.sigma)
- - -
-[docs] - def logpdf(self, x): - """ - Calculates the logarithm of the probability density function of the Gaussian distribution at x. - - Parameters - ---------- - x : float - The point at which to evaluate the log pdf. - - Returns - ------- - float - The logarithm of the probability density function value at x. - """ - return stats.norm.logpdf(x, loc=self.mean, scale=self.sigma)
- - -
-[docs] - def rvs(self, size): - """ - Generates random variates from the Gaussian distribution. - - Parameters - ---------- - size : int - The number of random variates to generate. - - Returns - ------- - array_like - An array of random variates from the Gaussian distribution. - - Raises - ------ - ValueError - If the size parameter is not positive. - """ - if size < 0: - raise ValueError("size must be positive") - else: - return stats.norm.rvs(loc=self.mean, scale=self.sigma, size=size)
- - -
-[docs] - def __repr__(self): - """ - Returns a string representation of the Gaussian object. - """ - return f"{self.name}, mean: {self.mean}, sigma: {self.sigma}"
-
- - - -
-[docs] -class Uniform: - """ - Represents a uniform distribution over a specified interval. - - This class provides methods to calculate the pdf, the log pdf, and to generate - random variates from the distribution. - - Parameters - ---------- - lower : float - The lower bound of the distribution. - upper : float - The upper bound of the distribution. - """ - - def __init__(self, lower, upper): - self.name = "Uniform" - self.lower = lower - self.upper = upper - -
-[docs] - def pdf(self, x): - """ - Calculates the probability density function of the uniform distribution at x. - - Parameters - ---------- - x : float - The point at which to evaluate the pdf. - - Returns - ------- - float - The probability density function value at x. - """ - return stats.uniform.pdf(x, loc=self.lower, scale=self.upper - self.lower)
- - -
-[docs] - def logpdf(self, x): - """ - Calculates the logarithm of the pdf of the uniform distribution at x. - - Parameters - ---------- - x : float - The point at which to evaluate the log pdf. - - Returns - ------- - float - The log of the probability density function value at x. - """ - return stats.uniform.logpdf(x, loc=self.lower, scale=self.upper - self.lower)
- - -
-[docs] - def rvs(self, size): - """ - Generates random variates from the uniform distribution. - - Parameters - ---------- - size : int - The number of random variates to generate. - - Returns - ------- - array_like - An array of random variates from the uniform distribution. - - Raises - ------ - ValueError - If the size parameter is not positive. - """ - if size < 0: - raise ValueError("size must be positive") - else: - return stats.uniform.rvs( - loc=self.lower, scale=self.upper - self.lower, size=size - )
- - -
-[docs] - def __repr__(self): - """ - Returns a string representation of the Uniform object. - """ - return f"{self.name}, lower: {self.lower}, upper: {self.upper}"
-
- - - -
-[docs] -class Exponential: - """ - Represents an exponential distribution with a specified scale parameter. - - This class provides methods to calculate the pdf, the log pdf, and to generate random - variates from the distribution. - - Parameters - ---------- - scale : float - The scale parameter (lambda) of the exponential distribution. - """ - - def __init__(self, scale): - self.name = "Exponential" - self.scale = scale - -
-[docs] - def pdf(self, x): - """ - Calculates the probability density function of the exponential distribution at x. - - Parameters - ---------- - x : float - The point at which to evaluate the pdf. - - Returns - ------- - float - The probability density function value at x. - """ - return stats.expon.pdf(x, scale=self.scale)
- - -
-[docs] - def logpdf(self, x): - """ - Calculates the logarithm of the pdf of the exponential distribution at x. - - Parameters - ---------- - x : float - The point at which to evaluate the log pdf. - - Returns - ------- - float - The log of the probability density function value at x. - """ - return stats.expon.logpdf(x, scale=self.scale)
- - -
-[docs] - def rvs(self, size): - """ - Generates random variates from the exponential distribution. - - Parameters - ---------- - size : int - The number of random variates to generate. - - Returns - ------- - array_like - An array of random variates from the exponential distribution. - - Raises - ------ - ValueError - If the size parameter is not positive. - """ - if size < 0: - raise ValueError("size must be positive") - else: - return stats.expon.rvs(scale=self.scale, size=size)
- - -
-[docs] - def __repr__(self): - """ - Returns a string representation of the Uniform object. - """ - return f"{self.name}, scale: {self.scale}"
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/plotting/plot_convergence.html b/_modules/pybop/plotting/plot_convergence.html deleted file mode 100644 index edb3fec02..000000000 --- a/_modules/pybop/plotting/plot_convergence.html +++ /dev/null @@ -1,523 +0,0 @@ - - - - - - - - - - pybop.plotting.plot_convergence — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.plotting.plot_convergence

-import pybop
-
-
-
-[docs] -def plot_convergence( - optim, xaxis_title="Iteration", yaxis_title="Cost", title="Convergence" -): - """ - Plot the convergence of the optimisation algorithm. - - Parameters: - ---------- - optim : optimisation object - Optimisation object containing the cost function and optimiser. - xaxis_title : str, optional - Title for the x-axis (default is "Iteration"). - yaxis_title : str, optional - Title for the y-axis (default is "Cost"). - title : str, optional - Title of the plot (default is "Convergence"). - - Returns: - ---------- - fig : plotly.graph_objs.Figure - The Plotly figure object for the convergence plot. - """ - - # Extract the cost function from the optimisation object - cost_function = optim.cost - - # Compute the minimum cost for each iteration - min_cost_per_iteration = [ - min(cost_function(solution) for solution in log_entry) - for log_entry in optim.log - ] - - # Generate a list of iteration numbers - iteration_numbers = list(range(1, len(min_cost_per_iteration) + 1)) - - # Create the convergence plot using the StandardPlot class - fig = pybop.StandardPlot( - x=iteration_numbers, - y=min_cost_per_iteration, - cost=cost_function, - xaxis_title=xaxis_title, - yaxis_title=yaxis_title, - title=title, - trace_name=optim.optimiser.name(), - )() - - # Display the figure - fig.show() - - return fig
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/plotting/plot_cost2d.html b/_modules/pybop/plotting/plot_cost2d.html deleted file mode 100644 index fce0025bb..000000000 --- a/_modules/pybop/plotting/plot_cost2d.html +++ /dev/null @@ -1,635 +0,0 @@ - - - - - - - - - - pybop.plotting.plot_cost2d — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.plotting.plot_cost2d

-import numpy as np
-
-
-
-[docs] -def plot_cost2d(cost, bounds=None, optim=None, steps=10): - """ - Plot a 2D visualization of a cost landscape using Plotly. - - This function generates a contour plot representing the cost landscape for a provided - callable cost function over a grid of parameter values within the specified bounds. - - Parameters - ---------- - cost : callable - The cost function to be evaluated. Must accept a list of parameters and return a cost value. - bounds : numpy.ndarray, optional - A 2x2 array specifying the [min, max] bounds for each parameter. If None, uses `get_param_bounds`. - optim : object, optional - An optimizer instance which, if provided, overlays its specific trace on the plot. - steps : int, optional - The number of intervals to divide the parameter space into along each dimension (default is 10). - - Returns - ------- - plotly.graph_objs.Figure - The Plotly figure object containing the cost landscape plot. - - Raises - ------ - ValueError - If the cost function does not return a valid cost when called with a parameter list. - """ - - if bounds is None: - # Set up parameter bounds - bounds = get_param_bounds(cost) - else: - bounds = bounds - - # Generate grid - x = np.linspace(bounds[0, 0], bounds[0, 1], steps) - y = np.linspace(bounds[1, 0], bounds[1, 1], steps) - - # Initialize cost matrix - costs = np.zeros((len(y), len(x))) - - # Populate cost matrix - for i, xi in enumerate(x): - for j, yj in enumerate(y): - costs[j, i] = cost([xi, yj]) - - # Create figure - fig = create_figure(x, y, costs, bounds, cost.problem.parameters, optim) - - # Display figure - fig.show() - - return fig
- - - -
-[docs] -def get_param_bounds(cost): - """ - Retrieve parameter bounds from a cost function's associated problem parameters. - - Parameters - ---------- - cost : callable - The cost function with an associated 'problem' attribute containing 'parameters'. - - Returns - ------- - numpy.ndarray - An array of shape (n_parameters, 2) containing the bounds for each parameter. - """ - bounds = np.empty((len(cost.problem.parameters), 2)) - for i, param in enumerate(cost.problem.parameters): - bounds[i] = param.bounds - return bounds
- - - -
-[docs] -def create_figure(x, y, z, bounds, params, optim): - """ - Create a Plotly figure with a 2D contour plot of the cost landscape. - - Parameters - ---------- - x : numpy.ndarray - 1D array of x-coordinates for the meshgrid. - y : numpy.ndarray - 1D array of y-coordinates for the meshgrid. - z : numpy.ndarray - 2D array of cost function values corresponding to the meshgrid. - bounds : numpy.ndarray - A 2x2 array specifying the [min, max] bounds for each parameter. - params : iterable - An iterable of parameter objects with 'name' attributes for axis labeling. - optim : object - An optimizer instance with 'log' and 'x0' attributes for plotting traces. - - Returns - ------- - plotly.graph_objs.Figure - The Plotly figure object with the contour plot and optimization traces. - """ - - # Import plotly only when needed - import plotly.graph_objects as go - - fig = go.Figure(data=[go.Contour(x=x, y=y, z=z)]) - if optim is not None: - optim_trace = np.array([item for sublist in optim.log for item in sublist]) - optim_trace = optim_trace.reshape(-1, 2) - - # Plot initial guess - fig.add_trace( - go.Scatter( - x=[optim.x0[0]], - y=[optim.x0[1]], - mode="markers", - marker_symbol="x", - marker=dict( - color="red", - line_color="midnightblue", - line_width=1, - size=12, - showscale=False, - ), - showlegend=False, - ) - ) - - # Plot optimisation trace - fig.add_trace( - go.Scatter( - x=optim_trace[:, 0], - y=optim_trace[:, 1], - mode="markers", - marker=dict( - color=[i / len(optim_trace) for i in range(len(optim_trace))], - colorscale="YlOrBr", - showscale=False, - ), - showlegend=False, - ) - ) - - # Set figure properties - fig.update_layout( - title="Cost Landscape", - title_x=0.5, - title_y=0.9, - xaxis_title=params[0].name, - yaxis_title=params[1].name, - width=600, - height=600, - xaxis=dict(range=bounds[0]), - yaxis=dict(range=bounds[1]), - ) - - return fig
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/plotting/plot_parameters.html b/_modules/pybop/plotting/plot_parameters.html deleted file mode 100644 index 59808270f..000000000 --- a/_modules/pybop/plotting/plot_parameters.html +++ /dev/null @@ -1,634 +0,0 @@ - - - - - - - - - - pybop.plotting.plot_parameters — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.plotting.plot_parameters

-import pybop
-import math
-
-
-
-[docs] -def plot_parameters( - optim, xaxis_titles="Iteration", yaxis_titles=None, title="Convergence" -): - """ - Plot the evolution of parameters during the optimization process using Plotly. - - Parameters - ---------- - optim : object - The optimization object containing the history of parameter values and associated cost. - xaxis_titles : str, optional - Title for the x-axis, defaulting to "Iteration". - yaxis_titles : list of str, optional - Titles for the y-axes, one for each parameter. If None, parameter names are used. - title : str, optional - Title of the plot, defaulting to "Convergence". - - Returns - ------- - plotly.graph_objs.Figure - A Plotly figure object showing the parameter evolution over iterations. - """ - - # Extract parameters from the optimisation object - params = optim.cost.problem.parameters - - # Create the traces from the optimisation log - traces = create_traces(params, optim.log) - - # Create the axis titles - axis_titles = [] - for param in params: - axis_titles.append(("Function Call", param.name)) - - # Create the figure - fig = create_subplots_with_traces(traces, axis_titles=axis_titles) - - # Display the figure - fig.show() - - return fig
- - - -
-[docs] -def create_traces(params, trace_data, x_values=None): - """ - Create traces for plotting parameter evolution. - - Parameters - ---------- - params : list - List of parameter objects, each having a 'name' attribute used for labeling the trace. - trace_data : list of numpy.ndarray - A list of arrays representing the historical values of each parameter. - x_values : list or numpy.ndarray, optional - The x-axis values for plotting. If None, defaults to sequential integers. - - Returns - ------- - list of plotly.graph_objs.Scatter - A list of Scatter trace objects, one for each parameter. - """ - - # Attempt to import plotly when an instance is created - go = pybop.PlotlyManager().go - - traces = [] - - # If x_values are not provided: - if x_values is None: - x_values = list(range(len(trace_data[0]) * len(trace_data))) - - # Determine the number of elements in the smallest arrays - num_elements = len(trace_data[0][0]) - - # Initialize a list of lists to store our columns - columns = [[] for _ in range(num_elements)] - - # Loop through each numpy array in trace_data - for array in trace_data: - # Loop through each item (which is a n-element array) in the numpy array - for item in array: - # Loop through each element in the item and append to the corresponding column - for i in range(num_elements): - columns[i].append(item[i]) - - # Create a trace for each column - for i in range(len(columns)): - wrap_param = pybop.StandardPlot.wrap_text(params[i].name, width=50) - traces.append(go.Scatter(x=x_values, y=columns[i], name=wrap_param)) - - return traces
- - - -
-[docs] -def create_subplots_with_traces( - traces, - plot_size=(1024, 576), - title="Parameter Convergence", - axis_titles=None, - **layout_kwargs, -): - """ - Create a subplot with individual traces for each parameter. - - Parameters - ---------- - traces : list of plotly.graph_objs.Scatter - Traces to be plotted, one trace per subplot. - plot_size : tuple of int, optional - The size of the plot as (width, height), defaulting to (1024, 576). - title : str, optional - The title of the plot, defaulting to "Parameter Convergence". - axis_titles : list of tuple of str, optional - A list of (x_title, y_title) pairs for each subplot. If None, titles are omitted. - **layout_kwargs : dict - Additional keyword arguments to customize the layout. - - Returns - ------- - plotly.graph_objs.Figure - A Plotly figure object with subplots for each trace. - """ - - # Attempt to import plotly when an instance is created - make_subplots = pybop.PlotlyManager().make_subplots - - num_traces = len(traces) - num_cols = int(math.ceil(math.sqrt(num_traces))) - num_rows = int(math.ceil(num_traces / num_cols)) - - fig = make_subplots(rows=num_rows, cols=num_cols, start_cell="bottom-left") - - for idx, trace in enumerate(traces): - row = (idx // num_cols) + 1 - col = (idx % num_cols) + 1 - fig.add_trace(trace, row=row, col=col) - - if axis_titles and idx < len(axis_titles): - x_title, y_title = axis_titles[idx] - fig.update_xaxes(title_text=x_title, row=row, col=col) - fig.update_yaxes(title_text=y_title, row=row, col=col) - - if plot_size: - layout_kwargs["width"], layout_kwargs["height"] = plot_size - - if title: - layout_kwargs["title_text"] = title - - # Set the legend above the subplots - fig.update_layout( - legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1), - **layout_kwargs, - ) - - return fig
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/plotting/plotly_manager.html b/_modules/pybop/plotting/plotly_manager.html deleted file mode 100644 index 73f751b2e..000000000 --- a/_modules/pybop/plotting/plotly_manager.html +++ /dev/null @@ -1,633 +0,0 @@ - - - - - - - - - - pybop.plotting.plotly_manager — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.plotting.plotly_manager

-import subprocess
-import webbrowser
-import sys
-
-
-
-[docs] -class PlotlyManager: - """ - Manages the installation and configuration of Plotly for generating visualizations. - - This class ensures that Plotly is installed and properly configured to display - plots in a web browser. - - Upon instantiation, it checks for Plotly's presence, installs it if missing, - and configures the default renderer and browser settings. - - Attributes - ---------- - go : module - The Plotly graph_objects module for creating figures. - pio : module - The Plotly input/output module for configuring the renderer. - make_subplots : function - The function from Plotly for creating subplot figures. - - Methods - ------- - ensure_plotly_installed() - Verifies if Plotly is installed, importing necessary modules and prompting for installation if missing. - prompt_for_plotly_installation() - Prompts the user for permission to install Plotly and proceeds with installation if consented. - install_plotly() - Installs the Plotly package using pip. - post_install_setup() - Sets up Plotly default renderer after installation. - check_renderer_settings() - Verifies that the Plotly renderer is correctly set. - check_browser_availability() - Checks if a web browser is available for rendering plots. - - Examples - -------- - >>> plotly_manager = PlotlyManager() - """ - - def __init__(self): - """ - Initialize the PlotlyManager, ensuring Plotly is installed and configured. - """ - self.go = None - self.pio = None - self.make_subplots = None - self.ensure_plotly_installed() - self.check_renderer_settings() - self.check_browser_availability() - -
-[docs] - def ensure_plotly_installed(self): - """ - Check if Plotly is installed and import necessary modules; prompt for installation if missing. - """ - try: - import plotly.graph_objs as go - import plotly.io as pio - from plotly.subplots import make_subplots - - self.go = go - self.pio = pio - self.make_subplots = make_subplots - except ImportError: - self.prompt_for_plotly_installation()
- - -
-[docs] - def prompt_for_plotly_installation(self): - """ - Prompt the user for Plotly installation and install it upon agreement. - """ - user_input = ( - input( - "Plotly is not installed. To proceed, we need to install plotly. (Y/n)? " - ) - .strip() - .lower() - ) - if user_input == "y": - self.install_plotly() - self.post_install_setup() - else: - print("Installation cancelled by user.") - sys.exit(1) # Exit if user cancels installation
- - -
-[docs] - def install_plotly(self): - """ - Install the Plotly package using pip. Exit if installation fails. - """ - try: - subprocess.check_call([sys.executable, "-m", "pip", "install", "plotly"]) - except subprocess.CalledProcessError as e: - print(f"Error installing plotly: {e}") - sys.exit(1) # Exit if installation fails
- - -
-[docs] - def post_install_setup(self): - """ - Import Plotly modules and set the default renderer after installation. - """ - import plotly.graph_objs as go - import plotly.io as pio - from plotly.subplots import make_subplots - - self.go = go - self.pio = pio - self.make_subplots = make_subplots - if pio.renderers.default == "": - pio.renderers.default = "browser" - print( - 'Set default renderer to "browser" as it was empty after installation.' - )
- - -
-[docs] - def check_renderer_settings(self): - """ - Check and provide information on setting the Plotly renderer if it's not already set. - """ - if self.pio and self.pio.renderers.default == "": - print( - "The Plotly renderer is an empty string. To set the renderer, use:\n" - " pio.renderers\n" - ' pio.renderers.default = "browser"\n' - "For more information, see: https://plotly.com/python/renderers/#setting-the-default-renderer" - )
- - -
-[docs] - def check_browser_availability(self): - """ - Confirm a web browser is available for Plotly's 'browser' renderer; provide guidance if not. - """ - if self.pio and self.pio.renderers.default == "browser": - try: - webbrowser.get() - except webbrowser.Error: - raise Exception( - "\n **Browser Not Found** \nFor Windows users, in order to view figures in the browser using Plotly, " - "you need to set the environment variable BROWSER equal to the " - "path to your chosen browser. To do this, please enter a command like " - "the following to add this to your virtual environment activation file:\n\n" - "echo 'export BROWSER=\"/mnt/c/Program Files/Mozilla Firefox/firefox.exe\"' >> your-env/bin/activate" - "\n\nThen reactivate your virtual environment. Alternatively, you can use a " - "different Plotly renderer. For more information see: " - "https://plotly.com/python/renderers/#setting-the-default-renderer" - )
-
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/plotting/quick_plot.html b/_modules/pybop/plotting/quick_plot.html deleted file mode 100644 index c7127b027..000000000 --- a/_modules/pybop/plotting/quick_plot.html +++ /dev/null @@ -1,720 +0,0 @@ - - - - - - - - - - pybop.plotting.quick_plot — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.plotting.quick_plot

-import numpy as np
-import textwrap
-import pybop
-
-
-
-[docs] -class StandardPlot: - """ - A class for creating and displaying Plotly figures for model output comparison. - - Generates interactive plots comparing simulated model output with an optional target dataset and visualizes uncertainty. - - Parameters - ---------- - x : list or np.ndarray - X-axis data points. - y : list or np.ndarray - Primary Y-axis data points for simulated model output. - cost : float - Cost associated with the model output. - y2 : list or np.ndarray, optional - Secondary Y-axis data points for the target dataset (default: None). - title : str, optional - Title of the plot (default: None). - xaxis_title : str, optional - Title for the x-axis (default: None). - yaxis_title : str, optional - Title for the y-axis (default: None). - trace_name : str, optional - Name for the primary trace (default: "Simulated"). - width : int, optional - Width of the figure in pixels (default: 1024). - height : int, optional - Height of the figure in pixels (default: 576). - """ - - def __init__( - self, - x, - y, - cost, - y2=None, - title=None, - xaxis_title=None, - yaxis_title=None, - trace_name=None, - width=1024, - height=576, - ): - """ - Initialize the StandardPlot object with simulation and optional target data. - - Parameters - ---------- - x : list or np.ndarray - X-axis data points. - y : list or np.ndarray - Primary Y-axis data points for simulated model output. - cost : float - Cost associated with the model output. - y2 : list or np.ndarray, optional - Secondary Y-axis data points for target dataset (default: None). - title : str, optional - Plot title (default: None). - xaxis_title : str, optional - X-axis title (default: None). - yaxis_title : str, optional - Y-axis title (default: None). - trace_name : str, optional - Name for the primary trace (default: "Simulated"). - width : int, optional - Figure width in pixels (default: 1024). - height : int, optional - Figure height in pixels (default: 576). - """ - self.x = x if isinstance(x, list) else x.tolist() - self.y = y - self.y2 = y2 - self.cost = cost - self.width = width - self.height = height - self.title = title - self.xaxis_title = xaxis_title - self.yaxis_title = yaxis_title - self.trace_name = trace_name or "Simulated" - - if self.y2 is not None: - self.sigma = np.std(self.y - self.y2) - self.y_upper = (self.y + self.sigma).tolist() - self.y_lower = (self.y - self.sigma).tolist() - - # Attempt to import plotly when an instance is created - self.go = pybop.PlotlyManager().go - - @staticmethod -
-[docs] - def wrap_text(text, width): - """ - Wrap text to a specified width with HTML line breaks. - - Parameters - ---------- - text : str - The text to wrap. - width : int - The width to wrap the text to. - - Returns - ------- - str - The wrapped text. - """ - wrapped_text = textwrap.fill(text, width=width, break_long_words=False) - return wrapped_text.replace("\n", "<br>")
- - -
-[docs] - def create_layout(self): - """ - Create the layout for the Plotly figure. - - Returns - ------- - plotly.graph_objs.Layout - The layout for the Plotly figure. - """ - return self.go.Layout( - title=self.title, - title_x=0.5, - xaxis=dict(title=self.xaxis_title, titlefont_size=12, tickfont_size=12), - yaxis=dict(title=self.yaxis_title, titlefont_size=12, tickfont_size=12), - legend=dict(x=1, y=1, xanchor="right", yanchor="top", font_size=12), - showlegend=True, - autosize=False, - width=self.width, - height=self.height, - margin=dict(l=10, r=10, b=10, t=75, pad=4), - )
- - -
-[docs] - def create_traces(self): - """ - Create traces for the Plotly figure. - - Returns - ------- - list - A list of plotly.graph_objs.Scatter objects to be used as traces. - """ - traces = [] - - wrapped_trace_name = self.wrap_text(self.trace_name, width=40) - simulated_trace = self.go.Scatter( - x=self.x, - y=self.y, - line=dict(width=4), - mode="lines", - name=wrapped_trace_name, - ) - - if self.y2 is not None: - target_trace = self.go.Scatter( - x=self.x, y=self.y2, mode="markers", name="Target" - ) - fill_trace = self.go.Scatter( - x=self.x + self.x[::-1], - y=self.y_upper + self.y_lower[::-1], - fill="toself", - fillcolor="rgba(255,229,204,0.8)", - line=dict(color="rgba(255,255,255,0)"), - hoverinfo="skip", - showlegend=False, - ) - traces.extend([fill_trace, target_trace]) - - traces.append(simulated_trace) - - return traces
- - -
-[docs] - def __call__(self): - """ - Generate the Plotly figure. - - Returns - ------- - plotly.graph_objs.Figure - The generated Plotly figure. - """ - layout = self.create_layout() - traces = self.create_traces() - fig = self.go.Figure(data=traces, layout=layout) - return fig
-
- - - -
-[docs] -def quick_plot(params, cost, title="Scatter Plot", width=1024, height=576): - """ - Quickly plot the target dataset against minimized model output. - - Parameters - ---------- - params : array-like - Optimized parameters. - cost : object - Cost object with problem, dataset, and signal attributes. - title : str, optional - Title of the plot (default: "Scatter Plot"). - width : int, optional - Width of the figure in pixels (default: 1024). - height : int, optional - Height of the figure in pixels (default: 576). - - Returns - ------- - plotly.graph_objs.Figure - The Plotly figure object for the scatter plot. - """ - - # Extract the time data and evaluate the model's output and target values - time_data = cost.problem._dataset["Time [s]"].data - model_output = cost.problem.evaluate(params) - target_output = cost.problem.target() - - # Create the figure using the StandardPlot class - fig = pybop.StandardPlot( - x=time_data, - y=model_output, - cost=cost, - y2=target_output, - xaxis_title="Time [s]", - yaxis_title=cost.problem.signal, - title=title, - trace_name="Model", - width=width, - height=height, - )() - - # Display the figure - fig.show() - - return fig
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_modules/pybop/version.html b/_modules/pybop/version.html deleted file mode 100644 index fd0ab4fa5..000000000 --- a/_modules/pybop/version.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - - - - - - - pybop.version — PyBOP Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - - - -
- -
- - -
-
- - - - - -
- -

Source code for pybop.version

-
-[docs] -__version__ = "23.11"
- -
- -
- - - - - -
- - - - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/_sources/api/index.rst.txt b/_sources/api/index.rst.txt deleted file mode 100644 index 870df405e..000000000 --- a/_sources/api/index.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -API Reference -============= - -This page contains auto-generated API reference documentation [#f1]_. - -.. toctree:: - :titlesonly: - :maxdepth: 2 - - /api/pybop/index - -.. [#f1] Created with `sphinx-autoapi `_ \ No newline at end of file diff --git a/_sources/api/pybop/_costs/index.rst.txt b/_sources/api/pybop/_costs/index.rst.txt deleted file mode 100644 index 2c0c469ea..000000000 --- a/_sources/api/pybop/_costs/index.rst.txt +++ /dev/null @@ -1,156 +0,0 @@ -:py:mod:`pybop._costs` -====================== - -.. py:module:: pybop._costs - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop._costs.BaseCost - pybop._costs.RootMeanSquaredError - pybop._costs.SumSquaredError - - - - -.. py:class:: BaseCost(problem) - - - Base class for defining cost functions. - - This class is intended to be subclassed to create specific cost functions - for evaluating model predictions against a set of data. The cost function - quantifies the goodness-of-fit between the model predictions and the - observed data, with a lower cost value indicating a better fit. - - :param problem: A problem instance containing the data and functions necessary for - evaluating the cost function. - :type problem: object - :param _target: An array containing the target data to fit. - :type _target: array-like - :param x0: The initial guess for the model parameters. - :type x0: array-like - :param bounds: The bounds for the model parameters. - :type bounds: tuple - :param n_parameters: The number of parameters in the model. - :type n_parameters: int - - .. py:method:: __call__(x, grad=None) - :abstractmethod: - - Calculate the cost function value for a given set of parameters. - - This method must be implemented by subclasses. - - :param x: The parameters for which to evaluate the cost. - :type x: array-like - :param grad: An array to store the gradient of the cost function with respect - to the parameters. - :type grad: array-like, optional - - :returns: The calculated cost function value. - :rtype: float - - :raises NotImplementedError: If the method has not been implemented by the subclass. - - - -.. py:class:: RootMeanSquaredError(problem) - - - Bases: :py:obj:`BaseCost` - - Root mean square error cost function. - - Computes the root mean square error between model predictions and the target - data, providing a measure of the differences between predicted values and - observed values. - - Inherits all parameters and attributes from ``BaseCost``. - - - .. py:method:: __call__(x, grad=None) - - Calculate the root mean square error for a given set of parameters. - - :param x: The parameters for which to evaluate the cost. - :type x: array-like - :param grad: An array to store the gradient of the cost function with respect - to the parameters. - :type grad: array-like, optional - - :returns: The root mean square error. - :rtype: float - - :raises ValueError: If an error occurs during the calculation of the cost. - - - -.. py:class:: SumSquaredError(problem) - - - Bases: :py:obj:`BaseCost` - - Sum of squared errors cost function. - - Computes the sum of the squares of the differences between model predictions - and target data, which serves as a measure of the total error between the - predicted and observed values. - - Inherits all parameters and attributes from ``BaseCost``. - - Additional Attributes - --------------------- - _de : float - The gradient of the cost function to use if an error occurs during - evaluation. Defaults to 1.0. - - - .. py:method:: __call__(x, grad=None) - - Calculate the sum of squared errors for a given set of parameters. - - :param x: The parameters for which to evaluate the cost. - :type x: array-like - :param grad: An array to store the gradient of the cost function with respect - to the parameters. - :type grad: array-like, optional - - :returns: The sum of squared errors. - :rtype: float - - :raises ValueError: If an error occurs during the calculation of the cost. - - - .. py:method:: evaluateS1(x) - - Compute the cost and its gradient with respect to the parameters. - - :param x: The parameters for which to compute the cost and gradient. - :type x: array-like - - :returns: A tuple containing the cost and the gradient. The cost is a float, - and the gradient is an array-like of the same length as `x`. - :rtype: tuple - - :raises ValueError: If an error occurs during the calculation of the cost or gradient. - - - .. py:method:: set_fail_gradient(de) - - Set the fail gradient to a specified value. - - The fail gradient is used if an error occurs during the calculation - of the gradient. This method allows updating the default gradient value. - - :param de: The new fail gradient value to be used. - :type de: float - - - diff --git a/_sources/api/pybop/_dataset/index.rst.txt b/_sources/api/pybop/_dataset/index.rst.txt deleted file mode 100644 index b59e8624f..000000000 --- a/_sources/api/pybop/_dataset/index.rst.txt +++ /dev/null @@ -1,53 +0,0 @@ -:py:mod:`pybop._dataset` -======================== - -.. py:module:: pybop._dataset - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop._dataset.Dataset - - - - -.. py:class:: Dataset(name, data) - - - Represents a collection of experimental observations. - - This class provides a structured way to store and work with experimental data, - which may include applying operations such as interpolation. - - :param name: The name of the dataset, providing a label for identification. - :type name: str - :param data: The actual experimental data, typically in a structured form such as - a NumPy array or a pandas DataFrame. - :type data: array-like - - .. py:method:: Interpolant() - - Create an interpolation function of the dataset based on the independent variable. - - Currently, only time-based interpolation is supported. This method modifies - the instance's Interpolant attribute to be an interpolation function that - can be evaluated at different points in time. - - :raises NotImplementedError: If the independent variable for interpolation is not supported. - - - .. py:method:: __repr__() - - Return a string representation of the Dataset instance. - - :returns: A string that includes the name and data of the dataset. - :rtype: str - - - diff --git a/_sources/api/pybop/_problem/index.rst.txt b/_sources/api/pybop/_problem/index.rst.txt deleted file mode 100644 index c36de4d61..000000000 --- a/_sources/api/pybop/_problem/index.rst.txt +++ /dev/null @@ -1,143 +0,0 @@ -:py:mod:`pybop._problem` -======================== - -.. py:module:: pybop._problem - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop._problem.BaseProblem - pybop._problem.DesignProblem - pybop._problem.FittingProblem - - - - -.. py:class:: BaseProblem(parameters, model=None, check_model=True, init_soc=None, x0=None) - - - Base class for defining a problem within the PyBOP framework, compatible with PINTS. - - :param parameters: List of parameters for the problem. - :type parameters: list - :param model: The model to be used for the problem (default: None). - :type model: object, optional - :param check_model: Flag to indicate if the model should be checked (default: True). - :type check_model: bool, optional - :param init_soc: Initial state of charge (default: None). - :type init_soc: float, optional - :param x0: Initial parameter values (default: None). - :type x0: np.ndarray, optional - - .. py:method:: evaluate(x) - :abstractmethod: - - Evaluate the model with the given parameters and return the signal. - - :param x: Parameter values to evaluate the model at. - :type x: np.ndarray - - :raises NotImplementedError: This method must be implemented by subclasses. - - - .. py:method:: evaluateS1(x) - :abstractmethod: - - Evaluate the model with the given parameters and return the signal and its derivatives. - - :param x: Parameter values to evaluate the model at. - :type x: np.ndarray - - :raises NotImplementedError: This method must be implemented by subclasses. - - - -.. py:class:: DesignProblem(model, parameters, experiment, check_model=True, init_soc=None, x0=None) - - - Bases: :py:obj:`BaseProblem` - - Problem class for design optimization problems. - - Extends `BaseProblem` with specifics for applying a model to an experimental design. - - :param model: The model to apply the design to. - :type model: object - :param parameters: List of parameters for the problem. - :type parameters: list - :param experiment: The experimental setup to apply the model to. - :type experiment: object - - .. py:method:: evaluate(x) - - Evaluate the model with the given parameters and return the signal. - - :param x: Parameter values to evaluate the model at. - :type x: np.ndarray - - - .. py:method:: evaluateS1(x) - - Evaluate the model with the given parameters and return the signal and its derivatives. - - :param x: Parameter values to evaluate the model at. - :type x: np.ndarray - - - .. py:method:: target() - - Return the target dataset (not applicable for design problems). - - :rtype: None - - - -.. py:class:: FittingProblem(model, parameters, dataset, signal='Voltage [V]', check_model=True, init_soc=None, x0=None) - - - Bases: :py:obj:`BaseProblem` - - Problem class for fitting (parameter estimation) problems. - - Extends `BaseProblem` with specifics for fitting a model to a dataset. - - :param model: The model to fit. - :type model: object - :param parameters: List of parameters for the problem. - :type parameters: list - :param dataset: List of data objects to fit the model to. - :type dataset: list - :param signal: The signal to fit (default: "Voltage [V]"). - :type signal: str, optional - - .. py:method:: evaluate(x) - - Evaluate the model with the given parameters and return the signal. - - :param x: Parameter values to evaluate the model at. - :type x: np.ndarray - - - .. py:method:: evaluateS1(x) - - Evaluate the model with the given parameters and return the signal and its derivatives. - - :param x: Parameter values to evaluate the model at. - :type x: np.ndarray - - - .. py:method:: target() - - Return the target dataset. - - :returns: The target dataset array. - :rtype: np.ndarray - - - diff --git a/_sources/api/pybop/index.rst.txt b/_sources/api/pybop/index.rst.txt deleted file mode 100644 index 7df4544a3..000000000 --- a/_sources/api/pybop/index.rst.txt +++ /dev/null @@ -1,1607 +0,0 @@ -:py:mod:`pybop` -=============== - -.. py:module:: pybop - - -Subpackages ------------ -.. toctree:: - :titlesonly: - :maxdepth: 3 - - models/index.rst - optimisers/index.rst - parameters/index.rst - plotting/index.rst - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - _costs/index.rst - _dataset/index.rst - _problem/index.rst - optimisation/index.rst - version/index.rst - - -Package Contents ----------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.Adam - pybop.BaseCost - pybop.BaseModel - pybop.BaseOptimiser - pybop.CMAES - pybop.Dataset - pybop.DesignProblem - pybop.Exponential - pybop.FittingProblem - pybop.Gaussian - pybop.GradientDescent - pybop.IRPropMin - pybop.NLoptOptimize - pybop.Optimisation - pybop.PSO - pybop.Parameter - pybop.ParameterSet - pybop.PlotlyManager - pybop.RootMeanSquaredError - pybop.SNES - pybop.SciPyDifferentialEvolution - pybop.SciPyMinimize - pybop.StandardPlot - pybop.SumSquaredError - pybop.Uniform - pybop.XNES - - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - pybop.plot_convergence - pybop.plot_cost2d - pybop.plot_parameters - pybop.quick_plot - - - -Attributes -~~~~~~~~~~ - -.. autoapisummary:: - - pybop.FLOAT_FORMAT - pybop.__version__ - pybop.script_path - - -.. py:class:: Adam(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.Adam` - - Implements the Adam optimization algorithm. - - This class extends the Adam optimizer from the PINTS library, which combines - ideas from RMSProp and Stochastic Gradient Descent with momentum. Note that - this optimizer does not support boundary constraints. - - :param x0: Initial position from which optimization will start. - :type x0: array_like - :param sigma0: Initial step size (default is 0.1). - :type sigma0: float, optional - :param bounds: Ignored by this optimizer, provided for API consistency. - :type bounds: sequence or ``Bounds``, optional - - .. seealso:: - - :obj:`pints.Adam` - The PINTS implementation this class is based on. - - -.. py:class:: BaseCost(problem) - - - Base class for defining cost functions. - - This class is intended to be subclassed to create specific cost functions - for evaluating model predictions against a set of data. The cost function - quantifies the goodness-of-fit between the model predictions and the - observed data, with a lower cost value indicating a better fit. - - :param problem: A problem instance containing the data and functions necessary for - evaluating the cost function. - :type problem: object - :param _target: An array containing the target data to fit. - :type _target: array-like - :param x0: The initial guess for the model parameters. - :type x0: array-like - :param bounds: The bounds for the model parameters. - :type bounds: tuple - :param n_parameters: The number of parameters in the model. - :type n_parameters: int - - .. py:method:: __call__(x, grad=None) - :abstractmethod: - - Calculate the cost function value for a given set of parameters. - - This method must be implemented by subclasses. - - :param x: The parameters for which to evaluate the cost. - :type x: array-like - :param grad: An array to store the gradient of the cost function with respect - to the parameters. - :type grad: array-like, optional - - :returns: The calculated cost function value. - :rtype: float - - :raises NotImplementedError: If the method has not been implemented by the subclass. - - - -.. py:class:: BaseModel(name='Base Model') - - - A base class for constructing and simulating models using PyBaMM. - - This class serves as a foundation for building specific models in PyBaMM. - It provides methods to set up the model, define parameters, and perform - simulations. The class is designed to be subclassed for creating models - with custom behavior. - - .. method:: build(dataset=None, parameters=None, check_model=True, init_soc=None) - - Construct the PyBaMM model if not already built. - - .. method:: set_init_soc(init_soc) - - Set the initial state of charge for the battery model. - - .. method:: set_params() - - Assign the parameters to the model. - - .. method:: simulate(inputs, t_eval) - - Execute the forward model simulation and return the result. - - .. method:: simulateS1(inputs, t_eval) - - Perform the forward model simulation with sensitivities. - - .. method:: predict(inputs=None, t_eval=None, parameter_set=None, experiment=None, init_soc=None) - - Solve the model using PyBaMM's simulation framework and return the solution. - - - .. py:property:: built_model - - - .. py:property:: geometry - - - .. py:property:: mesh - - - .. py:property:: model_with_set_params - - - .. py:property:: parameter_set - - - .. py:property:: solver - - - .. py:property:: spatial_methods - - - .. py:property:: submesh_types - - - .. py:property:: var_pts - - - .. py:method:: build(dataset=None, parameters=None, check_model=True, init_soc=None) - - Construct the PyBaMM model if not already built, and set parameters. - - This method initializes the model components, applies the given parameters, - sets up the mesh and discretization if needed, and prepares the model - for simulations. - - :param dataset: The dataset to be used in the model construction. - :type dataset: pybamm.Dataset, optional - :param parameters: A dictionary containing parameter values to apply to the model. - :type parameters: dict, optional - :param check_model: If True, the model will be checked for correctness after construction. - :type check_model: bool, optional - :param init_soc: The initial state of charge to be used in simulations. - :type init_soc: float, optional - - - .. py:method:: predict(inputs=None, t_eval=None, parameter_set=None, experiment=None, init_soc=None) - - Solve the model using PyBaMM's simulation framework and return the solution. - - This method sets up a PyBaMM simulation by configuring the model, parameters, experiment - (if any), and initial state of charge (if provided). It then solves the simulation and - returns the resulting solution object. - - :param inputs: Input parameters for the simulation. If the input is array-like, it is converted - to a dictionary using the model's fitting keys. Defaults to None, indicating - that the default parameters should be used. - :type inputs: dict or array-like, optional - :param t_eval: An array of time points at which to evaluate the solution. Defaults to None, - which means the time points need to be specified within experiment or elsewhere. - :type t_eval: array-like, optional - :param parameter_set: A PyBaMM ParameterValues object or a dictionary containing the parameter values - to use for the simulation. Defaults to the model's current ParameterValues if None. - :type parameter_set: pybamm.ParameterValues, optional - :param experiment: A PyBaMM Experiment object specifying the experimental conditions under which - the simulation should be run. Defaults to None, indicating no experiment. - :type experiment: pybamm.Experiment, optional - :param init_soc: The initial state of charge for the simulation, as a fraction (between 0 and 1). - Defaults to None. - :type init_soc: float, optional - - :returns: The solution object returned after solving the simulation. - :rtype: pybamm.Solution - - :raises ValueError: If the model has not been configured properly before calling this method or - if PyBaMM models are not supported by the current simulation method. - - - .. py:method:: set_init_soc(init_soc) - - Set the initial state of charge for the battery model. - - :param init_soc: The initial state of charge to be used in the model. - :type init_soc: float - - - .. py:method:: set_params() - - Assign the parameters to the model. - - This method processes the model with the given parameters, sets up - the geometry, and updates the model instance. - - - .. py:method:: simulate(inputs, t_eval) - - Execute the forward model simulation and return the result. - - :param inputs: The input parameters for the simulation. If array-like, it will be - converted to a dictionary using the model's fit keys. - :type inputs: dict or array-like - :param t_eval: An array of time points at which to evaluate the solution. - :type t_eval: array-like - - :returns: The simulation result corresponding to the specified signal. - :rtype: array-like - - :raises ValueError: If the model has not been built before simulation. - - - .. py:method:: simulateS1(inputs, t_eval) - - Perform the forward model simulation with sensitivities. - - :param inputs: The input parameters for the simulation. If array-like, it will be - converted to a dictionary using the model's fit keys. - :type inputs: dict or array-like - :param t_eval: An array of time points at which to evaluate the solution and its - sensitivities. - :type t_eval: array-like - - :returns: A tuple containing the simulation result and the sensitivities. - :rtype: tuple - - :raises ValueError: If the model has not been built before simulation. - - - -.. py:class:: BaseOptimiser - - - A base class for defining optimisation methods. - - This class serves as a template for creating optimisers. It provides a basic structure for - an optimisation algorithm, including the initial setup and a method stub for performing - the optimisation process. Child classes should override the optimise and _runoptimise - methods with specific algorithms. - - .. method:: optimise(cost_function, x0=None, bounds=None, maxiter=None) - - Initiates the optimisation process. This is a stub and should be implemented in child classes. - - .. method:: _runoptimise(cost_function, x0=None, bounds=None) - - Contains the logic for the optimisation algorithm. This is a stub and should be implemented in child classes. - - .. method:: name() - - Returns the name of the optimiser. - - - .. py:method:: _runoptimise(cost_function, x0=None, bounds=None) - - Contains the logic for the optimisation algorithm. - - This method should be implemented by child classes to perform the actual optimisation. - - :param cost_function: The cost function to be minimised by the optimiser. - :type cost_function: callable - :param x0: Initial guess for the parameters. Default is None. - :type x0: ndarray, optional - :param bounds: Bounds on the parameters. Default is None. - :type bounds: sequence or Bounds, optional - - :returns: * *This method is expected to return the result of the optimisation, the format of which* - * *will be determined by the child class implementation.* - - - .. py:method:: name() - - Returns the name of the optimiser. - - :returns: The name of the optimiser, which is "BaseOptimiser" for this base class. - :rtype: str - - - .. py:method:: optimise(cost_function, x0=None, bounds=None, maxiter=None) - - Initiates the optimisation process. - - This method should be overridden by child classes with the specific optimisation algorithm. - - :param cost_function: The cost function to be minimised by the optimiser. - :type cost_function: callable - :param x0: Initial guess for the parameters. Default is None. - :type x0: ndarray, optional - :param bounds: Bounds on the parameters. Default is None. - :type bounds: sequence or Bounds, optional - :param maxiter: Maximum number of iterations to perform. Default is None. - :type maxiter: int, optional - - :rtype: The result of the optimisation process. The specific type of this result will depend on the child implementation. - - - -.. py:class:: CMAES(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.CMAES` - - Adapter for the Covariance Matrix Adaptation Evolution Strategy (CMA-ES) optimizer in PINTS. - - CMA-ES is an evolutionary algorithm for difficult non-linear non-convex optimization problems. - It adapts the covariance matrix of a multivariate normal distribution to capture the shape of the cost landscape. - - :param x0: The initial parameter vector to optimize. - :type x0: array_like - :param sigma0: Initial standard deviation of the sampling distribution, defaults to 0.1. - :type sigma0: float, optional - :param bounds: A dictionary with 'lower' and 'upper' keys containing arrays for lower and upper bounds on the parameters. - If ``None``, no bounds are enforced. - :type bounds: dict, optional - - .. seealso:: - - :obj:`pints.CMAES` - PINTS implementation of CMA-ES algorithm. - - -.. py:class:: Dataset(name, data) - - - Represents a collection of experimental observations. - - This class provides a structured way to store and work with experimental data, - which may include applying operations such as interpolation. - - :param name: The name of the dataset, providing a label for identification. - :type name: str - :param data: The actual experimental data, typically in a structured form such as - a NumPy array or a pandas DataFrame. - :type data: array-like - - .. py:method:: Interpolant() - - Create an interpolation function of the dataset based on the independent variable. - - Currently, only time-based interpolation is supported. This method modifies - the instance's Interpolant attribute to be an interpolation function that - can be evaluated at different points in time. - - :raises NotImplementedError: If the independent variable for interpolation is not supported. - - - .. py:method:: __repr__() - - Return a string representation of the Dataset instance. - - :returns: A string that includes the name and data of the dataset. - :rtype: str - - - -.. py:class:: DesignProblem(model, parameters, experiment, check_model=True, init_soc=None, x0=None) - - - Bases: :py:obj:`BaseProblem` - - Problem class for design optimization problems. - - Extends `BaseProblem` with specifics for applying a model to an experimental design. - - :param model: The model to apply the design to. - :type model: object - :param parameters: List of parameters for the problem. - :type parameters: list - :param experiment: The experimental setup to apply the model to. - :type experiment: object - - .. py:method:: evaluate(x) - - Evaluate the model with the given parameters and return the signal. - - :param x: Parameter values to evaluate the model at. - :type x: np.ndarray - - - .. py:method:: evaluateS1(x) - - Evaluate the model with the given parameters and return the signal and its derivatives. - - :param x: Parameter values to evaluate the model at. - :type x: np.ndarray - - - .. py:method:: target() - - Return the target dataset (not applicable for design problems). - - :rtype: None - - - -.. py:class:: Exponential(scale) - - - Represents an exponential distribution with a specified scale parameter. - - This class provides methods to calculate the pdf, the log pdf, and to generate random - variates from the distribution. - - :param scale: The scale parameter (lambda) of the exponential distribution. - :type scale: float - - .. py:method:: __repr__() - - Returns a string representation of the Uniform object. - - - .. py:method:: logpdf(x) - - Calculates the logarithm of the pdf of the exponential distribution at x. - - :param x: The point at which to evaluate the log pdf. - :type x: float - - :returns: The log of the probability density function value at x. - :rtype: float - - - .. py:method:: pdf(x) - - Calculates the probability density function of the exponential distribution at x. - - :param x: The point at which to evaluate the pdf. - :type x: float - - :returns: The probability density function value at x. - :rtype: float - - - .. py:method:: rvs(size) - - Generates random variates from the exponential distribution. - - :param size: The number of random variates to generate. - :type size: int - - :returns: An array of random variates from the exponential distribution. - :rtype: array_like - - :raises ValueError: If the size parameter is not positive. - - - -.. py:class:: FittingProblem(model, parameters, dataset, signal='Voltage [V]', check_model=True, init_soc=None, x0=None) - - - Bases: :py:obj:`BaseProblem` - - Problem class for fitting (parameter estimation) problems. - - Extends `BaseProblem` with specifics for fitting a model to a dataset. - - :param model: The model to fit. - :type model: object - :param parameters: List of parameters for the problem. - :type parameters: list - :param dataset: List of data objects to fit the model to. - :type dataset: list - :param signal: The signal to fit (default: "Voltage [V]"). - :type signal: str, optional - - .. py:method:: evaluate(x) - - Evaluate the model with the given parameters and return the signal. - - :param x: Parameter values to evaluate the model at. - :type x: np.ndarray - - - .. py:method:: evaluateS1(x) - - Evaluate the model with the given parameters and return the signal and its derivatives. - - :param x: Parameter values to evaluate the model at. - :type x: np.ndarray - - - .. py:method:: target() - - Return the target dataset. - - :returns: The target dataset array. - :rtype: np.ndarray - - - -.. py:class:: Gaussian(mean, sigma) - - - Represents a Gaussian (normal) distribution with a given mean and standard deviation. - - This class provides methods to calculate the probability density function (pdf), - the logarithm of the pdf, and to generate random variates (rvs) from the distribution. - - :param mean: The mean (mu) of the Gaussian distribution. - :type mean: float - :param sigma: The standard deviation (sigma) of the Gaussian distribution. - :type sigma: float - - .. py:method:: __repr__() - - Returns a string representation of the Gaussian object. - - - .. py:method:: logpdf(x) - - Calculates the logarithm of the probability density function of the Gaussian distribution at x. - - :param x: The point at which to evaluate the log pdf. - :type x: float - - :returns: The logarithm of the probability density function value at x. - :rtype: float - - - .. py:method:: pdf(x) - - Calculates the probability density function of the Gaussian distribution at x. - - :param x: The point at which to evaluate the pdf. - :type x: float - - :returns: The probability density function value at x. - :rtype: float - - - .. py:method:: rvs(size) - - Generates random variates from the Gaussian distribution. - - :param size: The number of random variates to generate. - :type size: int - - :returns: An array of random variates from the Gaussian distribution. - :rtype: array_like - - :raises ValueError: If the size parameter is not positive. - - - -.. py:class:: GradientDescent(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.GradientDescent` - - Implements a simple gradient descent optimization algorithm. - - This class extends the gradient descent optimizer from the PINTS library, designed - to minimize a scalar function of one or more variables. Note that this optimizer - does not support boundary constraints. - - :param x0: Initial position from which optimization will start. - :type x0: array_like - :param sigma0: Initial step size (default is 0.1). - :type sigma0: float, optional - :param bounds: Ignored by this optimizer, provided for API consistency. - :type bounds: sequence or ``Bounds``, optional - - .. seealso:: - - :obj:`pints.GradientDescent` - The PINTS implementation this class is based on. - - -.. py:class:: IRPropMin(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.IRPropMin` - - Implements the iRpropMin optimization algorithm. - - This class inherits from the PINTS IRPropMin class, which is an optimizer that - uses resilient backpropagation with weight-backtracking. It is designed to handle - problems with large plateaus, noisy gradients, and local minima. - - :param x0: Initial position from which optimization will start. - :type x0: array_like - :param sigma0: Initial step size (default is 0.1). - :type sigma0: float, optional - :param bounds: Lower and upper bounds for each optimization parameter. - :type bounds: dict, optional - - .. seealso:: - - :obj:`pints.IRPropMin` - The PINTS implementation this class is based on. - - -.. py:class:: NLoptOptimize(n_param, xtol=None, method=None, maxiter=None) - - - Bases: :py:obj:`pybop.optimisers.base_optimiser.BaseOptimiser` - - Extends BaseOptimiser to utilize the NLopt library for nonlinear optimization. - - This class serves as an interface to the NLopt optimization algorithms. It allows the user to - define an optimization problem with bounds, initial guesses, and to select an optimization method - provided by NLopt. - - :param n_param: Number of parameters to optimize. - :type n_param: int - :param xtol: The relative tolerance for optimization (stopping criteria). If not provided, a default of 1e-5 is used. - :type xtol: float, optional - :param method: The NLopt algorithm to use for optimization. If not provided, LN_BOBYQA is used by default. - :type method: nlopt.algorithm, optional - :param maxiter: The maximum number of iterations to perform during optimization. If not provided, NLopt's default is used. - :type maxiter: int, optional - - .. method:: _runoptimise(cost_function, x0, bounds) - - Performs the optimization using the NLopt library. - - .. method:: needs_sensitivities() - - Indicates whether the optimizer requires gradient information. - - .. method:: name() - - Returns the name of the optimizer. - - - .. py:method:: _runoptimise(cost_function, x0, bounds) - - Runs the optimization process using the NLopt library. - - :param cost_function: The objective function to minimize. It should take an array of parameter values and return the scalar cost. - :type cost_function: callable - :param x0: The initial guess for the parameters. - :type x0: array_like - :param bounds: A dictionary containing the 'lower' and 'upper' bounds arrays for the parameters. - :type bounds: dict - - :returns: A tuple containing the optimized parameter values and the final cost. - :rtype: tuple - - - .. py:method:: name() - - Returns the name of this optimizer instance. - - :returns: The name 'NLoptOptimize' representing this NLopt optimization class. - :rtype: str - - - .. py:method:: needs_sensitivities() - - Indicates if the optimizer requires gradient information for the cost function. - - :returns: False, as the default NLopt algorithms do not require gradient information. - :rtype: bool - - - -.. py:class:: Optimisation(cost, optimiser=None, sigma0=None, verbose=False) - - - A class for conducting optimization using PyBOP or PINTS optimizers. - - :param cost: An objective function to be optimized, which can be either a PINTS error measure or log PDF. - :type cost: pints.ErrorMeasure or pints.LogPDF - :param optimiser: An optimizer from either the PINTS or PyBOP framework to perform the optimization (default: None). - :type optimiser: pints.Optimiser or subclass of pybop.BaseOptimizer, optional - :param sigma0: Initial step size or standard deviation for the optimizer (default: None). - :type sigma0: float or sequence, optional - :param verbose: If True, the optimization progress is printed (default: False). - :type verbose: bool, optional - - .. attribute:: x0 - - Initial parameter values for the optimization. - - :type: numpy.ndarray - - .. attribute:: bounds - - Dictionary containing the parameter bounds with keys 'lower' and 'upper'. - - :type: dict - - .. attribute:: n_parameters - - Number of parameters in the optimization problem. - - :type: int - - .. attribute:: sigma0 - - Initial step size or standard deviation for the optimizer. - - :type: float or sequence - - .. attribute:: log - - Log of the optimization process. - - :type: list - - .. py:method:: _run_pints() - - Internal method to run the optimization using a PINTS optimizer. - - :returns: * **x** (*numpy.ndarray*) -- The best parameter set found by the optimization. - * **final_cost** (*float*) -- The final cost associated with the best parameters. - - .. seealso:: :obj:`This` - - - .. py:method:: _run_pybop() - - Internal method to run the optimization using a PyBOP optimizer. - - :returns: * **x** (*numpy.ndarray*) -- The best parameter set found by the optimization. - * **final_cost** (*float*) -- The final cost associated with the best parameters. - - - .. py:method:: f_guessed_tracking() - - Check if f_guessed instead of f_best is being tracked. - Credit: PINTS - - :returns: True if f_guessed is being tracked, False otherwise. - :rtype: bool - - - .. py:method:: run() - - Run the optimization and return the optimized parameters and final cost. - - :returns: * **x** (*numpy.ndarray*) -- The best parameter set found by the optimization. - * **final_cost** (*float*) -- The final cost associated with the best parameters. - - - .. py:method:: set_f_guessed_tracking(use_f_guessed=False) - - Set the method used to track the optimizer progress. - Credit: PINTS - - :param use_f_guessed: If True, track f_guessed; otherwise, track f_best (default: False). - :type use_f_guessed: bool, optional - - - .. py:method:: set_max_evaluations(evaluations=None) - - Set a maximum number of evaluations stopping criterion. - Credit: PINTS - - :param evaluations: The maximum number of evaluations after which to stop the optimization (default: None). - :type evaluations: int, optional - - - .. py:method:: set_max_iterations(iterations=1000) - - Set the maximum number of iterations as a stopping criterion. - Credit: PINTS - - :param iterations: The maximum number of iterations to run (default is 1000). - Set to `None` to remove this stopping criterion. - :type iterations: int, optional - - - .. py:method:: set_max_unchanged_iterations(iterations=25, threshold=1e-05) - - Set the maximum number of iterations without significant change as a stopping criterion. - Credit: PINTS - - :param iterations: The maximum number of unchanged iterations to run (default is 25). - Set to `None` to remove this stopping criterion. - :type iterations: int, optional - :param threshold: The minimum significant change in the objective function value that resets the unchanged iteration counter (default is 1e-5). - :type threshold: float, optional - - - .. py:method:: set_parallel(parallel=False) - - Enable or disable parallel evaluation. - Credit: PINTS - - :param parallel: If True, use as many worker processes as there are CPU cores. If an integer, use that many workers. - If False or 0, disable parallelism (default: False). - :type parallel: bool or int, optional - - - .. py:method:: store_optimised_parameters(x) - - Update the problem parameters with optimized values. - - The optimized parameter values are stored within the associated PyBOP parameter class. - - :param x: Optimized parameter values. - :type x: array-like - - - -.. py:class:: PSO(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.PSO` - - Implements a particle swarm optimization (PSO) algorithm. - - This class extends the PSO optimizer from the PINTS library. PSO is a - metaheuristic optimization method inspired by the social behavior of birds - flocking or fish schooling, suitable for global optimization problems. - - :param x0: Initial positions of particles, which the optimization will use. - :type x0: array_like - :param sigma0: Spread of the initial particle positions (default is 0.1). - :type sigma0: float, optional - :param bounds: Lower and upper bounds for each optimization parameter. - :type bounds: dict, optional - - .. seealso:: - - :obj:`pints.PSO` - The PINTS implementation this class is based on. - - -.. py:class:: Parameter(name, initial_value=None, prior=None, bounds=None) - - - Represents a parameter within the PyBOP framework. - - This class encapsulates the definition of a parameter, including its name, prior - distribution, initial value, bounds, and a margin to ensure the parameter stays - within feasible limits during optimization or sampling. - - :param name: The name of the parameter. - :type name: str - :param initial_value: The initial value to be assigned to the parameter. Defaults to None. - :type initial_value: float, optional - :param prior: The prior distribution from which parameter values are drawn. Defaults to None. - :type prior: scipy.stats distribution, optional - :param bounds: A tuple defining the lower and upper bounds for the parameter. - Defaults to None. - :type bounds: tuple, optional - - .. method:: rvs(n_samples) - - Draw random samples from the parameter's prior distribution. - - .. method:: update(value) - - Update the parameter's current value. - - .. method:: set_margin(margin) - - Set the margin to a specified positive value less than 1. - - - :raises ValueError: If the lower bound is not strictly less than the upper bound, or if - the margin is set outside the interval (0, 1). - - .. py:method:: __repr__() - - Return a string representation of the Parameter instance. - - :returns: A string including the parameter's name, prior, bounds, and current value. - :rtype: str - - - .. py:method:: rvs(n_samples) - - Draw random samples from the parameter's prior distribution. - - The samples are constrained to be within the parameter's bounds, excluding - a predefined margin at the boundaries. - - :param n_samples: The number of samples to draw. - :type n_samples: int - - :returns: An array of samples drawn from the prior distribution within the parameter's bounds. - :rtype: array-like - - - .. py:method:: set_margin(margin) - - Set the margin to a specified positive value less than 1. - - The margin is used to ensure parameter samples are not drawn exactly at the bounds, - which may be problematic in some optimization or sampling algorithms. - - :param margin: The new margin value to be used, which must be in the interval (0, 1). - :type margin: float - - :raises ValueError: If the margin is not between 0 and 1. - - - .. py:method:: update(value) - - Update the parameter's current value. - - :param value: The new value to be assigned to the parameter. - :type value: float - - - -.. py:class:: ParameterSet(json_path=None, params_dict=None) - - - Handles the import and export of parameter sets for battery models. - - This class provides methods to load parameters from a JSON file and to export them - back to a JSON file. It also includes custom logic to handle special cases, such - as parameter values that require specific initialization. - - :param json_path: Path to a JSON file containing parameter data. If provided, parameters will be imported from this file during initialization. - :type json_path: str, optional - :param params_dict: A dictionary of parameters to initialize the ParameterSet with. If not provided, an empty dictionary is used. - :type params_dict: dict, optional - - .. py:method:: _handle_special_cases() - - Processes special cases for parameter values that require custom handling. - - For example, if the open-circuit voltage is specified as 'default', it will - fetch the default value from the PyBaMM empirical Thevenin model. - - - .. py:method:: export_parameters(output_json_path, fit_params=None) - - Exports parameters to a JSON file specified by `output_json_path`. - - The current state of the `params` attribute is written to the file. If `fit_params` - is provided, these parameters are updated before export. Non-serializable values - are handled and noted in the output JSON. - - :param output_json_path: The file path where the JSON output will be saved. - :type output_json_path: str - :param fit_params: Parameters that have been fitted and need to be included in the export. - :type fit_params: list of fitted parameter objects, optional - - :raises ValueError: If there are no parameters to export. - - - .. py:method:: import_parameters(json_path=None) - - Imports parameters from a JSON file specified by the `json_path` attribute. - - If a `json_path` is provided at initialization or as an argument, that JSON file - is loaded and the parameters are stored in the `params` attribute. Special cases - are handled appropriately. - - :param json_path: Path to the JSON file from which to import parameters. If provided, it overrides the instance's `json_path`. - :type json_path: str, optional - - :returns: The dictionary containing the imported parameters. - :rtype: dict - - :raises FileNotFoundError: If the specified JSON file cannot be found. - - - .. py:method:: is_json_serializable(value) - - Determines if the given `value` can be serialized to JSON format. - - :param value: The value to check for JSON serializability. - :type value: any - - :returns: True if the value is JSON serializable, False otherwise. - :rtype: bool - - - .. py:method:: pybamm(name) - :classmethod: - - Retrieves a PyBaMM parameter set by name. - - :param name: The name of the PyBaMM parameter set to retrieve. - :type name: str - - :returns: A PyBaMM parameter set corresponding to the provided name. - :rtype: pybamm.ParameterValues - - - -.. py:class:: PlotlyManager - - - Manages the installation and configuration of Plotly for generating visualizations. - - This class ensures that Plotly is installed and properly configured to display - plots in a web browser. - - Upon instantiation, it checks for Plotly's presence, installs it if missing, - and configures the default renderer and browser settings. - - .. attribute:: go - - The Plotly graph_objects module for creating figures. - - :type: module - - .. attribute:: pio - - The Plotly input/output module for configuring the renderer. - - :type: module - - .. attribute:: make_subplots - - The function from Plotly for creating subplot figures. - - :type: function - - .. method:: ensure_plotly_installed() - - Verifies if Plotly is installed, importing necessary modules and prompting for installation if missing. - - .. method:: prompt_for_plotly_installation() - - Prompts the user for permission to install Plotly and proceeds with installation if consented. - - .. method:: install_plotly() - - Installs the Plotly package using pip. - - .. method:: post_install_setup() - - Sets up Plotly default renderer after installation. - - .. method:: check_renderer_settings() - - Verifies that the Plotly renderer is correctly set. - - .. method:: check_browser_availability() - - Checks if a web browser is available for rendering plots. - - - .. rubric:: Examples - - >>> plotly_manager = PlotlyManager() - - .. py:method:: check_browser_availability() - - Confirm a web browser is available for Plotly's 'browser' renderer; provide guidance if not. - - - .. py:method:: check_renderer_settings() - - Check and provide information on setting the Plotly renderer if it's not already set. - - - .. py:method:: ensure_plotly_installed() - - Check if Plotly is installed and import necessary modules; prompt for installation if missing. - - - .. py:method:: install_plotly() - - Install the Plotly package using pip. Exit if installation fails. - - - .. py:method:: post_install_setup() - - Import Plotly modules and set the default renderer after installation. - - - .. py:method:: prompt_for_plotly_installation() - - Prompt the user for Plotly installation and install it upon agreement. - - - -.. py:class:: RootMeanSquaredError(problem) - - - Bases: :py:obj:`BaseCost` - - Root mean square error cost function. - - Computes the root mean square error between model predictions and the target - data, providing a measure of the differences between predicted values and - observed values. - - Inherits all parameters and attributes from ``BaseCost``. - - - .. py:method:: __call__(x, grad=None) - - Calculate the root mean square error for a given set of parameters. - - :param x: The parameters for which to evaluate the cost. - :type x: array-like - :param grad: An array to store the gradient of the cost function with respect - to the parameters. - :type grad: array-like, optional - - :returns: The root mean square error. - :rtype: float - - :raises ValueError: If an error occurs during the calculation of the cost. - - - -.. py:class:: SNES(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.SNES` - - Implements the stochastic natural evolution strategy (SNES) optimization algorithm. - - Inheriting from the PINTS SNES class, this optimizer is an evolutionary algorithm - that evolves a probability distribution on the parameter space, guiding the search - for the optimum based on the natural gradient of expected fitness. - - :param x0: Initial position from which optimization will start. - :type x0: array_like - :param sigma0: Initial step size (default is 0.1). - :type sigma0: float, optional - :param bounds: Lower and upper bounds for each optimization parameter. - :type bounds: dict, optional - - .. seealso:: - - :obj:`pints.SNES` - The PINTS implementation this class is based on. - - -.. py:class:: SciPyDifferentialEvolution(bounds=None, strategy='best1bin', maxiter=1000, popsize=15) - - - Bases: :py:obj:`pybop.optimisers.base_optimiser.BaseOptimiser` - - Adapts SciPy's differential_evolution function for global optimization. - - This class provides a global optimization strategy based on differential evolution, useful for problems involving continuous parameters and potentially multiple local minima. - - :param bounds: Bounds for variables. Must be provided as it is essential for differential evolution. - :type bounds: sequence or ``Bounds`` - :param strategy: The differential evolution strategy to use. Defaults to 'best1bin'. - :type strategy: str, optional - :param maxiter: Maximum number of iterations to perform. Defaults to 1000. - :type maxiter: int, optional - :param popsize: The number of individuals in the population. Defaults to 15. - :type popsize: int, optional - - .. py:method:: _runoptimise(cost_function, x0=None, bounds=None) - - Executes the optimization process using SciPy's differential_evolution function. - - :param cost_function: The objective function to minimize. - :type cost_function: callable - :param x0: Ignored parameter, provided for API consistency. - :type x0: array_like, optional - :param bounds: Bounds for the variables, required for differential evolution. - :type bounds: sequence or ``Bounds`` - - :returns: A tuple (x, final_cost) containing the optimized parameters and the value of ``cost_function`` at the optimum. - :rtype: tuple - - - .. py:method:: name() - - Provides the name of the optimization strategy. - - :returns: The name 'SciPyDifferentialEvolution'. - :rtype: str - - - .. py:method:: needs_sensitivities() - - Determines if the optimization algorithm requires gradient information. - - :returns: False, indicating that gradient information is not required for differential evolution. - :rtype: bool - - - -.. py:class:: SciPyMinimize(method=None, bounds=None, maxiter=None) - - - Bases: :py:obj:`pybop.optimisers.base_optimiser.BaseOptimiser` - - Adapts SciPy's minimize function for use as an optimization strategy. - - This class provides an interface to various scalar minimization algorithms implemented in SciPy, allowing fine-tuning of the optimization process through method selection and option configuration. - - :param method: The type of solver to use. If not specified, defaults to 'COBYLA'. - :type method: str, optional - :param bounds: Bounds for variables as supported by the selected method. - :type bounds: sequence or ``Bounds``, optional - :param maxiter: Maximum number of iterations to perform. - :type maxiter: int, optional - - .. py:method:: _runoptimise(cost_function, x0, bounds) - - Executes the optimization process using SciPy's minimize function. - - :param cost_function: The objective function to minimize. - :type cost_function: callable - :param x0: Initial guess for the parameters. - :type x0: array_like - :param bounds: Bounds for the variables. - :type bounds: sequence or `Bounds` - - :returns: A tuple (x, final_cost) containing the optimized parameters and the value of `cost_function` at the optimum. - :rtype: tuple - - - .. py:method:: name() - - Provides the name of the optimization strategy. - - :returns: The name 'SciPyMinimize'. - :rtype: str - - - .. py:method:: needs_sensitivities() - - Determines if the optimization algorithm requires gradient information. - - :returns: False, indicating that gradient information is not required. - :rtype: bool - - - -.. py:class:: StandardPlot(x, y, cost, y2=None, title=None, xaxis_title=None, yaxis_title=None, trace_name=None, width=1024, height=576) - - - A class for creating and displaying Plotly figures for model output comparison. - - Generates interactive plots comparing simulated model output with an optional target dataset and visualizes uncertainty. - - :param x: X-axis data points. - :type x: list or np.ndarray - :param y: Primary Y-axis data points for simulated model output. - :type y: list or np.ndarray - :param cost: Cost associated with the model output. - :type cost: float - :param y2: Secondary Y-axis data points for the target dataset (default: None). - :type y2: list or np.ndarray, optional - :param title: Title of the plot (default: None). - :type title: str, optional - :param xaxis_title: Title for the x-axis (default: None). - :type xaxis_title: str, optional - :param yaxis_title: Title for the y-axis (default: None). - :type yaxis_title: str, optional - :param trace_name: Name for the primary trace (default: "Simulated"). - :type trace_name: str, optional - :param width: Width of the figure in pixels (default: 1024). - :type width: int, optional - :param height: Height of the figure in pixels (default: 576). - :type height: int, optional - - .. py:method:: __call__() - - Generate the Plotly figure. - - :returns: The generated Plotly figure. - :rtype: plotly.graph_objs.Figure - - - .. py:method:: create_layout() - - Create the layout for the Plotly figure. - - :returns: The layout for the Plotly figure. - :rtype: plotly.graph_objs.Layout - - - .. py:method:: create_traces() - - Create traces for the Plotly figure. - - :returns: A list of plotly.graph_objs.Scatter objects to be used as traces. - :rtype: list - - - .. py:method:: wrap_text(text, width) - :staticmethod: - - Wrap text to a specified width with HTML line breaks. - - :param text: The text to wrap. - :type text: str - :param width: The width to wrap the text to. - :type width: int - - :returns: The wrapped text. - :rtype: str - - - -.. py:class:: SumSquaredError(problem) - - - Bases: :py:obj:`BaseCost` - - Sum of squared errors cost function. - - Computes the sum of the squares of the differences between model predictions - and target data, which serves as a measure of the total error between the - predicted and observed values. - - Inherits all parameters and attributes from ``BaseCost``. - - Additional Attributes - --------------------- - _de : float - The gradient of the cost function to use if an error occurs during - evaluation. Defaults to 1.0. - - - .. py:method:: __call__(x, grad=None) - - Calculate the sum of squared errors for a given set of parameters. - - :param x: The parameters for which to evaluate the cost. - :type x: array-like - :param grad: An array to store the gradient of the cost function with respect - to the parameters. - :type grad: array-like, optional - - :returns: The sum of squared errors. - :rtype: float - - :raises ValueError: If an error occurs during the calculation of the cost. - - - .. py:method:: evaluateS1(x) - - Compute the cost and its gradient with respect to the parameters. - - :param x: The parameters for which to compute the cost and gradient. - :type x: array-like - - :returns: A tuple containing the cost and the gradient. The cost is a float, - and the gradient is an array-like of the same length as `x`. - :rtype: tuple - - :raises ValueError: If an error occurs during the calculation of the cost or gradient. - - - .. py:method:: set_fail_gradient(de) - - Set the fail gradient to a specified value. - - The fail gradient is used if an error occurs during the calculation - of the gradient. This method allows updating the default gradient value. - - :param de: The new fail gradient value to be used. - :type de: float - - - -.. py:class:: Uniform(lower, upper) - - - Represents a uniform distribution over a specified interval. - - This class provides methods to calculate the pdf, the log pdf, and to generate - random variates from the distribution. - - :param lower: The lower bound of the distribution. - :type lower: float - :param upper: The upper bound of the distribution. - :type upper: float - - .. py:method:: __repr__() - - Returns a string representation of the Uniform object. - - - .. py:method:: logpdf(x) - - Calculates the logarithm of the pdf of the uniform distribution at x. - - :param x: The point at which to evaluate the log pdf. - :type x: float - - :returns: The log of the probability density function value at x. - :rtype: float - - - .. py:method:: pdf(x) - - Calculates the probability density function of the uniform distribution at x. - - :param x: The point at which to evaluate the pdf. - :type x: float - - :returns: The probability density function value at x. - :rtype: float - - - .. py:method:: rvs(size) - - Generates random variates from the uniform distribution. - - :param size: The number of random variates to generate. - :type size: int - - :returns: An array of random variates from the uniform distribution. - :rtype: array_like - - :raises ValueError: If the size parameter is not positive. - - - -.. py:class:: XNES(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.XNES` - - Implements the Exponential Natural Evolution Strategy (XNES) optimizer from PINTS. - - XNES is an evolutionary algorithm that samples from a multivariate normal distribution, which is updated iteratively to fit the distribution of successful solutions. - - :param x0: The initial parameter vector to optimize. - :type x0: array_like - :param sigma0: Initial standard deviation of the sampling distribution, defaults to 0.1. - :type sigma0: float, optional - :param bounds: A dictionary with 'lower' and 'upper' keys containing arrays for lower and upper bounds on the parameters. If ``None``, no bounds are enforced. - :type bounds: dict, optional - - .. seealso:: - - :obj:`pints.XNES` - PINTS implementation of XNES algorithm. - - -.. py:function:: plot_convergence(optim, xaxis_title='Iteration', yaxis_title='Cost', title='Convergence') - - Plot the convergence of the optimisation algorithm. - - Parameters: - ---------- - optim : optimisation object - Optimisation object containing the cost function and optimiser. - xaxis_title : str, optional - Title for the x-axis (default is "Iteration"). - yaxis_title : str, optional - Title for the y-axis (default is "Cost"). - title : str, optional - Title of the plot (default is "Convergence"). - - Returns: - ---------- - fig : plotly.graph_objs.Figure - The Plotly figure object for the convergence plot. - - -.. py:function:: plot_cost2d(cost, bounds=None, optim=None, steps=10) - - Plot a 2D visualization of a cost landscape using Plotly. - - This function generates a contour plot representing the cost landscape for a provided - callable cost function over a grid of parameter values within the specified bounds. - - :param cost: The cost function to be evaluated. Must accept a list of parameters and return a cost value. - :type cost: callable - :param bounds: A 2x2 array specifying the [min, max] bounds for each parameter. If None, uses `get_param_bounds`. - :type bounds: numpy.ndarray, optional - :param optim: An optimizer instance which, if provided, overlays its specific trace on the plot. - :type optim: object, optional - :param steps: The number of intervals to divide the parameter space into along each dimension (default is 10). - :type steps: int, optional - - :returns: The Plotly figure object containing the cost landscape plot. - :rtype: plotly.graph_objs.Figure - - :raises ValueError: If the cost function does not return a valid cost when called with a parameter list. - - -.. py:function:: plot_parameters(optim, xaxis_titles='Iteration', yaxis_titles=None, title='Convergence') - - Plot the evolution of parameters during the optimization process using Plotly. - - :param optim: The optimization object containing the history of parameter values and associated cost. - :type optim: object - :param xaxis_titles: Title for the x-axis, defaulting to "Iteration". - :type xaxis_titles: str, optional - :param yaxis_titles: Titles for the y-axes, one for each parameter. If None, parameter names are used. - :type yaxis_titles: list of str, optional - :param title: Title of the plot, defaulting to "Convergence". - :type title: str, optional - - :returns: A Plotly figure object showing the parameter evolution over iterations. - :rtype: plotly.graph_objs.Figure - - -.. py:function:: quick_plot(params, cost, title='Scatter Plot', width=1024, height=576) - - Quickly plot the target dataset against minimized model output. - - :param params: Optimized parameters. - :type params: array-like - :param cost: Cost object with problem, dataset, and signal attributes. - :type cost: object - :param title: Title of the plot (default: "Scatter Plot"). - :type title: str, optional - :param width: Width of the figure in pixels (default: 1024). - :type width: int, optional - :param height: Height of the figure in pixels (default: 576). - :type height: int, optional - - :returns: The Plotly figure object for the scatter plot. - :rtype: plotly.graph_objs.Figure - - -.. py:data:: FLOAT_FORMAT - :value: '{: .17e}' - - - -.. py:data:: __version__ - :value: '23.11' - - - -.. py:data:: script_path - - - diff --git a/_sources/api/pybop/models/base_model/index.rst.txt b/_sources/api/pybop/models/base_model/index.rst.txt deleted file mode 100644 index 28872c8a2..000000000 --- a/_sources/api/pybop/models/base_model/index.rst.txt +++ /dev/null @@ -1,181 +0,0 @@ -:py:mod:`pybop.models.base_model` -================================= - -.. py:module:: pybop.models.base_model - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.models.base_model.BaseModel - - - - -.. py:class:: BaseModel(name='Base Model') - - - A base class for constructing and simulating models using PyBaMM. - - This class serves as a foundation for building specific models in PyBaMM. - It provides methods to set up the model, define parameters, and perform - simulations. The class is designed to be subclassed for creating models - with custom behavior. - - .. method:: build(dataset=None, parameters=None, check_model=True, init_soc=None) - - Construct the PyBaMM model if not already built. - - .. method:: set_init_soc(init_soc) - - Set the initial state of charge for the battery model. - - .. method:: set_params() - - Assign the parameters to the model. - - .. method:: simulate(inputs, t_eval) - - Execute the forward model simulation and return the result. - - .. method:: simulateS1(inputs, t_eval) - - Perform the forward model simulation with sensitivities. - - .. method:: predict(inputs=None, t_eval=None, parameter_set=None, experiment=None, init_soc=None) - - Solve the model using PyBaMM's simulation framework and return the solution. - - - .. py:property:: built_model - - - .. py:property:: geometry - - - .. py:property:: mesh - - - .. py:property:: model_with_set_params - - - .. py:property:: parameter_set - - - .. py:property:: solver - - - .. py:property:: spatial_methods - - - .. py:property:: submesh_types - - - .. py:property:: var_pts - - - .. py:method:: build(dataset=None, parameters=None, check_model=True, init_soc=None) - - Construct the PyBaMM model if not already built, and set parameters. - - This method initializes the model components, applies the given parameters, - sets up the mesh and discretization if needed, and prepares the model - for simulations. - - :param dataset: The dataset to be used in the model construction. - :type dataset: pybamm.Dataset, optional - :param parameters: A dictionary containing parameter values to apply to the model. - :type parameters: dict, optional - :param check_model: If True, the model will be checked for correctness after construction. - :type check_model: bool, optional - :param init_soc: The initial state of charge to be used in simulations. - :type init_soc: float, optional - - - .. py:method:: predict(inputs=None, t_eval=None, parameter_set=None, experiment=None, init_soc=None) - - Solve the model using PyBaMM's simulation framework and return the solution. - - This method sets up a PyBaMM simulation by configuring the model, parameters, experiment - (if any), and initial state of charge (if provided). It then solves the simulation and - returns the resulting solution object. - - :param inputs: Input parameters for the simulation. If the input is array-like, it is converted - to a dictionary using the model's fitting keys. Defaults to None, indicating - that the default parameters should be used. - :type inputs: dict or array-like, optional - :param t_eval: An array of time points at which to evaluate the solution. Defaults to None, - which means the time points need to be specified within experiment or elsewhere. - :type t_eval: array-like, optional - :param parameter_set: A PyBaMM ParameterValues object or a dictionary containing the parameter values - to use for the simulation. Defaults to the model's current ParameterValues if None. - :type parameter_set: pybamm.ParameterValues, optional - :param experiment: A PyBaMM Experiment object specifying the experimental conditions under which - the simulation should be run. Defaults to None, indicating no experiment. - :type experiment: pybamm.Experiment, optional - :param init_soc: The initial state of charge for the simulation, as a fraction (between 0 and 1). - Defaults to None. - :type init_soc: float, optional - - :returns: The solution object returned after solving the simulation. - :rtype: pybamm.Solution - - :raises ValueError: If the model has not been configured properly before calling this method or - if PyBaMM models are not supported by the current simulation method. - - - .. py:method:: set_init_soc(init_soc) - - Set the initial state of charge for the battery model. - - :param init_soc: The initial state of charge to be used in the model. - :type init_soc: float - - - .. py:method:: set_params() - - Assign the parameters to the model. - - This method processes the model with the given parameters, sets up - the geometry, and updates the model instance. - - - .. py:method:: simulate(inputs, t_eval) - - Execute the forward model simulation and return the result. - - :param inputs: The input parameters for the simulation. If array-like, it will be - converted to a dictionary using the model's fit keys. - :type inputs: dict or array-like - :param t_eval: An array of time points at which to evaluate the solution. - :type t_eval: array-like - - :returns: The simulation result corresponding to the specified signal. - :rtype: array-like - - :raises ValueError: If the model has not been built before simulation. - - - .. py:method:: simulateS1(inputs, t_eval) - - Perform the forward model simulation with sensitivities. - - :param inputs: The input parameters for the simulation. If array-like, it will be - converted to a dictionary using the model's fit keys. - :type inputs: dict or array-like - :param t_eval: An array of time points at which to evaluate the solution and its - sensitivities. - :type t_eval: array-like - - :returns: A tuple containing the simulation result and the sensitivities. - :rtype: tuple - - :raises ValueError: If the model has not been built before simulation. - - - diff --git a/_sources/api/pybop/models/empirical/ecm/index.rst.txt b/_sources/api/pybop/models/empirical/ecm/index.rst.txt deleted file mode 100644 index 154000860..000000000 --- a/_sources/api/pybop/models/empirical/ecm/index.rst.txt +++ /dev/null @@ -1,49 +0,0 @@ -:py:mod:`pybop.models.empirical.ecm` -==================================== - -.. py:module:: pybop.models.empirical.ecm - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.models.empirical.ecm.Thevenin - - - - -.. py:class:: Thevenin(name='Equivalent Circuit Thevenin Model', parameter_set=None, geometry=None, submesh_types=None, var_pts=None, spatial_methods=None, solver=None, options=None, **kwargs) - - - Bases: :py:obj:`pybop.models.base_model.BaseModel` - - The Thevenin class represents an equivalent circuit model based on the Thevenin model in PyBaMM. - - This class encapsulates the PyBaMM equivalent circuit Thevenin model, providing an interface - to define the parameters, geometry, submesh types, variable points, spatial methods, and solver - to be used for simulations. - - :param name: A name for the model instance. Defaults to "Equivalent Circuit Thevenin Model". - :type name: str, optional - :param parameter_set: A dictionary of parameters to be used for the model. If None, the default parameters from PyBaMM are used. - :type parameter_set: dict or None, optional - :param geometry: The geometry definitions for the model. If None, the default geometry from PyBaMM is used. - :type geometry: dict or None, optional - :param submesh_types: The types of submeshes to use. If None, the default submesh types from PyBaMM are used. - :type submesh_types: dict or None, optional - :param var_pts: The number of points for each variable in the model to define the discretization. If None, the default is used. - :type var_pts: dict or None, optional - :param spatial_methods: The spatial methods to be used for discretization. If None, the default spatial methods from PyBaMM are used. - :type spatial_methods: dict or None, optional - :param solver: The solver to use for simulating the model. If None, the default solver from PyBaMM is used. - :type solver: pybamm.Solver or None, optional - :param options: A dictionary of options to pass to the PyBaMM Thevenin model. - :type options: dict or None, optional - :param \*\*kwargs: Additional arguments passed to the PyBaMM Thevenin model constructor. - - diff --git a/_sources/api/pybop/models/empirical/index.rst.txt b/_sources/api/pybop/models/empirical/index.rst.txt deleted file mode 100644 index 002c41791..000000000 --- a/_sources/api/pybop/models/empirical/index.rst.txt +++ /dev/null @@ -1,58 +0,0 @@ -:py:mod:`pybop.models.empirical` -================================ - -.. py:module:: pybop.models.empirical - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - ecm/index.rst - - -Package Contents ----------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.models.empirical.Thevenin - - - - -.. py:class:: Thevenin(name='Equivalent Circuit Thevenin Model', parameter_set=None, geometry=None, submesh_types=None, var_pts=None, spatial_methods=None, solver=None, options=None, **kwargs) - - - Bases: :py:obj:`pybop.models.base_model.BaseModel` - - The Thevenin class represents an equivalent circuit model based on the Thevenin model in PyBaMM. - - This class encapsulates the PyBaMM equivalent circuit Thevenin model, providing an interface - to define the parameters, geometry, submesh types, variable points, spatial methods, and solver - to be used for simulations. - - :param name: A name for the model instance. Defaults to "Equivalent Circuit Thevenin Model". - :type name: str, optional - :param parameter_set: A dictionary of parameters to be used for the model. If None, the default parameters from PyBaMM are used. - :type parameter_set: dict or None, optional - :param geometry: The geometry definitions for the model. If None, the default geometry from PyBaMM is used. - :type geometry: dict or None, optional - :param submesh_types: The types of submeshes to use. If None, the default submesh types from PyBaMM are used. - :type submesh_types: dict or None, optional - :param var_pts: The number of points for each variable in the model to define the discretization. If None, the default is used. - :type var_pts: dict or None, optional - :param spatial_methods: The spatial methods to be used for discretization. If None, the default spatial methods from PyBaMM are used. - :type spatial_methods: dict or None, optional - :param solver: The solver to use for simulating the model. If None, the default solver from PyBaMM is used. - :type solver: pybamm.Solver or None, optional - :param options: A dictionary of options to pass to the PyBaMM Thevenin model. - :type options: dict or None, optional - :param \*\*kwargs: Additional arguments passed to the PyBaMM Thevenin model constructor. - - diff --git a/_sources/api/pybop/models/index.rst.txt b/_sources/api/pybop/models/index.rst.txt deleted file mode 100644 index 665808348..000000000 --- a/_sources/api/pybop/models/index.rst.txt +++ /dev/null @@ -1,25 +0,0 @@ -:py:mod:`pybop.models` -====================== - -.. py:module:: pybop.models - - -Subpackages ------------ -.. toctree:: - :titlesonly: - :maxdepth: 3 - - empirical/index.rst - lithium_ion/index.rst - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - base_model/index.rst - - diff --git a/_sources/api/pybop/models/lithium_ion/echem/index.rst.txt b/_sources/api/pybop/models/lithium_ion/echem/index.rst.txt deleted file mode 100644 index 09df238b5..000000000 --- a/_sources/api/pybop/models/lithium_ion/echem/index.rst.txt +++ /dev/null @@ -1,78 +0,0 @@ -:py:mod:`pybop.models.lithium_ion.echem` -======================================== - -.. py:module:: pybop.models.lithium_ion.echem - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.models.lithium_ion.echem.SPM - pybop.models.lithium_ion.echem.SPMe - - - - -.. py:class:: SPM(name='Single Particle Model', parameter_set=None, geometry=None, submesh_types=None, var_pts=None, spatial_methods=None, solver=None, options=None) - - - Bases: :py:obj:`pybop.models.base_model.BaseModel` - - Wraps the Single Particle Model (SPM) for simulating lithium-ion batteries, as implemented in PyBaMM. - - The SPM is a simplified physics-based model that represents a lithium-ion cell using a single - spherical particle to simulate the behavior of the negative and positive electrodes. - - :param name: The name for the model instance, defaulting to "Single Particle Model". - :type name: str, optional - :param parameter_set: The parameters for the model. If None, default parameters provided by PyBaMM are used. - :type parameter_set: pybamm.ParameterValues or dict, optional - :param geometry: The geometry definitions for the model. If None, default geometry from PyBaMM is used. - :type geometry: dict, optional - :param submesh_types: The types of submeshes to use. If None, default submesh types from PyBaMM are used. - :type submesh_types: dict, optional - :param var_pts: The discretization points for each variable in the model. If None, default points from PyBaMM are used. - :type var_pts: dict, optional - :param spatial_methods: The spatial methods used for discretization. If None, default spatial methods from PyBaMM are used. - :type spatial_methods: dict, optional - :param solver: The solver to use for simulating the model. If None, the default solver from PyBaMM is used. - :type solver: pybamm.Solver, optional - :param options: A dictionary of options to customize the behavior of the PyBaMM model. - :type options: dict, optional - - -.. py:class:: SPMe(name='Single Particle Model with Electrolyte', parameter_set=None, geometry=None, submesh_types=None, var_pts=None, spatial_methods=None, solver=None, options=None) - - - Bases: :py:obj:`pybop.models.base_model.BaseModel` - - Represents the Single Particle Model with Electrolyte (SPMe) for lithium-ion batteries. - - The SPMe extends the basic Single Particle Model (SPM) by incorporating electrolyte dynamics, - making it suitable for simulations where electrolyte effects are non-negligible. This class - provides a framework to define the model parameters, geometry, mesh types, discretization - points, spatial methods, and numerical solvers for simulation within the PyBaMM ecosystem. - - :param name: A name for the model instance, defaults to "Single Particle Model with Electrolyte". - :type name: str, optional - :param parameter_set: A dictionary or a ParameterValues object containing the parameters for the model. If None, the default PyBaMM parameters for SPMe are used. - :type parameter_set: pybamm.ParameterValues or dict, optional - :param geometry: A dictionary defining the model's geometry. If None, the default PyBaMM geometry for SPMe is used. - :type geometry: dict, optional - :param submesh_types: A dictionary defining the types of submeshes to use. If None, the default PyBaMM submesh types for SPMe are used. - :type submesh_types: dict, optional - :param var_pts: A dictionary specifying the number of points for each variable for discretization. If None, the default PyBaMM variable points for SPMe are used. - :type var_pts: dict, optional - :param spatial_methods: A dictionary specifying the spatial methods for discretization. If None, the default PyBaMM spatial methods for SPMe are used. - :type spatial_methods: dict, optional - :param solver: The solver to use for simulating the model. If None, the default PyBaMM solver for SPMe is used. - :type solver: pybamm.Solver, optional - :param options: A dictionary of options to customize the behavior of the PyBaMM model. - :type options: dict, optional - - diff --git a/_sources/api/pybop/models/lithium_ion/index.rst.txt b/_sources/api/pybop/models/lithium_ion/index.rst.txt deleted file mode 100644 index 5180306ae..000000000 --- a/_sources/api/pybop/models/lithium_ion/index.rst.txt +++ /dev/null @@ -1,87 +0,0 @@ -:py:mod:`pybop.models.lithium_ion` -================================== - -.. py:module:: pybop.models.lithium_ion - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - echem/index.rst - - -Package Contents ----------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.models.lithium_ion.SPM - pybop.models.lithium_ion.SPMe - - - - -.. py:class:: SPM(name='Single Particle Model', parameter_set=None, geometry=None, submesh_types=None, var_pts=None, spatial_methods=None, solver=None, options=None) - - - Bases: :py:obj:`pybop.models.base_model.BaseModel` - - Wraps the Single Particle Model (SPM) for simulating lithium-ion batteries, as implemented in PyBaMM. - - The SPM is a simplified physics-based model that represents a lithium-ion cell using a single - spherical particle to simulate the behavior of the negative and positive electrodes. - - :param name: The name for the model instance, defaulting to "Single Particle Model". - :type name: str, optional - :param parameter_set: The parameters for the model. If None, default parameters provided by PyBaMM are used. - :type parameter_set: pybamm.ParameterValues or dict, optional - :param geometry: The geometry definitions for the model. If None, default geometry from PyBaMM is used. - :type geometry: dict, optional - :param submesh_types: The types of submeshes to use. If None, default submesh types from PyBaMM are used. - :type submesh_types: dict, optional - :param var_pts: The discretization points for each variable in the model. If None, default points from PyBaMM are used. - :type var_pts: dict, optional - :param spatial_methods: The spatial methods used for discretization. If None, default spatial methods from PyBaMM are used. - :type spatial_methods: dict, optional - :param solver: The solver to use for simulating the model. If None, the default solver from PyBaMM is used. - :type solver: pybamm.Solver, optional - :param options: A dictionary of options to customize the behavior of the PyBaMM model. - :type options: dict, optional - - -.. py:class:: SPMe(name='Single Particle Model with Electrolyte', parameter_set=None, geometry=None, submesh_types=None, var_pts=None, spatial_methods=None, solver=None, options=None) - - - Bases: :py:obj:`pybop.models.base_model.BaseModel` - - Represents the Single Particle Model with Electrolyte (SPMe) for lithium-ion batteries. - - The SPMe extends the basic Single Particle Model (SPM) by incorporating electrolyte dynamics, - making it suitable for simulations where electrolyte effects are non-negligible. This class - provides a framework to define the model parameters, geometry, mesh types, discretization - points, spatial methods, and numerical solvers for simulation within the PyBaMM ecosystem. - - :param name: A name for the model instance, defaults to "Single Particle Model with Electrolyte". - :type name: str, optional - :param parameter_set: A dictionary or a ParameterValues object containing the parameters for the model. If None, the default PyBaMM parameters for SPMe are used. - :type parameter_set: pybamm.ParameterValues or dict, optional - :param geometry: A dictionary defining the model's geometry. If None, the default PyBaMM geometry for SPMe is used. - :type geometry: dict, optional - :param submesh_types: A dictionary defining the types of submeshes to use. If None, the default PyBaMM submesh types for SPMe are used. - :type submesh_types: dict, optional - :param var_pts: A dictionary specifying the number of points for each variable for discretization. If None, the default PyBaMM variable points for SPMe are used. - :type var_pts: dict, optional - :param spatial_methods: A dictionary specifying the spatial methods for discretization. If None, the default PyBaMM spatial methods for SPMe are used. - :type spatial_methods: dict, optional - :param solver: The solver to use for simulating the model. If None, the default PyBaMM solver for SPMe is used. - :type solver: pybamm.Solver, optional - :param options: A dictionary of options to customize the behavior of the PyBaMM model. - :type options: dict, optional - - diff --git a/_sources/api/pybop/optimisation/index.rst.txt b/_sources/api/pybop/optimisation/index.rst.txt deleted file mode 100644 index 25cd20a74..000000000 --- a/_sources/api/pybop/optimisation/index.rst.txt +++ /dev/null @@ -1,159 +0,0 @@ -:py:mod:`pybop.optimisation` -============================ - -.. py:module:: pybop.optimisation - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.optimisation.Optimisation - - - - -.. py:class:: Optimisation(cost, optimiser=None, sigma0=None, verbose=False) - - - A class for conducting optimization using PyBOP or PINTS optimizers. - - :param cost: An objective function to be optimized, which can be either a PINTS error measure or log PDF. - :type cost: pints.ErrorMeasure or pints.LogPDF - :param optimiser: An optimizer from either the PINTS or PyBOP framework to perform the optimization (default: None). - :type optimiser: pints.Optimiser or subclass of pybop.BaseOptimizer, optional - :param sigma0: Initial step size or standard deviation for the optimizer (default: None). - :type sigma0: float or sequence, optional - :param verbose: If True, the optimization progress is printed (default: False). - :type verbose: bool, optional - - .. attribute:: x0 - - Initial parameter values for the optimization. - - :type: numpy.ndarray - - .. attribute:: bounds - - Dictionary containing the parameter bounds with keys 'lower' and 'upper'. - - :type: dict - - .. attribute:: n_parameters - - Number of parameters in the optimization problem. - - :type: int - - .. attribute:: sigma0 - - Initial step size or standard deviation for the optimizer. - - :type: float or sequence - - .. attribute:: log - - Log of the optimization process. - - :type: list - - .. py:method:: _run_pints() - - Internal method to run the optimization using a PINTS optimizer. - - :returns: * **x** (*numpy.ndarray*) -- The best parameter set found by the optimization. - * **final_cost** (*float*) -- The final cost associated with the best parameters. - - .. seealso:: :obj:`This` - - - .. py:method:: _run_pybop() - - Internal method to run the optimization using a PyBOP optimizer. - - :returns: * **x** (*numpy.ndarray*) -- The best parameter set found by the optimization. - * **final_cost** (*float*) -- The final cost associated with the best parameters. - - - .. py:method:: f_guessed_tracking() - - Check if f_guessed instead of f_best is being tracked. - Credit: PINTS - - :returns: True if f_guessed is being tracked, False otherwise. - :rtype: bool - - - .. py:method:: run() - - Run the optimization and return the optimized parameters and final cost. - - :returns: * **x** (*numpy.ndarray*) -- The best parameter set found by the optimization. - * **final_cost** (*float*) -- The final cost associated with the best parameters. - - - .. py:method:: set_f_guessed_tracking(use_f_guessed=False) - - Set the method used to track the optimizer progress. - Credit: PINTS - - :param use_f_guessed: If True, track f_guessed; otherwise, track f_best (default: False). - :type use_f_guessed: bool, optional - - - .. py:method:: set_max_evaluations(evaluations=None) - - Set a maximum number of evaluations stopping criterion. - Credit: PINTS - - :param evaluations: The maximum number of evaluations after which to stop the optimization (default: None). - :type evaluations: int, optional - - - .. py:method:: set_max_iterations(iterations=1000) - - Set the maximum number of iterations as a stopping criterion. - Credit: PINTS - - :param iterations: The maximum number of iterations to run (default is 1000). - Set to `None` to remove this stopping criterion. - :type iterations: int, optional - - - .. py:method:: set_max_unchanged_iterations(iterations=25, threshold=1e-05) - - Set the maximum number of iterations without significant change as a stopping criterion. - Credit: PINTS - - :param iterations: The maximum number of unchanged iterations to run (default is 25). - Set to `None` to remove this stopping criterion. - :type iterations: int, optional - :param threshold: The minimum significant change in the objective function value that resets the unchanged iteration counter (default is 1e-5). - :type threshold: float, optional - - - .. py:method:: set_parallel(parallel=False) - - Enable or disable parallel evaluation. - Credit: PINTS - - :param parallel: If True, use as many worker processes as there are CPU cores. If an integer, use that many workers. - If False or 0, disable parallelism (default: False). - :type parallel: bool or int, optional - - - .. py:method:: store_optimised_parameters(x) - - Update the problem parameters with optimized values. - - The optimized parameter values are stored within the associated PyBOP parameter class. - - :param x: Optimized parameter values. - :type x: array-like - - - diff --git a/_sources/api/pybop/optimisers/base_optimiser/index.rst.txt b/_sources/api/pybop/optimisers/base_optimiser/index.rst.txt deleted file mode 100644 index d69b4b7b9..000000000 --- a/_sources/api/pybop/optimisers/base_optimiser/index.rst.txt +++ /dev/null @@ -1,86 +0,0 @@ -:py:mod:`pybop.optimisers.base_optimiser` -========================================= - -.. py:module:: pybop.optimisers.base_optimiser - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.optimisers.base_optimiser.BaseOptimiser - - - - -.. py:class:: BaseOptimiser - - - A base class for defining optimisation methods. - - This class serves as a template for creating optimisers. It provides a basic structure for - an optimisation algorithm, including the initial setup and a method stub for performing - the optimisation process. Child classes should override the optimise and _runoptimise - methods with specific algorithms. - - .. method:: optimise(cost_function, x0=None, bounds=None, maxiter=None) - - Initiates the optimisation process. This is a stub and should be implemented in child classes. - - .. method:: _runoptimise(cost_function, x0=None, bounds=None) - - Contains the logic for the optimisation algorithm. This is a stub and should be implemented in child classes. - - .. method:: name() - - Returns the name of the optimiser. - - - .. py:method:: _runoptimise(cost_function, x0=None, bounds=None) - - Contains the logic for the optimisation algorithm. - - This method should be implemented by child classes to perform the actual optimisation. - - :param cost_function: The cost function to be minimised by the optimiser. - :type cost_function: callable - :param x0: Initial guess for the parameters. Default is None. - :type x0: ndarray, optional - :param bounds: Bounds on the parameters. Default is None. - :type bounds: sequence or Bounds, optional - - :returns: * *This method is expected to return the result of the optimisation, the format of which* - * *will be determined by the child class implementation.* - - - .. py:method:: name() - - Returns the name of the optimiser. - - :returns: The name of the optimiser, which is "BaseOptimiser" for this base class. - :rtype: str - - - .. py:method:: optimise(cost_function, x0=None, bounds=None, maxiter=None) - - Initiates the optimisation process. - - This method should be overridden by child classes with the specific optimisation algorithm. - - :param cost_function: The cost function to be minimised by the optimiser. - :type cost_function: callable - :param x0: Initial guess for the parameters. Default is None. - :type x0: ndarray, optional - :param bounds: Bounds on the parameters. Default is None. - :type bounds: sequence or Bounds, optional - :param maxiter: Maximum number of iterations to perform. Default is None. - :type maxiter: int, optional - - :rtype: The result of the optimisation process. The specific type of this result will depend on the child implementation. - - - diff --git a/_sources/api/pybop/optimisers/index.rst.txt b/_sources/api/pybop/optimisers/index.rst.txt deleted file mode 100644 index 11519d8e7..000000000 --- a/_sources/api/pybop/optimisers/index.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -:py:mod:`pybop.optimisers` -========================== - -.. py:module:: pybop.optimisers - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - base_optimiser/index.rst - nlopt_optimize/index.rst - pints_optimisers/index.rst - scipy_optimisers/index.rst - - diff --git a/_sources/api/pybop/optimisers/nlopt_optimize/index.rst.txt b/_sources/api/pybop/optimisers/nlopt_optimize/index.rst.txt deleted file mode 100644 index 2faa2abc5..000000000 --- a/_sources/api/pybop/optimisers/nlopt_optimize/index.rst.txt +++ /dev/null @@ -1,84 +0,0 @@ -:py:mod:`pybop.optimisers.nlopt_optimize` -========================================= - -.. py:module:: pybop.optimisers.nlopt_optimize - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.optimisers.nlopt_optimize.NLoptOptimize - - - - -.. py:class:: NLoptOptimize(n_param, xtol=None, method=None, maxiter=None) - - - Bases: :py:obj:`pybop.optimisers.base_optimiser.BaseOptimiser` - - Extends BaseOptimiser to utilize the NLopt library for nonlinear optimization. - - This class serves as an interface to the NLopt optimization algorithms. It allows the user to - define an optimization problem with bounds, initial guesses, and to select an optimization method - provided by NLopt. - - :param n_param: Number of parameters to optimize. - :type n_param: int - :param xtol: The relative tolerance for optimization (stopping criteria). If not provided, a default of 1e-5 is used. - :type xtol: float, optional - :param method: The NLopt algorithm to use for optimization. If not provided, LN_BOBYQA is used by default. - :type method: nlopt.algorithm, optional - :param maxiter: The maximum number of iterations to perform during optimization. If not provided, NLopt's default is used. - :type maxiter: int, optional - - .. method:: _runoptimise(cost_function, x0, bounds) - - Performs the optimization using the NLopt library. - - .. method:: needs_sensitivities() - - Indicates whether the optimizer requires gradient information. - - .. method:: name() - - Returns the name of the optimizer. - - - .. py:method:: _runoptimise(cost_function, x0, bounds) - - Runs the optimization process using the NLopt library. - - :param cost_function: The objective function to minimize. It should take an array of parameter values and return the scalar cost. - :type cost_function: callable - :param x0: The initial guess for the parameters. - :type x0: array_like - :param bounds: A dictionary containing the 'lower' and 'upper' bounds arrays for the parameters. - :type bounds: dict - - :returns: A tuple containing the optimized parameter values and the final cost. - :rtype: tuple - - - .. py:method:: name() - - Returns the name of this optimizer instance. - - :returns: The name 'NLoptOptimize' representing this NLopt optimization class. - :rtype: str - - - .. py:method:: needs_sensitivities() - - Indicates if the optimizer requires gradient information for the cost function. - - :returns: False, as the default NLopt algorithms do not require gradient information. - :rtype: bool - - - diff --git a/_sources/api/pybop/optimisers/pints_optimisers/index.rst.txt b/_sources/api/pybop/optimisers/pints_optimisers/index.rst.txt deleted file mode 100644 index a38fea790..000000000 --- a/_sources/api/pybop/optimisers/pints_optimisers/index.rst.txt +++ /dev/null @@ -1,191 +0,0 @@ -:py:mod:`pybop.optimisers.pints_optimisers` -=========================================== - -.. py:module:: pybop.optimisers.pints_optimisers - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.optimisers.pints_optimisers.Adam - pybop.optimisers.pints_optimisers.CMAES - pybop.optimisers.pints_optimisers.GradientDescent - pybop.optimisers.pints_optimisers.IRPropMin - pybop.optimisers.pints_optimisers.PSO - pybop.optimisers.pints_optimisers.SNES - pybop.optimisers.pints_optimisers.XNES - - - - -.. py:class:: Adam(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.Adam` - - Implements the Adam optimization algorithm. - - This class extends the Adam optimizer from the PINTS library, which combines - ideas from RMSProp and Stochastic Gradient Descent with momentum. Note that - this optimizer does not support boundary constraints. - - :param x0: Initial position from which optimization will start. - :type x0: array_like - :param sigma0: Initial step size (default is 0.1). - :type sigma0: float, optional - :param bounds: Ignored by this optimizer, provided for API consistency. - :type bounds: sequence or ``Bounds``, optional - - .. seealso:: - - :obj:`pints.Adam` - The PINTS implementation this class is based on. - - -.. py:class:: CMAES(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.CMAES` - - Adapter for the Covariance Matrix Adaptation Evolution Strategy (CMA-ES) optimizer in PINTS. - - CMA-ES is an evolutionary algorithm for difficult non-linear non-convex optimization problems. - It adapts the covariance matrix of a multivariate normal distribution to capture the shape of the cost landscape. - - :param x0: The initial parameter vector to optimize. - :type x0: array_like - :param sigma0: Initial standard deviation of the sampling distribution, defaults to 0.1. - :type sigma0: float, optional - :param bounds: A dictionary with 'lower' and 'upper' keys containing arrays for lower and upper bounds on the parameters. - If ``None``, no bounds are enforced. - :type bounds: dict, optional - - .. seealso:: - - :obj:`pints.CMAES` - PINTS implementation of CMA-ES algorithm. - - -.. py:class:: GradientDescent(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.GradientDescent` - - Implements a simple gradient descent optimization algorithm. - - This class extends the gradient descent optimizer from the PINTS library, designed - to minimize a scalar function of one or more variables. Note that this optimizer - does not support boundary constraints. - - :param x0: Initial position from which optimization will start. - :type x0: array_like - :param sigma0: Initial step size (default is 0.1). - :type sigma0: float, optional - :param bounds: Ignored by this optimizer, provided for API consistency. - :type bounds: sequence or ``Bounds``, optional - - .. seealso:: - - :obj:`pints.GradientDescent` - The PINTS implementation this class is based on. - - -.. py:class:: IRPropMin(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.IRPropMin` - - Implements the iRpropMin optimization algorithm. - - This class inherits from the PINTS IRPropMin class, which is an optimizer that - uses resilient backpropagation with weight-backtracking. It is designed to handle - problems with large plateaus, noisy gradients, and local minima. - - :param x0: Initial position from which optimization will start. - :type x0: array_like - :param sigma0: Initial step size (default is 0.1). - :type sigma0: float, optional - :param bounds: Lower and upper bounds for each optimization parameter. - :type bounds: dict, optional - - .. seealso:: - - :obj:`pints.IRPropMin` - The PINTS implementation this class is based on. - - -.. py:class:: PSO(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.PSO` - - Implements a particle swarm optimization (PSO) algorithm. - - This class extends the PSO optimizer from the PINTS library. PSO is a - metaheuristic optimization method inspired by the social behavior of birds - flocking or fish schooling, suitable for global optimization problems. - - :param x0: Initial positions of particles, which the optimization will use. - :type x0: array_like - :param sigma0: Spread of the initial particle positions (default is 0.1). - :type sigma0: float, optional - :param bounds: Lower and upper bounds for each optimization parameter. - :type bounds: dict, optional - - .. seealso:: - - :obj:`pints.PSO` - The PINTS implementation this class is based on. - - -.. py:class:: SNES(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.SNES` - - Implements the stochastic natural evolution strategy (SNES) optimization algorithm. - - Inheriting from the PINTS SNES class, this optimizer is an evolutionary algorithm - that evolves a probability distribution on the parameter space, guiding the search - for the optimum based on the natural gradient of expected fitness. - - :param x0: Initial position from which optimization will start. - :type x0: array_like - :param sigma0: Initial step size (default is 0.1). - :type sigma0: float, optional - :param bounds: Lower and upper bounds for each optimization parameter. - :type bounds: dict, optional - - .. seealso:: - - :obj:`pints.SNES` - The PINTS implementation this class is based on. - - -.. py:class:: XNES(x0, sigma0=0.1, bounds=None) - - - Bases: :py:obj:`pints.XNES` - - Implements the Exponential Natural Evolution Strategy (XNES) optimizer from PINTS. - - XNES is an evolutionary algorithm that samples from a multivariate normal distribution, which is updated iteratively to fit the distribution of successful solutions. - - :param x0: The initial parameter vector to optimize. - :type x0: array_like - :param sigma0: Initial standard deviation of the sampling distribution, defaults to 0.1. - :type sigma0: float, optional - :param bounds: A dictionary with 'lower' and 'upper' keys containing arrays for lower and upper bounds on the parameters. If ``None``, no bounds are enforced. - :type bounds: dict, optional - - .. seealso:: - - :obj:`pints.XNES` - PINTS implementation of XNES algorithm. - - diff --git a/_sources/api/pybop/optimisers/scipy_optimisers/index.rst.txt b/_sources/api/pybop/optimisers/scipy_optimisers/index.rst.txt deleted file mode 100644 index 3c3506780..000000000 --- a/_sources/api/pybop/optimisers/scipy_optimisers/index.rst.txt +++ /dev/null @@ -1,118 +0,0 @@ -:py:mod:`pybop.optimisers.scipy_optimisers` -=========================================== - -.. py:module:: pybop.optimisers.scipy_optimisers - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.optimisers.scipy_optimisers.SciPyDifferentialEvolution - pybop.optimisers.scipy_optimisers.SciPyMinimize - - - - -.. py:class:: SciPyDifferentialEvolution(bounds=None, strategy='best1bin', maxiter=1000, popsize=15) - - - Bases: :py:obj:`pybop.optimisers.base_optimiser.BaseOptimiser` - - Adapts SciPy's differential_evolution function for global optimization. - - This class provides a global optimization strategy based on differential evolution, useful for problems involving continuous parameters and potentially multiple local minima. - - :param bounds: Bounds for variables. Must be provided as it is essential for differential evolution. - :type bounds: sequence or ``Bounds`` - :param strategy: The differential evolution strategy to use. Defaults to 'best1bin'. - :type strategy: str, optional - :param maxiter: Maximum number of iterations to perform. Defaults to 1000. - :type maxiter: int, optional - :param popsize: The number of individuals in the population. Defaults to 15. - :type popsize: int, optional - - .. py:method:: _runoptimise(cost_function, x0=None, bounds=None) - - Executes the optimization process using SciPy's differential_evolution function. - - :param cost_function: The objective function to minimize. - :type cost_function: callable - :param x0: Ignored parameter, provided for API consistency. - :type x0: array_like, optional - :param bounds: Bounds for the variables, required for differential evolution. - :type bounds: sequence or ``Bounds`` - - :returns: A tuple (x, final_cost) containing the optimized parameters and the value of ``cost_function`` at the optimum. - :rtype: tuple - - - .. py:method:: name() - - Provides the name of the optimization strategy. - - :returns: The name 'SciPyDifferentialEvolution'. - :rtype: str - - - .. py:method:: needs_sensitivities() - - Determines if the optimization algorithm requires gradient information. - - :returns: False, indicating that gradient information is not required for differential evolution. - :rtype: bool - - - -.. py:class:: SciPyMinimize(method=None, bounds=None, maxiter=None) - - - Bases: :py:obj:`pybop.optimisers.base_optimiser.BaseOptimiser` - - Adapts SciPy's minimize function for use as an optimization strategy. - - This class provides an interface to various scalar minimization algorithms implemented in SciPy, allowing fine-tuning of the optimization process through method selection and option configuration. - - :param method: The type of solver to use. If not specified, defaults to 'COBYLA'. - :type method: str, optional - :param bounds: Bounds for variables as supported by the selected method. - :type bounds: sequence or ``Bounds``, optional - :param maxiter: Maximum number of iterations to perform. - :type maxiter: int, optional - - .. py:method:: _runoptimise(cost_function, x0, bounds) - - Executes the optimization process using SciPy's minimize function. - - :param cost_function: The objective function to minimize. - :type cost_function: callable - :param x0: Initial guess for the parameters. - :type x0: array_like - :param bounds: Bounds for the variables. - :type bounds: sequence or `Bounds` - - :returns: A tuple (x, final_cost) containing the optimized parameters and the value of `cost_function` at the optimum. - :rtype: tuple - - - .. py:method:: name() - - Provides the name of the optimization strategy. - - :returns: The name 'SciPyMinimize'. - :rtype: str - - - .. py:method:: needs_sensitivities() - - Determines if the optimization algorithm requires gradient information. - - :returns: False, indicating that gradient information is not required. - :rtype: bool - - - diff --git a/_sources/api/pybop/parameters/index.rst.txt b/_sources/api/pybop/parameters/index.rst.txt deleted file mode 100644 index 926eaea60..000000000 --- a/_sources/api/pybop/parameters/index.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -:py:mod:`pybop.parameters` -========================== - -.. py:module:: pybop.parameters - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - parameter/index.rst - parameter_set/index.rst - priors/index.rst - - diff --git a/_sources/api/pybop/parameters/parameter/index.rst.txt b/_sources/api/pybop/parameters/parameter/index.rst.txt deleted file mode 100644 index 29eead0bd..000000000 --- a/_sources/api/pybop/parameters/parameter/index.rst.txt +++ /dev/null @@ -1,98 +0,0 @@ -:py:mod:`pybop.parameters.parameter` -==================================== - -.. py:module:: pybop.parameters.parameter - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.parameters.parameter.Parameter - - - - -.. py:class:: Parameter(name, initial_value=None, prior=None, bounds=None) - - - Represents a parameter within the PyBOP framework. - - This class encapsulates the definition of a parameter, including its name, prior - distribution, initial value, bounds, and a margin to ensure the parameter stays - within feasible limits during optimization or sampling. - - :param name: The name of the parameter. - :type name: str - :param initial_value: The initial value to be assigned to the parameter. Defaults to None. - :type initial_value: float, optional - :param prior: The prior distribution from which parameter values are drawn. Defaults to None. - :type prior: scipy.stats distribution, optional - :param bounds: A tuple defining the lower and upper bounds for the parameter. - Defaults to None. - :type bounds: tuple, optional - - .. method:: rvs(n_samples) - - Draw random samples from the parameter's prior distribution. - - .. method:: update(value) - - Update the parameter's current value. - - .. method:: set_margin(margin) - - Set the margin to a specified positive value less than 1. - - - :raises ValueError: If the lower bound is not strictly less than the upper bound, or if - the margin is set outside the interval (0, 1). - - .. py:method:: __repr__() - - Return a string representation of the Parameter instance. - - :returns: A string including the parameter's name, prior, bounds, and current value. - :rtype: str - - - .. py:method:: rvs(n_samples) - - Draw random samples from the parameter's prior distribution. - - The samples are constrained to be within the parameter's bounds, excluding - a predefined margin at the boundaries. - - :param n_samples: The number of samples to draw. - :type n_samples: int - - :returns: An array of samples drawn from the prior distribution within the parameter's bounds. - :rtype: array-like - - - .. py:method:: set_margin(margin) - - Set the margin to a specified positive value less than 1. - - The margin is used to ensure parameter samples are not drawn exactly at the bounds, - which may be problematic in some optimization or sampling algorithms. - - :param margin: The new margin value to be used, which must be in the interval (0, 1). - :type margin: float - - :raises ValueError: If the margin is not between 0 and 1. - - - .. py:method:: update(value) - - Update the parameter's current value. - - :param value: The new value to be assigned to the parameter. - :type value: float - - - diff --git a/_sources/api/pybop/parameters/parameter_set/index.rst.txt b/_sources/api/pybop/parameters/parameter_set/index.rst.txt deleted file mode 100644 index d24c6070f..000000000 --- a/_sources/api/pybop/parameters/parameter_set/index.rst.txt +++ /dev/null @@ -1,98 +0,0 @@ -:py:mod:`pybop.parameters.parameter_set` -======================================== - -.. py:module:: pybop.parameters.parameter_set - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.parameters.parameter_set.ParameterSet - - - - -.. py:class:: ParameterSet(json_path=None, params_dict=None) - - - Handles the import and export of parameter sets for battery models. - - This class provides methods to load parameters from a JSON file and to export them - back to a JSON file. It also includes custom logic to handle special cases, such - as parameter values that require specific initialization. - - :param json_path: Path to a JSON file containing parameter data. If provided, parameters will be imported from this file during initialization. - :type json_path: str, optional - :param params_dict: A dictionary of parameters to initialize the ParameterSet with. If not provided, an empty dictionary is used. - :type params_dict: dict, optional - - .. py:method:: _handle_special_cases() - - Processes special cases for parameter values that require custom handling. - - For example, if the open-circuit voltage is specified as 'default', it will - fetch the default value from the PyBaMM empirical Thevenin model. - - - .. py:method:: export_parameters(output_json_path, fit_params=None) - - Exports parameters to a JSON file specified by `output_json_path`. - - The current state of the `params` attribute is written to the file. If `fit_params` - is provided, these parameters are updated before export. Non-serializable values - are handled and noted in the output JSON. - - :param output_json_path: The file path where the JSON output will be saved. - :type output_json_path: str - :param fit_params: Parameters that have been fitted and need to be included in the export. - :type fit_params: list of fitted parameter objects, optional - - :raises ValueError: If there are no parameters to export. - - - .. py:method:: import_parameters(json_path=None) - - Imports parameters from a JSON file specified by the `json_path` attribute. - - If a `json_path` is provided at initialization or as an argument, that JSON file - is loaded and the parameters are stored in the `params` attribute. Special cases - are handled appropriately. - - :param json_path: Path to the JSON file from which to import parameters. If provided, it overrides the instance's `json_path`. - :type json_path: str, optional - - :returns: The dictionary containing the imported parameters. - :rtype: dict - - :raises FileNotFoundError: If the specified JSON file cannot be found. - - - .. py:method:: is_json_serializable(value) - - Determines if the given `value` can be serialized to JSON format. - - :param value: The value to check for JSON serializability. - :type value: any - - :returns: True if the value is JSON serializable, False otherwise. - :rtype: bool - - - .. py:method:: pybamm(name) - :classmethod: - - Retrieves a PyBaMM parameter set by name. - - :param name: The name of the PyBaMM parameter set to retrieve. - :type name: str - - :returns: A PyBaMM parameter set corresponding to the provided name. - :rtype: pybamm.ParameterValues - - - diff --git a/_sources/api/pybop/parameters/priors/index.rst.txt b/_sources/api/pybop/parameters/priors/index.rst.txt deleted file mode 100644 index ed5503b30..000000000 --- a/_sources/api/pybop/parameters/priors/index.rst.txt +++ /dev/null @@ -1,181 +0,0 @@ -:py:mod:`pybop.parameters.priors` -================================= - -.. py:module:: pybop.parameters.priors - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.parameters.priors.Exponential - pybop.parameters.priors.Gaussian - pybop.parameters.priors.Uniform - - - - -.. py:class:: Exponential(scale) - - - Represents an exponential distribution with a specified scale parameter. - - This class provides methods to calculate the pdf, the log pdf, and to generate random - variates from the distribution. - - :param scale: The scale parameter (lambda) of the exponential distribution. - :type scale: float - - .. py:method:: __repr__() - - Returns a string representation of the Uniform object. - - - .. py:method:: logpdf(x) - - Calculates the logarithm of the pdf of the exponential distribution at x. - - :param x: The point at which to evaluate the log pdf. - :type x: float - - :returns: The log of the probability density function value at x. - :rtype: float - - - .. py:method:: pdf(x) - - Calculates the probability density function of the exponential distribution at x. - - :param x: The point at which to evaluate the pdf. - :type x: float - - :returns: The probability density function value at x. - :rtype: float - - - .. py:method:: rvs(size) - - Generates random variates from the exponential distribution. - - :param size: The number of random variates to generate. - :type size: int - - :returns: An array of random variates from the exponential distribution. - :rtype: array_like - - :raises ValueError: If the size parameter is not positive. - - - -.. py:class:: Gaussian(mean, sigma) - - - Represents a Gaussian (normal) distribution with a given mean and standard deviation. - - This class provides methods to calculate the probability density function (pdf), - the logarithm of the pdf, and to generate random variates (rvs) from the distribution. - - :param mean: The mean (mu) of the Gaussian distribution. - :type mean: float - :param sigma: The standard deviation (sigma) of the Gaussian distribution. - :type sigma: float - - .. py:method:: __repr__() - - Returns a string representation of the Gaussian object. - - - .. py:method:: logpdf(x) - - Calculates the logarithm of the probability density function of the Gaussian distribution at x. - - :param x: The point at which to evaluate the log pdf. - :type x: float - - :returns: The logarithm of the probability density function value at x. - :rtype: float - - - .. py:method:: pdf(x) - - Calculates the probability density function of the Gaussian distribution at x. - - :param x: The point at which to evaluate the pdf. - :type x: float - - :returns: The probability density function value at x. - :rtype: float - - - .. py:method:: rvs(size) - - Generates random variates from the Gaussian distribution. - - :param size: The number of random variates to generate. - :type size: int - - :returns: An array of random variates from the Gaussian distribution. - :rtype: array_like - - :raises ValueError: If the size parameter is not positive. - - - -.. py:class:: Uniform(lower, upper) - - - Represents a uniform distribution over a specified interval. - - This class provides methods to calculate the pdf, the log pdf, and to generate - random variates from the distribution. - - :param lower: The lower bound of the distribution. - :type lower: float - :param upper: The upper bound of the distribution. - :type upper: float - - .. py:method:: __repr__() - - Returns a string representation of the Uniform object. - - - .. py:method:: logpdf(x) - - Calculates the logarithm of the pdf of the uniform distribution at x. - - :param x: The point at which to evaluate the log pdf. - :type x: float - - :returns: The log of the probability density function value at x. - :rtype: float - - - .. py:method:: pdf(x) - - Calculates the probability density function of the uniform distribution at x. - - :param x: The point at which to evaluate the pdf. - :type x: float - - :returns: The probability density function value at x. - :rtype: float - - - .. py:method:: rvs(size) - - Generates random variates from the uniform distribution. - - :param size: The number of random variates to generate. - :type size: int - - :returns: An array of random variates from the uniform distribution. - :rtype: array_like - - :raises ValueError: If the size parameter is not positive. - - - diff --git a/_sources/api/pybop/plotting/index.rst.txt b/_sources/api/pybop/plotting/index.rst.txt deleted file mode 100644 index 362e48e40..000000000 --- a/_sources/api/pybop/plotting/index.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -:py:mod:`pybop.plotting` -======================== - -.. py:module:: pybop.plotting - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - plot_convergence/index.rst - plot_cost2d/index.rst - plot_parameters/index.rst - plotly_manager/index.rst - quick_plot/index.rst - - diff --git a/_sources/api/pybop/plotting/plot_convergence/index.rst.txt b/_sources/api/pybop/plotting/plot_convergence/index.rst.txt deleted file mode 100644 index 0ee1d10fb..000000000 --- a/_sources/api/pybop/plotting/plot_convergence/index.rst.txt +++ /dev/null @@ -1,40 +0,0 @@ -:py:mod:`pybop.plotting.plot_convergence` -========================================= - -.. py:module:: pybop.plotting.plot_convergence - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - pybop.plotting.plot_convergence.plot_convergence - - - -.. py:function:: plot_convergence(optim, xaxis_title='Iteration', yaxis_title='Cost', title='Convergence') - - Plot the convergence of the optimisation algorithm. - - Parameters: - ---------- - optim : optimisation object - Optimisation object containing the cost function and optimiser. - xaxis_title : str, optional - Title for the x-axis (default is "Iteration"). - yaxis_title : str, optional - Title for the y-axis (default is "Cost"). - title : str, optional - Title of the plot (default is "Convergence"). - - Returns: - ---------- - fig : plotly.graph_objs.Figure - The Plotly figure object for the convergence plot. - - diff --git a/_sources/api/pybop/plotting/plot_cost2d/index.rst.txt b/_sources/api/pybop/plotting/plot_cost2d/index.rst.txt deleted file mode 100644 index aec28587d..000000000 --- a/_sources/api/pybop/plotting/plot_cost2d/index.rst.txt +++ /dev/null @@ -1,75 +0,0 @@ -:py:mod:`pybop.plotting.plot_cost2d` -==================================== - -.. py:module:: pybop.plotting.plot_cost2d - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - pybop.plotting.plot_cost2d.create_figure - pybop.plotting.plot_cost2d.get_param_bounds - pybop.plotting.plot_cost2d.plot_cost2d - - - -.. py:function:: create_figure(x, y, z, bounds, params, optim) - - Create a Plotly figure with a 2D contour plot of the cost landscape. - - :param x: 1D array of x-coordinates for the meshgrid. - :type x: numpy.ndarray - :param y: 1D array of y-coordinates for the meshgrid. - :type y: numpy.ndarray - :param z: 2D array of cost function values corresponding to the meshgrid. - :type z: numpy.ndarray - :param bounds: A 2x2 array specifying the [min, max] bounds for each parameter. - :type bounds: numpy.ndarray - :param params: An iterable of parameter objects with 'name' attributes for axis labeling. - :type params: iterable - :param optim: An optimizer instance with 'log' and 'x0' attributes for plotting traces. - :type optim: object - - :returns: The Plotly figure object with the contour plot and optimization traces. - :rtype: plotly.graph_objs.Figure - - -.. py:function:: get_param_bounds(cost) - - Retrieve parameter bounds from a cost function's associated problem parameters. - - :param cost: The cost function with an associated 'problem' attribute containing 'parameters'. - :type cost: callable - - :returns: An array of shape (n_parameters, 2) containing the bounds for each parameter. - :rtype: numpy.ndarray - - -.. py:function:: plot_cost2d(cost, bounds=None, optim=None, steps=10) - - Plot a 2D visualization of a cost landscape using Plotly. - - This function generates a contour plot representing the cost landscape for a provided - callable cost function over a grid of parameter values within the specified bounds. - - :param cost: The cost function to be evaluated. Must accept a list of parameters and return a cost value. - :type cost: callable - :param bounds: A 2x2 array specifying the [min, max] bounds for each parameter. If None, uses `get_param_bounds`. - :type bounds: numpy.ndarray, optional - :param optim: An optimizer instance which, if provided, overlays its specific trace on the plot. - :type optim: object, optional - :param steps: The number of intervals to divide the parameter space into along each dimension (default is 10). - :type steps: int, optional - - :returns: The Plotly figure object containing the cost landscape plot. - :rtype: plotly.graph_objs.Figure - - :raises ValueError: If the cost function does not return a valid cost when called with a parameter list. - - diff --git a/_sources/api/pybop/plotting/plot_parameters/index.rst.txt b/_sources/api/pybop/plotting/plot_parameters/index.rst.txt deleted file mode 100644 index 2e377a04a..000000000 --- a/_sources/api/pybop/plotting/plot_parameters/index.rst.txt +++ /dev/null @@ -1,72 +0,0 @@ -:py:mod:`pybop.plotting.plot_parameters` -======================================== - -.. py:module:: pybop.plotting.plot_parameters - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - pybop.plotting.plot_parameters.create_subplots_with_traces - pybop.plotting.plot_parameters.create_traces - pybop.plotting.plot_parameters.plot_parameters - - - -.. py:function:: create_subplots_with_traces(traces, plot_size=(1024, 576), title='Parameter Convergence', axis_titles=None, **layout_kwargs) - - Create a subplot with individual traces for each parameter. - - :param traces: Traces to be plotted, one trace per subplot. - :type traces: list of plotly.graph_objs.Scatter - :param plot_size: The size of the plot as (width, height), defaulting to (1024, 576). - :type plot_size: tuple of int, optional - :param title: The title of the plot, defaulting to "Parameter Convergence". - :type title: str, optional - :param axis_titles: A list of (x_title, y_title) pairs for each subplot. If None, titles are omitted. - :type axis_titles: list of tuple of str, optional - :param \*\*layout_kwargs: Additional keyword arguments to customize the layout. - :type \*\*layout_kwargs: dict - - :returns: A Plotly figure object with subplots for each trace. - :rtype: plotly.graph_objs.Figure - - -.. py:function:: create_traces(params, trace_data, x_values=None) - - Create traces for plotting parameter evolution. - - :param params: List of parameter objects, each having a 'name' attribute used for labeling the trace. - :type params: list - :param trace_data: A list of arrays representing the historical values of each parameter. - :type trace_data: list of numpy.ndarray - :param x_values: The x-axis values for plotting. If None, defaults to sequential integers. - :type x_values: list or numpy.ndarray, optional - - :returns: A list of Scatter trace objects, one for each parameter. - :rtype: list of plotly.graph_objs.Scatter - - -.. py:function:: plot_parameters(optim, xaxis_titles='Iteration', yaxis_titles=None, title='Convergence') - - Plot the evolution of parameters during the optimization process using Plotly. - - :param optim: The optimization object containing the history of parameter values and associated cost. - :type optim: object - :param xaxis_titles: Title for the x-axis, defaulting to "Iteration". - :type xaxis_titles: str, optional - :param yaxis_titles: Titles for the y-axes, one for each parameter. If None, parameter names are used. - :type yaxis_titles: list of str, optional - :param title: Title of the plot, defaulting to "Convergence". - :type title: str, optional - - :returns: A Plotly figure object showing the parameter evolution over iterations. - :rtype: plotly.graph_objs.Figure - - diff --git a/_sources/api/pybop/plotting/plotly_manager/index.rst.txt b/_sources/api/pybop/plotting/plotly_manager/index.rst.txt deleted file mode 100644 index 839180342..000000000 --- a/_sources/api/pybop/plotting/plotly_manager/index.rst.txt +++ /dev/null @@ -1,108 +0,0 @@ -:py:mod:`pybop.plotting.plotly_manager` -======================================= - -.. py:module:: pybop.plotting.plotly_manager - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.plotting.plotly_manager.PlotlyManager - - - - -.. py:class:: PlotlyManager - - - Manages the installation and configuration of Plotly for generating visualizations. - - This class ensures that Plotly is installed and properly configured to display - plots in a web browser. - - Upon instantiation, it checks for Plotly's presence, installs it if missing, - and configures the default renderer and browser settings. - - .. attribute:: go - - The Plotly graph_objects module for creating figures. - - :type: module - - .. attribute:: pio - - The Plotly input/output module for configuring the renderer. - - :type: module - - .. attribute:: make_subplots - - The function from Plotly for creating subplot figures. - - :type: function - - .. method:: ensure_plotly_installed() - - Verifies if Plotly is installed, importing necessary modules and prompting for installation if missing. - - .. method:: prompt_for_plotly_installation() - - Prompts the user for permission to install Plotly and proceeds with installation if consented. - - .. method:: install_plotly() - - Installs the Plotly package using pip. - - .. method:: post_install_setup() - - Sets up Plotly default renderer after installation. - - .. method:: check_renderer_settings() - - Verifies that the Plotly renderer is correctly set. - - .. method:: check_browser_availability() - - Checks if a web browser is available for rendering plots. - - - .. rubric:: Examples - - >>> plotly_manager = PlotlyManager() - - .. py:method:: check_browser_availability() - - Confirm a web browser is available for Plotly's 'browser' renderer; provide guidance if not. - - - .. py:method:: check_renderer_settings() - - Check and provide information on setting the Plotly renderer if it's not already set. - - - .. py:method:: ensure_plotly_installed() - - Check if Plotly is installed and import necessary modules; prompt for installation if missing. - - - .. py:method:: install_plotly() - - Install the Plotly package using pip. Exit if installation fails. - - - .. py:method:: post_install_setup() - - Import Plotly modules and set the default renderer after installation. - - - .. py:method:: prompt_for_plotly_installation() - - Prompt the user for Plotly installation and install it upon agreement. - - - diff --git a/_sources/api/pybop/plotting/quick_plot/index.rst.txt b/_sources/api/pybop/plotting/quick_plot/index.rst.txt deleted file mode 100644 index b34038623..000000000 --- a/_sources/api/pybop/plotting/quick_plot/index.rst.txt +++ /dev/null @@ -1,113 +0,0 @@ -:py:mod:`pybop.plotting.quick_plot` -=================================== - -.. py:module:: pybop.plotting.quick_plot - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - pybop.plotting.quick_plot.StandardPlot - - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - pybop.plotting.quick_plot.quick_plot - - - -.. py:class:: StandardPlot(x, y, cost, y2=None, title=None, xaxis_title=None, yaxis_title=None, trace_name=None, width=1024, height=576) - - - A class for creating and displaying Plotly figures for model output comparison. - - Generates interactive plots comparing simulated model output with an optional target dataset and visualizes uncertainty. - - :param x: X-axis data points. - :type x: list or np.ndarray - :param y: Primary Y-axis data points for simulated model output. - :type y: list or np.ndarray - :param cost: Cost associated with the model output. - :type cost: float - :param y2: Secondary Y-axis data points for the target dataset (default: None). - :type y2: list or np.ndarray, optional - :param title: Title of the plot (default: None). - :type title: str, optional - :param xaxis_title: Title for the x-axis (default: None). - :type xaxis_title: str, optional - :param yaxis_title: Title for the y-axis (default: None). - :type yaxis_title: str, optional - :param trace_name: Name for the primary trace (default: "Simulated"). - :type trace_name: str, optional - :param width: Width of the figure in pixels (default: 1024). - :type width: int, optional - :param height: Height of the figure in pixels (default: 576). - :type height: int, optional - - .. py:method:: __call__() - - Generate the Plotly figure. - - :returns: The generated Plotly figure. - :rtype: plotly.graph_objs.Figure - - - .. py:method:: create_layout() - - Create the layout for the Plotly figure. - - :returns: The layout for the Plotly figure. - :rtype: plotly.graph_objs.Layout - - - .. py:method:: create_traces() - - Create traces for the Plotly figure. - - :returns: A list of plotly.graph_objs.Scatter objects to be used as traces. - :rtype: list - - - .. py:method:: wrap_text(text, width) - :staticmethod: - - Wrap text to a specified width with HTML line breaks. - - :param text: The text to wrap. - :type text: str - :param width: The width to wrap the text to. - :type width: int - - :returns: The wrapped text. - :rtype: str - - - -.. py:function:: quick_plot(params, cost, title='Scatter Plot', width=1024, height=576) - - Quickly plot the target dataset against minimized model output. - - :param params: Optimized parameters. - :type params: array-like - :param cost: Cost object with problem, dataset, and signal attributes. - :type cost: object - :param title: Title of the plot (default: "Scatter Plot"). - :type title: str, optional - :param width: Width of the figure in pixels (default: 1024). - :type width: int, optional - :param height: Height of the figure in pixels (default: 576). - :type height: int, optional - - :returns: The Plotly figure object for the scatter plot. - :rtype: plotly.graph_objs.Figure - - diff --git a/_sources/api/pybop/version/index.rst.txt b/_sources/api/pybop/version/index.rst.txt deleted file mode 100644 index 3eb8d0df9..000000000 --- a/_sources/api/pybop/version/index.rst.txt +++ /dev/null @@ -1,14 +0,0 @@ -:py:mod:`pybop.version` -======================= - -.. py:module:: pybop.version - - -Module Contents ---------------- - -.. py:data:: __version__ - :value: '23.11' - - - diff --git a/_sources/contributing.md.txt b/_sources/contributing.md.txt deleted file mode 100644 index 78caf34e3..000000000 --- a/_sources/contributing.md.txt +++ /dev/null @@ -1,2 +0,0 @@ -```{include} ../CONTRIBUTING.md -``` diff --git a/_sources/index.md.txt b/_sources/index.md.txt deleted file mode 100644 index 622dd79df..000000000 --- a/_sources/index.md.txt +++ /dev/null @@ -1,38 +0,0 @@ ---- -myst: - html_meta: - "description lang=en": | - High-level documentation for PyBOP, and corresponding links to the site. -html_theme.sidebar_secondary.remove: true ---- - -# PyBOP: Optimise and Parameterise Battery Models - -Welcome to PyBOP, a Python package dedicated to the optimization and parameterization of battery models. PyBOP is designed to streamline your workflow, whether you are conducting academic research, working in industry, or simply interested in battery technology and modelling. - -**Version: v23.11** - -```{gallery-grid} -:grid-columns: 1 2 2 2 - -- header: "{fab}`bootstrap;pst-color-primary` API Documentation" - content: "Get detailed information on functions, classes, and modules that allow you to fully leverage the power of PyBOP in your own projects." - link: "api/index.html" -- header: "{fas}`bolt;pst-color-primary` Installation" - content: "Setting up PyBOP is straightforward. Follow our step-by-step guide to install PyBOP on your system." - link: "user_guide/installation.html" -- header: "{fas}`circle-half-stroke;pst-color-primary` Usage" - content: "Discover how to use PyBOP effectively with our usage examples. From basic tasks to advanced features, learn how to solve real-world problems with PyBOP." - link: "user_guide/index.html" -- header: "{fab}`python;pst-color-primary` Contributing" - content: "Contribute to the PyBOP project and become a part of our growing community." - link: "contributing.html" -``` - -```{toctree} -:maxdepth: 2 -:hidden: - -user_guide/index -contributing -``` diff --git a/_sources/user_guide/index.md.txt b/_sources/user_guide/index.md.txt deleted file mode 100644 index 0a5496f40..000000000 --- a/_sources/user_guide/index.md.txt +++ /dev/null @@ -1,22 +0,0 @@ ---- -myst: - html_meta: - "description lang=en": | - Documentation for PyBOP users. ---- - -# User Guide - -```{toctree} -:caption: Installation - -installation - -``` - -```{toctree} -:caption: Usage - -usage - -``` diff --git a/_sources/user_guide/installation.rst.txt b/_sources/user_guide/installation.rst.txt deleted file mode 100644 index 1204d7251..000000000 --- a/_sources/user_guide/installation.rst.txt +++ /dev/null @@ -1,66 +0,0 @@ -Installation Guide for PyBOP -***************************** - -PyBOP is a versatile Python package designed for optimization and parameterization of battery models. Follow the instructions below to install PyBOP and set up your environment to begin utilizing its capabilities. - -Installing PyBOP with pip -------------------------- - -The simplest method to install PyBOP is using pip. Run the following command in your terminal: - -.. code-block:: console - - $ pip install pybop - -This command will download and install the latest stable version of PyBOP. If you want to install a specific version, you can specify the version number using the following command: - -.. code-block:: console - - $ pip install pybop==23.11 - -Installing the Development Version ----------------------------------- - -If you're interested in the cutting-edge features and want to try out the latest enhancements, you can install the development version directly from the ``develop`` branch on GitHub: - -.. code-block:: console - - $ pip install git+https://github.com/pybop-team/PyBOP.git@develop - -Please note that the development version may be less stable than the official releases. - -Local Installation from Source ------------------------------- - -For those who prefer to install PyBOP from a local clone of the repository or wish to modify the source code, you can use pip to install the package in "editable" mode. Replace "path/to/pybop" with the actual path to your local PyBOP directory: - -.. code-block:: console - - $ pip install -e "path/to/pybop" - -In editable mode, changes you make to the source code will immediately affect the PyBOP installation without the need for reinstallation. - -Verifying Installation ----------------------- - -To verify that PyBOP has been installed successfully, try running one of the provided example scripts included in the documentation or repository. If the example executes without any errors, PyBOP is ready to use. - -For Developers --------------- - -If you are installing PyBOP for development purposes, such as contributing to the project, please ensure that you follow the guidelines outlined in the contributing guide. It includes additional steps that might be necessary for setting up a development environment, including the installation of dependencies and setup of pre-commit hooks. - -`Contributing Guide <../contributing.html>`_ - -Further Assistance ------------------- - -If you encounter any issues during the installation process or have any questions regarding the use of PyBOP, feel free to reach out to the community via the `PyBOP GitHub Discussions `_. - -Next Steps ----------- - -After installing PyBOP, you might want to: - -* Explore the `Quick Start Guide `_ to begin using PyBOP. -* Check out the `API Reference <../api/index.html>`_ for detailed information on PyBOP's programming interface. diff --git a/_sources/user_guide/usage.rst.txt b/_sources/user_guide/usage.rst.txt deleted file mode 100644 index 4e2b2418e..000000000 --- a/_sources/user_guide/usage.rst.txt +++ /dev/null @@ -1,61 +0,0 @@ -Quick Start Guide for PyBOP -**************************** - -Welcome to the Quick Start Guide for PyBOP. This guide will help you get up and running with PyBOP. If you're new to PyBOP, we recommend you start here to learn the basics and get a feel for the package. - -Getting Started with PyBOP --------------------------- - -PyBOP is equipped with a series of robust tools that can help you optimize various parameters within your battery models to better match empirical data or to explore the effects of different parameters on battery behavior. - -To begin using PyBOP: - -1. Install the package using pip: - - .. code-block:: console - - $ pip install pybop - - For detailed installation instructions, including how to install specific versions or from source, see the :ref:`installation` section. - -2. Once PyBOP is installed, you can import it in your Python scripts or Jupyter notebooks: - - .. code-block:: python - - import pybop - - Now you're ready to utilize PyBOP's functionality in your projects! - -Exploring Examples ------------------- - -To help you get acquainted with PyBOP's capabilities, we provide a collection of examples that demonstrate common use cases and features of the package: - -- **Jupyter Notebooks**: Interactive notebooks that include detailed explanations alongside the live code, visualizations, and results. These are an excellent resource for learning and can be easily modified and executed to suit your needs. - -- **Python Scripts**: For those who prefer working in a text editor, IDE, or for integrating into larger projects, we provide equivalent examples in plain Python script format. - -You can find these resources in the ``examples`` folder of the PyBOP repository. To access the examples, navigate to the following path after cloning or downloading the repository: - -.. code-block:: console - - path/to/pybop/examples - -These examples are also available on our `GitHub repository `_. - -Next Steps ----------- - -Once you're comfortable with the basics demonstrated in the examples, you can dive deeper into the functionality of PyBOP by: - -- Exploring the :ref:`user-guide` for a comprehensive overview of features. -- Delving into the :ref:`api-reference` for detailed API documentation. -- Checking out the :ref:`advanced-topics` for in-depth discussions on specific PyBOP features and how to customize them for complex scenarios. - -Support and Contributions -------------------------- - -If you encounter any issues or have questions as you start using PyBOP, don't hesitate to reach out to our community: - -- **Support**: Visit our :ref:`support` page for FAQs and contact information. -- **Contributions**: Interested in contributing to PyBOP? Check out our :ref:`contributing-guide` for guidelines on how to contribute. diff --git a/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css deleted file mode 100644 index eb19f698a..000000000 --- a/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css +++ /dev/null @@ -1 +0,0 @@ -.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/_sphinx_design_static/design-tabs.js b/_sphinx_design_static/design-tabs.js deleted file mode 100644 index 36b38cf0d..000000000 --- a/_sphinx_design_static/design-tabs.js +++ /dev/null @@ -1,27 +0,0 @@ -var sd_labels_by_text = {}; - -function ready() { - const li = document.getElementsByClassName("sd-tab-label"); - for (const label of li) { - syncId = label.getAttribute("data-sync-id"); - if (syncId) { - label.onclick = onLabelClick; - if (!sd_labels_by_text[syncId]) { - sd_labels_by_text[syncId] = []; - } - sd_labels_by_text[syncId].push(label); - } - } -} - -function onLabelClick() { - // Activate other inputs with the same sync id. - syncId = this.getAttribute("data-sync-id"); - for (label of sd_labels_by_text[syncId]) { - if (label === this) continue; - label.previousElementSibling.checked = true; - } - window.localStorage.setItem("sphinx-design-last-tab", syncId); -} - -document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/basic.css b/_static/basic.css deleted file mode 100644 index e760386bd..000000000 --- a/_static/basic.css +++ /dev/null @@ -1,925 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 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/_static/check-solid.svg b/_static/check-solid.svg deleted file mode 100644 index 92fad4b5c..000000000 --- a/_static/check-solid.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js deleted file mode 100644 index 54b3c4638..000000000 --- a/_static/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.8 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 - - - - diff --git a/_static/copybutton.css b/_static/copybutton.css deleted file mode 100644 index f1916ec7d..000000000 --- a/_static/copybutton.css +++ /dev/null @@ -1,94 +0,0 @@ -/* Copy buttons */ -button.copybtn { - position: absolute; - display: flex; - top: .3em; - right: .3em; - width: 1.7em; - height: 1.7em; - opacity: 0; - transition: opacity 0.3s, border .3s, background-color .3s; - user-select: none; - padding: 0; - border: none; - outline: none; - border-radius: 0.4em; - /* The colors that GitHub uses */ - border: #1b1f2426 1px solid; - background-color: #f6f8fa; - color: #57606a; -} - -button.copybtn.success { - border-color: #22863a; - color: #22863a; -} - -button.copybtn svg { - stroke: currentColor; - width: 1.5em; - height: 1.5em; - padding: 0.1em; -} - -div.highlight { - position: relative; -} - -/* Show the copybutton */ -.highlight:hover button.copybtn, button.copybtn.success { - opacity: 1; -} - -.highlight button.copybtn:hover { - background-color: rgb(235, 235, 235); -} - -.highlight button.copybtn:active { - background-color: rgb(187, 187, 187); -} - -/** - * A minimal CSS-only tooltip copied from: - * https://codepen.io/mildrenben/pen/rVBrpK - * - * To use, write HTML like the following: - * - *

Short

- */ - .o-tooltip--left { - position: relative; - } - - .o-tooltip--left:after { - opacity: 0; - visibility: hidden; - position: absolute; - content: attr(data-tooltip); - padding: .2em; - font-size: .8em; - left: -.2em; - background: grey; - color: white; - white-space: nowrap; - z-index: 2; - border-radius: 2px; - transform: translateX(-102%) translateY(0); - transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); -} - -.o-tooltip--left:hover:after { - display: block; - opacity: 1; - visibility: visible; - transform: translateX(-100%) translateY(0); - transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); - transition-delay: .5s; -} - -/* By default the copy button shouldn't show up when printing a page */ -@media print { - button.copybtn { - display: none; - } -} diff --git a/_static/copybutton.js b/_static/copybutton.js deleted file mode 100644 index 2ea7ff3e2..000000000 --- a/_static/copybutton.js +++ /dev/null @@ -1,248 +0,0 @@ -// Localization support -const messages = { - 'en': { - 'copy': 'Copy', - 'copy_to_clipboard': 'Copy to clipboard', - 'copy_success': 'Copied!', - 'copy_failure': 'Failed to copy', - }, - 'es' : { - 'copy': 'Copiar', - 'copy_to_clipboard': 'Copiar al portapapeles', - 'copy_success': '¡Copiado!', - 'copy_failure': 'Error al copiar', - }, - 'de' : { - 'copy': 'Kopieren', - 'copy_to_clipboard': 'In die Zwischenablage kopieren', - 'copy_success': 'Kopiert!', - 'copy_failure': 'Fehler beim Kopieren', - }, - 'fr' : { - 'copy': 'Copier', - 'copy_to_clipboard': 'Copier dans le presse-papier', - 'copy_success': 'Copié !', - 'copy_failure': 'Échec de la copie', - }, - 'ru': { - 'copy': 'Скопировать', - 'copy_to_clipboard': 'Скопировать в буфер', - 'copy_success': 'Скопировано!', - 'copy_failure': 'Не удалось скопировать', - }, - 'zh-CN': { - 'copy': '复制', - 'copy_to_clipboard': '复制到剪贴板', - 'copy_success': '复制成功!', - 'copy_failure': '复制失败', - }, - 'it' : { - 'copy': 'Copiare', - 'copy_to_clipboard': 'Copiato negli appunti', - 'copy_success': 'Copiato!', - 'copy_failure': 'Errore durante la copia', - } -} - -let locale = 'en' -if( document.documentElement.lang !== undefined - && messages[document.documentElement.lang] !== undefined ) { - locale = document.documentElement.lang -} - -let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; -if (doc_url_root == '#') { - doc_url_root = ''; -} - -/** - * SVG files for our copy buttons - */ -let iconCheck = ` - ${messages[locale]['copy_success']} - - -` - -// If the user specified their own SVG use that, otherwise use the default -let iconCopy = ``; -if (!iconCopy) { - iconCopy = ` - ${messages[locale]['copy_to_clipboard']} - - - -` -} - -/** - * Set up copy/paste for code blocks - */ - -const runWhenDOMLoaded = cb => { - if (document.readyState != 'loading') { - cb() - } else if (document.addEventListener) { - document.addEventListener('DOMContentLoaded', cb) - } else { - document.attachEvent('onreadystatechange', function() { - if (document.readyState == 'complete') cb() - }) - } -} - -const codeCellId = index => `codecell${index}` - -// Clears selected text since ClipboardJS will select the text when copying -const clearSelection = () => { - if (window.getSelection) { - window.getSelection().removeAllRanges() - } else if (document.selection) { - document.selection.empty() - } -} - -// Changes tooltip text for a moment, then changes it back -// We want the timeout of our `success` class to be a bit shorter than the -// tooltip and icon change, so that we can hide the icon before changing back. -var timeoutIcon = 2000; -var timeoutSuccessClass = 1500; - -const temporarilyChangeTooltip = (el, oldText, newText) => { - el.setAttribute('data-tooltip', newText) - el.classList.add('success') - // Remove success a little bit sooner than we change the tooltip - // So that we can use CSS to hide the copybutton first - setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) - setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) -} - -// Changes the copy button icon for two seconds, then changes it back -const temporarilyChangeIcon = (el) => { - el.innerHTML = iconCheck; - setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) -} - -const addCopyButtonToCodeCells = () => { - // If ClipboardJS hasn't loaded, wait a bit and try again. This - // happens because we load ClipboardJS asynchronously. - if (window.ClipboardJS === undefined) { - setTimeout(addCopyButtonToCodeCells, 250) - return - } - - // Add copybuttons to all of our code cells - const COPYBUTTON_SELECTOR = 'div.highlight pre'; - const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) - codeCells.forEach((codeCell, index) => { - const id = codeCellId(index) - codeCell.setAttribute('id', id) - - const clipboardButton = id => - `` - codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) - }) - -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} - -/** - * Removes excluded text from a Node. - * - * @param {Node} target Node to filter. - * @param {string} exclude CSS selector of nodes to exclude. - * @returns {DOMString} Text from `target` with text removed. - */ -function filterText(target, exclude) { - const clone = target.cloneNode(true); // clone as to not modify the live DOM - if (exclude) { - // remove excluded nodes - clone.querySelectorAll(exclude).forEach(node => node.remove()); - } - return clone.innerText; -} - -// Callback when a copy button is clicked. Will be passed the node that was clicked -// should then grab the text and replace pieces of text that shouldn't be used in output -function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { - var regexp; - var match; - - // Do we check for line continuation characters and "HERE-documents"? - var useLineCont = !!lineContinuationChar - var useHereDoc = !!hereDocDelim - - // create regexp to capture prompt and remaining line - if (isRegexp) { - regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') - } else { - regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') - } - - const outputLines = []; - var promptFound = false; - var gotLineCont = false; - var gotHereDoc = false; - const lineGotPrompt = []; - for (const line of textContent.split('\n')) { - match = line.match(regexp) - if (match || gotLineCont || gotHereDoc) { - promptFound = regexp.test(line) - lineGotPrompt.push(promptFound) - if (removePrompts && promptFound) { - outputLines.push(match[2]) - } else { - outputLines.push(line) - } - gotLineCont = line.endsWith(lineContinuationChar) & useLineCont - if (line.includes(hereDocDelim) & useHereDoc) - gotHereDoc = !gotHereDoc - } else if (!onlyCopyPromptLines) { - outputLines.push(line) - } else if (copyEmptyLines && line.trim() === '') { - outputLines.push(line) - } - } - - // If no lines with the prompt were found then just use original lines - if (lineGotPrompt.some(v => v === true)) { - textContent = outputLines.join('\n'); - } - - // Remove a trailing newline to avoid auto-running when pasting - if (textContent.endsWith("\n")) { - textContent = textContent.slice(0, -1) - } - return textContent -} - - -var copyTargetText = (trigger) => { - var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); - - // get filtered text - let exclude = '.linenos'; - - let text = filterText(target, exclude); - return formatCopyText(text, '', false, true, true, true, '', '') -} - - // Initialize with a callback so we can modify the text before copy - const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) - - // Update UI with error/success messages - clipboard.on('success', event => { - clearSelection() - temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) - temporarilyChangeIcon(event.trigger) - }) - - clipboard.on('error', event => { - temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) - }) -} - -runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js deleted file mode 100644 index dbe1aaad7..000000000 --- a/_static/copybutton_funcs.js +++ /dev/null @@ -1,73 +0,0 @@ -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} - -/** - * Removes excluded text from a Node. - * - * @param {Node} target Node to filter. - * @param {string} exclude CSS selector of nodes to exclude. - * @returns {DOMString} Text from `target` with text removed. - */ -export function filterText(target, exclude) { - const clone = target.cloneNode(true); // clone as to not modify the live DOM - if (exclude) { - // remove excluded nodes - clone.querySelectorAll(exclude).forEach(node => node.remove()); - } - return clone.innerText; -} - -// Callback when a copy button is clicked. Will be passed the node that was clicked -// should then grab the text and replace pieces of text that shouldn't be used in output -export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { - var regexp; - var match; - - // Do we check for line continuation characters and "HERE-documents"? - var useLineCont = !!lineContinuationChar - var useHereDoc = !!hereDocDelim - - // create regexp to capture prompt and remaining line - if (isRegexp) { - regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') - } else { - regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') - } - - const outputLines = []; - var promptFound = false; - var gotLineCont = false; - var gotHereDoc = false; - const lineGotPrompt = []; - for (const line of textContent.split('\n')) { - match = line.match(regexp) - if (match || gotLineCont || gotHereDoc) { - promptFound = regexp.test(line) - lineGotPrompt.push(promptFound) - if (removePrompts && promptFound) { - outputLines.push(match[2]) - } else { - outputLines.push(line) - } - gotLineCont = line.endsWith(lineContinuationChar) & useLineCont - if (line.includes(hereDocDelim) & useHereDoc) - gotHereDoc = !gotHereDoc - } else if (!onlyCopyPromptLines) { - outputLines.push(line) - } else if (copyEmptyLines && line.trim() === '') { - outputLines.push(line) - } - } - - // If no lines with the prompt were found then just use original lines - if (lineGotPrompt.some(v => v === true)) { - textContent = outputLines.join('\n'); - } - - // Remove a trailing newline to avoid auto-running when pasting - if (textContent.endsWith("\n")) { - textContent = textContent.slice(0, -1) - } - return textContent -} diff --git a/_static/custom-icon.js b/_static/custom-icon.js deleted file mode 100644 index ac9c6c91e..000000000 --- a/_static/custom-icon.js +++ /dev/null @@ -1,17 +0,0 @@ -/******************************************************************************* - * Set a custom icon for pypi as it's not available in the fa built-in brands - * Taken from: https://github.com/pydata/pydata-sphinx-theme/blob/main/docs/_static/custom-icon.js - */ -FontAwesome.library.add( - (faListOldStyle = { - prefix: "fa-custom", - iconName: "pypi", - icon: [ - 17.313, // viewBox width - 19.807, // viewBox height - [], // ligature - "e001", // unicode codepoint - private use area - "m10.383 0.2-3.239 1.1769 3.1883 1.1614 3.239-1.1798zm-3.4152 1.2411-3.2362 1.1769 3.1855 1.1614 3.2369-1.1769zm6.7177 0.00281-3.2947 1.2009v3.8254l3.2947-1.1988zm-3.4145 1.2439-3.2926 1.1981v3.8254l0.17548-0.064132 3.1171-1.1347zm-6.6564 0.018325v3.8247l3.244 1.1805v-3.8254zm10.191 0.20931v2.3137l3.1777-1.1558zm3.2947 1.2425-3.2947 1.1988v3.8254l3.2947-1.1988zm-8.7058 0.45739c0.00929-1.931e-4 0.018327-2.977e-4 0.027485 0 0.25633 0.00851 0.4263 0.20713 0.42638 0.49826 1.953e-4 0.38532-0.29327 0.80469-0.65542 0.93662-0.36226 0.13215-0.65608-0.073306-0.65613-0.4588-6.28e-5 -0.38556 0.2938-0.80504 0.65613-0.93662 0.068422-0.024919 0.13655-0.038114 0.20156-0.039466zm5.2913 0.78369-3.2947 1.1988v3.8247l3.2947-1.1981zm-10.132 1.239-3.2362 1.1769 3.1883 1.1614 3.2362-1.1769zm6.7177 0.00213-3.2926 1.2016v3.8247l3.2926-1.2009zm-3.4124 1.2439-3.2947 1.1988v3.8254l3.2947-1.1988zm-6.6585 0.016195v3.8275l3.244 1.1805v-3.8254zm16.9 0.21143-3.2947 1.1988v3.8247l3.2947-1.1981zm-3.4145 1.2411-3.2926 1.2016v3.8247l3.2926-1.2009zm-3.4145 1.2411-3.2926 1.2016v3.8247l3.2926-1.2009zm-3.4124 1.2432-3.2947 1.1988v3.8254l3.2947-1.1988zm-6.6585 0.019027v3.8247l3.244 1.1805v-3.8254zm13.485 1.4497-3.2947 1.1988v3.8247l3.2947-1.1981zm-3.4145 1.2411-3.2926 1.2016v3.8247l3.2926-1.2009zm2.4018 0.38127c0.0093-1.83e-4 0.01833-3.16e-4 0.02749 0 0.25633 0.0085 0.4263 0.20713 0.42638 0.49826 1.97e-4 0.38532-0.29327 0.80469-0.65542 0.93662-0.36188 0.1316-0.65525-0.07375-0.65542-0.4588-1.95e-4 -0.38532 0.29328-0.80469 0.65542-0.93662 0.06842-0.02494 0.13655-0.03819 0.20156-0.03947zm-5.8142 0.86403-3.244 1.1805v1.4201l3.244 1.1805z", // svg path (https://simpleicons.org/icons/pypi.svg) - ], - }) -); diff --git a/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css deleted file mode 100644 index eb19f698a..000000000 --- a/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css +++ /dev/null @@ -1 +0,0 @@ -.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/_static/design-tabs.js b/_static/design-tabs.js deleted file mode 100644 index 36b38cf0d..000000000 --- a/_static/design-tabs.js +++ /dev/null @@ -1,27 +0,0 @@ -var sd_labels_by_text = {}; - -function ready() { - const li = document.getElementsByClassName("sd-tab-label"); - for (const label of li) { - syncId = label.getAttribute("data-sync-id"); - if (syncId) { - label.onclick = onLabelClick; - if (!sd_labels_by_text[syncId]) { - sd_labels_by_text[syncId] = []; - } - sd_labels_by_text[syncId].push(label); - } - } -} - -function onLabelClick() { - // Activate other inputs with the same sync id. - syncId = this.getAttribute("data-sync-id"); - for (label of sd_labels_by_text[syncId]) { - if (label === this) continue; - label.previousElementSibling.checked = true; - } - window.localStorage.setItem("sphinx-design-last-tab", syncId); -} - -document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/doctools.js b/_static/doctools.js deleted file mode 100644 index d06a71d75..000000000 --- a/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", -]); - -const _ready = (callback) => { - if (document.readyState !== "loading") { - callback(); - } else { - document.addEventListener("DOMContentLoaded", callback); - } -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS: {}, - PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), - LOCALE: "unknown", - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext: (string) => { - const translated = Documentation.TRANSLATIONS[string]; - switch (typeof translated) { - case "undefined": - return string; // no translation - case "string": - return translated; // translation exists - default: - return translated[0]; // (singular, plural) translation tuple exists - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - initDomainIndexTable: () => { - const toggler = (el) => { - const idNumber = el.id.substr(7); - const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); - if (el.src.substr(-9) === "minus.png") { - el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; - toggledRows.forEach((el) => (el.style.display = "none")); - } else { - el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; - toggledRows.forEach((el) => (el.style.display = "")); - } - }; - - const togglerElements = document.querySelectorAll("img.toggler"); - togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) - ); - togglerElements.forEach((el) => (el.style.display = "")); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); - }, - - initOnKeyListeners: () => { - // only install a listener if it is really needed - if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS - ) - return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.altKey || event.ctrlKey || event.metaKey) return; - - if (!event.shiftKey) { - switch (event.key) { - case "ArrowLeft": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const prevLink = document.querySelector('link[rel="prev"]'); - if (prevLink && prevLink.href) { - window.location.href = prevLink.href; - event.preventDefault(); - } - break; - case "ArrowRight": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const nextLink = document.querySelector('link[rel="next"]'); - if (nextLink && nextLink.href) { - window.location.href = nextLink.href; - event.preventDefault(); - } - break; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case "/": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.focusSearchBar(); - event.preventDefault(); - } - }); - }, -}; - -// quick alias for translations -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js deleted file mode 100644 index 3e2db2d9b..000000000 --- a/_static/documentation_options.js +++ /dev/null @@ -1,13 +0,0 @@ -const DOCUMENTATION_OPTIONS = { - VERSION: 'v23.11', - LANGUAGE: 'en', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: true, -}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png deleted file mode 100644 index a858a410e4faa62ce324d814e4b816fff83a6fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( diff --git a/_static/graphviz.css b/_static/graphviz.css deleted file mode 100644 index 8d81c02ed..000000000 --- a/_static/graphviz.css +++ /dev/null @@ -1,19 +0,0 @@ -/* - * graphviz.css - * ~~~~~~~~~~~~ - * - * Sphinx stylesheet -- graphviz extension. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -img.graphviz { - border: 0; - max-width: 100%; -} - -object.graphviz { - max-width: 100%; -} diff --git a/_static/language_data.js b/_static/language_data.js deleted file mode 100644 index 250f5665f..000000000 --- a/_static/language_data.js +++ /dev/null @@ -1,199 +0,0 @@ -/* - * language_data.js - * ~~~~~~~~~~~~~~~~ - * - * This script contains the language-specific data used by searchtools.js, - * namely the list of stopwords, stemmer, scorer and splitter. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; - - -/* Non-minified version is copied as a separate JS file, is available */ - -/** - * Porter Stemmer - */ -var Stemmer = function() { - - var step2list = { - ational: 'ate', - tional: 'tion', - enci: 'ence', - anci: 'ance', - izer: 'ize', - bli: 'ble', - alli: 'al', - entli: 'ent', - eli: 'e', - ousli: 'ous', - ization: 'ize', - ation: 'ate', - ator: 'ate', - alism: 'al', - iveness: 'ive', - fulness: 'ful', - ousness: 'ous', - aliti: 'al', - iviti: 'ive', - biliti: 'ble', - logi: 'log' - }; - - var step3list = { - icate: 'ic', - ative: '', - alize: 'al', - iciti: 'ic', - ical: 'ic', - ful: '', - ness: '' - }; - - var c = "[^aeiou]"; // consonant - var v = "[aeiouy]"; // vowel - var C = c + "[^aeiouy]*"; // consonant sequence - var V = v + "[aeiou]*"; // vowel sequence - - var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - diff --git a/_static/minus.png b/_static/minus.png deleted file mode 100644 index d96755fdaf8bb2214971e0db9c1fd3077d7c419d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK diff --git a/_static/plus.png b/_static/plus.png deleted file mode 100644 index 7107cec93a979b9a5f64843235a16651d563ce2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz diff --git a/_static/pygments.css b/_static/pygments.css deleted file mode 100644 index 997797f27..000000000 --- a/_static/pygments.css +++ /dev/null @@ -1,152 +0,0 @@ -html[data-theme="light"] .highlight pre { line-height: 125%; } -html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -html[data-theme="light"] .highlight .hll { background-color: #7971292e } -html[data-theme="light"] .highlight { background: #fefefe; color: #545454 } -html[data-theme="light"] .highlight .c { color: #797129 } /* Comment */ -html[data-theme="light"] .highlight .err { color: #d91e18 } /* Error */ -html[data-theme="light"] .highlight .k { color: #7928a1 } /* Keyword */ -html[data-theme="light"] .highlight .l { color: #797129 } /* Literal */ -html[data-theme="light"] .highlight .n { color: #545454 } /* Name */ -html[data-theme="light"] .highlight .o { color: #008000 } /* Operator */ -html[data-theme="light"] .highlight .p { color: #545454 } /* Punctuation */ -html[data-theme="light"] .highlight .ch { color: #797129 } /* Comment.Hashbang */ -html[data-theme="light"] .highlight .cm { color: #797129 } /* Comment.Multiline */ -html[data-theme="light"] .highlight .cp { color: #797129 } /* Comment.Preproc */ -html[data-theme="light"] .highlight .cpf { color: #797129 } /* Comment.PreprocFile */ -html[data-theme="light"] .highlight .c1 { color: #797129 } /* Comment.Single */ -html[data-theme="light"] .highlight .cs { color: #797129 } /* Comment.Special */ -html[data-theme="light"] .highlight .gd { color: #007faa } /* Generic.Deleted */ -html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ -html[data-theme="light"] .highlight .gh { color: #007faa } /* Generic.Heading */ -html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ -html[data-theme="light"] .highlight .gu { color: #007faa } /* Generic.Subheading */ -html[data-theme="light"] .highlight .kc { color: #7928a1 } /* Keyword.Constant */ -html[data-theme="light"] .highlight .kd { color: #7928a1 } /* Keyword.Declaration */ -html[data-theme="light"] .highlight .kn { color: #7928a1 } /* Keyword.Namespace */ -html[data-theme="light"] .highlight .kp { color: #7928a1 } /* Keyword.Pseudo */ -html[data-theme="light"] .highlight .kr { color: #7928a1 } /* Keyword.Reserved */ -html[data-theme="light"] .highlight .kt { color: #797129 } /* Keyword.Type */ -html[data-theme="light"] .highlight .ld { color: #797129 } /* Literal.Date */ -html[data-theme="light"] .highlight .m { color: #797129 } /* Literal.Number */ -html[data-theme="light"] .highlight .s { color: #008000 } /* Literal.String */ -html[data-theme="light"] .highlight .na { color: #797129 } /* Name.Attribute */ -html[data-theme="light"] .highlight .nb { color: #797129 } /* Name.Builtin */ -html[data-theme="light"] .highlight .nc { color: #007faa } /* Name.Class */ -html[data-theme="light"] .highlight .no { color: #007faa } /* Name.Constant */ -html[data-theme="light"] .highlight .nd { color: #797129 } /* Name.Decorator */ -html[data-theme="light"] .highlight .ni { color: #008000 } /* Name.Entity */ -html[data-theme="light"] .highlight .ne { color: #7928a1 } /* Name.Exception */ -html[data-theme="light"] .highlight .nf { color: #007faa } /* Name.Function */ -html[data-theme="light"] .highlight .nl { color: #797129 } /* Name.Label */ -html[data-theme="light"] .highlight .nn { color: #545454 } /* Name.Namespace */ -html[data-theme="light"] .highlight .nx { color: #545454 } /* Name.Other */ -html[data-theme="light"] .highlight .py { color: #007faa } /* Name.Property */ -html[data-theme="light"] .highlight .nt { color: #007faa } /* Name.Tag */ -html[data-theme="light"] .highlight .nv { color: #d91e18 } /* Name.Variable */ -html[data-theme="light"] .highlight .ow { color: #7928a1 } /* Operator.Word */ -html[data-theme="light"] .highlight .pm { color: #545454 } /* Punctuation.Marker */ -html[data-theme="light"] .highlight .w { color: #545454 } /* Text.Whitespace */ -html[data-theme="light"] .highlight .mb { color: #797129 } /* Literal.Number.Bin */ -html[data-theme="light"] .highlight .mf { color: #797129 } /* Literal.Number.Float */ -html[data-theme="light"] .highlight .mh { color: #797129 } /* Literal.Number.Hex */ -html[data-theme="light"] .highlight .mi { color: #797129 } /* Literal.Number.Integer */ -html[data-theme="light"] .highlight .mo { color: #797129 } /* Literal.Number.Oct */ -html[data-theme="light"] .highlight .sa { color: #008000 } /* Literal.String.Affix */ -html[data-theme="light"] .highlight .sb { color: #008000 } /* Literal.String.Backtick */ -html[data-theme="light"] .highlight .sc { color: #008000 } /* Literal.String.Char */ -html[data-theme="light"] .highlight .dl { color: #008000 } /* Literal.String.Delimiter */ -html[data-theme="light"] .highlight .sd { color: #008000 } /* Literal.String.Doc */ -html[data-theme="light"] .highlight .s2 { color: #008000 } /* Literal.String.Double */ -html[data-theme="light"] .highlight .se { color: #008000 } /* Literal.String.Escape */ -html[data-theme="light"] .highlight .sh { color: #008000 } /* Literal.String.Heredoc */ -html[data-theme="light"] .highlight .si { color: #008000 } /* Literal.String.Interpol */ -html[data-theme="light"] .highlight .sx { color: #008000 } /* Literal.String.Other */ -html[data-theme="light"] .highlight .sr { color: #d91e18 } /* Literal.String.Regex */ -html[data-theme="light"] .highlight .s1 { color: #008000 } /* Literal.String.Single */ -html[data-theme="light"] .highlight .ss { color: #007faa } /* Literal.String.Symbol */ -html[data-theme="light"] .highlight .bp { color: #797129 } /* Name.Builtin.Pseudo */ -html[data-theme="light"] .highlight .fm { color: #007faa } /* Name.Function.Magic */ -html[data-theme="light"] .highlight .vc { color: #d91e18 } /* Name.Variable.Class */ -html[data-theme="light"] .highlight .vg { color: #d91e18 } /* Name.Variable.Global */ -html[data-theme="light"] .highlight .vi { color: #d91e18 } /* Name.Variable.Instance */ -html[data-theme="light"] .highlight .vm { color: #797129 } /* Name.Variable.Magic */ -html[data-theme="light"] .highlight .il { color: #797129 } /* Literal.Number.Integer.Long */ -html[data-theme="dark"] .highlight pre { line-height: 125%; } -html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } -html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } -html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ -html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ -html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ -html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ -html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ -html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ -html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ -html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ -html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ -html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ -html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ -html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ -html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ -html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ -html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ -html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ -html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ -html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ -html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ -html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ -html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ -html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ -html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ -html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ -html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ -html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ -html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ -html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ -html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ -html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ -html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ -html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ -html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ -html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ -html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ -html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ -html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ -html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ -html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ -html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ -html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ -html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ -html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ -html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ -html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ -html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ -html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ -html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ -html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ -html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ -html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ -html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ -html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ -html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ -html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ -html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ -html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ -html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ -html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ -html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ -html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ -html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ -html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ -html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ -html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ -html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ -html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ -html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ -html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/scripts/bootstrap.js b/_static/scripts/bootstrap.js deleted file mode 100644 index bda8a6027..000000000 --- a/_static/scripts/bootstrap.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see bootstrap.js.LICENSE.txt */ -(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>w,afterRead:()=>b,afterWrite:()=>T,applyStyles:()=>D,arrow:()=>G,auto:()=>r,basePlacements:()=>a,beforeMain:()=>v,beforeRead:()=>g,beforeWrite:()=>E,bottom:()=>n,clippingParents:()=>h,computeStyles:()=>et,createPopper:()=>St,createPopperBase:()=>Lt,createPopperLite:()=>Dt,detectOverflow:()=>gt,end:()=>c,eventListeners:()=>nt,flip:()=>_t,hide:()=>yt,left:()=>o,main:()=>y,modifierPhases:()=>C,offset:()=>wt,placements:()=>m,popper:()=>u,popperGenerator:()=>kt,popperOffsets:()=>Et,preventOverflow:()=>At,read:()=>_,reference:()=>f,right:()=>s,start:()=>l,top:()=>i,variationPlacements:()=>p,viewport:()=>d,write:()=>A});var i="top",n="bottom",s="right",o="left",r="auto",a=[i,n,s,o],l="start",c="end",h="clippingParents",d="viewport",u="popper",f="reference",p=a.reduce((function(t,e){return t.concat([e+"-"+l,e+"-"+c])}),[]),m=[].concat(a,[r]).reduce((function(t,e){return t.concat([e,e+"-"+l,e+"-"+c])}),[]),g="beforeRead",_="read",b="afterRead",v="beforeMain",y="main",w="afterMain",E="beforeWrite",A="write",T="afterWrite",C=[g,_,b,v,y,w,E,A,T];function O(t){return t?(t.nodeName||"").toLowerCase():null}function x(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function k(t){return t instanceof x(t).Element||t instanceof Element}function L(t){return t instanceof x(t).HTMLElement||t instanceof HTMLElement}function S(t){return"undefined"!=typeof ShadowRoot&&(t instanceof x(t).ShadowRoot||t instanceof ShadowRoot)}const D={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];L(s)&&O(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});L(n)&&O(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function $(t){return t.split("-")[0]}var I=Math.max,N=Math.min,P=Math.round;function M(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function j(){return!/^((?!chrome|android).)*safari/i.test(M())}function F(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&L(t)&&(s=t.offsetWidth>0&&P(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&P(n.height)/t.offsetHeight||1);var r=(k(t)?x(t):window).visualViewport,a=!j()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function H(t){var e=F(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function B(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&S(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function W(t){return x(t).getComputedStyle(t)}function z(t){return["table","td","th"].indexOf(O(t))>=0}function R(t){return((k(t)?t.ownerDocument:t.document)||window.document).documentElement}function q(t){return"html"===O(t)?t:t.assignedSlot||t.parentNode||(S(t)?t.host:null)||R(t)}function V(t){return L(t)&&"fixed"!==W(t).position?t.offsetParent:null}function Y(t){for(var e=x(t),i=V(t);i&&z(i)&&"static"===W(i).position;)i=V(i);return i&&("html"===O(i)||"body"===O(i)&&"static"===W(i).position)?e:i||function(t){var e=/firefox/i.test(M());if(/Trident/i.test(M())&&L(t)&&"fixed"===W(t).position)return null;var i=q(t);for(S(i)&&(i=i.host);L(i)&&["html","body"].indexOf(O(i))<0;){var n=W(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function K(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Q(t,e,i){return I(t,N(e,i))}function X(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function U(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const G={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,r=t.state,l=t.name,c=t.options,h=r.elements.arrow,d=r.modifiersData.popperOffsets,u=$(r.placement),f=K(u),p=[o,s].indexOf(u)>=0?"height":"width";if(h&&d){var m=function(t,e){return X("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:U(t,a))}(c.padding,r),g=H(h),_="y"===f?i:o,b="y"===f?n:s,v=r.rects.reference[p]+r.rects.reference[f]-d[f]-r.rects.popper[p],y=d[f]-r.rects.reference[f],w=Y(h),E=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,A=v/2-y/2,T=m[_],C=E-g[p]-m[b],O=E/2-g[p]/2+A,x=Q(T,O,C),k=f;r.modifiersData[l]=((e={})[k]=x,e.centerOffset=x-O,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&B(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function J(t){return t.split("-")[1]}var Z={top:"auto",right:"auto",bottom:"auto",left:"auto"};function tt(t){var e,r=t.popper,a=t.popperRect,l=t.placement,h=t.variation,d=t.offsets,u=t.position,f=t.gpuAcceleration,p=t.adaptive,m=t.roundOffsets,g=t.isFixed,_=d.x,b=void 0===_?0:_,v=d.y,y=void 0===v?0:v,w="function"==typeof m?m({x:b,y}):{x:b,y};b=w.x,y=w.y;var E=d.hasOwnProperty("x"),A=d.hasOwnProperty("y"),T=o,C=i,O=window;if(p){var k=Y(r),L="clientHeight",S="clientWidth";k===x(r)&&"static"!==W(k=R(r)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===i||(l===o||l===s)&&h===c)&&(C=n,y-=(g&&k===O&&O.visualViewport?O.visualViewport.height:k[L])-a.height,y*=f?1:-1),l!==o&&(l!==i&&l!==n||h!==c)||(T=s,b-=(g&&k===O&&O.visualViewport?O.visualViewport.width:k[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&Z),I=!0===m?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:P(i*s)/s||0,y:P(n*s)/s||0}}({x:b,y},x(r)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},$,((D={})[C]=A?"0":"",D[T]=E?"0":"",D.transform=(O.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",D)):Object.assign({},$,((e={})[C]=A?y+"px":"",e[T]=E?b+"px":"",e.transform="",e))}const et={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:$(e.placement),variation:J(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,tt(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,tt(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var it={passive:!0};const nt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=x(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,it)})),a&&l.addEventListener("resize",i.update,it),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,it)})),a&&l.removeEventListener("resize",i.update,it)}},data:{}};var st={left:"right",right:"left",bottom:"top",top:"bottom"};function ot(t){return t.replace(/left|right|bottom|top/g,(function(t){return st[t]}))}var rt={start:"end",end:"start"};function at(t){return t.replace(/start|end/g,(function(t){return rt[t]}))}function lt(t){var e=x(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ct(t){return F(R(t)).left+lt(t).scrollLeft}function ht(t){var e=W(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function dt(t){return["html","body","#document"].indexOf(O(t))>=0?t.ownerDocument.body:L(t)&&ht(t)?t:dt(q(t))}function ut(t,e){var i;void 0===e&&(e=[]);var n=dt(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=x(n),r=s?[o].concat(o.visualViewport||[],ht(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ut(q(r)))}function ft(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function pt(t,e,i){return e===d?ft(function(t,e){var i=x(t),n=R(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=j();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ct(t),y:l}}(t,i)):k(e)?function(t,e){var i=F(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):ft(function(t){var e,i=R(t),n=lt(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=I(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=I(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ct(t),l=-n.scrollTop;return"rtl"===W(s||i).direction&&(a+=I(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(R(t)))}function mt(t){var e,r=t.reference,a=t.element,h=t.placement,d=h?$(h):null,u=h?J(h):null,f=r.x+r.width/2-a.width/2,p=r.y+r.height/2-a.height/2;switch(d){case i:e={x:f,y:r.y-a.height};break;case n:e={x:f,y:r.y+r.height};break;case s:e={x:r.x+r.width,y:p};break;case o:e={x:r.x-a.width,y:p};break;default:e={x:r.x,y:r.y}}var m=d?K(d):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case l:e[m]=e[m]-(r[g]/2-a[g]/2);break;case c:e[m]=e[m]+(r[g]/2-a[g]/2)}}return e}function gt(t,e){void 0===e&&(e={});var o=e,r=o.placement,l=void 0===r?t.placement:r,c=o.strategy,p=void 0===c?t.strategy:c,m=o.boundary,g=void 0===m?h:m,_=o.rootBoundary,b=void 0===_?d:_,v=o.elementContext,y=void 0===v?u:v,w=o.altBoundary,E=void 0!==w&&w,A=o.padding,T=void 0===A?0:A,C=X("number"!=typeof T?T:U(T,a)),x=y===u?f:u,S=t.rects.popper,D=t.elements[E?x:y],$=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ut(q(t)),i=["absolute","fixed"].indexOf(W(t).position)>=0&&L(t)?Y(t):t;return k(i)?e.filter((function(t){return k(t)&&B(t,i)&&"body"!==O(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=pt(t,i,n);return e.top=I(s.top,e.top),e.right=N(s.right,e.right),e.bottom=N(s.bottom,e.bottom),e.left=I(s.left,e.left),e}),pt(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(k(D)?D:D.contextElement||R(t.elements.popper),g,b,p),P=F(t.elements.reference),M=mt({reference:P,element:S,strategy:"absolute",placement:l}),j=ft(Object.assign({},S,M)),H=y===u?j:P,z={top:$.top-H.top+C.top,bottom:H.bottom-$.bottom+C.bottom,left:$.left-H.left+C.left,right:H.right-$.right+C.right},V=t.modifiersData.offset;if(y===u&&V){var K=V[l];Object.keys(z).forEach((function(t){var e=[s,n].indexOf(t)>=0?1:-1,o=[i,n].indexOf(t)>=0?"y":"x";z[t]+=K[o]*e}))}return z}const _t={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,c=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=c.mainAxis,u=void 0===d||d,f=c.altAxis,g=void 0===f||f,_=c.fallbackPlacements,b=c.padding,v=c.boundary,y=c.rootBoundary,w=c.altBoundary,E=c.flipVariations,A=void 0===E||E,T=c.allowedAutoPlacements,C=e.options.placement,O=$(C),x=_||(O!==C&&A?function(t){if($(t)===r)return[];var e=ot(t);return[at(t),e,at(e)]}(C):[ot(C)]),k=[C].concat(x).reduce((function(t,i){return t.concat($(i)===r?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,l=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?m:c,d=J(n),u=d?l?p:p.filter((function(t){return J(t)===d})):a,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var g=f.reduce((function(e,i){return e[i]=gt(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[$(i)],e}),{});return Object.keys(g).sort((function(t,e){return g[t]-g[e]}))}(e,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:A,allowedAutoPlacements:T}):i)}),[]),L=e.rects.reference,S=e.rects.popper,D=new Map,I=!0,N=k[0],P=0;P=0,B=H?"width":"height",W=gt(e,{placement:M,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=H?F?s:o:F?n:i;L[B]>S[B]&&(z=ot(z));var R=ot(z),q=[];if(u&&q.push(W[j]<=0),g&&q.push(W[z]<=0,W[R]<=0),q.every((function(t){return t}))){N=M,I=!1;break}D.set(M,q)}if(I)for(var V=function(t){var e=k.find((function(e){var i=D.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return N=e,"break"},Y=A?3:1;Y>0&&"break"!==V(Y);Y--);e.placement!==N&&(e.modifiersData[h]._skip=!0,e.placement=N,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function bt(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function vt(t){return[i,s,n,o].some((function(e){return t[e]>=0}))}const yt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=gt(e,{elementContext:"reference"}),a=gt(e,{altBoundary:!0}),l=bt(r,n),c=bt(a,s,o),h=vt(l),d=vt(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},wt={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,n=t.options,r=t.name,a=n.offset,l=void 0===a?[0,0]:a,c=m.reduce((function(t,n){return t[n]=function(t,e,n){var r=$(t),a=[o,i].indexOf(r)>=0?-1:1,l="function"==typeof n?n(Object.assign({},e,{placement:t})):n,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[o,s].indexOf(r)>=0?{x:h,y:c}:{x:c,y:h}}(n,e.rects,l),t}),{}),h=c[e.placement],d=h.x,u=h.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=d,e.modifiersData.popperOffsets.y+=u),e.modifiersData[r]=c}},Et={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=mt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},At={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,r=t.options,a=t.name,c=r.mainAxis,h=void 0===c||c,d=r.altAxis,u=void 0!==d&&d,f=r.boundary,p=r.rootBoundary,m=r.altBoundary,g=r.padding,_=r.tether,b=void 0===_||_,v=r.tetherOffset,y=void 0===v?0:v,w=gt(e,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=$(e.placement),A=J(e.placement),T=!A,C=K(E),O="x"===C?"y":"x",x=e.modifiersData.popperOffsets,k=e.rects.reference,L=e.rects.popper,S="function"==typeof y?y(Object.assign({},e.rects,{placement:e.placement})):y,D="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),P=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,M={x:0,y:0};if(x){if(h){var j,F="y"===C?i:o,B="y"===C?n:s,W="y"===C?"height":"width",z=x[C],R=z+w[F],q=z-w[B],V=b?-L[W]/2:0,X=A===l?k[W]:L[W],U=A===l?-L[W]:-k[W],G=e.elements.arrow,Z=b&&G?H(G):{width:0,height:0},tt=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[F],it=tt[B],nt=Q(0,k[W],Z[W]),st=T?k[W]/2-V-nt-et-D.mainAxis:X-nt-et-D.mainAxis,ot=T?-k[W]/2+V+nt+it+D.mainAxis:U+nt+it+D.mainAxis,rt=e.elements.arrow&&Y(e.elements.arrow),at=rt?"y"===C?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(j=null==P?void 0:P[C])?j:0,ct=z+ot-lt,ht=Q(b?N(R,z+st-lt-at):R,z,b?I(q,ct):q);x[C]=ht,M[C]=ht-z}if(u){var dt,ut="x"===C?i:o,ft="x"===C?n:s,pt=x[O],mt="y"===O?"height":"width",_t=pt+w[ut],bt=pt-w[ft],vt=-1!==[i,o].indexOf(E),yt=null!=(dt=null==P?void 0:P[O])?dt:0,wt=vt?_t:pt-k[mt]-L[mt]-yt+D.altAxis,Et=vt?pt+k[mt]+L[mt]-yt-D.altAxis:bt,At=b&&vt?function(t,e,i){var n=Q(t,e,i);return n>i?i:n}(wt,pt,Et):Q(b?wt:_t,pt,b?Et:bt);x[O]=At,M[O]=At-pt}e.modifiersData[a]=M}},requiresIfExists:["offset"]};function Tt(t,e,i){void 0===i&&(i=!1);var n,s,o=L(e),r=L(e)&&function(t){var e=t.getBoundingClientRect(),i=P(e.width)/t.offsetWidth||1,n=P(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=R(e),l=F(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==O(e)||ht(a))&&(c=(n=e)!==x(n)&&L(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:lt(n)),L(e)?((h=F(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ct(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ct(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Ot={placement:"bottom",modifiers:[],strategy:"absolute"};function xt(){for(var t=arguments.length,e=new Array(t),i=0;i$t.has(t)&&$t.get(t).get(e)||null,remove(t,e){if(!$t.has(t))return;const i=$t.get(t);i.delete(e),0===i.size&&$t.delete(t)}},Nt="transitionend",Pt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),Mt=t=>{t.dispatchEvent(new Event(Nt))},jt=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ft=t=>jt(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Pt(t)):null,Ht=t=>{if(!jt(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},Bt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),Wt=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?Wt(t.parentNode):null},zt=()=>{},Rt=t=>{t.offsetHeight},qt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Vt=[],Yt=()=>"rtl"===document.documentElement.dir,Kt=t=>{var e;e=()=>{const e=qt();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(Vt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Vt)t()})),Vt.push(e)):e()},Qt=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,Xt=(t,e,i=!0)=>{if(!i)return void Qt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let s=!1;const o=({target:i})=>{i===e&&(s=!0,e.removeEventListener(Nt,o),Qt(t))};e.addEventListener(Nt,o),setTimeout((()=>{s||Mt(e)}),n)},Ut=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},Gt=/[^.]*(?=\..*)\.|.*/,Jt=/\..*/,Zt=/::\d+$/,te={};let ee=1;const ie={mouseenter:"mouseover",mouseleave:"mouseout"},ne=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function se(t,e){return e&&`${e}::${ee++}`||t.uidEvent||ee++}function oe(t){const e=se(t);return t.uidEvent=e,te[e]=te[e]||{},te[e]}function re(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function ae(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=de(t);return ne.has(o)||(o=t),[n,s,o]}function le(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=ae(e,i,n);if(e in ie){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=oe(t),c=l[a]||(l[a]={}),h=re(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=se(r,e.replace(Gt,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return fe(s,{delegateTarget:r}),n.oneOff&&ue.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return fe(n,{delegateTarget:t}),i.oneOff&&ue.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function ce(t,e,i,n,s){const o=re(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function he(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&ce(t,e,i,r.callable,r.delegationSelector)}function de(t){return t=t.replace(Jt,""),ie[t]||t}const ue={on(t,e,i,n){le(t,e,i,n,!1)},one(t,e,i,n){le(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=ae(e,i,n),a=r!==e,l=oe(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))he(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(Zt,"");a&&!e.includes(s)||ce(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;ce(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=qt();let s=null,o=!0,r=!0,a=!1;e!==de(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=fe(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function fe(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function pe(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function me(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const ge={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${me(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${me(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=pe(t.dataset[n])}return e},getDataAttribute:(t,e)=>pe(t.getAttribute(`data-bs-${me(e)}`))};class _e{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=jt(e)?ge.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...jt(e)?ge.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],o=jt(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${o}" but expected type "${s}".`)}var i}}class be extends _e{constructor(t,e){super(),(t=Ft(t))&&(this._element=t,this._config=this._getConfig(e),It.set(this._element,this.constructor.DATA_KEY,this))}dispose(){It.remove(this._element,this.constructor.DATA_KEY),ue.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Xt(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return It.get(Ft(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.2"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const ve=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?Pt(i.trim()):null}return e},ye={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!Bt(t)&&Ht(t)))},getSelectorFromElement(t){const e=ve(t);return e&&ye.findOne(e)?e:null},getElementFromSelector(t){const e=ve(t);return e?ye.findOne(e):null},getMultipleElementsFromSelector(t){const e=ve(t);return e?ye.find(e):[]}},we=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;ue.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Bt(this))return;const s=ye.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ee=".bs.alert",Ae=`close${Ee}`,Te=`closed${Ee}`;class Ce extends be{static get NAME(){return"alert"}close(){if(ue.trigger(this._element,Ae).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),ue.trigger(this._element,Te),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Ce.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}we(Ce,"close"),Kt(Ce);const Oe='[data-bs-toggle="button"]';class xe extends be{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=xe.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}ue.on(document,"click.bs.button.data-api",Oe,(t=>{t.preventDefault();const e=t.target.closest(Oe);xe.getOrCreateInstance(e).toggle()})),Kt(xe);const ke=".bs.swipe",Le=`touchstart${ke}`,Se=`touchmove${ke}`,De=`touchend${ke}`,$e=`pointerdown${ke}`,Ie=`pointerup${ke}`,Ne={endCallback:null,leftCallback:null,rightCallback:null},Pe={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Me extends _e{constructor(t,e){super(),this._element=t,t&&Me.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Ne}static get DefaultType(){return Pe}static get NAME(){return"swipe"}dispose(){ue.off(this._element,ke)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Qt(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&Qt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(ue.on(this._element,$e,(t=>this._start(t))),ue.on(this._element,Ie,(t=>this._end(t))),this._element.classList.add("pointer-event")):(ue.on(this._element,Le,(t=>this._start(t))),ue.on(this._element,Se,(t=>this._move(t))),ue.on(this._element,De,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const je=".bs.carousel",Fe=".data-api",He="next",Be="prev",We="left",ze="right",Re=`slide${je}`,qe=`slid${je}`,Ve=`keydown${je}`,Ye=`mouseenter${je}`,Ke=`mouseleave${je}`,Qe=`dragstart${je}`,Xe=`load${je}${Fe}`,Ue=`click${je}${Fe}`,Ge="carousel",Je="active",Ze=".active",ti=".carousel-item",ei=Ze+ti,ii={ArrowLeft:ze,ArrowRight:We},ni={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},si={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class oi extends be{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=ye.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===Ge&&this.cycle()}static get Default(){return ni}static get DefaultType(){return si}static get NAME(){return"carousel"}next(){this._slide(He)}nextWhenVisible(){!document.hidden&&Ht(this._element)&&this.next()}prev(){this._slide(Be)}pause(){this._isSliding&&Mt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?ue.one(this._element,qe,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void ue.one(this._element,qe,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?He:Be;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&ue.on(this._element,Ve,(t=>this._keydown(t))),"hover"===this._config.pause&&(ue.on(this._element,Ye,(()=>this.pause())),ue.on(this._element,Ke,(()=>this._maybeEnableCycle()))),this._config.touch&&Me.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of ye.find(".carousel-item img",this._element))ue.on(t,Qe,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(We)),rightCallback:()=>this._slide(this._directionToOrder(ze)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new Me(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=ii[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=ye.findOne(Ze,this._indicatorsElement);e.classList.remove(Je),e.removeAttribute("aria-current");const i=ye.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(Je),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===He,s=e||Ut(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>ue.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(Re).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),Rt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(Je),i.classList.remove(Je,c,l),this._isSliding=!1,r(qe)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return ye.findOne(ei,this._element)}_getItems(){return ye.find(ti,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Yt()?t===We?Be:He:t===We?He:Be}_orderToDirection(t){return Yt()?t===Be?We:ze:t===Be?ze:We}static jQueryInterface(t){return this.each((function(){const e=oi.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}ue.on(document,Ue,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=ye.getElementFromSelector(this);if(!e||!e.classList.contains(Ge))return;t.preventDefault();const i=oi.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===ge.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),ue.on(window,Xe,(()=>{const t=ye.find('[data-bs-ride="carousel"]');for(const e of t)oi.getOrCreateInstance(e)})),Kt(oi);const ri=".bs.collapse",ai=`show${ri}`,li=`shown${ri}`,ci=`hide${ri}`,hi=`hidden${ri}`,di=`click${ri}.data-api`,ui="show",fi="collapse",pi="collapsing",mi=`:scope .${fi} .${fi}`,gi='[data-bs-toggle="collapse"]',_i={parent:null,toggle:!0},bi={parent:"(null|element)",toggle:"boolean"};class vi extends be{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=ye.find(gi);for(const t of i){const e=ye.getSelectorFromElement(t),i=ye.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return _i}static get DefaultType(){return bi}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>vi.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(ue.trigger(this._element,ai).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(fi),this._element.classList.add(pi),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pi),this._element.classList.add(fi,ui),this._element.style[e]="",ue.trigger(this._element,li)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(ue.trigger(this._element,ci).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,Rt(this._element),this._element.classList.add(pi),this._element.classList.remove(fi,ui);for(const t of this._triggerArray){const e=ye.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pi),this._element.classList.add(fi),ue.trigger(this._element,hi)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(ui)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ft(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(gi);for(const e of t){const t=ye.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=ye.find(mi,this._config.parent);return ye.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=vi.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}ue.on(document,di,gi,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of ye.getMultipleElementsFromSelector(this))vi.getOrCreateInstance(t,{toggle:!1}).toggle()})),Kt(vi);const yi="dropdown",wi=".bs.dropdown",Ei=".data-api",Ai="ArrowUp",Ti="ArrowDown",Ci=`hide${wi}`,Oi=`hidden${wi}`,xi=`show${wi}`,ki=`shown${wi}`,Li=`click${wi}${Ei}`,Si=`keydown${wi}${Ei}`,Di=`keyup${wi}${Ei}`,$i="show",Ii='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Ni=`${Ii}.${$i}`,Pi=".dropdown-menu",Mi=Yt()?"top-end":"top-start",ji=Yt()?"top-start":"top-end",Fi=Yt()?"bottom-end":"bottom-start",Hi=Yt()?"bottom-start":"bottom-end",Bi=Yt()?"left-start":"right-start",Wi=Yt()?"right-start":"left-start",zi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Ri={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class qi extends be{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=ye.next(this._element,Pi)[0]||ye.prev(this._element,Pi)[0]||ye.findOne(Pi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return zi}static get DefaultType(){return Ri}static get NAME(){return yi}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Bt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!ue.trigger(this._element,xi,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))ue.on(t,"mouseover",zt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add($i),this._element.classList.add($i),ue.trigger(this._element,ki,t)}}hide(){if(Bt(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!ue.trigger(this._element,Ci,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))ue.off(t,"mouseover",zt);this._popper&&this._popper.destroy(),this._menu.classList.remove($i),this._element.classList.remove($i),this._element.setAttribute("aria-expanded","false"),ge.removeDataAttribute(this._menu,"popper"),ue.trigger(this._element,Oi,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!jt(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${yi.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===e)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:jt(this._config.reference)?t=Ft(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=St(t,this._menu,i)}_isShown(){return this._menu.classList.contains($i)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Bi;if(t.classList.contains("dropstart"))return Wi;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ji:Mi:e?Hi:Fi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(ge.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Qt(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=ye.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Ht(t)));i.length&&Ut(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=ye.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ai,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:ye.prev(this,Ii)[0]||ye.next(this,Ii)[0]||ye.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}ue.on(document,Si,Ii,qi.dataApiKeydownHandler),ue.on(document,Si,Pi,qi.dataApiKeydownHandler),ue.on(document,Li,qi.clearMenus),ue.on(document,Di,qi.clearMenus),ue.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),Kt(qi);const Vi="backdrop",Yi="show",Ki=`mousedown.bs.${Vi}`,Qi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Xi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends _e{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Qi}static get DefaultType(){return Xi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void Qt(t);this._append();const e=this._getElement();this._config.isAnimated&&Rt(e),e.classList.add(Yi),this._emulateAnimation((()=>{Qt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Yi),this._emulateAnimation((()=>{this.dispose(),Qt(t)}))):Qt(t)}dispose(){this._isAppended&&(ue.off(this._element,Ki),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=Ft(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),ue.on(t,Ki,(()=>{Qt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Xt(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends _e{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),ue.off(document,Gi),ue.on(document,Ji,(t=>this._handleFocusin(t))),ue.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,ue.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=ye.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&ge.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=ge.getDataAttribute(t,e);null!==i?(ge.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(jt(t))e(t);else for(const i of ye.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",En="show",An="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends be{constructor(t,e){super(t,e),this._dialog=ye.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||ue.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(ue.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(En),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){ue.off(window,hn),ue.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=ye.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),Rt(this._element),this._element.classList.add(En),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,ue.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){ue.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),ue.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),ue.on(this._element,bn,(t=>{ue.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),ue.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(ue.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(An)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(An),this._queueCallback((()=>{this._element.classList.remove(An),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=Yt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Yt()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}ue.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=ye.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),ue.one(e,pn,(t=>{t.defaultPrevented||ue.one(e,fn,(()=>{Ht(this)&&this.focus()}))}));const i=ye.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),we(On),Kt(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Bn=`click${xn}${kn}`,Wn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends be{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||ue.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),ue.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(ue.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),ue.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():ue.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){ue.on(this._element,Wn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():ue.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}ue.on(document,Bn,'[data-bs-toggle="offcanvas"]',(function(t){const e=ye.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Bt(this))return;ue.one(e,Fn,(()=>{Ht(this)&&this.focus()}));const i=ye.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),ue.on(window,Ln,(()=>{for(const t of ye.find(In))qn.getOrCreateInstance(t).show()})),ue.on(window,Hn,(()=>{for(const t of ye.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),we(qn),Kt(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Yn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Kn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Qn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Yn.has(i)||Boolean(Kn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Xn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends _e{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Xn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=ye.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?jt(e)?this._putElementInTemplate(Ft(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Qn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Qt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:Yt()?"left":"right",BOTTOM:"bottom",LEFT:Yt()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends be{constructor(t,i){if(void 0===e)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),ue.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=ue.trigger(this._element,this.constructor.eventName("show")),e=(Wt(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),ue.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))ue.on(t,"mouseover",zt);this._queueCallback((()=>{ue.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!ue.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))ue.off(t,"mouseover",zt);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),ue.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=Qt(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return St(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return Qt(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...Qt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)ue.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");ue.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),ue.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},ue.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=ge.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:Ft(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Kt(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Kt(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Es={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class As extends be{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return Es}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=Ft(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(ue.off(this._config.target,ms),ue.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=ye.find(bs,this._config.target);for(const e of t){if(!e.hash||Bt(e))continue;const t=ye.findOne(decodeURI(e.hash),this._element);Ht(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),ue.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))ye.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of ye.parents(t,".nav, .list-group"))for(const t of ye.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=ye.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=As.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}ue.on(window,gs,(()=>{for(const t of ye.find('[data-bs-spy="scroll"]'))As.getOrCreateInstance(t)})),Kt(As);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Bs="show",Ws=".dropdown-toggle",zs=`:not(${Ws})`,Rs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',qs=`.nav-link${zs}, .list-group-item${zs}, [role="tab"]${zs}, ${Rs}`,Vs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Ys extends be{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),ue.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?ue.trigger(e,Cs,{relatedTarget:t}):null;ue.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(ye.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),ue.trigger(t,ks,{relatedTarget:e})):t.classList.add(Bs)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(ye.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),ue.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Bs)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!Bt(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=Ut(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Ys.getOrCreateInstance(i).show())}_getChildren(){return ye.find(qs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=ye.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=ye.findOne(t,i);s&&s.classList.toggle(n,e)};n(Ws,Fs),n(".dropdown-menu",Bs),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(qs)?t:ye.findOne(qs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Ys.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}ue.on(document,Ls,Rs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Bt(this)||Ys.getOrCreateInstance(this).show()})),ue.on(window,Ds,(()=>{for(const t of ye.find(Vs))Ys.getOrCreateInstance(t)})),Kt(Ys);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Us=`focusin${Ks}`,Gs=`focusout${Ks}`,Js=`hide${Ks}`,Zs=`hidden${Ks}`,to=`show${Ks}`,eo=`shown${Ks}`,io="hide",no="show",so="showing",oo={animation:"boolean",autohide:"boolean",delay:"number"},ro={animation:!0,autohide:!0,delay:5e3};class ao extends be{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ro}static get DefaultType(){return oo}static get NAME(){return"toast"}show(){ue.trigger(this._element,to).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(io),Rt(this._element),this._element.classList.add(no,so),this._queueCallback((()=>{this._element.classList.remove(so),ue.trigger(this._element,eo),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(ue.trigger(this._element,Js).defaultPrevented||(this._element.classList.add(so),this._queueCallback((()=>{this._element.classList.add(io),this._element.classList.remove(so,no),ue.trigger(this._element,Zs)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(no),super.dispose()}isShown(){return this._element.classList.contains(no)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){ue.on(this._element,Qs,(t=>this._onInteraction(t,!0))),ue.on(this._element,Xs,(t=>this._onInteraction(t,!1))),ue.on(this._element,Us,(t=>this._onInteraction(t,!0))),ue.on(this._element,Gs,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ao.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function lo(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}we(ao),Kt(ao),lo((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new cs(t,{delay:{show:500,hide:100}})}))})),lo((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),lo((function(){var t=document.getElementById("pst-back-to-top"),e=document.getElementsByClassName("bd-header")[0].getBoundingClientRect();window.addEventListener("scroll",(function(){this.oldScroll>this.scrollY&&this.scrollY>e.bottom?t.style.display="block":t.style.display="none",this.oldScroll=this.scrollY}))}))})(); -//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/_static/scripts/bootstrap.js.LICENSE.txt b/_static/scripts/bootstrap.js.LICENSE.txt deleted file mode 100644 index 10f979d07..000000000 --- a/_static/scripts/bootstrap.js.LICENSE.txt +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Bootstrap v5.3.2 (https://getbootstrap.com/) - * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ diff --git a/_static/scripts/bootstrap.js.map b/_static/scripts/bootstrap.js.map deleted file mode 100644 index e5bc15752..000000000 --- a/_static/scripts/bootstrap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"scripts/bootstrap.js","mappings":"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","sources":["webpack://pydata_sphinx_theme/webpack/bootstrap","webpack://pydata_sphinx_theme/webpack/runtime/define property getters","webpack://pydata_sphinx_theme/webpack/runtime/hasOwnProperty shorthand","webpack://pydata_sphinx_theme/webpack/runtime/make namespace object","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/enums.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/math.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/within.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/createPopper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://pydata_sphinx_theme/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/bootstrap.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n }\n return selector;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\n\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\n\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
' + '
' + '
' + '
',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' + '
' + '

' + '
' + '
',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both